From 637c07798a97978f3c24de11c2678b5580ca264f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Frauenschl=C3=A4ger?= Date: Thu, 21 May 2026 14:16:44 -0700 Subject: [PATCH] Finalize ML-DSA renaming --- .github/workflows/pq-all.yml | 14 +- .github/workflows/wolfCrypt-Wconversion.yml | 18 +- CMakeLists.txt | 1 + .../dilithium/bench_dilithium_level2_key.der | Bin 3870 -> 0 bytes .../dilithium/bench_dilithium_level3_key.der | Bin 5982 -> 0 bytes .../dilithium/bench_dilithium_level5_key.der | Bin 7486 -> 0 bytes certs/dilithium/include.am | 8 - certs/include.am | 1 - certs/mldsa/bench_mldsa_44_key.der | Bin 0 -> 2560 bytes certs/mldsa/bench_mldsa_44_pubkey.der | Bin 0 -> 1312 bytes certs/mldsa/bench_mldsa_65_key.der | Bin 0 -> 4032 bytes certs/mldsa/bench_mldsa_65_pubkey.der | Bin 0 -> 1952 bytes certs/mldsa/bench_mldsa_87_key.der | Bin 0 -> 4896 bytes certs/mldsa/bench_mldsa_87_pubkey.der | Bin 0 -> 2592 bytes certs/mldsa/include.am | 8 +- doc/dilithium-to-mldsa-migration.md | 281 +- examples/configs/user_settings_ca.h | 5 +- examples/configs/user_settings_pq.h | 7 +- .../configs/user_settings_wolfboot_keytools.h | 6 +- gencertbuf.pl | 1834 +-------- scripts/asn1_oid_sum.pl | 33 +- src/internal.c | 444 +- src/ssl.c | 49 +- src/ssl_api_pk.c | 34 +- src/ssl_certman.c | 68 +- src/ssl_load.c | 284 +- src/tls13.c | 321 +- src/x509.c | 88 +- tests/api.c | 140 +- tests/api/include.am | 1 + tests/api/test_mldsa.c | 1966 ++++----- tests/api/test_mldsa.h | 91 +- tests/api/test_mldsa_legacy.c | 512 +++ tests/suites.c | 4 +- wolfcrypt/benchmark/benchmark.c | 2383 +++++------ wolfcrypt/benchmark/benchmark.h | 2 +- wolfcrypt/src/asn.c | 693 ++-- wolfcrypt/src/asn_orig.c | 120 +- wolfcrypt/src/cryptocb.c | 8 +- wolfcrypt/src/evp.c | 2 +- wolfcrypt/src/evp_pk.c | 60 +- wolfcrypt/src/wc_mldsa.c | 55 +- wolfcrypt/src/wc_pkcs11.c | 102 +- wolfcrypt/src/wc_slhdsa.c | 4 +- wolfcrypt/test/test.c | 458 +-- wolfcrypt/test/test.h | 4 +- wolfssl/certs_test.h | 3539 ++++++++-------- wolfssl/certs_test_sm.h | 3598 ++++++++--------- wolfssl/error-ssl.h | 8 +- wolfssl/internal.h | 71 +- wolfssl/wolfcrypt/asn.h | 36 +- wolfssl/wolfcrypt/asn_public.h | 14 +- wolfssl/wolfcrypt/cryptocb.h | 10 +- wolfssl/wolfcrypt/dilithium.h | 127 +- wolfssl/wolfcrypt/oid_sum.h | 40 +- wolfssl/wolfcrypt/settings.h | 5 +- wolfssl/wolfcrypt/types.h | 18 +- wolfssl/wolfcrypt/wc_mldsa.h | 52 +- 58 files changed, 8155 insertions(+), 9472 deletions(-) delete mode 100644 certs/dilithium/bench_dilithium_level2_key.der delete mode 100644 certs/dilithium/bench_dilithium_level3_key.der delete mode 100644 certs/dilithium/bench_dilithium_level5_key.der delete mode 100644 certs/dilithium/include.am create mode 100644 certs/mldsa/bench_mldsa_44_key.der create mode 100644 certs/mldsa/bench_mldsa_44_pubkey.der create mode 100644 certs/mldsa/bench_mldsa_65_key.der create mode 100644 certs/mldsa/bench_mldsa_65_pubkey.der create mode 100644 certs/mldsa/bench_mldsa_87_key.der create mode 100644 certs/mldsa/bench_mldsa_87_pubkey.der create mode 100644 tests/api/test_mldsa_legacy.c diff --git a/.github/workflows/pq-all.yml b/.github/workflows/pq-all.yml index ba0dc74d3c..1d6e90b3e0 100644 --- a/.github/workflows/pq-all.yml +++ b/.github/workflows/pq-all.yml @@ -19,15 +19,15 @@ jobs: matrix: config: [ # Add new configs here - '--disable-shared --enable-dilithium --enable-mlkem CFLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer" LDFLAGS="-fsanitize=undefined" CPPFLAGS="-DWOLFSSL_DILITHIUM_ALIGNMENT=4"', + '--disable-shared --enable-dilithium --enable-mlkem CFLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer" LDFLAGS="-fsanitize=undefined" CPPFLAGS="-DWOLFSSL_MLDSA_ALIGNMENT=4"', '--enable-intelasm --enable-sp-asm --enable-mlkem=yes,kyber,ml-kem CPPFLAGS="-DWOLFSSL_ML_KEM_USE_OLD_IDS"', '--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-acert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-quic --with-sys-crypto-policy --enable-experimental --enable-mlkem=yes,kyber,ml-kem --enable-tls-mlkem-standalone --enable-extra-pqc-hybrids --enable-lms --enable-xmss --enable-slhdsa --enable-dilithium --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFSSL_BLIND_PRIVATE_KEY -DWOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ"', '--enable-intelasm --enable-sp-math --enable-sp-asm --enable-all --enable-testcert --enable-acert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --disable-quic --with-sys-crypto-policy --enable-experimental --enable-mlkem=yes,kyber,ml-kem --enable-tls-mlkem-standalone --enable-extra-pqc-hybrids --enable-lms --enable-xmss --enable-slhdsa --enable-dilithium --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFSSL_BLIND_PRIVATE_KEY -DWOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ"', '--enable-smallstack --enable-smallstackcache --enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-acert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-quic --with-sys-crypto-policy --enable-experimental --enable-mlkem=yes,kyber,ml-kem --enable-lms --enable-xmss --enable-slhdsa --enable-dilithium --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"', '--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-acert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-quic --with-sys-crypto-policy --enable-experimental --enable-mlkem=yes,kyber,ml-kem --enable-lms --enable-xmss --enable-slhdsa --enable-dilithium --enable-dual-alg-certs --disable-qt CPPFLAGS="-Wdeclaration-after-statement -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE" CC=c++', - '--disable-intelasm --enable-all --enable-testcert --enable-acert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-quic --with-sys-crypto-policy --enable-experimental --enable-mlkem=yes,kyber,ml-kem,small --enable-lms=yes,small --enable-xmss=yes,small --enable-slhdsa=yes,small --enable-dilithium=yes,small --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFSSL_MLKEM_MAKEKEY_SMALL_MEM -DWOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM -DWOLFSSL_MLKEM_NO_LARGE_CODE -DWOLFSSL_DILITHIUM_SIGN_SMALL_MEM -DWOLFSSL_DILITHIUM_VERIFY_SMALL_MEM -DWOLFSSL_DILITHIUM_MAKE_KEY_SMALL_MEM -DWOLFSSL_DILITHIUM_NO_LARGE_CODE"', - '--disable-intelasm --enable-smallstack --enable-smallstackcache --enable-all --enable-testcert --enable-acert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-quic --with-sys-crypto-policy --enable-experimental --enable-mlkem=yes,kyber,ml-kem,small --enable-lms=yes,small --enable-xmss=yes,small --enable-slhdsa=yes,small --enable-dilithium=yes,small --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFSSL_MLKEM_MAKEKEY_SMALL_MEM -DWOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM -DWOLFSSL_MLKEM_NO_LARGE_CODE -DWOLFSSL_DILITHIUM_SIGN_SMALL_MEM -DWOLFSSL_DILITHIUM_VERIFY_SMALL_MEM -DWOLFSSL_DILITHIUM_MAKE_KEY_SMALL_MEM -DWOLFSSL_DILITHIUM_NO_LARGE_CODE"', - '--disable-intelasm --enable-all --disable-mlkem --enable-lms=yes,small,verify-only --enable-xmss=yes,small,verify-only --enable-slhdsa=yes,small,verify-only --enable-dilithium=yes,small,verify-only --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFSSL_DILITHIUM_VERIFY_SMALL_MEM -DWOLFSSL_DILITHIUM_NO_LARGE_CODE"', + '--disable-intelasm --enable-all --enable-testcert --enable-acert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-quic --with-sys-crypto-policy --enable-experimental --enable-mlkem=yes,kyber,ml-kem,small --enable-lms=yes,small --enable-xmss=yes,small --enable-slhdsa=yes,small --enable-dilithium=yes,small --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFSSL_MLKEM_MAKEKEY_SMALL_MEM -DWOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM -DWOLFSSL_MLKEM_NO_LARGE_CODE -DWOLFSSL_MLDSA_SIGN_SMALL_MEM -DWOLFSSL_MLDSA_VERIFY_SMALL_MEM -DWOLFSSL_MLDSA_MAKE_KEY_SMALL_MEM -DWOLFSSL_MLDSA_NO_LARGE_CODE"', + '--disable-intelasm --enable-smallstack --enable-smallstackcache --enable-all --enable-testcert --enable-acert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-quic --with-sys-crypto-policy --enable-experimental --enable-mlkem=yes,kyber,ml-kem,small --enable-lms=yes,small --enable-xmss=yes,small --enable-slhdsa=yes,small --enable-dilithium=yes,small --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFSSL_MLKEM_MAKEKEY_SMALL_MEM -DWOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM -DWOLFSSL_MLKEM_NO_LARGE_CODE -DWOLFSSL_MLDSA_SIGN_SMALL_MEM -DWOLFSSL_MLDSA_VERIFY_SMALL_MEM -DWOLFSSL_MLDSA_MAKE_KEY_SMALL_MEM -DWOLFSSL_MLDSA_NO_LARGE_CODE"', + '--disable-intelasm --enable-all --disable-mlkem --enable-lms=yes,small,verify-only --enable-xmss=yes,small,verify-only --enable-slhdsa=yes,small,verify-only --enable-dilithium=yes,small,verify-only --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFSSL_MLDSA_VERIFY_SMALL_MEM -DWOLFSSL_MLDSA_NO_LARGE_CODE"', '--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-mlkem=make,enc,dec,512 --enable-tls-mlkem-standalone --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"', '--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-mlkem=make,enc,dec,768 --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"', '--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-mlkem=make,enc,dec,768 --enable-tls-mlkem-standalone --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"', @@ -37,9 +37,9 @@ jobs: '--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-mlkem=make,enc,dec,1024 --enable-tls-mlkem-standalone --disable-pqc-hybrids --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"', '--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-acert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-quic --with-sys-crypto-policy --enable-experimental --enable-mlkem=yes,kyber,ml-kem --enable-lms --enable-xmss --enable-slhdsa --enable-dilithium=yes,no-ctx --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -Wnull-dereference -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"', '--enable-intelasm --enable-sp-asm --enable-mlkem=yes,kyber,ml-kem,cache-a CPPFLAGS="-DWOLFSSL_MLKEM_DYNAMIC_KEYS"', - '--enable-intelasm --enable-sp-asm --enable-dilithium=yes CPPFLAGS="-DWOLFSSL_DILITHIUM_DYNAMIC_KEYS"', - '--disable-intelasm --enable-dilithium=yes,small CPPFLAGS="-DWOLFSSL_DILITHIUM_DYNAMIC_KEYS"', - '--disable-intelasm --enable-dilithium=44,65,87,verify-only CPPFLAGS="-DWOLFSSL_DILITHIUM_DYNAMIC_KEYS"', + '--enable-intelasm --enable-sp-asm --enable-dilithium=yes CPPFLAGS="-DWOLFSSL_MLDSA_DYNAMIC_KEYS"', + '--disable-intelasm --enable-dilithium=yes,small CPPFLAGS="-DWOLFSSL_MLDSA_DYNAMIC_KEYS"', + '--disable-intelasm --enable-dilithium=44,65,87,verify-only CPPFLAGS="-DWOLFSSL_MLDSA_DYNAMIC_KEYS"', ] name: make check if: ${{ (github.repository_owner == 'wolfssl') && (github.event_name != 'pull_request' || github.event.pull_request.draft == false) }} diff --git a/.github/workflows/wolfCrypt-Wconversion.yml b/.github/workflows/wolfCrypt-Wconversion.yml index 73b0a6adcb..2b0693e155 100644 --- a/.github/workflows/wolfCrypt-Wconversion.yml +++ b/.github/workflows/wolfCrypt-Wconversion.yml @@ -19,16 +19,16 @@ jobs: matrix: config: [ # Add new configs here - '--disable-asm --enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa --enable-mldsa=yes,small --enable-lms --enable-xmss CPPFLAGS="-DWOLFSSL_DILITHIUM_ALIGNMENT=0 -DWC_XMSS_FULL_HASH -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual"', + '--disable-asm --enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa --enable-mldsa=yes,small --enable-lms --enable-xmss CPPFLAGS="-DWOLFSSL_MLDSA_ALIGNMENT=0 -DWC_XMSS_FULL_HASH -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual"', '--enable-intelasm --enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa=yes,sha2 --enable-mldsa=yes,draft --enable-lms --enable-xmss CPPFLAGS="-DWC_LMS_FULL_HASH -DWOLFSSL_LMS_LARGE_CACHES -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual"', - '--enable-smallstack --disable-asm --enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa --enable-mldsa=yes,no-ctx --enable-lms=yes,small --enable-xmss CPPFLAGS="-DWOLFSSL_DILITHIUM_SIGN_SMALL_MEM -DWOLFSSL_DILITHIUM_VERIFY_SMALL_MEM -DWOLFSSL_DILITHIUM_MAKE_KEY_SMALL_MEM -DWOLFSSL_XMSS_LARGE_SECRET_KEY -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual"', - '--enable-smallstack --enable-intelasm --enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa=yes,sha2 --enable-mldsa --enable-lms --enable-xmss CPPFLAGS="-DWOLFSSL_DILITHIUM_SIGN_SMALL_MEM -DWOLFSSL_DILITHIUM_SIGN_SMALL_MEM_PRECALC -DWOLFSSL_WC_LMS_SERIALIZE_STATE -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual"', - '--enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa=yes,sha2 --enable-mldsa --enable-lms --enable-xmss CPPFLAGS="-DWOLFSSL_DILITHIUM_SIGN_SMALL_MEM -DWOLFSSL_DILITHIUM_SIGN_SMALL_MEM_PRECALC_A -DWOLFSSL_WC_XMSS_NO_SHA512 -DWOLFSSL_LMS_NO_SIG_CACHE -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -DNO_INT128 -Wcast-qual"', - '--enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa=yes,sha2 --enable-mldsa=yes,verify-only --enable-lms=yes,small,sha256-192,shake256 --enable-xmss=yes,verify-only CPPFLAGS="-DWOLFSSL_DILITHIUM_VERIFY_SMALL_MEM -DWOLFSSL_DILITHIUM_VERIFY_NO_MALLOC -DWOLFSSL_DILITHIUM_SMALL_MEM_POLY64 -DWOLFSSL_WC_XMSS_NO_SHAKE128 -DWOLFSSL_WC_XMSS_NO_SHAKE256 -Wdeclaration-after-statement -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual" --enable-32bit CFLAGS=-m32', - '--enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem=yes,small --enable-slhdsa=yes,small --enable-mldsa --enable-lms --enable-xmss=yes,small CPPFLAGS="-DWC_DILITHIUM_CACHE_MATRIX_A -DWOLFSSL_LMS_NO_SIGN_SMOOTHING -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual -DNO_INT128"', - '--enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem=yes,no-large-code --enable-slhdsa=yes,small-mem --enable-mldsa --enable-lms=yes,sha256-192,shake256 --enable-xmss CPPFLAGS="-DWOLFSSL_DILITHIUM_NO_LARGE_CODE -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual -DNO_INT128"', - '--enable-smallstack --enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa --enable-mldsa --enable-lms=yes,verify-only --enable-xmss CPPFLAGS="-DWC_DILITHIUM_CACHE_PRIV_VECTORS -DWC_DILITHIUM_CACHE_PUB_VECTORS -DWOLFSSL_DILITHIUM_DYNAMIC_KEYS -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual -DNO_INT128"', - '--disable-intelasm --enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa=yes,verify-only --enable-mldsa --enable-lms --enable-xmss CPPFLAGS="-DWOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM -DWOLFSSL_MLKEM_MAKEKEY_SMALL_MEM -DWOLFSSL_DILITHIUM_NO_ASN1 -DWOLFSSL_DILITHIUM_ALIGNMENT=0 -Wdeclaration-after-statement -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual" --enable-32bit CFLAGS=-m32', + '--enable-smallstack --disable-asm --enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa --enable-mldsa=yes,no-ctx --enable-lms=yes,small --enable-xmss CPPFLAGS="-DWOLFSSL_MLDSA_SIGN_SMALL_MEM -DWOLFSSL_MLDSA_VERIFY_SMALL_MEM -DWOLFSSL_MLDSA_MAKE_KEY_SMALL_MEM -DWOLFSSL_XMSS_LARGE_SECRET_KEY -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual"', + '--enable-smallstack --enable-intelasm --enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa=yes,sha2 --enable-mldsa --enable-lms --enable-xmss CPPFLAGS="-DWOLFSSL_MLDSA_SIGN_SMALL_MEM -DWOLFSSL_MLDSA_SIGN_SMALL_MEM_PRECALC -DWOLFSSL_WC_LMS_SERIALIZE_STATE -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual"', + '--enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa=yes,sha2 --enable-mldsa --enable-lms --enable-xmss CPPFLAGS="-DWOLFSSL_MLDSA_SIGN_SMALL_MEM -DWOLFSSL_MLDSA_SIGN_SMALL_MEM_PRECALC_A -DWOLFSSL_WC_XMSS_NO_SHA512 -DWOLFSSL_LMS_NO_SIG_CACHE -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -DNO_INT128 -Wcast-qual"', + '--enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa=yes,sha2 --enable-mldsa=yes,verify-only --enable-lms=yes,small,sha256-192,shake256 --enable-xmss=yes,verify-only CPPFLAGS="-DWOLFSSL_MLDSA_VERIFY_SMALL_MEM -DWOLFSSL_MLDSA_VERIFY_NO_MALLOC -DWOLFSSL_MLDSA_SMALL_MEM_POLY64 -DWOLFSSL_WC_XMSS_NO_SHAKE128 -DWOLFSSL_WC_XMSS_NO_SHAKE256 -Wdeclaration-after-statement -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual" --enable-32bit CFLAGS=-m32', + '--enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem=yes,small --enable-slhdsa=yes,small --enable-mldsa --enable-lms --enable-xmss=yes,small CPPFLAGS="-DWC_MLDSA_CACHE_MATRIX_A -DWOLFSSL_LMS_NO_SIGN_SMOOTHING -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual -DNO_INT128"', + '--enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem=yes,no-large-code --enable-slhdsa=yes,small-mem --enable-mldsa --enable-lms=yes,sha256-192,shake256 --enable-xmss CPPFLAGS="-DWOLFSSL_MLDSA_NO_LARGE_CODE -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual -DNO_INT128"', + '--enable-smallstack --enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa --enable-mldsa --enable-lms=yes,verify-only --enable-xmss CPPFLAGS="-DWC_MLDSA_CACHE_PRIV_VECTORS -DWC_MLDSA_CACHE_PUB_VECTORS -DWOLFSSL_MLDSA_DYNAMIC_KEYS -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual -DNO_INT128"', + '--disable-intelasm --enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem --enable-slhdsa=yes,verify-only --enable-mldsa --enable-lms --enable-xmss CPPFLAGS="-DWOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM -DWOLFSSL_MLKEM_MAKEKEY_SMALL_MEM -DWOLFSSL_MLDSA_NO_ASN1 -DWOLFSSL_MLDSA_ALIGNMENT=0 -Wdeclaration-after-statement -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual" --enable-32bit CFLAGS=-m32', '--disable-intelasm --enable-cryptonly --enable-all-crypto --disable-examples --disable-benchmark --disable-crypttests --enable-mlkem=yes,small --enable-slhdsa --enable-lms --enable-xmss CPPFLAGS="-DWOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM -DWOLFSSL_MLKEM_MAKEKEY_SMALL_MEM -Wconversion -Warith-conversion -Wenum-conversion -Wfloat-conversion -Wsign-conversion -Wcast-qual -DNO_INT128"', ] name: build library diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b7ca4492d..666b737406 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2939,6 +2939,7 @@ if(WOLFSSL_EXAMPLES) tests/api/test_ed448.c tests/api/test_mlkem.c tests/api/test_mldsa.c + tests/api/test_mldsa_legacy.c tests/api/test_slhdsa.c tests/api/test_signature.c tests/api/test_dtls.c diff --git a/certs/dilithium/bench_dilithium_level2_key.der b/certs/dilithium/bench_dilithium_level2_key.der deleted file mode 100644 index 3e17a5029d3b86e22e768a13c58885a17347d584..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 zcmV+(58?1If)5%30RS)!1`8_&0R#a8f(r)(1O$Q)1O$Q)0HVEgxsEjO?Ds$-Gw4u5 zX7D9JAlW~P#;s|_oY~+F|96GWh*%eEh07P4 z$Rcv1FfPHUK^&$a;;q>A__20q%<;27>pqyK_e4#2!tdW1SAv&0>nUY$^dS`#tDN$ zVxTY*8x#x(10u>sWn@Ms5IG>qfGA=VZ4f3ANuotlm6A@t80#Fe_K_kIT zBE~S81_;VPfy^=v5yT+bl0n2E2;`su%ZMQZ1CUezNfej_$iOiXF=+&okN~+MA~;9@ zGz?*w00FdVU?zbaq!1#u5Fy4ON+KrEl0n*pX#+wk1PKD+BtoJ_C=js-f`)|PBvA^< zC|QOe+qOUx!$2IV34kk$VO6(qzDudQp!MPi!zRhL;{;a0+XZx8URp~ zL_!D&jN+()m;gv)0)-m|Ey2EDq^z{?$CSP7`w6cW@grEPg8FpPgi+8~oBH$-!51&i z(aOfo9FLD1L%+F0K>|Kq`Xq=Br8cRXB}3Nk-ma5W$ZS>VT*$$t*ZkVA_&^^5T#iUl zOF#W~n$U;z&}f`QJG4rxG%C~#q9v@*tu)?Nlsz}-ILL|nOp&yoy0 z`%?|@(d~Eh0-vVF`Y@%(LIxi=<>6KVdePy*AVfFj7>a&yx@#PnPW#HwJt-#i5|wlj zBMvSx&vWLP&~hV6MhBq-OgedTJJESsW+}}ywrZtnOmXG2rmRg9+;HR!YM4kIpltlz zYCjM=y~)Vx0ft*U89r~RO4K+VoGTfwM^xfYwcn?`Zvl!BTZ0#~cj2ACYbC#s#FF7& z;lm8Y1tdUWp#e&JH(JUY+sdKm?R||-d>OKHXH^m8p_oKpSof+4{Rv7`Xfo8w z;gX=;L_!>G4Mi4rWk#5K-Y^b9j{i zF1Q7ZB68V?$c+~77>~wL9>cmPSG4|g4^%~33#@FXMwQ1kJvhF_PT+&>XpI3eeUPU( z?pKb|`-cd6L^KPTUN5Llz<}>!{`)+0@r+gy2#nL8xLEg!y@e2g%WjIoLY%D6MjshTVsCDPk-l|KS!>n!ZdlFc3; z!t$pht$d|WM0S026Cfe-3E6OhurQ;Fz@5?-Pi5aiH^O7qY^l+eU4+uL$9jjGo39~d zWcLdp$M&Ts>#B|N5McYsv#>IJpTXX!cW=x!AH8%Asf0WQo&UT>nvO%YiyS1i!?6Ao z%skKXCe8~wTU?G=zYW}`%6R43#YR>*n8d6@WU+V(fi!(R!1W~*W}+&AWP)Ob&}GXi z2?6y3?6uMD$6#VTI4GPl?w>_+aj9*ZRD=2FH^mt z?PG&lC^v91yPe0XI$N)Zg5ogC^}%DDSwYhzlCg257A6avmJ8_%Y5X73nZmYuBq&-v zh%E4S{3Qgwwi%Ssx*Avxn)^(hAvBFe>`=y(8w-avPUM#Mnl$X#WokzH#XvRC2Xq3X z&m&+JtW=m;@01q`@4Lc#JMZ<;oVT&xMfF$F7zLM)j4+H5^np!v7?+w;xB1cF+zAP zQ`~7$gxrZU*DoqSK^VALwp7N+-z1UEVxXND%%;!TC84}y3H#Ay zT>Q8?Jy7f#CO6BRDV`Mu$rMFFUu;1}>c;pO0e#Id?p?K@mKlJSu>)0xSH2k&Mu-5; zUeLbm6DyNE;q1K?Z>9AhSv=jn{okFR2XiHpLP5_;<&OlcUusr|N!4Tko%E$^zK_W0 zyvH1wz%QZN-)rS!oyl`sDn8eWz6xI}3t{g{2^DbWT%oq!RB?1wV|S0quOgcMED2&h zp{j|vYfywBW?hdtf59#Kc#n?IIWyFnKvuklA_watxKh9x(lsAee%dR+2+}zyMq`?- zM6>T4D%NOcvGN3>-yDktg z-ReHf!MXB6%u4d~lP*6D=;W3kGc9LNjvE2i;`04n%>5Xg)=(ee#eBY5m3<*4KJ&cJ zF@SkA4~BRcrZyMZaHk@t=%T%JxsEjO?Ds$-Gw4u5X7D9JAlW~P#;s|_oY~+F|C2IZ zS4GUE`7+d6Nf#UYFOjNS#mLAjATS%U0mG+`Y`FKcl}adrstiloCQ3Aa7gbDMJPQ`0 z>ofZ}WAYV!`ckP_-9cEO6Vg>8`NH^4Kdjsl3cGxmkU{}ONcftFX>4X zz$kwW=#zFL^9UC-kvXP>%JI^Qo$=J9g{B_+Yjp>JgfjI})5w(Wmo_Rmury`5|(yu!n;h6Z0rzkYW0Y+FJ1uL2)6Lk(nQ z{@0p6A=Pwlim0zU&V{@8d&>8n0#a4!K1xesg*E!U>yjlT0srp%l=kMI<2{qlY3n_Y zAHJ@IZ;uNiR{%YZ^lMFmc9A7ZEb+W#mQ*$Uz5H?aNI>gM9K@?n$;YsazbE1t%6O`v z1gmRpyot+kr}%*lPb!)>V4!Lg=P)jE`QkYz*~YS-ygk+}$e_Eoi z^~L=fe6|M4<8*RPcgfv5L>7!iM#bZS9z0E~8h@&7{ozGf5kyF}3GaULbqv497qp%b zz!BZDS^c5?|*POF3mYE2~pozzK(*C>%6pU5nx1{w?vZnDzEfFSkRe}He>Hq_l*yd~MKMM@N{2qq*mTVK&HdkK}E*qDti)B8Jk!c)ut+kBi0+SY`^%RD+76I*1PJ%5Rg_ gaUQD=WkSN2cMxvW?ke9@DqpnJau|?8397>}iJt878UO$Q diff --git a/certs/dilithium/bench_dilithium_level3_key.der b/certs/dilithium/bench_dilithium_level3_key.der deleted file mode 100644 index 132616b6b13cb88f96de8e60a39910d6dbde602b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5982 zcmai%`9BkmP|3^=q-J(VWR4vbgFAmI_Iv@8>`G{_y$(UXSPVhu4dsM1%r#bqLEqOV)sN^>qQtC14OxUx}do zFCJ?b!EblYA+H(VE?x0ZbtAg@bfNruV`6FR(%)w$rI*_d73`+?=$>=1_g5#ojb7RQI#WK|FM+$n zY8fo3DTOPSc)$aNAZHa5>p~L>NZ4qmoF{?U>d0KupwTQR7ls4@^uM+^8c0x?nF zmaZ0i6L27msmzP5HG_c-G(ZF0phOyljkZPwVPRqcUQdMOLTIjuk%ADKR34*&>v{-S zC{t3Pt|}^(L9$iS_-3j8&aMn=*BE^?3Zc?!nSg*uI#DAQQ3)X!2!u-~VUbECJQXiz z8wfMFRDlMp?`k3-SnF!|Ab(FWQU~ZkB1ZZvl^BT=F^vfDN6Tpec&d`mqG-fO4vI&| z>3LzWcoIOLl8B@s6bx5^jyPBx%T}^Lu0bN4BrpU*gW=N5v{-t83L0sOGbKTy2w3NI z9g#%e+e2tg;?P~FI`Zfk5sZlU2f+z+15=iOVl9e_LK0zErdc%0Ol}$-83RWNqMd@c zKvfXV!%GW{R4GktGGbgJJwi;=ae7d-4L}0KdjMo=1}j}eh66Q3UAhiifQNt#l#wB} z{$S@I977Q!f_pPGo@5zF7s8-h>nXit=>)!xRLTIlC|$s=Y_Nh2_9QDfAcz+e2#9vY zBNRd*Lx&>smNL?b1`IP(lt4!koTiGVLTodj1dtHMV3|pwY@AA=fvJ$fAWxU5AX^AQ zqSOf%MA7uQ3V|6QU8~W0z|&9yaV$^{;z)@iKr9_2;bu5RlJz0#7!MJJ!GoKqL1Zi& z7(&lLFcl_f97aQnq3f6>M(T6u9?o>V$P6F=iAF_%N#X!D504{roLtcyGB({zDnmqh zOEJ{cG#E&0qY6YpGSayuZ>=-RmZMb@qjaowooG;zw++)N+5>5=a5dGM$Qfd?PzCc; zp;2f&ElrQ%je}dmoYWGj1Qcj(%7(h?ay`-wf-(9?7aGP5-e(ZL3zbmS7c03L}( zpvf|}w}&+sAK=Z7;${R#L1n21|09Ak!A2>V3NTzJz=;sUXQYBn=n!ZsHVVs56;Yg+ zfdH(3MlewdVbIu^NEeuCB8r3&>Sq8&;6xHrR}$qMZJQR0p!^RHMy%wjs9*?6EYc4l zp{-qF1HJVG&O-edh$~*{6=W+-6eID(3_YZWvjS{Jl}J=E3V|Lvkbu;}G)R`I7c>%0 zi=q)F25L4yl8#k#6>w8%j5iS=5{HGD#AQT{NKL>r2eHA?}}ijW|BG?Pfx32^n4A)zdy z7@|NBXz5t47thAuSxtyF5$eLDNem>LoeJgg*-?RDk!z4sEZ2+ci4LO0Vgn5R*H)fR zhRL1MnFQ-V30VmVipAT|#7dJ?Dg+L&_V6+>m4)Nb3M+rNRHi3-F|yusm(aVtS%U5Qsz2lR|?MIrZ*bvuAS$=3HpZ6>XkhJ&Zv#k2rQ-W;xzF}J;<>e) zZ8v|rfN9Q4^W6G&?XH&4`}%qZMairo$2#AV-^Gyfp4s7$98*U-=ky{gMIk{e{d|*GsIbO#I`D59?I)9!s#?x4!YEX2sJ2vC;b1lQ`I! zkFhWG+l_AcTbDLk{8(jmBy^9*@4K}v+Uh23%cJ~1`|9c~S`OSlm6`N!-WczU+RcnN zURJRy@Zev`iS|vu4Qdvbr(A4;`tLgwQh%j`k2z=l;z%0j=z;okP44(7cMPu6-7$=E z{VZHT?VPFkhE7mPx-3aO#9Gc7U?4{W%R;A#iK7Zavd(j+>}l? zjyg81QlA|7dex=1*PPxn2c7xL3%~h>d+b8fy807AAHxdNf3N;_EA9*FsWmjN_BsKt zju~%C(mmbpwx+r=Ajja$`T7{}Yq}TF6uidwVJ=(pdM>h@64_WiYB@G%5vs4)CA z^)0>a$$9-x7YGBc0pr~kDb2k|0lc{c`MPst#rKl6T-(;FQ;+VjKiO#;#-{c%R@}HK zN2u!xpaXKyAp?JYv1ZUn9i8KwfESmkT)L; zD|{bjp41PmeVeV^Wc+iir3AjdUW{yJUcI%bq8=@tUhlIW*EmJyfLI@hS^X>fheTb7`^ijWmr!@oH`mGR^ zi8>tNThoUxL_p3TW+BC4t8n95kFfw}{??h6s-2RcviYsgT zQh2hcJIHx;C%erewC}akF+-w(49{;jiFkUaiE^WN^R{Y0i6)$;Yah@LHG{uK< zue99ybp{O1>ZCrT924HbzV3J>4UHT*DNPX1)b|a{v>*VZi2qt1gya%KS$4OR4a)sLd&rJO`_~yKq9V zhI4{kIu@OZT8UTOhTPX&IN%yA*CfJNNrTRBy_-8?I!cCjo~+$`^xIOClm-{Xuce1@ zncZued^T?l=TkIZyA5>pw@>-e`{EC;)4<|YQo|t^{r84+V z9>|xv$=SN$CnWUkLQ0;=ovrme)jzp_zua>XZExvU8MWwU>-a3*IUqE zGsAp4vP$k9pZ7iX0X6WEj6UwXcYej_iH3!iXB9*I=S;_4HU2Z7Ee56jyN=rAPh1L# zO1>V3KERQEkL$-T5pKFEkGX1<;!^lRS+Hq+9uRU^O^Zgq^{D*oTrRf`1P}xtSI7t`}nj&N1aE2^Ow6F`@&}9 zRxg#E@(z}*aul7y95JgKl&#%4q#jMUFAn)m99-0EbZohoRcRmnuABU)406Y6@={2M zX+3tgY??I~>kNp5KxzGgf=H1Uav`9$hM_l;RhmccWd!=^VF zrkuz)_(BDGXnc;duNUykGT8NGkq$6hRvDIbqnf3@_36T^ey6MJTa=xVQpS15w$%pP z}rW?b9F$3)vH~KRyqD-Oz~{nCvte;PhAD)g}&g zuRl6!RpDY%_3Ik7>P@0=Ued(SgXYj{b_oj3!xs3`9Kq*X!#v0ONyEV;L^5#p@*%@x zgFox0tvPcWFWE^JOIhP94=nN?u~TldmHbp?X+X|ed~@ZV4|f2D9mtDb+IYwC zYqK5Kkd4|UY4+HjdnsjgH;HclDHyqW@SQshV&-otWVK+6>O#-%!42Er09w5aXEF-I zW4aE5PXFuao*K^I7jyJkvz0t$8_6#7K>l5#QF``^>92O;^JBXbsb)SqbYG2$VXsPC zGmh9D6aZET;Gl-FIe8p3imw!V61(uVq||P*2fOy4hspI z=l@4Yo(4>@-Ion5Ht;V!sWILqKU_w^}?_PAAzgZDoV&<P=j>=r#LqEYR z%9vr#V}PQQAyfE~#bYL@z<_6r`JFj$MJH~%>`R(bRLWEd(8)Vg<%RD>$#%CY8@qjv zH(&lj2`jpK$G&CntQl@S-YFnWU;F7L)mo8}lwyn9mVfeq17J^{^p*WA^(8+o&${B< zErlpm!GUilH^ue&c+~1KNq@s5gL7NYm0MG&=fh52d|6jixqRW{=H63ZWbTo9fni3? z$jN?#5D>S5ULC#(n&BhQw&avX0Xys`FqQ|)P9ScoUVaFSGw!`|FN(NKGms{u7O#G5 zUOIp0PH4((hh}om4V)Et?#`+^hdpyGMpz#P9@-}FuMVzsC=PNydFQu{mHjX7N})@C z?%bv6;Db*~`YlqfgKIeE%fg#*bW4gEYQDx$R9|=*F-5ODdnCYZ1GVJP$mRBr&I#`j z#Z*_02||hgoO@hbj1!tab+7?M&_s5>ywhFRlOd%QJ>LiR%&w_i0DEvPe*F4<#CnCX zy5{aId}b^DaGsya{7ueRov&v#Nc(I?#6%Ru)@ieasd<6})%eNKmOtg|+O{~o3c6O- z@N{1#@j?AxW5|Q$fmRPiPstnF#N}_kmH)JzPIOH^^_lYI$2hAXKm5S9F^lIFKYplZ zL&EHR>Id@|CCfWIahAg`&t}oCt%+?p{O?Q-vY-!e&^EtLwenJ!FnGm3S;6g#1ygS3 z<@=XM^S&=fuJpdD4u>$i3S_N+9D;~X_R9oclXc6U+m@voj(+*w2RZv-=L<@9;r{uT z_qTSWL??{y_hHeZsxJ-_Fj7$s;gedAd*S2bfbl$j10 zT3;onM9X}`AIuz=%{OK=C9a`QwvU>;iuV<7@q&unO6}LqpI+a+Cf&4p>P*j;#5FUb zatn`x6GdB=mIubiNdlO=P>;U7Yc0wJzEf@9X?{CH_xKcQlUo8tpbIug&3Y`BQdb z2|wsTxLV7$Y$HEDw)Xwy*~hE4WB#+i|2Z_ODcfZI8dmopVIHw;=FvzKsbG1F%G_#Z z8=^^6YV7{ z+p#XF7aMfdME}b@HS_bH2bqhhCH`eCQ)_n?8l7uQ*iq)ZQYP3b)h@KVH(MKB-2JQ7 zp(N{!orl{m-$mpIZGVK5#kT@*;a&VeuHSca2a-#;O;;N!58V}#^YMrIliREsGhf)| z{3-aZ|E;StzN&T}s2Vb;6S4fq>(h{0?z>eMJm=~-UOl(q$d5CBoPD=PWw;+xrhL>t zkk!r6v1`BA=$LiRd|f_!$aZ13wVzuG+aN{>M9nD-IA(NB7x?Q9f#9}Xw&3EI)Q zJIApzA^Bw_HD~HenNV^;eXVk}MjN?%$Qo>zJzo)f=Jm{Z0 z?7J*igqG<}{!^-6tpTEzy*EoRQp4BotK{BZ$ZYz1sdHUPx~0@J>FeK!bo2iM2?|gR diff --git a/certs/dilithium/bench_dilithium_level5_key.der b/certs/dilithium/bench_dilithium_level5_key.der deleted file mode 100644 index 772bcd3a0d83618934073afa6de28bceebaf2787..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7486 zcmV-E9l_!-f*m>n0RS)!1`8_&0R#a8f(r)-2Lys0Bm{yTAPU=sIzcQjR%HYVATcWQ zh)g(Sh7<<%@PA{$ha@@sz$gs9f%nZNi-tn2bX3cv+Q*b|qe0pq*iV#P3#Bz+vW!se z3(IwH6l6$-A-qaV#Ui{dC^9({SIOmc^yWIk;z=Yih=K?MiEN962!X-~+eBcXvXO{3 zC=!W@OQZo}5=;mJL>U!iiv(rl6b1;#1Y0P9iNbKuv~f%%fT1Xc(FP?G1B8qiK}j?T z%OY_MqmUw$QCI>kQ!oI+20}>0aEdaCfEEUjM3KwLaiX?l&?X8Y1&9o=Yy(LofC3TG zHU@+;5rIUJo3H_q0wqL}X<7(ukN^z{7i5XDEdmBC+>%A%G%*naEdZ1$$~1|iKqAC2 z2m&*19EA|%k}$+Zgy1G9!w_Xr21*0L5lAvln#638I6%OXWaFfTA~I5v2q1zY5=kIz zkp=-9Fa{FCK}$eF3#S2K5{V?3Fqx)gVJ2#kun_~oEkVd_*f=Olm;{&@2^gkjfjDVf z#BG=+4PwS|!^TX)0!CYuWeF(`qM||M0%@a=O^c>*qdWD%Ai(!^lkMrs1JAsM-WBLE^1H!>Nd z4N;bf8xax16o^cg3;`2zgBB7bI8i_}iPma!G#kPgn||&h_F!+fG{H^Mg%8j z5hyU!l!OqVjKMYx6qqPm0+88|G1Dk$Banb3$AqB(3BfjmShgriuxSVoQ5?2}gM@(t zIgo)u5)-sZ3LpuSB0|(AA)_*hiG+a*0wH85kcqM>;WjK0Fi|0cECe3_}ToCTdVNAOOQ?kvI+#5>kT1O=OTwj4&b;CTfJkhd6o!F@ksJvG+{P#gCooF_ zWJE?VoT7{%5oi%4Q40b9(t=IHfN|hREJ}z_pdd+0v@r-0agd^k%0`8emXV4uF$=;W zVGv0WnSoO_3?qSvVkim{LvRAeQ4}g5W3MEY( z5GtCMWDvn%j7DHuB#A;mhR`<mk|BG$8;a0H7dX1ExUSFn~*_APb@-;;@OLvSrk! zXdt5mOu`XLI3x%cP2!>e0>}Ue05GJsC0Z~6K$1+zM3O_uV55eF7zA)rvOr7(gbBz< zArmnKr45jhh`|tz;D{&-281IbY}>L0$OvwehD;1MhT0ZUn+P%hkwv5cEffL{V315B zv zBTBI9GLg61i*hx$bk&-hB0Wh6y3u`~WYw*DH@y+ipnOvW8fI)=LPb?Hz#q!n4NrBI zpAedjRL;U&@XozCaIjJ?OA!qv*X2v`<4?ZwbEe+5#9?vFT>e$?P`aELL=)Z1deWlY zzw*e0|68Z}jTrJ(&^%7FcYKwRm{Rh#&-_L7abhImd-sJ17iwa(=?Ffd#wU)mCZ&~; zgwUYPzeUjECS`QiNl@}@uJMX07~1fy=kp2tlzM-h zNTWc5Ga^A@Ow?l6#>QLoNJ6I=)vpEidiHIC|A}ZJ6Jn))$wLEk_t61;*%JetnRL{W zF45D=Q*8PEv^`PrV?tZ9U2p^CMq9z_ClMkQb8Prg3jf&tw&A@(z)b7S9z4~2>c-SG z(v6wKnW&DRV5sPO9)3_1t^C`j0Or_Pt{bl&6j3-Cyfa)OO|7947v}XhnD*v4O$UG-*j~(7+kQHakl&tw`}`2>et}ar z!DjB)fDa7o=!GsfVT+t&_9u51L}6yhc`@Czl%0%=9Vo(t$uM#Bp6>uFqMtZr=FxyA zo5bjY&ScPvnjY_?w$cln6!Qr2bI~-egXfo9mo*MG+#=Pg(Y(h%Agx0-BxZWIANd*| zH_pQRn6YY_f!Rw_XvOp9X?CWInEQk-(@%H#B>5AGjrM>p4x!DESk7ZMm5lai!-V*> zUY=|jGLWaxEk|q1uZ3ljgAtC*h_MT}9#u~mD#QY)MQY7;SZc3>lsFx!2`L^9L#YHN z_8iB{!4SEI!J_N~-uF{yE8p&~((RjHK+WjVh;V>dde6>G6J_CI15ltSHFn53Dcd6I*5YV!(fRJ^$B5eL4(UFIJ0%wyM8}P zJZt5yw-~`vJdKO4Yo{?CufO^gi{Ntl%C^GRLPIC^ zsy5?t@?%ipSB_;=8b#{(WCTJbum5N`!W1af1nu1h^0EyC$IYN-((;K~MiT1B#g z3=r!L5GHh`2OGL!{fu+Vmi+jbErSvZYMi8Sl}p$WagQR2qG}4T7n4SbU|236JK=9h zN4%5L6g~1Gr1~G7KL|h^Ah}@bBGAxb8apy+HH#u{CobY`y2lp++JhooF<{nsc)tto)MzrU z7k~tR*{Pt(x0vpnjA3xQFAzCC%x=gE527A10d*cho?{fkI@ubFQVspw<|8%n7v!ef ztUqU20*)YWRcZJZ{4-O^=uSVRT&ARz&9|Ktd9H%^FX9so-gOzI3^Iez6gB5}&={QW z%+=aCJO2?mAU#^K7AjY3C&9L9wVQZvYl`nbkGMC#$}J})63Kx&Od6EmZ72AJCZLE` zdtzRM&xEUiqtxr^g_i9nLiUCz@r-GK*{mL)5~QAZ#V!YC|1a&6(qb?$f#r63DvtBO zA)M&rQBT^I&uR+EkYtl^;;n8M241~fKube-A3#+$y(`v|hytoU-#f{WX(;C5eZ4Bd zZ*Xn68m(qec=rHT?Wn_tiYG4o#5cL^t_B4eU{i%ugHr6jrFr}q!`PU`*nxOY+9a)S z^mtZzpIzf^HIwS7wL}`)hrI?(|1~OhQPaY6Ad@q|>WHAt;p%yYGN;bEbLoOIWQas& zij2$g+d`2(csh6MO#S{t*y^6`8Lg;f8WO{Sb)aFdPjMxbb}^dv6hCb?z%NoeOUo9Q5T~(>B*E-*JQ>7=lYYu`nt*?8}MwI zB2rWD!lD_o%Jne8(IkI5D37Xe(z|-~iX&I)c>wer9kD_TQ<;02Xl`-Y)ak*eTLq_Y z^5+pda9nA!9kD72maaa7L3^7h zZiTn4e-NWoza+N%ZKa>)yEBRegH!vtdG~h7L&xN`=NVRVRjeJTm6@M29xid?g zgxX1;8$yK-OTch7BQ)7OcKIS)8tH-MF{AOff8upQCxXYiXdn)(&@w2snQ^*EES06m zWiAYZ*8l$9e<+FxhA-KY8ZcH}&R3ah?qu*Imp+17G?i)|hIor6PX%@ZBFl2|&>CbJ$01x%&}<9Zxo3KV!yXnVN&sKF z4n=`(=UZBj4Q)rUFsDKusfs5`uwXB#5<=F05CQX9(m)XzlKy}t8(`c5dk{qzW^lP= zO1iDTReZD97;P3)?TO{mQ2MC;bZ5jhOvJuYnvT1+;IC3wJ(+nBxaO-Qo^`@1``h^7 z0?SEOQfrL*j?elSP~DhG?5GHAV8CdsPtpYQWzF|8v6aM;xMKn)M;&f$&pkOk+!!<1^^CA-Q%HssP@`q;EH85R zL+9$CK0Gip*&S|O%i-XSmC{&^)w3KTC~CX239*r2;>Ji3@JY7m?@PwpvA=Axl3Znx zXMvn?S}gv^`Sq54KD&SK_rLh8&!%rEoC#%*_uTJ3OU-SU)6AUr@=WGrG3XxNR<5Q5 z`|U12BYnJW%uCds27}?1uEeTt|DGJV2Via02?j6>KegzK0hAkr>9;onr>{$6Khjsb zxWD34PobX2OxlSh4t~i*e@p^@qzLSPMC$j?8yWg)3O?cVc;Az&hMwUuzi=RnhtB+j z1C8+|=7=zPW3OC0gsHfRv?Ew}`KxvtAXeL+{#hxxjMq-2Tz^2Q>kW{)Flb(!kiOJI zOJ^tNeFnJjmhbdOUyjN~g*=p=-U&cOvuW{Y&S#hy{ z5T(3AnfBJS#286(H}lN_)~hQ18oW{!I56^0z|&iiT2;}4T2SZ~j6KMgJu0d5>PS~n zDX@V}Yia)YsNi4pn7%zZwh%sW7GOr9bX@gQB=lA@ml(E6k>T_<5rEI$<9v)K$tkAH zqT^xhMi31{9b>Xf!2fwIZP51d=tjl5PwizI++!G!FyZ~+Sb?S0vPtBKp=kX&kYju!F?{+hxXp~YGjpXGT)Rqdo~L4A95TB;8;Y#u;i=tF z`#aCJNqg-YevWgli!lZf#Dq-BZCZIyE@qGl6NVLd2CZF;UdVH>g8KvJFy{-I@Y#$k z`ZTMH-3Bi?;8QnYJ;QfQpJtVTlnUj}S)qemcfIwk;+zmya$qDE;FS zZK#Z?pct+g#069K_i69D`2SVePN2zHIA<~ETt-1yCP<8ek>o~^;G|Eb{U{X32Xna~ zeUz`Dd(*GD<`^4Uh5?CGuQA#mXCZ+v0?G%7cKeA6laIa%`hG_IP!cJF1 zV+IEy&SBkM9i#Uoa_w_!pyr$!qtBQ}!r>_*8+;TF;%it`r#=q{9jpBu9^fR)E69D2 zgN;T*v@kg)DekXlVN4eB^Z`|IFdG=c^NJ=?W6mYAhUU+$>uQhEpx}-RmIN4c&7L3k#%F%|4I@zUL zd{ZR2(klsb1cyF3WI|fu$a2*H1_ptVdJ>_L?7!B${es%=I=AsuH`?Qmg~EzL()(7gu*ex)@j75ZX+w<_yT#0_mOZI4rY z3u1Dm0bSWruV5mO(B?NKS9507mTDt)L-%UPKCB?fisR9=2ZxS2>q8Kce;1ZZdNC@5 z{Qj{fXV$H_w>>&9?vyVD@z{>km#;R?0T>HtK_=@sEB4ZgT6qGYd=SrSe8G0W)91{jKIIvOS5Jdlxn2Tw)Mu5R+Gu6;tej7XbVd zNmzN1HVsgv{;uJ(uRxeQx2wquE9fzC4M*YNJ1odN38tL(0LMhKihF; zNZVTcr;g+rlm1Edeec9e!4N9e@Lj}!i<~Y*`*G8wfctk~7Oe~Hb(&a9ZrJ_lK}Ll` z{en|bW%$r0EAsj2Cf5~&F@Uc9r7&ggQp!Ab7Li&eNg61}fe@9rmI+X8v1Fo$&p13h zZVQ%|{DHlF=ghYE=oJO8-W+Ja&-iGRkb8ZYSKNkeY1Wux4>*~VnN`-MjFe)_+32Kv z-y!riWzRq45T&$n2xXXAa2b9l6LCM%ks$w5+tSnrI!ST`X6=2vVQ_zBLEW<(1GpgJ zT?aY*(lB!952vDW=snphTeO!e!&u=f52}n>a>u*2Su1lnnjqzxa4>r)zSe347(wqC z&9!N^08sAvMK6Z#1itu)o(-%UsnNluKK9vonVl{sY|4C0$FHmKyOS~lBCjWEpHp|K zY=fdk6=7_%2ya`3bBfK1uyCxUA{d8Mk!v)63r@;Jv%au*D1~#~DR5KSqE8abLH(I0 z$EnY^Tl>s+x)R~m_Ix6=?XaM6S<>?qvV2Mk)q_`#E5ah1McVG?h@BMIb;TZmAB7~;H(p2f?_}lUMY5`%- zJ=%#|?THY&7`VD-I1M-K9`^>;z=Q@bL%mR-1)EUKySJ0@a8S1c4<~R(j_VZQfxLgE zV6X|wILlduNwd@`P~il$wZ%!aqR$>x)+CO#diQJGxuDA{~cKNQ~EGQ4pC<}Xv#G4B| zKEiN_aqT-jVRPIY8i^L-Hc*y0M6tFbv4c@Vd^enf+haZgLi*_oBFm*82?HF^t;_DU zKm5&r1Y<-`KPwkz;HMsrF6? z4AEW$?(Iegob=e$c$!g@#+6(WNGptx%;)?|+wEI|cZPK0Xadz*gpUq?q3NYC>$E;G34h`tHBb6s(n7V&G2WcrIdPC_ob!8; zv1LRM>|8PRr8oal-ywyH2zS@+%-C4(Tip`CPQoCqUUWC$a2vX#ggGovV|Qt6U}*sG z&KW6U+7Q_ldBrQRvzLsRgP$coRv#>5clz5W-;}NhM0JYjk#exmlf`?n(CgUUh$;9s z=Y0K${-N#?nhu0@6{w)symEDYPT%e@Fe7cu<=6cY;D=@2s`M;mbQ%nL3R{KqHMl`1 z6#OcUDA1?du-RIv4+}5gjyHl{jvg<{dLIL1R)6l?Hw2Mvysa>T9NC341Rz;2|m6uMu)DA1dQ;QJIA^J;T!mkuHP4<^OVx5inb=1la*yPK%`635yzCTW97 Is0u#t)HnW^CjbBd diff --git a/certs/dilithium/include.am b/certs/dilithium/include.am deleted file mode 100644 index 514f4fe67d..0000000000 --- a/certs/dilithium/include.am +++ /dev/null @@ -1,8 +0,0 @@ -# vim:ft=automake -# All paths should be given relative to the root -# - -EXTRA_DIST += \ - certs/dilithium/bench_dilithium_level2_key.der \ - certs/dilithium/bench_dilithium_level3_key.der \ - certs/dilithium/bench_dilithium_level5_key.der diff --git a/certs/include.am b/certs/include.am index 03b6047eee..0b17390c88 100644 --- a/certs/include.am +++ b/certs/include.am @@ -160,7 +160,6 @@ include certs/test-serial0/include.am include certs/intermediate/include.am include certs/falcon/include.am include certs/rsapss/include.am -include certs/dilithium/include.am include certs/slhdsa/include.am include certs/lms/include.am include certs/xmss/include.am diff --git a/certs/mldsa/bench_mldsa_44_key.der b/certs/mldsa/bench_mldsa_44_key.der new file mode 100644 index 0000000000000000000000000000000000000000..6894c1a82c645aa7761687ead6b6beda67be63b2 GIT binary patch literal 2560 zcmV+b3jg)$1tblCawS#tTf!5Ihg~t5FCD2t2?chiw_c1y;$(T)c}(t-D>tjL7G-k7 zNy6;?n&vGYTjKnu0OHKuFp~g#!Qu*aA%pg+SsmhD@MkiZ*3J7;a!T4M4yF zT0}y`qz%-Fjff&r0Kg1eHjoJ*A_xN#kP<=!ASsMUZ6GoTl!$B)hatg40#ZN{+sGso z2`rO931rAj2uN_D5P?d7j35Is7_)%Wf+b9pj2x4R8j(@awrE2XC4@*}fUkOk7XAxS7GNkR={ zpk>RDFj0byT*eGh25K57A_1r*VX}lHK!&5VNEs*$6b3Hh0u98F2?z#eo5&DcMj^_m zFoPh81A}a#MvRaYOql|KQvwi+NRi|~N+Pj{!3GY)s0heLk^{9&BLfVi1}@x^feb|= zKs1q%mPmnuG0PTmNysTghLB()PC`NnOM)N@vSc8Ja2mh>96?Emgar&XNg0`K00>Yc zmTcfe2$&=+3L_vA1To15G86$p2sa2=01O!fDUcWi;fO@SAZ*b_WZ5QS35aL{DJkI? zWtapcvkAOPs-|+jYnroLCxT_0$!{5mlnXaRFXNg5+W!%-NQrQa zgu=ivO096=rxpFOZIjv;XvE|FEC?03q{SPT$)m3gAqGA11=KZwE+d(}IvQ-PzgD%= zl^ZZkR>61X)~l38XxF&powAL@(a4g%T_0Fge-Ty1F2kNGDN*QkNvEUQ3(xpJc&toL zcyA78t&~|HUN;!I35VO=@WM?4%$Ooe<$aEHeyJPldakc7d_2G!FhC7?hEvQ7E54<2 zJG)b!)xskkHO(Rt?V9e$`2{E2Mpn!uP42I&sd#mDxzYVOInoO8d0`Jdra8ORySeA}8jEHqV&WN*c{lT);p ze!}>EjYJU2N%dUl&cw_@@P+a65T^?_YK~BrmYvy;R7Fc#jO>Y)61SEb+t6c*rt-7OZ;svWsX|`cG zox@WRz~ibe+;j=O8MV7n9(O*@WE1Oj1Gh<;uyL8@7d(LGwNdG_o z#5|_lkL`!KXl>jXp;9*ncCG1QT!I#XuR4jpa28(@oE^oRLN~I$8_ltd@M>)HLO*uBT_eO{+-#%RgM+KZDFt58Zzt zCGGCe6gc-YOgvsAfTIfNum*4p?0v! z8!B<*8YGb)I=k`72|`GI85{BN6EpE*F#wlyn>;4?LeSJf8=rndOA83spr|r53d!%d z>*r)UK#1UASqJaAUvZL|r$% zSFz@-`xe6*n3BuQ$@dUyLzXiwZ)|q3_DD>w6K7pQ0ghBr%w_SF5j>VET0%XWySIBN zmI=G=!CspE2`PK<7?%EJ* z+|qDHl&bY1#qfFCn~s{>T2?_r=O2yz+7e&)o<|z@b3kXpVFxo7cwhyETrVrXEP6S{ z?aM=ECzH*RjbepkDZN$4|9cQocp3KQvK?ZiMQvK;eWIW-#$w zvUDW_<1T{5V4dX3>`7}*S_!EB{~e*|?3yAw)^d|?Yg+p)THXOZ_S|<>9x@rop}Wt^ zK~$p4=3&Z1W6~_H^w~+Vbs7ee6OdPlj-MvQ6xhd;vZ^|q5Y=c>C^_yh+yF~ua#@(I zE{v~Ec?ygSowh?JgK>KvhD|fqASr6UFOEwSHD$=`<1F6$FjuLPB3*eF2XmX^Zq%8y zHT|Ns+2wT6vd=Q{8EMZR5X?NUzN9k|gJi%t<*<)3^Z{xr5suvhfjQ@J7B3DYsS*p@ zsBE+Ibd}0v9quK?C+!b{wR&PFvWHUnaA@IQ(W_luM(Ud>d82WPtD_5;3cWG%exR1*?gM39w+cZ^xRj=HfD W>cNyZpb`JFq{CtIqe;H!ww5p2b8FH7 literal 0 HcmV?d00001 diff --git a/certs/mldsa/bench_mldsa_44_pubkey.der b/certs/mldsa/bench_mldsa_44_pubkey.der new file mode 100644 index 0000000000000000000000000000000000000000..af50c28a2f318c4e6e31bbdd3efb35377b6290c2 GIT binary patch literal 1312 zcmV+*1>gGW1tblCawS#tTf!5Ihg~t5FCD2t2?chiw_c1y;$(TC>>nhy$OT)$7_hg` zj9_PLfkY>^4*i?M%Th7=$ux~39tWM4YGZ?3*Mlv8NMw1+w4b5^w}u@K$N6jrz%^<# zd3?AJ?U+#eQQ$U2OvW{$yH&7UIS2wEHC$G0F1ha^CWnWGiZZpQXmC3H4IxO8qbb2E zIOQfWA41*>CI203wBTJW&qURI#P*f)22X>CogV8P2}NROJ^xWh=)9W)AIEZK&ZvyS zpu)Xdd>0mra{95o-$~Y?0A;>{=V-_0yuzg0s?6#^Qh!#oXdjZ656;xkhfGRywQSUB zRTW3vlz-AxUb2wFN96V1i<`z>P?ccd@TX4T%|Qw8vptYpcU0`2U5e)kT*+7r&_XrR z6j?ZFt@*XTijFhbUV2r~Qx!l?#fI09UoTaH!cP|E>KwfPULQF|a8!CaCl(qjY|^)Y z)6tzJS?%UgvGT2cQFs(98Lnh<57-!aj%J9{q@%-jAUX^s?F&KI6$LIToNE>@~ zTYr3l#j6ptU0H8oQm)rs3iZqh|adgHR4rb+r=o-!Vpm ztXuP$rqO#V#oTcRCo?rP^)MO1JGzRmeo2!^TR6bHF2`9L+4anZ^?Oa%Ij5plAV`>f zPjyzCxRpg0^M*Z_3P~Hv{~*95EK$M=JiiBE9EgRRg)K_{S{#t|kP_1aJd7@tN=J4N zA6=g9#bm^rzlOzQgfjr~CKw^}h#CkOZ7=WD>n~}@ZjvBW&}C=sHN9cNXBqW=p=Y9;J7=)MQEE4QNa;(tqc|`8-n4w$QiKbz*$C-+N^f~7J;Ypi z?qjx=XxV~J!5eQ<^|Slv#3~2IJB1DOzp!ij&KP6GrYQbrMBF-ldJt_X&rnfIYTF?m;blMFE|vc&HGh{k3224|lqA|4H2XIo6|Z zCAniPlEvTqx{3Mvlv{6FO&sLO5c#0!#LHD0+g4wWkpm;jupjTZY!h0UCGbh9T1EH$ z8p3e~<1Hm*uu>8OV#l`m+#h)Vi~8Pwai%pstRPgBr!JjG7fY>@vlJ$bTF@3tBIyiy zYmTf967^<|f*M5g=~i0J92b_>1d zw{#@)#^!ZDi)z`e?Z9vZ9t)0(f9kwBYl=jsnk@~CAz%s8O5kG8`skZAZzC_YWe8xB z70_E_%w+}9?+<<(vyR3Rg~@_bc`kro4132MgFyz^LCNR2OQB)LhG+E<_cRSTo-1D& z1_Gr5BXPnKWz2yF{f!A|HwHWZ#3ZvH*5;3#bSz%Q^y%x$(*#?Ro?IFop{F#`1+LpY zaS(1W*`q|Dy`Fou5{eQBVAmg#=Kch!K4N45UwnHs3F}H2o_BIOF&bhjwaZRZ&aI1D zAWzpm7Wfe2uDw43sTiOE7=)D~E|YddP7!+pQBWCq=et~c%5=0PCfjDJ3n2&ldX^A< znW+}b4!UEjmHb-1rhnM9&3whsu^UK0`{pkzl>TU<#5UQ@!IN$8IbK6BS}ta`^6i?9 z65m{|trik~fr62JD-!9JxVJ*fANbMzgL>pP9Rw##<-K(z_r11iXih8}Rz6^)Ldtqn Wr3J`pgNV}EkRi|p0ktd>l#yA=rfZ=L$x17=q1Uh+<>#n0 zSGlgtw9-m5+hsZGvNN-JYTx|<@2B^kXKSBiQP1p(bEiv7%02Gswse9%zf^CahfZ%> zOfk#1>7F~FUo$6%hu$r=t?aAMqwP3#vm0_t|164aTvTid2gCWd%T~v&!(q!8BBWO` z`x8uGYxLPL{otYdkSEQ@YC^@gTJNOH$$haS=lfpk^6_$Fe(jg;E?8aR%zLlzanYd^ zFvA2;(|k?-IuKidfW!A!56TBDykw4l*(=lmIx;Ofb`|2t1Xnp`a2)JQq%+RvNtcA`HjK zL`EaMPysrK879L~JV7L6xHd3^>mN+Fi0D)=dkU9ijBt~Ov3cQYhZNv)i8Kf_2X4>< zSnv?4f*XLNd8F9X3XqU5g2UNd3qhH}wUYuOVrd>YO|l@GZqgVuMmdI@Eb^1H2`rq` zXaJazNldZD6`KrT%M>YMwm~eRFzgy|J=E+#1g4)*tz13)p(V6fJo65`=cwo&O!vRecj;h|&_I8+xO8qRR> zAx@V|Y)Ga=pb>BsMvg)AYz{3?mW)w2+_-GLBpPVdFi>2cKHxu!jG_nFXcSL`R6?{H zi8_lvk!gjpTnIMMKgEngi)2VIVTvJwL+1wsl0^`s*^@1SK*(}siYyG4M8&h^Y>}6M zB*NMFDcF!;JQR*3X;Dm>R1OF=SWtFZFgnC7QEBbhGn7uZu`2sXS2UM%3#q2b9&qFhDPput==1TBzch7FbZ5+fuQ8kcTT0O5MPAJRh5FhUr5kO7|r z!bs^d6UoF5FcK`7Xki4^CUU8CiFiB_qX@^Lta8r~juSvKN7#WX3_na0j>H+G*$$8k zslkER*c6l(!+?MX3gC1#TqKuOq%;3EgC7GdYFImGcp% zWDy7A=fbKm0kLeBmy8P~St)o-5+OF4g-H(9`RhaF4g>~30@I*Yd{}I#FFDYtS4t>> zf-sYnB~hS>v0xQmhY9dUDCG(#$VRayC+b3@aVZfIXqEu%p^FxRfL?gHf)z`VgrhWA zvVzOOI}&{(P&x<%{@>HsWI>A7kE$W15TOP(4<4(b5qWq$I3$q`wXhg26djHA3W1W< zDt&U8%9Tiv2`D0`Oah?Ff)(!qm9J^StxVHVH+=gLzjV*G)=#bFe-yqbRA3Q}J@>qR zW0kotE$ffDctf*xPTnYva4p%>2fi3Pu|)=5I(lwkj&I)MJOXsVWF)B;Pg?3>> z{i&bNcaLIv9~?*Znx0Q?Sup5Io6$Hn$Sm8`yZUJI>b`yGYRcj(vgZ6$;GOZh3m-}w z2OfP#*qJBDl{ddJUuE<>YG}O08|QziYTjV%Z239*y3rm*pV(sE(6=flGH;`Ak)t)c zPP+m@+n<#C{ClyEx$0(-_+Z-HNdK)?`RlU zcH-2-^`Eu^d>Y2k$h_@6&x~B|*3T9_4=Y-W$ioD{;19c4m7nYzM4Yl=otH?4mu~ zhr0WPHKuc8B*vqxD~~fXWMvTN%CSY8m-;(LvgxZ^OW^t7!>N1ttvoqm{kp4(KTa;& zCaJ(sJJq4+lG;o7GCQ_4&{A$Wl2tOZF>&A>6f_inVlB5ZFTwXb=tf;5=El&g*J04* zqh_Qo6f*dh+y@jyrnbR?S}$?ZcgODD6qog4&8p6y9m6EbQDNmB&78ojy8%@fyFZPs zdv|{8Nn=aS^s=j|Wvi-t|33Kmi?R9Elo9VAr&`wR(hBOr_w=uCJ1{a;u<}shm;V$U zds=S_oD&dS^heV0nR`i#UBkW?^Xj8|7{@oAywc?j=%rO_B9yeur6b0vX+a-z+T+z4 zsdG1F?xJs`UxZnPIvrwEkhW-A4ZV1y&l$vf4AE(-JICG&=EtXvt>G_kR5^l(tZ_dRoSS6;_>`$%@X zo2ThumiO&%r+#Zc^H1*6t((XH*0h+$nGbH~eeK`+^xeZ*ZmG3H=FEWjCB44i?YVF6 z{`8@TuDOPxA9+;2uzQQ*Zl?er`d(@E%#-Y z;FVqnSoA!zzVY4I=CpFd?EiIqA(L^|9u%jesfH_?u zk(mN4Q&lqg81!agk*EQ7XhL-G@$Bb}yh2~$x$aHXr;ZW)I#Vx3mA6hIPEsv=pZVvZ zb;~k3Xv-_=qvFeE`~tKX7Vd|?BgmWY<2`e010N8_^JB7){hYX*KQpMVs(jJXPa8(Q zzD2(MoxB9UvD>C3JMReWkH~a-hfnv7ypb-FbY2p`r{^W4dR0dsW^|=jb5G~Xw^g0T zEA?jr)mQglA1mG-@4kt5@#ObXubdyZ2Pc|#S}oT}p-R@upv-sSK2OlDSp%ok3AH%}`CKK#I)6ZEg;#!;X*ex#MBA*!55t8cx# z$8tZq=1$1}Ubl%naKQR~ja+*VE3~m}&DIlB8vi;0yJq|?IG+ikeE1M(?@BYX-QSm0dYAkMY5d3u# zAMy9f<6I18w&rP#cKXEr{;K^=L5G_6`LsQr9zO^ioi19IVQ(nPUW!}2c8Bc)-!=(w zJ+#X(L z5-{a8)p4?ll25>xU|?WQ}${*^YfGQ4f~#b>8}Ze;B(4z!YMpZ$^5xAV~F87=g*W3cS% z`ce#ncMA07&M10;XMnB1#!8_SD_^Mk&|&dkW% zn7*2{FZYO_hzj2S>&Dl)gHH}lthmAewk=o?&FH4FQfIN2S`fef@lIx39n1P>$Hnz^ z^T)lHbDq4c3mfS!UEmuqbm^cXLaV~RTJv!fBP{5ckvg1uU-GqY?eUYl;~%`NUQp1N z+I^)|e)Q+ow!QGb=Ba5>_@F#{*3CupXZO0#xV|qgZUFwn@NwPUsKIvG8rG14`Ed*# zRx{i_#~U9kertMD(6dw;A?_P~CR)r@^U!y;Z@A?7p<tiL@gK5_%0Kgy{wvUzGm?F$<>T literal 0 HcmV?d00001 diff --git a/certs/mldsa/bench_mldsa_65_pubkey.der b/certs/mldsa/bench_mldsa_65_pubkey.der new file mode 100644 index 0000000000000000000000000000000000000000..b2345f059c9e342d38a4364beb2a2cb0ecade574 GIT binary patch literal 1952 zcmV;R2VeLV$>mco*dMf`pRTR55YTdI(*pC~XIe2*8Ok{)cVTT0!80Za@cB&=dhhok zCM@9Mk{_MXs;>wX@~R}64PZ5S= z8V12<$4LXnipDEtTcjyhjozj1GQxHP%Fe+^>_yKoAt-+kN7CEw%3BZB zIXc6pc(N6*f;=z8QCw23@`;j;^H4bL_{kJZZT<;FdQaCMp!W(Iy zMIw}>T5U%aa0dqwTC zOlbsuPr&aQ$_=K(c@=n^(vdteRY2#Kx&9E@r=Po>wV;wLfbg{V1*S3&lbD}D4NtF$&B;PH+c18h2 zO?f=~i2KGbrv3>A0M%9t-flN7Rlp_ik$idG~z zr#8g_z@I-pn)c}yf&o}?4h_8e16O6JT0K{RBff5_=px@QaO(;KmTT`IpYmeovTiya zKp)bVNYNPZ>rz+(CeC%SI-Ofml(KFPKRLG9ik;|ugEGuRHJf_vvK~=4Y!ukIRkM-r z3_9g^(7mvIID{%kvbNgSb=EFm#}HEY-3b+M1Tn)}YYbozsBR#s-M4bXo`uqn7Jfb8 zV}UaL%DfNnK6GlaV8IYjd}pK?r?~Cr^-e)krg9rBGio>SwHyI`q8}_y3cu7WB#~HR z`}kwo_;~flcrx0V>sTNq8LoW8L&2n0Dem)rKQ8e#f*mOTsPT;;?Ls zn;<<%Bz)?jbtmQYaO*qACN~8Cih9t(w}iJT`wpY1am`o;HsbPk%nx`7E4$-U1##SL zH!_h%LQf&!G_5}{TE`6+896anX*`U+=cYTY`$mZd!HgD~20GAw*06hh_>p}2*=9NV zyjQ1qi#B+`91bG|4g_HqH2KD3Sl{$g&d?7G?6HFMa&vM&0>0y%V{^zMWx7{VsTr(j zP`xd3TaynQfp^y~!;?~O+<8);G|mI` zw{_D|Rp0;5Pekq$o68ce`QND+>pJRf?$Q4#|Fl&N`Tw mPCf`Aj}ZL9#LqX4Y1mhtNPueZ4BaQ0`RCBmHrVY!6dMqKlg3m4 literal 0 HcmV?d00001 diff --git a/certs/mldsa/bench_mldsa_87_key.der b/certs/mldsa/bench_mldsa_87_key.der new file mode 100644 index 0000000000000000000000000000000000000000..a0d8900cf17f628a22f84e199a83d4b77fb652c6 GIT binary patch literal 4896 zcmV+*6W{FbNqI*V#EPkOD)2UxT#+1I|15*@iv;{#WW7mq&CHqo507rGb(_htxsa2; z&H^nG3{)=SK2rbSdde+%oE#xK=+mr|rMMcU)iBiNU zK}G=_lOT&gZ3#AIOrk(yxGWn0AYnp`B&QG=CnX{jF%vUJ3?d>Jr;!XKVc9Z9$d*Z5 zkcpdw0bB?|WQ2tbLLneXA(8+ngCI-@$5ELEW&s#c6G#dRLXb=p2!j-D5D<~##Esz+ z5fDHrnUXLPIc$-JXb6K0RDgh@2vP|!aSRXyQvhX=5-kj(j2IL}*c1ljHgb~?XbHjy zQ51|5IT6@I0vI_dm=06?S`kRT>907+pWAPgF?5MvM#STGG) zfM}3LDv_vhm>@tQgKWS^4U3Qw2njKa01^-sZo&pK8YU15kwgfYjbMf-5g=`&5`l}x zQOlrV3726=whbXkQ3w+Z3N(gEfMpap1R()|nz&5_K}Z9VfnpSF5Ec>QqDkX0WdxIr z95Zkm6;R|jfFU;qAjTxfB8W;vfD}WBR764%NkJL8EzATB8Np>+pb?Y+gygnC!WeQ~ z0%;M2Boj3NVl)I;Kp_CcC=3@c5JzB3!eN|%EFhFISdt0M00KgkX_+Vnm;zFeGH!|( zE>x6(1ICF1p@c|+NK(WAkuW465)FfZ1(HZ%m`0M}rX?VgO&m8Yo0N^nh=8IPatsM@ zfi{pNMQKwuY|iAo|6Qy2kQFf9ND2or#W!XgfcCMpEPOc_G~$T&>VvXB!g5E4it0jN>Yl0XqB zVh{lg48|zqMqnfXjTE*JP_`vRI6y?g3>m;=oJ0a4C1nC5h8hxZQ6!NG2t)}rW|0IE zLqd%rpl}qCC7=L+G001E+-{l4Qgdfs_VpQzjCSwjm3sWJ8vOL5OhU zrbH6J2?57o!yrP#Kxh!AQKX=8RG0*avH(;VYDkzMA+n8vAc2_{feOWl3L_DU7DOb; zDOm`S94Q49$wcEI5F4Rnf})TB0D_pZg~$Xb$g*Y0#)!-ak%R~^l$4FY7)F9NOoI?| zBe95qAdVRWij+noAvKN!z=&J62?`iQA&_MQvLVC}P{Du<2|!8YsEnjGVObJ}AP6lG z8HMCDV8pgy02l_0xJ4NgN>ju@$vAP@NDx^F0s;_eQz(EUflSF3CZR}V86goIH;7A= zEJ(;~V~AyeKw+UoF@hKffB+^?6iJ~nPy)zB316 zMocCF95n(A6bu-F01zeu$TE!N0%*(>E{Ql`5E3MlLS^G5DF}c;2`NTfCP`Z`fCIrS z1POvnNG%*TP1^#7A+=F~fGx`)fm<{|i8e??paogBWD-RoATd!2!;BP2aTqluAVmd; zAPESuDHxy$N&t%DxJ3ddiP#V&QG$#Uk}w=3jvSLsqexMcsA=K^i4zlH%b1J_A!17u zP7$LCm_S025(t2VEx;0B1EeV!fB}?5iV_iW#3C}9Mu;00O-l$70!T%Hq-5cU3}X;* zNSFnixP$`~1w@7nAQ5Q3af8BX-bt;r+mp*6E4`JMSANU9bGAJeN)F_lfw5gDWTF%j z8;;P}IQGZ8pLaZB1d`#GuOz4W@QpgZU8`J|5BxQ}V%S3c$BXxX(Ku)nUQd}Z$FIF7 z&Kz3_8_&D@`Sg%X!J-oR(4{Q>dsVQp#zN-n5MJp3=tkt=iy^$Rsh)La@VJM$5q>Ca zO<2uTaSUqA`%=PN%o%4-!Y>J8QG)B6lo7OAXMb22vOhN;ltgoC0`>b_1FT)fsdv1#MW~ZjGD{YPFjiB6O_)RVPNyyMlL4Zdo`cv&X!bRD)?BKD`hBFUq;)nhvvJMul7mXZj$l@qTZ zCW{r9iKU2-c(hlYQI?#TlhuRy|CA{nr6{BfBCEV`NTL=Tq`Hg#vZ(`>U$lgdw7Yu| z#lqX;h_%zK2QyRX5T3<>uy-#{Z4HUE1egWp(>9mQK263UeTT?J)h3)#3R-`)LW7(y9;5_sM4WY(Fubb;cz$Y*UaBBf}djXp`f5NN1$ z9T?95;ZJwi#^VUPOzr>Ko3PPPyNi*{Un={LO+1*o*O-~7A{5t@wYa2GF{h!VDDE+} z(7^`<79CSXVj~4awoj4+Q<`yBt`>o`$(Zzi5jVof^5jV4%<&x|;>R4Agy1>ppP-^7N{B}DP*Sz7H(a58t$Z*(&43)N^yamnBDVVuZGaH> zKiyl|)B_Yjkcg%w4EAWzNolGFvg{{ zuk#I&oT*z(yBQfdQ8s}05chLQ7wo)}2qCcyBgEFyv;D5;ar00SCmMzDtJoG~%dNYv zR5zoj^a*EFVTKP5B@Nn2$L9ioYgy9Bh)sR{JxBy?mEXdPBXCOf+{q-3eo`WSoLn-c z)$$Ptpwyz++Z~@9RFAdxadAn!I0?2Slz<;C49Dcw&8t&+DD6li6fX-p(5DFD{T{a6 z5|b^J2D+8Y8twaF=kXk^!|IJZQ!=$UCfzykIZkgrsp=&uxNLn2k<__+XXNE$*J}f% z*XYu~G*hM)Au1{f)2*Q_YKSe62D%HX(c7fZNe@Ed%J69wW6KLnE}0-i<8CsFp$L^{8g@7wuypZS4T{oEI1z@hEz^kN4^e2jd6rO>+-b|EB}(6+ITJ?;@axMI0Vtdg z;$q6RKv6}G7>LPOud_(iAn4dzqL_3g`Xw2HBKm@SIE`Y40b?LGj;|GpbRPYGzF@;; zG0xkPxf3dQsr+ht80-vtOop%OZBhw#QiqBQD)W;yl8azME)uEtd|_OVz^ZO)_DD#^ zKHwd+`^4A*xbpPh!Me5bCqLVGVjK#-+ub}2DTVPwUn@g^SEpJ{8@>bQReO=0OpDk3 z-erEMNV}<)27kb8?T1r$v|4<-&d&h|MPb1xw(_)FYlQw72|2;YmNss>en=AL+#*O9 z3%!zL`pKII+U*2rLKTep*uxDWotC`A2O2C{KN^EW@ZjF#K#l}vJcl0ody0F~o)z`% zJaT?58TkG1C~=DQ%S>Tkh2U?v^A`}yL`9622%+&vq#f!tFM=z=3-5E`!Zq9HX#KG0 zdo2(BQyaK8RMtZ<&x5cS+M9-g`sO!Vo}}A+StVJ;_lTSDePvpUs9) zOKec0y8iang=jH}`|JLau+U7rWlLh>--v#Y;Ir%#X*23mX_^Zs`^ul5AJ4Jt^pE0G z$mUUX?y)pJH{C5da&|MpC+EGvf6G%{-^3p_+iH;?YNf{FH)tAt_w6djnO?nFR|z71 zoV|{%zV4+e z&RG`#rF)-f4T)eqp3g8nIg$Q899KxN8Zn%^YZ`1Dk_!Zcs z3zFY_nxgEZJ-p56wX^l;?kZRJSj4L9GelovzK}@e%WBJ2lx^lB1MABLxU{9d?0F## zvs`o$%d@5iFLTip*>Fz9_5b}zJEnnUi2CYmzZ8Dii@SahJS4_a&6_$6aTqRX=XPY`{=h|{=cdQh@_$mGgYi% zcM5MGuh^T%CKL9=@6HbvhGZMSaW(lLuf%$zJBdKc2@!h%RMpZd$o>xRjQcAH5^cMv zE_y4%kt%izF)&J7%9hEApb|iKzRg)*!h5gwDcgY|<2L$l+dXyr_joMEF~&m-r~^?$qfiC(Diq5m4M705k{ z&IY7l)<79ZGgCC4*me9xb2X1}1c0IC{Fty(V?l&hqJ>Uq6D>YVXn#Wl1p-kU~|%+AB@kus&t->{lmA0<-1x< zJ>tVCcqY`dMU>Mmzl@SrJZ|b!IDaB%$)^+`xf8^oM1#Z`%9wG-6L31G`<}#7=tQoy?#xsDdM3l*<^zGUltzmY%E4 zXm5zOa%H?81z`SbcPbHMSt;AP;84|3cNVy}^r^n^rK%uME^{I7ccaL>3>FWAd#}5Z zmD6tLD0cw7gGQwa8R!uEBmcZ3sV&}^>w*K0Y_n&vU)15*!g`mx z)Lskz!LuJL8aJ3GC$X*HU(8tRZ$f-0T-!OCq!n+I=Q><1hy*u5Sm8aU2Ux)hHYYsO1yLMos$jm zV)|HQH%|+rp;FER&JTAftw%V@ykX|8ML*6O{hLSxLSgCL5iOy2L3_ z1t=d?SsXqkhRny=)2QbVptd8quK zXC;W6wq}FBV*Y&ko>1)-leT)W#JaI8E<4+x{KL+5`V z;uP__B_RFeuSA}Ah)pI5v9J>L-#k-Dc)4If(~pf2V_+yS2ci@^j8Nk4b2(uJWrD S?WTs0FXd+s-M?^Cs+)9_gqA=6 literal 0 HcmV?d00001 diff --git a/certs/mldsa/bench_mldsa_87_pubkey.der b/certs/mldsa/bench_mldsa_87_pubkey.der new file mode 100644 index 0000000000000000000000000000000000000000..e3b1f10e645865bc60cca64cf2672e1ee396b2aa GIT binary patch literal 2592 zcmV+*3g7kbNqI*V#EPkOD)2UxT#+1I|15*@iv;{#WW7mq&CHolUn>?myO_YIX%3Z{ z3!-fPY}?4E2}W#?P^5J*_mHeHw%sAG#`*s4##^Y53NFw>tEfDUzxPDF4bSvw{1#{T zIY?ht(dQpYfKa|v(YMLcGRFvv-YhZp9mlM*dDlxDBZ&&!jzmEeD47$pCZ-O9V5*IL zBNMu8D3Df!p(BfdAeVe*KkZ%63Eq}Hye6Vw(AixJOK~NwR7$IINZ*U>jmlL_co{(qERf_EF z3LcQ$Kd?>F80t^UT@_5YHJdafFa}c>@V+NDvjl3rzo$9wsgDkr#r2;?C6meW_A8E( z1_3>R81n4#1x&3=%b29KVIbOpq5G0duZM4L(pT)wl(TuiS%?>b&WcygSFS#SfiHt$ z*!gH7=W<)tfK_N+XB7;K+)u-aHax7a7G50sXmo0;XxLenEi+=|y|cGXh&8zFvKEDx z2yt;aehgC<+BoGX37pwR>}cAJ(5(lQ^L^sh$fUrulAPn;Sr{S zJwrbqy!M#B{|1I(C)|-#)ck0J=rum>lvyY*-rWOWX2D5U-MrNbXEgDq3Rje60xVKP za67@8|JrZ4R7U~YC*(*>G+vJu$qRJZeIh^Bw_VnD0F6#~bB5O2 zDrKwRu<8-5-?~HFs0#Z8IDsppDg2dlnhb27&D_rl3>ZOg9i#RVOcU|~#!#7tbEo-! zgnvu`&MqN#ju(1|Z-M5(Ql+3gR6Ojkog6#tpY- zsJM3acUz5emOc}|cKUm_f?wyIR1O6ipQJ*iw38zSSwpDkT>Kc9+pU^_3i2ROticmL zmw6@7JZHjfZWpd@hHse3tP`JyWIau9 zptCu~Xd9>NJ`Zchq~ahabw3Ff{~FAv#BIX-!wWZK|CVA zm^FGQe*W=qStm7f&UC7@a)PMhfqHAoGo{+1W6Ca&12XJm+fsWL`~fX65+3=Zav?l* z3}Kvpa|CfgMO}YM90>@d>@WSq`&nuyder=1AOtjh2p5K@Un{TxjLj4V0?xx|Pd}4uv`bYn4#_0{x^| zDR@uNu4dL;=SBXQu%qIKz|w&T@$u){VxFKhhU=kjN+ymu3{em>5r_DBJV|&-9Q!syr91jU(yS3=8 zrU4NZ83~MjY2Q2Q(+WD*z2O(Hl05bPHP+7uruXT=neBk%64gt&->*(mt&V1gQ9plKrTXx>A4bg zyLo)DHz2mJLpq3Ad}t_Nn8NTXyrE%;A49xCk3;i*7MA*waIZX{OW9!Q_AZ3lh%q## zg%AbrK&Yipl3DlQ#48dPalVX70{#-VJB4*O^K&hn09}BsATL@A7k+1QBwD%iu`{Gs z9Z7O5e@7Ju;6)VOcZO{PzE{wy7^dBn7(a^hwbxqg$a#NJVLY3%oAb0a(Kx?1&Q#I( zwnghw4Vnp94J-?>@-RA;!4r|vpN);sI6h3SN>!&q5rf2V@GEGZ2d%e*##21|3SA`J z;Z<_a&OXS{SBipOcq@R#xd}%2kU3JR&ObdtJ19k?vmwIG6iGpBINBRu7D@SK08X?Z zRdDE78W_Jp?=i9GjfufX==E1M`oVebEa-i<1I%U#Z&HK`G#D%aMS%e2UX89CmWxGm z01CCwjSe+k8V9S3kDJoI6%uIBuohq9X&nRr{9`lCABoLU|LhrQbfeBqtCQr$6ILh5C0YTpHj829 ziJ+@uVhc<9pZC(+ zx<*q^&ZxeRO4i>l2Ifqf!L~{5#Otc0DQ(oujJ7}#IcfKG&9RwAPTtG*oig*uM@M?g z`=bmy-?!fEnclD_1T?N|{F%Jo)xPKJ`RAqqnhaiM=2PU+SghJO?|P9NigPSK99m#F2oS$C)cAmr;ral8iL#BF&K07Gw4ceTTE ztrMx`np+x~bijJ~#jsd49Hmj)p%l#~ak1yB6sJa$(_D-ik#|Ne6{?>1D|tb7_aak$ zQQMe3TXvDF(AmHX%j zWLA8Z%#g9Xp!G6ovtK6;?xHRhlN4{CB3nC@wR;aX-Jk^+=VJ`a1Ut8D-gXuu&4no}**KQe&l?syy CCi` for the gate's full coverage). + +The `DILITHIUM_LEVEL{2,3,5}k` / `CTC_DILITHIUM_LEVEL{2,3,5}` / +`DILITHIUM_LEVEL{2,3,5}_TYPE` / `DILITHIUM_LEVEL{2,3,5}_KEY` +pre-standardization (NIST PQC round 3) enumerators are intentionally +**not** renamed: they identify a distinct draft-era OID surface and +coexist with the FIPS 204 entries in the same enum. For the same reason +the `"Dilithium Level {2,3,5}"` OID-name labels in +`wolfssl_object_info[]` (`src/ssl.c`) are kept under the Dilithium name +and coexist with parallel `"ML-DSA {44,65,87}"` rows. + +The PEM header / footer markers used by `wc_MlDsaKey_*` PEM +import/export (`"-----BEGIN ML_DSA_LEVEL2 PRIVATE KEY-----"`, etc.) are +**intentionally unchanged** — the string contents are a serialization +format and renaming them would break PEM files written by older +wolfSSL. The C identifier names (`BEGIN_ML_DSA_LEVEL{2,3,5}_PRIV`, +`END_*`) are likewise unchanged. + ### OpenSSL compatibility The OpenSSL-compat enum value `WC_EVP_PKEY_DILITHIUM` and macro @@ -115,7 +179,10 @@ migration), define one or both of: - `WOLFSSL_NO_DILITHIUM_LEGACY_NAMES` — suppresses the legacy `dilithium_key` / `wc_dilithium_*` / `wc_Dilithium_*` macro / inline - aliases. + aliases, the `ML_DSA_LEVEL{2,3,5}*` / `CTC_ML_DSA_LEVEL{2,3,5}` / + `DILITHIUM_KEY_SIZE_E` enum aliases, and the legacy size-constant + family (`DILITHIUM_LEVEL{2,3,5}_*_SIZE`, `ML_DSA_LEVEL{2,3,5}_*_SIZE`, + `DILITHIUM_ML_DSA_{44,65,87}_*_SIZE`). - `WOLFSSL_NO_DILITHIUM_LEGACY_GATES` — suppresses the bidirectional sub-config gate translations (legacy `WOLFSSL_DILITHIUM_*` / `WC_DILITHIUM_*` ↔ canonical `WOLFSSL_MLDSA_*` / `WC_MLDSA_*`). The @@ -124,146 +191,78 @@ migration), define one or both of: compile the canonical implementation file; the reverse arm honors this opt-out. -> **Note on `WOLFSSL_NO_DILITHIUM_LEGACY_NAMES`:** in this release the -> opt-out is only useful for builds whose consumer code (TLS, ASN.1, -> EVP, tests, benchmark, examples, ...) has already been migrated to -> the canonical names. The standard wolfSSL distribution still uses -> `wc_dilithium_*` and `dilithium_key` in `wolfcrypt/src/asn.c`, -> `src/ssl_load.c`, `src/internal.c`, `wolfcrypt/test/test.c`, and -> elsewhere; suppressing the macro / inline aliases breaks those -> translation units (e.g. `wc_dilithium_verify_ctx_msg` becomes an -> implicit declaration). The flag is intended primarily for downstream -> projects that have completed their own migration; in-tree consumers -> will be migrated in a follow-up PR. - -## Internal infrastructure files migrated to canonical sub-gates - -One wolfSSL-internal file outside the dilithium.h reach had its -`WOLFSSL_DILITHIUM_NO_SIGN` / `WOLFSSL_DILITHIUM_NO_VERIFY` sub-gate -references migrated to canonical `WOLFSSL_MLDSA_*` spellings: - -- `wolfssl/certs_test.h` — auto-generated cert-data buffers, has zero - `#include` directives. Reachable from external TUs (examples, - embedded apps) that pull in only `` and do not - transitively include `dilithium.h`. Reads 11 sub-gate references - (`_NO_SIGN` / `_NO_VERIFY`). - -`wolfssl/wolfcrypt/memory.h` previously branched its static-pool sizing -(`LARGEST_MEM_BUCKET` / `WOLFMEM_BUCKETS` / `WOLFMEM_DIST`) on a -combination of `WOLFSSL_MLDSA_VERIFY_SMALL_MEM` / -`WOLFSSL_MLDSA_SIGN_SMALL_MEM` / `WOLFSSL_MLDSA_MAKE_KEY_SMALL_MEM` / -`WOLFSSL_MLDSA_VERIFY_ONLY`. Those branches were removed: when -`WOLFSSL_HAVE_MLDSA` is defined, the file now picks the larger sizing -unconditionally. The static-pool macros are consumed only by -`wolfcrypt/src/memory.c` and the test harnesses; production deployments -that need different sizing already override `LARGEST_MEM_BUCKET` / -`WOLFMEM_BUCKETS` / `WOLFMEM_DIST` directly. Removing the conditional -gating drops memory.h's dependency on ML-DSA sub-gates entirely. - -To keep the legacy `user_settings.h` path working for `certs_test.h` — -i.e. a build that defines only `WOLFSSL_DILITHIUM_NO_SIGN` / -`WOLFSSL_DILITHIUM_NO_VERIFY` and never reaches `dilithium.h` before -the cert-buffer header is processed — the forward translations for -those two gates live in ``. settings.h is -included transitively by any TU that pulls in `certs_test.h`, so the -canonical sub-gates are always defined before they are read. The -remaining ~30 sub-gates are read only from wc\_mldsa.h / wc\_mldsa.c, -both of which transitively pull in dilithium.h first; their forward -translations stay there to keep settings.h lean. The reverse arm -(canonical → legacy) lives entirely in dilithium.h because it is only -consumed by unmigrated code, which by definition includes dilithium.h. -The generator script (`gencertbuf.pl`) was updated correspondingly. - -`certs_test.h` and the `memory.h` static-pool macros are both -wolfSSL-internal infrastructure (an auto-generated cert-buffer data -file and the static allocator's default sizing), not consumer-facing -API; these changes do not require downstream code changes. - -## Macro / comment cleanup inside `wc_mldsa.{c,h}` - -A follow-on cleanup of the ML-DSA implementation file finished the -internal naming migration that the file/symbol rename above started: - -- All algorithm-parameter macros defined in `wolfssl/wolfcrypt/wc_mldsa.h` - (`DILITHIUM_Q`, `DILITHIUM_N`, `DILITHIUM_D`, `DILITHIUM_ETA_*`, - `DILITHIUM_GAMMA1_*`, `DILITHIUM_K_SZ`, `DILITHIUM_MU_SZ`, - `DILITHIUM_MAX_*`, …) were renamed to canonical `MLDSA_*` spellings - matching the `MLKEM_*` internal constants in - ``. The `PARAMS_ML_DSA_{44,65,87}_*` - per-parameter-set internal constants and the - `WC_ML_DSA_{44,65,87}` / `WC_ML_DSA_{44,65,87}_DRAFT` / - `WC_ML_DSA_DRAFT` public level identifiers keep their underscored - spelling — the level identifiers are established public names and - the `PARAMS_*` family is internal-only. -- The per-parameter-set size constants previously existed in **three** - redundant spellings — `DILITHIUM_LEVEL{2,3,5}_*_SIZE`, - `ML_DSA_LEVEL{2,3,5}_*_SIZE`, and - `DILITHIUM_ML_DSA_{44,65,87}_*_SIZE`. They were consolidated to a - single canonical family, `WC_MLDSA_{44,65,87}_*_SIZE`. All three - legacy spellings remain reachable as aliases through the - `` shim (gated by - `WOLFSSL_NO_DILITHIUM_LEGACY_NAMES`); a duplicate `MLDSA_N` - definition in `wc_mldsa.h` was also removed. -- All ~20 file-local macros inside `wolfcrypt/src/wc_mldsa.c` - (`DILITHIUM_SIGN_BYTES`, `DILITHIUM_GEN_S_*`, `DILITHIUM_HASH_OID_LEN`, - `DILITHIUM_PARAMS_CNT`, `DILITHIUM_COEFF_S*`, `DILITHIUM_QINV`, - `DILITHIUM_NTT_ZETA_1`, `DILITHIUM_POS_OFFSET`, …) were renamed - to `MLDSA_*`. The file-local macros are not user-visible and have no - alias in the shim. -- The user-tunable knobs documented in the `wc_mldsa.c` file-top - comment block — `DEBUG_DILITHIUM` and the five performance-tuning - defines `DILITHIUM_MUL_SLOW`, `DILITHIUM_MUL_44_SLOW`, - `DILITHIUM_MUL_11_SLOW`, `DILITHIUM_MUL_QINV_SLOW`, - `DILITHIUM_MUL_Q_SLOW` — were renamed to `DEBUG_MLDSA` / - `MLDSA_MUL_*_SLOW`. These are set from `user_settings.h` or `-D`, - so a forward-translation block was added to the legacy-gates arm - in `` (gated by - `WOLFSSL_NO_DILITHIUM_LEGACY_GATES`) so consumers using the legacy - spelling continue to get the intended code path. -- A long-standing typo, `dilitihium_get_der_length()` (5 call sites, - `static`-scope), was corrected to `mldsa_get_der_length()`. -- All `DILITHIUM_*` legacy macro spellings remain reachable from - unmigrated in-tree consumers (`wolfcrypt/src/asn.c`, `src/ssl_load.c`, - `src/internal.c`, `src/tls13.c`, `src/ssl.c`, `src/x509.c`, - `src/ssl_api_pk.c`, `src/ssl_certman.c`, `wolfssl/internal.h`, - `wolfssl/wolfcrypt/asn.h`, `asn_public.h`, `oid_sum.h`, - `examples/configs/user_settings_pq.h`, - `wolfcrypt/benchmark/benchmark.c`, `wolfcrypt/test/test.c`, - `tests/api/test_mldsa.c`) and downstream code through a new - reverse-arm macro alias block in ``, - gated by the existing `WOLFSSL_NO_DILITHIUM_LEGACY_NAMES` opt-out. -- All function and section comments inside `wc_mldsa.c` had their - "Dilithium" / "dilithium" prose replaced with "ML-DSA" (the file-top - credit retains a parenthetical mention of the historical name). -- Every algorithm-step citation was re-numbered against FIPS 204 Final - (August 2024). The implementation was previously annotated with the - draft (IPD) numbering — e.g. `Algorithm 18 skEncode`, `Algorithm 26 - ExpandA`, `Algorithm 29 Power2Round`. These were updated to the - Final numbering (`Algorithm 24 skEncode`, `Algorithm 32 ExpandA`, - `Algorithm 35 Power2Round`, …) and the section references were - retargeted from the draft `§8.x` building-blocks group to the Final - `§7.x` arrangement. SHAKE128/256 notation references were redirected - from the IPD `§8.3` to the Final `§3.7`. Citation punctuation was - normalized from `FIPS 204. N.M:` to `FIPS 204 §N.M,`. - -These changes are contained to `wolfcrypt/src/wc_mldsa.c`, -`wolfssl/wolfcrypt/wc_mldsa.h`, and the macro-alias block in -`wolfssl/wolfcrypt/dilithium.h`. No external consumer is touched. - -### Retained internal symbols - -A few internal-only spellings are intentionally **not** renamed in this -PR: - -- `DYNAMIC_TYPE_DILITHIUM` — heap-allocation tag string used by - `WC_ALLOC_VAR` / `WC_FREE_VAR_EX` inside `wc_mldsa.c`. Pure - bookkeeping, never crosses the public API surface. -- `ML_DSA_PCT_E` — internal error code returned only by the FIPS - Pairwise Consistency Test path inside `wc_MlDsaKey_MakeKey`. Not part - of the documented external error-code surface for this algorithm. - -These are scheduled for renaming alongside the eventual removal of the -`dilithium.h` shim. +In-tree consumers have been migrated to the canonical names in this +release, so a build that defines `WOLFSSL_NO_DILITHIUM_LEGACY_NAMES` +(with or without `WOLFSSL_NO_DILITHIUM_LEGACY_GATES`) compiles cleanly +and `make check` passes. + +### Internal API note (no back-compat aliases) + +A handful of identifiers that were defined only in wolfSSL-internal +headers (no presence in `dilithium.h`, no public-API surface) were +renamed in place **without** a backwards-compatibility alias. They +affect downstream code only if it reached into `wolfssl/internal.h` or +similar internal headers: + +| Legacy | Canonical | Defined in | +|-------------------------------------------------------|---------------------------------------------------|------------| +| `DILITHIUM_SA_MAJOR`, `DILITHIUM_LEVEL{2,3,5}_SA_{MAJOR,MINOR}` | `MLDSA_SA_MAJOR`, `MLDSA_{44,65,87}_SA_{MAJOR,MINOR}` | `wolfssl/internal.h` | +| `SIG_DILITHIUM` | `SIG_MLDSA` | `wolfssl/internal.h` | +| `dilithium_level{2,3,5}_sa_algo` (`enum SignatureAlgorithm`) | `mldsa_{44,65,87}_sa_algo` | `wolfssl/internal.h` | +| `dilithium_sign` (`enum ClientCertificateType`) | `mldsa_sign` | `wolfssl/internal.h` | +| `MIN_DILITHIUMKEY_SZ` | `MIN_MLDSAKEY_SZ` | `wolfssl/internal.h` | +| `minDilithiumKeySz` (struct field on `WOLFSSL_CTX`, `WOLFSSL_CERT_MANAGER`, `Options`) | `minMlDsaKeySz` | `wolfssl/internal.h` | +| `haveDilithiumSig` (bitfield on `WOLFSSL_CTX`, `Options`) | `haveMlDsaSig` | `wolfssl/internal.h` | +| `peerDilithiumKey`, `peerDilithiumKeyPresent` (`WOLFSSL`) | `peerMlDsaKey`, `peerMlDsaKeyPresent` | `wolfssl/internal.h` | +| `HYBRID_*_DILITHIUM_LEVEL*_SA_MINOR` | `HYBRID_*_MLDSA_{44,65,87}_SA_MINOR` | `src/tls13.c` (file-local) | +| `dilithium` (union field on `SignatureCtx::key`) | `mldsa` | `wolfssl/wolfcrypt/asn.h` | +| `dilithium_test` (test-driver entry point) | `mldsa_test` | `wolfcrypt/test/test.{c,h}` | +| `bench_dilithium_level{2,3,5}_{key,pubkey,sig}` | `bench_mldsa_{44,65,87}_{key,pubkey,sig}` | `wolfssl/certs_test.h`, `wolfcrypt/benchmark/benchmark.c` | +| `bench_dilithiumKeySign` | `bench_mldsaKeySign` | `wolfcrypt/benchmark/benchmark.{c,h}` | +| `BENCH_DILITHIUM_LEVEL{2,3,5}_SIGN` | `BENCH_ML_DSA_{44,65,87}_SIGN` (legacy macros deleted as redundant duplicates) | `wolfcrypt/benchmark/benchmark.c` | + +The benchmark CLI options `-dilithium_level{2,3,5}` are retained as +deprecated aliases for `-ml-dsa-{44,65,87}` and will be removed +alongside the dilithium.h shim. + +### Test coverage + +The canonical ML-DSA API is exercised by `tests/api/test_mldsa.c` +(~24 `test_mldsa_*` functions), `wolfcrypt/test/test.c::mldsa_test`, +and the TLS / X.509 paths in `tests/api.c` that exercise ML-DSA +end-to-end. These run under all build configurations including builds +that suppress the legacy alias surface. + +The legacy-name shim itself is covered by +`tests/api/test_mldsa_legacy.c::test_mldsa_legacy_shim`, a single +focused regression test combining three layers of check: + +- **Compile-time `wc_static_assert`** over every alias spelling — all + three size-constant families (LEVEL, DILITHIUM_LEVEL, + DILITHIUM_ML_DSA) at all 8 spellings per parameter set, every public + enum alias, the error-code alias, and the FIPS 204 + algorithm-parameter macros. +- **Typed function-pointer assignments without casts** that bind each + symbol-form alias (`wc_dilithium_init_ex`, `wc_dilithium_free`, …) to + a pointer with the canonical signature, so a signature drift in the + shim trips a build error. +- **Compile-time invocation of every arg-reordering macro** under + `if (0)` so the compiler type-checks the macro expansion in every + configuration (including verify-only builds where the runtime smoke + test below is skipped). +- **Runtime make-key / sign / verify / export / import / DER round-trip** + driving the arg-reordering macros with valid inputs; a same-type arg + swap (which the compile-time invocation can't catch) shows up as a + verification or import failure. + +The runtime portion requires both sign and verify; in a verify-only +build it skips and the compile-time layers carry the coverage. A +same-type arg swap on the verify side specifically is then caught only +by the canonical KAT-driven verify tests in +`test_mldsa.c::test_mldsa_verify_*_kats`, which always run. + +The whole file becomes a `TEST_SKIPPED` stub when +`WOLFSSL_NO_DILITHIUM_LEGACY_NAMES` is defined. ## ABI note diff --git a/examples/configs/user_settings_ca.h b/examples/configs/user_settings_ca.h index 7bc4e63c82..0ed61308be 100644 --- a/examples/configs/user_settings_ca.h +++ b/examples/configs/user_settings_ca.h @@ -146,9 +146,8 @@ extern "C" { /* ------------------------------------------------- */ /* Post-Quantum Certificates */ /* ------------------------------------------------- */ -#if 0 /* ML-DSA / Dilithium certificates */ - #define WOLFSSL_EXPERIMENTAL_SETTINGS - #define HAVE_DILITHIUM +#if 0 /* ML-DSA (FIPS 204) certificates */ + #define WOLFSSL_HAVE_MLDSA #define WOLFSSL_SHAKE128 #define WOLFSSL_SHAKE256 #endif diff --git a/examples/configs/user_settings_pq.h b/examples/configs/user_settings_pq.h index 5a7d7aaac0..d49a5406ac 100644 --- a/examples/configs/user_settings_pq.h +++ b/examples/configs/user_settings_pq.h @@ -87,13 +87,10 @@ extern "C" { /* ML-DSA / Dilithium (Signatures) */ /* ------------------------------------------------- */ #if 1 /* ML-DSA (FIPS 204) */ - #define HAVE_DILITHIUM - #define DILITHIUM_LEVEL2 /* Level 2: ~128-bit security */ - #define DILITHIUM_LEVEL3 /* Level 3: ~192-bit security */ - #define DILITHIUM_LEVEL5 /* Level 5: ~256-bit security */ + #define WOLFSSL_HAVE_MLDSA /* Uses FIPS 204 final standard by default */ #if 0 /* FIPS 204 Draft version */ - #define WOLFSSL_DILITHIUM_FIPS204_DRAFT + #define WOLFSSL_MLDSA_FIPS204_DRAFT #endif #define WOLFSSL_SHAKE128 #define WOLFSSL_SHAKE256 diff --git a/examples/configs/user_settings_wolfboot_keytools.h b/examples/configs/user_settings_wolfboot_keytools.h index 363a8d8099..caf4bac447 100644 --- a/examples/configs/user_settings_wolfboot_keytools.h +++ b/examples/configs/user_settings_wolfboot_keytools.h @@ -115,12 +115,12 @@ extern "C" { /* ------------------------------------------------- */ #define WOLFSSL_EXPERIMENTAL_SETTINGS -#if 1 /* ML-DSA / Dilithium */ - #define HAVE_DILITHIUM +#if 1 /* ML-DSA (FIPS 204) */ + #define WOLFSSL_HAVE_MLDSA /* Builds to FIPS 204 final standard by default. * Set to 1 for draft version. */ #if 0 /* FIPS 204 Draft */ - #define WOLFSSL_DILITHIUM_FIPS204_DRAFT + #define WOLFSSL_MLDSA_FIPS204_DRAFT #endif #ifndef ML_DSA_LEVEL #define ML_DSA_LEVEL 2 diff --git a/gencertbuf.pl b/gencertbuf.pl index 65e66895cd..a3573d6d48 100755 --- a/gencertbuf.pl +++ b/gencertbuf.pl @@ -287,1812 +287,40 @@ print OUT_FILE "#endif /* HAVE_FALCON */\n\n"; -# print ML-DSA raw keys -print OUT_FILE "#if defined(WOLFSSL_HAVE_MLDSA) -#ifndef WOLFSSL_MLDSA_NO_SIGN - -/* raw private key without ASN1 syntax from - * ./certs/dilithium/bench_dilithium_level2_key.der */ -static const unsigned char bench_dilithium_level2_key[] = { - 0xea, 0x05, 0x24, 0x0d, 0x80, 0x72, 0x25, 0x55, 0xf4, 0x5b, - 0xc2, 0x13, 0x8b, 0x87, 0x5d, 0x31, 0x99, 0x2f, 0x1d, 0xa9, - 0x41, 0x09, 0x05, 0x76, 0xa7, 0xb7, 0x5e, 0x8c, 0x44, 0xe2, - 0x64, 0x79, 0xd8, 0x79, 0x4c, 0xee, 0x92, 0x2b, 0x37, 0xab, - 0xb1, 0x16, 0x65, 0x72, 0xc3, 0x49, 0xc2, 0xec, 0xfd, 0x9a, - 0xe6, 0x2d, 0x1e, 0x5b, 0xe3, 0x04, 0x96, 0x16, 0xad, 0x97, - 0x5d, 0xac, 0xf2, 0xcc, 0x62, 0x2e, 0x34, 0x5d, 0x67, 0x19, - 0x47, 0xee, 0x0f, 0x8b, 0x97, 0x60, 0xb4, 0x0b, 0xeb, 0x6a, - 0x7a, 0x75, 0x14, 0x27, 0x00, 0x39, 0xd6, 0x60, 0xce, 0x39, - 0x6e, 0x69, 0x46, 0xe1, 0x0d, 0xf9, 0xa6, 0xfa, 0x8c, 0xcf, - 0x65, 0x50, 0x59, 0x1d, 0xb0, 0x26, 0xc2, 0xe2, 0xf1, 0xb9, - 0xcd, 0x09, 0x60, 0xcc, 0xbb, 0x57, 0xd6, 0xac, 0xcc, 0xf9, - 0x58, 0x73, 0xa8, 0x81, 0x61, 0x2f, 0xd2, 0xa4, 0x5b, 0x98, - 0x0d, 0x12, 0x88, 0x51, 0x63, 0x38, 0x6e, 0xa2, 0x46, 0x64, - 0x52, 0xc0, 0x71, 0xc1, 0x42, 0x68, 0xd8, 0x42, 0x32, 0x5c, - 0xb4, 0x44, 0x08, 0x95, 0x48, 0xa2, 0x46, 0x6c, 0x0b, 0x10, - 0x09, 0xc8, 0x24, 0x4d, 0x18, 0x37, 0x4c, 0x4c, 0x82, 0x05, - 0x02, 0x22, 0x10, 0x4a, 0x86, 0x30, 0x03, 0x03, 0x11, 0x44, - 0x22, 0x62, 0x01, 0xa9, 0x51, 0x13, 0x02, 0x2c, 0x19, 0x85, - 0x65, 0x51, 0x14, 0x01, 0x9c, 0xb2, 0x81, 0x0a, 0x49, 0x52, - 0xa2, 0xb2, 0x4c, 0x98, 0x34, 0x01, 0x0a, 0x07, 0x06, 0x58, - 0xb2, 0x69, 0x51, 0x24, 0x2d, 0x59, 0x12, 0x52, 0xe0, 0xb4, - 0x04, 0x14, 0x40, 0x29, 0xa2, 0xb0, 0x31, 0x54, 0xc0, 0x40, - 0x63, 0x00, 0x69, 0x18, 0x47, 0x85, 0xc8, 0x30, 0x81, 0x0b, - 0x15, 0x0a, 0xd8, 0xa0, 0x0c, 0x5c, 0x20, 0x4a, 0x11, 0x38, - 0x64, 0x04, 0x94, 0x84, 0xd3, 0x24, 0x72, 0x58, 0x38, 0x28, - 0x18, 0x37, 0x6d, 0x94, 0xc0, 0x4d, 0xa0, 0xa6, 0x0c, 0x9a, - 0x82, 0x31, 0xc2, 0x40, 0x48, 0xda, 0x46, 0x85, 0x03, 0x00, - 0x05, 0xd8, 0x02, 0x4d, 0x0b, 0x85, 0x40, 0xe2, 0x32, 0x86, - 0x4c, 0xa0, 0x65, 0x8a, 0x36, 0x65, 0x42, 0x18, 0x6e, 0x60, - 0x36, 0x0d, 0x40, 0xc0, 0x01, 0x5a, 0x44, 0x42, 0xc4, 0xa4, - 0x0d, 0xd4, 0x88, 0x8d, 0x88, 0x22, 0x52, 0x00, 0xc0, 0x0c, - 0x5b, 0x36, 0x90, 0x09, 0x20, 0x22, 0x08, 0x03, 0x12, 0x90, - 0x12, 0x42, 0x04, 0x20, 0x29, 0x8c, 0x48, 0x6d, 0x20, 0x32, - 0x08, 0x94, 0x88, 0x6c, 0x10, 0x87, 0x21, 0xc1, 0x44, 0x02, - 0x52, 0x40, 0x12, 0xdb, 0xc8, 0x24, 0x14, 0x09, 0x2c, 0x93, - 0x40, 0x09, 0x64, 0xc8, 0x4c, 0x08, 0x48, 0x70, 0xa1, 0x10, - 0x81, 0x4a, 0x80, 0x8c, 0x20, 0x03, 0x31, 0x18, 0xb3, 0x80, - 0xd3, 0x82, 0x25, 0x4c, 0x94, 0x8c, 0x1c, 0x93, 0x89, 0x1a, - 0x91, 0x51, 0xd1, 0xb6, 0x68, 0x43, 0x14, 0x25, 0x84, 0x48, - 0x61, 0x82, 0x40, 0x24, 0xdb, 0x22, 0x4d, 0x63, 0x16, 0x66, - 0x62, 0x90, 0x50, 0xa1, 0x18, 0x86, 0x49, 0x28, 0x25, 0xa0, - 0x10, 0x68, 0x8c, 0x04, 0x00, 0x08, 0x32, 0x4e, 0x22, 0x43, - 0x31, 0x42, 0x96, 0x28, 0x11, 0x23, 0x89, 0xd2, 0xc4, 0x6d, - 0x11, 0x82, 0x8d, 0x8a, 0xa8, 0x90, 0xd2, 0x06, 0x29, 0x80, - 0x82, 0x89, 0x00, 0xa8, 0x41, 0x00, 0x13, 0x6a, 0x12, 0xa8, - 0x04, 0x83, 0xc2, 0x51, 0x13, 0x09, 0x08, 0x62, 0xb4, 0x8d, - 0x94, 0xc2, 0x44, 0x5a, 0xb4, 0x08, 0x0a, 0x10, 0x48, 0xa1, - 0x28, 0x20, 0x1b, 0xb7, 0x64, 0x60, 0x24, 0x25, 0x48, 0xc0, - 0x00, 0x0a, 0x10, 0x09, 0x64, 0xb8, 0x88, 0xcb, 0x44, 0x64, - 0x54, 0x90, 0x05, 0xd2, 0xb8, 0x21, 0x49, 0x28, 0x28, 0x49, - 0x42, 0x0d, 0x63, 0xa0, 0x65, 0xcb, 0x90, 0x30, 0x51, 0x82, - 0x8d, 0x5c, 0xc6, 0x0c, 0x51, 0x06, 0x6a, 0x1a, 0x27, 0x22, - 0x01, 0xa8, 0x24, 0x61, 0xb2, 0x84, 0x23, 0x40, 0x86, 0xa3, - 0xb4, 0x48, 0x19, 0x28, 0x0c, 0x14, 0x06, 0x2e, 0xe2, 0x02, - 0x0d, 0xc4, 0x90, 0x09, 0x08, 0x06, 0x66, 0x9b, 0xc8, 0x10, - 0x5c, 0x46, 0x21, 0xca, 0xa8, 0x30, 0x83, 0x20, 0x89, 0x03, - 0x83, 0x6c, 0xa1, 0x46, 0x8c, 0x90, 0x14, 0x4c, 0x99, 0x02, - 0x81, 0x53, 0x02, 0x10, 0x8b, 0x48, 0x91, 0xe4, 0x40, 0x4a, - 0x22, 0xb1, 0x88, 0xc1, 0x06, 0x0e, 0xc3, 0xa8, 0x08, 0xc8, - 0x46, 0x92, 0x03, 0xb5, 0x4c, 0x23, 0x03, 0x0c, 0xa4, 0x06, - 0x2e, 0xdc, 0x92, 0x81, 0x0c, 0x45, 0x22, 0x40, 0x34, 0x91, - 0x90, 0x96, 0x48, 0x81, 0x82, 0x31, 0xcb, 0x16, 0x72, 0x49, - 0xc8, 0x29, 0x44, 0x86, 0x90, 0x60, 0x22, 0x4e, 0x42, 0x42, - 0x09, 0x4b, 0x82, 0x20, 0x0a, 0xb2, 0x64, 0x20, 0x86, 0x70, - 0x1a, 0xc0, 0x00, 0x1c, 0x41, 0x49, 0x89, 0x84, 0x05, 0x0c, - 0x36, 0x49, 0x19, 0x99, 0x6d, 0x00, 0x08, 0x50, 0x23, 0x96, - 0x6c, 0xe0, 0x44, 0x08, 0x98, 0x24, 0x2c, 0x0a, 0x23, 0x20, - 0x12, 0x04, 0x31, 0xc9, 0x06, 0x32, 0x14, 0x01, 0x41, 0x08, - 0x37, 0x08, 0x58, 0x00, 0x0c, 0x19, 0x04, 0x29, 0x90, 0x18, - 0x05, 0xe1, 0x88, 0x44, 0xc2, 0x20, 0x6c, 0xd1, 0x46, 0x64, - 0xd9, 0x26, 0x62, 0x09, 0x88, 0x68, 0x02, 0x29, 0x29, 0xe1, - 0x18, 0x65, 0x98, 0x04, 0x24, 0xe4, 0x34, 0x0c, 0x12, 0x85, - 0x2d, 0x20, 0x14, 0x06, 0x24, 0x15, 0x82, 0x89, 0x08, 0x91, - 0x60, 0x84, 0x28, 0x24, 0x34, 0x41, 0x1b, 0x49, 0x22, 0xd3, - 0x96, 0x64, 0x1b, 0x86, 0x4c, 0x0c, 0xb9, 0x20, 0x20, 0x39, - 0x04, 0x04, 0x34, 0x6d, 0xc1, 0x28, 0x32, 0x08, 0x14, 0x44, - 0x81, 0x18, 0x2e, 0xda, 0x38, 0x41, 0x63, 0x18, 0x26, 0xd8, - 0x48, 0x26, 0x12, 0x20, 0x21, 0x09, 0xc5, 0x25, 0x92, 0x42, - 0x0c, 0x88, 0x04, 0x64, 0x11, 0x43, 0x8a, 0x19, 0x92, 0x60, - 0x5c, 0xc6, 0x31, 0xa1, 0x24, 0x6a, 0xd8, 0xb6, 0x49, 0x1b, - 0x81, 0x90, 0xe2, 0x32, 0x4e, 0x62, 0x44, 0x21, 0x80, 0xb8, - 0x10, 0x4b, 0x90, 0x49, 0x5c, 0x06, 0x09, 0x48, 0x20, 0x49, - 0xa2, 0x92, 0x71, 0x5c, 0x48, 0x02, 0xc8, 0x08, 0x81, 0xa4, - 0x32, 0x66, 0xc9, 0x30, 0x11, 0xca, 0x92, 0x91, 0xc0, 0x00, - 0x41, 0x44, 0x98, 0x4d, 0x98, 0x12, 0x4e, 0x92, 0x46, 0x8e, - 0x49, 0xb8, 0x64, 0xdc, 0x18, 0x50, 0x51, 0xb4, 0x48, 0x08, - 0x47, 0x24, 0x08, 0x46, 0x32, 0x1b, 0x23, 0x00, 0x09, 0xb8, - 0x04, 0x0a, 0x44, 0x0c, 0x0b, 0xc7, 0x8d, 0x19, 0xa4, 0x09, - 0x11, 0x30, 0x41, 0xe3, 0x24, 0x45, 0x89, 0x1f, 0x65, 0x54, - 0xf6, 0x38, 0x04, 0x37, 0xcc, 0x89, 0xc3, 0xc5, 0xdc, 0x43, - 0xd9, 0x13, 0x56, 0x06, 0x05, 0x50, 0x29, 0x4e, 0x0f, 0xa5, - 0x5c, 0x5d, 0xd7, 0x82, 0xa1, 0x63, 0x59, 0x0d, 0x3e, 0x5b, - 0x00, 0xe6, 0x0e, 0xd8, 0x1c, 0xc7, 0xaf, 0xc0, 0x48, 0xb6, - 0x07, 0x5c, 0x65, 0x00, 0x89, 0xb3, 0x09, 0xbc, 0x4a, 0xaa, - 0xa6, 0x72, 0xbe, 0x6b, 0x9a, 0xb3, 0x5b, 0x27, 0x82, 0x65, - 0x9b, 0xc9, 0x6f, 0x19, 0x88, 0x94, 0x0b, 0x37, 0x44, 0x2f, - 0xe3, 0x9a, 0x02, 0xda, 0xff, 0x11, 0xb0, 0x48, 0x89, 0x70, - 0x8c, 0x84, 0xc2, 0xc0, 0x31, 0x4a, 0xad, 0x70, 0xe1, 0xa7, - 0x15, 0xfd, 0xb2, 0x6d, 0x93, 0xda, 0x17, 0x68, 0xc4, 0xe3, - 0xfd, 0x2c, 0x08, 0x15, 0xb9, 0xa4, 0xc5, 0x1b, 0x97, 0xc9, - 0xa3, 0xaf, 0x0d, 0x21, 0x06, 0x3d, 0xf1, 0x05, 0xd4, 0x35, - 0x80, 0x2e, 0x23, 0x99, 0xbd, 0x3a, 0x1a, 0x6c, 0xad, 0xbf, - 0x56, 0xb5, 0xd3, 0x95, 0x1b, 0x30, 0x4d, 0x56, 0xc1, 0x77, - 0xe6, 0xd6, 0xab, 0x94, 0x46, 0x68, 0xd7, 0xb8, 0xe4, 0x9d, - 0xb2, 0x8d, 0xc4, 0xd1, 0xc8, 0x92, 0xbe, 0x5d, 0x1f, 0x58, - 0x55, 0x7f, 0x11, 0x55, 0xc5, 0x2e, 0xc3, 0x9e, 0x2a, 0x29, - 0x51, 0xe8, 0x75, 0x49, 0xa7, 0xa3, 0xda, 0x0b, 0xcf, 0xf8, - 0x3f, 0x78, 0xac, 0x4c, 0x4e, 0x78, 0x6f, 0x0e, 0x67, 0xad, - 0x94, 0x59, 0x20, 0x5e, 0x37, 0x18, 0xb9, 0x09, 0x87, 0xdb, - 0xdd, 0xf0, 0xc2, 0x4d, 0x03, 0xcc, 0x98, 0x22, 0x4b, 0xe5, - 0x7d, 0x8e, 0x74, 0x7e, 0xa9, 0x1b, 0xeb, 0x7a, 0xae, 0xaf, - 0x2e, 0x7c, 0x3c, 0xc0, 0x1a, 0x30, 0x40, 0x0d, 0x79, 0x86, - 0x53, 0xcc, 0x0b, 0x2b, 0xbe, 0xa5, 0x72, 0x3b, 0xbb, 0x53, - 0x9e, 0xd5, 0xc2, 0x23, 0x1d, 0x35, 0xcd, 0x22, 0x12, 0xed, - 0x9a, 0xee, 0xc8, 0xf9, 0x05, 0x27, 0xdb, 0x46, 0x56, 0xcc, - 0x24, 0x4d, 0xee, 0xaf, 0xab, 0xa9, 0x78, 0x75, 0x75, 0xb9, - 0xd1, 0xfd, 0x39, 0x3a, 0xb2, 0xa2, 0xeb, 0x87, 0x76, 0xb2, - 0x19, 0x47, 0x88, 0xab, 0x42, 0x85, 0x4b, 0xd9, 0x76, 0x22, - 0x68, 0x4b, 0xc9, 0x88, 0x38, 0x28, 0x0a, 0x34, 0x5d, 0x12, - 0x4f, 0xf5, 0x43, 0x64, 0x44, 0x8c, 0x3c, 0xc2, 0x99, 0x91, - 0x4e, 0xfd, 0xfd, 0x9c, 0x73, 0xbf, 0x85, 0xf9, 0x9f, 0xe1, - 0x53, 0x19, 0xc8, 0x19, 0xcb, 0x7c, 0xdb, 0x9a, 0x3a, 0x2c, - 0x34, 0x55, 0x8c, 0x64, 0x6f, 0xc5, 0xb7, 0x93, 0x53, 0xb4, - 0x97, 0x7e, 0xc2, 0xf8, 0x7e, 0x8d, 0x44, 0x10, 0xca, 0x49, - 0xf5, 0x5c, 0xe8, 0xce, 0xc4, 0xcc, 0x42, 0xf0, 0x85, 0xf1, - 0xf2, 0x10, 0xa7, 0x0b, 0x37, 0x6a, 0x8e, 0x50, 0x96, 0x96, - 0x9d, 0xd9, 0x8f, 0x54, 0x45, 0x56, 0xf8, 0x64, 0x88, 0xab, - 0x51, 0x4f, 0x9f, 0x61, 0xd9, 0x12, 0x87, 0xac, 0x1d, 0xc1, - 0x23, 0xea, 0xb3, 0x5d, 0xa4, 0x6d, 0xfa, 0x58, 0x92, 0x8f, - 0x77, 0x78, 0x61, 0xe5, 0xe4, 0x33, 0xdb, 0x10, 0x2d, 0xdd, - 0xb6, 0xd7, 0xb4, 0xd0, 0x8d, 0xd1, 0xa8, 0x0b, 0x94, 0xdf, - 0xcf, 0xd7, 0xac, 0xdf, 0x47, 0x0b, 0x38, 0xe0, 0xa5, 0xf8, - 0xc3, 0xd2, 0xc3, 0xfb, 0x0f, 0x98, 0x00, 0x2b, 0x17, 0x3c, - 0x44, 0x70, 0x36, 0x47, 0x27, 0x89, 0x41, 0xcb, 0x87, 0x5a, - 0xa4, 0x2c, 0x57, 0x6d, 0x8c, 0xcb, 0xc0, 0x7d, 0x6b, 0xf5, - 0xa1, 0x17, 0x39, 0x4a, 0xb5, 0xac, 0xc6, 0x41, 0x90, 0x66, - 0x85, 0xc4, 0x4b, 0x18, 0xc6, 0xe6, 0x09, 0x6d, 0x6e, 0xbb, - 0x7f, 0x72, 0x96, 0xd3, 0x21, 0x5a, 0x96, 0xaf, 0x9e, 0xb6, - 0x0b, 0x3f, 0xe8, 0x83, 0xe5, 0x53, 0x11, 0x81, 0xc6, 0xab, - 0x40, 0xa9, 0x09, 0xb6, 0x74, 0x5e, 0xe1, 0xc3, 0x82, 0x1e, - 0xda, 0x2f, 0x24, 0xe0, 0x94, 0x8f, 0x07, 0xb7, 0x9b, 0xc6, - 0x50, 0xef, 0x3a, 0x79, 0x89, 0x4d, 0x6f, 0x16, 0x33, 0x04, - 0x24, 0x7e, 0x4a, 0xab, 0x5d, 0x03, 0x29, 0xad, 0xba, 0xa3, - 0x6c, 0xe2, 0x05, 0xab, 0x4d, 0x69, 0xb6, 0x61, 0x39, 0x9d, - 0xc3, 0x53, 0x11, 0xc0, 0xe3, 0xaa, 0x2e, 0xdc, 0x74, 0x09, - 0xbd, 0x19, 0xb5, 0xbb, 0x51, 0x1e, 0x77, 0x3e, 0xce, 0x64, - 0x13, 0xeb, 0x74, 0x03, 0xb7, 0x49, 0x99, 0xb0, 0x71, 0x99, - 0xe6, 0x17, 0x3c, 0x80, 0xe6, 0xb5, 0x51, 0xe9, 0xb3, 0xe4, - 0x2b, 0xaa, 0x52, 0x15, 0x99, 0x4e, 0x46, 0x6d, 0x67, 0x8e, - 0x79, 0xc4, 0x3c, 0xa6, 0xdc, 0x8f, 0xed, 0x87, 0xb9, 0x68, - 0x6d, 0xdc, 0x19, 0xa1, 0x52, 0x37, 0x06, 0x76, 0xad, 0xe9, - 0x61, 0x5c, 0x82, 0x16, 0x81, 0xaf, 0x3a, 0x89, 0xbf, 0x72, - 0xb0, 0xc7, 0x88, 0x3c, 0x58, 0xfe, 0xe4, 0xa5, 0x41, 0x50, - 0xfc, 0x8a, 0x15, 0xb0, 0x78, 0xd4, 0x77, 0x06, 0x4b, 0xc4, - 0x21, 0x7f, 0xaa, 0x2b, 0x88, 0x7f, 0x8c, 0x3b, 0x9b, 0xbb, - 0x2e, 0x41, 0xcf, 0x9b, 0x06, 0xd3, 0x4d, 0xcf, 0xb2, 0x9c, - 0x91, 0x46, 0x35, 0x3a, 0x5a, 0x0b, 0xe4, 0xac, 0x96, 0x7c, - 0xe0, 0xd4, 0x34, 0xe5, 0xab, 0xae, 0xa7, 0x67, 0xbf, 0x4d, - 0xab, 0x48, 0xfd, 0xcb, 0x3f, 0x5c, 0xde, 0x3f, 0x83, 0xcc, - 0x52, 0x0f, 0xdd, 0x7f, 0x20, 0x25, 0xed, 0xee, 0xd0, 0x14, - 0x38, 0xf7, 0x33, 0x4c, 0x3c, 0x5e, 0x23, 0x80, 0xa3, 0x0a, - 0xe8, 0xb0, 0xef, 0x5b, 0xca, 0xc9, 0x97, 0x13, 0x98, 0xfe, - 0x91, 0x62, 0x14, 0xa8, 0x64, 0xf6, 0x20, 0xc9, 0xc9, 0x6f, - 0x8b, 0xc0, 0xec, 0x39, 0x15, 0xa7, 0x59, 0x62, 0x68, 0x21, - 0xe1, 0x5f, 0xf6, 0xa1, 0x76, 0xb0, 0xca, 0x1b, 0x2a, 0x71, - 0xe3, 0x1a, 0x24, 0x91, 0x1f, 0x3a, 0xbb, 0xf1, 0xc9, 0x09, - 0x42, 0x48, 0x7e, 0x19, 0x1b, 0xf1, 0xf0, 0x13, 0x33, 0xf1, - 0x62, 0x31, 0x00, 0x97, 0x73, 0x9b, 0x3c, 0x26, 0xf8, 0x42, - 0xd0, 0xd4, 0x41, 0x1b, 0x9f, 0x7e, 0x43, 0x4b, 0x0b, 0x08, - 0xd7, 0xa0, 0xa8, 0x32, 0x34, 0x0a, 0xc9, 0xef, 0xb8, 0xeb, - 0xe7, 0x64, 0x3b, 0x40, 0x88, 0xe0, 0x60, 0x59, 0x07, 0xef, - 0xb9, 0x5f, 0x71, 0x92, 0x90, 0xa4, 0x5f, 0x34, 0x38, 0x93, - 0x92, 0x43, 0x87, 0xaf, 0xdd, 0x87, 0x63, 0x8c, 0x1d, 0xe5, - 0x86, 0x9e, 0xe6, 0xde, 0x94, 0xdd, 0x33, 0x5d, 0x95, 0x64, - 0xd8, 0xc4, 0x8a, 0x3c, 0xe7, 0x4b, 0xd6, 0x3f, 0xc5, 0x69, - 0x6a, 0xa8, 0x7f, 0x0f, 0x93, 0x77, 0x02, 0x46, 0x66, 0xa5, - 0xa0, 0x60, 0x8b, 0xec, 0xb1, 0xa2, 0xfc, 0x2a, 0x09, 0xb8, - 0x08, 0x1c, 0x05, 0x6b, 0x78, 0xb7, 0x7a, 0xe5, 0x60, 0xa4, - 0xaf, 0x3a, 0x9d, 0xaa, 0xf5, 0x22, 0x9b, 0x5e, 0xef, 0xc3, - 0x46, 0xed, 0x67, 0xd0, 0x8b, 0xda, 0xb4, 0xa3, 0x34, 0x32, - 0x20, 0x9d, 0x88, 0x7e, 0x43, 0x42, 0x6f, 0x02, 0xf8, 0x48, - 0x9b, 0xc5, 0x02, 0xad, 0xaa, 0xa9, 0xee, 0x19, 0x1b, 0xde, - 0x02, 0x83, 0x81, 0x10, 0xa6, 0x79, 0x4e, 0xad, 0x15, 0xf7, - 0x3e, 0x4e, 0x1e, 0x72, 0xfe, 0x52, 0x49, 0x24, 0xce, 0x82, - 0x31, 0x59, 0x72, 0xae, 0xd5, 0x34, 0x50, 0x87, 0x8b, 0xe3, - 0x8e, 0xec, 0x61, 0x35, 0x13, 0x57, 0xb1, 0xe6, 0xac, 0xfb, - 0x16, 0xc3, 0x1a, 0x98, 0x92, 0xcb, 0xcd, 0xc9, 0xf7, 0x10, - 0x6a, 0x43, 0x96, 0x33, 0x2d, 0x6f, 0x6c, 0x76, 0xb0, 0xf6, - 0x48, 0x4c, 0xae, 0x13, 0x67, 0x5d, 0x42, 0x01, 0x8e, 0x54, - 0x51, 0xcc, 0x65, 0xf1, 0x95, 0x11, 0x3c, 0x96, 0x2a, 0x5a, - 0x42, 0x3d, 0x9b, 0xbb, 0xb7, 0x7b, 0x28, 0x96, 0x09, 0xbb, - 0xed, 0x2d, 0xbc, 0xb7, 0x90, 0x62, 0xd3, 0xbe, 0xbd, 0xae, - 0x50, 0x15, 0x96, 0xc1, 0x03, 0x91, 0x14, 0x34, 0x4f, 0x21, - 0xa5, 0x6e, 0x78, 0x4a, 0x5d, 0x8b, 0xcf, 0x5b, 0x1a, 0x8a, - 0x57, 0x43, 0xb8, 0x25, 0xd3, 0xa2, 0xcd, 0x78, 0xb4, 0x93, - 0x07, 0x7a, 0x14, 0xc1, 0x0c, 0x6f, 0x5f, 0x5e, 0xcb, 0x11, - 0x17, 0x81, 0x0d, 0x7d, 0x0f, 0xda, 0xd1, 0x92, 0x43, 0x56, - 0xaf, 0x75, 0x53, 0x44, 0x1f, 0xc7, 0x9c, 0xd3, 0xc5, 0x47, - 0xe0, 0xac, 0x4a, 0x11, 0xe4, 0xfe, 0x6c, 0x80, 0x79, 0xcc, - 0x60, 0x7a, 0xd9, 0x56, 0x65, 0x83, 0x5e, 0xcf, 0x37, 0x27, - 0x55, 0xe2, 0x4d, 0xf9, 0xd6, 0x09, 0x2d, 0xee, 0xda, 0x10, - 0x6b, 0xdc, 0xd2, 0x70, 0x46, 0x94, 0xaa, 0xf5, 0x21, 0xc5, - 0xf0, 0x79, 0xdb, 0x9b, 0x8e, 0x9a, 0xdb, 0x5a, 0x56, 0x41, - 0x43, 0xe7, 0x1f, 0x8d, 0xfd, 0xda, 0x12, 0x5f, 0xf7, 0x9e, - 0x47, 0x1a, 0xf7, 0x73, 0x40, 0x67, 0xc2, 0x61, 0x07, 0x33, - 0x16, 0x78, 0x60, 0x05, 0x85, 0x5c, 0x2f, 0x2b, 0xbf, 0x2c, - 0x7a, 0x39, 0xc6, 0xed, 0xcb, 0x43, 0x66, 0x27, 0x93, 0xcd, - 0x92, 0x8d, 0x62, 0x8c, 0xaa, 0x61, 0x1c, 0x9c, 0x4c, 0x90, - 0xba, 0xba, 0x4b, 0xc1, 0xf1, 0x22, 0xde, 0xe0, 0xf9, 0x3e, - 0x04, 0xb9, 0x56, 0xa3, 0x1c, 0xe8, 0xda, 0xd6, 0x09, 0x4a, - 0x7d, 0x89, 0xbc, 0xf4, 0xe8, 0x4d, 0xa1, 0xe8, 0x34, 0x90, - 0xa5, 0x31, 0x3a, 0xec, 0x56, 0xc5, 0xd2, 0x92, 0x0b, 0xe9, - 0x58, 0xbb, 0xb2, 0x84, 0x9b, 0xa9, 0x1d, 0x19, 0xdb, 0x7a, - 0x02, 0x75, 0x79, 0x16, 0x35, 0xee, 0x3a, 0x3f, 0x4e, 0x5e, - 0x11, 0x90, 0x04, 0x03, 0xce, 0x8b, 0xa0, 0xd8, 0xc1, 0xee, - 0x52, 0x33, 0x6e, 0xd2, 0x6e, 0x06, 0x5c, 0x99, 0x24, 0x6f, - 0x16, 0xd9, 0x90, 0x28, 0xe5, 0x2d, 0x91, 0x6f, 0x1a, 0x57, - 0xf0, 0x4c, 0x7c, 0x3f, 0x7b, 0xd7, 0x30, 0xed, 0x6d, 0x21, - 0xb7, 0xf8, 0xed, 0xf3, 0x34, 0x89, 0xfa, 0xf0, 0x51, 0x6f, - 0x99, 0xa0, 0x5e, 0xf8, 0x74, 0xc7, 0x4f, 0xb5, 0x59, 0x52, - 0xbe, 0x45, 0xac, 0x3f, 0x34, 0x51, 0x87, 0x6e, 0x84, 0xea, - 0xb0, 0x40, 0xe1, 0x84, 0x16, 0x66, 0x30, 0xf1, 0x5c, 0xb2, - 0x74, 0x25, 0x03, 0xe3, 0x2e, 0x82, 0xc5, 0x60, 0x9d, 0xe4, - 0xca, 0xec, 0x49, 0x6b, 0x4e, 0x5a, 0x09, 0xa8, 0xfe, 0xff, - 0x1d, 0xa1, 0xe8, 0xec, 0x9a, 0x22, 0x3b, 0xd6, 0x72, 0x93, - 0x6f, 0x6b, 0x5a, 0xfb, 0x2d, 0x5a, 0xde, 0x01, 0x3e, 0xf6, - 0xdc, 0x77, 0x55, 0x1e, 0x32, 0x19, 0xc8, 0xa1, 0xbb, 0xcf, - 0xcb, 0x41, 0x54, 0xa2, 0xcb, 0xe6, 0x61, 0xca, 0x43, 0x63, - 0xd2, 0x2c, 0xae, 0xf4, 0xd9, 0x49, 0xb1, 0x75, 0x1a, 0x06, - 0x92, 0x13, 0x90, 0x57, 0x89, 0x8e, 0x9f, 0x26, 0xc5, 0x14, - 0xd8, 0xc7, 0x93, 0xb2, 0xaa, 0x3a, 0x9c, 0x10, 0xd5, 0x68, - 0x52, 0x28, 0x39, 0xee, 0x30, 0xdc, 0x00, 0x4b, 0x65, 0x72, - 0x59, 0x98, 0xad, 0x2e, 0x8c, 0xaf, 0x4e, 0x79, 0x0a, 0x8c, - 0x0c, 0x9d, 0xb6, 0x43, 0x26, 0x83, 0x71, 0x7b, 0x1e, 0x86, - 0x4d, 0x33, 0xd7, 0x20, 0x29, 0x6a, 0xbf, 0x2f, 0x8e, 0x4b, - 0x13, 0x35, 0x65, 0xc8, 0xec, 0xe3, 0x2c, 0xde, 0xfb, 0x30, - 0x57, 0xa9, 0x92, 0x22, 0x5d, 0x79, 0x16, 0x07, 0x73, 0x9b, - 0xe2, 0x6e, 0xd4, 0x99, 0xb4, 0x35, 0xfd, 0xa2, 0xb5, 0xd9, - 0xe5, 0x74, 0xd1, 0xb2, 0xcf, 0x32, 0xf1, 0x19, 0x69, 0xcf, - 0x1e, 0x10, 0xcc, 0x3c, 0xaf, 0xbe, 0xa4, 0x33, 0x11, 0x83, - 0x64, 0xc0, 0x39, 0xe5, 0xb0, 0x8f, 0x32, 0xf4, 0x01, 0x6a, - 0x2a, 0x11, 0x8e, 0xdd, 0x03, 0x81, 0x39, 0xe7, 0x70, 0x16, - 0x2f, 0x0e, 0x24, 0xa9, 0x12, 0x0b, 0xdb, 0xa8, 0x6c, 0xb3, - 0xf3, 0x74, 0x95, 0xca, 0x64, 0x1d, 0xee, 0x25, 0xc5, 0x27, - 0xed, 0x0f, 0x82, 0xb5, 0x7a, 0x62, 0x27, 0xb2, 0x87, 0x53, - 0x11, 0x39, 0x5e, 0xb8, 0x11, 0xca, 0x25, 0xe8, 0x17, 0x46, - 0xd3, 0x0f, 0x5d, 0x70, 0x68, 0xe1, 0x5f, 0xd1, 0xab, 0x65, - 0xe5, 0x42, 0x87, 0x1e, 0x96, 0xaf, 0x13, 0x0c, 0x9b, 0x15, - 0x75, 0x14, 0x31, 0x75, 0xcc, 0x15, 0xbf, 0x2c, 0x74, 0xab, - 0xc9, 0x9c, 0xda, 0x62, 0x1d, 0xeb, 0x19, 0x81, 0x67, 0x5e, - 0xcd, 0x54, 0x87, 0x07, 0x67, 0xba, 0xe3, 0xf6, 0x03, 0xbe, - 0x6d, 0x64, 0x2d, 0xbc, 0xec, 0x54, 0x13, 0x12, 0x5b, 0x44, - 0x90, 0x95, 0x86, 0x77, 0x8c, 0x59, 0xbd, 0x8e, 0xba, 0xb1, - 0x12, 0xea, 0xc1, 0x94, 0x37, 0xa0, 0x11, 0xff, 0xb2, 0xa4, - 0xc3, 0x61, 0xf2, 0xa3, 0x49, 0xbe, 0xe7, 0xb6, 0x96, 0x2f, -}; -#define sizeof_bench_dilithium_level2_key (sizeof(bench_dilithium_level2_key)) - -#endif /* !WOLFSSL_MLDSA_NO_SIGN */ - -#ifndef WOLFSSL_MLDSA_NO_VERIFY - -/* raw public key without ASN1 syntax from - * ./certs/dilithium/bench_dilithium_level2_key.der */ -static const unsigned char bench_dilithium_level2_pubkey[] = { - 0xea, 0x05, 0x24, 0x0d, 0x80, 0x72, 0x25, 0x55, 0xf4, 0x5b, - 0xc2, 0x13, 0x8b, 0x87, 0x5d, 0x31, 0x99, 0x2f, 0x1d, 0xa9, - 0x41, 0x09, 0x05, 0x76, 0xa7, 0xb7, 0x5e, 0x8c, 0x44, 0xe2, - 0x64, 0x79, 0xa0, 0xec, 0x1f, 0x24, 0xb6, 0xc8, 0x05, 0x5b, - 0xc1, 0x18, 0xb0, 0xb7, 0xcf, 0x8c, 0x60, 0x67, 0x6b, 0x81, - 0x44, 0x27, 0xb6, 0x0e, 0xfd, 0x9b, 0xc3, 0xcb, 0x52, 0x31, - 0xfa, 0xc9, 0x34, 0x8d, 0x22, 0x1e, 0x07, 0x9d, 0x96, 0x6a, - 0x63, 0x83, 0x5c, 0xd7, 0x83, 0x2d, 0x7f, 0x48, 0x64, 0x79, - 0xca, 0xb4, 0x9f, 0xa2, 0x02, 0xb7, 0x86, 0x1d, 0x0e, 0xc7, - 0xf9, 0x6c, 0x07, 0xc0, 0x35, 0x6a, 0x34, 0x79, 0x7c, 0xb8, - 0x0f, 0xed, 0x98, 0x50, 0xfb, 0x51, 0xe0, 0x36, 0x44, 0x4c, - 0xc6, 0x35, 0xa2, 0xbb, 0x55, 0xb0, 0x5c, 0x39, 0x08, 0x02, - 0x20, 0x35, 0x5c, 0x56, 0x6d, 0x2e, 0xb9, 0xef, 0x21, 0x26, - 0x87, 0x87, 0x85, 0x8a, 0x32, 0xb5, 0xa7, 0x68, 0x70, 0x3a, - 0xfd, 0x0d, 0x21, 0x48, 0x91, 0xa3, 0x29, 0xc1, 0x2a, 0x38, - 0xe5, 0x26, 0x31, 0x1f, 0x42, 0xde, 0x0b, 0x25, 0xff, 0x1d, - 0x6b, 0xb4, 0xe0, 0x5d, 0x2d, 0xcf, 0x44, 0xd5, 0x7d, 0xc4, - 0xf6, 0x95, 0xf2, 0x06, 0x4f, 0x83, 0x88, 0x9d, 0x1e, 0xeb, - 0x1c, 0x09, 0x45, 0x62, 0x67, 0x3d, 0xff, 0x51, 0x47, 0xe8, - 0xbc, 0x9b, 0x03, 0x1f, 0xc7, 0x72, 0x65, 0xce, 0xa8, 0x8c, - 0xc2, 0xa0, 0xc2, 0xbd, 0x5b, 0x7c, 0x17, 0x16, 0x8b, 0x72, - 0xfa, 0xb1, 0xbd, 0xdf, 0x49, 0xd6, 0xa1, 0x00, 0x65, 0xbe, - 0x82, 0xe7, 0x68, 0xc7, 0xe7, 0xbc, 0xc2, 0xa4, 0xdb, 0xaa, - 0xcc, 0xea, 0x41, 0x52, 0x7f, 0x56, 0xb4, 0x68, 0x1f, 0x92, - 0x96, 0x0f, 0xce, 0xd4, 0xd0, 0x87, 0x4c, 0x4a, 0x73, 0xb5, - 0x6c, 0xd4, 0x69, 0x55, 0x15, 0x47, 0xdc, 0x94, 0x7f, 0xd2, - 0x54, 0x5e, 0xb2, 0x90, 0xc2, 0x47, 0xe4, 0xf5, 0xde, 0x8b, - 0x9b, 0xc6, 0x5d, 0x50, 0x95, 0x60, 0xe0, 0xf0, 0xa7, 0x4e, - 0xe0, 0xcd, 0x41, 0x09, 0xef, 0xb3, 0x3d, 0x90, 0x5c, 0x77, - 0x54, 0xec, 0x9e, 0x5d, 0x8a, 0xe7, 0x09, 0x5c, 0xc9, 0x58, - 0x0c, 0xd0, 0x42, 0x35, 0xd2, 0x14, 0x59, 0x38, 0x69, 0xad, - 0xf9, 0xb5, 0xbf, 0x8a, 0x8e, 0x33, 0xd8, 0x5e, 0x7a, 0x55, - 0xd0, 0x53, 0x15, 0x40, 0x4e, 0xc5, 0x86, 0xd7, 0x8f, 0x5f, - 0x2f, 0x55, 0x82, 0xc2, 0x4f, 0x16, 0xe5, 0xea, 0x1c, 0xbc, - 0xff, 0x5e, 0x1f, 0x39, 0x46, 0x70, 0x54, 0x7a, 0x3a, 0x27, - 0x16, 0x1a, 0x2b, 0x6c, 0xd2, 0xb7, 0x80, 0xd3, 0xd1, 0x9d, - 0x25, 0x59, 0xed, 0xe6, 0x51, 0xb1, 0xf2, 0xad, 0x7e, 0x51, - 0x78, 0x14, 0x2b, 0x19, 0xae, 0x64, 0x72, 0x0f, 0xd8, 0x18, - 0x79, 0x8e, 0x66, 0x88, 0xd3, 0xa4, 0xa3, 0xc3, 0x76, 0x21, - 0xcb, 0xe4, 0x79, 0x5e, 0x95, 0x74, 0xe3, 0x31, 0x18, 0x79, - 0xed, 0xc7, 0xe7, 0xfb, 0x86, 0x48, 0x1b, 0x7b, 0x75, 0x5b, - 0x7f, 0x7c, 0x82, 0xc5, 0xab, 0x11, 0xb4, 0x5d, 0x59, 0x6f, - 0x78, 0xb2, 0xa5, 0x39, 0xc6, 0x63, 0x38, 0x6c, 0xeb, 0x50, - 0x06, 0x14, 0x76, 0xf0, 0xe8, 0xfb, 0x11, 0x95, 0x1f, 0x9d, - 0x9c, 0xa6, 0xe1, 0xe2, 0x0d, 0xa3, 0x66, 0xfc, 0x20, 0x83, - 0x50, 0x0e, 0x53, 0x75, 0xb5, 0x12, 0xf4, 0xdf, 0x31, 0x46, - 0x83, 0xac, 0x5b, 0xf3, 0x99, 0xa6, 0xd1, 0x7b, 0x2b, 0xc5, - 0xdc, 0x71, 0x07, 0x27, 0x33, 0x35, 0x34, 0xf5, 0x30, 0x19, - 0xc1, 0x3b, 0xba, 0x8a, 0xaf, 0x7e, 0x49, 0x93, 0x48, 0x5b, - 0x38, 0xc0, 0xbc, 0x2e, 0xc7, 0x59, 0x1b, 0xd9, 0xf5, 0xcc, - 0x86, 0xf5, 0x7b, 0x4d, 0xd7, 0x39, 0xa7, 0xa2, 0x56, 0x20, - 0x48, 0x98, 0x7d, 0x4f, 0x75, 0x56, 0x9b, 0xb8, 0x95, 0x45, - 0x17, 0xf3, 0x86, 0x3d, 0x97, 0x0a, 0x49, 0x1b, 0xca, 0xff, - 0x20, 0xc0, 0x24, 0x2c, 0x51, 0xc2, 0x0a, 0x3c, 0xbf, 0x07, - 0x60, 0x1c, 0x88, 0x85, 0x9b, 0x85, 0x2d, 0x4a, 0xfe, 0x5a, - 0x1c, 0x90, 0xf5, 0x90, 0x12, 0xd3, 0x03, 0x3c, 0x8c, 0x2e, - 0x95, 0x4a, 0x47, 0x76, 0x0f, 0x1f, 0x5d, 0x9e, 0xed, 0xc5, - 0x64, 0xc4, 0x9b, 0xbf, 0x86, 0xc5, 0x63, 0x84, 0x33, 0x00, - 0xf1, 0x26, 0x18, 0x21, 0xf3, 0x88, 0x1a, 0x08, 0x18, 0x6d, - 0x2f, 0xef, 0xd5, 0xeb, 0x2f, 0x69, 0xc8, 0x6e, 0x92, 0x34, - 0xfc, 0x72, 0x3d, 0x9a, 0xa7, 0x9e, 0x51, 0xfb, 0x56, 0xe3, - 0xdc, 0xf4, 0x8f, 0x9b, 0x6d, 0x0d, 0x2a, 0xec, 0x66, 0x12, - 0x26, 0x35, 0xbd, 0x61, 0xc2, 0x67, 0x19, 0xf5, 0x7e, 0xa1, - 0x67, 0xa2, 0x9c, 0x3b, 0x67, 0xb0, 0xc2, 0x51, 0x6a, 0x37, - 0x7c, 0x48, 0xe9, 0x4b, 0xb9, 0xa3, 0x38, 0x2f, 0xfc, 0xde, - 0xb4, 0x7c, 0xda, 0x52, 0x84, 0x0b, 0xb0, 0xd9, 0x08, 0xe9, - 0x7a, 0x4a, 0x6f, 0x79, 0x29, 0x3d, 0xc4, 0x5c, 0x78, 0xee, - 0x63, 0xb6, 0x96, 0x68, 0xd9, 0x82, 0x4e, 0xc1, 0x1b, 0x6f, - 0x52, 0xf5, 0xb3, 0xfb, 0xe8, 0xc4, 0x2a, 0x07, 0xc6, 0x3b, - 0x85, 0x0d, 0xf4, 0xbf, 0xb0, 0x6b, 0xfb, 0xce, 0x1d, 0xb4, - 0xbf, 0x63, 0x0b, 0x91, 0x67, 0xc4, 0xa3, 0x06, 0xa4, 0xaf, - 0x6c, 0xd3, 0xe5, 0x8b, 0x87, 0x4e, 0x64, 0x9c, 0xb1, 0xf3, - 0x70, 0x7c, 0x68, 0x43, 0x46, 0x13, 0x46, 0xee, 0x27, 0x75, - 0x12, 0x45, 0x42, 0xde, 0xa5, 0x8d, 0xcf, 0xf7, 0x09, 0x87, - 0xa8, 0x80, 0x3d, 0xb6, 0x45, 0xee, 0x41, 0x2d, 0x7c, 0x45, - 0x01, 0x9d, 0xaa, 0x78, 0xa8, 0x10, 0xa4, 0xfd, 0xb5, 0x5f, - 0xee, 0x0f, 0x77, 0xba, 0x73, 0xff, 0x49, 0xdc, 0xfa, 0x39, - 0xd6, 0xa3, 0x6f, 0x25, 0xb9, 0x63, 0x2c, 0x92, 0xc5, 0xdf, - 0xfb, 0xba, 0x89, 0xf9, 0xfa, 0x94, 0x5b, 0x6f, 0x5a, 0x4d, - 0x1c, 0xe4, 0xc9, 0x10, 0xf9, 0xa0, 0xe8, 0xc4, 0xcb, 0x55, - 0x1a, 0xdb, 0x56, 0x5f, 0x8e, 0x91, 0x03, 0x23, 0xca, 0xb0, - 0x1f, 0xef, 0xb8, 0x6c, 0x13, 0x5a, 0x99, 0x25, 0xf0, 0x49, - 0xa9, 0x5a, 0x45, 0xf7, 0xfd, 0x1a, 0xc2, 0x71, 0x06, 0xe3, - 0x2d, 0x25, 0x64, 0xb0, 0x52, 0x12, 0x03, 0x62, 0xc7, 0xb6, - 0xf9, 0xdc, 0x1f, 0x78, 0xff, 0x8b, 0xfa, 0xde, 0x7f, 0x71, - 0xa6, 0x35, 0x3e, 0xac, 0x20, 0x54, 0x94, 0xa7, 0x2e, 0x9d, - 0x47, 0x17, 0x4b, 0xad, 0x92, 0xb3, 0x14, 0x26, 0x8c, 0x5a, - 0xd0, 0x16, 0x4b, 0x22, 0xe9, 0x0c, 0x79, 0x6b, 0x8e, 0xac, - 0x0d, 0x12, 0xf5, 0x66, 0x8e, 0x82, 0x1a, 0x44, 0xf3, 0xe9, - 0x56, 0x5a, 0xcd, 0x1c, 0x1b, 0x81, 0x7b, 0x63, 0x59, 0xfe, - 0xc8, 0xc0, 0xe3, 0xda, 0x16, 0x6b, 0x6f, 0x0d, 0xba, 0x0e, - 0x47, 0x12, 0x86, 0x9e, 0xf0, 0x3b, 0x4d, 0x87, 0x3b, 0xf2, - 0x75, 0x73, 0x2d, 0xdf, 0xca, 0x76, 0x0b, 0xbd, 0xe7, 0xb7, - 0x74, 0x24, 0xf3, 0xc6, 0xe6, 0x75, 0x3f, 0x8b, 0x6a, 0xd9, - 0xad, 0xed, 0xc0, 0x70, 0x04, 0x1e, 0x0b, 0x8e, 0x8b, 0x7f, - 0xea, 0xbc, 0x39, 0x6b, 0x8a, 0x44, 0xa6, 0x9a, 0x2d, 0x0d, - 0x8c, 0x21, 0x60, 0x09, 0xd2, 0x4a, 0xe0, 0x62, 0xcf, 0xfa, - 0xe8, 0x9b, 0x35, 0x6f, 0x23, 0x2f, 0xb5, 0x65, 0x08, 0x60, - 0x92, 0x15, 0xd0, 0x5b, 0x63, 0xcc, 0x65, 0x05, 0xd1, 0xef, - 0x0f, 0x7e, 0x1b, 0xb3, 0x8e, 0xc6, 0x12, 0x85, 0xc9, 0x82, - 0x53, 0x79, 0x2e, 0x80, 0x5f, 0x0c, 0x7b, 0xc7, 0x1c, 0x83, - 0x41, 0x06, 0xd8, 0x41, 0xc9, 0xe7, 0xb9, 0x4b, 0xa1, 0x61, - 0xc6, 0x86, 0x67, 0xf5, 0x10, 0xf7, 0x34, 0x0d, 0x39, 0x9e, - 0x2b, 0x5f, 0x19, 0x06, 0x02, 0xa5, 0x02, 0x23, 0x71, 0xc2, - 0x12, 0x65, 0xcc, 0x81, 0x06, 0xfd, 0x8d, 0x09, 0x68, 0x37, - 0x06, 0x3b, 0xff, 0xc4, 0x24, 0xb3, 0x1f, 0xd6, 0xe6, 0x8f, - 0x9c, 0x74, 0x2c, 0x5e, 0xc5, 0xf4, 0xe9, 0xeb, 0xca, 0xd3, - 0x04, 0x5b, 0x92, 0x9e, 0x5c, 0x1a, 0x1d, 0xa1, 0xa7, 0x34, - 0xd2, 0x05, 0xae, 0xdb, 0x3d, 0x71, 0x10, 0x6e, 0x30, 0xd9, - 0xa3, 0x44, 0xa0, 0xbd, 0x9e, 0x7b, 0xb5, 0x12, 0x8a, 0x12, - 0x07, 0x60, 0xd7, 0x1f, 0x92, 0xe6, 0xfe, 0x04, 0xa9, 0x3e, - 0x62, 0x64, 0x00, 0x5f, 0x7c, 0x7b, 0x34, 0x09, 0xeb, 0x4a, - 0x18, 0x9e, 0x77, 0x72, 0x3a, 0x31, 0x1a, 0x62, 0x2a, 0xb5, - 0xcb, 0x4e, 0x53, 0xce, 0xad, 0x8b, 0x5a, 0x20, 0x4f, 0xd7, - 0x3e, 0x16, 0xf8, 0x10, 0xe2, 0xae, 0xbd, 0x3f, 0x02, 0xa9, - 0x18, 0xa0, 0x01, 0x18, 0x84, 0x95, 0x22, 0x2e, 0x93, 0x76, - 0x44, 0x4e, 0x11, 0x7b, 0x03, 0x51, 0x50, 0x19, 0x79, 0xe7, - 0xbb, 0x5c, 0x7b, 0xca, 0x74, 0xb4, 0x25, 0x26, 0xdb, 0x66, - 0xaa, 0x0b, 0x21, 0x07, 0xfb, 0x7a, 0x96, 0x10, 0x7d, 0x99, - 0xa9, 0x16, 0xcb, 0x0e, 0xba, 0x63, 0xab, 0x95, 0xfc, 0x5a, - 0xbe, 0xa6, 0x7f, 0xd8, 0xb4, 0xcd, 0x7c, 0xc5, 0xd0, 0xb1, - 0x1b, 0x48, 0x40, 0xfb, 0xe6, 0x2f, 0x2b, 0x94, 0xfe, 0x68, - 0xa2, 0xc4, 0x36, 0xd9, 0xcd, 0xc1, 0x93, 0x6d, 0xef, 0x39, - 0x5e, 0x43, 0x30, 0x5a, 0x2e, 0x66, 0xb6, 0xf2, 0xed, 0x9a, - 0x8d, 0x12, 0xdf, 0x5c, 0xae, 0xad, 0x16, 0x12, 0x7e, 0x81, - 0x82, 0x91, 0x7d, 0x2b, 0x12, 0xe9, 0x96, 0xb8, 0xb7, 0x42, - 0xcb, 0x1f, 0xf8, 0xd1, 0xfd, 0x83, 0x7a, 0xe4, 0x36, 0x1d, - 0x04, 0x27, 0x4c, 0xe5, 0xbd, 0x75, 0x24, 0xf7, 0xbd, 0xb6, - 0x6a, 0x68, 0x4e, 0x2c, 0x1b, 0x56, 0x3e, 0x60, 0xa4, 0x42, - 0xca, 0x7a, 0x54, 0xe5, 0x06, 0xe3, 0xda, 0x05, 0xf7, 0x77, - 0x36, 0x8b, 0x81, 0x26, 0x99, 0x92, 0x42, 0xda, 0x45, 0xb1, - 0xfe, 0x4b, -}; -#define sizeof_bench_dilithium_level2_pubkey \\ - (sizeof(bench_dilithium_level2_pubkey)) - -#endif /* !WOLFSSL_MLDSA_NO_VERIFY */ - -#ifndef WOLFSSL_MLDSA_NO_SIGN - -/* raw private key without ASN1 syntax from - * ./certs/dilithium/bench_dilithium_level3_key.der */ -static const unsigned char bench_dilithium_level3_key[] = { - 0x15, 0xc9, 0xe5, 0x53, 0x2f, 0xd8, 0x1f, 0xb4, 0xa3, 0x9f, - 0xae, 0xad, 0xb3, 0x10, 0xd0, 0x72, 0x69, 0xd3, 0x02, 0xf3, - 0xdf, 0x67, 0x5a, 0x31, 0x52, 0x19, 0xca, 0x39, 0x27, 0x77, - 0x61, 0x6d, 0x72, 0xdd, 0x85, 0x06, 0xf6, 0x94, 0x0a, 0x57, - 0x52, 0xcd, 0xac, 0x83, 0x4a, 0xe5, 0xbe, 0xa4, 0x30, 0x79, - 0x9e, 0xc6, 0xd6, 0x04, 0xc8, 0x73, 0xdc, 0x5e, 0x41, 0x75, - 0x2f, 0xac, 0x76, 0x57, 0x03, 0x08, 0x46, 0xcb, 0xaf, 0x4c, - 0x6a, 0x4f, 0x20, 0x18, 0xb3, 0x2e, 0x11, 0x54, 0xb5, 0x94, - 0xe6, 0x6f, 0x76, 0xf6, 0xb9, 0x73, 0x9a, 0x07, 0x73, 0xe8, - 0x90, 0xd1, 0x04, 0xda, 0xc5, 0x97, 0xb9, 0x52, 0x51, 0xc8, - 0xc9, 0xcc, 0x87, 0x29, 0xa1, 0xde, 0x79, 0x9b, 0xf8, 0x7f, - 0x80, 0x3f, 0xfd, 0xb3, 0x24, 0xa5, 0xba, 0xf5, 0xd6, 0xd4, - 0x07, 0xbd, 0xa7, 0x1b, 0xd0, 0xe1, 0xd0, 0x43, 0x14, 0x52, - 0x27, 0x03, 0x33, 0x76, 0x00, 0x67, 0x30, 0x23, 0x76, 0x34, - 0x72, 0x02, 0x41, 0x62, 0x12, 0x43, 0x86, 0x30, 0x18, 0x28, - 0x46, 0x27, 0x45, 0x20, 0x88, 0x33, 0x54, 0x10, 0x03, 0x81, - 0x44, 0x50, 0x06, 0x44, 0x56, 0x30, 0x37, 0x38, 0x38, 0x46, - 0x03, 0x85, 0x01, 0x86, 0x43, 0x80, 0x78, 0x28, 0x83, 0x55, - 0x37, 0x44, 0x80, 0x12, 0x17, 0x51, 0x78, 0x46, 0x22, 0x01, - 0x53, 0x54, 0x63, 0x87, 0x77, 0x38, 0x11, 0x81, 0x43, 0x30, - 0x15, 0x47, 0x66, 0x11, 0x40, 0x65, 0x70, 0x56, 0x62, 0x28, - 0x21, 0x65, 0x30, 0x45, 0x63, 0x53, 0x31, 0x80, 0x81, 0x71, - 0x23, 0x62, 0x85, 0x03, 0x07, 0x56, 0x16, 0x28, 0x18, 0x35, - 0x07, 0x38, 0x60, 0x68, 0x17, 0x30, 0x15, 0x20, 0x04, 0x13, - 0x13, 0x61, 0x51, 0x58, 0x00, 0x37, 0x51, 0x58, 0x14, 0x06, - 0x12, 0x55, 0x13, 0x46, 0x76, 0x05, 0x51, 0x87, 0x32, 0x62, - 0x50, 0x41, 0x88, 0x24, 0x50, 0x31, 0x65, 0x36, 0x31, 0x02, - 0x75, 0x35, 0x78, 0x27, 0x36, 0x08, 0x01, 0x77, 0x22, 0x77, - 0x30, 0x80, 0x11, 0x21, 0x28, 0x26, 0x68, 0x27, 0x13, 0x70, - 0x50, 0x44, 0x88, 0x20, 0x50, 0x67, 0x65, 0x74, 0x17, 0x46, - 0x50, 0x16, 0x42, 0x75, 0x35, 0x12, 0x60, 0x12, 0x17, 0x13, - 0x36, 0x72, 0x04, 0x77, 0x07, 0x55, 0x20, 0x27, 0x15, 0x02, - 0x25, 0x12, 0x57, 0x71, 0x37, 0x45, 0x43, 0x34, 0x40, 0x31, - 0x78, 0x50, 0x31, 0x28, 0x17, 0x84, 0x87, 0x43, 0x25, 0x75, - 0x58, 0x05, 0x61, 0x56, 0x41, 0x44, 0x57, 0x67, 0x85, 0x54, - 0x00, 0x88, 0x88, 0x50, 0x68, 0x11, 0x14, 0x42, 0x08, 0x74, - 0x73, 0x00, 0x38, 0x08, 0x45, 0x28, 0x62, 0x43, 0x36, 0x20, - 0x30, 0x10, 0x87, 0x83, 0x67, 0x62, 0x02, 0x48, 0x46, 0x50, - 0x08, 0x08, 0x41, 0x43, 0x78, 0x22, 0x65, 0x87, 0x43, 0x84, - 0x25, 0x36, 0x58, 0x64, 0x30, 0x10, 0x20, 0x68, 0x82, 0x47, - 0x60, 0x31, 0x76, 0x68, 0x74, 0x68, 0x75, 0x61, 0x16, 0x26, - 0x82, 0x50, 0x32, 0x61, 0x41, 0x22, 0x38, 0x20, 0x86, 0x75, - 0x74, 0x00, 0x77, 0x12, 0x81, 0x35, 0x51, 0x78, 0x88, 0x64, - 0x82, 0x00, 0x41, 0x55, 0x62, 0x87, 0x51, 0x41, 0x74, 0x51, - 0x53, 0x27, 0x33, 0x84, 0x68, 0x86, 0x57, 0x60, 0x44, 0x30, - 0x22, 0x32, 0x10, 0x52, 0x22, 0x83, 0x48, 0x53, 0x66, 0x74, - 0x14, 0x52, 0x32, 0x71, 0x41, 0x08, 0x83, 0x67, 0x41, 0x38, - 0x46, 0x80, 0x88, 0x14, 0x84, 0x30, 0x85, 0x35, 0x46, 0x20, - 0x54, 0x84, 0x56, 0x84, 0x54, 0x82, 0x14, 0x11, 0x52, 0x07, - 0x86, 0x46, 0x05, 0x82, 0x26, 0x85, 0x75, 0x07, 0x88, 0x75, - 0x51, 0x17, 0x54, 0x32, 0x68, 0x66, 0x08, 0x23, 0x66, 0x06, - 0x42, 0x28, 0x00, 0x84, 0x27, 0x27, 0x43, 0x47, 0x12, 0x27, - 0x13, 0x15, 0x17, 0x74, 0x85, 0x14, 0x12, 0x62, 0x06, 0x47, - 0x17, 0x60, 0x00, 0x10, 0x85, 0x16, 0x55, 0x64, 0x46, 0x62, - 0x77, 0x05, 0x51, 0x23, 0x52, 0x37, 0x51, 0x78, 0x35, 0x66, - 0x14, 0x15, 0x78, 0x40, 0x16, 0x54, 0x67, 0x30, 0x61, 0x24, - 0x26, 0x86, 0x56, 0x83, 0x62, 0x78, 0x88, 0x83, 0x50, 0x06, - 0x13, 0x21, 0x33, 0x73, 0x16, 0x44, 0x86, 0x77, 0x65, 0x28, - 0x12, 0x40, 0x62, 0x54, 0x55, 0x84, 0x00, 0x11, 0x77, 0x38, - 0x71, 0x51, 0x38, 0x32, 0x33, 0x67, 0x15, 0x77, 0x24, 0x33, - 0x44, 0x11, 0x05, 0x65, 0x13, 0x03, 0x72, 0x63, 0x81, 0x58, - 0x08, 0x03, 0x34, 0x23, 0x61, 0x00, 0x02, 0x63, 0x86, 0x40, - 0x03, 0x71, 0x34, 0x27, 0x45, 0x10, 0x34, 0x26, 0x83, 0x28, - 0x31, 0x35, 0x26, 0x05, 0x58, 0x41, 0x11, 0x10, 0x65, 0x35, - 0x22, 0x42, 0x28, 0x88, 0x46, 0x06, 0x57, 0x33, 0x88, 0x46, - 0x04, 0x86, 0x88, 0x88, 0x51, 0x74, 0x82, 0x27, 0x58, 0x14, - 0x11, 0x08, 0x13, 0x16, 0x61, 0x16, 0x14, 0x44, 0x83, 0x85, - 0x71, 0x44, 0x55, 0x82, 0x16, 0x62, 0x85, 0x05, 0x43, 0x41, - 0x73, 0x53, 0x60, 0x01, 0x80, 0x68, 0x33, 0x13, 0x43, 0x44, - 0x73, 0x36, 0x65, 0x35, 0x22, 0x26, 0x13, 0x31, 0x36, 0x83, - 0x30, 0x27, 0x15, 0x11, 0x54, 0x53, 0x24, 0x84, 0x75, 0x24, - 0x72, 0x78, 0x34, 0x24, 0x35, 0x80, 0x06, 0x38, 0x88, 0x11, - 0x41, 0x01, 0x34, 0x87, 0x77, 0x20, 0x14, 0x50, 0x55, 0x12, - 0x17, 0x48, 0x87, 0x74, 0x58, 0x42, 0x31, 0x46, 0x36, 0x37, - 0x26, 0x50, 0x04, 0x75, 0x77, 0x15, 0x41, 0x53, 0x04, 0x04, - 0x26, 0x61, 0x65, 0x87, 0x55, 0x56, 0x07, 0x81, 0x28, 0x21, - 0x41, 0x61, 0x41, 0x50, 0x17, 0x47, 0x25, 0x50, 0x20, 0x83, - 0x46, 0x87, 0x18, 0x45, 0x40, 0x21, 0x06, 0x08, 0x12, 0x25, - 0x71, 0x13, 0x35, 0x55, 0x54, 0x61, 0x00, 0x52, 0x74, 0x78, - 0x13, 0x84, 0x55, 0x40, 0x14, 0x40, 0x78, 0x12, 0x88, 0x43, - 0x33, 0x24, 0x66, 0x88, 0x22, 0x44, 0x15, 0x37, 0x81, 0x27, - 0x84, 0x18, 0x28, 0x11, 0x58, 0x51, 0x71, 0x21, 0x02, 0x83, - 0x70, 0x48, 0x32, 0x46, 0x00, 0x70, 0x17, 0x30, 0x63, 0x21, - 0x46, 0x60, 0x50, 0x72, 0x77, 0x45, 0x83, 0x75, 0x26, 0x31, - 0x47, 0x34, 0x47, 0x84, 0x87, 0x63, 0x22, 0x83, 0x21, 0x10, - 0x21, 0x51, 0x47, 0x46, 0x31, 0x06, 0x57, 0x82, 0x65, 0x24, - 0x61, 0x66, 0x24, 0x68, 0x14, 0x03, 0x43, 0x41, 0x04, 0x14, - 0x47, 0x61, 0x57, 0x87, 0x43, 0x83, 0x43, 0x25, 0x87, 0x36, - 0x72, 0x51, 0x38, 0x51, 0x54, 0x54, 0x84, 0x40, 0x15, 0x30, - 0x35, 0x34, 0x43, 0x61, 0x63, 0x42, 0x77, 0x31, 0x42, 0x06, - 0x61, 0x03, 0x01, 0x41, 0x08, 0x84, 0x02, 0x65, 0x04, 0x72, - 0x32, 0x00, 0x21, 0x10, 0x54, 0x73, 0x04, 0x42, 0x48, 0x11, - 0x74, 0x18, 0x63, 0x73, 0x28, 0x61, 0x36, 0x80, 0x20, 0x86, - 0x24, 0x42, 0x16, 0x11, 0x71, 0x83, 0x78, 0x38, 0x82, 0x47, - 0x67, 0x18, 0x56, 0x86, 0x85, 0x66, 0x18, 0x24, 0x50, 0x74, - 0x72, 0x02, 0x66, 0x83, 0x63, 0x08, 0x25, 0x32, 0x15, 0x78, - 0x33, 0x08, 0x34, 0x44, 0x08, 0x28, 0x10, 0x25, 0x40, 0x11, - 0x04, 0x76, 0x60, 0x16, 0x65, 0x16, 0x13, 0x30, 0x53, 0x14, - 0x77, 0x06, 0x06, 0x88, 0x64, 0x47, 0x08, 0x23, 0x11, 0x56, - 0x46, 0x61, 0x48, 0x64, 0x73, 0x66, 0x07, 0x65, 0x41, 0x24, - 0x67, 0x45, 0x42, 0x18, 0x62, 0x01, 0x70, 0x88, 0x03, 0x77, - 0x22, 0x85, 0x77, 0x02, 0x85, 0x03, 0x65, 0x15, 0x57, 0x51, - 0x28, 0x72, 0x53, 0x32, 0x05, 0x58, 0x84, 0x54, 0x03, 0x81, - 0x63, 0x23, 0x38, 0x27, 0x01, 0x85, 0x61, 0x12, 0x28, 0x62, - 0x22, 0x67, 0x56, 0x66, 0x63, 0x08, 0x74, 0x63, 0x21, 0x01, - 0x46, 0x10, 0x08, 0x18, 0x07, 0x86, 0x47, 0x70, 0x50, 0x25, - 0x45, 0x06, 0x55, 0x88, 0x46, 0x11, 0x23, 0x84, 0x70, 0x02, - 0x24, 0x88, 0x52, 0x60, 0x12, 0x72, 0x63, 0x05, 0x81, 0x21, - 0x26, 0x07, 0x64, 0x03, 0x56, 0x48, 0x27, 0x04, 0x38, 0x86, - 0x25, 0x65, 0x21, 0x25, 0x77, 0x21, 0x62, 0x28, 0x82, 0x71, - 0x85, 0x73, 0x78, 0x24, 0x78, 0x51, 0x61, 0x02, 0x81, 0x14, - 0x67, 0x61, 0x08, 0x88, 0x31, 0x77, 0x06, 0x24, 0x45, 0x13, - 0x67, 0x67, 0x54, 0x67, 0x00, 0x12, 0x62, 0x54, 0x11, 0x27, - 0x51, 0x48, 0x07, 0x33, 0x01, 0x24, 0x04, 0x64, 0x11, 0x83, - 0x18, 0x52, 0x55, 0x23, 0x24, 0x58, 0x53, 0x78, 0x30, 0x43, - 0x31, 0x76, 0x62, 0x01, 0x08, 0x73, 0x21, 0x32, 0x12, 0x78, - 0x22, 0x68, 0x33, 0x45, 0x33, 0x73, 0x02, 0x74, 0x21, 0x81, - 0x02, 0x16, 0x54, 0x31, 0x55, 0x76, 0x25, 0x76, 0x41, 0x36, - 0x75, 0x22, 0x78, 0x16, 0x60, 0x48, 0x58, 0x28, 0x83, 0x50, - 0x88, 0x66, 0x72, 0x70, 0x21, 0x21, 0x24, 0x16, 0x62, 0x57, - 0x20, 0x13, 0x80, 0x61, 0x15, 0x45, 0x42, 0x86, 0x00, 0x25, - 0x77, 0x58, 0x84, 0x01, 0x66, 0x16, 0x46, 0x56, 0x68, 0x57, - 0x12, 0x20, 0x75, 0x60, 0x41, 0x85, 0x02, 0x88, 0x12, 0x68, - 0x20, 0x02, 0x41, 0x18, 0x87, 0x13, 0x17, 0x33, 0x74, 0x11, - 0x08, 0x37, 0x47, 0x08, 0x31, 0x67, 0x08, 0x50, 0x61, 0x54, - 0x56, 0x71, 0x63, 0x26, 0x85, 0x22, 0x07, 0x87, 0x71, 0x28, - 0x20, 0x47, 0x48, 0x66, 0x54, 0x38, 0x03, 0x41, 0x38, 0x21, - 0x70, 0x50, 0x66, 0x53, 0x56, 0x70, 0x74, 0x55, 0x70, 0x28, - 0x52, 0x01, 0x42, 0x65, 0x53, 0x73, 0x32, 0x33, 0x67, 0x42, - 0x67, 0x85, 0x18, 0x45, 0x12, 0x37, 0x58, 0x82, 0x13, 0x73, - 0x78, 0x77, 0x03, 0x42, 0x04, 0x65, 0x55, 0x66, 0x07, 0x25, - 0x07, 0x37, 0x40, 0x78, 0x66, 0x71, 0x11, 0x21, 0x43, 0x25, - 0x87, 0x40, 0x58, 0x63, 0x33, 0x43, 0x52, 0x10, 0x31, 0x53, - 0x56, 0x48, 0x05, 0x55, 0x77, 0x77, 0x26, 0x87, 0x28, 0x43, - 0x61, 0x46, 0x11, 0x76, 0x82, 0x50, 0x42, 0x04, 0x32, 0x88, - 0x18, 0x66, 0x16, 0x36, 0x64, 0x41, 0x38, 0x17, 0x55, 0x43, - 0x06, 0x25, 0x80, 0x27, 0x21, 0x16, 0x81, 0x22, 0x64, 0x60, - 0x38, 0x16, 0x82, 0x40, 0x72, 0x34, 0x73, 0x52, 0x61, 0x85, - 0x11, 0x16, 0x00, 0x25, 0x03, 0x30, 0x06, 0x80, 0x21, 0x56, - 0x64, 0x52, 0x23, 0x26, 0x37, 0x75, 0x73, 0x65, 0x53, 0x27, - 0x37, 0x47, 0x56, 0x76, 0x80, 0x38, 0x53, 0x62, 0x14, 0x24, - 0x64, 0x03, 0x66, 0x21, 0x72, 0x16, 0x36, 0x34, 0x11, 0x65, - 0x61, 0x62, 0x86, 0x02, 0x83, 0x27, 0x80, 0x82, 0x70, 0x72, - 0x52, 0x60, 0x20, 0x87, 0x58, 0x58, 0x14, 0x38, 0x47, 0x03, - 0x10, 0x72, 0x60, 0x48, 0x02, 0x01, 0x17, 0x21, 0x61, 0x62, - 0x38, 0x64, 0x27, 0x53, 0x57, 0x13, 0x68, 0x18, 0x26, 0x62, - 0x43, 0x42, 0x21, 0x85, 0x70, 0x23, 0x58, 0x13, 0x72, 0x04, - 0x04, 0x08, 0x05, 0x82, 0x26, 0x18, 0x82, 0x47, 0x87, 0x71, - 0x32, 0x28, 0x68, 0x25, 0x87, 0x24, 0x06, 0x74, 0x41, 0x44, - 0x08, 0x64, 0x68, 0x30, 0x24, 0x44, 0x21, 0x73, 0x03, 0x45, - 0x70, 0x41, 0x06, 0x78, 0x38, 0x33, 0x88, 0x13, 0x31, 0x14, - 0x18, 0x17, 0x45, 0x06, 0x26, 0x67, 0x66, 0x73, 0x82, 0x56, - 0x66, 0x88, 0x70, 0x22, 0x55, 0x47, 0x27, 0x50, 0x86, 0x55, - 0x53, 0x00, 0x28, 0x55, 0x40, 0x62, 0xe9, 0x37, 0x65, 0xe1, - 0x30, 0x48, 0x6b, 0x35, 0x76, 0x96, 0x05, 0x21, 0xce, 0xed, - 0x46, 0xae, 0x7e, 0x6d, 0xc9, 0xf1, 0xc9, 0xb3, 0x7a, 0xa7, - 0xde, 0xa7, 0x62, 0x18, 0x11, 0xc0, 0xd8, 0xd0, 0x17, 0x0f, - 0x38, 0xaf, 0x0e, 0x3d, 0xaf, 0xe6, 0x63, 0xb0, 0xc4, 0x68, - 0x4e, 0x29, 0xa4, 0xf4, 0x20, 0x22, 0xbc, 0x82, 0x15, 0x1d, - 0x08, 0x39, 0x18, 0xfe, 0x69, 0x55, 0x06, 0x3d, 0xf4, 0xa3, - 0xe7, 0x29, 0x23, 0xa4, 0xd9, 0xa4, 0x22, 0x06, 0x2d, 0x5f, - 0x22, 0xb3, 0x9b, 0x1c, 0xb6, 0x3e, 0xf3, 0xf4, 0x8a, 0xb3, - 0x35, 0x18, 0x4c, 0x1f, 0xaf, 0xd4, 0xcf, 0x5b, 0x9b, 0xa7, - 0xf8, 0xd2, 0x86, 0x71, 0x8e, 0x64, 0x96, 0xd1, 0x6e, 0xad, - 0xd2, 0x7e, 0x16, 0x5b, 0x38, 0x91, 0x0e, 0x40, 0xaa, 0x07, - 0x6a, 0x63, 0x2a, 0xc0, 0x5b, 0x14, 0x79, 0x52, 0xcb, 0x23, - 0x6e, 0x76, 0x95, 0xd0, 0x90, 0x6c, 0x18, 0xe7, 0x89, 0xee, - 0xb9, 0x7f, 0x33, 0x08, 0x35, 0x8f, 0xa3, 0xaa, 0xaa, 0x10, - 0x2f, 0x8b, 0xc9, 0x6c, 0x1d, 0x95, 0xb5, 0xb8, 0x54, 0x0d, - 0x67, 0x86, 0xd4, 0x5d, 0xae, 0x8f, 0x33, 0x20, 0xe2, 0x35, - 0xda, 0x71, 0x53, 0x24, 0xad, 0x16, 0x84, 0x2e, 0x98, 0xcd, - 0x00, 0xa2, 0x69, 0x6a, 0x12, 0x9a, 0x86, 0xf3, 0x9f, 0x18, - 0x6c, 0x9f, 0x24, 0xbe, 0xb3, 0xf4, 0x90, 0xb3, 0xc4, 0xa4, - 0x8b, 0xce, 0x88, 0x60, 0xa0, 0x91, 0xb8, 0x9a, 0x52, 0xe5, - 0xfe, 0x16, 0x6d, 0xff, 0xb3, 0xdc, 0x50, 0x79, 0xfe, 0x31, - 0x24, 0xd4, 0x59, 0x5f, 0xf9, 0xb4, 0x70, 0x0b, 0x15, 0x93, - 0xd9, 0xe9, 0x92, 0xb6, 0xf5, 0x80, 0x34, 0x63, 0x66, 0x78, - 0xcf, 0xa9, 0xce, 0x48, 0xbf, 0xbe, 0x9e, 0xfa, 0xdd, 0x7d, - 0xf4, 0x16, 0xe2, 0xd2, 0x98, 0x13, 0xe2, 0x76, 0xdd, 0x0a, - 0xc7, 0x2d, 0xe8, 0x88, 0x8e, 0x1a, 0xc0, 0xfc, 0xe8, 0x35, - 0xaf, 0x5d, 0xe2, 0x4c, 0x96, 0x82, 0x4c, 0xe5, 0x89, 0x14, - 0xb8, 0x27, 0x39, 0xb5, 0x55, 0xc5, 0xa5, 0x8a, 0x01, 0xcc, - 0xfd, 0xbd, 0xa9, 0xec, 0xae, 0xc0, 0xe7, 0xd7, 0xf8, 0x11, - 0x84, 0x35, 0x99, 0x26, 0xb6, 0xc6, 0xf7, 0x35, 0xe0, 0x93, - 0xd8, 0xd7, 0xbf, 0xc0, 0xc8, 0x44, 0xfd, 0x46, 0xf5, 0xb7, - 0xc5, 0x5a, 0x75, 0xd3, 0xc7, 0xfa, 0xf4, 0xe1, 0xc0, 0x84, - 0x5e, 0x31, 0xfe, 0x69, 0x80, 0x5a, 0xe5, 0x4b, 0x9b, 0x5b, - 0xa4, 0x5c, 0x23, 0xaa, 0x85, 0xc9, 0x9a, 0xbd, 0x71, 0x49, - 0x11, 0x30, 0x8b, 0x81, 0xa1, 0xdd, 0xf8, 0xb8, 0x74, 0x91, - 0xe7, 0xf7, 0x82, 0x42, 0x70, 0x22, 0x95, 0xf0, 0xcc, 0x9f, - 0x02, 0x33, 0x0f, 0x08, 0x3b, 0x04, 0x31, 0xd7, 0x4f, 0x86, - 0x78, 0x49, 0xb9, 0x90, 0xf5, 0x8f, 0xec, 0x12, 0x84, 0x52, - 0x03, 0x1f, 0x64, 0x5e, 0xf0, 0x2a, 0xeb, 0x87, 0xa5, 0xec, - 0x95, 0x25, 0x64, 0x25, 0x49, 0x3b, 0x3c, 0x30, 0xed, 0x3b, - 0xe9, 0x36, 0xfd, 0xae, 0xa6, 0x26, 0xd3, 0x45, 0xbc, 0x1b, - 0x78, 0x5f, 0xce, 0x27, 0x45, 0x1c, 0xd5, 0xf9, 0xa7, 0xda, - 0x62, 0xe6, 0x7e, 0xd3, 0xbb, 0xd8, 0x0a, 0xfd, 0xf5, 0xa5, - 0x31, 0x09, 0x6e, 0x40, 0xe8, 0xcf, 0xc1, 0x42, 0x8e, 0x2e, - 0x75, 0x65, 0xaa, 0x91, 0x6f, 0xc7, 0x75, 0x3a, 0x1e, 0x40, - 0x99, 0x71, 0x5e, 0x00, 0xae, 0x07, 0xad, 0x43, 0x49, 0xdd, - 0x6d, 0x36, 0xe3, 0xa8, 0xdf, 0x2c, 0x39, 0xa2, 0x57, 0xd7, - 0x93, 0xa1, 0x16, 0x80, 0x89, 0xa6, 0x56, 0x69, 0x75, 0xea, - 0xb8, 0xb2, 0x43, 0x0c, 0xdf, 0x46, 0x05, 0x9a, 0x39, 0x08, - 0x3b, 0xb6, 0x76, 0xe3, 0x5b, 0x98, 0x5b, 0x48, 0xc0, 0x11, - 0x14, 0x6f, 0xcd, 0xb7, 0xaa, 0x08, 0x1e, 0x53, 0x9b, 0x94, - 0x9d, 0xa2, 0xe6, 0x99, 0xcb, 0x1c, 0xb4, 0xbf, 0x55, 0x84, - 0x12, 0xc9, 0xf1, 0xf0, 0x94, 0xd9, 0x7d, 0x61, 0xa9, 0xe7, - 0xe6, 0xc1, 0xe2, 0xca, 0x6b, 0x36, 0x80, 0x72, 0x31, 0x79, - 0xbf, 0xe7, 0x3e, 0x99, 0x9e, 0xd5, 0x59, 0xd4, 0x97, 0x14, - 0xd5, 0xfa, 0x93, 0x37, 0x8a, 0x65, 0xa5, 0xb6, 0x4e, 0xba, - 0xb3, 0x84, 0xf2, 0xc1, 0x55, 0xb6, 0x94, 0x31, 0x30, 0xe7, - 0xb2, 0x71, 0x4e, 0xc6, 0x21, 0x50, 0xf3, 0xcf, 0x7c, 0xbc, - 0x26, 0xb7, 0x20, 0xcb, 0x2d, 0x9e, 0x55, 0x23, 0x7c, 0xf0, - 0x97, 0x16, 0x57, 0x5b, 0xcc, 0xc5, 0x48, 0xc9, 0xc8, 0xee, - 0x1e, 0x11, 0x6b, 0x72, 0x3b, 0x29, 0x71, 0xa4, 0xed, 0x08, - 0x6c, 0x38, 0xc6, 0x2e, 0x64, 0x3b, 0x16, 0xd8, 0x4d, 0x19, - 0xe8, 0x94, 0xd3, 0xd5, 0xb4, 0x18, 0xb4, 0x03, 0x24, 0x62, - 0xe7, 0x44, 0x5e, 0x09, 0x60, 0xc6, 0xa9, 0xa6, 0xca, 0xbe, - 0x83, 0xe5, 0xf1, 0xbd, 0x04, 0x22, 0x4b, 0x1b, 0x08, 0x0b, - 0xa6, 0x20, 0x95, 0xf2, 0x78, 0x8c, 0x3e, 0x73, 0x03, 0x7b, - 0x75, 0x2c, 0xe5, 0x72, 0xec, 0xc9, 0x25, 0x06, 0x6b, 0x3a, - 0x5e, 0x0e, 0x96, 0xd0, 0xe3, 0x85, 0xb0, 0xb5, 0x6a, 0x83, - 0x40, 0x41, 0x94, 0xce, 0xa1, 0x07, 0x79, 0x07, 0xe2, 0x50, - 0xa4, 0xde, 0x7d, 0x64, 0x2f, 0x7e, 0x43, 0xd5, 0x72, 0xd1, - 0xa7, 0xb9, 0x76, 0xa3, 0xfc, 0x25, 0x33, 0xd7, 0x95, 0xb5, - 0xd9, 0x94, 0x93, 0x55, 0xaf, 0x04, 0x86, 0x4a, 0xfc, 0x2f, - 0x5f, 0x3d, 0x34, 0x86, 0xf2, 0x9a, 0x31, 0x4c, 0xc9, 0xad, - 0x08, 0xa5, 0x03, 0x91, 0x8a, 0x7e, 0x46, 0xc9, 0x44, 0x61, - 0x11, 0x59, 0x4f, 0xbb, 0x70, 0xf9, 0x9d, 0x3e, 0x6d, 0x53, - 0xb4, 0x16, 0x28, 0xd3, 0x67, 0x52, 0x14, 0xad, 0xba, 0xb1, - 0x21, 0xaf, 0x84, 0x18, 0xc9, 0x37, 0x78, 0xb3, 0x78, 0x92, - 0x95, 0xad, 0x1b, 0xc0, 0x70, 0xe7, 0xe9, 0x06, 0x02, 0xed, - 0x6c, 0x99, 0x4e, 0x43, 0xc0, 0xa4, 0x6f, 0x23, 0xa8, 0x02, - 0xc4, 0xbd, 0xc0, 0x16, 0xc4, 0xed, 0xe0, 0xe1, 0x56, 0x06, - 0x3f, 0xf4, 0x77, 0x12, 0x72, 0x52, 0x04, 0xe8, 0xe4, 0x26, - 0xe5, 0x01, 0x47, 0x5b, 0x8a, 0xca, 0x07, 0x3b, 0xc9, 0xb1, - 0x42, 0x8f, 0x7d, 0x64, 0x7d, 0x5d, 0x6a, 0x95, 0xde, 0x4d, - 0x4b, 0xd3, 0xfa, 0xcf, 0xf0, 0x25, 0x27, 0x96, 0x48, 0xb6, - 0xcc, 0x68, 0x29, 0x37, 0x95, 0xcd, 0x36, 0xb7, 0xb0, 0xd6, - 0xf1, 0xfc, 0x4f, 0xe9, 0xa8, 0x6b, 0x9d, 0x75, 0xc7, 0x9b, - 0x19, 0xaf, 0xbb, 0x8a, 0xaf, 0x4b, 0xb8, 0xe2, 0xeb, 0x8d, - 0xd9, 0xf5, 0x75, 0xc5, 0xc8, 0x0b, 0xf2, 0x1c, 0xf9, 0x9e, - 0xc7, 0x4d, 0x7c, 0x71, 0x47, 0xbd, 0x57, 0x7e, 0xe6, 0x59, - 0xca, 0x8c, 0xf2, 0x0c, 0x47, 0x4a, 0x90, 0xa7, 0xf5, 0xb8, - 0xb2, 0x43, 0x97, 0xdb, 0xbe, 0x76, 0x37, 0x29, 0x36, 0x40, - 0xaa, 0x7a, 0x81, 0xf0, 0xa0, 0xd0, 0x81, 0x39, 0x88, 0xf0, - 0x23, 0xb0, 0xa4, 0xbe, 0x5e, 0xd8, 0x33, 0x98, 0x5d, 0x9d, - 0xb5, 0xd4, 0x1c, 0x00, 0xe2, 0x30, 0xb8, 0x68, 0x58, 0x65, - 0x30, 0x94, 0x3d, 0xf2, 0x75, 0x0c, 0x8e, 0x3b, 0xee, 0x9b, - 0xce, 0x6c, 0x67, 0x68, 0x54, 0x86, 0x7d, 0x27, 0x2a, 0x2f, - 0xf7, 0x25, 0xff, 0x22, 0x1e, 0x74, 0xbd, 0x72, 0x11, 0xf4, - 0x47, 0x8e, 0x2f, 0x0d, 0xb9, 0x31, 0xac, 0x5c, 0x1d, 0xa0, - 0x11, 0xea, 0x16, 0x24, 0x86, 0x76, 0xbd, 0xa3, 0x41, 0x7f, - 0x00, 0xe6, 0xe2, 0x86, 0x93, 0xff, 0x02, 0x07, 0xce, 0x49, - 0xe4, 0xaf, 0x00, 0x9b, 0x15, 0xa6, 0x05, 0xf7, 0x54, 0xd1, - 0xbb, 0xa7, 0x09, 0x67, 0xe6, 0x99, 0xf9, 0x23, 0xe6, 0xaa, - 0x6f, 0xcb, 0xe1, 0xc1, 0xac, 0x7b, 0x98, 0xa9, 0x14, 0x43, - 0x55, 0x22, 0x2c, 0x7a, 0x4a, 0x4a, 0x63, 0xc1, 0xfe, 0x5c, - 0xca, 0xf4, 0x91, 0x3b, 0x6f, 0xf8, 0x7e, 0x2a, 0xa1, 0x4a, - 0xc3, 0x16, 0x1c, 0x1d, 0x53, 0x7d, 0x0e, 0x77, 0x0d, 0x72, - 0x07, 0x78, 0xea, 0xce, 0xe4, 0x0c, 0xf7, 0xce, 0xa0, 0xef, - 0xa1, 0xdb, 0x6b, 0x5f, 0xfd, 0xeb, 0x68, 0xc7, 0x76, 0xfd, - 0x35, 0xd2, 0xcb, 0xa4, 0xf6, 0xe6, 0x6b, 0xdb, 0xe9, 0xd5, - 0x1e, 0x05, 0x8a, 0xba, 0xed, 0x77, 0x94, 0x36, 0x6c, 0x3c, - 0xe2, 0x23, 0xf8, 0x84, 0xa1, 0xe3, 0xcd, 0xfa, 0x1d, 0x31, - 0x52, 0x4d, 0xbc, 0x16, 0x31, 0x92, 0xd7, 0xbe, 0x2e, 0xd6, - 0x6d, 0x1d, 0x58, 0x4e, 0xd8, 0x06, 0x8f, 0xb3, 0xe6, 0x79, - 0x60, 0x92, 0x71, 0x1f, 0x72, 0x84, 0x55, 0x7b, 0xfa, 0xc8, - 0xcf, 0x20, 0x16, 0x2f, 0xc7, 0x13, 0x17, 0xd1, 0x2d, 0xd1, - 0x0d, 0x84, 0x48, 0x08, 0x69, 0xd1, 0x55, 0xb1, 0x08, 0xb6, - 0x17, 0x8c, 0x38, 0x31, 0xa4, 0x77, 0x73, 0xc0, 0xe9, 0xfc, - 0x5f, 0x8e, 0xb3, 0x74, 0x1f, 0xab, 0xcf, 0xf5, 0x26, 0x26, - 0x20, 0x80, 0xd8, 0x13, 0x42, 0xcf, 0xc7, 0x9d, 0xd6, 0x5b, - 0x1a, 0xfd, 0x46, 0x83, 0xba, 0xc1, 0xe5, 0x92, 0xe9, 0x27, - 0xa8, 0xa0, 0x36, 0xd5, 0x31, 0x75, 0x7b, 0x8f, 0x53, 0xf6, - 0xbd, 0x08, 0x1a, 0x86, 0x81, 0x83, 0x85, 0x07, 0x44, 0x3e, - 0xf9, 0x72, 0x47, 0xe0, 0xf1, 0xbe, 0x43, 0x6a, 0xc3, 0x00, - 0x94, 0xd3, 0x19, 0x81, 0xde, 0xf3, 0xfd, 0x57, 0x98, 0xdc, - 0x57, 0xfe, 0x9f, 0x4b, 0x38, 0x23, 0xad, 0xa8, 0xd4, 0x07, - 0x07, 0x5c, 0xca, 0x25, 0xb8, 0x77, 0x7e, 0x45, 0x01, 0x9b, - 0xd4, 0x45, 0x5b, 0x94, 0x47, 0x18, 0x35, 0x66, 0xad, 0x0a, - 0x97, 0x06, 0xc6, 0xa7, 0xaa, 0x50, 0xbf, 0x07, 0x90, 0xfe, - 0x50, 0x8d, 0xd9, 0x1f, 0xdd, 0x33, 0xa4, 0xa7, 0x23, 0x48, - 0xa3, 0xd6, 0x5d, 0xb8, 0x9e, 0x97, 0x22, 0x32, 0xd3, 0x8a, - 0xb0, 0x5e, 0xb3, 0xc9, 0x0b, 0x24, 0x09, 0x66, 0x2e, 0xea, - 0x94, 0x9c, 0x90, 0x4f, 0x3e, 0x93, 0xcf, 0x30, 0x3f, 0xb4, - 0xbe, 0x5e, 0x6c, 0xaf, 0x1a, 0xff, 0x00, 0xc7, 0x74, 0x2e, - 0x8b, 0x08, 0xe9, 0x22, 0x61, 0xc5, 0xd1, 0x21, 0x15, 0xa1, - 0xba, 0x37, 0xd2, 0x24, 0xfd, 0xa5, 0x63, 0x9a, 0x97, 0xfa, - 0xfe, 0xb2, 0xa5, 0x1b, 0x3b, 0xbd, 0xb7, 0xb3, 0x2f, 0x3d, - 0xf1, 0x5a, 0xf2, 0xf6, 0xe4, 0x12, 0xe4, 0x3a, 0x26, 0x3c, - 0x21, 0x5c, 0xd6, 0x83, 0x65, 0x26, 0x86, 0xcc, 0x47, 0x84, - 0xd7, 0x26, 0x31, 0x31, 0xcf, 0x1d, 0xd6, 0xc4, 0xa4, 0xf2, - 0xd4, 0x25, 0x54, 0x2b, 0x81, 0x00, 0x1d, 0xd8, 0xdf, 0x04, - 0xb8, 0x4b, 0xcf, 0xe5, 0x16, 0xf4, 0x4a, 0x17, 0xc5, 0xd8, - 0xd3, 0xdf, 0xe4, 0xb7, 0xd3, 0x98, 0xb6, 0x73, 0xa0, 0x37, - 0x67, 0xbb, 0x8b, 0xc3, 0xfc, 0xac, 0x6e, 0x6c, 0x0e, 0x5d, - 0x44, 0xb0, 0x9d, 0xf8, 0xae, 0x17, 0x9b, 0xf9, 0xcb, 0xe8, - 0xfe, 0xc1, 0x7b, 0x78, 0x16, 0xf6, 0x74, 0x04, 0x7d, 0x38, - 0x17, 0x36, 0x09, 0xe3, 0x73, 0xa1, 0x76, 0x78, 0x7c, 0x14, - 0xb3, 0x83, 0x91, 0x59, 0x27, 0xea, 0x8c, 0x69, 0xe6, 0xa5, - 0x21, 0xcd, 0x78, 0xc7, 0x26, 0xa2, 0xfb, 0xd4, 0xf3, 0xaf, - 0x3f, 0xcf, 0x51, 0x10, 0xcc, 0x4b, 0xdd, 0x14, 0xf4, 0xf3, - 0xb8, 0xea, 0x07, 0xa7, 0x76, 0xe7, 0xbe, 0xec, 0x01, 0xb5, - 0x1e, 0xdc, 0xc3, 0x55, 0x19, 0xb1, 0x16, 0x3f, 0xfe, 0xd4, - 0x15, 0x49, 0xaf, 0x04, 0x9d, 0x38, 0xdd, 0x86, 0x53, 0x2a, - 0x80, 0x62, 0x42, 0xb7, 0x98, 0x42, 0x38, 0xaf, 0x9d, 0x87, - 0xe2, 0x3f, 0xea, 0x7e, 0x0a, 0x35, 0xb8, 0xee, 0xa5, 0x48, - 0x09, 0x08, 0xc5, 0x0d, 0xae, 0x01, 0xd5, 0xec, 0x43, 0x29, - 0x3b, 0xfb, 0x78, 0xc4, 0x96, 0x01, 0x1c, 0x21, 0xf2, 0xc9, - 0x44, 0x68, 0x24, 0x66, 0x86, 0x96, 0xb8, 0xc8, 0xe9, 0xd0, - 0x38, 0x0e, 0x96, 0x4d, 0xcc, 0x45, 0xab, 0xe1, 0xca, 0x50, - 0x10, 0x20, 0x01, 0xbe, 0x89, 0xc0, 0x43, 0x84, 0xd8, 0x38, - 0x52, 0xc0, 0xaf, 0x4d, 0x6b, 0x99, 0x0b, 0xc0, 0xc2, 0x99, - 0x07, 0xc6, 0x78, 0xa8, 0xf7, 0x32, 0x84, 0x86, 0xc5, 0x1a, - 0x95, 0x81, 0xa6, 0x6a, 0x05, 0xa7, 0x9d, 0x81, 0x0e, 0x32, - 0x18, 0x11, 0x4a, 0x0f, 0xfc, 0x17, 0x9e, 0xf7, 0xbf, 0x54, - 0x82, 0xed, 0xba, 0x6f, 0xbd, 0x41, 0xc1, 0xca, 0x55, 0x6c, - 0xff, 0x32, 0x6b, 0xa2, 0x59, 0xae, 0xae, 0x92, 0xc1, 0xb5, - 0xa6, 0xfc, 0xaf, 0x09, 0x48, 0x57, 0xd6, 0xee, 0x38, 0x99, - 0xb4, 0xe3, 0x8f, 0xb7, 0xfc, 0x6a, 0x0a, 0x3b, 0x08, 0xe1, - 0x81, 0x46, 0x11, 0xeb, 0x4a, 0x98, 0x43, 0x16, 0x16, 0x1f, - 0x68, 0xdb, 0xb9, 0x71, 0x19, 0xfe, 0x8b, 0xe6, 0xb7, 0x8b, - 0xc1, 0x3b, 0x90, 0xc5, 0x89, 0x1d, 0xca, 0xd9, 0x19, 0x6c, - 0xe8, 0x01, 0xf4, 0x19, 0x50, 0x3e, 0x93, 0x84, 0xbf, 0xaa, - 0x9a, 0x3d, 0x20, 0x4c, 0x4e, 0x79, 0x83, 0xec, 0x46, 0x83, - 0x09, 0x00, 0xc3, 0x8a, 0xad, 0xd5, 0x2b, 0x08, 0xd1, 0x47, - 0xac, 0x96, 0x0e, 0x34, 0xf0, 0x89, 0x1a, 0x0f, 0xf2, 0x51, - 0x8d, 0x2c, 0xb5, 0xf2, 0xfe, 0x8c, 0xdc, 0xed, 0x41, 0x51, - 0x8c, 0x71, 0x12, 0x05, 0xec, 0x68, 0x21, 0x86, 0x94, 0xf4, - 0xfb, 0xfc, 0xaa, 0xc7, 0xc7, 0xbb, 0x74, 0xa2, 0x8b, 0x76, - 0x62, 0x1c, 0x64, 0x11, 0xa0, 0xd0, 0x5f, 0x46, 0x64, 0xd4, - 0x47, 0xbc, 0x8a, 0x5b, 0x2b, 0xc2, 0xc1, 0x88, 0xb2, 0x30, - 0xbd, 0x02, 0x17, 0x18, 0x0a, 0xd7, 0x9b, 0x3d, 0x91, 0xb9, - 0x2c, 0x83, 0x24, 0xb4, 0x8b, 0x9d, 0x02, 0xaf, 0xb2, 0x4e, - 0x57, 0xe1, 0xb0, 0xa2, 0xf3, 0x7c, 0xde, 0x15, 0xba, 0x60, - 0xbd, 0x80, 0xbe, 0x6d, 0x6f, 0x16, 0xb3, 0xb9, 0xb8, 0x6a, - 0x55, 0xb4, 0xad, 0xf1, 0x01, 0x63, 0x40, 0x01, 0xba, 0x5b, - 0x5d, 0x9a, 0xbc, 0xf0, 0x58, 0xa8, 0xf7, 0xbb, 0x8e, 0x91, - 0xa0, 0xfd, 0x8c, 0x49, 0x8f, 0x1a, 0xbb, 0x2a, 0x28, 0x0d, - 0x7a, 0xa6, 0xc2, 0xd7, 0x41, 0x16, 0xed, 0x61, 0x5d, 0xc4, - 0xe7, 0xcf, 0x2b, 0xb4, 0xb9, 0x10, 0x6f, 0x38, 0x42, 0x88, - 0x94, 0x6e, 0x75, 0x2c, 0x89, 0xac, 0xa0, 0xe9, 0x81, 0xec, - 0x2d, 0x62, 0xa3, 0xba, 0x3c, 0x40, 0xdb, 0x65, 0x56, 0x8e, - 0xc7, 0xd8, 0xb0, 0xd4, 0xf9, 0x04, 0x2b, 0x4c, 0x83, 0x20, - 0xbe, 0xad, 0xb8, 0x66, 0x1c, 0x20, 0x32, 0xb3, 0xf6, 0xf1, - 0xac, 0xa5, 0x8a, 0x72, 0x9a, 0x41, 0x1d, 0x6e, 0xa0, 0x16, - 0xe0, 0x0c, 0x39, 0xb6, 0x06, 0x96, 0x55, 0xb7, 0xda, 0x1c, - 0x54, 0x08, 0xf6, 0x30, 0x1b, 0xb6, 0x57, 0xca, 0x7d, 0xb0, - 0xdc, 0x9e, 0xfa, 0x5c, 0x38, 0x7f, 0xac, 0x37, 0x80, 0x26, - 0xba, 0xdc, 0x7a, 0x95, 0xe5, 0x7b, 0x90, 0xf3, 0x1a, 0xc7, - 0x31, 0x8e, 0x97, 0x07, 0x9a, 0xb8, 0xbe, 0xae, 0x16, 0x11, - 0x44, 0xb0, 0x01, 0xf5, 0xe8, 0x37, 0x1a, 0x67, 0xfe, 0x00, - 0x8f, 0xa1, 0xf5, 0x03, 0x7c, 0xed, 0xbf, 0x42, 0xf4, 0x78, - 0x2b, 0xfb, 0x9f, 0x8c, 0xb3, 0x63, 0x0b, 0x42, 0xbf, 0xae, - 0x8e, 0xf7, 0x6f, 0xb4, 0xb1, 0xe8, 0x75, 0x8c, 0xdf, 0x69, - 0xc6, 0xe1, 0x3a, 0x26, 0x05, 0x47, 0x03, 0x61, 0xfc, 0xc5, - 0xa9, 0xc1, 0x4f, 0x70, 0xce, 0x18, 0xbb, 0x01, 0xe6, 0x11, - 0xc9, 0xa7, 0x7e, 0x65, 0xb8, 0xdc, 0x61, 0x3d, 0x9b, 0x47, - 0x2e, 0x34, 0x16, 0xa1, 0x73, 0x61, 0x91, 0xed, 0x45, 0xe3, - 0x01, 0x26, 0xee, 0x16, 0x76, 0x0e, 0xb7, 0xa1, 0xc0, 0xb3, - 0xac, 0xf0, 0xa5, 0x3b, 0xf6, 0x64, 0x1b, 0x93, 0x94, 0x5c, - 0x8f, 0x4c, 0x25, 0x89, 0xa1, 0x92, 0x32, 0x50, 0x28, 0x03, - 0x8b, 0xff, 0xc4, 0xf6, 0x2a, 0xe8, 0xda, 0x8d, 0xfe, 0x49, - 0xb5, 0x33, 0x01, 0xca, 0x2d, 0x2d, 0x60, 0x33, 0xd6, 0x30, - 0x38, 0x8a, 0x1e, 0x38, 0x3d, 0x78, 0x11, 0xff, 0xef, 0x1c, - 0x82, 0x33, 0xbb, 0xfc, 0x95, 0xef, 0x79, 0xb0, 0x59, 0xbd, - 0x2c, 0xfd, 0x1c, 0x3f, 0x42, 0xda, 0xdf, 0xbd, 0x56, 0xf2, - 0xd6, 0xae, 0x2d, 0x23, 0x36, 0xed, 0xb1, 0x8d, 0x62, 0x58, - 0x71, 0x66, 0x21, 0xe0, 0x4d, 0xee, 0xf4, 0x16, 0x48, 0xa6, - 0xcf, 0x1a, 0x8a, 0xf0, 0x8a, 0xd1, 0x53, 0xf6, 0xe5, 0x4e, - 0x98, 0x9d, 0x7d, 0x6c, 0xd2, 0xdf, 0xb8, 0x2d, 0xa6, 0xe5, - 0x8a, 0xd6, 0xb5, 0xae, 0x61, 0x96, 0xfa, 0x6b, 0xca, 0x7f, - 0x08, 0xc2, 0x2b, 0x67, 0x30, 0x5e, 0x21, 0x3b, 0xa4, 0x84, - 0x95, 0xc6, 0x2f, 0x2c, 0x1f, 0xe2, 0x0e, 0x1a, 0xc3, 0x89, - 0x6a, 0x6a, 0xe7, 0x08, 0xf9, 0x74, 0xee, 0x4f, 0xcd, 0x5e, - 0xe8, 0xce, 0x55, 0x4d, 0x38, 0xed, 0x62, 0x35, 0xee, 0xfc, - 0x14, 0x56, 0xb9, 0xf0, 0xce, 0x29, 0x1c, 0x21, 0x40, 0x51, - 0xe4, 0x76, 0xe3, 0xa6, 0xd8, 0x3d, 0x54, 0x58, 0x51, 0xe5, - 0xf0, 0xdc, 0x50, 0x39, 0x43, 0x67, 0x44, 0x14, 0xcc, 0x6e, - 0x5a, 0xb1, 0x15, 0xec, 0xb4, 0x3e, 0x0e, 0xef, 0x8e, 0x72, - 0x6a, 0xdf, 0xba, 0x37, 0x27, 0x15, 0x62, 0xc3, 0xbd, 0xee, - 0x1d, 0xb1, 0x24, 0x2f, 0x57, 0x51, 0xf1, 0x8f, 0xfb, 0xd1, - 0x10, 0x6f, 0x11, 0xb9, 0x94, 0x5c, 0x9c, 0x12, 0x26, 0x46, - 0x46, 0x7b, 0x31, 0x0e, 0xad, 0x93, 0xe4, 0x4f, 0x09, 0xe3, - 0xbf, 0xc5, 0xe3, 0x11, 0xa4, 0x25, 0x8d, 0x9b, 0x8e, 0x26, - 0x02, 0xaa, 0x72, 0x18, 0xce, 0x89, 0x67, 0xfc, 0x1c, 0x28, - 0xab, 0x11, 0x5a, 0x84, 0x23, 0x7c, 0x91, 0xac, 0x6b, 0x48, - 0x9c, 0x39, 0x14, 0xa3, 0xac, 0xc6, 0x30, 0xbc, 0x1e, 0x0c, - 0xd3, 0x34, 0x19, 0xa9, 0x2b, 0xe7, 0xa4, 0xf8, 0xc1, 0xf0, - 0x3c, 0x60, 0xa2, 0xf7, 0x51, 0x86, 0xcf, 0x42, 0xad, 0x34, - 0x81, 0xa6, 0x93, 0x0b, 0x88, 0x4c, 0xbf, 0xd2, 0x4f, 0xe0, - 0xdb, 0xb2, 0x1d, 0x6d, 0xb2, 0x5c, 0xac, 0xd8, 0x64, 0x85, - 0xc3, 0x35, 0x6e, 0x5d, 0xaf, 0x63, 0x3e, 0x47, 0xb7, 0x5d, - 0x39, 0x21, 0x36, 0xa6, 0xd4, 0xef, 0x9e, 0x1c, 0x1f, 0xd6, - 0xa4, 0xe0, 0xe4, 0x22, 0x75, 0x1e, 0xeb, 0x15, 0xb4, 0xee, - 0x43, 0x37, 0x06, 0xf9, 0x77, 0xbf, 0x68, 0x9b, 0x9a, 0x7f, - 0x38, 0x30, 0x87, 0xde, 0x0c, 0x6a, 0x39, 0x41, 0xe1, 0xed, - 0xf4, 0x18, 0x6e, 0x29, 0x44, 0xf0, 0xfc, 0xb6, 0x09, 0x5b, - 0xb3, 0x30, 0xc9, 0x0a, 0x8c, 0x41, 0x6f, 0x1e, 0x95, 0xbe, - 0x93, 0x3c, 0x11, 0x9b, 0x24, 0xf7, 0x57, 0xb8, 0xc5, 0x9b, - 0x08, 0xaa, 0xcd, 0x24, 0x86, 0x98, 0x59, 0x0f, 0xc6, 0x0e, - 0xd2, 0x71, 0xb2, 0x5e, 0xae, 0x72, 0xc9, 0x69, 0x3b, 0x80, - 0xc2, 0x27, -}; -#define sizeof_bench_dilithium_level3_key (sizeof(bench_dilithium_level3_key)) - -#endif /* !WOLFSSL_MLDSA_NO_SIGN */ - -#ifndef WOLFSSL_MLDSA_NO_VERIFY - -/* raw public key without ASN1 syntax from - * ./certs/dilithium/bench_dilithium_level3_key.der */ -static const unsigned char bench_dilithium_level3_pubkey[] = { - 0x15, 0xc9, 0xe5, 0x53, 0x2f, 0xd8, 0x1f, 0xb4, 0xa3, 0x9f, - 0xae, 0xad, 0xb3, 0x10, 0xd0, 0x72, 0x69, 0xd3, 0x02, 0xf3, - 0xdf, 0x67, 0x5a, 0x31, 0x52, 0x19, 0xca, 0x39, 0x27, 0x77, - 0x61, 0x6d, 0x0f, 0xc1, 0x33, 0x26, 0x09, 0xf0, 0xf9, 0x4d, - 0x12, 0x7a, 0xef, 0xf7, 0x21, 0x26, 0x2c, 0xe0, 0xe2, 0x92, - 0x1f, 0x9d, 0xd1, 0xaa, 0xaf, 0x08, 0x14, 0xf2, 0xaa, 0x24, - 0x99, 0x0f, 0x20, 0x57, 0x35, 0x04, 0x32, 0x96, 0x8e, 0x6e, - 0x10, 0x64, 0xe3, 0xe3, 0x57, 0x26, 0x33, 0x32, 0x7b, 0xe4, - 0x18, 0x41, 0x77, 0xd3, 0x24, 0x63, 0x3d, 0x11, 0xea, 0xdc, - 0xbe, 0x59, 0xff, 0x8d, 0xc2, 0xe4, 0xc7, 0x04, 0xf3, 0xd4, - 0xe0, 0x1d, 0x5e, 0x09, 0x46, 0xbf, 0x02, 0x05, 0xc7, 0xa6, - 0xb7, 0x82, 0x40, 0x1f, 0x55, 0xe9, 0x77, 0x82, 0xc0, 0xcc, - 0x86, 0x99, 0x19, 0x99, 0xa2, 0xc9, 0x1b, 0x4f, 0xdd, 0x49, - 0x4c, 0x78, 0x0a, 0x58, 0xb8, 0xf0, 0x23, 0xac, 0x1a, 0x71, - 0x57, 0x6d, 0xd6, 0x3a, 0x3a, 0x6f, 0x93, 0xb3, 0x2b, 0x09, - 0xbe, 0xec, 0x7b, 0x5b, 0xf7, 0x3a, 0xed, 0xf9, 0xd0, 0xb1, - 0xfe, 0x9f, 0x9b, 0xec, 0x11, 0xb6, 0x6b, 0xd1, 0xb6, 0x00, - 0x72, 0x7f, 0x68, 0x9a, 0x61, 0xa5, 0xf5, 0x6e, 0xe9, 0x46, - 0xa4, 0x82, 0x08, 0x9f, 0x50, 0x4c, 0x75, 0xc3, 0x48, 0x85, - 0x76, 0x39, 0xea, 0x0c, 0xf2, 0xe8, 0x7e, 0x48, 0x69, 0xd9, - 0x6f, 0x9a, 0x89, 0x7d, 0x98, 0xc1, 0x16, 0xdc, 0x2f, 0xc7, - 0x0a, 0x11, 0xa8, 0xbb, 0xe7, 0x91, 0xb1, 0x0f, 0x0e, 0xf0, - 0xb4, 0xc8, 0x41, 0x7e, 0x62, 0x9e, 0x3c, 0x30, 0x4c, 0xbc, - 0x4c, 0xeb, 0x37, 0xaf, 0x48, 0x72, 0x59, 0x64, 0x8e, 0xfb, - 0x77, 0x11, 0x28, 0xdd, 0x30, 0x52, 0x8e, 0x69, 0x8c, 0x9f, - 0x3d, 0xec, 0xdf, 0xa7, 0x5f, 0x42, 0x18, 0xda, 0xba, 0x1a, - 0x96, 0x91, 0x7d, 0x62, 0xd5, 0x52, 0xff, 0x44, 0xc9, 0x1d, - 0x29, 0xa6, 0xb9, 0x03, 0x9a, 0x26, 0x26, 0xcf, 0x57, 0x40, - 0x70, 0x7e, 0x2b, 0xbd, 0xf0, 0x81, 0x71, 0x0f, 0x0b, 0x2e, - 0x9b, 0x03, 0xba, 0x31, 0x41, 0x68, 0x37, 0xc8, 0xff, 0xea, - 0xc4, 0x73, 0xa5, 0xf9, 0xc2, 0x92, 0x78, 0x0c, 0xe7, 0xfd, - 0x5d, 0xb2, 0x01, 0xb5, 0x8d, 0xeb, 0x64, 0xd4, 0x14, 0xea, - 0x7a, 0xd1, 0x42, 0xc8, 0x99, 0xe4, 0x7d, 0x5b, 0x7e, 0x3b, - 0x8f, 0xab, 0x82, 0x12, 0xdf, 0xbb, 0xa1, 0x45, 0x30, 0xc9, - 0x0f, 0xb9, 0xe5, 0xba, 0xe6, 0x8a, 0xf3, 0x78, 0x61, 0xcc, - 0x9f, 0xe1, 0x46, 0x2a, 0x9a, 0x18, 0x0e, 0x2a, 0x57, 0xf3, - 0xe5, 0x56, 0xd1, 0x42, 0x48, 0xe1, 0x5a, 0x8e, 0x33, 0xce, - 0x19, 0xe5, 0x3e, 0x7f, 0x00, 0x70, 0x9c, 0x4c, 0xd3, 0xe1, - 0x0c, 0xa1, 0x7e, 0xd4, 0xa9, 0x9e, 0x8b, 0xe2, 0xf0, 0xac, - 0xdb, 0xa6, 0x72, 0x75, 0x67, 0xa6, 0x57, 0xed, 0x79, 0x2e, - 0xca, 0x8d, 0xeb, 0x9b, 0x9e, 0xb7, 0xbf, 0x30, 0x02, 0x2b, - 0xb3, 0x43, 0x89, 0x9b, 0xa8, 0x88, 0xa5, 0xbb, 0x33, 0xd9, - 0x99, 0x30, 0x7c, 0xc7, 0xd4, 0x28, 0x5e, 0x5e, 0x3f, 0x9d, - 0x6d, 0x35, 0x75, 0x33, 0x8e, 0xff, 0x84, 0x2e, 0x2d, 0xda, - 0xf0, 0xff, 0x70, 0xe5, 0xb5, 0x62, 0x96, 0x33, 0x3a, 0xd9, - 0xb5, 0x82, 0x25, 0x81, 0x81, 0x40, 0x5d, 0x4f, 0x11, 0x86, - 0x63, 0x1a, 0x06, 0xc1, 0x67, 0xc7, 0x49, 0x03, 0xc7, 0xe4, - 0x6f, 0xb4, 0x13, 0x3e, 0x57, 0x62, 0xfd, 0x8a, 0xc6, 0x2b, - 0x65, 0x5b, 0xa4, 0x29, 0x57, 0x8d, 0xde, 0xa5, 0xee, 0x32, - 0xc2, 0x76, 0x03, 0xca, 0xce, 0xc1, 0x48, 0xec, 0x45, 0xcf, - 0x30, 0x21, 0x28, 0x7f, 0x10, 0x47, 0xd2, 0xdb, 0xee, 0xca, - 0x5b, 0x0f, 0xd5, 0x39, 0x3a, 0xc3, 0xa6, 0x78, 0xb2, 0x15, - 0xaf, 0x82, 0x3c, 0x2f, 0xc4, 0x51, 0x5c, 0x52, 0xad, 0xf2, - 0x89, 0x92, 0x8e, 0xf3, 0x50, 0x38, 0xed, 0xf8, 0xc9, 0x14, - 0x4c, 0xe4, 0xa3, 0x9a, 0xaf, 0xc4, 0x5c, 0xf3, 0x9f, 0xc3, - 0xa3, 0xc0, 0xbe, 0x45, 0x1b, 0x21, 0x63, 0xfa, 0xe0, 0xe0, - 0x91, 0x2b, 0x42, 0xca, 0x91, 0xfb, 0x5e, 0x97, 0x9a, 0x0a, - 0xd4, 0x88, 0xba, 0xb8, 0x22, 0xc6, 0xbf, 0x56, 0x58, 0x1e, - 0x92, 0xa9, 0x9d, 0xa7, 0xed, 0xc9, 0xab, 0x54, 0x4f, 0x75, - 0x8d, 0x42, 0xc1, 0xe1, 0x61, 0xd0, 0x91, 0x9a, 0x3a, 0x40, - 0x9a, 0xa3, 0xfb, 0x7b, 0x4e, 0xf0, 0x85, 0xf0, 0xdc, 0x40, - 0x72, 0x9f, 0x05, 0xa8, 0xbe, 0x95, 0x5a, 0x7f, 0xba, 0x75, - 0x00, 0x6e, 0x95, 0x76, 0xbd, 0xb2, 0x40, 0xf5, 0xb0, 0x64, - 0x0a, 0x2f, 0x06, 0x3d, 0x9f, 0xac, 0x6a, 0xa5, 0x46, 0x5a, - 0x85, 0xa4, 0x6f, 0xee, 0x27, 0xa0, 0xeb, 0x5f, 0x1f, 0x91, - 0xbd, 0x2b, 0x02, 0x16, 0xdf, 0x74, 0x97, 0x2c, 0xd0, 0xa8, - 0x9f, 0x3a, 0x7b, 0xdf, 0x3e, 0x98, 0x4a, 0x91, 0xdc, 0x19, - 0x96, 0x88, 0x75, 0x21, 0x1a, 0x6a, 0xa8, 0x4b, 0x1f, 0x35, - 0xd1, 0x92, 0xf5, 0x76, 0xf4, 0x72, 0x55, 0x13, 0xdb, 0x5d, - 0x07, 0x8d, 0xd9, 0x72, 0xe4, 0x75, 0xde, 0x80, 0xbc, 0xe9, - 0x9c, 0xf0, 0x5c, 0x6a, 0x8a, 0x0e, 0x34, 0xf6, 0x3f, 0x5c, - 0xef, 0x0e, 0xcc, 0x52, 0x38, 0x2d, 0x7b, 0xc2, 0x1b, 0x69, - 0x9f, 0xe5, 0xed, 0x14, 0xb0, 0x91, 0x0b, 0xe9, 0x4d, 0x34, - 0xd5, 0xaa, 0xd4, 0xd2, 0x46, 0x39, 0x45, 0x7e, 0x85, 0x2f, - 0xdb, 0x89, 0xf4, 0xff, 0x05, 0x74, 0x51, 0xba, 0xdd, 0xee, - 0xf6, 0xc2, 0xc1, 0x0a, 0x8f, 0xd9, 0xeb, 0xc7, 0x61, 0x30, - 0x8f, 0x86, 0x8b, 0x1f, 0x82, 0xc1, 0x22, 0xfd, 0x83, 0xf4, - 0x5d, 0xc5, 0x94, 0xf5, 0xd7, 0x17, 0xc7, 0x7b, 0x71, 0xf5, - 0x5e, 0x15, 0x49, 0x70, 0xb2, 0x57, 0xa0, 0xc0, 0x57, 0x63, - 0x53, 0x35, 0xb6, 0x52, 0x20, 0x7b, 0x83, 0xd4, 0x57, 0x63, - 0x25, 0x8e, 0x83, 0xb3, 0x8e, 0x26, 0x1f, 0x09, 0xde, 0x14, - 0xd6, 0xa6, 0xfc, 0xe5, 0x93, 0x3c, 0x88, 0x8e, 0xf5, 0x10, - 0x57, 0xb9, 0xc9, 0x9b, 0xff, 0x72, 0x9d, 0x3d, 0x3f, 0x97, - 0xd9, 0x3c, 0x20, 0xe2, 0x57, 0xfd, 0x2a, 0x5c, 0x17, 0x12, - 0xe6, 0x08, 0xaf, 0xe4, 0x26, 0x96, 0xb9, 0x6d, 0xc3, 0xac, - 0x22, 0xf3, 0x8b, 0x89, 0xde, 0xc7, 0x8a, 0x93, 0x06, 0xf7, - 0x1d, 0x08, 0x21, 0x36, 0x16, 0x74, 0x2b, 0x97, 0x23, 0xe4, - 0x79, 0x31, 0x08, 0x23, 0x62, 0x30, 0x67, 0xe2, 0xed, 0x30, - 0x9b, 0x0c, 0xf9, 0x08, 0x7a, 0x29, 0x73, 0xc6, 0x77, 0x8a, - 0xbb, 0x2a, 0x1c, 0x66, 0xd0, 0xdd, 0x9e, 0xa3, 0xe9, 0x62, - 0xcc, 0xb7, 0x88, 0x25, 0x4a, 0x5f, 0xbc, 0xaa, 0xe3, 0xe4, - 0x4f, 0xec, 0xa6, 0x8e, 0xa6, 0xa4, 0x1b, 0x22, 0x2b, 0x2c, - 0x8f, 0x57, 0x7f, 0xb7, 0x33, 0xfe, 0x16, 0x43, 0x85, 0xc5, - 0xd2, 0x95, 0xe6, 0xb9, 0x21, 0x68, 0x88, 0x98, 0x33, 0x8c, - 0x1d, 0x15, 0x9c, 0x4d, 0x62, 0x1f, 0x6b, 0xe8, 0x7a, 0x2d, - 0x6b, 0x0e, 0xc3, 0xde, 0x1a, 0xa8, 0xed, 0x67, 0xb3, 0xb3, - 0x36, 0x5b, 0x4b, 0xcb, 0xe8, 0xa8, 0x5c, 0x0b, 0x2f, 0xca, - 0xd7, 0x71, 0xe8, 0x85, 0xe7, 0x4d, 0xe5, 0x7b, 0x45, 0xed, - 0xb2, 0x4c, 0x69, 0x04, 0x7e, 0x4f, 0xc0, 0xef, 0x1a, 0xca, - 0x0d, 0xa6, 0xc4, 0x79, 0x15, 0x78, 0x9c, 0xd2, 0x91, 0x3c, - 0x32, 0x55, 0x40, 0xe7, 0xcb, 0x7e, 0xde, 0x07, 0xa6, 0x97, - 0x00, 0x2d, 0x70, 0xf6, 0x3d, 0x15, 0xdf, 0x29, 0x8e, 0xa3, - 0x96, 0x6d, 0xf2, 0xbb, 0xa5, 0x1b, 0x7b, 0x58, 0x30, 0xf6, - 0x17, 0xbd, 0xda, 0x13, 0xf7, 0x33, 0xc2, 0x62, 0x32, 0xd4, - 0x1c, 0x2e, 0x31, 0x74, 0x92, 0xad, 0x99, 0x8c, 0x0e, 0x7c, - 0x50, 0x21, 0xcd, 0xff, 0x41, 0xeb, 0xd1, 0xca, 0x14, 0xb7, - 0xb2, 0x31, 0x2f, 0xbe, 0x16, 0xce, 0x4f, 0x26, 0x16, 0x04, - 0xc2, 0xaf, 0xbe, 0x0d, 0x24, 0xab, 0x9a, 0x21, 0x37, 0x06, - 0xac, 0x50, 0x23, 0xf1, 0xbe, 0x5c, 0xbb, 0x64, 0xf3, 0xd3, - 0x66, 0xa3, 0xb8, 0xbe, 0x8b, 0x49, 0x8d, 0xf6, 0xc7, 0xb9, - 0x8f, 0x4e, 0x31, 0x06, 0x51, 0xe5, 0xf3, 0x0e, 0x56, 0xc4, - 0x24, 0x30, 0xf5, 0xe9, 0x36, 0x71, 0xbc, 0xc9, 0x70, 0x2c, - 0x6c, 0x4c, 0x15, 0x43, 0x44, 0xa4, 0xfc, 0xf1, 0xd2, 0x71, - 0x6c, 0x4c, 0xce, 0x30, 0x6c, 0x05, 0x7d, 0x2e, 0xb7, 0xbc, - 0xe4, 0x65, 0x76, 0x24, 0x75, 0x36, 0xdf, 0x28, 0xfc, 0xcd, - 0x9a, 0xba, 0xc2, 0xcd, 0xb0, 0x30, 0xdb, 0xe7, 0x2e, 0x3c, - 0x92, 0x63, 0x1d, 0x30, 0x23, 0x74, 0xb1, 0xb8, 0xcc, 0xd7, - 0xb6, 0x90, 0x65, 0x73, 0xa2, 0x2a, 0x6e, 0x49, 0x95, 0x0d, - 0xab, 0x24, 0xdf, 0x2d, 0xbf, 0x76, 0x46, 0x01, 0x44, 0xe4, - 0x18, 0x8e, 0xd5, 0x9a, 0x76, 0xc9, 0xc6, 0xbc, 0xdb, 0x7f, - 0x80, 0x52, 0xc6, 0x40, 0x41, 0x12, 0x36, 0x7c, 0x80, 0x69, - 0xce, 0x7b, 0xe1, 0xa0, 0x53, 0xa2, 0xd6, 0x8f, 0x3f, 0xf7, - 0xd7, 0x61, 0x09, 0x70, 0xa2, 0xa0, 0xc6, 0xaf, 0xa0, 0xd0, - 0xfa, 0x13, 0xbf, 0xc0, 0x69, 0x15, 0xce, 0x15, 0xec, 0x24, - 0x4b, 0x6b, 0xdc, 0x93, 0x51, 0xc6, 0x82, 0x19, 0x92, 0x84, - 0x5d, 0x99, 0xb0, 0x90, 0x2c, 0xcc, 0x2a, 0x81, 0x6b, 0x22, - 0x64, 0x0a, 0xcb, 0x51, 0x25, 0x82, 0x50, 0x02, 0x2d, 0x3e, - 0xd4, 0x72, 0xb3, 0x0c, 0x15, 0x77, 0xd2, 0xca, 0x98, 0x2f, - 0x41, 0x93, 0x14, 0xb2, 0x7f, 0xa1, 0x97, 0xa3, 0xb8, 0x8a, - 0x56, 0x24, 0x38, 0xa7, 0x36, 0xc5, 0x01, 0xc0, 0x9f, 0x3f, - 0x3e, 0x9a, 0xf6, 0xe9, 0x16, 0x82, 0x01, 0x58, 0x70, 0x0e, - 0x0d, 0xbc, 0xfa, 0x03, 0x57, 0x65, 0xa8, 0x5a, 0x3d, 0x57, - 0x81, 0x23, 0xbe, 0x6e, 0xa9, 0xe8, 0x22, 0xdf, 0x2f, 0x70, - 0xeb, 0x0a, 0x03, 0x96, 0x6b, 0xef, 0x20, 0x9f, 0xf2, 0x62, - 0xe7, 0xb2, 0x6e, 0x3a, 0x1e, 0x40, 0x1f, 0xd2, 0x97, 0x48, - 0xd1, 0x18, 0xf0, 0xeb, 0x52, 0x58, 0x02, 0x26, 0xce, 0x75, - 0xb1, 0x3a, 0x9d, 0x5b, 0x52, 0x94, 0xb2, 0x6e, 0x0e, 0x3f, - 0x39, 0xb6, 0xd9, 0x8a, 0x9d, 0xe8, 0x7c, 0x83, 0x32, 0xcc, - 0x43, 0x35, 0x9b, 0x7a, 0xed, 0xb2, 0x1e, 0x51, 0x37, 0x6c, - 0x14, 0xd8, 0xb8, 0x55, 0xb3, 0x91, 0xef, 0x0c, 0x3a, 0xe5, - 0x77, 0xd0, 0xbd, 0xb0, 0x7d, 0x38, 0x84, 0x2a, 0x47, 0xb2, - 0xb6, 0xda, 0xd7, 0x75, 0xd6, 0x2e, 0x60, 0xc7, 0x10, 0x52, - 0xf7, 0xdd, 0x09, 0x15, 0x6f, 0x04, 0x31, 0xc3, 0x5a, 0x6b, - 0x0c, 0x60, 0x10, 0xa8, 0x6e, 0x20, 0xa9, 0xdd, 0xb7, 0x72, - 0xc3, 0x9e, 0x85, 0xd2, 0x8f, 0x16, 0x7e, 0x3d, 0xe0, 0x63, - 0x81, 0x32, 0xfd, 0xca, 0xbc, 0x0f, 0xef, 0x3e, 0x74, 0x6a, - 0xb1, 0x60, 0xc1, 0x10, 0x50, 0x7c, 0x67, 0xa4, 0x19, 0xa7, - 0xb8, 0xed, 0xe6, 0xf5, 0x4e, 0x41, 0x53, 0xa6, 0x72, 0x1b, - 0x2c, 0x33, 0x6a, 0x37, 0xf1, 0xb5, 0x1c, 0x01, 0x7d, 0xa2, - 0x1f, 0x2c, 0x4e, 0x0a, 0xbf, 0xd4, 0x2c, 0x24, 0x91, 0x58, - 0x62, 0xfb, 0xf8, 0x63, 0xd9, 0xf8, 0x78, 0xf5, 0xc7, 0x78, - 0x32, 0xda, 0x99, 0xeb, 0x58, 0x20, 0x25, 0x19, 0xb1, 0x06, - 0x7f, 0x6a, 0x29, 0x20, 0xdb, 0xc8, 0x22, 0x48, 0xa9, 0x7f, - 0x24, 0x54, 0x8d, 0x7d, 0x8d, 0xb1, 0x69, 0xb2, 0xa3, 0x98, - 0x14, 0x0f, 0xba, 0xfa, 0xb6, 0x15, 0xe8, 0x28, 0x99, 0x3f, - 0x30, 0x04, 0x50, 0xab, 0x5a, 0x3c, 0xf1, 0x97, 0xe1, 0xc8, - 0x0f, 0x0e, 0xb4, 0x11, 0x63, 0x5a, 0x79, 0x08, 0x48, 0x75, - 0xaf, 0x9b, 0xca, 0xd9, 0x13, 0x18, 0xcc, 0xb1, 0xb3, 0xee, - 0xdd, 0x63, 0xdd, 0xf4, 0x21, 0x98, 0x76, 0xe2, 0x3e, 0xd5, - 0x86, 0x23, 0x33, 0x7e, 0xc7, 0xb4, 0x35, 0x4b, 0xc2, 0x2d, - 0xe1, 0xe2, 0xb0, 0x6c, 0x8b, 0x9b, 0x20, 0x3d, 0x48, 0x24, - 0x7c, 0xea, 0xa1, 0x75, 0x27, 0xe5, 0xf4, 0x70, 0xeb, 0x3b, - 0xc7, 0x26, 0x37, 0x04, 0xff, 0x8a, 0x7a, 0xd0, 0xc2, 0xb7, - 0x84, 0xb7, 0x29, 0xfb, 0x0e, 0xa3, 0xa8, 0x71, 0xcd, 0x58, - 0x06, 0x36, 0xe2, 0xf2, 0x77, 0xcc, 0x0f, 0x78, 0x08, 0x2b, - 0xbb, 0xe3, 0x53, 0x05, 0x71, 0xdc, 0x6c, 0x37, 0x32, 0x91, - 0x46, 0x42, 0x4f, 0x21, 0xe0, 0x34, 0xad, 0x3f, 0x30, 0x5a, - 0xc7, 0x0d, 0x17, 0x19, 0x39, 0x31, 0x58, 0x69, 0x3c, 0x8c, - 0xbe, 0xe7, 0xa6, 0x3b, 0xad, 0xfb, 0x46, 0x89, 0x06, 0xc1, - 0x8c, 0x16, 0x9a, 0x06, 0x3a, 0xd0, 0x7e, 0xd6, 0xb0, 0x7b, - 0x7d, 0xf8, 0x91, 0x7c, 0xfa, 0xd9, 0x66, 0x39, 0xfa, 0xbc, - 0x57, 0xa7, 0x78, 0x8b, 0x36, 0x78, 0xc0, 0x1c, 0x0e, 0x23, - 0x05, 0x0e, 0x04, 0x61, 0x16, 0x34, 0xf9, 0xc6, 0x63, 0x58, - 0xdf, 0xf4, 0x52, 0xce, 0xd0, 0x0f, 0x0c, 0xec, 0xb1, 0x82, - 0xf4, 0x72, 0x73, 0x72, 0x3f, 0x02, 0xbe, 0xe3, 0x9c, 0x63, - 0x73, 0xc8, 0x21, 0x65, 0xba, 0x57, 0x52, 0xa9, 0x19, 0xac, - 0x68, 0x50, 0xbd, 0x2d, 0x72, 0x5b, 0x93, 0x0f, 0x1c, 0x81, - 0x77, 0xd7, 0x2e, 0xc3, 0x93, 0x52, 0x6e, 0xdc, 0x79, 0x52, - 0x9f, 0xe3, 0xde, 0xe1, 0xba, 0x58, 0x55, 0xab, 0x8a, 0xf2, - 0x35, 0x6a, 0xcf, 0x94, 0x1f, 0x17, 0xa4, 0x23, 0x2e, 0x8e, - 0x18, 0x21, 0xbe, 0x14, 0xfa, 0xe7, 0x59, 0xc5, 0x44, 0x34, - 0xce, 0x03, 0xf4, 0xb7, 0x75, 0xd3, 0x51, 0x55, 0xdf, 0xff, - 0xcf, 0x4f, 0x44, 0xee, 0x13, 0x9b, 0xcb, 0x12, 0xae, 0xe5, - 0x5b, 0x44, 0x65, 0x28, 0xcb, 0x6a, 0x9c, 0x24, 0x1d, 0xea, - 0x2d, 0x5e, 0xa5, 0xc3, 0x78, 0xad, 0xed, 0x0c, 0x05, 0xa6, - 0xaf, 0x95, 0x04, 0xd2, 0xb5, 0x91, 0x0e, 0xa0, 0x06, 0x77, - 0xc5, 0x82, 0xf6, 0xdd, 0x72, 0x83, 0x04, 0xcc, 0xb0, 0xab, - 0x7a, 0xf0, 0xb4, 0x4d, 0x36, 0x71, 0x72, 0x1a, 0x9a, 0x0d, - 0xcd, 0xa3, 0x11, 0xa8, 0x0d, 0x7d, 0x49, 0xce, 0x9c, 0x09, - 0x1d, 0x08, 0xa4, 0x39, 0x2e, 0x03, 0xdf, 0x3a, 0xc8, 0xfe, - 0x6a, 0x2b, 0x0b, 0x07, 0x80, 0x55, 0x8a, 0xa8, 0xe6, 0x0e, - 0xc9, 0x7e, 0x83, 0xce, 0x3a, 0x98, 0x98, 0x4e, 0x3e, 0x08, - 0x20, 0x8f, 0x10, 0xfc, 0xc1, 0xc4, 0xcf, 0x37, 0x8d, 0x69, - 0xd8, 0x57, 0x9d, 0x48, 0x80, 0x6a, 0xef, 0x0c, 0xdd, 0x27, - 0x99, 0xf9, 0xe7, 0xd0, 0xd2, 0x36, 0xd8, 0xed, 0x41, 0x14, - 0x1b, 0x10, -}; -static const int sizeof_bench_dilithium_level3_pubkey = - sizeof(bench_dilithium_level3_pubkey); - -#endif /* !WOLFSSL_MLDSA_NO_VERIFY */ - -#ifndef WOLFSSL_MLDSA_NO_SIGN - -/* raw private key without ASN1 syntax from - * ./certs/dilithium/bench_dilithium_level5_key.der */ -static const unsigned char bench_dilithium_level5_key[] = { - 0xef, 0x49, 0x79, 0x47, 0x15, 0xc4, 0x8a, 0xa9, 0x74, 0x2a, - 0xf0, 0x36, 0x94, 0x5c, 0x91, 0x1c, 0x5d, 0xff, 0x2c, 0x83, - 0xf2, 0x8b, 0x04, 0xfc, 0x5d, 0x64, 0xbd, 0x49, 0x73, 0xcd, - 0xcc, 0x99, 0xfd, 0x0f, 0x8f, 0x6e, 0xad, 0x75, 0x9b, 0xc9, - 0xb1, 0xb9, 0x90, 0x93, 0xbf, 0xce, 0x02, 0x2d, 0x12, 0x0c, - 0x54, 0x2e, 0xe2, 0x3e, 0x52, 0xff, 0xe0, 0x7a, 0xca, 0x2d, - 0x81, 0x84, 0xea, 0x16, 0x1f, 0x10, 0xc4, 0xc9, 0xde, 0xcd, - 0xf6, 0xbd, 0x60, 0xc9, 0xb3, 0xd0, 0x0f, 0x57, 0xeb, 0x71, - 0x78, 0x9b, 0xb5, 0x72, 0x2a, 0x65, 0x11, 0x14, 0xff, 0x63, - 0x8d, 0x38, 0xcf, 0xa4, 0xf4, 0xad, 0xd0, 0x68, 0x84, 0x97, - 0xfe, 0xd3, 0x91, 0xa0, 0xe4, 0xc3, 0x74, 0xcf, 0x20, 0x87, - 0x89, 0x84, 0x1f, 0x75, 0x91, 0xe3, 0xb3, 0x47, 0x8b, 0xfe, - 0x76, 0xb7, 0x2d, 0x30, 0x89, 0x02, 0x04, 0xc9, 0x93, 0xa8, - 0x31, 0xd3, 0x84, 0x2d, 0xe4, 0x26, 0x12, 0xdb, 0x94, 0x08, - 0x12, 0x45, 0x45, 0xca, 0x44, 0x89, 0x52, 0xc4, 0x28, 0x41, - 0x46, 0x01, 0x1c, 0x93, 0x20, 0x8b, 0x40, 0x6d, 0x09, 0x36, - 0x65, 0x4c, 0xa2, 0x40, 0x62, 0xb8, 0x2c, 0x1b, 0x00, 0x20, - 0x61, 0x42, 0x8c, 0x24, 0xa7, 0x10, 0x19, 0x27, 0x25, 0x22, - 0x14, 0x31, 0x13, 0x33, 0x46, 0x0c, 0x22, 0x22, 0x18, 0xa7, - 0x91, 0x0c, 0x24, 0x61, 0xd9, 0x32, 0x46, 0xc8, 0x96, 0x49, - 0x5c, 0x90, 0x89, 0x9b, 0x84, 0x01, 0x5c, 0x08, 0x42, 0x64, - 0x84, 0x85, 0x0c, 0x42, 0x21, 0x20, 0x48, 0x21, 0x92, 0x00, - 0x28, 0x83, 0x20, 0x4c, 0x08, 0xc7, 0x51, 0x99, 0x06, 0x66, - 0x01, 0x18, 0x51, 0x13, 0x48, 0x0a, 0x0b, 0x42, 0x90, 0x4c, - 0x14, 0x08, 0x83, 0x14, 0x6d, 0x10, 0x10, 0x91, 0xe2, 0xc4, - 0x8d, 0xe1, 0x12, 0x11, 0x10, 0x40, 0x29, 0x99, 0x92, 0x30, - 0x12, 0x39, 0x6c, 0x91, 0x86, 0x68, 0x08, 0x83, 0x0c, 0x54, - 0x80, 0x80, 0xa2, 0x08, 0x52, 0x09, 0x30, 0x71, 0x0c, 0x10, - 0x04, 0x53, 0x00, 0x65, 0x91, 0x12, 0x2d, 0x0c, 0xa2, 0x8c, - 0x18, 0x14, 0x45, 0xd8, 0x14, 0x06, 0xe4, 0x36, 0x72, 0x93, - 0x10, 0x68, 0x09, 0xc2, 0x08, 0x51, 0x14, 0x8c, 0x13, 0x39, - 0x11, 0xd8, 0x44, 0x02, 0x18, 0x39, 0x29, 0x98, 0x16, 0x71, - 0x82, 0x40, 0x70, 0x01, 0x10, 0x8c, 0x1a, 0x30, 0x08, 0x02, - 0x03, 0x41, 0x5a, 0x00, 0x40, 0xa4, 0x16, 0x90, 0x20, 0x26, - 0x32, 0x00, 0x49, 0x61, 0x20, 0x20, 0x0c, 0x1a, 0xb0, 0x10, - 0x63, 0x10, 0x11, 0x58, 0x30, 0x0d, 0x59, 0x80, 0x68, 0x90, - 0x46, 0x2a, 0x91, 0xa8, 0x71, 0x98, 0x20, 0x40, 0x21, 0x83, - 0x6c, 0xc0, 0x48, 0x0d, 0x8b, 0x90, 0x11, 0x08, 0x09, 0x31, - 0x8c, 0x00, 0x12, 0x10, 0x14, 0x6e, 0xc2, 0x06, 0x32, 0x1a, - 0x26, 0x10, 0x0a, 0x91, 0x44, 0x08, 0x99, 0x8d, 0x60, 0x86, - 0x28, 0x11, 0x20, 0x6d, 0xa3, 0x12, 0x81, 0x8b, 0xc6, 0x51, - 0xcb, 0xa0, 0x61, 0x09, 0x97, 0x61, 0x48, 0xb6, 0x0d, 0x21, - 0x49, 0x51, 0x08, 0x13, 0x0c, 0x0a, 0x34, 0x86, 0x49, 0x80, - 0x65, 0x14, 0x39, 0x04, 0x21, 0x01, 0x81, 0x9a, 0xb8, 0x4d, - 0x04, 0x41, 0x48, 0x03, 0x92, 0x81, 0x62, 0x14, 0x6c, 0x10, - 0x16, 0x11, 0xe2, 0xa2, 0x49, 0xe3, 0x30, 0x65, 0x04, 0x93, - 0x8d, 0x1c, 0x33, 0x70, 0x1b, 0x15, 0x50, 0xe4, 0x38, 0x80, - 0x21, 0x37, 0x06, 0x20, 0xc6, 0x24, 0xc8, 0x22, 0x88, 0x4a, - 0x44, 0x80, 0x14, 0x43, 0x88, 0x54, 0x44, 0x42, 0x11, 0x49, - 0x41, 0x19, 0xb9, 0x2d, 0xcc, 0x04, 0x0d, 0x19, 0xc1, 0x65, - 0x5b, 0xa0, 0x11, 0x94, 0x00, 0x84, 0xe4, 0xb6, 0x41, 0xc2, - 0x18, 0x72, 0x5c, 0x02, 0x69, 0x11, 0x85, 0x24, 0x13, 0x35, - 0x00, 0x62, 0x34, 0x04, 0x58, 0x40, 0x21, 0x00, 0xc4, 0x28, - 0x0c, 0x17, 0x30, 0x10, 0x47, 0x60, 0x4b, 0xc2, 0x61, 0x9c, - 0x80, 0x2c, 0x20, 0x94, 0x31, 0x58, 0x92, 0x09, 0xcc, 0x00, - 0x02, 0x42, 0x94, 0x69, 0x99, 0x28, 0x06, 0x98, 0x02, 0x52, - 0x90, 0x32, 0x6e, 0x8a, 0x18, 0x2e, 0x54, 0x94, 0x81, 0x03, - 0xc6, 0x89, 0x03, 0xa1, 0x84, 0x48, 0x82, 0x48, 0x52, 0xc4, - 0x00, 0x91, 0x30, 0x24, 0x20, 0x12, 0x0d, 0x83, 0x80, 0x05, - 0x92, 0x48, 0x61, 0x98, 0x46, 0x92, 0xe1, 0xa6, 0x25, 0x20, - 0x93, 0x4d, 0x1c, 0x37, 0x2c, 0x9b, 0x94, 0x8d, 0xc8, 0x88, - 0x80, 0xa2, 0x18, 0x72, 0x0c, 0x09, 0x70, 0x81, 0x36, 0x90, - 0x24, 0x45, 0x69, 0x53, 0x36, 0x6c, 0xd2, 0x20, 0x51, 0x23, - 0xc1, 0x8c, 0x62, 0xb0, 0x70, 0x11, 0xb2, 0x70, 0xcb, 0x84, - 0x69, 0x4b, 0x32, 0x89, 0x01, 0x21, 0x81, 0x02, 0x38, 0x66, - 0xa3, 0x26, 0x12, 0x24, 0xa3, 0x30, 0x22, 0x24, 0x84, 0x18, - 0xb9, 0x84, 0x40, 0x16, 0x50, 0x22, 0x44, 0x31, 0x1b, 0x13, - 0x8d, 0x53, 0x02, 0x89, 0x4a, 0x22, 0x10, 0x53, 0x18, 0x01, - 0x58, 0x30, 0x2d, 0x00, 0x05, 0x08, 0x13, 0x80, 0x84, 0xc2, - 0x22, 0x0e, 0x88, 0x26, 0x2a, 0x04, 0xc4, 0x4c, 0x19, 0x43, - 0x01, 0xc8, 0x38, 0x4c, 0xd1, 0xb2, 0x90, 0x13, 0x29, 0x10, - 0x12, 0x48, 0x22, 0x01, 0xa8, 0x51, 0xd1, 0x92, 0x40, 0x11, - 0x27, 0x62, 0x10, 0x01, 0x0c, 0x0c, 0xc6, 0x28, 0xe3, 0x46, - 0x60, 0x24, 0x01, 0x8d, 0x14, 0xb6, 0x10, 0x50, 0xb6, 0x25, - 0x44, 0x38, 0x40, 0x44, 0xc2, 0x0c, 0x19, 0xc0, 0x64, 0x9c, - 0x44, 0x02, 0x21, 0x25, 0x65, 0x02, 0x23, 0x86, 0x1a, 0x12, - 0x70, 0x51, 0x24, 0x91, 0x09, 0x08, 0x44, 0x09, 0x35, 0x66, - 0x91, 0x04, 0x12, 0x43, 0x42, 0x8d, 0x22, 0xa0, 0x70, 0x14, - 0x91, 0x25, 0xa0, 0x00, 0x80, 0xe4, 0x00, 0x90, 0x44, 0xb2, - 0x61, 0x14, 0x20, 0x6e, 0xca, 0x14, 0x0d, 0x23, 0x85, 0x68, - 0xda, 0x40, 0x92, 0x0b, 0xb1, 0x20, 0x92, 0x04, 0x46, 0xc0, - 0x08, 0x8a, 0x40, 0xc4, 0x4d, 0x0c, 0x17, 0x45, 0xd3, 0x18, - 0x52, 0x1b, 0x46, 0x24, 0xc2, 0x24, 0x71, 0x83, 0x10, 0x80, - 0xc8, 0x82, 0x68, 0xc2, 0x96, 0x81, 0x0a, 0x01, 0x92, 0x60, - 0xb4, 0x84, 0x09, 0xc6, 0x00, 0x04, 0x37, 0x90, 0x0b, 0xa0, - 0x28, 0x12, 0x27, 0x09, 0x94, 0x80, 0x50, 0xd8, 0x04, 0x86, - 0x08, 0x13, 0x8a, 0x4a, 0x06, 0x89, 0x9b, 0xc4, 0x60, 0xe3, - 0xa2, 0x20, 0xe0, 0x38, 0x21, 0x22, 0xb4, 0x68, 0x0a, 0xa1, - 0x0c, 0x01, 0x24, 0x32, 0x4c, 0x48, 0x30, 0xa2, 0x80, 0x8d, - 0x58, 0x44, 0x10, 0xc8, 0x94, 0x6d, 0x21, 0xc3, 0x61, 0xcb, - 0x98, 0x24, 0xdc, 0x38, 0x11, 0xc9, 0x18, 0x11, 0x20, 0x01, - 0x50, 0x1c, 0x34, 0x8d, 0x02, 0x03, 0x09, 0x0a, 0x40, 0x61, - 0xd4, 0xb8, 0x84, 0x9c, 0xc2, 0x09, 0x04, 0xb1, 0x89, 0x83, - 0x86, 0x84, 0x19, 0x83, 0x0c, 0x5a, 0x86, 0x89, 0x10, 0x21, - 0x0d, 0xd1, 0xc2, 0x80, 0x18, 0x29, 0x2a, 0x0c, 0x01, 0x50, - 0x89, 0x88, 0x48, 0x03, 0xa7, 0x85, 0x21, 0x92, 0x64, 0xc4, - 0x16, 0x81, 0x94, 0x06, 0x6c, 0x53, 0x26, 0x12, 0x90, 0xb6, - 0x21, 0x0b, 0xa8, 0x64, 0x43, 0x96, 0x84, 0x41, 0x88, 0x70, - 0xe3, 0xa6, 0x44, 0x12, 0xc0, 0x09, 0x01, 0xc7, 0x60, 0xc3, - 0x20, 0x42, 0xc3, 0x40, 0x68, 0x10, 0xa6, 0x51, 0xa4, 0xa0, - 0x71, 0x54, 0x98, 0x04, 0x88, 0xb2, 0x00, 0x54, 0x18, 0x6a, - 0x48, 0x98, 0x20, 0x21, 0xb2, 0x8d, 0x82, 0x20, 0x81, 0x99, - 0x16, 0x81, 0x0a, 0xc5, 0x88, 0x0a, 0x23, 0x11, 0x8a, 0x16, - 0x44, 0x24, 0xc9, 0x29, 0x59, 0x08, 0x91, 0x1c, 0x29, 0x05, - 0x14, 0xc9, 0x44, 0xe3, 0x20, 0x10, 0x1b, 0xa1, 0x64, 0x82, - 0xa2, 0x90, 0x00, 0x00, 0x82, 0x98, 0xb2, 0x85, 0xc8, 0x04, - 0x28, 0xc8, 0xb2, 0x65, 0xc9, 0xc6, 0x88, 0xcc, 0x08, 0x91, - 0x84, 0x08, 0x30, 0x94, 0x94, 0x8d, 0xc0, 0x18, 0x46, 0x82, - 0x36, 0x4c, 0x83, 0x10, 0x72, 0x23, 0xb1, 0x88, 0x81, 0x20, - 0x8e, 0x19, 0x03, 0x8a, 0x94, 0x46, 0x22, 0x21, 0x35, 0x8e, - 0x04, 0xc0, 0x88, 0x5b, 0xb6, 0x09, 0x0a, 0x18, 0x44, 0x21, - 0x90, 0x65, 0x03, 0xb2, 0x21, 0xc4, 0x10, 0x50, 0xc1, 0x80, - 0x0c, 0x09, 0x40, 0x49, 0xe4, 0xa8, 0x8c, 0xa4, 0x36, 0x61, - 0x59, 0x12, 0x86, 0x20, 0x08, 0x2d, 0x10, 0x19, 0x85, 0xe4, - 0x34, 0x60, 0xc4, 0xb6, 0x60, 0x00, 0x18, 0x06, 0x8c, 0xb8, - 0x45, 0x19, 0x13, 0x4a, 0x53, 0xc4, 0x40, 0xc9, 0x38, 0x71, - 0xd9, 0x48, 0x10, 0x59, 0x08, 0x02, 0x02, 0x10, 0x69, 0x53, - 0x28, 0x80, 0x22, 0x81, 0x4c, 0xc9, 0x16, 0x26, 0xa1, 0x48, - 0x64, 0x19, 0x21, 0x11, 0x1c, 0x37, 0x88, 0x4b, 0x94, 0x2c, - 0x48, 0xc8, 0x6c, 0x63, 0x88, 0x65, 0x81, 0x40, 0x61, 0xa1, - 0x44, 0x31, 0x82, 0x18, 0x08, 0x80, 0x00, 0x26, 0x50, 0x14, - 0x49, 0xa1, 0x32, 0x50, 0x02, 0xc8, 0x45, 0x0c, 0x07, 0x24, - 0x13, 0x01, 0x6d, 0x0a, 0xb3, 0x90, 0x64, 0x30, 0x85, 0x21, - 0x09, 0x61, 0x44, 0x44, 0x72, 0x08, 0x32, 0x06, 0xe1, 0xa2, - 0x21, 0xdb, 0xa4, 0x09, 0x5a, 0xb4, 0x71, 0x43, 0xb2, 0x09, - 0x82, 0xc4, 0x64, 0x88, 0xa0, 0x91, 0xca, 0x14, 0x90, 0xa4, - 0xa8, 0x41, 0xc1, 0x38, 0x85, 0x12, 0x32, 0x60, 0x1a, 0x11, - 0x72, 0x53, 0x32, 0x2c, 0xe3, 0x08, 0x4d, 0x24, 0xc6, 0x28, - 0x0a, 0x03, 0x8c, 0x88, 0x06, 0x05, 0xa0, 0xa8, 0x05, 0x84, - 0xa2, 0x4c, 0x80, 0x40, 0x62, 0xda, 0x24, 0x81, 0x9a, 0x16, - 0x91, 0x24, 0x81, 0x04, 0xa4, 0x46, 0x51, 0xc2, 0xa8, 0x25, - 0x20, 0x28, 0x42, 0x13, 0x46, 0x2c, 0x63, 0x42, 0x72, 0x03, - 0x88, 0x28, 0xa3, 0x22, 0x24, 0x1a, 0x02, 0x26, 0x42, 0xa2, - 0x11, 0x11, 0xb0, 0x51, 0x92, 0xb4, 0x6c, 0xe2, 0x32, 0x85, - 0x10, 0xc2, 0x41, 0xc1, 0x40, 0x46, 0x4c, 0x26, 0x01, 0x1c, - 0x35, 0x02, 0x0c, 0x14, 0x0c, 0x18, 0x81, 0x00, 0x10, 0x26, - 0x02, 0xc8, 0x32, 0x8c, 0xe4, 0x02, 0x68, 0xcc, 0x14, 0x2e, - 0x89, 0x38, 0x60, 0x10, 0x12, 0x24, 0x93, 0x42, 0x65, 0xe3, - 0x24, 0x29, 0x08, 0x80, 0x41, 0x09, 0x29, 0x46, 0x5b, 0x26, - 0x49, 0x5b, 0x30, 0x80, 0x03, 0xc1, 0x2c, 0x04, 0x09, 0x82, - 0x4c, 0x48, 0x2d, 0x1c, 0x36, 0x4d, 0xdb, 0x02, 0x86, 0x21, - 0xb5, 0x51, 0x81, 0x80, 0x2d, 0xcb, 0x20, 0x81, 0x5b, 0x34, - 0x41, 0x89, 0x36, 0x48, 0x44, 0xa0, 0x05, 0x59, 0xb6, 0x64, - 0x12, 0x45, 0x21, 0x20, 0x31, 0x51, 0x0a, 0xc3, 0x8c, 0x14, - 0x48, 0x71, 0x18, 0x35, 0x24, 0x20, 0x45, 0x05, 0x88, 0x20, - 0x09, 0x08, 0xb1, 0x29, 0x18, 0xa0, 0x09, 0x4a, 0x00, 0x8a, - 0xe2, 0xb8, 0x45, 0x02, 0x27, 0x89, 0xd8, 0x10, 0x25, 0x51, - 0x82, 0x8c, 0x13, 0x92, 0x30, 0x1c, 0x24, 0x8e, 0x1c, 0x93, - 0x4d, 0xa3, 0x48, 0x51, 0x93, 0xa8, 0x69, 0xe2, 0x04, 0x89, - 0x13, 0x13, 0x61, 0xcb, 0x98, 0x8c, 0x09, 0x21, 0x62, 0x4b, - 0x14, 0x4e, 0x11, 0xa3, 0x09, 0x98, 0x40, 0x42, 0x91, 0x12, - 0x08, 0x80, 0x84, 0x2d, 0xc0, 0x12, 0x60, 0x03, 0xa4, 0x29, - 0x18, 0x80, 0x01, 0x94, 0x44, 0x8a, 0x12, 0x11, 0x72, 0xc4, - 0x22, 0x32, 0x9a, 0x46, 0x88, 0x1b, 0x16, 0x4d, 0x4b, 0x08, - 0x11, 0x02, 0x48, 0x45, 0x81, 0xa4, 0x64, 0xe1, 0x88, 0x0c, - 0x63, 0x10, 0x70, 0x48, 0x98, 0x05, 0x9b, 0xb8, 0x84, 0x03, - 0x14, 0x05, 0x44, 0x86, 0x0c, 0x20, 0x11, 0x68, 0xbe, 0x71, - 0x83, 0xc2, 0x69, 0xde, 0x49, 0xad, 0xb4, 0xdb, 0x93, 0xcb, - 0x20, 0x2b, 0xbd, 0x95, 0x97, 0x57, 0x7e, 0xcb, 0xbc, 0x73, - 0xb6, 0x3d, 0x16, 0x4a, 0x0e, 0xe4, 0x9c, 0x81, 0xb1, 0x5d, - 0x27, 0x64, 0xa2, 0x14, 0x12, 0x1b, 0x8e, 0xd0, 0xd8, 0x38, - 0xf6, 0xc7, 0xbb, 0x9f, 0x77, 0x3c, 0x62, 0x04, 0x92, 0xe1, - 0x97, 0xaf, 0x24, 0xa7, 0xf9, 0xf0, 0x8d, 0x3a, 0xbf, 0x5d, - 0xab, 0x5c, 0x97, 0x0f, 0xfc, 0x35, 0xbc, 0x62, 0xd8, 0x42, - 0xfd, 0xc7, 0x8b, 0xf7, 0x80, 0xd1, 0x38, 0x68, 0x14, 0x5e, - 0x4f, 0x99, 0x31, 0xc7, 0xaf, 0xbd, 0x27, 0xce, 0x1c, 0x5b, - 0x09, 0x1b, 0xcf, 0xbb, 0xfb, 0xf9, 0xf4, 0x90, 0x4c, 0xc1, - 0xa2, 0x12, 0xf9, 0xd0, 0xa5, 0x2c, 0xfd, 0x7b, 0x55, 0xb0, - 0xb1, 0xc6, 0x42, 0xe6, 0xeb, 0x10, 0x5e, 0xe9, 0x00, 0xe8, - 0x46, 0xe4, 0xe0, 0x8b, 0x21, 0xbc, 0xb1, 0xa9, 0x9e, 0x75, - 0x66, 0xf0, 0xb8, 0x87, 0xb9, 0x11, 0x7e, 0x28, 0x6c, 0x4d, - 0x58, 0xcd, 0x54, 0x71, 0x0c, 0x6a, 0xcc, 0xfb, 0x52, 0xc2, - 0x5b, 0xcc, 0x19, 0x67, 0x4f, 0xc2, 0x2f, 0x09, 0x62, 0x51, - 0x82, 0xeb, 0x9b, 0x94, 0x11, 0xb4, 0x5a, 0x67, 0x7f, 0x58, - 0x18, 0xb2, 0x3f, 0x37, 0x1f, 0x94, 0x44, 0x73, 0x6a, 0x02, - 0xf5, 0xfb, 0x5b, 0x03, 0xac, 0x5d, 0xc6, 0xa9, 0x79, 0x8f, - 0x0f, 0x50, 0xa0, 0x57, 0x46, 0x05, 0x6d, 0x58, 0xde, 0x6e, - 0x8d, 0x9c, 0x0e, 0x6a, 0xb5, 0x9b, 0x1b, 0x22, 0x74, 0xad, - 0x00, 0x55, 0x27, 0x46, 0xce, 0xbb, 0x82, 0x77, 0x4e, 0x6e, - 0x59, 0x38, 0x26, 0xb3, 0xc7, 0xbc, 0x97, 0x54, 0x83, 0x69, - 0x1f, 0x3e, 0xbd, 0x0f, 0xff, 0x2f, 0xca, 0xb9, 0xea, 0x91, - 0x26, 0x8e, 0x0a, 0x78, 0x25, 0xf6, 0x6b, 0x11, 0x30, 0xd7, - 0xe2, 0xf4, 0x2b, 0xda, 0xcf, 0xe1, 0x4a, 0x47, 0xab, 0x5f, - 0x54, 0x34, 0x38, 0xac, 0xd1, 0xbf, 0x45, 0xad, 0x4b, 0x52, - 0x0f, 0x4c, 0xa2, 0xac, 0x22, 0x7c, 0xb6, 0xed, 0x7f, 0xd5, - 0x63, 0x3b, 0x1a, 0x3b, 0xf2, 0x3d, 0x9b, 0x96, 0x92, 0x08, - 0xb9, 0x95, 0x13, 0xaf, 0x20, 0x26, 0x8b, 0x15, 0x97, 0x89, - 0xa5, 0x88, 0x8f, 0x78, 0xb4, 0x57, 0x9d, 0x51, 0x96, 0x9c, - 0x98, 0x93, 0xd5, 0x83, 0xf9, 0xff, 0x94, 0x29, 0x1e, 0xa5, - 0x28, 0xa4, 0x0c, 0x22, 0xab, 0xbc, 0x70, 0x48, 0xa2, 0x16, - 0x1c, 0xa4, 0xba, 0x8b, 0xfe, 0xb2, 0xa9, 0x03, 0x96, 0x5f, - 0xb4, 0x84, 0x8e, 0xb4, 0xbb, 0x7b, 0x11, 0xc5, 0xc2, 0xdb, - 0xe3, 0x88, 0xb5, 0xd3, 0xac, 0x07, 0x33, 0x53, 0xe8, 0x10, - 0x9e, 0xc5, 0x81, 0xb0, 0x77, 0x2f, 0x4f, 0x6d, 0x0d, 0x89, - 0xb4, 0x04, 0x98, 0x05, 0xe6, 0xd3, 0x36, 0x97, 0xcd, 0x3e, - 0x4d, 0xc6, 0x21, 0xe4, 0x0b, 0xcf, 0xed, 0xa7, 0x4d, 0xd9, - 0xd3, 0x25, 0xec, 0xec, 0x47, 0xfd, 0x06, 0x92, 0x77, 0x25, - 0x3c, 0x44, 0xe6, 0x5d, 0xb4, 0x35, 0x2b, 0x5d, 0x05, 0x65, - 0x63, 0x0b, 0xd9, 0xb8, 0x28, 0xdf, 0xdd, 0xfd, 0x64, 0x18, - 0x42, 0x19, 0x7f, 0x12, 0x78, 0xdd, 0xf0, 0x64, 0xd6, 0x99, - 0xb8, 0x74, 0x81, 0xe2, 0xb9, 0xc8, 0x67, 0x6d, 0x31, 0x22, - 0xa5, 0x68, 0xa1, 0x8d, 0x3e, 0x49, 0xbe, 0x10, 0x68, 0xa8, - 0x74, 0x1d, 0x18, 0xcf, 0x00, 0xe1, 0x4f, 0x77, 0xd8, 0xc6, - 0xe3, 0x08, 0xbb, 0x4c, 0xed, 0xff, 0xd9, 0x9b, 0xb0, 0xd1, - 0x50, 0xbb, 0x8b, 0x91, 0xcd, 0x5f, 0x2a, 0xfb, 0x8f, 0x4d, - 0x3c, 0x98, 0xba, 0xd7, 0x98, 0x99, 0xa7, 0x22, 0x14, 0xd7, - 0x94, 0xb5, 0xb8, 0xa4, 0x52, 0x31, 0xa7, 0xa1, 0xa4, 0x28, - 0xee, 0x31, 0xb5, 0xd0, 0xc1, 0x07, 0x05, 0x16, 0x1d, 0x53, - 0x45, 0x62, 0x23, 0x05, 0x44, 0xb6, 0x4f, 0x92, 0x03, 0x53, - 0x9a, 0x71, 0x56, 0xae, 0x16, 0x81, 0xb4, 0xc9, 0x98, 0xf4, - 0x7f, 0x11, 0x37, 0xc2, 0xc8, 0xf2, 0xe4, 0x48, 0xe3, 0xcc, - 0xf1, 0xe3, 0x3d, 0x8e, 0x13, 0x5b, 0x25, 0xad, 0xce, 0x6f, - 0xed, 0x60, 0x4f, 0x7d, 0x51, 0xe1, 0xd0, 0x74, 0xf4, 0xed, - 0xf3, 0x84, 0xa6, 0x0e, 0xba, 0xb4, 0x8e, 0x5a, 0xb9, 0x12, - 0x70, 0x43, 0x4c, 0xb5, 0xa5, 0x1e, 0x86, 0xa5, 0xe3, 0x4d, - 0x76, 0x95, 0xce, 0x2c, 0x53, 0x3a, 0x4e, 0x3f, 0x47, 0x73, - 0x85, 0x88, 0xd9, 0x39, 0x21, 0x83, 0x24, 0x68, 0x6a, 0x1e, - 0x77, 0xdf, 0x59, 0xc5, 0x1b, 0xe2, 0xb1, 0x47, 0x9d, 0xee, - 0x45, 0x1e, 0xc6, 0xd4, 0x43, 0xe2, 0xc7, 0x1c, 0x98, 0x84, - 0xe0, 0x39, 0xe9, 0x9f, 0xa0, 0xa2, 0x24, 0x4a, 0x88, 0x46, - 0xf3, 0x50, 0x52, 0xb5, 0xae, 0x37, 0x5c, 0xa1, 0x7d, 0xad, - 0x7c, 0x30, 0x3e, 0xcd, 0x80, 0x1c, 0xac, 0xf4, 0xe6, 0xb5, - 0x9f, 0x22, 0xb6, 0xfb, 0x0e, 0x6d, 0x80, 0x10, 0xf7, 0x3f, - 0xdd, 0x5b, 0xd9, 0xd4, 0x03, 0x14, 0x41, 0x90, 0x88, 0xa8, - 0xcf, 0x50, 0xa2, 0xf2, 0x7e, 0xf0, 0x0a, 0x7f, 0xed, 0x77, - 0x09, 0x48, 0x32, 0x55, 0xe9, 0x93, 0xe7, 0x27, 0x18, 0x46, - 0x17, 0x03, 0x25, 0x8e, 0x17, 0x5d, 0xe8, 0x9e, 0xb1, 0xb4, - 0x9d, 0x1a, 0x5e, 0xbe, 0xa8, 0xb8, 0x45, 0x30, 0xc6, 0xa5, - 0xb4, 0xaf, 0xf3, 0x0d, 0x91, 0x9c, 0xa9, 0x5b, 0x4c, 0xbb, - 0x19, 0x19, 0x39, 0x51, 0x36, 0x80, 0xf7, 0x10, 0xf7, 0x73, - 0x49, 0x17, 0xec, 0xbc, 0x92, 0x08, 0x21, 0xb1, 0x0c, 0x23, - 0xc4, 0xd6, 0xd2, 0xb3, 0xfd, 0xae, 0xe7, 0x71, 0xf3, 0x50, - 0x11, 0x27, 0x1a, 0x85, 0xf0, 0xab, 0xd8, 0x16, 0x64, 0xcb, - 0xad, 0xbb, 0xae, 0x54, 0x37, 0xa3, 0xa8, 0xf4, 0x09, 0x67, - 0x54, 0x61, 0x86, 0x0f, 0x0e, 0x25, 0x0d, 0xda, 0x4a, 0xc7, - 0xe7, 0x02, 0x80, 0x6b, 0x59, 0xd2, 0xc8, 0x88, 0x4d, 0x7d, - 0xfd, 0x3d, 0x48, 0x04, 0x6d, 0x95, 0xdf, 0xc2, 0x8b, 0x23, - 0x70, 0x4a, 0xf5, 0xdc, 0xc9, 0x24, 0x8d, 0x7e, 0x52, 0x22, - 0x7e, 0x9c, 0x5c, 0x32, 0xa5, 0xd5, 0xf2, 0x11, 0x08, 0xa0, - 0xd4, 0xa2, 0xd8, 0xdb, 0x1d, 0x9f, 0x1b, 0x54, 0x8f, 0xb5, - 0xf6, 0x71, 0x71, 0x49, 0xbc, 0x38, 0x09, 0xb6, 0x24, 0x94, - 0x80, 0x1f, 0x2d, 0x0c, 0xc7, 0xe4, 0xd6, 0xcd, 0xab, 0x53, - 0x79, 0x28, 0xed, 0x48, 0x23, 0x14, 0x2f, 0x0b, 0x3a, 0xd0, - 0xa7, 0x08, 0xe1, 0xfd, 0x1e, 0xb6, 0xdd, 0x12, 0x93, 0x2d, - 0x95, 0x06, 0xba, 0x95, 0xcb, 0x1a, 0xed, 0xfb, 0x60, 0xe7, - 0xf1, 0x1c, 0xad, 0xc3, 0xea, 0x8d, 0x3c, 0x53, 0x32, 0xb5, - 0x38, 0x26, 0xdd, 0x39, 0xf0, 0x39, 0x4e, 0x6f, 0x3e, 0xa9, - 0xea, 0x25, 0x29, 0xb8, 0x6c, 0x7d, 0x0a, 0x91, 0xd4, 0xb9, - 0x7b, 0x67, 0xe4, 0xe5, 0x63, 0xd7, 0x6b, 0x03, 0xa5, 0xd7, - 0xe8, 0xd2, 0xc0, 0x34, 0x53, 0xa6, 0x16, 0x21, 0x2a, 0x2a, - 0x09, 0xd3, 0xad, 0xa1, 0x2c, 0x6a, 0x88, 0x2d, 0x90, 0x06, - 0xba, 0x0b, 0xaa, 0xd1, 0xdb, 0xa4, 0xd0, 0x49, 0x0f, 0x42, - 0xe1, 0xca, 0xf0, 0x69, 0x15, 0x63, 0xcb, 0x0b, 0x4c, 0x2e, - 0x99, 0x20, 0x44, 0xe3, 0x6e, 0x32, 0x8a, 0xa1, 0x5c, 0x5b, - 0x03, 0xeb, 0xb5, 0x05, 0xff, 0x1a, 0x76, 0x38, 0x1c, 0xb0, - 0x74, 0xf1, 0x5a, 0x0d, 0x8a, 0xd2, 0x4e, 0x38, 0x11, 0x86, - 0xb0, 0x2d, 0xd3, 0x88, 0xe2, 0x0f, 0x51, 0x68, 0xb9, 0x79, - 0x96, 0x50, 0x95, 0xdc, 0x69, 0xcb, 0xa6, 0x25, 0x4a, 0xdf, - 0xa1, 0x39, 0x13, 0x47, 0x0a, 0xf0, 0xeb, 0xcb, 0x14, 0x01, - 0x28, 0x9c, 0x0f, 0xe2, 0x62, 0xca, 0xb5, 0x40, 0x51, 0x45, - 0x8e, 0x18, 0x88, 0xc9, 0x58, 0xaf, 0xb3, 0x48, 0xd5, 0x20, - 0xe8, 0xd8, 0x5b, 0xa2, 0x98, 0x74, 0x25, 0xfa, 0x25, 0x19, - 0x82, 0x22, 0xfa, 0x82, 0x7c, 0x38, 0x8d, 0x62, 0x86, 0x01, - 0x63, 0x20, 0x36, 0x8e, 0xaf, 0x15, 0x8a, 0x74, 0x1e, 0xfd, - 0x7f, 0xbe, 0x60, 0xc3, 0x65, 0x31, 0xce, 0xdb, 0x92, 0xb9, - 0x13, 0x2a, 0x78, 0xa9, 0xfc, 0x6a, 0x7b, 0x18, 0xec, 0x0c, - 0x7b, 0x4c, 0x86, 0xaf, 0xea, 0x6d, 0x52, 0x09, 0x76, 0x52, - 0x87, 0x8a, 0x0b, 0x2a, 0xf3, 0x93, 0x35, 0x92, 0x8b, 0x60, - 0x42, 0x2e, 0x12, 0xa9, 0xf7, 0x7c, 0x61, 0x5c, 0x8f, 0xc0, - 0xaa, 0x6e, 0x6a, 0xf6, 0x48, 0x48, 0xc6, 0x3e, 0xe0, 0x1d, - 0xb4, 0xfb, 0xc4, 0xd8, 0x01, 0xb8, 0xf2, 0xf4, 0xdf, 0xc1, - 0xba, 0xb5, 0xf2, 0x27, 0x3f, 0xdb, 0x78, 0x62, 0x1c, 0x0a, - 0xbe, 0xdb, 0xdd, 0x3c, 0x0c, 0x29, 0x85, 0xf1, 0x44, 0x5f, - 0x2b, 0x43, 0x80, 0x57, 0xa7, 0x5a, 0x4d, 0x1b, 0xbe, 0x03, - 0xe7, 0x55, 0x7b, 0x91, 0x9d, 0x4c, 0x8b, 0xd7, 0xfd, 0xde, - 0x65, 0x7e, 0xa8, 0x48, 0xbb, 0xa9, 0x96, 0x06, 0x7f, 0xc0, - 0x6c, 0xed, 0x87, 0x53, 0x77, 0xb4, 0x5a, 0x7c, 0xbb, 0xce, - 0xcf, 0x01, 0x08, 0x45, 0x61, 0xc1, 0x28, 0xb6, 0xf2, 0xb4, - 0x5b, 0x6b, 0x84, 0xfe, 0x18, 0x09, 0x39, 0xc1, 0xc8, 0x96, - 0x36, 0x6e, 0xba, 0x7e, 0x48, 0x12, 0xe6, 0xdc, 0x22, 0x48, - 0x17, 0x0b, 0xbd, 0x92, 0x64, 0xfa, 0xc9, 0x9b, 0x07, 0xda, - 0xed, 0x04, 0x68, 0x42, 0x15, 0x8c, 0xf9, 0xd8, 0xc3, 0x0d, - 0x21, 0x9d, 0x96, 0xbc, 0xc3, 0x07, 0x1a, 0x2c, 0x59, 0x3f, - 0x1a, 0x83, 0x43, 0xf0, 0xe0, 0xde, 0xe3, 0x40, 0x8e, 0x04, - 0x66, 0x3c, 0x87, 0x1e, 0xfa, 0x7b, 0x8a, 0x7b, 0xd2, 0x9e, - 0x15, 0xf5, 0xec, 0x3c, 0x72, 0x7e, 0x2d, 0x19, 0xf8, 0xfd, - 0xf0, 0x28, 0x71, 0x8a, 0xf5, 0xcb, 0x4c, 0x61, 0x5f, 0x85, - 0xe0, 0x6f, 0xb8, 0xf3, 0x17, 0x10, 0xcb, 0x44, 0x45, 0x8c, - 0x96, 0x08, 0xa1, 0xf1, 0x48, 0xa4, 0x1d, 0xea, 0x35, 0x2f, - 0x82, 0x2b, 0xc2, 0x0b, 0xef, 0x73, 0xe1, 0xc2, 0x35, 0xdb, - 0xe7, 0x68, 0xfd, 0xb0, 0xe8, 0x7b, 0x2d, 0x0f, 0xfd, 0x53, - 0x1b, 0xb8, 0x36, 0x54, 0xd6, 0x43, 0x30, 0xcf, 0x83, 0xb0, - 0x18, 0xda, 0x9b, 0x86, 0x82, 0xfa, 0xe6, 0x37, 0x5b, 0x9e, - 0xa4, 0xdb, 0x7c, 0x59, 0x25, 0x59, 0xc6, 0x46, 0x36, 0x72, - 0xc5, 0x72, 0xd8, 0x2f, 0x26, 0xe2, 0xee, 0xe3, 0xcb, 0xe5, - 0x33, 0x1f, 0x18, 0x2e, 0x16, 0xce, 0xd2, 0x9c, 0x89, 0x6e, - 0xd5, 0x21, 0xfa, 0x58, 0x83, 0xa9, 0x4c, 0x69, 0x97, 0x7d, - 0xae, 0x1f, 0x65, 0xd5, 0xdb, 0xf0, 0xfe, 0xd5, 0x32, 0xb1, - 0x50, 0x72, 0xdf, 0x2b, 0xe2, 0xc1, 0xe6, 0x2e, 0x8b, 0x87, - 0xa8, 0x4e, 0x84, 0xbe, 0xc9, 0x27, 0xb5, 0x74, 0x7e, 0x13, - 0x17, 0x57, 0x9c, 0xc6, 0xd3, 0x9f, 0xcd, 0x86, 0x50, 0x4b, - 0x6c, 0x50, 0xa2, 0xba, 0xfe, 0xf6, 0xd5, 0x85, 0x68, 0x31, - 0x89, 0xfb, 0xeb, 0xfe, 0x92, 0xb0, 0xd0, 0x4c, 0xbc, 0x65, - 0x4b, 0x62, 0xe2, 0xdf, 0x88, 0x7e, 0x90, 0xe0, 0xb3, 0xec, - 0x13, 0x69, 0x33, 0xea, 0x53, 0x69, 0x9a, 0x0b, 0x27, 0xfb, - 0xca, 0x9f, 0x9e, 0x1f, 0xcf, 0xb1, 0xeb, 0xf4, 0x8f, 0xe2, - 0x53, 0xc8, 0xe6, 0x51, 0x75, 0xee, 0xb1, 0x34, 0x3e, 0x37, - 0xdd, 0x2d, 0x3a, 0x72, 0x76, 0x33, 0xc1, 0x27, 0xe7, 0xbd, - 0xc1, 0x7f, 0xcb, 0x53, 0x5d, 0xdf, 0xc4, 0x1f, 0x36, 0xdb, - 0x6a, 0x91, 0x1f, 0x6a, 0xa5, 0xc6, 0xe2, 0x37, 0x68, 0x1a, - 0x7d, 0xf7, 0xed, 0x2a, 0xc7, 0x99, 0x5e, 0xbd, 0x59, 0x57, - 0x09, 0x22, 0x7e, 0x9c, 0xbd, 0x8e, 0xad, 0xbe, 0xee, 0xa5, - 0x2a, 0xe3, 0x9f, 0xff, 0x14, 0xda, 0xba, 0x90, 0x37, 0xba, - 0x3a, 0x42, 0xcd, 0x4a, 0x28, 0x47, 0x27, 0x58, 0x7a, 0x33, - 0x93, 0x77, 0x83, 0x29, 0xab, 0x47, 0x19, 0x43, 0x00, 0x6f, - 0xe7, 0x77, 0xc1, 0xaa, 0xd6, 0xbc, 0xc0, 0x1b, 0xd0, 0xdf, - 0xf9, 0x40, 0x4d, 0xb2, 0x60, 0xce, 0x59, 0x17, 0x0a, 0xa9, - 0x14, 0x4e, 0x6a, 0x30, 0x1b, 0x26, 0x68, 0x55, 0x12, 0x19, - 0x62, 0x85, 0x5d, 0xa6, 0xb4, 0x48, 0x4a, 0xe9, 0xe1, 0x57, - 0xb1, 0x48, 0xf3, 0x86, 0xd1, 0x50, 0x2e, 0x1d, 0x57, 0xbe, - 0x09, 0xf8, 0x53, 0x40, 0xd9, 0x55, 0xd9, 0x71, 0x4c, 0xa7, - 0xdb, 0x61, 0x82, 0x4e, 0x00, 0x58, 0xe4, 0x89, 0xae, 0xa6, - 0x1a, 0x4b, 0xe3, 0x9d, 0xec, 0x65, 0xee, 0xe1, 0x7b, 0xdb, - 0x4f, 0x8d, 0xf3, 0xd9, 0x89, 0xaa, 0xd1, 0x31, 0x30, 0xde, - 0xc3, 0x5c, 0xbc, 0xb9, 0x60, 0x0a, 0xe0, 0x13, 0x14, 0x85, - 0x08, 0x60, 0xc5, 0x1c, 0xc2, 0x9d, 0x8b, 0x6e, 0xb8, 0x94, - 0x11, 0x6f, 0xd3, 0xee, 0xfb, 0xf8, 0x15, 0xd8, 0xa4, 0x0b, - 0x92, 0xdf, 0x7c, 0x9a, 0xa2, 0xec, 0xa3, 0x3d, 0xbc, 0xcd, - 0xe8, 0xb5, 0xb3, 0xf5, 0xe8, 0xee, 0x2a, 0x57, 0xf7, 0x58, - 0xc4, 0xaa, 0xeb, 0x33, 0x44, 0x5f, 0x62, 0xbe, 0x90, 0x48, - 0xe5, 0xcb, 0x6a, 0xcb, 0x55, 0x94, 0x6d, 0xe6, 0x22, 0x03, - 0xeb, 0xcb, 0x05, 0xb8, 0xb4, 0xa5, 0xbe, 0xec, 0x79, 0x21, - 0x0d, 0xb3, 0x5c, 0x74, 0x11, 0xcb, 0xb3, 0xa6, 0x06, 0x2f, - 0x73, 0xd1, 0x14, 0xd9, 0x70, 0x4e, 0xc5, 0xf5, 0xff, 0xfd, - 0x49, 0x3b, 0xa9, 0x22, 0x80, 0x2a, 0x5e, 0xf9, 0xae, 0xa5, - 0xd4, 0x3c, 0x74, 0xd7, 0x5a, 0x5d, 0x88, 0x6f, 0x99, 0xe2, - 0x4c, 0xa3, 0x9b, 0x15, 0xb8, 0xfd, 0x0b, 0x0d, 0x57, 0x03, - 0xe8, 0xda, 0x78, 0xc4, 0x63, 0x49, 0x48, 0x7a, 0x39, 0xcd, - 0xfa, 0xad, 0x92, 0x55, 0x4a, 0x0e, 0x68, 0x08, 0xb9, 0x34, - 0xe0, 0x14, 0x6e, 0x19, 0xed, 0x69, 0x14, 0x7f, 0xc1, 0x7d, - 0x12, 0xac, 0x5d, 0xf7, 0x62, 0x6f, 0x77, 0x65, 0xa3, 0xc2, - 0xf9, 0xda, 0x43, 0x9e, 0x6b, 0x82, 0xd9, 0x14, 0x57, 0x02, - 0x09, 0x9f, 0xa7, 0x15, 0x27, 0xe8, 0xad, 0xa1, 0x73, 0xc7, - 0xb6, 0x11, 0x4c, 0x5e, 0xf4, 0x1a, 0x0a, 0x97, 0x98, 0x5e, - 0x29, 0x8a, 0x8b, 0xa5, 0xbd, 0x86, 0x7f, 0x6d, 0x31, 0x72, - 0x6d, 0xe5, 0xcf, 0x13, 0xff, 0xb9, 0x4e, 0x69, 0x66, 0x37, - 0x1b, 0xfb, 0xe8, 0xb7, 0x60, 0xfe, 0xbf, 0xaa, 0x06, 0x88, - 0xa4, 0xa2, 0x0b, 0x33, 0x55, 0xac, 0x61, 0x77, 0x0a, 0x6f, - 0x1f, 0xaf, 0xd8, 0x9b, 0xc7, 0x26, 0x13, 0xf6, 0xc4, 0xef, - 0xce, 0x0f, 0x16, 0x86, 0x64, 0x1b, 0xc0, 0x71, 0x35, 0xf9, - 0x1f, 0xaf, 0xc4, 0x7a, 0xa3, 0x3b, 0x89, 0x40, 0xcb, 0x09, - 0x11, 0x7b, 0x01, 0x54, 0xd5, 0xd2, 0x2a, 0xc8, 0xfe, 0x0e, - 0xef, 0x8c, 0xfb, 0x2b, 0x08, 0x12, 0x6d, 0xbb, 0xa8, 0x2e, - 0x7a, 0x2b, 0xc2, 0x91, 0x2a, 0x76, 0x0b, 0x31, 0x30, 0x4a, - 0x5b, 0xca, 0x96, 0xc9, 0x89, 0xa0, 0x12, 0x40, 0x76, 0xbe, - 0xcd, 0x59, 0x5f, 0xc2, 0x7b, 0xaf, 0xf6, 0x29, 0xde, 0xe9, - 0x24, 0x61, 0x3f, 0x46, 0x78, 0xa7, 0xda, 0x65, 0xb0, 0xb3, - 0xae, 0xf3, 0x72, 0x6e, 0x37, 0x6e, 0xae, 0xb1, 0x3b, 0xf6, - 0x60, 0xa1, 0x92, 0x86, 0x9e, 0x97, 0x4f, 0x5e, 0x86, 0x88, - 0x32, 0x06, 0x7c, 0xe3, 0x37, 0x7e, 0xb1, 0x83, 0xf5, 0x83, - 0x05, 0x43, 0xb3, 0xe3, 0xa1, 0x68, 0xe5, 0x4c, 0x92, 0x9c, - 0x61, 0xa3, 0x5d, 0xcf, 0x23, 0xe7, 0xce, 0xf5, 0x7f, 0xbb, - 0xf7, 0x89, 0x5e, 0xa8, 0xf0, 0xa1, 0xff, 0x1a, 0xaf, 0x15, - 0xc8, 0x3d, 0x8b, 0xce, 0x06, 0xa4, 0x60, 0xd6, 0x40, 0x19, - 0x48, 0x33, 0x53, 0x34, 0x9e, 0xd8, 0x75, 0xfc, 0x45, 0x73, - 0x35, 0x8f, 0x70, 0x04, 0x80, 0xa1, 0xe5, 0xfc, 0x98, 0xb0, - 0x52, 0x63, 0x41, 0x84, 0x57, 0xa2, 0x85, 0x4e, 0x68, 0x13, - 0x2d, 0x3e, 0x4b, 0x68, 0x7f, 0x43, 0x04, 0x05, 0x02, 0x5a, - 0x16, 0x67, 0x5a, 0xc5, 0xea, 0xac, 0x25, 0x61, 0xd4, 0xa4, - 0xe7, 0xbe, 0x13, 0x95, 0xbd, 0x03, 0xb4, 0x26, 0xe3, 0xbf, - 0x7e, 0xe5, 0x0b, 0x34, 0xeb, 0x59, 0x5d, 0xd7, 0xdb, 0x1e, - 0x07, 0xfc, 0x63, 0xab, 0xbb, 0xc6, 0x7a, 0x51, 0x50, 0x59, - 0x13, 0x4b, 0x27, 0x88, 0x98, 0xdc, 0x01, 0x37, 0xeb, 0x58, - 0x75, 0xde, 0x5a, 0xa4, 0x6b, 0xdd, 0xba, 0x01, 0x40, 0xf7, - 0x1c, 0x0a, 0xf3, 0x02, 0x3d, 0x54, 0x64, 0xf2, 0x85, 0x43, - 0x90, 0xc0, 0x69, 0x18, 0x94, 0x95, 0x6e, 0x57, 0x14, 0xda, - 0x27, 0x0a, 0x42, 0xb2, 0x5a, 0x78, 0xe4, 0xf1, 0x45, 0x85, - 0x54, 0xec, 0x44, 0xa0, 0xcb, 0xf4, 0xd1, 0x3a, 0x85, 0x74, - 0x0f, 0x04, 0x67, 0xf4, 0x42, 0x01, 0xc4, 0x04, 0x66, 0x48, - 0x6c, 0xbe, 0x84, 0x38, 0x6e, 0xda, 0x23, 0xd0, 0xd1, 0x26, - 0x94, 0x11, 0x65, 0x2e, 0xc6, 0xd8, 0x6e, 0x25, 0x17, 0x43, - 0x9f, 0x55, 0x2d, 0x1d, 0x55, 0xa9, 0xdd, 0x3b, 0xc7, 0x09, - 0xde, 0x26, 0x64, 0xd4, 0x85, 0x21, 0x15, 0x0d, 0x4a, 0x45, - 0x4d, 0xba, 0x13, 0x9e, 0x3b, 0x5e, 0xc2, 0xf7, 0xc1, 0x34, - 0xc5, 0x74, 0xd4, 0x95, 0x19, 0x3d, 0x69, 0x9c, 0xae, 0xef, - 0x13, 0x95, 0x2c, 0x77, 0xdd, 0x64, 0x2c, 0x12, 0x31, 0x7d, - 0xb5, 0x55, 0xde, 0x69, 0x35, 0x3f, 0x77, 0x72, 0xc6, 0x21, - 0x22, 0x23, 0x7a, 0x05, 0xbf, 0x92, 0xae, 0x49, 0x7f, 0x74, - 0x17, 0x97, 0x5f, 0x5b, 0x4d, 0x7d, 0x86, 0x23, 0x04, 0xe0, - 0xff, 0x10, 0x06, 0xc3, 0xd3, 0x05, 0xde, 0xc4, 0xae, 0xaf, - 0x3d, 0x2d, 0xaf, 0x3c, 0xaf, 0xd3, 0xd5, 0xfd, 0x84, 0xd8, - 0x3b, 0x6c, 0x8e, 0x8b, 0x23, 0x8b, 0x16, 0xaa, 0x67, 0xf1, - 0xde, 0xa4, 0x4b, 0x5a, 0x39, 0x60, 0x73, 0xd2, 0x9f, 0x1f, - 0x8c, 0xcf, 0xbc, 0xaa, 0x74, 0x9e, 0x8d, 0xfd, 0xc3, 0xb7, - 0x86, 0xe5, 0xbb, 0x5a, 0x4d, 0x3d, 0xe2, 0xc3, 0x28, 0x78, - 0x26, 0xd4, 0xb3, 0x45, 0x94, 0xd3, 0x2d, 0xbf, 0x8c, 0x92, - 0x56, 0x3c, 0x6e, 0xea, 0x53, 0x38, 0x7f, 0x22, 0x67, 0xc9, - 0xa7, 0x14, 0x20, 0xb9, 0x13, 0xc4, 0xa0, 0x44, 0x83, 0xc4, - 0x19, 0xca, 0x98, 0x71, 0xc7, 0x13, 0x70, 0x3a, 0xa7, 0xfb, - 0x9e, 0xc4, 0x94, 0x8c, 0xfd, 0x21, 0x36, 0x88, 0xea, 0x23, - 0xc7, 0x43, 0x52, 0x9f, 0xf4, 0x9e, 0xb1, 0xb4, 0xd3, 0x20, - 0x65, 0xd8, 0x18, 0x25, 0x80, 0xb7, 0xe4, 0x5c, 0x96, 0x3a, - 0xa3, 0xb5, 0x40, 0x63, 0xac, 0x02, 0x34, 0x51, 0xf7, 0x12, - 0xea, 0x97, 0x9d, 0x3e, 0xe7, 0xcb, 0x88, 0x15, 0xaa, 0xe3, - 0xfe, 0xe5, 0x42, 0xe5, 0x48, 0xcf, 0xc6, 0x8e, 0x0e, 0xc6, - 0x48, 0xdb, 0xe5, 0x1e, 0x79, 0x99, 0xed, 0x78, 0xa6, 0x37, - 0xdd, 0xe3, 0x7b, 0x01, 0xdd, 0x20, 0x63, 0x45, 0x57, 0xd1, - 0x0f, 0x05, 0x5d, 0x29, 0xad, 0x99, 0x6c, 0x27, 0xa3, 0x0c, - 0x72, 0x81, 0xb1, 0x26, 0x16, 0xaf, 0x11, 0x65, 0xba, 0x79, - 0xbc, 0xb8, 0xfe, 0xe7, 0xc5, 0xe6, 0x4c, 0xfa, 0x37, 0xc5, - 0xe0, 0x2e, 0x4e, 0xef, 0x75, 0xe4, 0x04, 0xaf, 0xfa, 0x41, - 0x7f, 0x58, 0x2e, 0x8f, 0x95, 0x5f, 0x15, 0x5c, 0x15, 0x23, - 0x81, 0xb7, 0x2c, 0x81, 0x70, 0xf5, 0xcc, 0x60, 0x09, 0x7e, - 0xf1, 0x0d, 0x9c, 0x9d, 0xcc, 0xa0, 0x30, 0xa8, 0x82, 0x23, - 0x5f, 0x94, 0xcb, 0x18, 0xc4, 0x32, 0xe6, 0xab, 0xcd, 0x96, - 0x9e, 0xab, 0xcd, 0x68, 0x6f, 0x88, 0xb7, 0x72, 0x65, 0xbc, - 0x1e, 0x05, 0x60, 0xfe, 0x6b, 0x77, 0x2a, 0x11, 0x63, 0x59, - 0x29, 0xdb, 0xba, 0xe0, 0x50, 0xd5, 0x51, 0x77, 0x16, 0xb8, - 0xb7, 0xf4, 0xa9, 0xbe, 0xf0, 0xa5, 0xaa, 0x20, 0x50, 0x2e, - 0x73, 0x21, 0xee, 0x77, 0xa3, 0xc8, 0xbc, 0x0c, 0x16, 0x0f, - 0x83, 0x7b, 0xaf, 0xbb, 0x91, 0x95, 0xd3, 0x6e, 0xe7, 0x28, - 0x77, 0x00, 0xbc, 0x83, 0x46, 0xa5, 0x0a, 0x19, 0xe8, 0x10, - 0xfb, 0x24, 0xeb, 0x27, 0xc2, 0xa3, 0xdd, 0xb8, 0x5b, 0x27, - 0xb9, 0xbb, 0x49, 0xd9, 0xd0, 0x32, 0x94, 0x48, 0x1b, 0xb8, - 0xf8, 0xb2, 0x30, 0xf4, 0x1f, 0x3d, 0xbf, 0xe6, 0xf3, 0x34, - 0xd3, 0x32, 0x85, 0x67, 0x85, 0x13, 0x3e, 0x20, 0xb7, 0xfa, - 0x74, 0x27, 0x74, 0x8f, 0x55, 0x47, 0x15, 0x91, 0x0b, 0x3f, - 0xb1, 0x18, 0xe7, 0x11, 0x1e, 0x52, 0xd8, 0xd1, 0x3f, 0xb9, - 0x5d, 0x4f, 0x88, 0xb9, 0x1e, 0x5a, 0xb6, 0x90, 0x64, 0xad, - 0x6f, 0x8d, 0x33, 0xb3, 0x57, 0xde, 0x3e, 0x13, 0xb3, 0x9f, - 0x2d, 0x00, 0xb1, 0x79, 0x84, 0x60, 0x6d, 0x3c, 0x5f, 0xc0, - 0x34, 0x08, 0x4b, 0x58, 0x33, 0x59, 0xfe, 0xe5, 0xed, 0xd3, - 0x10, 0xd8, 0xd8, 0x85, 0xc3, 0xc9, 0x71, 0xcf, 0x40, 0x96, - 0xc0, 0xd5, 0x5e, 0x62, 0xe7, 0xcb, 0x33, 0xee, 0x72, 0xb5, - 0xb8, 0x6e, 0xea, 0x13, 0xde, 0xeb, 0x82, 0x03, 0x8e, 0x6c, - 0xb3, 0x67, 0xb1, 0x5f, 0xd4, 0xe1, 0xd9, 0xc2, 0x7a, 0x97, - 0xbb, 0xd4, 0x5e, 0x0b, 0xfe, 0xc1, 0xb3, 0x1f, 0x2b, 0x1a, - 0x37, 0x98, 0x26, 0x27, 0xb1, 0xaf, 0x4c, 0x55, 0xe1, 0xae, - 0x4c, 0x86, 0x80, 0x4b, 0xc5, 0xf2, 0x35, 0x48, 0x81, 0xf7, - 0x83, 0x75, 0x63, 0x08, 0x0d, 0x77, 0x41, 0x14, 0xbc, 0xf3, - 0x6e, 0x46, 0xbd, 0x9c, 0x5a, 0x4f, 0x5c, 0x89, 0x26, 0xb6, - 0x6c, 0xde, 0x0d, 0x15, 0x31, 0xec, 0x7e, 0x13, 0xf2, 0x99, - 0x74, 0x40, 0x3c, 0xe1, 0xea, 0xa0, 0xc9, 0x99, 0x0a, 0x4b, - 0x17, 0x74, 0xff, 0x47, 0x15, 0x76, 0x5e, 0x44, 0xa2, 0x1c, - 0x93, 0xd3, 0xe6, 0xa2, 0x82, 0x0f, 0x7f, 0x55, 0xa8, 0xf3, - 0x79, 0xc3, 0xa8, 0x9f, 0x37, 0x2b, 0x97, 0x7e, 0x90, 0x71, - 0xfc, 0xa7, 0xff, 0xc6, 0xc7, 0x93, 0x5c, 0xc9, 0xed, 0x20, - 0x60, 0xbd, 0x5c, 0x36, 0x05, 0x55, 0x51, 0x55, 0x51, 0x15, - 0x36, 0x01, 0x17, 0xa9, 0x56, 0x27, 0x44, 0x66, 0xc9, 0x3a, - 0xb9, 0xbb, 0xee, 0x04, 0xb6, 0x2a, 0xfd, 0x10, 0x9a, 0x46, - 0xdd, 0x5d, 0x6d, 0xad, 0x21, 0x86, 0x6d, 0x62, 0x8a, 0x4a, - 0xbc, 0x73, 0xf0, 0x9d, 0x93, 0x0d, 0xf1, 0x62, 0xfa, 0x58, - 0x64, 0x37, 0x4f, 0x0b, 0xa3, 0xa1, 0x52, 0xce, 0x03, 0xce, - 0x0f, 0x77, 0x29, 0xad, 0x47, 0x38, 0xca, 0xbc, 0x61, 0xe6, - 0xad, 0xe4, 0x8b, 0xf1, 0x82, 0xa8, 0xd5, 0xe3, 0x8c, 0xd3, - 0xa0, 0xc4, 0xc0, 0x5e, 0x3b, 0xa1, 0x66, 0x2a, 0x6e, 0x88, - 0x24, 0x56, 0xe4, 0x84, 0x0a, 0x36, 0x72, 0xf3, 0x5c, 0x11, - 0xd9, 0x66, 0xd8, 0x45, 0x5c, 0x83, 0x9e, 0x1c, 0x8c, 0xc6, - 0xf6, 0x6e, 0x6a, 0xb1, 0x52, 0xed, 0x6c, 0x6a, 0x6d, 0x23, - 0xb9, 0x0b, 0x66, 0x26, 0x5a, 0x16, 0x16, 0x90, 0x43, 0xb9, - 0xc3, 0x02, 0xc1, 0x43, 0x93, 0x13, 0x94, 0xfe, 0xc3, 0x59, - 0x49, 0xbe, 0x1e, 0x26, 0x1b, 0x9d, 0x8e, 0xba, 0xc4, 0x29, - 0x51, 0x05, 0x28, 0x1f, 0x55, 0x59, 0x1c, 0x3e, 0x25, 0x86, - 0xcc, 0xc7, 0xd9, 0xd3, 0xa8, 0xe7, 0x10, 0xa0, 0xb6, 0x23, - 0xb9, 0xaf, 0x00, 0x8b, 0x7d, 0xf1, 0x5b, 0xd6, 0xb7, 0x56, - 0x44, 0x9b, 0x0a, 0xec, 0xa6, 0x2b, 0xb4, 0x4e, 0x1d, 0x4f, - 0xc5, 0x0b, 0x45, 0xd2, 0x3a, 0xc5, 0xc0, 0xbf, 0xb9, 0xdd, - 0x59, 0x21, 0xf2, 0x67, 0x25, 0x88, 0x9b, 0xb6, 0x66, 0x83, - 0xbf, 0x62, 0xfe, 0x7c, 0xfa, 0x9e, 0x50, 0xed, 0x15, 0x93, - 0xb6, 0x7a, 0xb0, 0xc4, 0xbe, 0xcf, 0x2a, 0x70, 0x4e, 0x52, - 0x20, 0xc1, 0x24, 0x08, 0x49, 0xd9, 0x05, 0x04, 0x53, 0x73, - 0xf3, 0xcf, 0x14, 0x70, 0xac, 0x3c, 0x45, 0x0f, 0x08, 0xa3, - 0xae, 0x43, 0xe7, 0x7f, 0x1f, 0xe2, 0x14, 0xf1, 0xbb, 0x25, - 0x20, 0xfd, 0xe4, 0xaf, 0x44, 0x9e, 0x77, 0x88, 0x4d, 0x26, - 0x09, 0xb1, 0xb0, 0x12, 0xf5, 0xdf, 0x3c, 0x53, 0x48, 0x78, - 0xb9, 0x60, 0x41, 0xd3, 0x8f, 0x8d, 0x11, 0x63, 0x60, 0x28, - 0x30, 0x07, 0xa2, 0x14, 0x3b, 0x8c, 0x50, 0xe2, 0xee, 0x73, - 0x39, 0x66, 0xd1, 0x51, 0x87, 0xac, 0x90, 0x9b, 0x2c, 0x6d, - 0x8d, 0xd5, 0x75, 0x3f, 0xc6, 0xf1, 0x8f, 0xdf, 0xdb, 0x45, - 0x38, 0xf8, 0xd6, 0x7e, 0xc7, 0x7c, 0x44, 0x08, 0x4a, 0x14, - 0xa0, 0x84, 0x7c, 0x8b, 0x88, 0x40, 0x93, 0x89, 0xae, 0x2c, - 0x20, 0x07, 0x80, 0xec, 0xce, 0x4c, 0x2c, 0x4e, 0x49, 0x79, - 0x53, 0xe7, 0xde, 0xa2, 0x9e, 0x67, 0x21, 0x53, 0x7c, 0x85, - 0xe7, 0x6f, 0xbd, 0x93, 0xab, 0x63, 0xba, 0xf0, 0xbd, 0xea, - 0x39, 0x16, 0x47, 0xbf, 0xe6, 0x0c, 0xcb, 0x63, 0xc7, 0xc5, - 0xf1, 0xdc, 0x5a, 0x52, 0xcd, 0x4c, 0x53, 0x8b, 0x7e, 0xb1, - 0xc3, 0x4e, 0xe7, 0x61, 0x25, 0x01, 0xec, 0xae, 0x06, 0x74, - 0x9f, 0xbc, 0xbb, 0x2a, 0x47, 0x46, 0xe8, 0xae, 0xf2, 0xab, - 0x15, 0xed, 0xa6, 0x86, 0x8f, 0x2f, 0xe5, 0x67, 0x0f, 0xdd, - 0xbf, 0x70, 0x53, 0xaa, 0x9b, 0x74, -}; -#define sizeof_bench_dilithium_level5_key (sizeof(bench_dilithium_level5_key)) - -#endif /* !WOLFSSL_MLDSA_NO_SIGN */ - -#ifndef WOLFSSL_MLDSA_NO_VERIFY - -/* raw public key without ASN1 syntax from - * ./certs/dilithium/bench_dilithium_level5_key.der */ -static const unsigned char bench_dilithium_level5_pubkey[] = { - 0xef, 0x49, 0x79, 0x47, 0x15, 0xc4, 0x8a, 0xa9, 0x74, 0x2a, - 0xf0, 0x36, 0x94, 0x5c, 0x91, 0x1c, 0x5d, 0xff, 0x2c, 0x83, - 0xf2, 0x8b, 0x04, 0xfc, 0x5d, 0x64, 0xbd, 0x49, 0x73, 0xcd, - 0xcc, 0x99, 0x50, 0x5f, 0x2b, 0x16, 0x3a, 0xbb, 0x98, 0xc0, - 0xa7, 0x69, 0x0e, 0x95, 0x99, 0x0b, 0xa2, 0x6c, 0xfe, 0x6c, - 0xdb, 0xc8, 0xa7, 0x09, 0x46, 0x6c, 0x90, 0x50, 0xa4, 0x75, - 0x30, 0xf7, 0x90, 0xac, 0x31, 0xb6, 0xdd, 0x21, 0xaf, 0xc6, - 0xf9, 0xfe, 0xee, 0xc6, 0x5b, 0xa8, 0x8f, 0x0a, 0x2e, 0xd0, - 0x42, 0xab, 0xa8, 0x3c, 0x8d, 0xbf, 0xf7, 0x44, 0xbd, 0x0d, - 0xcf, 0xf4, 0x68, 0xfc, 0x16, 0x67, 0xf7, 0x39, 0x48, 0x5f, - 0x56, 0xd1, 0xe7, 0x1f, 0x49, 0x80, 0x50, 0xbe, 0x54, 0xd1, - 0xb7, 0xc9, 0xd2, 0x32, 0xc7, 0x08, 0x8c, 0xde, 0x2c, 0x31, - 0xf6, 0x1d, 0xc7, 0xac, 0xb3, 0x79, 0xd7, 0x4b, 0x1b, 0x23, - 0x89, 0x0a, 0xdc, 0x8e, 0x44, 0x41, 0x14, 0x28, 0x99, 0x13, - 0xb3, 0x26, 0xa6, 0x0e, 0x83, 0x60, 0xaa, 0x8d, 0x7c, 0x23, - 0x13, 0xba, 0x6c, 0x28, 0x90, 0x56, 0x84, 0xa1, 0x23, 0x8b, - 0x81, 0x20, 0x97, 0x7c, 0x66, 0x3f, 0xed, 0x5d, 0xd0, 0xe4, - 0x5d, 0xee, 0x46, 0xbc, 0x4b, 0x3c, 0x03, 0xb5, 0xbc, 0x4d, - 0x8d, 0x37, 0xa3, 0x56, 0x4b, 0x33, 0xad, 0xef, 0xd4, 0xb6, - 0xec, 0xdb, 0x04, 0x9a, 0x19, 0x58, 0x57, 0xd8, 0x00, 0x3a, - 0x92, 0x61, 0x0c, 0x0b, 0xc8, 0x52, 0xe5, 0x04, 0x02, 0x9a, - 0x00, 0x7e, 0xec, 0x7e, 0x94, 0xaa, 0xef, 0x2d, 0x7f, 0xb6, - 0x2e, 0x7c, 0xb0, 0x73, 0xa2, 0x20, 0xc0, 0x07, 0x30, 0x41, - 0x50, 0x20, 0x14, 0x18, 0x21, 0x5e, 0x2a, 0x6f, 0x70, 0x21, - 0xd6, 0x97, 0x13, 0xb9, 0xc1, 0x9e, 0x90, 0x67, 0xcc, 0x55, - 0x8a, 0xec, 0xec, 0x0a, 0x1e, 0x90, 0xdc, 0x3f, 0xb0, 0x4d, - 0xd1, 0x18, 0xea, 0x4f, 0xcb, 0x5d, 0x15, 0x4c, 0xb8, 0x35, - 0x9b, 0x34, 0x24, 0x30, 0x06, 0x53, 0x17, 0xf0, 0xbe, 0x27, - 0x36, 0xb3, 0x04, 0x6a, 0xbd, 0xbf, 0xa7, 0x39, 0xee, 0xa9, - 0x8f, 0x0e, 0x98, 0xc5, 0xf5, 0x9f, 0x46, 0x25, 0x93, 0xc9, - 0xf2, 0xf6, 0x2b, 0x8e, 0x92, 0x06, 0x01, 0x3d, 0x81, 0x18, - 0xf2, 0xec, 0xf1, 0x05, 0x4c, 0xad, 0x4b, 0xcb, 0x98, 0xa4, - 0xb5, 0x61, 0x20, 0xda, 0x81, 0xa1, 0xfb, 0x92, 0x4c, 0xaf, - 0x87, 0x6f, 0x6e, 0xd2, 0x57, 0xec, 0xcd, 0x94, 0xb3, 0x79, - 0xbf, 0x59, 0x88, 0x17, 0x81, 0xce, 0x8a, 0x57, 0xce, 0x57, - 0xae, 0x3e, 0x82, 0x81, 0x2f, 0x83, 0x61, 0xd8, 0xf9, 0x68, - 0x21, 0xe7, 0x72, 0x5b, 0xd6, 0x80, 0x55, 0x68, 0x5d, 0x67, - 0x15, 0x0c, 0x8b, 0xdc, 0x4f, 0xc3, 0x89, 0x36, 0x3c, 0xac, - 0xaf, 0x16, 0x5e, 0x1c, 0xfa, 0x68, 0x74, 0x6a, 0xab, 0x68, - 0xd8, 0x59, 0x96, 0x2d, 0x33, 0x62, 0xe4, 0xbd, 0xb3, 0xb7, - 0x4d, 0x88, 0x35, 0xb8, 0xed, 0xb2, 0x16, 0x85, 0x97, 0x08, - 0x71, 0x71, 0x39, 0x7e, 0x0c, 0x53, 0x16, 0xda, 0x38, 0xe5, - 0x28, 0x09, 0x9c, 0xd9, 0x46, 0xec, 0x68, 0xda, 0x8d, 0xd0, - 0xad, 0xb2, 0x79, 0x28, 0x3b, 0x1e, 0x12, 0xc9, 0xdf, 0xa9, - 0x6d, 0x3d, 0x29, 0x99, 0x2f, 0x53, 0xc2, 0xd0, 0xf9, 0x88, - 0x26, 0x94, 0x47, 0xaf, 0xf6, 0x96, 0xf3, 0xe1, 0x11, 0xa6, - 0x82, 0x3d, 0x43, 0x3f, 0x1f, 0xbc, 0xf6, 0x98, 0xbe, 0xff, - 0x06, 0x86, 0x61, 0x27, 0xdc, 0x91, 0x54, 0xd4, 0xfc, 0x68, - 0x83, 0xe8, 0x35, 0x3e, 0xee, 0x94, 0x59, 0x28, 0x2f, 0xde, - 0xdd, 0x03, 0x60, 0x66, 0xc1, 0x49, 0x57, 0xdd, 0xbc, 0xd5, - 0x0a, 0x67, 0x34, 0xf1, 0xa6, 0x0a, 0x57, 0x94, 0x65, 0x02, - 0x2c, 0x52, 0x43, 0x70, 0x3b, 0xc1, 0x9a, 0xff, 0xda, 0x6f, - 0xb9, 0x54, 0x47, 0x01, 0xda, 0x27, 0xe4, 0x48, 0x4a, 0x90, - 0x9f, 0xb5, 0xc3, 0xee, 0x0e, 0x09, 0x57, 0xfe, 0x48, 0x51, - 0x08, 0x34, 0x5e, 0x8f, 0x16, 0xc9, 0x0b, 0x74, 0xd9, 0x7d, - 0x22, 0x3f, 0xd6, 0xb7, 0x5d, 0xd6, 0x76, 0x00, 0x8d, 0x4e, - 0x78, 0x73, 0x86, 0xd6, 0xdb, 0x2a, 0x65, 0xab, 0xdf, 0xb0, - 0xea, 0x11, 0xad, 0xdf, 0xba, 0x43, 0xdb, 0xa8, 0x0a, 0xfb, - 0x04, 0x38, 0x81, 0x2b, 0xa3, 0x29, 0xfc, 0x95, 0x73, 0x9a, - 0x0c, 0x6c, 0x9e, 0xcd, 0xdc, 0xcf, 0x0a, 0x0c, 0x18, 0x41, - 0x6f, 0x1d, 0xa3, 0xf6, 0x12, 0x4c, 0x13, 0xf2, 0x02, 0xc6, - 0x50, 0x99, 0x86, 0x73, 0xa7, 0xf9, 0x7e, 0x84, 0x7f, 0x4c, - 0x00, 0xce, 0x2e, 0x21, 0x76, 0x8e, 0x17, 0x7a, 0x87, 0x6f, - 0x81, 0xe6, 0xc0, 0x52, 0xa5, 0xa0, 0x3c, 0x54, 0x3c, 0xec, - 0xb0, 0x9d, 0x1c, 0x3b, 0xec, 0xe5, 0x4e, 0x4a, 0x37, 0xe7, - 0xd5, 0xa9, 0x07, 0x87, 0x23, 0x28, 0x5d, 0x3d, 0x22, 0x02, - 0x79, 0x40, 0x3f, 0x2d, 0x40, 0xc9, 0xe5, 0xa6, 0x9b, 0xa8, - 0xb8, 0x76, 0xf6, 0x77, 0x5b, 0x8d, 0x72, 0x96, 0x3e, 0x13, - 0xbf, 0x76, 0xfa, 0x7b, 0xb7, 0x82, 0x5f, 0xe7, 0x9d, 0x54, - 0x0e, 0x05, 0x1a, 0x9f, 0xa4, 0x42, 0xa5, 0xb4, 0x93, 0x23, - 0x06, 0x59, 0x43, 0xa8, 0xe8, 0x5c, 0xfc, 0x18, 0x97, 0xdb, - 0xad, 0x9a, 0x80, 0x0a, 0xf2, 0x20, 0x50, 0xac, 0xc1, 0x13, - 0x3e, 0x98, 0x09, 0xde, 0xf2, 0x70, 0x9e, 0x14, 0xc2, 0x5c, - 0xec, 0x65, 0x07, 0x0b, 0xfa, 0x02, 0x5c, 0xf8, 0x71, 0xaa, - 0x9b, 0x45, 0x62, 0xe2, 0x27, 0xaf, 0x77, 0xf8, 0xe3, 0xeb, - 0x7b, 0x24, 0x7b, 0x3c, 0x67, 0xc2, 0x6d, 0x6e, 0x17, 0xae, - 0x6e, 0x86, 0x6f, 0x98, 0xc9, 0xac, 0x13, 0x9f, 0x87, 0x64, - 0x3d, 0x4d, 0x6f, 0xa0, 0xb3, 0x39, 0xc6, 0x68, 0x1b, 0xa7, - 0xeb, 0x3e, 0x0f, 0x6b, 0xc7, 0xa4, 0xe2, 0x20, 0x27, 0x75, - 0x3f, 0x09, 0x16, 0xff, 0x1a, 0xcc, 0xa7, 0xc4, 0x6d, 0xc2, - 0xfc, 0xc3, 0x0b, 0x37, 0x63, 0xff, 0x9b, 0x10, 0xe6, 0x00, - 0xf7, 0x18, 0x43, 0x9f, 0x07, 0x50, 0x31, 0x51, 0xd4, 0xfd, - 0xad, 0xa2, 0x0f, 0x77, 0xda, 0x41, 0xc1, 0x0a, 0x6f, 0x86, - 0xd7, 0xdc, 0x8a, 0x52, 0xd6, 0xa1, 0x27, 0xdb, 0x14, 0x67, - 0x26, 0x91, 0xb3, 0xcd, 0x01, 0x5f, 0x60, 0xa1, 0x7f, 0x43, - 0x15, 0x1a, 0x82, 0x0f, 0xd3, 0x66, 0x5f, 0x60, 0x57, 0x2f, - 0xb2, 0x8c, 0x27, 0x2a, 0x9d, 0x1b, 0xf9, 0xf2, 0x59, 0x20, - 0x39, 0xd9, 0xc5, 0xaf, 0xf2, 0x36, 0x8c, 0x58, 0x00, 0x1b, - 0xd0, 0xc5, 0x8e, 0x1a, 0x49, 0xa8, 0x60, 0xbe, 0xd1, 0xd7, - 0x2a, 0xb0, 0xc2, 0xab, 0x58, 0x8a, 0x7a, 0xa9, 0x41, 0x68, - 0x70, 0xbd, 0xea, 0x73, 0xa5, 0x03, 0x11, 0xb2, 0x27, 0xd9, - 0xcd, 0xf5, 0x09, 0xe8, 0x1c, 0xe2, 0x4f, 0x50, 0x6a, 0x84, - 0x34, 0x62, 0x2e, 0x36, 0xaa, 0x4c, 0xc1, 0x83, 0x78, 0x98, - 0x35, 0x7a, 0x27, 0x7e, 0xfe, 0xf1, 0x6f, 0x59, 0x27, 0x35, - 0x73, 0xce, 0x74, 0xaa, 0xb4, 0x72, 0x82, 0xa8, 0xe2, 0x81, - 0x7a, 0x6b, 0xca, 0x33, 0xa5, 0xda, 0xa2, 0x63, 0xca, 0x2e, - 0x90, 0x03, 0x32, 0xec, 0x63, 0xdb, 0x52, 0x7b, 0x16, 0xfc, - 0x01, 0x2d, 0x30, 0x12, 0x1e, 0xf9, 0xa3, 0x72, 0x21, 0x3c, - 0x75, 0x0c, 0x61, 0x9c, 0x7e, 0x73, 0x04, 0x71, 0x41, 0x45, - 0x5d, 0x7f, 0x49, 0x1c, 0x09, 0x08, 0xa4, 0xec, 0x2f, 0xfd, - 0xc4, 0xfb, 0x59, 0x6a, 0x27, 0x7a, 0xd4, 0xfc, 0x5f, 0x20, - 0x04, 0x34, 0x7d, 0x08, 0xed, 0x82, 0x5a, 0x90, 0xe1, 0xab, - 0xfd, 0x35, 0x3a, 0x8d, 0xbb, 0x0a, 0x9d, 0x73, 0xff, 0x69, - 0xe5, 0xe9, 0x09, 0x55, 0x14, 0xd9, 0x7b, 0x6f, 0x0d, 0x99, - 0xd2, 0x7e, 0x71, 0xf8, 0x4f, 0x72, 0x2f, 0xbb, 0xc6, 0xc4, - 0x36, 0xc9, 0x01, 0xd3, 0x9b, 0x94, 0xab, 0x41, 0x0f, 0x4a, - 0x61, 0x5c, 0x68, 0xe5, 0xd7, 0x0d, 0x94, 0xaa, 0xee, 0xba, - 0x95, 0xcb, 0x8c, 0x0e, 0x85, 0x3a, 0x02, 0x6b, 0x95, 0x50, - 0xfd, 0x02, 0xfd, 0xa4, 0x58, 0x29, 0x78, 0x4f, 0xd0, 0xae, - 0x66, 0xd6, 0x5c, 0xe7, 0x45, 0xfe, 0x98, 0xb0, 0xa3, 0xe2, - 0x87, 0xc0, 0xd2, 0x81, 0x08, 0xf1, 0xf1, 0xe7, 0xda, 0x62, - 0x9e, 0xa0, 0x34, 0x86, 0xeb, 0xa1, 0x6e, 0x4a, 0x26, 0x8e, - 0x39, 0x0c, 0x51, 0x10, 0x33, 0x11, 0x87, 0xf8, 0x79, 0x3c, - 0x49, 0x7a, 0x8b, 0xce, 0xc1, 0x0a, 0x0e, 0xe1, 0xd5, 0x2a, - 0xac, 0xf0, 0x3a, 0x1d, 0x6a, 0x6a, 0xe5, 0xe1, 0x81, 0x70, - 0xad, 0xaf, 0x15, 0x4c, 0x2a, 0x70, 0x2a, 0x6b, 0x22, 0x0d, - 0x30, 0xe7, 0x56, 0xed, 0x2d, 0x4b, 0x85, 0x17, 0x49, 0x72, - 0x3a, 0x1b, 0x6f, 0x57, 0x1c, 0xf7, 0x72, 0x9e, 0x20, 0xdb, - 0x57, 0x1c, 0xfb, 0x36, 0x50, 0x52, 0xec, 0x5b, 0xd6, 0x6a, - 0x1b, 0xf8, 0x74, 0xad, 0xe6, 0x00, 0x74, 0x04, 0xc5, 0x99, - 0x83, 0xe4, 0x5a, 0x0c, 0xc3, 0xe8, 0x6d, 0x3a, 0xd7, 0x3c, - 0x3c, 0xc0, 0x1a, 0x28, 0xb3, 0x29, 0x7a, 0x10, 0x9e, 0x39, - 0x66, 0x5b, 0xc1, 0x38, 0xac, 0x21, 0x4e, 0xcd, 0x01, 0xf2, - 0xf6, 0x30, 0x2c, 0x2b, 0xb6, 0xbf, 0xf5, 0xea, 0x61, 0xaf, - 0x0c, 0xa6, 0x01, 0x11, 0x15, 0x19, 0x09, 0x8c, 0x7e, 0x69, - 0xdf, 0x3b, 0xea, 0xd3, 0x0a, 0x3a, 0xd7, 0xbd, 0xe1, 0x17, - 0xaf, 0x92, 0x3c, 0xf5, 0xfe, 0x35, 0xd6, 0xcf, 0x07, 0xa6, - 0xf7, 0xe9, 0xc1, 0x99, 0xed, 0x80, 0xe3, 0x12, 0xd5, 0x4b, - 0xb9, 0xdf, 0xaf, 0x4e, 0x52, 0xad, 0x8e, 0x66, 0x87, 0xe5, - 0x2c, 0xd0, 0x45, 0x70, 0xd9, 0x78, 0x8f, 0x4b, 0xf4, 0xe1, - 0xf1, 0x22, 0xf2, 0xe3, 0xed, 0x1f, 0xeb, 0xe9, 0x70, 0x31, - 0x4c, 0x65, 0x5f, 0x55, 0xee, 0x5d, 0xaa, 0x83, 0x87, 0x76, - 0xbe, 0x11, 0xae, 0xd7, 0xf2, 0xfb, 0x43, 0xe7, 0x17, 0x81, - 0x33, 0x15, 0x47, 0xa0, 0xf3, 0x8e, 0x84, 0x57, 0xff, 0x35, - 0x9e, 0x4a, 0x8a, 0xab, 0x50, 0x3a, 0x45, 0xe0, 0xc3, 0x73, - 0xca, 0x77, 0x61, 0x68, 0x38, 0xd0, 0xa3, 0x5f, 0x03, 0x8d, - 0x41, 0xc2, 0xd3, 0x4a, 0x17, 0xe0, 0xa8, 0xaa, 0x00, 0xf3, - 0xf2, 0x5b, 0xa8, 0xe1, 0x06, 0xa6, 0x2b, 0xdb, 0xe1, 0x74, - 0xbd, 0xc4, 0xd2, 0x2b, 0x55, 0x9a, 0xb0, 0xf8, 0x35, 0xd8, - 0x6b, 0xec, 0xdb, 0xc5, 0xf4, 0x6c, 0x40, 0x90, 0x6a, 0x68, - 0xc9, 0xb5, 0xcb, 0xbb, 0xd0, 0xb0, 0xbc, 0x9f, 0xb9, 0xaa, - 0x50, 0x14, 0x93, 0x3b, 0x9f, 0x25, 0xcb, 0x40, 0xb8, 0x08, - 0xcc, 0x13, 0xe5, 0xdc, 0x3f, 0x84, 0x96, 0xe0, 0x73, 0x7b, - 0x7d, 0x9e, 0x41, 0x92, 0x5d, 0xcc, 0xa4, 0xea, 0x4f, 0x93, - 0x0c, 0x40, 0x2e, 0x42, 0x8a, 0xe9, 0xb9, 0x12, 0x74, 0xbb, - 0x79, 0x7c, 0xb0, 0x37, 0x20, 0xb6, 0xaf, 0x43, 0x3a, 0x88, - 0x59, 0x7c, 0x68, 0x28, 0x5f, 0x98, 0xc2, 0xf0, 0x2a, 0xbc, - 0xa1, 0x61, 0x88, 0x1f, 0x43, 0xbc, 0x42, 0x8f, 0x43, 0xf3, - 0x7e, 0x16, 0x96, 0xfa, 0x92, 0x70, 0xaf, 0x3c, 0x9f, 0x4b, - 0xd9, 0x60, 0xe9, 0xf6, 0x2e, 0x84, 0xda, 0x88, 0x31, 0x34, - 0xa6, 0x85, 0x10, 0x05, 0xef, 0x40, 0xa8, 0xa5, 0x4f, 0x92, - 0x59, 0xf7, 0xe0, 0xc4, 0x2b, 0x12, 0x17, 0x71, 0xbe, 0x8c, - 0x4a, 0x02, 0xfe, 0x12, 0xb6, 0x3b, 0x85, 0x75, 0x37, 0xf3, - 0x73, 0x2d, 0x9c, 0x00, 0x5d, 0x80, 0xad, 0x20, 0x2f, 0x5a, - 0x0b, 0x17, 0x7e, 0x67, 0x72, 0x24, 0x5a, 0xb9, 0xf3, 0xb1, - 0x33, 0xa4, 0x57, 0x1d, 0x49, 0x72, 0x2c, 0x7f, 0x47, 0x15, - 0x07, 0xe0, 0x45, 0x14, 0xdd, 0x77, 0x86, 0x6d, 0x03, 0xbe, - 0x57, 0xd0, 0xaa, 0x18, 0xa6, 0xdd, 0x94, 0x18, 0x3f, 0x8a, - 0xf3, 0xb5, 0xd7, 0x5a, 0xec, 0xc8, 0x79, 0x7f, 0x51, 0x61, - 0x3c, 0x9b, 0xb2, 0x9b, 0xf3, 0xb4, 0x35, 0xd1, 0x38, 0xbf, - 0x37, 0xce, 0x54, 0xd1, 0xf8, 0xb6, 0x45, 0xeb, 0x52, 0x0d, - 0x9a, 0x09, 0x58, 0x0d, 0x2c, 0x0b, 0xb1, 0xf2, 0x30, 0x3a, - 0x95, 0xc1, 0x13, 0x91, 0xd2, 0x9f, 0x8d, 0x8d, 0xd0, 0x38, - 0x3e, 0x4c, 0xae, 0x4a, 0x55, 0xa7, 0x42, 0x11, 0x83, 0xc4, - 0x70, 0xf0, 0x2b, 0x68, 0x9e, 0x07, 0xad, 0xb7, 0x83, 0xc6, - 0x53, 0x3c, 0xfb, 0x0a, 0x5d, 0x24, 0xdc, 0xe1, 0x55, 0x72, - 0xcf, 0xce, 0x3e, 0xc8, 0xd0, 0x57, 0x8a, 0x82, 0x5e, 0x78, - 0x2b, 0x80, 0xc5, 0xb9, 0x09, 0x46, 0xf8, 0x90, 0x39, 0x52, - 0xa9, 0xce, 0x3f, 0x3d, 0x41, 0x3b, 0x28, 0x45, 0xa3, 0xb3, - 0x21, 0xc2, 0xcd, 0x14, 0x49, 0x41, 0x6c, 0x38, 0xda, 0x1b, - 0x5f, 0x16, 0x49, 0xf9, 0x65, 0x00, 0x4e, 0xb4, 0x20, 0x55, - 0x70, 0xe8, 0x58, 0x1a, 0x18, 0xbf, 0x41, 0xef, 0x31, 0xb1, - 0xe7, 0x8d, 0x89, 0xc1, 0x48, 0xe8, 0xf5, 0x57, 0x35, 0xfa, - 0xc1, 0x79, 0xee, 0x2c, 0xe8, 0x7d, 0xb6, 0x03, 0xcc, 0x66, - 0x09, 0x6f, 0x52, 0x84, 0x0a, 0x34, 0x18, 0x2c, 0x01, 0x45, - 0x81, 0x00, 0xe5, 0x5e, 0x8d, 0xae, 0x1c, 0x96, 0x8b, 0x45, - 0x73, 0x00, 0x0a, 0xb5, 0xcf, 0x8d, 0x0e, 0x35, 0x5d, 0x1a, - 0x0e, 0xbf, 0x64, 0x9a, 0x52, 0x20, 0x48, 0xc6, 0xb9, 0x40, - 0xd3, 0x2c, 0x52, 0xca, 0x93, 0xcf, 0xbb, 0x94, 0x06, 0xf3, - 0x97, 0xee, 0xcc, 0x5d, 0xa3, 0xea, 0xf8, 0x5a, 0x39, 0x77, - 0x34, 0xd7, 0xf6, 0x4e, 0xbe, 0x8a, 0x07, 0x5f, 0x51, 0x53, - 0xc5, 0x1b, 0x8c, 0x47, 0x8f, 0x34, 0x0e, 0x60, 0x0a, 0x90, - 0xe2, 0xda, 0x7b, 0xef, 0xd6, 0xf5, 0x5d, 0xe5, 0x32, 0x37, - 0x75, 0x99, 0x81, 0x4a, 0x2a, 0x78, 0x71, 0xdc, 0xf4, 0xe5, - 0xca, 0xd8, 0x6b, 0x3b, 0x90, 0x68, 0x2e, 0x93, 0xc5, 0x10, - 0x42, 0x5d, 0x38, 0x90, 0x32, 0x46, 0xea, 0x87, 0xe0, 0xbc, - 0xb8, 0x9a, 0x18, 0x20, 0x68, 0x85, 0x6d, 0x9b, 0xc9, 0x8f, - 0x9b, 0xd2, 0xbe, 0x15, 0x12, 0x68, 0xd0, 0xb0, 0x16, 0x5f, - 0xe2, 0x69, 0x1d, 0x04, 0x00, 0xfc, 0x63, 0x33, 0xcd, 0x1f, - 0x89, 0xcd, 0x52, 0xff, 0xec, 0x19, 0x69, 0x74, 0xa3, 0xce, - 0x4d, 0xab, 0x93, 0xe4, 0xc6, 0x13, 0x56, 0x27, 0xc9, 0x25, - 0x5a, 0x01, 0xb2, 0x36, 0x8b, 0x61, 0xe5, 0x8b, 0x98, 0xac, - 0xe4, 0x2a, 0xb6, 0x40, 0x9f, 0x42, 0xe4, 0x1b, 0x52, 0xf7, - 0xfd, 0xd8, 0x30, 0x07, 0x33, 0xf9, 0x47, 0xcb, 0x3c, 0xad, - 0x12, 0xc1, 0xcc, 0x29, 0x62, 0x49, 0x04, 0x0c, 0x23, 0x97, - 0x5a, 0xa4, 0x84, 0x67, 0xde, 0x5a, 0xe5, 0x36, 0xd2, 0x88, - 0xf1, 0xd4, 0xeb, 0x13, 0x81, 0x54, 0x51, 0x11, 0xe3, 0xba, - 0xbc, 0xee, 0xdd, 0x6c, 0xcd, 0xe6, 0xb4, 0xa1, 0x8b, 0x0b, - 0x66, 0xfb, 0x8e, 0x50, 0xa0, 0xda, 0x69, 0x8d, 0xcc, 0x2d, - 0xe4, 0x2c, 0xc4, 0x37, 0xdf, 0x61, 0xc0, 0x03, 0xbd, 0x8b, - 0x28, 0xca, 0xd2, 0x8c, 0x1c, 0xf1, 0xa4, 0x26, 0x69, 0xe5, - 0xcf, 0x45, 0xdb, 0x5a, 0x47, 0x79, 0xed, 0x9f, 0xf7, 0xd2, - 0xdb, 0xba, 0x46, 0x53, 0x4f, 0xce, 0xa8, 0xbe, 0x8f, 0x4a, - 0xd6, 0xdf, 0x2e, 0x06, 0xe6, 0x4c, 0x9a, 0xc1, 0xb6, 0x49, - 0xed, 0xc4, 0xeb, 0xaa, 0xa4, 0x29, 0x6d, 0xd4, 0xcc, 0x8c, - 0xb6, 0x40, 0x11, 0x39, 0x69, 0xf7, 0x75, 0xcd, 0xb1, 0x99, - 0x46, 0x4e, 0xde, 0xcb, 0xf6, 0x9d, 0x32, 0xf3, 0xc9, 0x47, - 0x47, 0x7a, 0xcb, 0xfb, 0xa3, 0x0c, 0x3b, 0xdf, 0xb7, 0xde, - 0xec, 0x99, 0xde, 0xb0, 0x26, 0x04, 0x34, 0xae, 0x6b, 0xfc, - 0x99, 0xbc, 0xde, 0xd5, 0xbe, 0xe7, 0xeb, 0xf9, 0xe7, 0xa6, - 0x01, 0x9a, 0x0c, 0x5e, 0x66, 0xe6, 0x53, 0xe4, 0xd1, 0x58, - 0xac, 0xda, 0x69, 0x77, 0x7b, 0x68, 0xd6, 0x30, 0x2a, 0x9c, - 0x6b, 0xbe, 0x9f, 0x3d, 0x71, 0xd6, 0x54, 0xcd, 0x59, 0x4e, - 0x1f, 0xe3, 0x83, 0x4e, 0xd1, 0x8e, 0xaf, 0x97, 0xa8, 0xe5, - 0xb6, 0x59, 0x77, 0xa8, 0x02, 0x20, 0xe4, 0xeb, 0x44, 0x71, - 0xbc, 0x07, 0x14, 0x79, 0x4f, 0x0c, 0x27, 0x06, 0x39, 0xcf, - 0x7c, 0xef, 0x2b, 0x9b, 0x5e, 0xc4, 0x6d, 0x79, 0x13, 0x00, - 0x43, 0x6f, 0x51, 0x77, 0xb5, 0xc3, 0x72, 0xad, 0x13, 0xa9, - 0xe5, 0x9a, 0x5b, 0x1a, 0x99, 0x74, 0xc0, 0x7a, 0xf9, 0xc5, - 0xb0, 0x58, 0x35, 0x1c, 0xa5, 0x51, 0xdb, 0xa1, 0x14, 0xcd, - 0x26, 0x71, 0xb1, 0xe7, 0xaa, 0x14, 0xa7, 0x46, 0x93, 0xd3, - 0x5c, 0x8c, 0x1a, 0x91, 0x77, 0x46, 0x2e, 0x15, 0xaa, 0x9e, - 0xf7, 0x2b, 0x79, 0x41, 0x76, 0xf7, 0x22, 0x53, 0x7d, 0x51, - 0xdb, 0x98, 0x3d, 0x5b, 0x78, 0x5f, 0xc3, 0xc9, 0x29, 0xa3, - 0xff, 0x75, 0x82, 0x06, 0x9a, 0x16, 0x5e, 0xa4, 0x79, 0x0d, - 0xd1, 0x6d, 0x08, 0xff, 0x43, 0xef, 0x9c, 0xf3, 0x1b, 0x7a, - 0x3f, 0x34, 0xbe, 0x19, 0x15, 0x06, 0x33, 0xdb, 0xa5, 0x71, - 0xcb, 0x5f, 0x6b, 0x8d, 0xbd, 0x5b, 0x32, 0x91, 0xb2, 0x37, - 0x3d, 0xb4, 0x40, 0x9e, 0x02, 0x9b, 0xb7, 0x68, 0x20, 0x58, - 0x5c, 0xab, 0xcb, 0xc8, 0x23, 0x2d, 0x77, 0xcc, 0x0b, 0xf6, - 0x78, 0x6b, 0x80, 0x06, 0x91, 0xa9, 0xfd, 0x7e, 0xfa, 0x25, - 0x98, 0x9f, 0xcc, 0x79, 0x0a, 0x1a, 0x54, 0x83, 0xac, 0x64, - 0x16, 0x90, 0xe5, 0xd9, 0xa7, 0xd7, 0x1b, 0x86, 0x0d, 0xe6, - 0xe6, 0x22, 0x2b, 0x1f, 0x44, 0x49, 0x98, 0x9c, 0x51, 0x6f, - 0xcf, 0x58, 0x4a, 0xfa, 0xfa, 0x84, 0x12, 0xa5, 0x10, 0xf4, - 0xca, 0xf0, 0x98, 0x2b, 0xc9, 0x03, 0x71, 0x37, 0xe7, 0xdc, - 0xc2, 0xb1, 0x4e, 0x64, 0xde, 0x4f, 0x46, 0x0d, 0x6b, 0x25, - 0x88, 0x5d, 0xd6, 0xff, 0x23, 0x46, 0x57, 0x36, 0x14, 0x18, - 0xa7, 0xcb, 0xb8, 0xbd, 0xf0, 0xc5, 0x37, 0x36, 0xee, 0xe1, - 0xed, 0x9f, 0x4d, 0xd4, 0x39, 0xe5, 0x92, 0xcf, 0x95, 0x4d, - 0x66, 0x36, 0x5d, 0xd0, 0xcc, 0x07, 0xcf, 0x15, 0x5a, 0xce, - 0x14, 0xb8, 0xda, 0x0d, 0x3d, 0x1b, 0x45, 0xc5, 0x2e, 0x34, - 0x43, 0x25, 0x02, 0x3a, 0xcd, 0x14, 0x45, 0xfb, 0x3e, 0xf9, - 0x88, 0x5d, 0x0d, 0x29, 0x31, 0xb9, 0xa1, 0xe6, 0x31, 0x18, - 0x52, 0x46, 0x3f, 0x22, 0x4f, 0x9f, 0x7a, 0x65, 0x36, 0x88, - 0xa3, 0x1c, 0x3e, 0x6f, 0x50, 0x7a, 0x36, 0xbe, 0x56, 0x7e, - 0x50, 0xcb, 0x7a, 0x10, 0xa0, 0xec, 0xf6, 0x82, 0xd6, 0x30, - 0x1c, 0xe8, 0x4c, 0x50, 0xf9, 0x3e, 0xdb, 0xac, 0xbe, 0x4f, - 0x90, 0xb1, 0xd5, 0x1b, 0x12, 0x95, 0xfb, 0xe8, 0x08, 0x64, - 0x56, 0x7c, 0x96, 0xcc, 0x90, 0xb1, 0xbc, 0xa0, 0xf5, 0x32, - 0x69, 0xb3, 0x5f, 0x27, 0x0f, 0xbe, 0xc9, 0xbd, 0xeb, 0xfa, - 0x4b, 0x5c, 0xc5, 0x99, 0x9e, 0x5a, 0x04, 0xcc, 0xd0, 0x4d, - 0x29, 0xe8, 0x84, 0x55, 0x8c, 0xd7, 0xc4, 0x06, 0x13, 0x4d, - 0x92, 0xe5, 0x98, 0x9c, 0x4c, 0xc1, 0xf7, 0xaf, 0x7b, 0xd5, - 0x2b, 0x92, 0x68, 0x68, 0x19, 0x70, 0x4c, 0x9e, 0x46, 0xb8, - 0x34, 0xeb, 0x01, 0x47, 0xbe, 0x59, 0xab, 0x0b, 0x22, 0x25, - 0xe7, 0x56, 0xa8, 0xb4, 0x93, 0x3c, 0xd5, 0x98, 0x9f, 0x61, - 0x2e, 0xfa, 0xcb, 0x5f, 0x5b, 0xd8, 0x09, 0x83, 0xe9, 0x40, - 0xe9, 0x0e, 0x42, 0xdd, 0x17, 0xd7, 0x6e, 0x19, 0x8d, 0x95, - 0x0a, 0x93, -}; -#define sizeof_bench_dilithium_level5_pubkey \\ - (sizeof(bench_dilithium_level5_pubkey)) +# print ML-DSA raw keys (used by the wolfcrypt benchmark) +my @mldsa_keys = ( + [ 44, "./certs/mldsa/bench_mldsa_44_key.der", + "./certs/mldsa/bench_mldsa_44_pubkey.der" ], + [ 65, "./certs/mldsa/bench_mldsa_65_key.der", + "./certs/mldsa/bench_mldsa_65_pubkey.der" ], + [ 87, "./certs/mldsa/bench_mldsa_87_key.der", + "./certs/mldsa/bench_mldsa_87_pubkey.der" ], + ); -#endif /* !WOLFSSL_MLDSA_NO_VERIFY */ +print OUT_FILE "#if defined(WOLFSSL_HAVE_MLDSA)\n\n"; -#endif /* WOLFSSL_HAVE_MLDSA */ +for my $entry (@mldsa_keys) { + my ($n, $priv, $pub) = @$entry; + + print OUT_FILE "#ifndef WOLFSSL_MLDSA_NO_SIGN\n"; + print OUT_FILE "/* $priv */\n"; + print OUT_FILE "static const unsigned char bench_mldsa_${n}_key[] =\n{\n"; + file_to_hex($priv); + print OUT_FILE "};\n"; + print OUT_FILE "#define sizeof_bench_mldsa_${n}_key (sizeof(bench_mldsa_${n}_key))\n"; + print OUT_FILE "#endif /* !WOLFSSL_MLDSA_NO_SIGN */\n\n"; + + print OUT_FILE "#ifndef WOLFSSL_MLDSA_NO_VERIFY\n"; + print OUT_FILE "/* $pub */\n"; + print OUT_FILE "static const unsigned char bench_mldsa_${n}_pubkey[] =\n{\n"; + file_to_hex($pub); + print OUT_FILE "};\n"; + print OUT_FILE "#define sizeof_bench_mldsa_${n}_pubkey (sizeof(bench_mldsa_${n}_pubkey))\n"; + print OUT_FILE "#endif /* !WOLFSSL_MLDSA_NO_VERIFY */\n\n"; +} + +print OUT_FILE "#endif /* WOLFSSL_HAVE_MLDSA */\n\n"; -"; # ML-DSA test key material encoded per the IETF LAMPS WG profile: # SubjectPublicKeyInfo for public keys, PKCS#8 PrivateKeyInfo for diff --git a/scripts/asn1_oid_sum.pl b/scripts/asn1_oid_sum.pl index 3f2a0a51f4..8df6545f02 100755 --- a/scripts/asn1_oid_sum.pl +++ b/scripts/asn1_oid_sum.pl @@ -170,6 +170,25 @@ sub print_sum_enum { print_enum($_[0] . "_Sum", $_[1], $_[2], 32, 48); } +# Emit legacy ML-DSA "LEVEL{2,3,5}" #define aliases for an enum whose +# canonical entries use the FIPS 204 parameter-set numbers (44/65/87). +# Required for source-level back-compat with code written before the +# pre-standardization Dilithium identifiers were renamed. +# $_[0] - canonical prefix (e.g. "ML_DSA_", "CTC_ML_DSA_") +# $_[1] - canonical suffix appended to each entry (e.g. "k", "") +sub print_mldsa_legacy_aliases { + my $prefix = $_[0]; + my $suffix = $_[1]; + + print "#ifndef WOLFSSL_NO_DILITHIUM_LEGACY_NAMES\n"; + print "/* Legacy LEVEL2/3/5 spellings for the pre-standardization names. Will\n"; + print " * be removed alongside the dilithium.h shim. */\n"; + print "#define ${prefix}LEVEL2${suffix} ${prefix}44${suffix}\n"; + print "#define ${prefix}LEVEL3${suffix} ${prefix}65${suffix}\n"; + print "#define ${prefix}LEVEL5${suffix} ${prefix}87${suffix}\n"; + print "#endif\n\n"; +} + sub print_header { my $t = Time::Piece->new(); @@ -336,9 +355,9 @@ sub print_footer { { name => "DILITHIUM_LEVEL2", oid => \@dilithium_2 }, { name => "DILITHIUM_LEVEL3", oid => \@dilithium_3 }, { name => "DILITHIUM_LEVEL5", oid => \@dilithium_5 }, - { name => "ML_DSA_LEVEL2", oid => \@mldsa_2 }, - { name => "ML_DSA_LEVEL3", oid => \@mldsa_3 }, - { name => "ML_DSA_LEVEL5", oid => \@mldsa_5 }, + { name => "ML_DSA_44", oid => \@mldsa_2 }, + { name => "ML_DSA_65", oid => \@mldsa_3 }, + { name => "ML_DSA_87", oid => \@mldsa_5 }, { name => "SLH_DSA_SHA2_128S", oid => \@slhdsa_sha2_128s }, { name => "SLH_DSA_SHA2_128F", oid => \@slhdsa_sha2_128f }, { name => "SLH_DSA_SHA2_192S", oid => \@slhdsa_sha2_192s }, @@ -357,6 +376,7 @@ sub print_footer { ); print_sum_enum("Key", "k", \@keys); +print_mldsa_legacy_aliases("ML_DSA_", "k"); my @aes128_kw = ( 2, 16, 840, 1, 101, 3, 4, 1, 5 ); @@ -1137,11 +1157,11 @@ sub print_footer { same => 1 }, { name => "CTC_DILITHIUM_LEVEL5", oid => \@dilithium_5, same => 1 }, - { name => "CTC_ML_DSA_LEVEL2", oid => \@mldsa_2, + { name => "CTC_ML_DSA_44", oid => \@mldsa_2, same => 1 }, - { name => "CTC_ML_DSA_LEVEL3", oid => \@mldsa_3, + { name => "CTC_ML_DSA_65", oid => \@mldsa_3, same => 1 }, - { name => "CTC_ML_DSA_LEVEL5", oid => \@mldsa_5, + { name => "CTC_ML_DSA_87", oid => \@mldsa_5, same => 1 }, { name => "CTC_SLH_DSA_SHA2_128S", oid => \@slhdsa_sha2_128s, same => 1 }, @@ -1176,6 +1196,7 @@ sub print_footer { ); print_enum("Ctc_SigType", "", \@sig_types, 32, 48); +print_mldsa_legacy_aliases("CTC_ML_DSA_", ""); my @p7t_pkcs7_msg = ( 1, 2, 840, 113549, 1, 7 ); diff --git a/src/internal.c b/src/internal.c index eaa98dae7b..8b34e20c37 100644 --- a/src/internal.c +++ b/src/internal.c @@ -2313,11 +2313,11 @@ int InitSSL_Side(WOLFSSL* ssl, word16 side) ssl->options.haveFalconSig = 1; /* always on client side */ } #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM +#ifdef WOLFSSL_HAVE_MLDSA if (ssl->options.side == WOLFSSL_CLIENT_END) { - ssl->options.haveDilithiumSig = 1; /* always on client side */ + ssl->options.haveMlDsaSig = 1; /* always on client side */ } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #if defined(HAVE_EXTENDED_MASTER) && !defined(NO_WOLFSSL_CLIENT) if (ssl->options.side == WOLFSSL_CLIENT_END) { @@ -2658,9 +2658,9 @@ int InitSSL_Ctx(WOLFSSL_CTX* ctx, WOLFSSL_METHOD* method, void* heap) #ifdef HAVE_FALCON ctx->minFalconKeySz = MIN_FALCONKEY_SZ; #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM - ctx->minDilithiumKeySz = MIN_DILITHIUMKEY_SZ; -#endif /* HAVE_DILITHIUM */ +#ifdef WOLFSSL_HAVE_MLDSA + ctx->minMlDsaKeySz = MIN_MLDSAKEY_SZ; +#endif /* WOLFSSL_HAVE_MLDSA */ ctx->verifyDepth = MAX_CHAIN_DEPTH; #ifdef OPENSSL_EXTRA ctx->cbioFlag = WOLFSSL_CBIO_NONE; @@ -2731,11 +2731,11 @@ int InitSSL_Ctx(WOLFSSL_CTX* ctx, WOLFSSL_METHOD* method, void* heap) ctx->haveFalconSig = 1; /* always on client side */ /* server can turn on by loading key */ #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM +#ifdef WOLFSSL_HAVE_MLDSA if (method->side == WOLFSSL_CLIENT_END) - ctx->haveDilithiumSig = 1; /* always on client side */ + ctx->haveMlDsaSig = 1; /* always on client side */ /* server can turn on by loading key */ -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #ifdef HAVE_ECC if (method->side == WOLFSSL_CLIENT_END) { ctx->haveECDSAsig = 1; /* always on client side */ @@ -3415,23 +3415,23 @@ static WC_INLINE void AddSuiteHashSigAlgo(byte* hashSigAlgo, byte macAlgo, } else #endif /* HAVE_FALCON */ - #ifdef HAVE_DILITHIUM - if (sigAlgo == dilithium_level2_sa_algo) { + #ifdef WOLFSSL_HAVE_MLDSA + if (sigAlgo == mldsa_44_sa_algo) { ADD_HASH_SIG_ALGO(hashSigAlgo, inOutIdx, - DILITHIUM_LEVEL2_SA_MAJOR, DILITHIUM_LEVEL2_SA_MINOR); + MLDSA_44_SA_MAJOR, MLDSA_44_SA_MINOR); } else - if (sigAlgo == dilithium_level3_sa_algo) { + if (sigAlgo == mldsa_65_sa_algo) { ADD_HASH_SIG_ALGO(hashSigAlgo, inOutIdx, - DILITHIUM_LEVEL3_SA_MAJOR, DILITHIUM_LEVEL3_SA_MINOR); + MLDSA_65_SA_MAJOR, MLDSA_65_SA_MINOR); } else - if (sigAlgo == dilithium_level5_sa_algo) { + if (sigAlgo == mldsa_87_sa_algo) { ADD_HASH_SIG_ALGO(hashSigAlgo, inOutIdx, - DILITHIUM_LEVEL5_SA_MAJOR, DILITHIUM_LEVEL5_SA_MINOR); + MLDSA_87_SA_MAJOR, MLDSA_87_SA_MINOR); } else - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WC_RSA_PSS if (sigAlgo == rsa_pss_sa_algo) { /* RSA PSS is sig then mac */ @@ -3536,16 +3536,16 @@ void InitSuitesHashSigAlgo(byte* hashSigAlgo, int haveSig, int tls1_2, &idx); } #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM - if (haveSig & SIG_DILITHIUM) { - AddSuiteHashSigAlgo(hashSigAlgo, no_mac, dilithium_level2_sa_algo, +#ifdef WOLFSSL_HAVE_MLDSA + if (haveSig & SIG_MLDSA) { + AddSuiteHashSigAlgo(hashSigAlgo, no_mac, mldsa_44_sa_algo, keySz, &idx); - AddSuiteHashSigAlgo(hashSigAlgo, no_mac, dilithium_level3_sa_algo, + AddSuiteHashSigAlgo(hashSigAlgo, no_mac, mldsa_65_sa_algo, keySz, &idx); - AddSuiteHashSigAlgo(hashSigAlgo, no_mac, dilithium_level5_sa_algo, + AddSuiteHashSigAlgo(hashSigAlgo, no_mac, mldsa_87_sa_algo, keySz, &idx); } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ if (haveSig & SIG_RSA) { #ifdef WC_RSA_PSS if (tls1_2) { @@ -4784,22 +4784,22 @@ void DecodeSigAlg(const byte* input, byte* hashAlgo, byte* hsType) } break; #endif /* HAVE_FALCON */ - #ifdef HAVE_DILITHIUM - case DILITHIUM_SA_MAJOR: - if (input[1] == DILITHIUM_LEVEL2_SA_MINOR) { - *hsType = dilithium_level2_sa_algo; + #ifdef WOLFSSL_HAVE_MLDSA + case MLDSA_SA_MAJOR: + if (input[1] == MLDSA_44_SA_MINOR) { + *hsType = mldsa_44_sa_algo; *hashAlgo = sha256_mac; } - else if (input[1] == DILITHIUM_LEVEL3_SA_MINOR) { - *hsType = dilithium_level3_sa_algo; + else if (input[1] == MLDSA_65_SA_MINOR) { + *hsType = mldsa_65_sa_algo; *hashAlgo = sha384_mac; } - else if (input[1] == DILITHIUM_LEVEL5_SA_MINOR) { - *hsType = dilithium_level5_sa_algo; + else if (input[1] == MLDSA_87_SA_MINOR) { + *hsType = mldsa_87_sa_algo; *hashAlgo = sha512_mac; } break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ default: *hashAlgo = input[0]; *hsType = input[1]; @@ -7180,7 +7180,7 @@ int SetSSL_CTX(WOLFSSL* ssl, WOLFSSL_CTX* ctx, int writeDup) ssl->options.haveECC = ctx->haveECC; ssl->options.haveStaticECC = ctx->haveStaticECC; ssl->options.haveFalconSig = ctx->haveFalconSig; - ssl->options.haveDilithiumSig = ctx->haveDilithiumSig; + ssl->options.haveMlDsaSig = ctx->haveMlDsaSig; #ifndef NO_PSK ssl->options.havePSK = (word16)(ctx->havePSK); @@ -7217,9 +7217,9 @@ int SetSSL_CTX(WOLFSSL* ssl, WOLFSSL_CTX* ctx, int writeDup) #ifdef HAVE_FALCON ssl->options.minFalconKeySz = ctx->minFalconKeySz; #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM - ssl->options.minDilithiumKeySz = ctx->minDilithiumKeySz; -#endif /* HAVE_DILITHIUM */ +#ifdef WOLFSSL_HAVE_MLDSA + ssl->options.minMlDsaKeySz = ctx->minMlDsaKeySz; +#endif /* WOLFSSL_HAVE_MLDSA */ #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) ssl->options.verifyDepth = ctx->verifyDepth; #endif @@ -8363,11 +8363,11 @@ void FreeKey(WOLFSSL* ssl, int type, void** pKey) wc_falcon_free((falcon_key*)*pKey); break; #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - case DYNAMIC_TYPE_DILITHIUM: - wc_dilithium_free((dilithium_key*)*pKey); + #if defined(WOLFSSL_HAVE_MLDSA) + case DYNAMIC_TYPE_MLDSA: + wc_MlDsaKey_Free((wc_MlDsaKey*)*pKey); break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #ifndef NO_DH case DYNAMIC_TYPE_DH: #if defined(WC_DH_NONBLOCK) && defined(WOLFSSL_ASYNC_CRYPT_SW) && \ @@ -8471,11 +8471,11 @@ int AllocKey(WOLFSSL* ssl, int type, void** pKey) sz = sizeof(falcon_key); break; #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - case DYNAMIC_TYPE_DILITHIUM: - sz = sizeof(dilithium_key); + #if defined(WOLFSSL_HAVE_MLDSA) + case DYNAMIC_TYPE_MLDSA: + sz = sizeof(wc_MlDsaKey); break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #ifndef NO_DH case DYNAMIC_TYPE_DH: sz = sizeof(DhKey); @@ -8588,12 +8588,12 @@ int AllocKey(WOLFSSL* ssl, int type, void** pKey) ret = 0; break; #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - case DYNAMIC_TYPE_DILITHIUM: - wc_dilithium_init_ex((dilithium_key*)*pKey, ssl->heap, ssl->devId); + #if defined(WOLFSSL_HAVE_MLDSA) + case DYNAMIC_TYPE_MLDSA: + wc_MlDsaKey_Init((wc_MlDsaKey*)*pKey, ssl->heap, ssl->devId); ret = 0; break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #ifdef HAVE_CURVE448 case DYNAMIC_TYPE_CURVE448: wc_curve448_init((curve448_key*)*pKey); @@ -8639,7 +8639,7 @@ int AllocKey(WOLFSSL* ssl, int type, void** pKey) #if !defined(NO_RSA) || defined(HAVE_ECC) || defined(HAVE_ED25519) || \ defined(HAVE_CURVE25519) || defined(HAVE_ED448) || \ - defined(HAVE_CURVE448) || defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) + defined(HAVE_CURVE448) || defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) static int ReuseKey(WOLFSSL* ssl, int type, void* pKey) { int ret = 0; @@ -8691,12 +8691,12 @@ static int ReuseKey(WOLFSSL* ssl, int type, void* pKey) ret = wc_falcon_init((falcon_key*)pKey); break; #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - case DYNAMIC_TYPE_DILITHIUM: - wc_dilithium_free((dilithium_key*)pKey); - ret = wc_dilithium_init((dilithium_key*)pKey); + #if defined(WOLFSSL_HAVE_MLDSA) + case DYNAMIC_TYPE_MLDSA: + wc_MlDsaKey_Free((wc_MlDsaKey*)pKey); + ret = wc_MlDsaKey_Init((wc_MlDsaKey*)pKey, NULL, INVALID_DEVID); break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #ifndef NO_DH case DYNAMIC_TYPE_DH: wc_FreeDhKey((DhKey*)pKey); @@ -9036,9 +9036,9 @@ void wolfSSL_ResourceFree(WOLFSSL* ssl) } #endif #endif -#if defined(HAVE_DILITHIUM) - FreeKey(ssl, DYNAMIC_TYPE_DILITHIUM, (void**)&ssl->peerDilithiumKey); - ssl->peerDilithiumKeyPresent = 0; +#if defined(WOLFSSL_HAVE_MLDSA) + FreeKey(ssl, DYNAMIC_TYPE_MLDSA, (void**)&ssl->peerMlDsaKey); + ssl->peerMlDsaKeyPresent = 0; #endif #if defined(HAVE_FALCON) FreeKey(ssl, DYNAMIC_TYPE_FALCON, (void**)&ssl->peerFalconKey); @@ -9317,10 +9317,10 @@ void FreeHandshakeResources(WOLFSSL* ssl) FreeKey(ssl, DYNAMIC_TYPE_FALCON, (void**)&ssl->peerFalconKey); ssl->peerFalconKeyPresent = 0; #endif /* HAVE_FALCON */ -#if defined(HAVE_DILITHIUM) - FreeKey(ssl, DYNAMIC_TYPE_DILITHIUM, (void**)&ssl->peerDilithiumKey); - ssl->peerDilithiumKeyPresent = 0; -#endif /* HAVE_DILITHIUM */ +#if defined(WOLFSSL_HAVE_MLDSA) + FreeKey(ssl, DYNAMIC_TYPE_MLDSA, (void**)&ssl->peerMlDsaKey); + ssl->peerMlDsaKeyPresent = 0; +#endif /* WOLFSSL_HAVE_MLDSA */ } #ifdef HAVE_ECC @@ -15781,58 +15781,58 @@ static int ProcessPeerCertCheckKey(WOLFSSL* ssl, ProcPeerCertArgs* args) } break; #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: - if (ssl->options.minDilithiumKeySz < 0 || - DILITHIUM_LEVEL2_KEY_SIZE - < (word16)ssl->options.minDilithiumKeySz) { - WOLFSSL_MSG("Dilithium key size in cert chain error"); - ret = DILITHIUM_KEY_SIZE_E; + if (ssl->options.minMlDsaKeySz < 0 || + WC_MLDSA_44_KEY_SIZE + < (word16)ssl->options.minMlDsaKeySz) { + WOLFSSL_MSG("ML-DSA key size in cert chain error"); + ret = MLDSA_KEY_SIZE_E; } break; case DILITHIUM_LEVEL3k: - if (ssl->options.minDilithiumKeySz < 0 || - DILITHIUM_LEVEL3_KEY_SIZE - < (word16)ssl->options.minDilithiumKeySz) { - WOLFSSL_MSG( "Dilithium key size in cert chain error"); - ret = DILITHIUM_KEY_SIZE_E; + if (ssl->options.minMlDsaKeySz < 0 || + WC_MLDSA_65_KEY_SIZE + < (word16)ssl->options.minMlDsaKeySz) { + WOLFSSL_MSG("ML-DSA key size in cert chain error"); + ret = MLDSA_KEY_SIZE_E; } break; case DILITHIUM_LEVEL5k: - if (ssl->options.minDilithiumKeySz < 0 || - DILITHIUM_LEVEL5_KEY_SIZE - < (word16)ssl->options.minDilithiumKeySz) { - WOLFSSL_MSG("Dilithium key size in cert chain error"); - ret = DILITHIUM_KEY_SIZE_E; + if (ssl->options.minMlDsaKeySz < 0 || + WC_MLDSA_87_KEY_SIZE + < (word16)ssl->options.minMlDsaKeySz) { + WOLFSSL_MSG("ML-DSA key size in cert chain error"); + ret = MLDSA_KEY_SIZE_E; } break; - #endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ - case ML_DSA_LEVEL2k: - if (ssl->options.minDilithiumKeySz < 0 || - ML_DSA_LEVEL2_KEY_SIZE - < (word16)ssl->options.minDilithiumKeySz) { - WOLFSSL_MSG("Dilithium key size in cert chain error"); - ret = DILITHIUM_KEY_SIZE_E; + #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ + case ML_DSA_44k: + if (ssl->options.minMlDsaKeySz < 0 || + WC_MLDSA_44_KEY_SIZE + < (word16)ssl->options.minMlDsaKeySz) { + WOLFSSL_MSG("ML-DSA key size in cert chain error"); + ret = MLDSA_KEY_SIZE_E; } break; - case ML_DSA_LEVEL3k: - if (ssl->options.minDilithiumKeySz < 0 || - ML_DSA_LEVEL3_KEY_SIZE - < (word16)ssl->options.minDilithiumKeySz) { - WOLFSSL_MSG( "Dilithium key size in cert chain error"); - ret = DILITHIUM_KEY_SIZE_E; + case ML_DSA_65k: + if (ssl->options.minMlDsaKeySz < 0 || + WC_MLDSA_65_KEY_SIZE + < (word16)ssl->options.minMlDsaKeySz) { + WOLFSSL_MSG("ML-DSA key size in cert chain error"); + ret = MLDSA_KEY_SIZE_E; } break; - case ML_DSA_LEVEL5k: - if (ssl->options.minDilithiumKeySz < 0 || - ML_DSA_LEVEL5_KEY_SIZE - < (word16)ssl->options.minDilithiumKeySz) { - WOLFSSL_MSG("Dilithium key size in cert chain error"); - ret = DILITHIUM_KEY_SIZE_E; + case ML_DSA_87k: + if (ssl->options.minMlDsaKeySz < 0 || + WC_MLDSA_87_KEY_SIZE + < (word16)ssl->options.minMlDsaKeySz) { + WOLFSSL_MSG("ML-DSA key size in cert chain error"); + ret = MLDSA_KEY_SIZE_E; } break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ default: WOLFSSL_MSG("Key size not checked"); /* key not being checked for size if not in @@ -17562,79 +17562,79 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx, break; } #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - case ML_DSA_LEVEL2k: - case ML_DSA_LEVEL3k: - case ML_DSA_LEVEL5k: - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) + case ML_DSA_44k: + case ML_DSA_65k: + case ML_DSA_87k: + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: case DILITHIUM_LEVEL3k: case DILITHIUM_LEVEL5k: #endif { int keyRet = 0; - if (ssl->peerDilithiumKey == NULL) { + if (ssl->peerMlDsaKey == NULL) { /* alloc/init on demand */ - keyRet = AllocKey(ssl, DYNAMIC_TYPE_DILITHIUM, - (void**)&ssl->peerDilithiumKey); - } else if (ssl->peerDilithiumKeyPresent) { - keyRet = ReuseKey(ssl, DYNAMIC_TYPE_DILITHIUM, - ssl->peerDilithiumKey); - ssl->peerDilithiumKeyPresent = 0; + keyRet = AllocKey(ssl, DYNAMIC_TYPE_MLDSA, + (void**)&ssl->peerMlDsaKey); + } else if (ssl->peerMlDsaKeyPresent) { + keyRet = ReuseKey(ssl, DYNAMIC_TYPE_MLDSA, + ssl->peerMlDsaKey); + ssl->peerMlDsaKeyPresent = 0; } if (keyRet == 0) { - if (args->dCert->keyOID == ML_DSA_LEVEL2k) { - keyRet = wc_dilithium_set_level( - ssl->peerDilithiumKey, WC_ML_DSA_44); + if (args->dCert->keyOID == ML_DSA_44k) { + keyRet = wc_MlDsaKey_SetParams( + ssl->peerMlDsaKey, WC_ML_DSA_44); } - else if (args->dCert->keyOID == ML_DSA_LEVEL3k) { - keyRet = wc_dilithium_set_level( - ssl->peerDilithiumKey, WC_ML_DSA_65); + else if (args->dCert->keyOID == ML_DSA_65k) { + keyRet = wc_MlDsaKey_SetParams( + ssl->peerMlDsaKey, WC_ML_DSA_65); } - else if (args->dCert->keyOID == ML_DSA_LEVEL5k) { - keyRet = wc_dilithium_set_level( - ssl->peerDilithiumKey, WC_ML_DSA_87); + else if (args->dCert->keyOID == ML_DSA_87k) { + keyRet = wc_MlDsaKey_SetParams( + ssl->peerMlDsaKey, WC_ML_DSA_87); } - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT else if (args->dCert->keyOID == DILITHIUM_LEVEL2k) { - keyRet = wc_dilithium_set_level( - ssl->peerDilithiumKey, WC_ML_DSA_44_DRAFT); + keyRet = wc_MlDsaKey_SetParams( + ssl->peerMlDsaKey, WC_ML_DSA_44_DRAFT); } else if (args->dCert->keyOID == DILITHIUM_LEVEL3k) { - keyRet = wc_dilithium_set_level( - ssl->peerDilithiumKey, WC_ML_DSA_65_DRAFT); + keyRet = wc_MlDsaKey_SetParams( + ssl->peerMlDsaKey, WC_ML_DSA_65_DRAFT); } else if (args->dCert->keyOID == DILITHIUM_LEVEL5k) { - keyRet = wc_dilithium_set_level( - ssl->peerDilithiumKey, WC_ML_DSA_87_DRAFT); + keyRet = wc_MlDsaKey_SetParams( + ssl->peerMlDsaKey, WC_ML_DSA_87_DRAFT); } #endif } if (keyRet != 0 || - wc_dilithium_import_public(args->dCert->publicKey, - args->dCert->pubKeySize, - ssl->peerDilithiumKey) + wc_MlDsaKey_ImportPubRaw(ssl->peerMlDsaKey, + args->dCert->publicKey, + args->dCert->pubKeySize) != 0) { ret = PEER_KEY_ERROR; } else { - ssl->peerDilithiumKeyPresent = 1; + ssl->peerMlDsaKeyPresent = 1; } /* check size of peer Dilithium key */ - if (ret == 0 && ssl->peerDilithiumKeyPresent && + if (ret == 0 && ssl->peerMlDsaKeyPresent && !ssl->options.verifyNone && - DILITHIUM_MAX_KEY_SIZE < - ssl->options.minDilithiumKeySz) { - ret = DILITHIUM_KEY_SIZE_E; - WOLFSSL_MSG("Peer Dilithium key is too small"); + MLDSA_MAX_KEY_SIZE < + ssl->options.minMlDsaKeySz) { + ret = MLDSA_KEY_SIZE_E; + WOLFSSL_MSG("Peer ML-DSA key is too small"); } break; } - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ default: break; } @@ -27939,8 +27939,8 @@ const char* wolfSSL_ERR_reason_error_string(unsigned long e) case FALCON_KEY_SIZE_E: return "Wrong key size for Falcon."; - case DILITHIUM_KEY_SIZE_E: - return "Wrong key size for Dilithium."; + case MLDSA_KEY_SIZE_E: + return "Wrong key size for ML-DSA."; case QUIC_TP_MISSING_E: return "QUIC transport parameter not set"; @@ -29398,9 +29398,9 @@ static int ParseCipherList(Suites* suites, #ifdef HAVE_FALCON haveSig |= SIG_FALCON; #endif /* HAVE_FALCON */ - #ifdef HAVE_DILITHIUM - haveSig |= SIG_DILITHIUM; - #endif /* HAVE_DILITHIUM */ + #ifdef WOLFSSL_HAVE_MLDSA + haveSig |= SIG_MLDSA; + #endif /* WOLFSSL_HAVE_MLDSA */ } else #ifdef BUILD_TLS_SM4_GCM_SM3 @@ -29566,7 +29566,7 @@ int SetCipherListFromBytes(WOLFSSL_CTX* ctx, Suites* suites, const byte* list, int haveRSAsig = 0; int haveECDSAsig = 0; int haveFalconSig = 0; - int haveDilithiumSig = 0; + int haveMlDsaSig = 0; int haveAnon = 0; int tls1_3 = 0; @@ -29638,9 +29638,9 @@ int SetCipherListFromBytes(WOLFSSL_CTX* ctx, Suites* suites, const byte* list, #ifdef HAVE_FALCON haveFalconSig = 1; #endif /* HAVE_FALCON */ - #ifdef HAVE_DILITHIUM - haveDilithiumSig = 1; - #endif /* HAVE_DILITHIUM */ + #ifdef WOLFSSL_HAVE_MLDSA + haveMlDsaSig = 1; + #endif /* WOLFSSL_HAVE_MLDSA */ } else #endif /* WOLFSSL_TLS13 */ @@ -29678,7 +29678,7 @@ int SetCipherListFromBytes(WOLFSSL_CTX* ctx, Suites* suites, const byte* list, #endif haveSig |= haveRSAsig ? SIG_RSA : 0; haveSig |= haveFalconSig ? SIG_FALCON : 0; - haveSig |= haveDilithiumSig ? SIG_DILITHIUM : 0; + haveSig |= haveMlDsaSig ? SIG_MLDSA : 0; haveSig |= haveAnon ? SIG_ANON : 0; InitSuitesHashSigAlgo(suites->hashSigAlgo, haveSig, 1, tls1_3, keySz, &suites->hashSigAlgoSz); @@ -29903,34 +29903,34 @@ static int MatchSigAlgo(WOLFSSL* ssl, int sigAlgo) return sigAlgo == falcon_level5_sa_algo; } #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT if (ssl->pkCurveOID == CTC_DILITHIUM_LEVEL2) { /* Certificate has Dilithium level 2 key, only match with it. */ - return sigAlgo == dilithium_level2_sa_algo; + return sigAlgo == mldsa_44_sa_algo; } if (ssl->pkCurveOID == CTC_DILITHIUM_LEVEL3) { /* Certificate has Dilithium level 3 key, only match with it. */ - return sigAlgo == dilithium_level3_sa_algo; + return sigAlgo == mldsa_65_sa_algo; } if (ssl->pkCurveOID == CTC_DILITHIUM_LEVEL5) { /* Certificate has Dilithium level 5 key, only match with it. */ - return sigAlgo == dilithium_level5_sa_algo; + return sigAlgo == mldsa_87_sa_algo; } - #endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ - if (ssl->pkCurveOID == CTC_ML_DSA_LEVEL2) { + #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ + if (ssl->pkCurveOID == CTC_ML_DSA_44) { /* Certificate has ML-DSA level 2 key, only match with it. */ - return sigAlgo == dilithium_level2_sa_algo; + return sigAlgo == mldsa_44_sa_algo; } - if (ssl->pkCurveOID == CTC_ML_DSA_LEVEL3) { + if (ssl->pkCurveOID == CTC_ML_DSA_65) { /* Certificate has ML-DSA level 3 key, only match with it. */ - return sigAlgo == dilithium_level3_sa_algo; + return sigAlgo == mldsa_65_sa_algo; } - if (ssl->pkCurveOID == CTC_ML_DSA_LEVEL5) { + if (ssl->pkCurveOID == CTC_ML_DSA_87) { /* Certificate has ML-DSA level 5 key, only match with it. */ - return sigAlgo == dilithium_level5_sa_algo; + return sigAlgo == mldsa_87_sa_algo; } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WC_RSA_PSS /* RSA certificate and PSS sig alg. */ if (ssl->options.sigAlgo == rsa_sa_algo) { @@ -30126,15 +30126,15 @@ int PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo, word32 hashSigAlgoSz, break; } #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - if (ssl->pkCurveOID == CTC_ML_DSA_LEVEL2 || - ssl->pkCurveOID == CTC_ML_DSA_LEVEL3 || - ssl->pkCurveOID == CTC_ML_DSA_LEVEL5 - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) + if (ssl->pkCurveOID == CTC_ML_DSA_44 || + ssl->pkCurveOID == CTC_ML_DSA_65 || + ssl->pkCurveOID == CTC_ML_DSA_87 + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT || ssl->pkCurveOID == CTC_DILITHIUM_LEVEL2 || ssl->pkCurveOID == CTC_DILITHIUM_LEVEL3 || ssl->pkCurveOID == CTC_DILITHIUM_LEVEL5 - #endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ + #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ ) { /* Matched ML-DSA or Dilithium - set chosen and finished. */ ssl->options.sigAlgo = sigAlgo; @@ -30142,7 +30142,7 @@ int PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo, word32 hashSigAlgoSz, ret = 0; break; } - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #if defined(HAVE_ECC_BRAINPOOL) if (ssl->pkCurveOID == ECC_BRAINPOOLP256R1_OID || ssl->pkCurveOID == ECC_BRAINPOOLP384R1_OID || @@ -30560,28 +30560,28 @@ int CreateDevPrivateKey(void** pkey, byte* data, word32 length, int hsType, } #endif } - else if (hsType == DYNAMIC_TYPE_DILITHIUM) { -#if defined(HAVE_DILITHIUM) - dilithium_key* dilithiumKey; + else if (hsType == DYNAMIC_TYPE_MLDSA) { +#if defined(WOLFSSL_HAVE_MLDSA) + wc_MlDsaKey* mldsaKey; - dilithiumKey = (dilithium_key*)XMALLOC(sizeof(dilithium_key), heap, - DYNAMIC_TYPE_DILITHIUM); - if (dilithiumKey == NULL) { + mldsaKey = (wc_MlDsaKey*)XMALLOC(sizeof(wc_MlDsaKey), heap, + DYNAMIC_TYPE_MLDSA); + if (mldsaKey == NULL) { return MEMORY_E; } if (label) { - ret = wc_dilithium_init_label(dilithiumKey, (char*)data, + ret = wc_MlDsaKey_InitLabel(mldsaKey, (char*)data, heap, devId); } else if (id) { - ret = wc_dilithium_init_id(dilithiumKey, data, length, heap, devId); + ret = wc_MlDsaKey_InitId(mldsaKey, data, length, heap, devId); } if (ret == 0) { - *pkey = (void*)dilithiumKey; + *pkey = (void*)mldsaKey; } else { - XFREE(dilithiumKey, heap, DYNAMIC_TYPE_DILITHIUM); + XFREE(mldsaKey, heap, DYNAMIC_TYPE_MLDSA); } #endif } @@ -30668,10 +30668,10 @@ static int DecodePrivateKey_ex(WOLFSSL *ssl, byte keyType, const DerBuffer* key, else if ((keyType == falcon_level1_sa_algo) || (keyType == falcon_level5_sa_algo)) *hsType = DYNAMIC_TYPE_FALCON; - else if ((keyType == dilithium_level2_sa_algo) || - (keyType == dilithium_level3_sa_algo) || - (keyType == dilithium_level5_sa_algo)) - *hsType = DYNAMIC_TYPE_DILITHIUM; + else if ((keyType == mldsa_44_sa_algo) || + (keyType == mldsa_65_sa_algo) || + (keyType == mldsa_87_sa_algo)) + *hsType = DYNAMIC_TYPE_MLDSA; /* Create the private key */ ret = CreateDevPrivateKey(hsKey, key->buffer, @@ -30731,29 +30731,29 @@ static int DecodePrivateKey_ex(WOLFSSL *ssl, byte keyType, const DerBuffer* key, ret = NOT_COMPILED_IN; #endif } - else if (*hsType == DYNAMIC_TYPE_DILITHIUM) { - #if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_SIGN) - if (keyType == dilithium_level2_sa_algo) { - ret = wc_dilithium_set_level((dilithium_key*)*hsKey, + else if (*hsType == DYNAMIC_TYPE_MLDSA) { + #if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_SIGN) + if (keyType == mldsa_44_sa_algo) { + ret = wc_MlDsaKey_SetParams((wc_MlDsaKey*)*hsKey, WC_ML_DSA_44); } - else if (keyType == dilithium_level3_sa_algo) { - ret = wc_dilithium_set_level((dilithium_key*)*hsKey, + else if (keyType == mldsa_65_sa_algo) { + ret = wc_MlDsaKey_SetParams((wc_MlDsaKey*)*hsKey, WC_ML_DSA_65); } - else if (keyType == dilithium_level5_sa_algo) { - ret = wc_dilithium_set_level((dilithium_key*)*hsKey, + else if (keyType == mldsa_87_sa_algo) { + ret = wc_MlDsaKey_SetParams((wc_MlDsaKey*)*hsKey, WC_ML_DSA_87); } if (ret == 0) { - if (keySz < ssl->options.minDilithiumKeySz) { - WOLFSSL_MSG("Dilithium key size too small"); - ERROR_OUT(DILITHIUM_KEY_SIZE_E, exit_dpk); + if (keySz < ssl->options.minMlDsaKeySz) { + WOLFSSL_MSG("ML-DSA key size too small"); + ERROR_OUT(MLDSA_KEY_SIZE_E, exit_dpk); } /* Return the maximum signature length. */ - *sigLen = wc_dilithium_sig_size((dilithium_key*)*hsKey); + *sigLen = wc_MlDsaKey_SigSize((wc_MlDsaKey*)*hsKey); } #else ret = NOT_COMPILED_IN; @@ -31030,31 +31030,31 @@ static int DecodePrivateKey_ex(WOLFSSL *ssl, byte keyType, const DerBuffer* key, } } #endif /* HAVE_FALCON */ -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ - !defined(WOLFSSL_DILITHIUM_NO_ASN1) +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_ASN1) #if !defined(NO_RSA) || defined(HAVE_ECC) FreeKey(ssl, *hsType, hsKey); #endif - if (keyType == dilithium_level2_sa_algo || - keyType == dilithium_level3_sa_algo || - keyType == dilithium_level5_sa_algo || + if (keyType == mldsa_44_sa_algo || + keyType == mldsa_65_sa_algo || + keyType == mldsa_87_sa_algo || keyType == 0) { - *hsType = DYNAMIC_TYPE_DILITHIUM; + *hsType = DYNAMIC_TYPE_MLDSA; ret = AllocKey(ssl, *hsType, hsKey); if (ret != 0) { goto exit_dpk; } - if (keyType == dilithium_level2_sa_algo) { - ret = wc_dilithium_set_level((dilithium_key*)*hsKey, WC_ML_DSA_44); + if (keyType == mldsa_44_sa_algo) { + ret = wc_MlDsaKey_SetParams((wc_MlDsaKey*)*hsKey, WC_ML_DSA_44); } - else if (keyType == dilithium_level3_sa_algo) { - ret = wc_dilithium_set_level((dilithium_key*)*hsKey, WC_ML_DSA_65); + else if (keyType == mldsa_65_sa_algo) { + ret = wc_MlDsaKey_SetParams((wc_MlDsaKey*)*hsKey, WC_ML_DSA_65); } - else if (keyType == dilithium_level5_sa_algo) { - ret = wc_dilithium_set_level((dilithium_key*)*hsKey, WC_ML_DSA_87); + else if (keyType == mldsa_87_sa_algo) { + ret = wc_MlDsaKey_SetParams((wc_MlDsaKey*)*hsKey, WC_ML_DSA_87); } else { /* What if keyType is 0? We might want to do something @@ -31066,39 +31066,39 @@ static int DecodePrivateKey_ex(WOLFSSL *ssl, byte keyType, const DerBuffer* key, goto exit_dpk; } - WOLFSSL_MSG("Trying Dilithium private key"); + WOLFSSL_MSG("Trying ML-DSA private key"); /* Set start of data to beginning of buffer. */ idx = 0; - /* Decode the key assuming it is a Dilithium private key. The FIPS - * wrapper for wc_dilithium_import_private gates on the per-thread + /* Decode the key assuming it is an ML-DSA private key. The FIPS + * wrapper for wc_MlDsaKey_ImportPrivRaw gates on the per-thread * privateKeyReadEnable flag, which is unset by default in any * thread that hasn't called PRIVATE_KEY_UNLOCK(). Without the - * bracket, decoding a Dilithium/ML-DSA private key from a - * handshake worker thread fails with FIPS_PRIVATE_KEY_LOCKED_E. */ + * bracket, decoding an ML-DSA private key from a handshake worker + * thread fails with FIPS_PRIVATE_KEY_LOCKED_E. */ PRIVATE_KEY_UNLOCK(); - ret = wc_Dilithium_PrivateKeyDecode(key->buffer, - &idx, - (dilithium_key*)*hsKey, - key->length); + ret = wc_MlDsaKey_PrivateKeyDecode((wc_MlDsaKey*)*hsKey, + key->buffer, + key->length, + &idx); PRIVATE_KEY_LOCK(); if (ret == 0) { - WOLFSSL_MSG("Using Dilithium private key"); + WOLFSSL_MSG("Using ML-DSA private key"); - /* Check it meets the minimum Dilithium key size requirements. */ - keySzDecoded = wc_dilithium_size((dilithium_key*)*hsKey); - if (keySzDecoded < ssl->options.minDilithiumKeySz) { - WOLFSSL_MSG("Dilithium key size too small"); - ERROR_OUT(DILITHIUM_KEY_SIZE_E, exit_dpk); + /* Check it meets the minimum ML-DSA key size requirements. */ + keySzDecoded = wc_MlDsaKey_Size((wc_MlDsaKey*)*hsKey); + if (keySzDecoded < ssl->options.minMlDsaKeySz) { + WOLFSSL_MSG("ML-DSA key size too small"); + ERROR_OUT(MLDSA_KEY_SIZE_E, exit_dpk); } /* Return the maximum signature length. */ - *sigLen = wc_dilithium_sig_size((dilithium_key*)*hsKey); + *sigLen = wc_MlDsaKey_SigSize((wc_MlDsaKey*)*hsKey); goto exit_dpk; } } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ (void)idx; (void)keySzDecoded; diff --git a/src/ssl.c b/src/ssl.c index 7d3812d5f3..7130843454 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -115,9 +115,9 @@ #if defined(HAVE_FALCON) #include #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - #include - #endif /* HAVE_DILITHIUM */ + #if defined(WOLFSSL_HAVE_MLDSA) + #include + #endif /* WOLFSSL_HAVE_MLDSA */ #if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) #ifdef HAVE_OCSP #include @@ -8632,14 +8632,14 @@ int wolfSSL_set_compression(WOLFSSL* ssl) case falcon_level5_sa_algo: *sigAlgo = FALCON_LEVEL5k; break; - case dilithium_level2_sa_algo: - *sigAlgo = ML_DSA_LEVEL2k; + case mldsa_44_sa_algo: + *sigAlgo = ML_DSA_44k; break; - case dilithium_level3_sa_algo: - *sigAlgo = ML_DSA_LEVEL3k; + case mldsa_65_sa_algo: + *sigAlgo = ML_DSA_65k; break; - case dilithium_level5_sa_algo: - *sigAlgo = ML_DSA_LEVEL5k; + case mldsa_87_sa_algo: + *sigAlgo = ML_DSA_87k; break; case sm2_sa_algo: *sigAlgo = SM2k; @@ -13488,22 +13488,25 @@ const WOLFSSL_ObjectInfo wolfssl_object_info[] = { { CTC_FALCON_LEVEL5, FALCON_LEVEL5k, oidKeyType, "Falcon Level 5", "Falcon Level 5"}, #endif /* HAVE_FALCON */ - #ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + /* Pre-standardization (NIST PQC round 3) Dilithium OID labels. + * These coexist with the FIPS 204 "ML-DSA 44/65/87" entries below + * and are intentionally kept under the Dilithium name. */ { CTC_DILITHIUM_LEVEL2, DILITHIUM_LEVEL2k, oidKeyType, "Dilithium Level 2", "Dilithium Level 2"}, { CTC_DILITHIUM_LEVEL3, DILITHIUM_LEVEL3k, oidKeyType, "Dilithium Level 3", "Dilithium Level 3"}, { CTC_DILITHIUM_LEVEL5, DILITHIUM_LEVEL5k, oidKeyType, "Dilithium Level 5", "Dilithium Level 5"}, - #endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ - { CTC_ML_DSA_LEVEL2, ML_DSA_LEVEL2k, oidKeyType, + #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ + { CTC_ML_DSA_44, ML_DSA_44k, oidKeyType, "ML-DSA 44", "ML-DSA 44"}, - { CTC_ML_DSA_LEVEL3, ML_DSA_LEVEL3k, oidKeyType, + { CTC_ML_DSA_65, ML_DSA_65k, oidKeyType, "ML-DSA 65", "ML-DSA 65"}, - { CTC_ML_DSA_LEVEL5, ML_DSA_LEVEL5k, oidKeyType, + { CTC_ML_DSA_87, ML_DSA_87k, oidKeyType, "ML-DSA 87", "ML-DSA 87"}, - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ /* oidCurveType */ #ifdef HAVE_ECC @@ -13885,14 +13888,14 @@ static int SaToNid(byte sa, int* nid) case falcon_level5_sa_algo: *nid = CTC_FALCON_LEVEL5; break; - case dilithium_level2_sa_algo: - *nid = CTC_ML_DSA_LEVEL2; + case mldsa_44_sa_algo: + *nid = CTC_ML_DSA_44; break; - case dilithium_level3_sa_algo: - *nid = CTC_ML_DSA_LEVEL3; + case mldsa_65_sa_algo: + *nid = CTC_ML_DSA_65; break; - case dilithium_level5_sa_algo: - *nid = CTC_ML_DSA_LEVEL5; + case mldsa_87_sa_algo: + *nid = CTC_ML_DSA_87; break; case sm2_sa_algo: *nid = WC_NID_sm2; @@ -15993,7 +15996,7 @@ WOLFSSL_CTX* wolfSSL_set_SSL_CTX(WOLFSSL* ssl, WOLFSSL_CTX* ctx) ssl->options.haveECC = ctx->haveECC; ssl->options.haveStaticECC = ctx->haveStaticECC; ssl->options.haveFalconSig = ctx->haveFalconSig; - ssl->options.haveDilithiumSig = ctx->haveDilithiumSig; + ssl->options.haveMlDsaSig = ctx->haveMlDsaSig; #ifdef WOLFSSL_DUAL_ALG_CERTS #ifndef WOLFSSL_BLIND_PRIVATE_KEY ssl->buffers.altKey = ctx->altPrivateKey; diff --git a/src/ssl_api_pk.c b/src/ssl_api_pk.c index 06d0491b4e..1b42ac1493 100644 --- a/src/ssl_api_pk.c +++ b/src/ssl_api_pk.c @@ -72,16 +72,16 @@ static int check_cert_key_dev(word32 keyOID, byte* privKey, word32 privSz, type = DYNAMIC_TYPE_ECC; break; #endif - #if defined(HAVE_DILITHIUM) - case ML_DSA_LEVEL2k: - case ML_DSA_LEVEL3k: - case ML_DSA_LEVEL5k: - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) + case ML_DSA_44k: + case ML_DSA_65k: + case ML_DSA_87k: + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: case DILITHIUM_LEVEL3k: case DILITHIUM_LEVEL5k: #endif - type = DYNAMIC_TYPE_DILITHIUM; + type = DYNAMIC_TYPE_MLDSA; break; #endif #if defined(HAVE_FALCON) @@ -112,11 +112,11 @@ static int check_cert_key_dev(word32 keyOID, byte* privKey, word32 privSz, pubSz); break; #endif - #if defined(HAVE_DILITHIUM) - case ML_DSA_LEVEL2k: - case ML_DSA_LEVEL3k: - case ML_DSA_LEVEL5k: - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) + case ML_DSA_44k: + case ML_DSA_65k: + case ML_DSA_87k: + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: case DILITHIUM_LEVEL3k: case DILITHIUM_LEVEL5k: @@ -157,16 +157,16 @@ static int check_cert_key_dev(word32 keyOID, byte* privKey, word32 privSz, wc_ecc_free((ecc_key*)pkey); break; #endif - #if defined(HAVE_DILITHIUM) - case ML_DSA_LEVEL2k: - case ML_DSA_LEVEL3k: - case ML_DSA_LEVEL5k: - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) + case ML_DSA_44k: + case ML_DSA_65k: + case ML_DSA_87k: + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: case DILITHIUM_LEVEL3k: case DILITHIUM_LEVEL5k: #endif - wc_dilithium_free((dilithium_key*)pkey); + wc_MlDsaKey_Free((wc_MlDsaKey*)pkey); break; #endif #if defined(HAVE_FALCON) diff --git a/src/ssl_certman.c b/src/ssl_certman.c index fea526e5ef..d10e79d56f 100644 --- a/src/ssl_certman.c +++ b/src/ssl_certman.c @@ -158,9 +158,9 @@ WOLFSSL_CERT_MANAGER* wolfSSL_CertManagerNew_ex(void* heap) #ifdef HAVE_FALCON cm->minFalconKeySz = MIN_FALCONKEY_SZ; #endif /* HAVE_FALCON */ - #ifdef HAVE_DILITHIUM - cm->minDilithiumKeySz = MIN_DILITHIUMKEY_SZ; - #endif /* HAVE_DILITHIUM */ + #ifdef WOLFSSL_HAVE_MLDSA + cm->minMlDsaKeySz = MIN_MLDSAKEY_SZ; + #endif /* WOLFSSL_HAVE_MLDSA */ } /* Dispose of certificate manager on error. The reference count may not @@ -3145,52 +3145,52 @@ int AddCA(WOLFSSL_CERT_MANAGER* cm, DerBuffer** pDer, int type, int verify) } break; #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: - if (cm->minDilithiumKeySz < 0 || - DILITHIUM_LEVEL2_KEY_SIZE < (word16)cm->minDilithiumKeySz) { - ret = DILITHIUM_KEY_SIZE_E; - WOLFSSL_MSG("\tCA Dilithium level 2 key size error"); + if (cm->minMlDsaKeySz < 0 || + WC_MLDSA_44_KEY_SIZE < (word16)cm->minMlDsaKeySz) { + ret = MLDSA_KEY_SIZE_E; + WOLFSSL_MSG("\tCA ML-DSA level 2 key size error"); } break; case DILITHIUM_LEVEL3k: - if (cm->minDilithiumKeySz < 0 || - DILITHIUM_LEVEL3_KEY_SIZE < (word16)cm->minDilithiumKeySz) { - ret = DILITHIUM_KEY_SIZE_E; - WOLFSSL_MSG("\tCA Dilithium level 3 key size error"); + if (cm->minMlDsaKeySz < 0 || + WC_MLDSA_65_KEY_SIZE < (word16)cm->minMlDsaKeySz) { + ret = MLDSA_KEY_SIZE_E; + WOLFSSL_MSG("\tCA ML-DSA level 3 key size error"); } break; case DILITHIUM_LEVEL5k: - if (cm->minDilithiumKeySz < 0 || - DILITHIUM_LEVEL5_KEY_SIZE < (word16)cm->minDilithiumKeySz) { - ret = DILITHIUM_KEY_SIZE_E; - WOLFSSL_MSG("\tCA Dilithium level 5 key size error"); + if (cm->minMlDsaKeySz < 0 || + WC_MLDSA_87_KEY_SIZE < (word16)cm->minMlDsaKeySz) { + ret = MLDSA_KEY_SIZE_E; + WOLFSSL_MSG("\tCA ML-DSA level 5 key size error"); } break; - #endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ - case ML_DSA_LEVEL2k: - if (cm->minDilithiumKeySz < 0 || - ML_DSA_LEVEL2_KEY_SIZE < (word16)cm->minDilithiumKeySz) { - ret = DILITHIUM_KEY_SIZE_E; - WOLFSSL_MSG("\tCA Dilithium level 2 key size error"); + #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ + case ML_DSA_44k: + if (cm->minMlDsaKeySz < 0 || + WC_MLDSA_44_KEY_SIZE < (word16)cm->minMlDsaKeySz) { + ret = MLDSA_KEY_SIZE_E; + WOLFSSL_MSG("\tCA ML-DSA level 2 key size error"); } break; - case ML_DSA_LEVEL3k: - if (cm->minDilithiumKeySz < 0 || - ML_DSA_LEVEL3_KEY_SIZE < (word16)cm->minDilithiumKeySz) { - ret = DILITHIUM_KEY_SIZE_E; - WOLFSSL_MSG("\tCA Dilithium level 3 key size error"); + case ML_DSA_65k: + if (cm->minMlDsaKeySz < 0 || + WC_MLDSA_65_KEY_SIZE < (word16)cm->minMlDsaKeySz) { + ret = MLDSA_KEY_SIZE_E; + WOLFSSL_MSG("\tCA ML-DSA level 3 key size error"); } break; - case ML_DSA_LEVEL5k: - if (cm->minDilithiumKeySz < 0 || - ML_DSA_LEVEL5_KEY_SIZE < (word16)cm->minDilithiumKeySz) { - ret = DILITHIUM_KEY_SIZE_E; - WOLFSSL_MSG("\tCA Dilithium level 5 key size error"); + case ML_DSA_87k: + if (cm->minMlDsaKeySz < 0 || + WC_MLDSA_87_KEY_SIZE < (word16)cm->minMlDsaKeySz) { + ret = MLDSA_KEY_SIZE_E; + WOLFSSL_MSG("\tCA ML-DSA level 5 key size error"); } break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ default: WOLFSSL_MSG("\tNo key size check done on CA"); diff --git a/src/ssl_load.c b/src/ssl_load.c index f71ccf3467..888c578334 100644 --- a/src/ssl_load.c +++ b/src/ssl_load.c @@ -919,8 +919,8 @@ static int ProcessBufferTryDecodeFalcon(WOLFSSL_CTX* ctx, WOLFSSL* ssl, } #endif -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ - !defined(WOLFSSL_DILITHIUM_NO_ASN1) +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_ASN1) /* See if DER data is an Dilithium private key. * * Checks size meets minimum Falcon key size. @@ -934,69 +934,69 @@ static int ProcessBufferTryDecodeFalcon(WOLFSSL_CTX* ctx, WOLFSSL* ssl, * @param [out] keyType Type of key. * @param [out] keySize Size of key. * @return 0 on success or not a Dilithium key and format unknown. - * @return DILITHIUM_KEY_SIZE_E when key size doesn't meet minimum required. + * @return MLDSA_KEY_SIZE_E when key size doesn't meet minimum required. */ -static int ProcessBufferTryDecodeDilithium(WOLFSSL_CTX* ctx, WOLFSSL* ssl, +static int ProcessBufferTryDecodeMlDsa(WOLFSSL_CTX* ctx, WOLFSSL* ssl, DerBuffer* der, int* keyFormat, void* heap, byte* keyType, int* keySize) { int ret; word32 idx; - dilithium_key* key; + wc_MlDsaKey* key; int keyFormatTemp = 0; int keyTypeTemp = 0; int keySizeTemp = 0; /* Allocate a Dilithium key to parse into. */ - key = (dilithium_key*)XMALLOC(sizeof(dilithium_key), heap, - DYNAMIC_TYPE_DILITHIUM); + key = (wc_MlDsaKey*)XMALLOC(sizeof(wc_MlDsaKey), heap, + DYNAMIC_TYPE_MLDSA); if (key == NULL) { return MEMORY_E; } - /* Initialize Dilithium key. */ - ret = wc_dilithium_init(key); + /* Initialize ML-DSA key. */ + ret = wc_MlDsaKey_Init(key, NULL, INVALID_DEVID); if (ret == 0) { - /* Decode as a Dilithium private key. The FIPS wrapper for - * wc_dilithium_import_private gates on the per-thread + /* Decode as an ML-DSA private key. The FIPS wrapper for + * wc_MlDsaKey_ImportPrivRaw gates on the per-thread * privateKeyReadEnable flag, which is unset by default in any * thread that hasn't called PRIVATE_KEY_UNLOCK(). Without the - * bracket, loading a Dilithium/ML-DSA private key from a - * worker thread fails with FIPS_PRIVATE_KEY_LOCKED_E. */ + * bracket, loading an ML-DSA private key from a worker thread + * fails with FIPS_PRIVATE_KEY_LOCKED_E. */ idx = 0; PRIVATE_KEY_UNLOCK(); - ret = wc_Dilithium_PrivateKeyDecode(der->buffer, &idx, key, - der->length); + ret = wc_MlDsaKey_PrivateKeyDecode(key, der->buffer, + der->length, &idx); PRIVATE_KEY_LOCK(); if (ret == 0) { - ret = dilithium_get_oid_sum(key, &keyFormatTemp); + ret = mldsa_get_oid_sum(key, &keyFormatTemp); if (ret == 0) { /* Format is known. */ - #if defined(WOLFSSL_DILITHIUM_FIPS204_DRAFT) + #if defined(WOLFSSL_MLDSA_FIPS204_DRAFT) if (keyFormatTemp == DILITHIUM_LEVEL2k) { - keyTypeTemp = dilithium_level2_sa_algo; - keySizeTemp = DILITHIUM_LEVEL2_KEY_SIZE; + keyTypeTemp = mldsa_44_sa_algo; + keySizeTemp = WC_MLDSA_44_KEY_SIZE; } else if (keyFormatTemp == DILITHIUM_LEVEL3k) { - keyTypeTemp = dilithium_level3_sa_algo; - keySizeTemp = DILITHIUM_LEVEL3_KEY_SIZE; + keyTypeTemp = mldsa_65_sa_algo; + keySizeTemp = WC_MLDSA_65_KEY_SIZE; } else if (keyFormatTemp == DILITHIUM_LEVEL5k) { - keyTypeTemp = dilithium_level5_sa_algo; - keySizeTemp = DILITHIUM_LEVEL5_KEY_SIZE; + keyTypeTemp = mldsa_87_sa_algo; + keySizeTemp = WC_MLDSA_87_KEY_SIZE; } else - #endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ - if (keyFormatTemp == ML_DSA_LEVEL2k) { - keyTypeTemp = dilithium_level2_sa_algo; - keySizeTemp = ML_DSA_LEVEL2_KEY_SIZE; + #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ + if (keyFormatTemp == ML_DSA_44k) { + keyTypeTemp = mldsa_44_sa_algo; + keySizeTemp = WC_MLDSA_44_KEY_SIZE; } - else if (keyFormatTemp == ML_DSA_LEVEL3k) { - keyTypeTemp = dilithium_level3_sa_algo; - keySizeTemp = ML_DSA_LEVEL3_KEY_SIZE; + else if (keyFormatTemp == ML_DSA_65k) { + keyTypeTemp = mldsa_65_sa_algo; + keySizeTemp = WC_MLDSA_65_KEY_SIZE; } - else if (keyFormatTemp == ML_DSA_LEVEL5k) { - keyTypeTemp = dilithium_level5_sa_algo; - keySizeTemp = ML_DSA_LEVEL5_KEY_SIZE; + else if (keyFormatTemp == ML_DSA_87k) { + keyTypeTemp = mldsa_87_sa_algo; + keySizeTemp = WC_MLDSA_87_KEY_SIZE; } else { ret = ALGO_ID_E; @@ -1006,13 +1006,13 @@ static int ProcessBufferTryDecodeDilithium(WOLFSSL_CTX* ctx, WOLFSSL* ssl, if (ret == 0) { /* Get the minimum Dilithium key size from SSL or SSL context * object. */ - int minKeySz = ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz; + int minKeySz = ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz; /* Check that the size of the Dilithium key is enough. */ if (keySizeTemp < minKeySz) { - WOLFSSL_MSG("Dilithium private key too small"); - ret = DILITHIUM_KEY_SIZE_E; + WOLFSSL_MSG("ML-DSA private key too small"); + ret = MLDSA_KEY_SIZE_E; } } @@ -1023,20 +1023,20 @@ static int ProcessBufferTryDecodeDilithium(WOLFSSL_CTX* ctx, WOLFSSL* ssl, } } else if (*keyFormat == 0) { - WOLFSSL_MSG("Not a Dilithium key"); + WOLFSSL_MSG("Not an ML-DSA key"); /* Unknown format wasn't dilithium, so keep trying other formats. */ ret = 0; } /* Free dynamically allocated data in key. */ - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); } /* Dispose of allocated key. */ - XFREE(key, heap, DYNAMIC_TYPE_DILITHIUM); + XFREE(key, heap, DYNAMIC_TYPE_MLDSA); return ret; } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ /* Try to decode DER data is a known private key. * @@ -1161,26 +1161,26 @@ static int ProcessBufferTryDecode(WOLFSSL_CTX* ctx, WOLFSSL* ssl, matchAnyKey = 1; } #endif /* HAVE_FALCON */ -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ - !defined(WOLFSSL_DILITHIUM_NO_ASN1) +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_ASN1) /* Try Falcon if key format is Dilithium level 2k, 3k or 5k or yet unknown. */ if ((ret == 0) && ((*keyFormat == 0) || - (*keyFormat == ML_DSA_LEVEL2k) || - (*keyFormat == ML_DSA_LEVEL3k) || - (*keyFormat == ML_DSA_LEVEL5k) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + (*keyFormat == ML_DSA_44k) || + (*keyFormat == ML_DSA_65k) || + (*keyFormat == ML_DSA_87k) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT || (*keyFormat == DILITHIUM_LEVEL2k) || (*keyFormat == DILITHIUM_LEVEL3k) || (*keyFormat == DILITHIUM_LEVEL5k) #endif )) { - ret = ProcessBufferTryDecodeDilithium(ctx, ssl, der, keyFormat, heap, + ret = ProcessBufferTryDecodeMlDsa(ctx, ssl, der, keyFormat, heap, keyType, keySz); matchAnyKey = 1; } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ /* Check we know the format. */ if ((ret == 0) && @@ -1489,23 +1489,23 @@ static void wolfssl_set_have_from_key_oid(WOLFSSL_CTX* ctx, WOLFSSL* ssl, } break; #endif /* HAVE_FALCON */ - #ifdef HAVE_DILITHIUM - case ML_DSA_LEVEL2k: - case ML_DSA_LEVEL3k: - case ML_DSA_LEVEL5k: - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_HAVE_MLDSA + case ML_DSA_44k: + case ML_DSA_65k: + case ML_DSA_87k: + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: case DILITHIUM_LEVEL3k: case DILITHIUM_LEVEL5k: #endif if (ssl != NULL) { - ssl->options.haveDilithiumSig = 1; + ssl->options.haveMlDsaSig = 1; } else { - ctx->haveDilithiumSig = 1; + ctx->haveMlDsaSig = 1; } break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ default: WOLFSSL_MSG("Cert key not supported"); break; @@ -1527,7 +1527,7 @@ static void ProcessBufferCertSetHave(WOLFSSL_CTX* ctx, WOLFSSL* ssl, /* Reset signatures we have in SSL. */ ssl->options.haveECDSAsig = 0; ssl->options.haveFalconSig = 0; - ssl->options.haveDilithiumSig = 0; + ssl->options.haveMlDsaSig = 0; } /* Set which signature we have based on the type in the cert. */ @@ -1565,21 +1565,21 @@ static void ProcessBufferCertSetHave(WOLFSSL_CTX* ctx, WOLFSSL* ssl, } break; #endif - #ifdef HAVE_DILITHIUM - case CTC_ML_DSA_LEVEL2: - case CTC_ML_DSA_LEVEL3: - case CTC_ML_DSA_LEVEL5: - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_HAVE_MLDSA + case CTC_ML_DSA_44: + case CTC_ML_DSA_65: + case CTC_ML_DSA_87: + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case CTC_DILITHIUM_LEVEL2: case CTC_DILITHIUM_LEVEL3: case CTC_DILITHIUM_LEVEL5: - #endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ - WOLFSSL_MSG("Dilithium cert signature"); + #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ + WOLFSSL_MSG("ML-DSA cert signature"); if (ssl) { - ssl->options.haveDilithiumSig = 1; + ssl->options.haveMlDsaSig = 1; } else if (ctx) { - ctx->haveDilithiumSig = 1; + ctx->haveMlDsaSig = 1; } break; #endif @@ -1589,7 +1589,7 @@ static void ProcessBufferCertSetHave(WOLFSSL_CTX* ctx, WOLFSSL* ssl, } #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) || \ - defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) || !defined(NO_RSA) + defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) || !defined(NO_RSA) #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) /* Set the private key curve OID. */ if (ssl != NULL) { @@ -1754,70 +1754,70 @@ static int ProcessBufferCertPublicKey(WOLFSSL_CTX* ctx, WOLFSSL* ssl, } break; #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: - keyType = dilithium_level2_sa_algo; + keyType = mldsa_44_sa_algo; /* Dilithium is fixed key size */ - keySz = DILITHIUM_LEVEL2_KEY_SIZE; + keySz = WC_MLDSA_44_KEY_SIZE; if (checkKeySz) { - ret = CHECK_KEY_SZ(ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz, DILITHIUM_MAX_KEY_SIZE, keySz, - DILITHIUM_KEY_SIZE_E); + ret = CHECK_KEY_SZ(ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz, MLDSA_MAX_KEY_SIZE, keySz, + MLDSA_KEY_SIZE_E); } break; case DILITHIUM_LEVEL3k: - keyType = dilithium_level3_sa_algo; + keyType = mldsa_65_sa_algo; /* Dilithium is fixed key size */ - keySz = DILITHIUM_LEVEL3_KEY_SIZE; + keySz = WC_MLDSA_65_KEY_SIZE; if (checkKeySz) { - ret = CHECK_KEY_SZ(ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz, DILITHIUM_MAX_KEY_SIZE, keySz, - DILITHIUM_KEY_SIZE_E); + ret = CHECK_KEY_SZ(ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz, MLDSA_MAX_KEY_SIZE, keySz, + MLDSA_KEY_SIZE_E); } break; case DILITHIUM_LEVEL5k: - keyType = dilithium_level5_sa_algo; + keyType = mldsa_87_sa_algo; /* Dilithium is fixed key size */ - keySz = DILITHIUM_LEVEL5_KEY_SIZE; + keySz = WC_MLDSA_87_KEY_SIZE; if (checkKeySz) { - ret = CHECK_KEY_SZ(ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz, DILITHIUM_MAX_KEY_SIZE, keySz, - DILITHIUM_KEY_SIZE_E); + ret = CHECK_KEY_SZ(ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz, MLDSA_MAX_KEY_SIZE, keySz, + MLDSA_KEY_SIZE_E); } break; - #endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ - case ML_DSA_LEVEL2k: - keyType = dilithium_level2_sa_algo; + #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ + case ML_DSA_44k: + keyType = mldsa_44_sa_algo; /* Dilithium is fixed key size */ - keySz = ML_DSA_LEVEL2_KEY_SIZE; + keySz = WC_MLDSA_44_KEY_SIZE; if (checkKeySz) { - ret = CHECK_KEY_SZ(ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz, DILITHIUM_MAX_KEY_SIZE, keySz, - DILITHIUM_KEY_SIZE_E); + ret = CHECK_KEY_SZ(ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz, MLDSA_MAX_KEY_SIZE, keySz, + MLDSA_KEY_SIZE_E); } break; - case ML_DSA_LEVEL3k: - keyType = dilithium_level3_sa_algo; + case ML_DSA_65k: + keyType = mldsa_65_sa_algo; /* Dilithium is fixed key size */ - keySz = ML_DSA_LEVEL3_KEY_SIZE; + keySz = WC_MLDSA_65_KEY_SIZE; if (checkKeySz) { - ret = CHECK_KEY_SZ(ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz, DILITHIUM_MAX_KEY_SIZE, keySz, - DILITHIUM_KEY_SIZE_E); + ret = CHECK_KEY_SZ(ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz, MLDSA_MAX_KEY_SIZE, keySz, + MLDSA_KEY_SIZE_E); } break; - case ML_DSA_LEVEL5k: - keyType = dilithium_level5_sa_algo; + case ML_DSA_87k: + keyType = mldsa_87_sa_algo; /* Dilithium is fixed key size */ - keySz = ML_DSA_LEVEL5_KEY_SIZE; + keySz = WC_MLDSA_87_KEY_SIZE; if (checkKeySz) { - ret = CHECK_KEY_SZ(ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz, DILITHIUM_MAX_KEY_SIZE, keySz, - DILITHIUM_KEY_SIZE_E); + ret = CHECK_KEY_SZ(ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz, MLDSA_MAX_KEY_SIZE, keySz, + MLDSA_KEY_SIZE_E); } break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ default: WOLFSSL_MSG("No key size check done on public key in certificate"); @@ -1964,70 +1964,70 @@ static int ProcessBufferCertAltPublicKey(WOLFSSL_CTX* ctx, WOLFSSL* ssl, } break; #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: - keyType = dilithium_level2_sa_algo; + keyType = mldsa_44_sa_algo; /* Dilithium is fixed key size */ - keySz = DILITHIUM_LEVEL2_KEY_SIZE; + keySz = WC_MLDSA_44_KEY_SIZE; if (checkKeySz) { - ret = CHECK_KEY_SZ(ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz, DILITHIUM_MAX_KEY_SIZE, keySz, - DILITHIUM_KEY_SIZE_E); + ret = CHECK_KEY_SZ(ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz, MLDSA_MAX_KEY_SIZE, keySz, + MLDSA_KEY_SIZE_E); } break; case DILITHIUM_LEVEL3k: - keyType = dilithium_level3_sa_algo; + keyType = mldsa_65_sa_algo; /* Dilithium is fixed key size */ - keySz = DILITHIUM_LEVEL3_KEY_SIZE; + keySz = WC_MLDSA_65_KEY_SIZE; if (checkKeySz) { - ret = CHECK_KEY_SZ(ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz, DILITHIUM_MAX_KEY_SIZE, keySz, - DILITHIUM_KEY_SIZE_E); + ret = CHECK_KEY_SZ(ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz, MLDSA_MAX_KEY_SIZE, keySz, + MLDSA_KEY_SIZE_E); } break; case DILITHIUM_LEVEL5k: - keyType = dilithium_level5_sa_algo; + keyType = mldsa_87_sa_algo; /* Dilithium is fixed key size */ - keySz = DILITHIUM_LEVEL5_KEY_SIZE; + keySz = WC_MLDSA_87_KEY_SIZE; if (checkKeySz) { - ret = CHECK_KEY_SZ(ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz, DILITHIUM_MAX_KEY_SIZE, keySz, - DILITHIUM_KEY_SIZE_E); + ret = CHECK_KEY_SZ(ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz, MLDSA_MAX_KEY_SIZE, keySz, + MLDSA_KEY_SIZE_E); } break; - #endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ - case ML_DSA_LEVEL2k: - keyType = dilithium_level2_sa_algo; + #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ + case ML_DSA_44k: + keyType = mldsa_44_sa_algo; /* Dilithium is fixed key size */ - keySz = ML_DSA_LEVEL2_KEY_SIZE; + keySz = WC_MLDSA_44_KEY_SIZE; if (checkKeySz) { - ret = CHECK_KEY_SZ(ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz, DILITHIUM_MAX_KEY_SIZE, keySz, - DILITHIUM_KEY_SIZE_E); + ret = CHECK_KEY_SZ(ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz, MLDSA_MAX_KEY_SIZE, keySz, + MLDSA_KEY_SIZE_E); } break; - case ML_DSA_LEVEL3k: - keyType = dilithium_level3_sa_algo; + case ML_DSA_65k: + keyType = mldsa_65_sa_algo; /* Dilithium is fixed key size */ - keySz = ML_DSA_LEVEL3_KEY_SIZE; + keySz = WC_MLDSA_65_KEY_SIZE; if (checkKeySz) { - ret = CHECK_KEY_SZ(ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz, DILITHIUM_MAX_KEY_SIZE, keySz, - DILITHIUM_KEY_SIZE_E); + ret = CHECK_KEY_SZ(ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz, MLDSA_MAX_KEY_SIZE, keySz, + MLDSA_KEY_SIZE_E); } break; - case ML_DSA_LEVEL5k: - keyType = dilithium_level5_sa_algo; + case ML_DSA_87k: + keyType = mldsa_87_sa_algo; /* Dilithium is fixed key size */ - keySz = ML_DSA_LEVEL5_KEY_SIZE; + keySz = WC_MLDSA_87_KEY_SIZE; if (checkKeySz) { - ret = CHECK_KEY_SZ(ssl ? ssl->options.minDilithiumKeySz : - ctx->minDilithiumKeySz, DILITHIUM_MAX_KEY_SIZE, keySz, - DILITHIUM_KEY_SIZE_E); + ret = CHECK_KEY_SZ(ssl ? ssl->options.minMlDsaKeySz : + ctx->minMlDsaKeySz, MLDSA_MAX_KEY_SIZE, keySz, + MLDSA_KEY_SIZE_E); } break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ default: /* In this case, there was an OID that we didn't recognize. diff --git a/src/tls13.c b/src/tls13.c index 533a03462e..5128f6097f 100644 --- a/src/tls13.c +++ b/src/tls13.c @@ -183,7 +183,7 @@ static const byte #ifndef NO_CERTS #if !defined(NO_RSA) || defined(HAVE_ECC) || defined(HAVE_ED25519) || \ - defined(HAVE_ED448) || defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) + defined(HAVE_ED448) || defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) static WC_INLINE int GetMsgHash(WOLFSSL* ssl, byte* hash); @@ -8507,7 +8507,7 @@ static int SendTls13CertificateRequest(WOLFSSL* ssl, byte* reqCtx, #ifndef NO_CERTS #if (!defined(NO_WOLFSSL_SERVER) || !defined(WOLFSSL_NO_CLIENT_AUTH)) && \ (!defined(NO_RSA) || defined(HAVE_ECC) || defined(HAVE_ED25519) || \ - defined(HAVE_ED448) || defined(HAVE_FALCON) || defined(HAVE_DILITHIUM)) + defined(HAVE_ED448) || defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA)) /* Encode the signature algorithm into buffer. * * hashalgo The hash algorithm. @@ -8592,18 +8592,18 @@ static WC_INLINE void EncodeSigAlg(const WOLFSSL * ssl, byte hashAlgo, output[1] = FALCON_LEVEL5_SA_MINOR; break; #endif -#ifdef HAVE_DILITHIUM - case dilithium_level2_sa_algo: - output[0] = DILITHIUM_LEVEL2_SA_MAJOR; - output[1] = DILITHIUM_LEVEL2_SA_MINOR; +#ifdef WOLFSSL_HAVE_MLDSA + case mldsa_44_sa_algo: + output[0] = MLDSA_44_SA_MAJOR; + output[1] = MLDSA_44_SA_MINOR; break; - case dilithium_level3_sa_algo: - output[0] = DILITHIUM_LEVEL3_SA_MAJOR; - output[1] = DILITHIUM_LEVEL3_SA_MINOR; + case mldsa_65_sa_algo: + output[0] = MLDSA_65_SA_MAJOR; + output[1] = MLDSA_65_SA_MINOR; break; - case dilithium_level5_sa_algo: - output[0] = DILITHIUM_LEVEL5_SA_MAJOR; - output[1] = DILITHIUM_LEVEL5_SA_MINOR; + case mldsa_87_sa_algo: + output[0] = MLDSA_87_SA_MAJOR; + output[1] = MLDSA_87_SA_MINOR; break; #endif default: @@ -8613,24 +8613,24 @@ static WC_INLINE void EncodeSigAlg(const WOLFSSL * ssl, byte hashAlgo, #endif #if !defined(NO_RSA) || defined(HAVE_ECC) || defined(HAVE_ED25519) || \ - defined(HAVE_ED448) || defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) + defined(HAVE_ED448) || defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) #ifdef WOLFSSL_DUAL_ALG_CERTS /* These match up with what the OQS team has defined. */ #define HYBRID_SA_MAJOR 0xFE -#define HYBRID_P256_DILITHIUM_LEVEL2_SA_MINOR 0xA1 -#define HYBRID_RSA3072_DILITHIUM_LEVEL2_SA_MINOR 0xA2 -#define HYBRID_P384_DILITHIUM_LEVEL3_SA_MINOR 0xA4 -#define HYBRID_P521_DILITHIUM_LEVEL5_SA_MINOR 0xA6 +#define HYBRID_P256_MLDSA_44_SA_MINOR 0xA1 +#define HYBRID_RSA3072_MLDSA_44_SA_MINOR 0xA2 +#define HYBRID_P384_MLDSA_65_SA_MINOR 0xA4 +#define HYBRID_P521_MLDSA_87_SA_MINOR 0xA6 /* Falcon hybrid codepoints aligned with oqs-provider. */ #define HYBRID_P256_FALCON_LEVEL1_SA_MINOR 0xD8 #define HYBRID_RSA3072_FALCON_LEVEL1_SA_MINOR 0xD9 #define HYBRID_P521_FALCON_LEVEL5_SA_MINOR 0xDB /* Custom defined ones for PQC first */ -#define HYBRID_DILITHIUM_LEVEL2_P256_SA_MINOR 0xD1 -#define HYBRID_DILITHIUM_LEVEL2_RSA3072_SA_MINOR 0xD2 -#define HYBRID_DILITHIUM_LEVEL3_P384_SA_MINOR 0xD3 -#define HYBRID_DILITHIUM_LEVEL5_P521_SA_MINOR 0xD4 +#define HYBRID_MLDSA_44_P256_SA_MINOR 0xD1 +#define HYBRID_MLDSA_44_RSA3072_SA_MINOR 0xD2 +#define HYBRID_MLDSA_65_P384_SA_MINOR 0xD3 +#define HYBRID_MLDSA_87_P521_SA_MINOR 0xD4 #define HYBRID_FALCON_LEVEL1_P256_SA_MINOR 0xD5 #define HYBRID_FALCON_LEVEL1_RSA3072_SA_MINOR 0xD6 #define HYBRID_FALCON_LEVEL5_P521_SA_MINOR 0xD7 @@ -8642,20 +8642,20 @@ static void EncodeDualSigAlg(byte sigAlg, byte altSigAlg, byte* output) output[0] = 0x0; output[1] = 0x0; - if (sigAlg == ecc_dsa_sa_algo && altSigAlg == dilithium_level2_sa_algo) { - output[1] = HYBRID_P256_DILITHIUM_LEVEL2_SA_MINOR; + if (sigAlg == ecc_dsa_sa_algo && altSigAlg == mldsa_44_sa_algo) { + output[1] = HYBRID_P256_MLDSA_44_SA_MINOR; } else if (sigAlg == rsa_pss_sa_algo && - altSigAlg == dilithium_level2_sa_algo) { - output[1] = HYBRID_RSA3072_DILITHIUM_LEVEL2_SA_MINOR; + altSigAlg == mldsa_44_sa_algo) { + output[1] = HYBRID_RSA3072_MLDSA_44_SA_MINOR; } else if (sigAlg == ecc_dsa_sa_algo && - altSigAlg == dilithium_level3_sa_algo) { - output[1] = HYBRID_P384_DILITHIUM_LEVEL3_SA_MINOR; + altSigAlg == mldsa_65_sa_algo) { + output[1] = HYBRID_P384_MLDSA_65_SA_MINOR; } else if (sigAlg == ecc_dsa_sa_algo && - altSigAlg == dilithium_level5_sa_algo) { - output[1] = HYBRID_P521_DILITHIUM_LEVEL5_SA_MINOR; + altSigAlg == mldsa_87_sa_algo) { + output[1] = HYBRID_P521_MLDSA_87_SA_MINOR; } else if (sigAlg == ecc_dsa_sa_algo && altSigAlg == falcon_level1_sa_algo) { @@ -8669,21 +8669,21 @@ static void EncodeDualSigAlg(byte sigAlg, byte altSigAlg, byte* output) altSigAlg == falcon_level5_sa_algo) { output[1] = HYBRID_P521_FALCON_LEVEL5_SA_MINOR; } - else if (sigAlg == dilithium_level2_sa_algo && + else if (sigAlg == mldsa_44_sa_algo && altSigAlg == ecc_dsa_sa_algo) { - output[1] = HYBRID_DILITHIUM_LEVEL2_P256_SA_MINOR; + output[1] = HYBRID_MLDSA_44_P256_SA_MINOR; } - else if (sigAlg == dilithium_level2_sa_algo && + else if (sigAlg == mldsa_44_sa_algo && altSigAlg == rsa_pss_sa_algo) { - output[1] = HYBRID_DILITHIUM_LEVEL2_RSA3072_SA_MINOR; + output[1] = HYBRID_MLDSA_44_RSA3072_SA_MINOR; } - else if (sigAlg == dilithium_level3_sa_algo && + else if (sigAlg == mldsa_65_sa_algo && altSigAlg == ecc_dsa_sa_algo) { - output[1] = HYBRID_DILITHIUM_LEVEL3_P384_SA_MINOR; + output[1] = HYBRID_MLDSA_65_P384_SA_MINOR; } - else if (sigAlg == dilithium_level5_sa_algo && + else if (sigAlg == mldsa_87_sa_algo && altSigAlg == ecc_dsa_sa_algo) { - output[1] = HYBRID_DILITHIUM_LEVEL5_P521_SA_MINOR; + output[1] = HYBRID_MLDSA_87_P521_SA_MINOR; } else if (sigAlg == falcon_level1_sa_algo && altSigAlg == ecc_dsa_sa_algo) { @@ -8806,18 +8806,18 @@ static WC_INLINE int DecodeTls13SigAlg(byte* input, byte* hashAlgo, ret = INVALID_PARAMETER; break; #endif /* HAVE_FALCON */ -#if defined(HAVE_DILITHIUM) - case DILITHIUM_SA_MAJOR: - if (input[1] == DILITHIUM_LEVEL2_SA_MINOR) { - *hsType = dilithium_level2_sa_algo; +#if defined(WOLFSSL_HAVE_MLDSA) + case MLDSA_SA_MAJOR: + if (input[1] == MLDSA_44_SA_MINOR) { + *hsType = mldsa_44_sa_algo; /* Hash performed as part of sign/verify operation. */ *hashAlgo = sha512_mac; - } else if (input[1] == DILITHIUM_LEVEL3_SA_MINOR) { - *hsType = dilithium_level3_sa_algo; + } else if (input[1] == MLDSA_65_SA_MINOR) { + *hsType = mldsa_65_sa_algo; /* Hash performed as part of sign/verify operation. */ *hashAlgo = sha512_mac; - } else if (input[1] == DILITHIUM_LEVEL5_SA_MINOR) { - *hsType = dilithium_level5_sa_algo; + } else if (input[1] == MLDSA_87_SA_MINOR) { + *hsType = mldsa_87_sa_algo; /* Hash performed as part of sign/verify operation. */ *hashAlgo = sha512_mac; } @@ -8826,7 +8826,7 @@ static WC_INLINE int DecodeTls13SigAlg(byte* input, byte* hashAlgo, ret = INVALID_PARAMETER; } break; -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ default: *hashAlgo = input[0]; *hsType = input[1]; @@ -8852,25 +8852,25 @@ static WC_INLINE int DecodeTls13HybridSigAlg(byte* input, byte* hashAlg, return INVALID_PARAMETER; } - if (input[1] == HYBRID_P256_DILITHIUM_LEVEL2_SA_MINOR) { + if (input[1] == HYBRID_P256_MLDSA_44_SA_MINOR) { *sigAlg = ecc_dsa_sa_algo; *hashAlg = sha256_mac; - *altSigAlg = dilithium_level2_sa_algo; + *altSigAlg = mldsa_44_sa_algo; } - else if (input[1] == HYBRID_RSA3072_DILITHIUM_LEVEL2_SA_MINOR) { + else if (input[1] == HYBRID_RSA3072_MLDSA_44_SA_MINOR) { *sigAlg = rsa_pss_sa_algo; *hashAlg = sha256_mac; - *altSigAlg = dilithium_level2_sa_algo; + *altSigAlg = mldsa_44_sa_algo; } - else if (input[1] == HYBRID_P384_DILITHIUM_LEVEL3_SA_MINOR) { + else if (input[1] == HYBRID_P384_MLDSA_65_SA_MINOR) { *sigAlg = ecc_dsa_sa_algo; *hashAlg = sha384_mac; - *altSigAlg = dilithium_level3_sa_algo; + *altSigAlg = mldsa_65_sa_algo; } - else if (input[1] == HYBRID_P521_DILITHIUM_LEVEL5_SA_MINOR) { + else if (input[1] == HYBRID_P521_MLDSA_87_SA_MINOR) { *sigAlg = ecc_dsa_sa_algo; *hashAlg = sha512_mac; - *altSigAlg = dilithium_level5_sa_algo; + *altSigAlg = mldsa_87_sa_algo; } else if (input[1] == HYBRID_P256_FALCON_LEVEL1_SA_MINOR) { *sigAlg = ecc_dsa_sa_algo; @@ -8887,23 +8887,23 @@ static WC_INLINE int DecodeTls13HybridSigAlg(byte* input, byte* hashAlg, *hashAlg = sha512_mac; *altSigAlg = falcon_level5_sa_algo; } - else if (input[1] == HYBRID_DILITHIUM_LEVEL2_P256_SA_MINOR) { - *sigAlg = dilithium_level2_sa_algo; + else if (input[1] == HYBRID_MLDSA_44_P256_SA_MINOR) { + *sigAlg = mldsa_44_sa_algo; *hashAlg = sha256_mac; *altSigAlg = ecc_dsa_sa_algo; } - else if (input[1] == HYBRID_DILITHIUM_LEVEL2_RSA3072_SA_MINOR) { - *sigAlg = dilithium_level2_sa_algo; + else if (input[1] == HYBRID_MLDSA_44_RSA3072_SA_MINOR) { + *sigAlg = mldsa_44_sa_algo; *hashAlg = sha256_mac; *altSigAlg = rsa_pss_sa_algo; } - else if (input[1] == HYBRID_DILITHIUM_LEVEL3_P384_SA_MINOR) { - *sigAlg = dilithium_level3_sa_algo; + else if (input[1] == HYBRID_MLDSA_65_P384_SA_MINOR) { + *sigAlg = mldsa_65_sa_algo; *hashAlg = sha384_mac; *altSigAlg = ecc_dsa_sa_algo; } - else if (input[1] == HYBRID_DILITHIUM_LEVEL5_P521_SA_MINOR) { - *sigAlg = dilithium_level5_sa_algo; + else if (input[1] == HYBRID_MLDSA_87_P521_SA_MINOR) { + *sigAlg = mldsa_87_sa_algo; *hashAlg = sha512_mac; *altSigAlg = ecc_dsa_sa_algo; } @@ -9769,7 +9769,7 @@ static int SendTls13Certificate(WOLFSSL* ssl) #if (!defined(NO_RSA) || defined(HAVE_ECC) || defined(HAVE_ED25519) || \ defined(HAVE_ED448) || defined(HAVE_FALCON) || \ - defined(HAVE_DILITHIUM)) && \ + defined(WOLFSSL_HAVE_MLDSA)) && \ (!defined(NO_WOLFSSL_SERVER) || !defined(WOLFSSL_NO_CLIENT_AUTH)) typedef struct Scv13Args { byte* output; /* not allocated */ @@ -10021,11 +10021,11 @@ static int SendTls13CertificateVerify(WOLFSSL* ssl) args->sigAlgo = ssl->buffers.keyType; } #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - else if (ssl->hsType == DYNAMIC_TYPE_DILITHIUM) { + #if defined(WOLFSSL_HAVE_MLDSA) + else if (ssl->hsType == DYNAMIC_TYPE_MLDSA) { args->sigAlgo = ssl->buffers.keyType; } - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ else { ERROR_OUT(ALGO_ID_E, exit_scv); } @@ -10057,9 +10057,9 @@ static int SendTls13CertificateVerify(WOLFSSL* ssl) if (ssl->buffers.altKeyType == ecc_dsa_sa_algo || ssl->buffers.altKeyType == falcon_level1_sa_algo || ssl->buffers.altKeyType == falcon_level5_sa_algo || - ssl->buffers.altKeyType == dilithium_level2_sa_algo || - ssl->buffers.altKeyType == dilithium_level3_sa_algo || - ssl->buffers.altKeyType == dilithium_level5_sa_algo) { + ssl->buffers.altKeyType == mldsa_44_sa_algo || + ssl->buffers.altKeyType == mldsa_65_sa_algo || + ssl->buffers.altKeyType == mldsa_87_sa_algo) { args->altSigAlgo = ssl->buffers.altKeyType; } else if (ssl->buffers.altKeyType == rsa_sa_algo && @@ -10187,11 +10187,11 @@ static int SendTls13CertificateVerify(WOLFSSL* ssl) args->sigLen = FALCON_MAX_SIG_SIZE; } #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - if (ssl->hsType == DYNAMIC_TYPE_DILITHIUM) { - args->sigLen = DILITHIUM_MAX_SIG_SIZE; + #if defined(WOLFSSL_HAVE_MLDSA) + if (ssl->hsType == DYNAMIC_TYPE_MLDSA) { + args->sigLen = MLDSA_MAX_SIG_SIZE; } - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WOLFSSL_DUAL_ALG_CERTS if (ssl->sigSpec != NULL && @@ -10306,16 +10306,15 @@ static int SendTls13CertificateVerify(WOLFSSL* ssl) args->length = (word16)args->sigLen; } #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_SIGN) - if (ssl->hsType == DYNAMIC_TYPE_DILITHIUM) { - ret = wc_dilithium_sign_ctx_msg(NULL, 0, args->sigData, - args->sigDataSz, sigOut, - &args->sigLen, - (dilithium_key*)ssl->hsKey, - ssl->rng); + #if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_SIGN) + if (ssl->hsType == DYNAMIC_TYPE_MLDSA) { + ret = wc_MlDsaKey_SignCtx((wc_MlDsaKey*)ssl->hsKey, NULL, 0, + sigOut, &args->sigLen, + args->sigData, args->sigDataSz, + ssl->rng); args->length = (word16)args->sigLen; } - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #if !defined(NO_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY) && \ !defined(WOLFSSL_RSA_VERIFY_ONLY) if (ssl->hsType == DYNAMIC_TYPE_RSA) { @@ -10404,13 +10403,13 @@ static int SendTls13CertificateVerify(WOLFSSL* ssl) ssl->rng); } #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_SIGN) - if (ssl->hsAltType == DYNAMIC_TYPE_DILITHIUM) { - ret = wc_dilithium_sign_ctx_msg(NULL, 0, args->altSigData, - args->altSigDataSz, sigOut, &args->altSigLen, - (dilithium_key*)ssl->hsAltKey, ssl->rng); + #if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_SIGN) + if (ssl->hsAltType == DYNAMIC_TYPE_MLDSA) { + ret = wc_MlDsaKey_SignCtx((wc_MlDsaKey*)ssl->hsAltKey, + NULL, 0, sigOut, &args->altSigLen, + args->altSigData, args->altSigDataSz, ssl->rng); } - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ /* Check for error */ if (ret != 0) { @@ -10779,36 +10778,36 @@ static int decodeEccKey(WOLFSSL* ssl) } #endif /* HAVE_ECC */ -#ifdef HAVE_DILITHIUM +#ifdef WOLFSSL_HAVE_MLDSA /* ssl->peerCert->sapkiDer is the alternative public key. Hopefully it is a - * dilithium public key. Convert it into a usable public key. */ -static int decodeDilithiumKey(WOLFSSL* ssl, int level) + * ML-DSA public key. Convert it into a usable public key. */ +static int decodeMlDsaKey(WOLFSSL* ssl, int level) { int keyRet; word32 tmpIdx = 0; - if (ssl->peerDilithiumKeyPresent) + if (ssl->peerMlDsaKeyPresent) return INVALID_PARAMETER; - keyRet = AllocKey(ssl, DYNAMIC_TYPE_DILITHIUM, - (void**)&ssl->peerDilithiumKey); + keyRet = AllocKey(ssl, DYNAMIC_TYPE_MLDSA, + (void**)&ssl->peerMlDsaKey); if (keyRet != 0) return PEER_KEY_ERROR; - ssl->peerDilithiumKeyPresent = 1; - keyRet = wc_dilithium_set_level(ssl->peerDilithiumKey, level); + ssl->peerMlDsaKeyPresent = 1; + keyRet = wc_MlDsaKey_SetParams(ssl->peerMlDsaKey, level); if (keyRet != 0) return PEER_KEY_ERROR; - keyRet = wc_Dilithium_PublicKeyDecode(ssl->peerCert.sapkiDer, &tmpIdx, - ssl->peerDilithiumKey, - ssl->peerCert.sapkiLen); + keyRet = wc_MlDsaKey_PublicKeyDecode(ssl->peerMlDsaKey, + ssl->peerCert.sapkiDer, + ssl->peerCert.sapkiLen, &tmpIdx); if (keyRet != 0) return PEER_KEY_ERROR; return 0; } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #ifdef HAVE_FALCON /* ssl->peerCert->sapkiDer is the alternative public key. Hopefully it is a @@ -11014,15 +11013,15 @@ static int DoTls13CertificateVerify(WOLFSSL* ssl, byte* input, ret = decodeEccKey(ssl); break; #endif - #ifdef HAVE_DILITHIUM - case dilithium_level2_sa_algo: - ret = decodeDilithiumKey(ssl, WC_ML_DSA_44); + #ifdef WOLFSSL_HAVE_MLDSA + case mldsa_44_sa_algo: + ret = decodeMlDsaKey(ssl, WC_ML_DSA_44); break; - case dilithium_level3_sa_algo: - ret = decodeDilithiumKey(ssl, WC_ML_DSA_65); + case mldsa_65_sa_algo: + ret = decodeMlDsaKey(ssl, WC_ML_DSA_65); break; - case dilithium_level5_sa_algo: - ret = decodeDilithiumKey(ssl, WC_ML_DSA_87); + case mldsa_87_sa_algo: + ret = decodeMlDsaKey(ssl, WC_ML_DSA_87); break; #endif #ifdef HAVE_FALCON @@ -11058,14 +11057,14 @@ static int DoTls13CertificateVerify(WOLFSSL* ssl, byte* input, ssl->peerEccDsaKeyPresent = 0; } #endif - #ifdef HAVE_DILITHIUM - else if (ssl->peerDilithiumKeyPresent && - sa != dilithium_level2_sa_algo && - sa != dilithium_level3_sa_algo && - sa != dilithium_level5_sa_algo) { - FreeKey(ssl, DYNAMIC_TYPE_DILITHIUM, - (void**)&ssl->peerDilithiumKey); - ssl->peerDilithiumKeyPresent = 0; + #ifdef WOLFSSL_HAVE_MLDSA + else if (ssl->peerMlDsaKeyPresent && + sa != mldsa_44_sa_algo && + sa != mldsa_65_sa_algo && + sa != mldsa_87_sa_algo) { + FreeKey(ssl, DYNAMIC_TYPE_MLDSA, + (void**)&ssl->peerMlDsaKey); + ssl->peerMlDsaKeyPresent = 0; } #endif #ifdef HAVE_FALCON @@ -11127,21 +11126,21 @@ static int DoTls13CertificateVerify(WOLFSSL* ssl, byte* input, ssl->peerFalconKeyPresent; } #endif - #ifdef HAVE_DILITHIUM - if (ssl->options.peerSigAlgo == dilithium_level2_sa_algo) { - WOLFSSL_MSG("Peer sent Dilithium Level 2 sig"); - validSigAlgo = (ssl->peerDilithiumKey != NULL) && - ssl->peerDilithiumKeyPresent; - } - if (ssl->options.peerSigAlgo == dilithium_level3_sa_algo) { - WOLFSSL_MSG("Peer sent Dilithium Level 3 sig"); - validSigAlgo = (ssl->peerDilithiumKey != NULL) && - ssl->peerDilithiumKeyPresent; - } - if (ssl->options.peerSigAlgo == dilithium_level5_sa_algo) { - WOLFSSL_MSG("Peer sent Dilithium Level 5 sig"); - validSigAlgo = (ssl->peerDilithiumKey != NULL) && - ssl->peerDilithiumKeyPresent; + #ifdef WOLFSSL_HAVE_MLDSA + if (ssl->options.peerSigAlgo == mldsa_44_sa_algo) { + WOLFSSL_MSG("Peer sent ML-DSA Level 2 sig"); + validSigAlgo = (ssl->peerMlDsaKey != NULL) && + ssl->peerMlDsaKeyPresent; + } + if (ssl->options.peerSigAlgo == mldsa_65_sa_algo) { + WOLFSSL_MSG("Peer sent ML-DSA Level 3 sig"); + validSigAlgo = (ssl->peerMlDsaKey != NULL) && + ssl->peerMlDsaKeyPresent; + } + if (ssl->options.peerSigAlgo == mldsa_87_sa_algo) { + WOLFSSL_MSG("Peer sent ML-DSA Level 5 sig"); + validSigAlgo = (ssl->peerMlDsaKey != NULL) && + ssl->peerMlDsaKeyPresent; } #endif #ifndef NO_RSA @@ -11425,32 +11424,32 @@ static int DoTls13CertificateVerify(WOLFSSL* ssl, byte* input, } } #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - if (((ssl->options.peerSigAlgo == dilithium_level2_sa_algo) || - (ssl->options.peerSigAlgo == dilithium_level3_sa_algo) || - (ssl->options.peerSigAlgo == dilithium_level5_sa_algo)) && - (ssl->peerDilithiumKeyPresent)) { + #if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_VERIFY) + if (((ssl->options.peerSigAlgo == mldsa_44_sa_algo) || + (ssl->options.peerSigAlgo == mldsa_65_sa_algo) || + (ssl->options.peerSigAlgo == mldsa_87_sa_algo)) && + (ssl->peerMlDsaKeyPresent)) { int res = 0; - WOLFSSL_MSG("Doing Dilithium peer cert verify"); - ret = wc_dilithium_verify_ctx_msg(sig, args->sigSz, NULL, 0, - args->sigData, args->sigDataSz, - &res, ssl->peerDilithiumKey); + WOLFSSL_MSG("Doing ML-DSA peer cert verify"); + ret = wc_MlDsaKey_VerifyCtx(ssl->peerMlDsaKey, sig, args->sigSz, + NULL, 0, args->sigData, + args->sigDataSz, &res); if ((ret >= 0) && (res == 1)) { /* CLIENT/SERVER: data verified with public key from * certificate. */ ssl->options.peerAuthGood = 1; - FreeKey(ssl, DYNAMIC_TYPE_DILITHIUM, - (void**)&ssl->peerDilithiumKey); - ssl->peerDilithiumKeyPresent = 0; + FreeKey(ssl, DYNAMIC_TYPE_MLDSA, + (void**)&ssl->peerMlDsaKey); + ssl->peerMlDsaKeyPresent = 0; } else if ((ret >= 0) && (res == 0)) { - WOLFSSL_MSG("Dilithium signature verification failed"); + WOLFSSL_MSG("ML-DSA signature verification failed"); ret = SIG_VERIFY_E; } } - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ /* Check for error */ if (ret != 0) { @@ -11535,33 +11534,33 @@ static int DoTls13CertificateVerify(WOLFSSL* ssl, byte* input, } } #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - if (((args->altSigAlgo == dilithium_level2_sa_algo) || - (args->altSigAlgo == dilithium_level3_sa_algo) || - (args->altSigAlgo == dilithium_level5_sa_algo)) && - (ssl->peerDilithiumKeyPresent)) { + #if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_VERIFY) + if (((args->altSigAlgo == mldsa_44_sa_algo) || + (args->altSigAlgo == mldsa_65_sa_algo) || + (args->altSigAlgo == mldsa_87_sa_algo)) && + (ssl->peerMlDsaKeyPresent)) { int res = 0; - WOLFSSL_MSG("Doing Dilithium peer cert alt verify"); - ret = wc_dilithium_verify_ctx_msg(sig, args->altSignatureSz, - NULL, 0, args->altSigData, - args->altSigDataSz, &res, - ssl->peerDilithiumKey); + WOLFSSL_MSG("Doing ML-DSA peer cert alt verify"); + ret = wc_MlDsaKey_VerifyCtx(ssl->peerMlDsaKey, sig, + args->altSignatureSz, NULL, 0, + args->altSigData, + args->altSigDataSz, &res); if ((ret >= 0) && (res == 1)) { /* CLIENT/SERVER: data verified with public key from * certificate. */ args->altPeerAuthGood = 1; - FreeKey(ssl, DYNAMIC_TYPE_DILITHIUM, - (void**)&ssl->peerDilithiumKey); - ssl->peerDilithiumKeyPresent = 0; + FreeKey(ssl, DYNAMIC_TYPE_MLDSA, + (void**)&ssl->peerMlDsaKey); + ssl->peerMlDsaKeyPresent = 0; } else if ((ret >= 0) && (res == 0)) { - WOLFSSL_MSG("Dilithium signature verification failed"); + WOLFSSL_MSG("ML-DSA signature verification failed"); ret = SIG_VERIFY_E; } } - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ /* Check for error */ if (ret != 0) { @@ -13683,7 +13682,7 @@ int DoTls13HandShakeMsgType(WOLFSSL* ssl, byte* input, word32* inOutIdx, #endif #if !defined(NO_RSA) || defined(HAVE_ECC) || defined(HAVE_ED25519) || \ - defined(HAVE_ED448) || defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) + defined(HAVE_ED448) || defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) case certificate_verify: WOLFSSL_MSG("processing certificate verify"); ret = DoTls13CertificateVerify(ssl, input, inOutIdx, size); @@ -14374,7 +14373,7 @@ int wolfSSL_connect_TLSv13(WOLFSSL* ssl) case FIRST_REPLY_THIRD: #if (!defined(NO_CERTS) && (!defined(NO_RSA) || defined(HAVE_ECC) || \ defined(HAVE_ED25519) || defined(HAVE_ED448) || \ - defined(HAVE_FALCON) || defined(HAVE_DILITHIUM))) && \ + defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA))) && \ (!defined(NO_WOLFSSL_SERVER) || !defined(WOLFSSL_NO_CLIENT_AUTH)) if (!ssl->options.resuming && ssl->options.sendVerify) { ssl->error = SendTls13CertificateVerify(ssl); @@ -15558,7 +15557,7 @@ int wolfSSL_accept_TLSv13(WOLFSSL* ssl) case TLS13_CERT_SENT : #if !defined(NO_CERTS) && (!defined(NO_RSA) || defined(HAVE_ECC) || \ defined(HAVE_ED25519) || defined(HAVE_ED448) || defined(HAVE_FALCON) || \ - defined(HAVE_DILITHIUM)) + defined(WOLFSSL_HAVE_MLDSA)) if (!ssl->options.resuming && ssl->options.sendVerify) { if ((ssl->error = SendTls13CertificateVerify(ssl)) != 0) { WOLFSSL_ERROR(ssl->error); diff --git a/src/x509.c b/src/x509.c index 4ed21e62f4..73f4c3c92e 100644 --- a/src/x509.c +++ b/src/x509.c @@ -6405,10 +6405,10 @@ WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509* x509) else if (x509->pubKeyOID == DSAk) { key->type = WC_EVP_PKEY_DSA; } - #ifdef HAVE_DILITHIUM - else if (x509->pubKeyOID == ML_DSA_LEVEL2k || - x509->pubKeyOID == ML_DSA_LEVEL3k || - x509->pubKeyOID == ML_DSA_LEVEL5k) { + #ifdef WOLFSSL_HAVE_MLDSA + else if (x509->pubKeyOID == ML_DSA_44k || + x509->pubKeyOID == ML_DSA_65k || + x509->pubKeyOID == ML_DSA_87k) { key->type = WC_EVP_PKEY_DILITHIUM; } #endif @@ -12258,8 +12258,8 @@ static int CertFromX509(Cert* cert, WOLFSSL_X509* x509) #if defined(HAVE_FALCON) falcon_key* falcon = NULL; #endif - #if defined(HAVE_DILITHIUM) - dilithium_key* dilithium = NULL; + #if defined(WOLFSSL_HAVE_MLDSA) + wc_MlDsaKey* mldsa = NULL; #endif #if defined(WOLFSSL_HAVE_SLHDSA) SlhDsaKey* slhdsa = NULL; @@ -12429,68 +12429,68 @@ static int CertFromX509(Cert* cert, WOLFSSL_X509* x509) key = (void*)falcon; } #endif - #if defined(HAVE_DILITHIUM) - if ((x509->pubKeyOID == ML_DSA_LEVEL2k) || - (x509->pubKeyOID == ML_DSA_LEVEL3k) || - (x509->pubKeyOID == ML_DSA_LEVEL5k) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) + if ((x509->pubKeyOID == ML_DSA_44k) || + (x509->pubKeyOID == ML_DSA_65k) || + (x509->pubKeyOID == ML_DSA_87k) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT || (x509->pubKeyOID == DILITHIUM_LEVEL2k) || (x509->pubKeyOID == DILITHIUM_LEVEL3k) || (x509->pubKeyOID == DILITHIUM_LEVEL5k) - #endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ + #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ ) { - dilithium = (dilithium_key*)XMALLOC(sizeof(dilithium_key), NULL, - DYNAMIC_TYPE_DILITHIUM); - if (dilithium == NULL) { - WOLFSSL_MSG("Failed to allocate memory for dilithium_key"); + mldsa = (wc_MlDsaKey*)XMALLOC(sizeof(wc_MlDsaKey), NULL, + DYNAMIC_TYPE_MLDSA); + if (mldsa == NULL) { + WOLFSSL_MSG("Failed to allocate memory for wc_MlDsaKey"); XFREE(cert, NULL, DYNAMIC_TYPE_CERT); return WOLFSSL_FAILURE; } - ret = wc_dilithium_init(dilithium); + ret = wc_MlDsaKey_Init(mldsa, NULL, INVALID_DEVID); if (ret != 0) { - XFREE(dilithium, NULL, DYNAMIC_TYPE_DILITHIUM); + XFREE(mldsa, NULL, DYNAMIC_TYPE_MLDSA); XFREE(cert, NULL, DYNAMIC_TYPE_CERT); return ret; } - if (x509->pubKeyOID == ML_DSA_LEVEL2k) { - type = ML_DSA_LEVEL2_TYPE; - wc_dilithium_set_level(dilithium, WC_ML_DSA_44); + if (x509->pubKeyOID == ML_DSA_44k) { + type = ML_DSA_44_TYPE; + wc_MlDsaKey_SetParams(mldsa, WC_ML_DSA_44); } - else if (x509->pubKeyOID == ML_DSA_LEVEL3k) { - type = ML_DSA_LEVEL3_TYPE; - wc_dilithium_set_level(dilithium, WC_ML_DSA_65); + else if (x509->pubKeyOID == ML_DSA_65k) { + type = ML_DSA_65_TYPE; + wc_MlDsaKey_SetParams(mldsa, WC_ML_DSA_65); } - else if (x509->pubKeyOID == ML_DSA_LEVEL5k) { - type = ML_DSA_LEVEL5_TYPE; - wc_dilithium_set_level(dilithium, WC_ML_DSA_87); + else if (x509->pubKeyOID == ML_DSA_87k) { + type = ML_DSA_87_TYPE; + wc_MlDsaKey_SetParams(mldsa, WC_ML_DSA_87); } - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT else if (x509->pubKeyOID == DILITHIUM_LEVEL2k) { type = DILITHIUM_LEVEL2_TYPE; - wc_dilithium_set_level(dilithium, WC_ML_DSA_44_DRAFT); + wc_MlDsaKey_SetParams(mldsa, WC_ML_DSA_44_DRAFT); } else if (x509->pubKeyOID == DILITHIUM_LEVEL3k) { type = DILITHIUM_LEVEL3_TYPE; - wc_dilithium_set_level(dilithium, WC_ML_DSA_65_DRAFT); + wc_MlDsaKey_SetParams(mldsa, WC_ML_DSA_65_DRAFT); } else if (x509->pubKeyOID == DILITHIUM_LEVEL5k) { type = DILITHIUM_LEVEL5_TYPE; - wc_dilithium_set_level(dilithium, WC_ML_DSA_87_DRAFT); + wc_MlDsaKey_SetParams(mldsa, WC_ML_DSA_87_DRAFT); } - #endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ + #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ - ret = wc_Dilithium_PublicKeyDecode(x509->pubKey.buffer, &idx, - dilithium, x509->pubKey.length); + ret = wc_MlDsaKey_PublicKeyDecode(mldsa, x509->pubKey.buffer, + x509->pubKey.length, &idx); if (ret != 0) { WOLFSSL_ERROR_VERBOSE(ret); - wc_dilithium_free(dilithium); - XFREE(dilithium, NULL, DYNAMIC_TYPE_DILITHIUM); + wc_MlDsaKey_Free(mldsa); + XFREE(mldsa, NULL, DYNAMIC_TYPE_MLDSA); XFREE(cert, NULL, DYNAMIC_TYPE_CERT); return ret; } - key = (void*)dilithium; + key = (void*)mldsa; } #endif #if defined(WOLFSSL_HAVE_SLHDSA) @@ -12654,18 +12654,18 @@ static int CertFromX509(Cert* cert, WOLFSSL_X509* x509) XFREE(falcon, NULL, DYNAMIC_TYPE_FALCON); } #endif - #if defined(HAVE_DILITHIUM) - if ((x509->pubKeyOID == ML_DSA_LEVEL2k) || - (x509->pubKeyOID == ML_DSA_LEVEL3k) || - (x509->pubKeyOID == ML_DSA_LEVEL5k) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) + if ((x509->pubKeyOID == ML_DSA_44k) || + (x509->pubKeyOID == ML_DSA_65k) || + (x509->pubKeyOID == ML_DSA_87k) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT || (x509->pubKeyOID == DILITHIUM_LEVEL2k) || (x509->pubKeyOID == DILITHIUM_LEVEL3k) || (x509->pubKeyOID == DILITHIUM_LEVEL5k) #endif ) { - wc_dilithium_free(dilithium); - XFREE(dilithium, NULL, DYNAMIC_TYPE_DILITHIUM); + wc_MlDsaKey_Free(mldsa); + XFREE(mldsa, NULL, DYNAMIC_TYPE_MLDSA); } #endif #if defined(WOLFSSL_HAVE_SLHDSA) diff --git a/tests/api.c b/tests/api.c index 1c3ced8e86..db7f271815 100644 --- a/tests/api.c +++ b/tests/api.c @@ -169,8 +169,8 @@ #include #endif -#ifdef HAVE_DILITHIUM - #include +#ifdef WOLFSSL_HAVE_MLDSA + #include #endif #if defined(WOLFSSL_HAVE_MLKEM) #include @@ -1561,11 +1561,11 @@ static int test_dual_alg_crit_ext_support(void) static int test_dual_alg_ecdsa_mldsa(void) { EXPECT_DECLS; -#if defined(WOLFSSL_DUAL_ALG_CERTS) && defined(HAVE_DILITHIUM) && \ +#if defined(WOLFSSL_DUAL_ALG_CERTS) && defined(WOLFSSL_HAVE_MLDSA) && \ defined(HAVE_ECC) && !defined(WC_NO_RNG) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && !defined(WOLFSSL_SMALL_STACK) + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) && !defined(WOLFSSL_SMALL_STACK) WOLFSSL_CERT_MANAGER * cm = NULL; wc_MlDsaKey alt_ca_key; ecc_key ca_key; @@ -1660,8 +1660,8 @@ static int test_dual_alg_ecdsa_mldsa(void) ExpectIntGT(tbs_der_sz, 0); alt_sig_sz = wc_MakeSigWithBitStr(alt_sig, alt_sig_sz, - CTC_ML_DSA_LEVEL2, tbs_der, tbs_der_sz, - ML_DSA_LEVEL2_TYPE, &alt_ca_key, &rng); + CTC_ML_DSA_44, tbs_der, tbs_der_sz, + ML_DSA_44_TYPE, &alt_ca_key, &rng); ExpectIntGT(alt_sig_sz, 0); ret = wc_SetCustomExtension(&new_cert, 0, "2.5.29.74", alt_sig, alt_sig_sz); @@ -19273,7 +19273,7 @@ static int test_wolfSSL_sigalg_info(void) byte hashSigAlgo[WOLFSSL_MAX_SIGALGO]; word16 len = 0; word16 idx = 0; - int allSigAlgs = SIG_ECDSA | SIG_RSA | SIG_SM2 | SIG_FALCON | SIG_DILITHIUM; + int allSigAlgs = SIG_ECDSA | SIG_RSA | SIG_SM2 | SIG_FALCON | SIG_MLDSA; InitSuitesHashSigAlgo(hashSigAlgo, allSigAlgs, 1, 1, 0xFFFFFFFF, &len); for (idx = 0; idx < len; idx += 2) { @@ -19946,47 +19946,47 @@ static int test_wolfSSL_ticket_keys(void) #ifndef NO_BIO -#if defined(OPENSSL_EXTRA) && defined(HAVE_DILITHIUM) -/* Verify wc_dilithium auto detects the expected ML-DSA level from the OID +#if defined(OPENSSL_EXTRA) && defined(WOLFSSL_HAVE_MLDSA) +/* Verify wc_MlDsaKey auto detects the expected ML-DSA level from the OID * in a SPKI / PKCS#8 DER buffer. Returns 0 on match. */ -static int check_dilithium_der_level(const byte* der, word32 derSz, +static int check_mldsa_der_level(const byte* der, word32 derSz, byte expectedLevel, int isPrivate) { - dilithium_key key; + wc_MlDsaKey key; word32 idx = 0; byte level = 0; int rc; -#ifndef WOLFSSL_DILITHIUM_PRIVATE_KEY +#ifndef WOLFSSL_MLDSA_PRIVATE_KEY (void)isPrivate; #endif - if ((rc = wc_dilithium_init(&key)) != 0) { + if ((rc = wc_MlDsaKey_Init(&key, NULL, INVALID_DEVID)) != 0) { return rc; } -#if defined(WOLFSSL_DILITHIUM_PRIVATE_KEY) +#if defined(WOLFSSL_MLDSA_PRIVATE_KEY) if (isPrivate) { - rc = wc_Dilithium_PrivateKeyDecode(der, &idx, &key, derSz); + rc = wc_MlDsaKey_PrivateKeyDecode(&key, der, derSz, &idx); } else #endif { - rc = wc_Dilithium_PublicKeyDecode(der, &idx, &key, derSz); + rc = wc_MlDsaKey_PublicKeyDecode(&key, der, derSz, &idx); } if (rc == 0) { - rc = wc_dilithium_get_level(&key, &level); + rc = wc_MlDsaKey_GetParams(&key, &level); } if (rc == 0 && level != expectedLevel) { rc = -1; } - wc_dilithium_free(&key); + wc_MlDsaKey_Free(&key); return rc; } -#endif /* OPENSSL_EXTRA && HAVE_DILITHIUM */ +#endif /* OPENSSL_EXTRA && WOLFSSL_HAVE_MLDSA */ static int test_wolfSSL_d2i_PUBKEY(void) { @@ -20038,12 +20038,12 @@ defined(OPENSSL_EXTRA) && defined(WOLFSSL_DH_EXTRA) #endif /* !HAVE_FIPS || HAVE_FIPS_VERSION > 2 */ #endif /* USE_CERT_BUFFERS_2048 && !NO_DH && && OPENSSL_EXTRA */ -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_VERIFY) +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_VERIFY) #if !defined(WOLFSSL_NO_ML_DSA_44) /* ML-DSA-44 PUBKEY test (raw key bytes) */ - ExpectIntGT(BIO_write(bio, bench_dilithium_level2_pubkey, - sizeof_bench_dilithium_level2_pubkey), 0); + ExpectIntGT(BIO_write(bio, bench_mldsa_44_pubkey, + sizeof_bench_mldsa_44_pubkey), 0); ExpectNotNull(pkey = d2i_PUBKEY_bio(bio, NULL)); ExpectIntEQ(EVP_PKEY_id(pkey), EVP_PKEY_DILITHIUM); EVP_PKEY_free(pkey); @@ -20053,7 +20053,7 @@ defined(OPENSSL_EXTRA) && defined(WOLFSSL_DH_EXTRA) ExpectIntGT(BIO_write(bio, mldsa44_pub_spki, sizeof_mldsa44_pub_spki), 0); ExpectNotNull(pkey = d2i_PUBKEY_bio(bio, NULL)); ExpectIntEQ(EVP_PKEY_id(pkey), EVP_PKEY_DILITHIUM); - ExpectIntEQ(check_dilithium_der_level(mldsa44_pub_spki, + ExpectIntEQ(check_mldsa_der_level(mldsa44_pub_spki, sizeof_mldsa44_pub_spki, WC_ML_DSA_44, 0), 0); EVP_PKEY_free(pkey); pkey = NULL; @@ -20061,8 +20061,8 @@ defined(OPENSSL_EXTRA) && defined(WOLFSSL_DH_EXTRA) #if !defined(WOLFSSL_NO_ML_DSA_65) /* ML-DSA-65 PUBKEY test (raw key bytes) */ - ExpectIntGT(BIO_write(bio, bench_dilithium_level3_pubkey, - sizeof_bench_dilithium_level3_pubkey), 0); + ExpectIntGT(BIO_write(bio, bench_mldsa_65_pubkey, + sizeof_bench_mldsa_65_pubkey), 0); ExpectNotNull(pkey = d2i_PUBKEY_bio(bio, NULL)); ExpectIntEQ(EVP_PKEY_id(pkey), EVP_PKEY_DILITHIUM); EVP_PKEY_free(pkey); @@ -20072,7 +20072,7 @@ defined(OPENSSL_EXTRA) && defined(WOLFSSL_DH_EXTRA) ExpectIntGT(BIO_write(bio, mldsa65_pub_spki, sizeof_mldsa65_pub_spki), 0); ExpectNotNull(pkey = d2i_PUBKEY_bio(bio, NULL)); ExpectIntEQ(EVP_PKEY_id(pkey), EVP_PKEY_DILITHIUM); - ExpectIntEQ(check_dilithium_der_level(mldsa65_pub_spki, + ExpectIntEQ(check_mldsa_der_level(mldsa65_pub_spki, sizeof_mldsa65_pub_spki, WC_ML_DSA_65, 0), 0); EVP_PKEY_free(pkey); pkey = NULL; @@ -20080,8 +20080,8 @@ defined(OPENSSL_EXTRA) && defined(WOLFSSL_DH_EXTRA) #if !defined(WOLFSSL_NO_ML_DSA_87) /* ML-DSA-87 PUBKEY test (raw key bytes) */ - ExpectIntGT(BIO_write(bio, bench_dilithium_level5_pubkey, - sizeof_bench_dilithium_level5_pubkey), 0); + ExpectIntGT(BIO_write(bio, bench_mldsa_87_pubkey, + sizeof_bench_mldsa_87_pubkey), 0); ExpectNotNull(pkey = d2i_PUBKEY_bio(bio, NULL)); ExpectIntEQ(EVP_PKEY_id(pkey), EVP_PKEY_DILITHIUM); EVP_PKEY_free(pkey); @@ -20091,13 +20091,13 @@ defined(OPENSSL_EXTRA) && defined(WOLFSSL_DH_EXTRA) ExpectIntGT(BIO_write(bio, mldsa87_pub_spki, sizeof_mldsa87_pub_spki), 0); ExpectNotNull(pkey = d2i_PUBKEY_bio(bio, NULL)); ExpectIntEQ(EVP_PKEY_id(pkey), EVP_PKEY_DILITHIUM); - ExpectIntEQ(check_dilithium_der_level(mldsa87_pub_spki, + ExpectIntEQ(check_mldsa_der_level(mldsa87_pub_spki, sizeof_mldsa87_pub_spki, WC_ML_DSA_87, 0), 0); EVP_PKEY_free(pkey); pkey = NULL; #endif -#endif /* HAVE_DILITHIUM && !NO_VERIFY */ +#endif /* WOLFSSL_HAVE_MLDSA && !NO_VERIFY */ /* Negative test, invalid input must return NULL */ { @@ -20211,12 +20211,12 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) } #endif -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_SIGN) +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_SIGN) #if !defined(WOLFSSL_NO_ML_DSA_44) /* ML-DSA-44 PrivateKey test (raw bytes) */ ExpectNotNull(bio = BIO_new(BIO_s_mem())); - ExpectIntGT(BIO_write(bio, bench_dilithium_level2_key, - sizeof_bench_dilithium_level2_key), 0); + ExpectIntGT(BIO_write(bio, bench_mldsa_44_key, + sizeof_bench_mldsa_44_key), 0); ExpectNotNull(pkey = d2i_PrivateKey_bio(bio, NULL)); ExpectIntEQ(EVP_PKEY_id(pkey), EVP_PKEY_DILITHIUM); EVP_PKEY_free(pkey); @@ -20230,7 +20230,7 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) sizeof_mldsa44_priv_only), 0); ExpectNotNull(pkey = d2i_PrivateKey_bio(bio, NULL)); ExpectIntEQ(EVP_PKEY_id(pkey), EVP_PKEY_DILITHIUM); - ExpectIntEQ(check_dilithium_der_level(mldsa44_priv_only, + ExpectIntEQ(check_mldsa_der_level(mldsa44_priv_only, sizeof_mldsa44_priv_only, WC_ML_DSA_44, 1), 0); EVP_PKEY_free(pkey); pkey = NULL; @@ -20248,7 +20248,7 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) BIO_free(bio); bio = NULL; -#ifndef WOLFSSL_DILITHIUM_NO_MAKE_KEY +#ifndef WOLFSSL_MLDSA_NO_MAKE_KEY /* ML-DSA-44 PrivateKey test (LAMPS PKCS#8 seed-only DER) -- * requires wc_dilithium_make_key_from_seed to expand the seed. */ ExpectNotNull(bio = BIO_new(BIO_s_mem())); @@ -20266,8 +20266,8 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) #if !defined(WOLFSSL_NO_ML_DSA_65) /* ML-DSA-65 PrivateKey test (raw bytes) */ ExpectNotNull(bio = BIO_new(BIO_s_mem())); - ExpectIntGT(BIO_write(bio, bench_dilithium_level3_key, - sizeof_bench_dilithium_level3_key), 0); + ExpectIntGT(BIO_write(bio, bench_mldsa_65_key, + sizeof_bench_mldsa_65_key), 0); ExpectNotNull(pkey = d2i_PrivateKey_bio(bio, NULL)); ExpectIntEQ(EVP_PKEY_id(pkey), EVP_PKEY_DILITHIUM); EVP_PKEY_free(pkey); @@ -20281,7 +20281,7 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) sizeof_mldsa65_priv_only), 0); ExpectNotNull(pkey = d2i_PrivateKey_bio(bio, NULL)); ExpectIntEQ(EVP_PKEY_id(pkey), EVP_PKEY_DILITHIUM); - ExpectIntEQ(check_dilithium_der_level(mldsa65_priv_only, + ExpectIntEQ(check_mldsa_der_level(mldsa65_priv_only, sizeof_mldsa65_priv_only, WC_ML_DSA_65, 1), 0); EVP_PKEY_free(pkey); pkey = NULL; @@ -20299,7 +20299,7 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) BIO_free(bio); bio = NULL; -#ifndef WOLFSSL_DILITHIUM_NO_MAKE_KEY +#ifndef WOLFSSL_MLDSA_NO_MAKE_KEY /* ML-DSA-65 PrivateKey test (LAMPS PKCS#8 seed-only DER) -- * requires wc_dilithium_make_key_from_seed to expand the seed. */ ExpectNotNull(bio = BIO_new(BIO_s_mem())); @@ -20317,8 +20317,8 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) #if !defined(WOLFSSL_NO_ML_DSA_87) /* ML-DSA-87 PrivateKey test (raw bytes) */ ExpectNotNull(bio = BIO_new(BIO_s_mem())); - ExpectIntGT(BIO_write(bio, bench_dilithium_level5_key, - sizeof_bench_dilithium_level5_key), 0); + ExpectIntGT(BIO_write(bio, bench_mldsa_87_key, + sizeof_bench_mldsa_87_key), 0); ExpectNotNull(pkey = d2i_PrivateKey_bio(bio, NULL)); ExpectIntEQ(EVP_PKEY_id(pkey), EVP_PKEY_DILITHIUM); EVP_PKEY_free(pkey); @@ -20332,7 +20332,7 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) sizeof_mldsa87_priv_only), 0); ExpectNotNull(pkey = d2i_PrivateKey_bio(bio, NULL)); ExpectIntEQ(EVP_PKEY_id(pkey), EVP_PKEY_DILITHIUM); - ExpectIntEQ(check_dilithium_der_level(mldsa87_priv_only, + ExpectIntEQ(check_mldsa_der_level(mldsa87_priv_only, sizeof_mldsa87_priv_only, WC_ML_DSA_87, 1), 0); EVP_PKEY_free(pkey); pkey = NULL; @@ -20350,7 +20350,7 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) BIO_free(bio); bio = NULL; -#ifndef WOLFSSL_DILITHIUM_NO_MAKE_KEY +#ifndef WOLFSSL_MLDSA_NO_MAKE_KEY /* ML-DSA-87 PrivateKey test (LAMPS PKCS#8 seed-only DER) -- * requires wc_dilithium_make_key_from_seed to expand the seed. */ ExpectNotNull(bio = BIO_new(BIO_s_mem())); @@ -20364,7 +20364,7 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) bio = NULL; #endif #endif -#endif /* HAVE_DILITHIUM && !NO_SIGN */ +#endif /* WOLFSSL_HAVE_MLDSA && !NO_SIGN */ ExpectNotNull(bio = BIO_new(BIO_s_mem())); #ifndef NO_WOLFSSL_SERVER @@ -39041,10 +39041,10 @@ static int test_DhAgree_rejects_p_minus_1(void) static int test_mldsa_verify_hash(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - dilithium_key key; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) + wc_MlDsaKey key; WC_RNG rng; int res = 0; byte sig[4000]; @@ -39056,22 +39056,22 @@ static int test_mldsa_verify_hash(void) XMEMSET(hash, 'A', sizeof(hash)); ExpectIntEQ(wc_InitRng(&rng), 0); - ExpectIntEQ(wc_dilithium_init(&key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(&key, NULL, INVALID_DEVID), 0); #ifndef WOLFSSL_NO_ML_DSA_65 - ExpectIntEQ(wc_dilithium_set_level(&key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(&key, WC_ML_DSA_65), 0); #elif !defined(WOLFSSL_NO_ML_DSA_44) - ExpectIntEQ(wc_dilithium_set_level(&key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(&key, WC_ML_DSA_44), 0); #else - ExpectIntEQ(wc_dilithium_set_level(&key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(&key, WC_ML_DSA_87), 0); #endif - ExpectIntEQ(wc_dilithium_make_key(&key, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(&key, &rng), 0); /* hashLen=4096 must be rejected, not overflow the stack */ - ExpectIntEQ(wc_dilithium_verify_ctx_hash(sig, sizeof(sig), NULL, 0, - WC_HASH_TYPE_SHA256, hash, sizeof(hash), &res, &key), + ExpectIntEQ(wc_MlDsaKey_VerifyCtxHash(&key, sig, sizeof(sig), NULL, 0, + hash, sizeof(hash), WC_HASH_TYPE_SHA256, &res), WC_NO_ERR_TRACE(BAD_LENGTH_E)); - wc_dilithium_free(&key); + wc_MlDsaKey_Free(&key); DoExpectIntEQ(wc_FreeRng(&rng), 0); #endif return EXPECT_RESULT(); @@ -39959,10 +39959,10 @@ static int test_pkcs7_enveloped_content_size_overflow(void) static int test_dilithium_hash(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - dilithium_key key; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) + wc_MlDsaKey key; WC_RNG rng; int res = 0; byte sig[4000]; @@ -39974,20 +39974,20 @@ static int test_dilithium_hash(void) XMEMSET(msg, 'A', sizeof(msg)); ExpectIntEQ(wc_InitRng(&rng), 0); - ExpectIntEQ(wc_dilithium_init(&key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(&key, NULL, INVALID_DEVID), 0); #ifndef WOLFSSL_NO_ML_DSA_65 - ExpectIntEQ(wc_dilithium_set_level(&key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(&key, WC_ML_DSA_65), 0); #elif !defined(WOLFSSL_NO_ML_DSA_44) - ExpectIntEQ(wc_dilithium_set_level(&key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(&key, WC_ML_DSA_44), 0); #else - ExpectIntEQ(wc_dilithium_set_level(&key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(&key, WC_ML_DSA_87), 0); #endif - ExpectIntEQ(wc_dilithium_make_key(&key, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(&key, &rng), 0); - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig, sizeof(sig), NULL, 0, - msg, 0xFFFFFFC0, &res, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(&key, sig, sizeof(sig), NULL, 0, + msg, 0xFFFFFFC0, &res), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - wc_dilithium_free(&key); + wc_MlDsaKey_Free(&key); DoExpectIntEQ(wc_FreeRng(&rng), 0); #endif return EXPECT_RESULT(); diff --git a/tests/api/include.am b/tests/api/include.am index cbe2e10a8a..07d5eaab73 100644 --- a/tests/api/include.am +++ b/tests/api/include.am @@ -48,6 +48,7 @@ tests_unit_test_SOURCES += tests/api/test_curve448.c tests_unit_test_SOURCES += tests/api/test_ed448.c tests_unit_test_SOURCES += tests/api/test_mlkem.c tests_unit_test_SOURCES += tests/api/test_mldsa.c +tests_unit_test_SOURCES += tests/api/test_mldsa_legacy.c tests_unit_test_SOURCES += tests/api/test_slhdsa.c tests_unit_test_SOURCES += tests/api/test_signature.c # TLS Protocol diff --git a/tests/api/test_mldsa.c b/tests/api/test_mldsa.c index cce9422094..dc52a54453 100644 --- a/tests/api/test_mldsa.c +++ b/tests/api/test_mldsa.c @@ -19,16 +19,19 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ -/* NOTE: this file is named test_mldsa.c (canonical FIPS 204 spelling) but - * the test bodies still gate on legacy WOLFSSL_DILITHIUM_* names and call - * legacy wc_dilithium_* / dilithium_key APIs. That is intentional: the - * provider-side rename (Dilithium -> ML-DSA, see - * and ) keeps in-tree consumers on the - * pre-standardization spelling so the rename PR stays scoped to provider - * code only. A separate follow-up commit will migrate this file's call - * sites and #ifdef gates to canonical WOLFSSL_MLDSA_* / wc_MlDsaKey_* - * spellings; until then both spellings are kept in sync by the temporary - * compatibility shim in . */ +/* Canonical ML-DSA API tests. + * + * This file exercises the canonical FIPS 204 ML-DSA API + * () using the `wc_MlDsaKey` / + * `wc_MlDsaKey_*` / `WC_MLDSA_*` / `WOLFSSL_MLDSA_*` spellings + * exclusively, with no reliance on the legacy `wc_dilithium_*` / + * `dilithium_key` / `DILITHIUM_*` shim. It therefore runs under all + * build configurations, including builds that define + * `WOLFSSL_NO_DILITHIUM_LEGACY_NAMES` to remove the legacy alias surface. + * + * The companion file `tests/api/test_mldsa_legacy.c` carries the + * legacy-spelling regression tests (`test_mldsa_legacy_shim_*`) and is + * skipped automatically when the legacy alias surface is disabled. */ #include @@ -40,17 +43,17 @@ #endif #include -#ifdef HAVE_DILITHIUM - #include +#ifdef WOLFSSL_HAVE_MLDSA + #include #endif #include #include #include -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && !defined(WOLFSSL_NO_ML_DSA_44) && \ - defined(WOLFSSL_DILITHIUM_NO_CTX) +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) && !defined(WOLFSSL_NO_ML_DSA_44) && \ + defined(WOLFSSL_MLDSA_NO_CTX) static const byte ml_dsa_44_pub_key[] = { 0x7c, 0x33, 0x31, 0x41, 0x15, 0xa7, 0x2d, 0x6b, 0x17, 0x7c, 0x10, 0xab, 0x75, 0xf7, 0x83, 0xb3, @@ -524,174 +527,173 @@ static const byte ml_dsa_44_good_sig[] = { }; #endif -int test_wc_dilithium(void) +int test_mldsa(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) - dilithium_key* key; +#if defined(WOLFSSL_HAVE_MLDSA) + wc_MlDsaKey* key; byte level; -#if !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) || \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) +#if !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) || \ + !defined(WOLFSSL_MLDSA_NO_SIGN) WC_RNG rng; #endif byte* privKey = NULL; -#ifndef WOLFSSL_DILITHIUM_NO_SIGN - word32 privKeyLen = DILITHIUM_MAX_KEY_SIZE; +#ifndef WOLFSSL_MLDSA_NO_SIGN + word32 privKeyLen = MLDSA_MAX_KEY_SIZE; #endif byte* pubKey = NULL; -#ifndef WOLFSSL_DILITHIUM_NO_VERIFY - word32 pubKeyLen = DILITHIUM_MAX_PUB_KEY_SIZE; +#ifndef WOLFSSL_MLDSA_NO_VERIFY + word32 pubKeyLen = MLDSA_MAX_PUB_KEY_SIZE; #endif - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); - privKey = (byte*)XMALLOC(DILITHIUM_MAX_KEY_SIZE, NULL, + privKey = (byte*)XMALLOC(MLDSA_MAX_KEY_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(privKey); - pubKey = (byte*)XMALLOC(DILITHIUM_MAX_PUB_KEY_SIZE, NULL, + pubKey = (byte*)XMALLOC(MLDSA_MAX_PUB_KEY_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(pubKey); if (key != NULL) { XMEMSET(key, 0, sizeof(*key)); } -#if !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) || \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) +#if !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) || \ + !defined(WOLFSSL_MLDSA_NO_SIGN) XMEMSET(&rng, 0, sizeof(WC_RNG)); #endif -#if !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) || \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) +#if !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) || \ + !defined(WOLFSSL_MLDSA_NO_SIGN) ExpectIntEQ(wc_InitRng(&rng), 0); #endif PRIVATE_KEY_UNLOCK(); - ExpectIntEQ(wc_dilithium_init(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_init_ex(NULL, NULL, INVALID_DEVID), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - wc_dilithium_free(NULL); + ExpectIntEQ(wc_MlDsaKey_Init(NULL, NULL, INVALID_DEVID), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + wc_MlDsaKey_Free(NULL); - ExpectIntEQ(wc_dilithium_init(key), 0); - wc_dilithium_free(key); - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + wc_MlDsaKey_Free(key); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); -#ifndef WOLFSSL_DILITHIUM_NO_VERIFY - ExpectIntEQ(wc_dilithium_export_public(key, pubKey, &pubKeyLen), +#ifndef WOLFSSL_MLDSA_NO_VERIFY + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(key, pubKey, &pubKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif -#ifndef WOLFSSL_DILITHIUM_NO_SIGN - ExpectIntEQ(wc_dilithium_export_private(key, privKey, &privKeyLen), +#ifndef WOLFSSL_MLDSA_NO_SIGN + ExpectIntEQ(wc_MlDsaKey_ExportPrivRaw(key, privKey, &privKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif -#ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY - ExpectIntEQ(wc_dilithium_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_priv_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY + ExpectIntEQ(wc_MlDsaKey_Size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + ExpectIntEQ(wc_MlDsaKey_PrivSize(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #endif -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_pub_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + ExpectIntEQ(wc_MlDsaKey_PubSize(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif -#if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - ExpectIntEQ(wc_dilithium_sig_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); +#if !defined(WOLFSSL_MLDSA_NO_SIGN) || !defined(WOLFSSL_MLDSA_NO_VERIFY) + ExpectIntEQ(wc_MlDsaKey_SigSize(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif -#ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY - ExpectIntEQ(wc_dilithium_size(key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_priv_size(key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY + ExpectIntEQ(wc_MlDsaKey_Size(key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + ExpectIntEQ(wc_MlDsaKey_PrivSize(key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #endif -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_pub_size(key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + ExpectIntEQ(wc_MlDsaKey_PubSize(key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif -#if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - ExpectIntEQ(wc_dilithium_sig_size(key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); +#if !defined(WOLFSSL_MLDSA_NO_SIGN) || !defined(WOLFSSL_MLDSA_NO_VERIFY) + ExpectIntEQ(wc_MlDsaKey_SigSize(key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif - ExpectIntEQ(wc_dilithium_set_level(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_set_level(key, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_set_level(NULL, WC_ML_DSA_44), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_set_level(key, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_set_level(key, 4), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_SetParams(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_SetParams(NULL, WC_ML_DSA_44), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, 4), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_get_level(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_get_level(key, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_get_level(NULL, &level), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_get_level(key, &level), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_GetParams(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_GetParams(key, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_GetParams(NULL, &level), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_GetParams(key, &level), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef WOLFSSL_NO_ML_DSA_87 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_get_level(key, &level), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_GetParams(key, &level), 0); ExpectIntEQ(level, WC_ML_DSA_87); -#ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY - ExpectIntEQ(wc_dilithium_size(key), DILITHIUM_LEVEL5_KEY_SIZE); -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_priv_size(key), DILITHIUM_LEVEL5_PRV_KEY_SIZE); +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY + ExpectIntEQ(wc_MlDsaKey_Size(key), WC_MLDSA_87_KEY_SIZE); +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + ExpectIntEQ(wc_MlDsaKey_PrivSize(key), WC_MLDSA_87_PRV_KEY_SIZE); #endif #endif -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_pub_size(key), DILITHIUM_LEVEL5_PUB_KEY_SIZE); +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + ExpectIntEQ(wc_MlDsaKey_PubSize(key), WC_MLDSA_87_PUB_KEY_SIZE); #endif -#if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - ExpectIntEQ(wc_dilithium_sig_size(key), DILITHIUM_LEVEL5_SIG_SIZE); +#if !defined(WOLFSSL_MLDSA_NO_SIGN) || !defined(WOLFSSL_MLDSA_NO_VERIFY) + ExpectIntEQ(wc_MlDsaKey_SigSize(key), WC_MLDSA_87_SIG_SIZE); #endif #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); #endif #ifndef WOLFSSL_NO_ML_DSA_65 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_get_level(key, &level), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_GetParams(key, &level), 0); ExpectIntEQ(level, WC_ML_DSA_65); -#ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY - ExpectIntEQ(wc_dilithium_size(key), DILITHIUM_LEVEL3_KEY_SIZE); -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_priv_size(key), DILITHIUM_LEVEL3_PRV_KEY_SIZE); +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY + ExpectIntEQ(wc_MlDsaKey_Size(key), WC_MLDSA_65_KEY_SIZE); +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + ExpectIntEQ(wc_MlDsaKey_PrivSize(key), WC_MLDSA_65_PRV_KEY_SIZE); #endif #endif -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_pub_size(key), DILITHIUM_LEVEL3_PUB_KEY_SIZE); +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + ExpectIntEQ(wc_MlDsaKey_PubSize(key), WC_MLDSA_65_PUB_KEY_SIZE); #endif -#if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - ExpectIntEQ(wc_dilithium_sig_size(key), DILITHIUM_LEVEL3_SIG_SIZE); +#if !defined(WOLFSSL_MLDSA_NO_SIGN) || !defined(WOLFSSL_MLDSA_NO_VERIFY) + ExpectIntEQ(wc_MlDsaKey_SigSize(key), WC_MLDSA_65_SIG_SIZE); #endif #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); #endif #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_get_level(key, &level), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_GetParams(key, &level), 0); ExpectIntEQ(level, WC_ML_DSA_44); -#ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY - ExpectIntEQ(wc_dilithium_size(key), DILITHIUM_LEVEL2_KEY_SIZE); -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_priv_size(key), DILITHIUM_LEVEL2_PRV_KEY_SIZE); +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY + ExpectIntEQ(wc_MlDsaKey_Size(key), WC_MLDSA_44_KEY_SIZE); +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + ExpectIntEQ(wc_MlDsaKey_PrivSize(key), WC_MLDSA_44_PRV_KEY_SIZE); #endif #endif -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_pub_size(key), DILITHIUM_LEVEL2_PUB_KEY_SIZE); +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + ExpectIntEQ(wc_MlDsaKey_PubSize(key), WC_MLDSA_44_PUB_KEY_SIZE); #endif -#if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - ExpectIntEQ(wc_dilithium_sig_size(key), DILITHIUM_LEVEL2_SIG_SIZE); +#if !defined(WOLFSSL_MLDSA_NO_SIGN) || !defined(WOLFSSL_MLDSA_NO_VERIFY) + ExpectIntEQ(wc_MlDsaKey_SigSize(key), WC_MLDSA_44_SIG_SIZE); #endif #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); #endif -#ifndef WOLFSSL_DILITHIUM_NO_VERIFY - ExpectIntEQ(wc_dilithium_export_public(key, pubKey, &pubKeyLen), +#ifndef WOLFSSL_MLDSA_NO_VERIFY + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(key, pubKey, &pubKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif -#ifndef WOLFSSL_DILITHIUM_NO_SIGN - ExpectIntEQ(wc_dilithium_export_private(key, privKey, &privKeyLen), +#ifndef WOLFSSL_MLDSA_NO_SIGN + ExpectIntEQ(wc_MlDsaKey_ExportPrivRaw(key, privKey, &privKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif PRIVATE_KEY_LOCK(); - wc_dilithium_free(key); -#if !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) || \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) + wc_MlDsaKey_Free(key); +#if !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) || \ + !defined(WOLFSSL_MLDSA_NO_SIGN) wc_FreeRng(&rng); #endif XFREE(pubKey, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -702,36 +704,36 @@ int test_wc_dilithium(void) } /* - * Test that wc_dilithium_sign_msg() rejects a public-key-only key object. + * Test that wc_MlDsaKey_Sign() rejects a public-key-only key object. * A key with prvKeySet=0 must not silently sign with zeroed key data. */ -int test_wc_dilithium_sign_pubonly_fails(void) +int test_mldsa_sign_pubonly_fails(void) { EXPECT_DECLS; #if !defined(HAVE_FIPS) || FIPS_VERSION3_GE(7,0,0) -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_CTX) - dilithium_key* key; - dilithium_key* pubOnlyKey; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_CTX) + wc_MlDsaKey* key; + wc_MlDsaKey* pubOnlyKey; WC_RNG rng; byte* pubBuf = NULL; - word32 pubLen = DILITHIUM_MAX_PUB_KEY_SIZE; + word32 pubLen = MLDSA_MAX_PUB_KEY_SIZE; byte msg[] = "test message for pubonly check"; byte* sig = NULL; - word32 sigLen = DILITHIUM_MAX_SIG_SIZE; + word32 sigLen = MLDSA_MAX_SIG_SIZE; - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); - pubOnlyKey = (dilithium_key*)XMALLOC(sizeof(*pubOnlyKey), NULL, + pubOnlyKey = (wc_MlDsaKey*)XMALLOC(sizeof(*pubOnlyKey), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(pubOnlyKey); - pubBuf = (byte*)XMALLOC(DILITHIUM_MAX_PUB_KEY_SIZE, NULL, + pubBuf = (byte*)XMALLOC(MLDSA_MAX_PUB_KEY_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(pubBuf); - sig = (byte*)XMALLOC(DILITHIUM_MAX_SIG_SIZE, NULL, + sig = (byte*)XMALLOC(MLDSA_MAX_SIG_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(sig); @@ -742,34 +744,33 @@ int test_wc_dilithium_sign_pubonly_fails(void) XMEMSET(&rng, 0, sizeof(rng)); ExpectIntEQ(wc_InitRng(&rng), 0); - ExpectIntEQ(wc_dilithium_init(key), 0); - ExpectIntEQ(wc_dilithium_init(pubOnlyKey), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_Init(pubOnlyKey, NULL, INVALID_DEVID), 0); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_set_level(pubOnlyKey, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(pubOnlyKey, WC_ML_DSA_44), 0); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_set_level(pubOnlyKey, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(pubOnlyKey, WC_ML_DSA_65), 0); #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_set_level(pubOnlyKey, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(pubOnlyKey, WC_ML_DSA_87), 0); #endif /* Generate a real key pair and export its public key. */ - ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); - ExpectIntEQ(wc_dilithium_export_public(key, pubBuf, &pubLen), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(key, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(key, pubBuf, &pubLen), 0); /* Import only the public key into a fresh key object. */ - ExpectIntEQ(wc_dilithium_import_public(pubBuf, pubLen, pubOnlyKey), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(pubOnlyKey, pubBuf, pubLen), 0); /* Signing with a public-key-only object must fail. */ - ExpectIntEQ(wc_dilithium_sign_ctx_msg(NULL, 0, msg, sizeof(msg), sig, - &sigLen, pubOnlyKey, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_SignCtx(pubOnlyKey, NULL, 0, sig, &sigLen, msg, sizeof(msg), &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); - wc_dilithium_free(pubOnlyKey); - wc_dilithium_free(key); + wc_MlDsaKey_Free(pubOnlyKey); + wc_MlDsaKey_Free(key); XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(pubBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(pubOnlyKey, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -777,17 +778,17 @@ int test_wc_dilithium_sign_pubonly_fails(void) #endif #endif return EXPECT_RESULT(); -} /* END test_wc_dilithium_sign_pubonly_fails */ +} /* END test_mldsa_sign_pubonly_fails */ -int test_wc_dilithium_make_key(void) +int test_mldsa_make_key(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) - dilithium_key* key; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) + wc_MlDsaKey* key; WC_RNG rng; - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); if (key != NULL) { @@ -796,54 +797,54 @@ int test_wc_dilithium_make_key(void) XMEMSET(&rng, 0, sizeof(WC_RNG)); ExpectIntEQ(wc_InitRng(&rng), 0); - ExpectIntEQ(wc_dilithium_init(key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_make_key(key, &rng), WC_NO_ERR_TRACE(BAD_STATE_E)); + ExpectIntEQ(wc_MlDsaKey_MakeKey(key, &rng), WC_NO_ERR_TRACE(BAD_STATE_E)); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); #endif - ExpectIntEQ(wc_dilithium_make_key(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_make_key(key, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_make_key(NULL, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_MakeKey(key, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_MakeKey(NULL, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_MakeKey(key, &rng), 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); wc_FreeRng(&rng); XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return EXPECT_RESULT(); } -int test_wc_dilithium_sign(void) +int test_mldsa_sign(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) && defined(WOLFSSL_DILITHIUM_NO_CTX) - dilithium_key* key; - dilithium_key* importKey = NULL; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) && defined(WOLFSSL_MLDSA_NO_CTX) + wc_MlDsaKey* key; + wc_MlDsaKey* importKey = NULL; WC_RNG rng; byte* privKey = NULL; - word32 privKeyLen = DILITHIUM_MAX_KEY_SIZE; + word32 privKeyLen = MLDSA_MAX_KEY_SIZE; word32 badKeyLen; byte msg[32]; byte* sig = NULL; - word32 sigLen = DILITHIUM_MAX_SIG_SIZE; + word32 sigLen = MLDSA_MAX_SIG_SIZE; - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); - importKey = (dilithium_key*)XMALLOC(sizeof(*key), NULL, + importKey = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(importKey); - privKey = (byte*)XMALLOC(DILITHIUM_MAX_KEY_SIZE, NULL, + privKey = (byte*)XMALLOC(MLDSA_MAX_KEY_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(privKey); - sig = (byte*)XMALLOC(DILITHIUM_MAX_SIG_SIZE, NULL, + sig = (byte*)XMALLOC(MLDSA_MAX_SIG_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(sig); @@ -857,126 +858,146 @@ int test_wc_dilithium_sign(void) XMEMSET(msg, 0x55, sizeof(msg)); ExpectIntEQ(wc_InitRng(&rng), 0); - ExpectIntEQ(wc_dilithium_init(key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); PRIVATE_KEY_UNLOCK(); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); #endif -#ifdef WOLFSSL_DILITHIUM_NO_MAKE_KEY +#ifdef WOLFSSL_MLDSA_NO_MAKE_KEY + { + #ifndef WOLFSSL_MLDSA_NO_ASN1 + word32 idx = 0; + #endif #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_import_private(bench_dilithium_level2_key, - sizeof_bench_dilithium_level2_key, key), 0); + #ifndef WOLFSSL_MLDSA_NO_ASN1 + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(key, mldsa44_priv_only, + sizeof_mldsa44_priv_only, &idx), 0); + #else + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, bench_mldsa_44_key, + sizeof_bench_mldsa_44_key), 0); + #endif #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(wc_dilithium_import_private(bench_dilithium_level3_key, - sizeof_bench_dilithium_level3_key, key), 0); + #ifndef WOLFSSL_MLDSA_NO_ASN1 + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(key, mldsa65_priv_only, + sizeof_mldsa65_priv_only, &idx), 0); + #else + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, bench_mldsa_65_key, + sizeof_bench_mldsa_65_key), 0); + #endif #else - ExpectIntEQ(wc_dilithium_import_private(bench_dilithium_level5_key, - sizeof_bench_dilithium_level5_key, key), 0); + #ifndef WOLFSSL_MLDSA_NO_ASN1 + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(key, mldsa87_priv_only, + sizeof_mldsa87_priv_only, &idx), 0); + #else + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, bench_mldsa_87_key, + sizeof_bench_mldsa_87_key), 0); + #endif #endif + } #else - ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(key, &rng), 0); #endif - ExpectIntEQ(wc_dilithium_sign_msg(NULL, 32, NULL, NULL, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_Sign(NULL, NULL, NULL, NULL, 32, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, NULL, NULL, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_Sign(NULL, NULL, NULL, msg, 32, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_sign_msg(NULL, 32, sig, NULL, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_Sign(NULL, sig, NULL, NULL, 32, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_sign_msg(NULL, 32, NULL, &sigLen, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_Sign(NULL, NULL, &sigLen, NULL, 32, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_sign_msg(NULL, 32, NULL, NULL, key, NULL), + ExpectIntEQ(wc_MlDsaKey_Sign(key, NULL, NULL, NULL, 32, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_sign_msg(NULL, 32, NULL, NULL, NULL, &rng), + ExpectIntEQ(wc_MlDsaKey_Sign(NULL, NULL, NULL, NULL, 32, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_sign_msg(NULL, 32, sig, &sigLen, key, &rng), + ExpectIntEQ(wc_MlDsaKey_Sign(key, sig, &sigLen, NULL, 32, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, NULL, &sigLen, key, &rng), + ExpectIntEQ(wc_MlDsaKey_Sign(key, NULL, &sigLen, msg, 32, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, sig, NULL, key, &rng), + ExpectIntEQ(wc_MlDsaKey_Sign(key, sig, NULL, msg, 32, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, sig, &sigLen, NULL, &rng), + ExpectIntEQ(wc_MlDsaKey_Sign(NULL, sig, &sigLen, msg, 32, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, sig, &sigLen, key, NULL), + ExpectIntEQ(wc_MlDsaKey_Sign(key, sig, &sigLen, msg, 32, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, sig, &sigLen, key, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_Sign(key, sig, &sigLen, msg, 32, &rng), 0); - ExpectIntEQ(wc_dilithium_export_private(NULL, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_ExportPrivRaw(NULL, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_private(key, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_ExportPrivRaw(key, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_private(NULL, privKey, NULL), + ExpectIntEQ(wc_MlDsaKey_ExportPrivRaw(NULL, privKey, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_private(NULL, NULL, &privKeyLen), + ExpectIntEQ(wc_MlDsaKey_ExportPrivRaw(NULL, NULL, &privKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_private(NULL, privKey, &privKeyLen), + ExpectIntEQ(wc_MlDsaKey_ExportPrivRaw(NULL, privKey, &privKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_private(key, NULL, &privKeyLen), + ExpectIntEQ(wc_MlDsaKey_ExportPrivRaw(key, NULL, &privKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_private(key, privKey, NULL), + ExpectIntEQ(wc_MlDsaKey_ExportPrivRaw(key, privKey, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); badKeyLen = 0; - ExpectIntEQ(wc_dilithium_export_private(key, privKey, &badKeyLen), + ExpectIntEQ(wc_MlDsaKey_ExportPrivRaw(key, privKey, &badKeyLen), WC_NO_ERR_TRACE(BUFFER_E)); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(badKeyLen, DILITHIUM_LEVEL2_KEY_SIZE); + ExpectIntEQ(badKeyLen, WC_MLDSA_44_KEY_SIZE); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(badKeyLen, DILITHIUM_LEVEL3_KEY_SIZE); + ExpectIntEQ(badKeyLen, WC_MLDSA_65_KEY_SIZE); #else - ExpectIntEQ(badKeyLen, DILITHIUM_LEVEL5_KEY_SIZE); + ExpectIntEQ(badKeyLen, WC_MLDSA_87_KEY_SIZE); #endif - ExpectIntEQ(wc_dilithium_export_private(key, privKey, &privKeyLen), + ExpectIntEQ(wc_MlDsaKey_ExportPrivRaw(key, privKey, &privKeyLen), 0); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(privKeyLen, DILITHIUM_LEVEL2_KEY_SIZE); + ExpectIntEQ(privKeyLen, WC_MLDSA_44_KEY_SIZE); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(privKeyLen, DILITHIUM_LEVEL3_KEY_SIZE); + ExpectIntEQ(privKeyLen, WC_MLDSA_65_KEY_SIZE); #else - ExpectIntEQ(privKeyLen, DILITHIUM_LEVEL5_KEY_SIZE); + ExpectIntEQ(privKeyLen, WC_MLDSA_87_KEY_SIZE); #endif - ExpectIntEQ(wc_dilithium_init(importKey), 0); - ExpectIntEQ(wc_dilithium_import_private(privKey, privKeyLen, importKey), + ExpectIntEQ(wc_MlDsaKey_Init(importKey, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(importKey, privKey, privKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(importKey, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(importKey, WC_ML_DSA_44), 0); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(wc_dilithium_set_level(importKey, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(importKey, WC_ML_DSA_65), 0); #else - ExpectIntEQ(wc_dilithium_set_level(importKey, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(importKey, WC_ML_DSA_87), 0); #endif - ExpectIntEQ(wc_dilithium_import_private(NULL, 0, NULL), + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_private(privKey, 0, NULL), + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(NULL, privKey, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_private(NULL, privKeyLen, NULL), + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(NULL, NULL, privKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_private(NULL, 0, importKey), + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(importKey, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_private(NULL, privKeyLen, importKey), + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(importKey, NULL, privKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_private(privKey, 0, importKey), + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(importKey, privKey, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_private(privKey, privKeyLen, NULL), + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(NULL, privKey, privKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_private(privKey, privKeyLen, importKey), + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(importKey, privKey, privKeyLen), 0); - ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, sig, &sigLen, key, &rng), 0); -#ifdef WOLFSSL_DILITHIUM_CHECK_KEY - ExpectIntEQ(wc_dilithium_check_key(importKey), WC_NO_ERR_TRACE(PUBLIC_KEY_E)); + ExpectIntEQ(wc_MlDsaKey_Sign(key, sig, &sigLen, msg, 32, &rng), 0); +#ifdef WOLFSSL_MLDSA_CHECK_KEY + ExpectIntEQ(wc_MlDsaKey_CheckKey(importKey), WC_NO_ERR_TRACE(PUBLIC_KEY_E)); #endif - wc_dilithium_free(importKey); + wc_MlDsaKey_Free(importKey); PRIVATE_KEY_LOCK(); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); wc_FreeRng(&rng); XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -987,35 +1008,35 @@ int test_wc_dilithium_sign(void) return EXPECT_RESULT(); } -int test_wc_dilithium_verify(void) +int test_mldsa_verify(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && defined(WOLFSSL_DILITHIUM_NO_CTX) && \ - (!defined(WOLFSSL_NO_ML_DSA_44) || !defined(WOLFSSL_DILITHIUM_NO_SIGN)) - dilithium_key* key; - dilithium_key* importKey = NULL; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) && defined(WOLFSSL_MLDSA_NO_CTX) && \ + (!defined(WOLFSSL_NO_ML_DSA_44) || !defined(WOLFSSL_MLDSA_NO_SIGN)) + wc_MlDsaKey* key; + wc_MlDsaKey* importKey = NULL; WC_RNG rng; byte* pubKey = NULL; - word32 pubKeyLen = DILITHIUM_MAX_PUB_KEY_SIZE; + word32 pubKeyLen = MLDSA_MAX_PUB_KEY_SIZE; word32 badKeyLen; byte msg[32]; byte* sig = NULL; - word32 sigLen = DILITHIUM_MAX_SIG_SIZE; + word32 sigLen = MLDSA_MAX_SIG_SIZE; int res; #ifndef WOLFSSL_NO_ML_DSA_44 byte b; #endif - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); - importKey = (dilithium_key*)XMALLOC(sizeof(*key), NULL, + importKey = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(importKey); - pubKey = (byte*)XMALLOC(DILITHIUM_MAX_PUB_KEY_SIZE, NULL, + pubKey = (byte*)XMALLOC(MLDSA_MAX_PUB_KEY_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(pubKey); - sig = (byte*)XMALLOC(DILITHIUM_MAX_SIG_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); + sig = (byte*)XMALLOC(MLDSA_MAX_SIG_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(sig); if (key != NULL) { @@ -1028,129 +1049,131 @@ int test_wc_dilithium_verify(void) XMEMSET(msg, 0x55, sizeof(msg)); ExpectIntEQ(wc_InitRng(&rng), 0); - ExpectIntEQ(wc_dilithium_init(key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); #endif #if !defined(WOLFSSL_NO_ML_DSA_44) - ExpectIntEQ(wc_dilithium_import_public(ml_dsa_44_pub_key, - (word32)sizeof(ml_dsa_44_pub_key), key), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, ml_dsa_44_pub_key, (word32)sizeof(ml_dsa_44_pub_key)), 0); if (sig != NULL) { XMEMCPY(sig, ml_dsa_44_good_sig, sizeof(ml_dsa_44_good_sig)); } sigLen = (word32)sizeof(ml_dsa_44_good_sig); #else -#ifdef WOLFSSL_DILITHIUM_NO_MAKE_KEY +#ifdef WOLFSSL_MLDSA_NO_MAKE_KEY + { + word32 idx = 0; #ifndef WOLFSSL_NO_ML_DSA_65 - ExpectIntEQ(wc_dilithium_import_public(bench_dilithium_level3_pub_key, - sizeof_bench_dilithium_level3_pub_key, key), 0); + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(key, mldsa65_pub_spki, + sizeof_mldsa65_pub_spki, &idx), 0); #else - ExpectIntEQ(wc_dilithium_import_public(bench_dilithium_level5_pub_key, - sizeof_bench_dilithium_level5_pub_key, key), 0); + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(key, mldsa87_pub_spki, + sizeof_mldsa87_pub_spki, &idx), 0); #endif /* !WOLFSSL_NO_ML_DSA_65 */ + } #else - ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); -#endif /* WOLFSSL_DILITHIUM_NO_MAKE_KEY */ + ExpectIntEQ(wc_MlDsaKey_MakeKey(key, &rng), 0); +#endif /* WOLFSSL_MLDSA_NO_MAKE_KEY */ - ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, sig, &sigLen, key, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_Sign(key, sig, &sigLen, msg, 32, &rng), 0); #endif /* !WOLFSSL_NO_ML_DSA_44 */ - ExpectIntEQ(wc_dilithium_export_public(NULL, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(NULL, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_public(key, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(key, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_public(NULL, pubKey, NULL), + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(NULL, pubKey, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_public(NULL, NULL, &pubKeyLen), + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(NULL, NULL, &pubKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_public(NULL, pubKey, &pubKeyLen), + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(NULL, pubKey, &pubKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_public(key, NULL, &pubKeyLen), + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(key, NULL, &pubKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_public(key, pubKey, NULL), + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(key, pubKey, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); badKeyLen = 0; - ExpectIntEQ(wc_dilithium_export_public(key, pubKey, &badKeyLen), + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(key, pubKey, &badKeyLen), WC_NO_ERR_TRACE(BUFFER_E)); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(badKeyLen, DILITHIUM_LEVEL2_PUB_KEY_SIZE); + ExpectIntEQ(badKeyLen, WC_MLDSA_44_PUB_KEY_SIZE); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(badKeyLen, DILITHIUM_LEVEL3_PUB_KEY_SIZE); + ExpectIntEQ(badKeyLen, WC_MLDSA_65_PUB_KEY_SIZE); #else - ExpectIntEQ(badKeyLen, DILITHIUM_LEVEL5_PUB_KEY_SIZE); + ExpectIntEQ(badKeyLen, WC_MLDSA_87_PUB_KEY_SIZE); #endif - ExpectIntEQ(wc_dilithium_export_public(key, pubKey, &pubKeyLen), 0); + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(key, pubKey, &pubKeyLen), 0); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(pubKeyLen, DILITHIUM_LEVEL2_PUB_KEY_SIZE); + ExpectIntEQ(pubKeyLen, WC_MLDSA_44_PUB_KEY_SIZE); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(pubKeyLen, DILITHIUM_LEVEL3_PUB_KEY_SIZE); + ExpectIntEQ(pubKeyLen, WC_MLDSA_65_PUB_KEY_SIZE); #else - ExpectIntEQ(pubKeyLen, DILITHIUM_LEVEL5_PUB_KEY_SIZE); + ExpectIntEQ(pubKeyLen, WC_MLDSA_87_PUB_KEY_SIZE); #endif - ExpectIntEQ(wc_dilithium_verify_msg(NULL, 0, NULL, 32, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_Verify(NULL, NULL, 0, NULL, 32, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_verify_msg(sig, 0, NULL, 32, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_Verify(NULL, sig, 0, NULL, 32, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_verify_msg(NULL, 0, msg, 32, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_Verify(NULL, NULL, 0, msg, 32, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_verify_msg(NULL, 0, NULL, 32, &res, NULL), + ExpectIntEQ(wc_MlDsaKey_Verify(NULL, NULL, 0, NULL, 32, &res), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_verify_msg(NULL, 0, NULL, 32, NULL, key), + ExpectIntEQ(wc_MlDsaKey_Verify(key, NULL, 0, NULL, 32, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_verify_msg(NULL, sigLen, msg, 32, &res, key), + ExpectIntEQ(wc_MlDsaKey_Verify(key, NULL, sigLen, msg, 32, &res), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_verify_msg(sig, 0, msg, 32, &res, key), + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig, 0, msg, 32, &res), WC_NO_ERR_TRACE(BUFFER_E)); - ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, NULL, 32, &res, key), + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig, sigLen, NULL, 32, &res), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, NULL, key), + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig, sigLen, msg, 32, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, NULL), + ExpectIntEQ(wc_MlDsaKey_Verify(NULL, sig, sigLen, msg, 32, &res), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); res = 0; - ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig, sigLen, msg, 32, &res), 0); ExpectIntEQ(res, 1); - ExpectIntEQ(wc_dilithium_init(importKey), 0); - ExpectIntEQ(wc_dilithium_import_public(pubKey, pubKeyLen, importKey), + ExpectIntEQ(wc_MlDsaKey_Init(importKey, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(importKey, pubKey, pubKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(importKey, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(importKey, WC_ML_DSA_44), 0); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(wc_dilithium_set_level(importKey, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(importKey, WC_ML_DSA_65), 0); #else - ExpectIntEQ(wc_dilithium_set_level(importKey, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(importKey, WC_ML_DSA_87), 0); #endif - ExpectIntEQ(wc_dilithium_import_public(NULL, 0, NULL), + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_public(pubKey, 0, NULL), + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(NULL, pubKey, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_public(NULL, pubKeyLen, NULL), + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(NULL, NULL, pubKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_public(NULL, 0, importKey), + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(importKey, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_public(NULL, pubKeyLen, importKey), + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(importKey, NULL, pubKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_public(pubKey, 0, importKey), + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(importKey, pubKey, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_public(pubKey, pubKeyLen, NULL), + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(NULL, pubKey, pubKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_public(pubKey, pubKeyLen, importKey), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(importKey, pubKey, pubKeyLen), 0); res = 0; - ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, importKey), + ExpectIntEQ(wc_MlDsaKey_Verify(importKey, sig, sigLen, msg, 32, &res), 0); ExpectIntEQ(res, 1); -#ifdef WOLFSSL_DILITHIUM_CHECK_KEY - ExpectIntEQ(wc_dilithium_check_key(importKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); +#ifdef WOLFSSL_MLDSA_CHECK_KEY + ExpectIntEQ(wc_MlDsaKey_CheckKey(importKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif - wc_dilithium_free(importKey); + wc_MlDsaKey_Free(importKey); #ifndef WOLFSSL_NO_ML_DSA_44 if (sig != NULL) { @@ -1158,8 +1181,7 @@ int test_wc_dilithium_verify(void) /* Unused hints meant to be 0. */ sig[sigLen - 5] = 0xff; res = 1; - ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, - key), WC_NO_ERR_TRACE(SIG_VERIFY_E)); + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig, sigLen, msg, 32, &res), WC_NO_ERR_TRACE(SIG_VERIFY_E)); ExpectIntEQ(res, 0); sig[sigLen - 5] = 0x00; } @@ -1168,7 +1190,7 @@ int test_wc_dilithium_verify(void) b = sig[sigLen - 1]; sig[sigLen - 1] = 0xff; res = 1; - ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, key), + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig, sigLen, msg, 32, &res), WC_NO_ERR_TRACE(SIG_VERIFY_E)); ExpectIntEQ(res, 0); sig[sigLen - 1] = b; @@ -1178,8 +1200,7 @@ int test_wc_dilithium_verify(void) b = sig[sigLen - 84]; sig[sigLen - 84] = 0xff; res = 1; - ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, - key), WC_NO_ERR_TRACE(SIG_VERIFY_E)); + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig, sigLen, msg, 32, &res), WC_NO_ERR_TRACE(SIG_VERIFY_E)); ExpectIntEQ(res, 0); sig[sigLen - 84] = b; } @@ -1187,7 +1208,7 @@ int test_wc_dilithium_verify(void) /* Mess up commit hash. */ sig[0] ^= 0x80; res = 1; - ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, key), + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig, sigLen, msg, 32, &res), 0); ExpectIntEQ(res, 0); sig[0] ^= 0x80; @@ -1195,20 +1216,20 @@ int test_wc_dilithium_verify(void) /* Mess up z. */ sig[100] ^= 0x80; res = 1; - ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, key), + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig, sigLen, msg, 32, &res), 0); ExpectIntEQ(res, 0); sig[100] ^= 0x80; /* Set all indices to 0. */ XMEMSET(sig + sigLen - 4, 0, 4); - ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, key), + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig, sigLen, msg, 32, &res), WC_NO_ERR_TRACE(SIG_VERIFY_E)); ExpectIntEQ(res, 0); } #endif - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); wc_FreeRng(&rng); XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -1219,13 +1240,13 @@ int test_wc_dilithium_verify(void) return EXPECT_RESULT(); } -int test_wc_dilithium_sign_vfy(void) +int test_mldsa_sign_vfy(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) && !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - dilithium_key* key; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) && !defined(WOLFSSL_MLDSA_NO_VERIFY) + wc_MlDsaKey* key; WC_RNG rng; byte msg[64]; byte* sig = NULL; @@ -1233,9 +1254,9 @@ int test_wc_dilithium_sign_vfy(void) byte ctx[10]; int res; - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); - sig = (byte*)XMALLOC(DILITHIUM_MAX_SIG_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); + sig = (byte*)XMALLOC(MLDSA_MAX_SIG_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(sig); if (key != NULL) { @@ -1248,67 +1269,55 @@ int test_wc_dilithium_sign_vfy(void) ExpectIntEQ(wc_InitRng(&rng), 0); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_init(key), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); - - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_ctx_msg(ctx, sizeof(ctx), msg, sizeof(msg), - sig, &sigLen, key, &rng), 0); - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig, sigLen, ctx, sizeof(ctx), msg, - sizeof(msg), &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(key, &rng), 0); + + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignCtx(key, ctx, sizeof(ctx), sig, &sigLen, msg, sizeof(msg), &rng), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(key, sig, sigLen, ctx, sizeof(ctx), msg, sizeof(msg), &res), 0); ExpectIntEQ(res, 1); - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_ctx_hash(ctx, sizeof(ctx), - WC_HASH_TYPE_SHA3_512, msg, sizeof(msg), sig, &sigLen, key, &rng), 0); - ExpectIntEQ(wc_dilithium_verify_ctx_hash(sig, sigLen, ctx, sizeof(ctx), - WC_HASH_TYPE_SHA3_512, msg, sizeof(msg), &res, key), 0); + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignCtxHash(key, ctx, sizeof(ctx), sig, &sigLen, msg, sizeof(msg), WC_HASH_TYPE_SHA3_512, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtxHash(key, sig, sigLen, ctx, sizeof(ctx), msg, sizeof(msg), WC_HASH_TYPE_SHA3_512, &res), 0); ExpectIntEQ(res, 1); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif #ifndef WOLFSSL_NO_ML_DSA_65 - ExpectIntEQ(wc_dilithium_init(key), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); - - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_ctx_msg(ctx, sizeof(ctx), msg, sizeof(msg), - sig, &sigLen, key, &rng), 0); - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig, sigLen, ctx, sizeof(ctx), msg, - sizeof(msg), &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(key, &rng), 0); + + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignCtx(key, ctx, sizeof(ctx), sig, &sigLen, msg, sizeof(msg), &rng), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(key, sig, sigLen, ctx, sizeof(ctx), msg, sizeof(msg), &res), 0); ExpectIntEQ(res, 1); - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_ctx_hash(ctx, sizeof(ctx), - WC_HASH_TYPE_SHA3_512, msg, sizeof(msg), sig, &sigLen, key, &rng), 0); - ExpectIntEQ(wc_dilithium_verify_ctx_hash(sig, sigLen, ctx, sizeof(ctx), - WC_HASH_TYPE_SHA3_512, msg, sizeof(msg), &res, key), 0); + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignCtxHash(key, ctx, sizeof(ctx), sig, &sigLen, msg, sizeof(msg), WC_HASH_TYPE_SHA3_512, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtxHash(key, sig, sigLen, ctx, sizeof(ctx), msg, sizeof(msg), WC_HASH_TYPE_SHA3_512, &res), 0); ExpectIntEQ(res, 1); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif #ifndef WOLFSSL_NO_ML_DSA_87 - ExpectIntEQ(wc_dilithium_init(key), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); - - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_ctx_msg(ctx, sizeof(ctx), msg, sizeof(msg), - sig, &sigLen, key, &rng), 0); - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig, sigLen, ctx, sizeof(ctx), msg, - sizeof(msg), &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(key, &rng), 0); + + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignCtx(key, ctx, sizeof(ctx), sig, &sigLen, msg, sizeof(msg), &rng), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(key, sig, sigLen, ctx, sizeof(ctx), msg, sizeof(msg), &res), 0); ExpectIntEQ(res, 1); - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_ctx_hash(ctx, sizeof(ctx), - WC_HASH_TYPE_SHA3_512, msg, sizeof(msg), sig, &sigLen, key, &rng), 0); - ExpectIntEQ(wc_dilithium_verify_ctx_hash(sig, sigLen, ctx, sizeof(ctx), - WC_HASH_TYPE_SHA3_512, msg, sizeof(msg), &res, key), 0); + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignCtxHash(key, ctx, sizeof(ctx), sig, &sigLen, msg, sizeof(msg), WC_HASH_TYPE_SHA3_512, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtxHash(key, sig, sigLen, ctx, sizeof(ctx), msg, sizeof(msg), WC_HASH_TYPE_SHA3_512, &res), 0); ExpectIntEQ(res, 1); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif wc_FreeRng(&rng); @@ -1319,26 +1328,26 @@ int test_wc_dilithium_sign_vfy(void) return EXPECT_RESULT(); } -int test_wc_dilithium_check_key(void) +int test_mldsa_check_key(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - defined(WOLFSSL_DILITHIUM_CHECK_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) - dilithium_key* checkKey; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + defined(WOLFSSL_MLDSA_CHECK_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) + wc_MlDsaKey* checkKey; WC_RNG rng; byte* privCheckKey = NULL; - word32 privCheckKeyLen = DILITHIUM_MAX_KEY_SIZE; + word32 privCheckKeyLen = MLDSA_MAX_KEY_SIZE; byte* pubCheckKey = NULL; - word32 pubCheckKeyLen = DILITHIUM_MAX_PUB_KEY_SIZE; + word32 pubCheckKeyLen = MLDSA_MAX_PUB_KEY_SIZE; - checkKey = (dilithium_key*)XMALLOC(sizeof(*checkKey), NULL, + checkKey = (wc_MlDsaKey*)XMALLOC(sizeof(*checkKey), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(checkKey); - privCheckKey = (byte*)XMALLOC(DILITHIUM_MAX_KEY_SIZE, NULL, + privCheckKey = (byte*)XMALLOC(MLDSA_MAX_KEY_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(privCheckKey); - pubCheckKey = (byte*)XMALLOC(DILITHIUM_MAX_PUB_KEY_SIZE, NULL, + pubCheckKey = (byte*)XMALLOC(MLDSA_MAX_PUB_KEY_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(pubCheckKey); @@ -1351,95 +1360,86 @@ int test_wc_dilithium_check_key(void) PRIVATE_KEY_UNLOCK(); - ExpectIntEQ(wc_dilithium_check_key(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_CheckKey(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_init(checkKey), 0); + ExpectIntEQ(wc_MlDsaKey_Init(checkKey, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_export_key(NULL, privCheckKey, + ExpectIntEQ(wc_MlDsaKey_ExportKey(NULL, privCheckKey, &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_key(privCheckKey, - privCheckKeyLen, pubCheckKey, pubCheckKeyLen, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_key(checkKey, privCheckKey, + ExpectIntEQ(wc_MlDsaKey_ImportKey(NULL, privCheckKey, privCheckKeyLen, pubCheckKey, pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_ExportKey(checkKey, privCheckKey, &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_key(privCheckKey, - privCheckKeyLen, pubCheckKey, pubCheckKeyLen, checkKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_ImportKey(checkKey, privCheckKey, privCheckKeyLen, pubCheckKey, pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(checkKey, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(checkKey, WC_ML_DSA_44), 0); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(wc_dilithium_set_level(checkKey, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(checkKey, WC_ML_DSA_65), 0); #else - ExpectIntEQ(wc_dilithium_set_level(checkKey, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(checkKey, WC_ML_DSA_87), 0); #endif - ExpectIntEQ(wc_dilithium_make_key(checkKey, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(checkKey, &rng), 0); - ExpectIntEQ(wc_dilithium_export_key(NULL, NULL, NULL, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_ExportKey(NULL, NULL, NULL, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_key(checkKey, NULL, NULL, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_ExportKey(checkKey, NULL, NULL, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_key(NULL, privCheckKey, NULL, NULL, NULL), + ExpectIntEQ(wc_MlDsaKey_ExportKey(NULL, privCheckKey, NULL, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_key(NULL, NULL, &privCheckKeyLen, NULL, + ExpectIntEQ(wc_MlDsaKey_ExportKey(NULL, NULL, &privCheckKeyLen, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_key(NULL, NULL, NULL, pubCheckKey, NULL), + ExpectIntEQ(wc_MlDsaKey_ExportKey(NULL, NULL, NULL, pubCheckKey, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_key(NULL, NULL, NULL, NULL, + ExpectIntEQ(wc_MlDsaKey_ExportKey(NULL, NULL, NULL, NULL, &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_key(NULL , privCheckKey, + ExpectIntEQ(wc_MlDsaKey_ExportKey(NULL , privCheckKey, &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_key(checkKey, NULL , + ExpectIntEQ(wc_MlDsaKey_ExportKey(checkKey, NULL , &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_key(checkKey, privCheckKey, + ExpectIntEQ(wc_MlDsaKey_ExportKey(checkKey, privCheckKey, NULL , pubCheckKey, &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_key(checkKey, privCheckKey, + ExpectIntEQ(wc_MlDsaKey_ExportKey(checkKey, privCheckKey, &privCheckKeyLen, NULL , &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_key(checkKey, privCheckKey, + ExpectIntEQ(wc_MlDsaKey_ExportKey(checkKey, privCheckKey, &privCheckKeyLen, pubCheckKey, NULL ), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_export_key(checkKey, privCheckKey, + ExpectIntEQ(wc_MlDsaKey_ExportKey(checkKey, privCheckKey, &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), 0); /* Modify hash. */ if ((pubCheckKey != NULL) && EXPECT_SUCCESS()) { pubCheckKey[0] ^= 0x80; - ExpectIntEQ(wc_dilithium_import_key(NULL, 0, NULL, 0, NULL), + ExpectIntEQ(wc_MlDsaKey_ImportKey(NULL, NULL, 0, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_key(privCheckKey, 0, NULL, 0, NULL), + ExpectIntEQ(wc_MlDsaKey_ImportKey(NULL, privCheckKey, 0, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_key(NULL, 0, pubCheckKey, 0, NULL), + ExpectIntEQ(wc_MlDsaKey_ImportKey(NULL, NULL, 0, pubCheckKey, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_key(NULL, 0, NULL, 0, checkKey), + ExpectIntEQ(wc_MlDsaKey_ImportKey(checkKey, NULL, 0, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_key(NULL , - privCheckKeyLen, pubCheckKey, pubCheckKeyLen, checkKey), + ExpectIntEQ(wc_MlDsaKey_ImportKey(checkKey, NULL, privCheckKeyLen, pubCheckKey, pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_key(privCheckKey, - 0 , pubCheckKey, pubCheckKeyLen, checkKey), + ExpectIntEQ(wc_MlDsaKey_ImportKey(checkKey, privCheckKey, 0, pubCheckKey, pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_key(privCheckKey, - privCheckKeyLen, NULL , pubCheckKeyLen, checkKey), + ExpectIntEQ(wc_MlDsaKey_ImportKey(checkKey, privCheckKey, privCheckKeyLen, NULL, pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_key(privCheckKey, - privCheckKeyLen, pubCheckKey, 0 , checkKey), + ExpectIntEQ(wc_MlDsaKey_ImportKey(checkKey, privCheckKey, privCheckKeyLen, pubCheckKey, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_key(privCheckKey, - privCheckKeyLen, pubCheckKey, pubCheckKeyLen, NULL ), + ExpectIntEQ(wc_MlDsaKey_ImportKey(NULL, privCheckKey, privCheckKeyLen, pubCheckKey, pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_import_key(privCheckKey, - privCheckKeyLen, pubCheckKey, pubCheckKeyLen, checkKey), 0); - ExpectIntEQ(wc_dilithium_check_key(checkKey), WC_NO_ERR_TRACE(PUBLIC_KEY_E)); + ExpectIntEQ(wc_MlDsaKey_ImportKey(checkKey, privCheckKey, privCheckKeyLen, pubCheckKey, pubCheckKeyLen), 0); + ExpectIntEQ(wc_MlDsaKey_CheckKey(checkKey), WC_NO_ERR_TRACE(PUBLIC_KEY_E)); pubCheckKey[0] ^= 0x80; /* Modify encoded t1. */ pubCheckKey[48] ^= 0x80; - ExpectIntEQ(wc_dilithium_import_key(privCheckKey, - privCheckKeyLen,pubCheckKey, pubCheckKeyLen, checkKey), 0); - ExpectIntEQ(wc_dilithium_check_key(checkKey), WC_NO_ERR_TRACE(PUBLIC_KEY_E)); + ExpectIntEQ(wc_MlDsaKey_ImportKey(checkKey, privCheckKey, privCheckKeyLen, pubCheckKey, pubCheckKeyLen), 0); + ExpectIntEQ(wc_MlDsaKey_CheckKey(checkKey), WC_NO_ERR_TRACE(PUBLIC_KEY_E)); pubCheckKey[48] ^= 0x80; } PRIVATE_KEY_LOCK(); - wc_dilithium_free(checkKey); + wc_MlDsaKey_Free(checkKey); wc_FreeRng(&rng); XFREE(pubCheckKey, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -1449,8 +1449,8 @@ int test_wc_dilithium_check_key(void) return EXPECT_RESULT(); } -#if defined(HAVE_DILITHIUM) && \ - defined(WOLFSSL_DILITHIUM_PUBLIC_KEY) +#if defined(WOLFSSL_HAVE_MLDSA) && \ + defined(WOLFSSL_MLDSA_PUBLIC_KEY) static const unsigned char ml_dsa_public_der[] = { #ifndef WOLFSSL_NO_ML_DSA_44 0x30, 0x82, 0x05, 0x32, 0x30, 0x0d, 0x06, 0x09, @@ -2198,8 +2198,8 @@ static const unsigned char ml_dsa_public_der[] = { 0xE9, 0xB0, 0x14, 0xB0, 0x37, 0xCD, 0xBF, 0xE9 #endif }; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT -static const unsigned char dilithium_public_der[] = { +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT +static const unsigned char mldsa_public_der[] = { #ifndef WOLFSSL_NO_ML_DSA_44 0x30, 0x82, 0x05, 0x34, 0x30, 0x0d, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x02, 0x82, 0x0b, @@ -2949,63 +2949,61 @@ static const unsigned char dilithium_public_der[] = { #endif #endif -int test_wc_dilithium_public_der_decode(void) +int test_mldsa_public_der_decode(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - defined(WOLFSSL_DILITHIUM_PUBLIC_KEY) - dilithium_key* key; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + defined(WOLFSSL_MLDSA_PUBLIC_KEY) + wc_MlDsaKey* key; word32 idx = 0; - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); if (key != NULL) { XMEMSET(key, 0, sizeof(*key)); } - ExpectIntEQ(wc_dilithium_init(key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); #endif - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(ml_dsa_public_der, &idx, key, - (word32)sizeof(ml_dsa_public_der)), 0); -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(key, ml_dsa_public_der, (word32)sizeof(ml_dsa_public_der), &idx), 0); +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT idx = 0; #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44_DRAFT), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44_DRAFT), 0); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65_DRAFT), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65_DRAFT), 0); #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87_DRAFT), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87_DRAFT), 0); #endif - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(dilithium_public_der, &idx, key, - (word32)sizeof(dilithium_public_der)), 0); + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(key, mldsa_public_der, (word32)sizeof(mldsa_public_der), &idx), 0); #endif - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return EXPECT_RESULT(); } -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_ASN1) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) -#define DILITHIUM_MAX_DER_SIZE 8192 +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_ASN1) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) +#define MLDSA_MAX_DER_SIZE 8192 #endif -int test_wc_dilithium_der(void) +int test_mldsa_der(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_ASN1) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) - dilithium_key* key; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_ASN1) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) + wc_MlDsaKey* key; WC_RNG rng; byte* der = NULL; int len; @@ -3016,25 +3014,25 @@ int test_wc_dilithium_der(void) word32 idx = 0; #ifndef WOLFSSL_NO_ML_DSA_44 - pubLen = DILITHIUM_LEVEL2_PUB_KEY_SIZE; - pubDerLen = DILITHIUM_LEVEL2_PUB_KEY_SIZE + 22; - privDerLen = DILITHIUM_LEVEL2_KEY_SIZE + 28; - keyDerLen = DILITHIUM_LEVEL2_PUB_KEY_SIZE + DILITHIUM_LEVEL2_KEY_SIZE + 32; + pubLen = WC_MLDSA_44_PUB_KEY_SIZE; + pubDerLen = WC_MLDSA_44_PUB_KEY_SIZE + 22; + privDerLen = WC_MLDSA_44_KEY_SIZE + 28; + keyDerLen = WC_MLDSA_44_PUB_KEY_SIZE + WC_MLDSA_44_KEY_SIZE + 32; #elif !defined(WOLFSSL_NO_ML_DSA_65) - pubLen = DILITHIUM_LEVEL3_PUB_KEY_SIZE; - pubDerLen = DILITHIUM_LEVEL3_PUB_KEY_SIZE + 22; - privDerLen = DILITHIUM_LEVEL3_KEY_SIZE + 28; - keyDerLen = DILITHIUM_LEVEL3_PUB_KEY_SIZE + DILITHIUM_LEVEL3_KEY_SIZE + 32; + pubLen = WC_MLDSA_65_PUB_KEY_SIZE; + pubDerLen = WC_MLDSA_65_PUB_KEY_SIZE + 22; + privDerLen = WC_MLDSA_65_KEY_SIZE + 28; + keyDerLen = WC_MLDSA_65_PUB_KEY_SIZE + WC_MLDSA_65_KEY_SIZE + 32; #else - pubLen = DILITHIUM_LEVEL5_PUB_KEY_SIZE; - pubDerLen = DILITHIUM_LEVEL5_PUB_KEY_SIZE + 22; - privDerLen = DILITHIUM_LEVEL5_KEY_SIZE + 28; - keyDerLen = DILITHIUM_LEVEL5_PUB_KEY_SIZE + DILITHIUM_LEVEL5_KEY_SIZE + 32; + pubLen = WC_MLDSA_87_PUB_KEY_SIZE; + pubDerLen = WC_MLDSA_87_PUB_KEY_SIZE + 22; + privDerLen = WC_MLDSA_87_KEY_SIZE + 28; + keyDerLen = WC_MLDSA_87_PUB_KEY_SIZE + WC_MLDSA_87_KEY_SIZE + 32; #endif - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); - der = (byte*)XMALLOC(DILITHIUM_MAX_DER_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); + der = (byte*)XMALLOC(MLDSA_MAX_DER_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(der); if (key != NULL) { @@ -3045,164 +3043,164 @@ int test_wc_dilithium_der(void) } XMEMSET(&rng, 0, sizeof(WC_RNG)); ExpectIntEQ(wc_InitRng(&rng), 0); - ExpectIntEQ(wc_dilithium_init(key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); PRIVATE_KEY_UNLOCK(); - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE, + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(key, der, MLDSA_MAX_DER_SIZE, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE, + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(key, der, MLDSA_MAX_DER_SIZE, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE), + ExpectIntEQ(wc_MlDsaKey_PrivateKeyToDer(key, der, MLDSA_MAX_DER_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* When security level is not set, we attempt to parse it from DER. Since * the supplied DER is invalid, this should fail with ASN parsing error */ idx = 0; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der, &idx, key, pubDerLen), +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(key, der, pubDerLen, &idx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #else - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der, &idx, key, pubDerLen), + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(key, der, pubDerLen, &idx), WC_NO_ERR_TRACE(ASN_PARSE_E)); #endif idx = 0; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der, &idx, key, privDerLen), +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(key, der, privDerLen, &idx), WC_NO_ERR_TRACE(ASN_PARSE_E)); #else - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der, &idx, key, privDerLen), + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(key, der, privDerLen, &idx), WC_NO_ERR_TRACE(ASN_PARSE_E)); #endif #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); #elif !defined(WOLFSSL_NO_ML_DSA_65) - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); #endif - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE, + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(key, der, MLDSA_MAX_DER_SIZE, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE, + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(key, der, MLDSA_MAX_DER_SIZE, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE), + ExpectIntEQ(wc_MlDsaKey_PrivateKeyToDer(key, der, MLDSA_MAX_DER_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(key, &rng), 0); - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(NULL, NULL, 0 , + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(NULL, NULL, 0 , 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(NULL, der , 0 , + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(NULL, der , 0 , 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(NULL, NULL, DILITHIUM_MAX_DER_SIZE, + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(NULL, NULL, MLDSA_MAX_DER_SIZE, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(NULL, der , DILITHIUM_MAX_DER_SIZE, + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(NULL, der , MLDSA_MAX_DER_SIZE, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key , der , 0 , + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(key , der , 0 , 0), WC_NO_ERR_TRACE(BUFFER_E)); /* Get length only. */ - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key , NULL, 0 , + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(key , NULL, 0 , 0), pubLen); - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key , NULL, DILITHIUM_MAX_DER_SIZE, + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(key , NULL, MLDSA_MAX_DER_SIZE, 0), pubLen); - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key , NULL, 0 , + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(key , NULL, 0 , 1), pubDerLen); - ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key , NULL, DILITHIUM_MAX_DER_SIZE, + ExpectIntEQ(wc_MlDsaKey_PublicKeyToDer(key , NULL, MLDSA_MAX_DER_SIZE, 1), pubDerLen); - ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(NULL, NULL, + ExpectIntEQ(wc_MlDsaKey_PrivateKeyToDer(NULL, NULL, 0 ), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntGT(wc_Dilithium_PrivateKeyToDer(key , NULL, + ExpectIntGT(wc_MlDsaKey_PrivateKeyToDer(key , NULL, 0 ), 0); - ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(NULL, der , + ExpectIntEQ(wc_MlDsaKey_PrivateKeyToDer(NULL, der , 0 ), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(NULL, NULL, - DILITHIUM_MAX_DER_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(NULL, der , - DILITHIUM_MAX_DER_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(key , der , + ExpectIntEQ(wc_MlDsaKey_PrivateKeyToDer(NULL, NULL, + MLDSA_MAX_DER_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_PrivateKeyToDer(NULL, der , + MLDSA_MAX_DER_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MlDsaKey_PrivateKeyToDer(key , der , 0 ), WC_NO_ERR_TRACE(BUFFER_E)); /* Get length only. */ - ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(key , NULL, - DILITHIUM_MAX_DER_SIZE), privDerLen); + ExpectIntEQ(wc_MlDsaKey_PrivateKeyToDer(key , NULL, + MLDSA_MAX_DER_SIZE), privDerLen); - ExpectIntEQ(wc_Dilithium_KeyToDer(NULL, NULL, 0 ), + ExpectIntEQ(wc_MlDsaKey_KeyToDer(NULL, NULL, 0 ), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntGT(wc_Dilithium_KeyToDer(key , NULL, 0 ), + ExpectIntGT(wc_MlDsaKey_KeyToDer(key , NULL, 0 ), 0 ); - ExpectIntEQ(wc_Dilithium_KeyToDer(NULL, der , 0 ), + ExpectIntEQ(wc_MlDsaKey_KeyToDer(NULL, der , 0 ), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_KeyToDer(NULL, NULL, DILITHIUM_MAX_DER_SIZE), + ExpectIntEQ(wc_MlDsaKey_KeyToDer(NULL, NULL, MLDSA_MAX_DER_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_KeyToDer(NULL, der , DILITHIUM_MAX_DER_SIZE), + ExpectIntEQ(wc_MlDsaKey_KeyToDer(NULL, der , MLDSA_MAX_DER_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_KeyToDer(key , der , 0 ), + ExpectIntEQ(wc_MlDsaKey_KeyToDer(key , der , 0 ), WC_NO_ERR_TRACE(BUFFER_E)); /* Get length only. */ - ExpectIntEQ(wc_Dilithium_KeyToDer(key , NULL, DILITHIUM_MAX_DER_SIZE), + ExpectIntEQ(wc_MlDsaKey_KeyToDer(key , NULL, MLDSA_MAX_DER_SIZE), keyDerLen); - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(NULL, NULL, NULL, 0 ), + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(NULL, NULL, 0, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der , NULL, NULL, 0 ), + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(NULL, der, 0, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(NULL, &idx, NULL, 0 ), + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(NULL, NULL, 0, &idx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(NULL, NULL, key , 0 ), + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(key, NULL, 0, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(NULL, NULL, NULL, pubDerLen), + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(NULL, NULL, pubDerLen, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(NULL, &idx, key , pubDerLen), + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(key, NULL, pubDerLen, &idx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der , NULL, key , pubDerLen), + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(key, der, pubDerLen, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der , &idx, NULL, pubDerLen), + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(NULL, der, pubDerLen, &idx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der , &idx, key , 0 ), + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(key, der, 0, &idx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(NULL, NULL, NULL, 0 ), + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(NULL, NULL, 0, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der , NULL, NULL, 0 ), + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(NULL, der, 0, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(NULL, &idx, NULL, 0 ), + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(NULL, NULL, 0, &idx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(NULL, NULL, key , 0 ), + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(key, NULL, 0, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(NULL, NULL, NULL, privDerLen), + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(NULL, NULL, privDerLen, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(NULL, &idx, key , privDerLen), + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(key, NULL, privDerLen, &idx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der , NULL, key , privDerLen), + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(key, der, privDerLen, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der , &idx, NULL, privDerLen), + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(NULL, der, privDerLen, &idx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der , &idx, key , 0 ), + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(key, der, 0, &idx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(len = wc_Dilithium_PublicKeyToDer(key, der, - DILITHIUM_MAX_DER_SIZE, 0), pubLen); - ExpectIntEQ(wc_dilithium_import_public(der, len, key), 0); + ExpectIntEQ(len = wc_MlDsaKey_PublicKeyToDer(key, der, + MLDSA_MAX_DER_SIZE, 0), pubLen); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, der, len), 0); - ExpectIntEQ(len = wc_Dilithium_PublicKeyToDer(key, der, - DILITHIUM_MAX_DER_SIZE, 1), pubDerLen); + ExpectIntEQ(len = wc_MlDsaKey_PublicKeyToDer(key, der, + MLDSA_MAX_DER_SIZE, 1), pubDerLen); idx = 0; - ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der, &idx, key, len), 0); + ExpectIntEQ(wc_MlDsaKey_PublicKeyDecode(key, der, len, &idx), 0); - ExpectIntEQ(len = wc_Dilithium_PrivateKeyToDer(key, der, - DILITHIUM_MAX_DER_SIZE), privDerLen); + ExpectIntEQ(len = wc_MlDsaKey_PrivateKeyToDer(key, der, + MLDSA_MAX_DER_SIZE), privDerLen); idx = 0; - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der, &idx, key, len), 0); + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(key, der, len, &idx), 0); - ExpectIntEQ(len = wc_Dilithium_KeyToDer(key, der, DILITHIUM_MAX_DER_SIZE), + ExpectIntEQ(len = wc_MlDsaKey_KeyToDer(key, der, MLDSA_MAX_DER_SIZE), keyDerLen); idx = 0; - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der, &idx, key, len), 0); + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(key, der, len, &idx), 0); PRIVATE_KEY_LOCK(); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); wc_FreeRng(&rng); XFREE(der, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -3211,16 +3209,16 @@ int test_wc_dilithium_der(void) return EXPECT_RESULT(); } -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_ASN1) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_ASN1) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) /* Decode, re-export, byte-compare. Asserts version=1 on the bundled form and * version=0 on the private only form. */ -static int dilithium_oneasymkey_version_check(int level) +static int mldsa_oneasymkey_version_check(int level) { EXPECT_DECLS; - dilithium_key key; - dilithium_key key2; + wc_MlDsaKey key; + wc_MlDsaKey key2; WC_RNG rng; byte* ref = NULL; byte* rt = NULL; @@ -3232,43 +3230,42 @@ static int dilithium_oneasymkey_version_check(int level) XMEMSET(&key2, 0, sizeof(key2)); XMEMSET(&rng, 0, sizeof(rng)); - ExpectNotNull(ref = (byte*)XMALLOC(DILITHIUM_MAX_DER_SIZE, NULL, + ExpectNotNull(ref = (byte*)XMALLOC(MLDSA_MAX_DER_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER)); - ExpectNotNull(rt = (byte*)XMALLOC(DILITHIUM_MAX_DER_SIZE, NULL, + ExpectNotNull(rt = (byte*)XMALLOC(MLDSA_MAX_DER_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER)); ExpectIntEQ(wc_InitRng(&rng), 0); - ExpectIntEQ(wc_dilithium_init(&key), 0); - ExpectIntEQ(wc_dilithium_init(&key2), 0); - ExpectIntEQ(wc_dilithium_set_level(&key, level), 0); - ExpectIntEQ(wc_dilithium_set_level(&key2, level), 0); - ExpectIntEQ(wc_dilithium_make_key(&key, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_Init(&key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_Init(&key2, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(&key, level), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(&key2, level), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(&key, &rng), 0); /* Bundled (v=1) */ PRIVATE_KEY_UNLOCK(); - ExpectIntGT(refSz = wc_Dilithium_KeyToDer(&key, ref, - DILITHIUM_MAX_DER_SIZE), 0); + ExpectIntGT(refSz = wc_MlDsaKey_KeyToDer(&key, ref, + MLDSA_MAX_DER_SIZE), 0); PRIVATE_KEY_LOCK(); ExpectIntEQ(test_pkcs8_get_version_byte(ref, (word32)refSz), 1); idx = 0; PRIVATE_KEY_UNLOCK(); - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(ref, &idx, &key2, - (word32)refSz), 0); - ExpectIntEQ(rtSz = wc_Dilithium_KeyToDer(&key2, rt, - DILITHIUM_MAX_DER_SIZE), refSz); + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(&key2, ref, (word32)refSz, &idx), 0); + ExpectIntEQ(rtSz = wc_MlDsaKey_KeyToDer(&key2, rt, + MLDSA_MAX_DER_SIZE), refSz); PRIVATE_KEY_LOCK(); ExpectIntEQ(XMEMCMP(ref, rt, (size_t)refSz), 0); /* Private only (v=0). Reuse ref. */ PRIVATE_KEY_UNLOCK(); - ExpectIntGT(refSz = wc_Dilithium_PrivateKeyToDer(&key, ref, - DILITHIUM_MAX_DER_SIZE), 0); + ExpectIntGT(refSz = wc_MlDsaKey_PrivateKeyToDer(&key, ref, + MLDSA_MAX_DER_SIZE), 0); PRIVATE_KEY_LOCK(); ExpectIntEQ(test_pkcs8_get_version_byte(ref, (word32)refSz), 0); - wc_dilithium_free(&key); - wc_dilithium_free(&key2); + wc_MlDsaKey_Free(&key); + wc_MlDsaKey_Free(&key2); wc_FreeRng(&rng); XFREE(rt, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(ref, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -3277,33 +3274,33 @@ static int dilithium_oneasymkey_version_check(int level) } #endif -int test_wc_dilithium_oneasymkey_version(void) +int test_mldsa_oneasymkey_version(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_ASN1) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_ASN1) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(dilithium_oneasymkey_version_check(WC_ML_DSA_44), + ExpectIntEQ(mldsa_oneasymkey_version_check(WC_ML_DSA_44), TEST_SUCCESS); #endif #ifndef WOLFSSL_NO_ML_DSA_65 - ExpectIntEQ(dilithium_oneasymkey_version_check(WC_ML_DSA_65), + ExpectIntEQ(mldsa_oneasymkey_version_check(WC_ML_DSA_65), TEST_SUCCESS); #endif #ifndef WOLFSSL_NO_ML_DSA_87 - ExpectIntEQ(dilithium_oneasymkey_version_check(WC_ML_DSA_87), + ExpectIntEQ(mldsa_oneasymkey_version_check(WC_ML_DSA_87), TEST_SUCCESS); #endif #endif return EXPECT_RESULT(); } -int test_wc_dilithium_make_key_from_seed(void) +int test_mldsa_make_key_from_seed(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) - dilithium_key* key; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) + wc_MlDsaKey* key; #ifndef WOLFSSL_NO_ML_DSA_44 static const byte seed_44[] = { 0x93, 0xEF, 0x2E, 0x6E, 0xF1, 0xFB, 0x08, 0x99, @@ -5508,7 +5505,7 @@ int test_wc_dilithium_make_key_from_seed(void) 0xDA, 0xC1, 0x7F, 0x93, 0x6F, 0x54, 0xC4, 0xC7 }; #endif /* WOLFSSL_NO_ML_DSA_87 */ -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT #ifndef WOLFSSL_NO_ML_DSA_44 static const byte seed_44_draft[] = { 0xBA, 0xC0, 0x59, 0x52, 0x75, 0x5B, 0x26, 0x47, @@ -7715,63 +7712,63 @@ int test_wc_dilithium_make_key_from_seed(void) #endif /* WOLFSSL_NO_ML_DSA_87 */ #endif - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); if (key != NULL) { XMEMSET(key, 0, sizeof(*key)); } - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_make_key_from_seed(key, seed_44), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKeyFromSeed(key, seed_44), 0); ExpectIntEQ(XMEMCMP(key->p, pk_44, sizeof(pk_44)), 0); ExpectIntEQ(XMEMCMP(key->k, sk_44, sizeof(sk_44)), 0); -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44_DRAFT), 0); - ExpectIntEQ(wc_dilithium_make_key_from_seed(key, seed_44_draft), 0); +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44_DRAFT), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKeyFromSeed(key, seed_44_draft), 0); ExpectIntEQ(XMEMCMP(key->p, pk_44_draft, sizeof(pk_44_draft)), 0); ExpectIntEQ(XMEMCMP(key->k, sk_44_draft, sizeof(sk_44_draft)), 0); #endif #endif #ifndef WOLFSSL_NO_ML_DSA_65 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_make_key_from_seed(key, seed_65), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKeyFromSeed(key, seed_65), 0); ExpectIntEQ(XMEMCMP(key->p, pk_65, sizeof(pk_65)), 0); ExpectIntEQ(XMEMCMP(key->k, sk_65, sizeof(sk_65)), 0); -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65_DRAFT), 0); - ExpectIntEQ(wc_dilithium_make_key_from_seed(key, seed_65_draft), 0); +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65_DRAFT), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKeyFromSeed(key, seed_65_draft), 0); ExpectIntEQ(XMEMCMP(key->p, pk_65_draft, sizeof(pk_65_draft)), 0); ExpectIntEQ(XMEMCMP(key->k, sk_65_draft, sizeof(sk_65_draft)), 0); #endif #endif #ifndef WOLFSSL_NO_ML_DSA_87 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_make_key_from_seed(key, seed_87), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKeyFromSeed(key, seed_87), 0); ExpectIntEQ(XMEMCMP(key->p, pk_87, sizeof(pk_87)), 0); ExpectIntEQ(XMEMCMP(key->k, sk_87, sizeof(sk_87)), 0); -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87_DRAFT), 0); - ExpectIntEQ(wc_dilithium_make_key_from_seed(key, seed_87_draft), 0); +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87_DRAFT), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKeyFromSeed(key, seed_87_draft), 0); ExpectIntEQ(XMEMCMP(key->p, pk_87_draft, sizeof(pk_87_draft)), 0); ExpectIntEQ(XMEMCMP(key->k, sk_87_draft, sizeof(sk_87_draft)), 0); #endif #endif - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return EXPECT_RESULT(); } -int test_wc_dilithium_sig_kats(void) +int test_mldsa_sig_kats(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) && defined(WOLFSSL_DILITHIUM_NO_CTX) - dilithium_key* key; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) && defined(WOLFSSL_MLDSA_NO_CTX) + wc_MlDsaKey* key; #ifndef WOLFSSL_NO_ML_DSA_44 static const byte sk_44[] = { 0x5D, 0xFB, 0x07, 0xA2, 0x04, 0x4B, 0x93, 0x16, @@ -12532,65 +12529,62 @@ int test_wc_dilithium_sig_kats(void) 0x27, 0x2C, 0x32 }; #endif - byte sig[DILITHIUM_MAX_SIG_SIZE]; + byte sig[MLDSA_MAX_SIG_SIZE]; word32 sigLen; - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); if (key != NULL) { XMEMSET(key, 0, sizeof(*key)); } - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); PRIVATE_KEY_UNLOCK(); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_import_private(sk_44, (word32)sizeof(sk_44), key), + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, sk_44, (word32)sizeof(sk_44)), 0); sigLen = PARAMS_ML_DSA_44_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_msg_with_seed(msg_44, (word32)sizeof(msg_44), - sig, &sigLen, key, rnd_44), 0); + ExpectIntEQ(wc_MlDsaKey_SignWithSeed(key, sig, &sigLen, msg_44, (word32)sizeof(msg_44), rnd_44), 0); ExpectIntEQ(sigLen, PARAMS_ML_DSA_44_SIG_SIZE); ExpectIntEQ(XMEMCMP(sig, sig_44, sizeof(sig_44)), 0); #endif #ifndef WOLFSSL_NO_ML_DSA_65 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_import_private(sk_65, (word32)sizeof(sk_65), key), + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, sk_65, (word32)sizeof(sk_65)), 0); sigLen = PARAMS_ML_DSA_65_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_msg_with_seed(msg_65, (word32)sizeof(msg_65), - sig, &sigLen, key, rnd_65), 0); + ExpectIntEQ(wc_MlDsaKey_SignWithSeed(key, sig, &sigLen, msg_65, (word32)sizeof(msg_65), rnd_65), 0); ExpectIntEQ(sigLen, PARAMS_ML_DSA_65_SIG_SIZE); ExpectIntEQ(XMEMCMP(sig, sig_65, sizeof(sig_65)), 0); #endif #ifndef WOLFSSL_NO_ML_DSA_87 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_import_private(sk_87, (word32)sizeof(sk_87), key), + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, sk_87, (word32)sizeof(sk_87)), 0); sigLen = PARAMS_ML_DSA_87_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_msg_with_seed(msg_87, (word32)sizeof(msg_87), - sig, &sigLen, key, rnd_87), 0); + ExpectIntEQ(wc_MlDsaKey_SignWithSeed(key, sig, &sigLen, msg_87, (word32)sizeof(msg_87), rnd_87), 0); ExpectIntEQ(sigLen, PARAMS_ML_DSA_87_SIG_SIZE); ExpectIntEQ(XMEMCMP(sig, sig_87, sizeof(sig_87)), 0); #endif PRIVATE_KEY_LOCK(); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return EXPECT_RESULT(); } -int test_wc_dilithium_sign_ctx_kats(void) +int test_mldsa_sign_ctx_kats(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) - dilithium_key* key; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) + wc_MlDsaKey* key; word32 sigLen; byte* sig = NULL; @@ -16733,9 +16727,9 @@ int test_wc_dilithium_sign_ctx_kats(void) }; #endif /* !WOLFSSL_NO_ML_DSA_87 */ - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); - sig = (byte*)XMALLOC(DILITHIUM_MAX_SIG_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); + sig = (byte*)XMALLOC(MLDSA_MAX_SIG_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(sig); if (key != NULL) { @@ -16745,93 +16739,84 @@ int test_wc_dilithium_sign_ctx_kats(void) PRIVATE_KEY_UNLOCK(); #ifndef WOLFSSL_NO_ML_DSA_44 /* ML-DSA-44: empty context (ctx=NULL, ctxLen=0) */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_import_private(sk_44, (word32)sizeof(sk_44), key), 0); - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_ctx_msg_with_seed(NULL, 0, msg_44, - (word32)sizeof(msg_44), sig, &sigLen, key, rnd_44), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, sk_44, (word32)sizeof(sk_44)), 0); + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignCtxWithSeed(key, NULL, 0, sig, &sigLen, msg_44, (word32)sizeof(msg_44), rnd_44), 0); ExpectIntEQ(sigLen, (word32)sizeof(sig_44_ctx0)); ExpectIntEQ(XMEMCMP(sig, sig_44_ctx0, sizeof(sig_44_ctx0)), 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); /* ML-DSA-44: context from gist record 1 (ctxLen=33) */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_import_private(sk_44, (word32)sizeof(sk_44), key), 0); - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_ctx_msg_with_seed(ctx_44, - (byte)sizeof(ctx_44), msg_44, (word32)sizeof(msg_44), - sig, &sigLen, key, rnd_44), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, sk_44, (word32)sizeof(sk_44)), 0); + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignCtxWithSeed(key, ctx_44, (byte)sizeof(ctx_44), sig, &sigLen, msg_44, (word32)sizeof(msg_44), rnd_44), 0); ExpectIntEQ(sigLen, (word32)sizeof(sig_44_ctx33)); ExpectIntEQ(XMEMCMP(sig, sig_44_ctx33, sizeof(sig_44_ctx33)), 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif /* !WOLFSSL_NO_ML_DSA_44 */ #ifndef WOLFSSL_NO_ML_DSA_65 /* ML-DSA-65: empty context (ctx=NULL, ctxLen=0) */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_import_private(sk_65, (word32)sizeof(sk_65), key), 0); - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_ctx_msg_with_seed(NULL, 0, msg_65, - (word32)sizeof(msg_65), sig, &sigLen, key, rnd_65), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, sk_65, (word32)sizeof(sk_65)), 0); + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignCtxWithSeed(key, NULL, 0, sig, &sigLen, msg_65, (word32)sizeof(msg_65), rnd_65), 0); ExpectIntEQ(sigLen, (word32)sizeof(sig_65_ctx0)); ExpectIntEQ(XMEMCMP(sig, sig_65_ctx0, sizeof(sig_65_ctx0)), 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); /* ML-DSA-65: context from gist record 1 (ctxLen=33) */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_import_private(sk_65, (word32)sizeof(sk_65), key), 0); - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_ctx_msg_with_seed(ctx_65, - (byte)sizeof(ctx_65), msg_65, (word32)sizeof(msg_65), - sig, &sigLen, key, rnd_65), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, sk_65, (word32)sizeof(sk_65)), 0); + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignCtxWithSeed(key, ctx_65, (byte)sizeof(ctx_65), sig, &sigLen, msg_65, (word32)sizeof(msg_65), rnd_65), 0); ExpectIntEQ(sigLen, (word32)sizeof(sig_65_ctx33)); ExpectIntEQ(XMEMCMP(sig, sig_65_ctx33, sizeof(sig_65_ctx33)), 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif /* !WOLFSSL_NO_ML_DSA_65 */ #ifndef WOLFSSL_NO_ML_DSA_87 /* ML-DSA-87: empty context (ctx=NULL, ctxLen=0) */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_import_private(sk_87, (word32)sizeof(sk_87), key), 0); - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_ctx_msg_with_seed(NULL, 0, msg_87, - (word32)sizeof(msg_87), sig, &sigLen, key, rnd_87), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, sk_87, (word32)sizeof(sk_87)), 0); + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignCtxWithSeed(key, NULL, 0, sig, &sigLen, msg_87, (word32)sizeof(msg_87), rnd_87), 0); ExpectIntEQ(sigLen, (word32)sizeof(sig_87_ctx0)); ExpectIntEQ(XMEMCMP(sig, sig_87_ctx0, sizeof(sig_87_ctx0)), 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); /* ML-DSA-87: context from gist record 1 (ctxLen=33) */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_import_private(sk_87, (word32)sizeof(sk_87), key), 0); - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_ctx_msg_with_seed(ctx_87, - (byte)sizeof(ctx_87), msg_87, (word32)sizeof(msg_87), - sig, &sigLen, key, rnd_87), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, sk_87, (word32)sizeof(sk_87)), 0); + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignCtxWithSeed(key, ctx_87, (byte)sizeof(ctx_87), sig, &sigLen, msg_87, (word32)sizeof(msg_87), rnd_87), 0); ExpectIntEQ(sigLen, (word32)sizeof(sig_87_ctx33)); ExpectIntEQ(XMEMCMP(sig, sig_87_ctx33, sizeof(sig_87_ctx33)), 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif /* !WOLFSSL_NO_ML_DSA_87 */ PRIVATE_KEY_LOCK(); XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); -#endif /* HAVE_DILITHIUM && !WOLFSSL_DILITHIUM_NO_SIGN */ +#endif /* WOLFSSL_HAVE_MLDSA && !WOLFSSL_MLDSA_NO_SIGN */ return EXPECT_RESULT(); } -int test_wc_dilithium_verify_ctx_kats(void) +int test_mldsa_verify_ctx_kats(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - dilithium_key* key; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) + wc_MlDsaKey* key; int res; #ifndef WOLFSSL_NO_ML_DSA_44 @@ -20248,7 +20233,7 @@ int test_wc_dilithium_verify_ctx_kats(void) }; #endif /* !WOLFSSL_NO_ML_DSA_87 */ - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); if (key != NULL) { @@ -20257,127 +20242,103 @@ int test_wc_dilithium_verify_ctx_kats(void) #ifndef WOLFSSL_NO_ML_DSA_44 /* ML-DSA-44: verify with empty context (ctx=NULL, ctxLen=0) */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_44, (word32)sizeof(pk_44), key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_44, (word32)sizeof(pk_44)), 0); res = 0; - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig_44_ctx0, - (word32)sizeof(sig_44_ctx0), NULL, 0, - msg_44, (word32)sizeof(msg_44), &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(key, sig_44_ctx0, (word32)sizeof(sig_44_ctx0), NULL, 0, msg_44, (word32)sizeof(msg_44), &res), 0); ExpectIntEQ(res, 1); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); /* ML-DSA-44: verify with context from gist record 1 (ctxLen=33) */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_44, (word32)sizeof(pk_44), key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_44, (word32)sizeof(pk_44)), 0); res = 0; - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig_44_ctx33, - (word32)sizeof(sig_44_ctx33), ctx_44, - (byte)sizeof(ctx_44), msg_44, (word32)sizeof(msg_44), - &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(key, sig_44_ctx33, (word32)sizeof(sig_44_ctx33), ctx_44, (byte)sizeof(ctx_44), msg_44, (word32)sizeof(msg_44), &res), 0); ExpectIntEQ(res, 1); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); /* ML-DSA-44: cross-context rejection, empty-ctx sig must not verify with ctx */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_44, (word32)sizeof(pk_44), key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_44, (word32)sizeof(pk_44)), 0); res = 1; - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig_44_ctx0, - (word32)sizeof(sig_44_ctx0), ctx_44, - (byte)sizeof(ctx_44), msg_44, (word32)sizeof(msg_44), - &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(key, sig_44_ctx0, (word32)sizeof(sig_44_ctx0), ctx_44, (byte)sizeof(ctx_44), msg_44, (word32)sizeof(msg_44), &res), 0); ExpectIntEQ(res, 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif /* !WOLFSSL_NO_ML_DSA_44 */ #ifndef WOLFSSL_NO_ML_DSA_65 /* ML-DSA-65: verify with empty context (ctx=NULL, ctxLen=0) */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_65, (word32)sizeof(pk_65), key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_65, (word32)sizeof(pk_65)), 0); res = 0; - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig_65_ctx0, - (word32)sizeof(sig_65_ctx0), NULL, 0, - msg_65, (word32)sizeof(msg_65), &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(key, sig_65_ctx0, (word32)sizeof(sig_65_ctx0), NULL, 0, msg_65, (word32)sizeof(msg_65), &res), 0); ExpectIntEQ(res, 1); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); /* ML-DSA-65: verify with context from gist record 1 (ctxLen=33) */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_65, (word32)sizeof(pk_65), key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_65, (word32)sizeof(pk_65)), 0); res = 0; - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig_65_ctx33, - (word32)sizeof(sig_65_ctx33), ctx_65, - (byte)sizeof(ctx_65), msg_65, (word32)sizeof(msg_65), - &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(key, sig_65_ctx33, (word32)sizeof(sig_65_ctx33), ctx_65, (byte)sizeof(ctx_65), msg_65, (word32)sizeof(msg_65), &res), 0); ExpectIntEQ(res, 1); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); /* ML-DSA-65: cross-context rejection, empty-ctx sig must not verify with ctx */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_65, (word32)sizeof(pk_65), key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_65, (word32)sizeof(pk_65)), 0); res = 1; - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig_65_ctx0, - (word32)sizeof(sig_65_ctx0), ctx_65, - (byte)sizeof(ctx_65), msg_65, (word32)sizeof(msg_65), - &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(key, sig_65_ctx0, (word32)sizeof(sig_65_ctx0), ctx_65, (byte)sizeof(ctx_65), msg_65, (word32)sizeof(msg_65), &res), 0); ExpectIntEQ(res, 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif /* !WOLFSSL_NO_ML_DSA_65 */ #ifndef WOLFSSL_NO_ML_DSA_87 /* ML-DSA-87: verify with empty context (ctx=NULL, ctxLen=0) */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_87, (word32)sizeof(pk_87), key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_87, (word32)sizeof(pk_87)), 0); res = 0; - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig_87_ctx0, - (word32)sizeof(sig_87_ctx0), NULL, 0, - msg_87, (word32)sizeof(msg_87), &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(key, sig_87_ctx0, (word32)sizeof(sig_87_ctx0), NULL, 0, msg_87, (word32)sizeof(msg_87), &res), 0); ExpectIntEQ(res, 1); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); /* ML-DSA-87: verify with context from gist record 1 (ctxLen=33) */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_87, (word32)sizeof(pk_87), key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_87, (word32)sizeof(pk_87)), 0); res = 0; - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig_87_ctx33, - (word32)sizeof(sig_87_ctx33), ctx_87, - (byte)sizeof(ctx_87), msg_87, (word32)sizeof(msg_87), - &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(key, sig_87_ctx33, (word32)sizeof(sig_87_ctx33), ctx_87, (byte)sizeof(ctx_87), msg_87, (word32)sizeof(msg_87), &res), 0); ExpectIntEQ(res, 1); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); /* ML-DSA-87: cross-context rejection, empty-ctx sig must not verify with ctx */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_87, (word32)sizeof(pk_87), key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_87, (word32)sizeof(pk_87)), 0); res = 1; - ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig_87_ctx0, - (word32)sizeof(sig_87_ctx0), ctx_87, - (byte)sizeof(ctx_87), msg_87, (word32)sizeof(msg_87), - &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyCtx(key, sig_87_ctx0, (word32)sizeof(sig_87_ctx0), ctx_87, (byte)sizeof(ctx_87), msg_87, (word32)sizeof(msg_87), &res), 0); ExpectIntEQ(res, 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif /* !WOLFSSL_NO_ML_DSA_87 */ XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); -#endif /* HAVE_DILITHIUM && !WOLFSSL_DILITHIUM_NO_VERIFY */ +#endif /* WOLFSSL_HAVE_MLDSA && !WOLFSSL_MLDSA_NO_VERIFY */ return EXPECT_RESULT(); } -int test_wc_dilithium_verify_kats(void) +int test_mldsa_verify_kats(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && defined(WOLFSSL_DILITHIUM_NO_CTX) - dilithium_key* key; +#if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) && defined(WOLFSSL_MLDSA_NO_CTX) + wc_MlDsaKey* key; int res; #ifndef WOLFSSL_NO_ML_DSA_44 static const byte pk_44[] = { @@ -22479,7 +22440,7 @@ int test_wc_dilithium_verify_kats(void) 0x29, 0x2E, 0x36 }; #endif -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT #ifndef WOLFSSL_NO_ML_DSA_44 static const byte pk_44_draft[] = { 0x35, 0x07, 0x31, 0x3A, 0xE3, 0x7A, 0xF6, 0x96, @@ -24581,92 +24542,80 @@ int test_wc_dilithium_verify_kats(void) #endif #endif - key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); if (key != NULL) { XMEMSET(key, 0, sizeof(*key)); } - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); #ifndef WOLFSSL_NO_ML_DSA_44 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_44, (word32)sizeof(pk_44), key), + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_44, (word32)sizeof(pk_44)), 0); - ExpectIntEQ(wc_dilithium_verify_msg(sig_44, (word32)sizeof(sig_44), msg_44, - (word32)sizeof(msg_44), &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig_44, (word32)sizeof(sig_44), msg_44, (word32)sizeof(msg_44), &res), 0); ExpectIntEQ(res, 1); -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44_DRAFT), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_44_draft, - (word32)sizeof(pk_44_draft), key), 0); - ExpectIntEQ(wc_dilithium_verify_msg(sig_44_draft, - (word32)sizeof(sig_44_draft), msg_44_draft, - (word32)sizeof(msg_44_draft), &res, key), 0); +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44_DRAFT), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_44_draft, (word32)sizeof(pk_44_draft)), 0); + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig_44_draft, (word32)sizeof(sig_44_draft), msg_44_draft, (word32)sizeof(msg_44_draft), &res), 0); ExpectIntEQ(res, 1); #endif #endif #ifndef WOLFSSL_NO_ML_DSA_65 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_65, (word32)sizeof(pk_65), key), + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_65, (word32)sizeof(pk_65)), 0); - ExpectIntEQ(wc_dilithium_verify_msg(sig_65, (word32)sizeof(sig_65), msg_65, - (word32)sizeof(msg_65), &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig_65, (word32)sizeof(sig_65), msg_65, (word32)sizeof(msg_65), &res), 0); ExpectIntEQ(res, 1); -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65_DRAFT), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_65_draft, - (word32)sizeof(pk_65_draft), key), 0); - ExpectIntEQ(wc_dilithium_verify_msg(sig_65_draft, - (word32)sizeof(sig_65_draft), msg_65_draft, - (word32)sizeof(msg_65_draft), &res, key), 0); +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65_DRAFT), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_65_draft, (word32)sizeof(pk_65_draft)), 0); + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig_65_draft, (word32)sizeof(sig_65_draft), msg_65_draft, (word32)sizeof(msg_65_draft), &res), 0); ExpectIntEQ(res, 1); #endif #endif #ifndef WOLFSSL_NO_ML_DSA_87 - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_87, (word32)sizeof(pk_87), key), + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_87, (word32)sizeof(pk_87)), 0); - ExpectIntEQ(wc_dilithium_verify_msg(sig_87, (word32)sizeof(sig_87), msg_87, - (word32)sizeof(msg_87), &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig_87, (word32)sizeof(sig_87), msg_87, (word32)sizeof(msg_87), &res), 0); ExpectIntEQ(res, 1); -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87_DRAFT), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_87_draft, - (word32)sizeof(pk_87_draft), key), 0); - ExpectIntEQ(wc_dilithium_verify_msg(sig_87_draft, - (word32)sizeof(sig_87_draft), msg_87_draft, - (word32)sizeof(msg_87_draft), &res, key), 0); +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87_DRAFT), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_87_draft, (word32)sizeof(pk_87_draft)), 0); + ExpectIntEQ(wc_MlDsaKey_Verify(key, sig_87_draft, (word32)sizeof(sig_87_draft), msg_87_draft, (word32)sizeof(msg_87_draft), &res), 0); ExpectIntEQ(res, 1); #endif #endif - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return EXPECT_RESULT(); } /* Known-answer tests for the ML-DSA externalMu sign API - * (wc_dilithium_sign_mu_with_seed). Vectors are the deterministic + * (wc_MlDsaKey_SignMuWithSeed). Vectors are the deterministic * externalMu groups from the ACVP v7.0.0 known-vector set. * * Note: this file is userspace-only (tests/unit.test); it is not built into * libwolfssl.ko, so the large per-paramSet vectors do not need the chunking * treatment used in wolfcrypt/src/fips_test.c. The arrays are static const * and live in .rodata, not on the stack. */ -int test_wc_dilithium_sign_mu_kats(void) +int test_mldsa_sign_mu_kats(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_SIGN) && \ (!defined(HAVE_FIPS) || FIPS_VERSION3_GE(7,0,0)) - dilithium_key* key = NULL; + wc_MlDsaKey* key = NULL; word32 sigLen; byte* sig = NULL; /* FIPS 204 Section 3.7: deterministic ML-DSA fixes rnd to 32 zero * bytes. Our ACVP "deterministic" vectors were generated with that * convention, so passing zeroSeed reproduces them byte-for-byte. */ - static const byte zeroSeed[DILITHIUM_RND_SZ] = { 0 }; + static const byte zeroSeed[MLDSA_RND_SZ] = { 0 }; #ifndef WOLFSSL_NO_ML_DSA_44 /* ML-DSA-44 externalMu: deterministic, tcId 91 @@ -27464,50 +27413,44 @@ int test_wc_dilithium_sign_mu_kats(void) #endif - ExpectNotNull(key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, + ExpectNotNull(key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER)); - ExpectNotNull(sig = (byte*)XMALLOC(DILITHIUM_MAX_SIG_SIZE, NULL, + ExpectNotNull(sig = (byte*)XMALLOC(MLDSA_MAX_SIG_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER)); PRIVATE_KEY_UNLOCK(); #ifndef WOLFSSL_NO_ML_DSA_44 /* ML-DSA-44: sign with externalMu, deterministic seed (zeros). */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_import_private(sk_44_mu, - (word32)sizeof(sk_44_mu), key), 0); - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_mu_with_seed(mu_44, - (word32)sizeof(mu_44), sig, &sigLen, key, zeroSeed), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, sk_44_mu, (word32)sizeof(sk_44_mu)), 0); + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignMuWithSeed(key, sig, &sigLen, mu_44, (word32)sizeof(mu_44), zeroSeed), 0); ExpectIntEQ(sigLen, (word32)sizeof(sig_44_mu)); ExpectIntEQ(XMEMCMP(sig, sig_44_mu, sizeof(sig_44_mu)), 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif /* !WOLFSSL_NO_ML_DSA_44 */ #ifndef WOLFSSL_NO_ML_DSA_65 /* ML-DSA-65: sign with externalMu, deterministic seed (zeros). */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_import_private(sk_65_mu, - (word32)sizeof(sk_65_mu), key), 0); - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_mu_with_seed(mu_65, - (word32)sizeof(mu_65), sig, &sigLen, key, zeroSeed), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, sk_65_mu, (word32)sizeof(sk_65_mu)), 0); + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignMuWithSeed(key, sig, &sigLen, mu_65, (word32)sizeof(mu_65), zeroSeed), 0); ExpectIntEQ(sigLen, (word32)sizeof(sig_65_mu)); ExpectIntEQ(XMEMCMP(sig, sig_65_mu, sizeof(sig_65_mu)), 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif /* !WOLFSSL_NO_ML_DSA_65 */ #ifndef WOLFSSL_NO_ML_DSA_87 /* ML-DSA-87: sign with externalMu, deterministic seed (zeros). */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_import_private(sk_87_mu, - (word32)sizeof(sk_87_mu), key), 0); - sigLen = DILITHIUM_MAX_SIG_SIZE; - ExpectIntEQ(wc_dilithium_sign_mu_with_seed(mu_87, - (word32)sizeof(mu_87), sig, &sigLen, key, zeroSeed), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPrivRaw(key, sk_87_mu, (word32)sizeof(sk_87_mu)), 0); + sigLen = MLDSA_MAX_SIG_SIZE; + ExpectIntEQ(wc_MlDsaKey_SignMuWithSeed(key, sig, &sigLen, mu_87, (word32)sizeof(mu_87), zeroSeed), 0); ExpectIntEQ(sigLen, (word32)sizeof(sig_87_mu)); ExpectIntEQ(XMEMCMP(sig, sig_87_mu, sizeof(sig_87_mu)), 0); - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif /* !WOLFSSL_NO_ML_DSA_87 */ PRIVATE_KEY_LOCK(); XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -27517,19 +27460,19 @@ int test_wc_dilithium_sign_mu_kats(void) } /* Known-answer tests for the ML-DSA externalMu verify API - * (wc_dilithium_verify_mu). Reuses the vectors above and adds two + * (wc_MlDsaKey_VerifyMu). Reuses the vectors above and adds two * negative cases per parameter set: a bit flip in mu and in sig. * - * Userspace-only (see note on test_wc_dilithium_sign_mu_kats above); + * Userspace-only (see note on test_mldsa_sign_mu_kats above); * kernel-module chunking does not apply. */ -int test_wc_dilithium_verify_mu_kats(void) +int test_mldsa_verify_mu_kats(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && \ +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_VERIFY) && \ (!defined(HAVE_FIPS) || FIPS_VERSION3_GE(7,0,0)) - dilithium_key* key = NULL; + wc_MlDsaKey* key = NULL; byte* sigBuf = NULL; - byte muBuf[DILITHIUM_MU_SZ]; + byte muBuf[MLDSA_MU_SZ]; int res; #ifndef WOLFSSL_NO_ML_DSA_44 @@ -29623,28 +29566,23 @@ int test_wc_dilithium_verify_mu_kats(void) }; #endif - ExpectNotNull(key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, + ExpectNotNull(key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER)); #ifndef WOLFSSL_NO_ML_DSA_44 /* ML-DSA-44: verify the known-good (mu, sig) pair. */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_44_mu, - (word32)sizeof(pk_44_mu), key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_44_mu, (word32)sizeof(pk_44_mu)), 0); res = 0; - ExpectIntEQ(wc_dilithium_verify_mu(sig_44_mu, - (word32)sizeof(sig_44_mu), mu_44, - (word32)sizeof(mu_44), &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyMu(key, sig_44_mu, (word32)sizeof(sig_44_mu), mu_44, (word32)sizeof(mu_44), &res), 0); ExpectIntEQ(res, 1); /* Tamper mu: verification must fail. */ XMEMCPY(muBuf, mu_44, sizeof(mu_44)); muBuf[0] ^= 0x01; res = 1; - (void)wc_dilithium_verify_mu(sig_44_mu, - (word32)sizeof(sig_44_mu), muBuf, - (word32)sizeof(mu_44), &res, key); + (void)wc_MlDsaKey_VerifyMu(key, sig_44_mu, (word32)sizeof(sig_44_mu), muBuf, (word32)sizeof(mu_44), &res); ExpectIntEQ(res, 0); /* Tamper signature: verification must fail. */ @@ -29654,34 +29592,27 @@ int test_wc_dilithium_verify_mu_kats(void) XMEMCPY(sigBuf, sig_44_mu, sizeof(sig_44_mu)); sigBuf[0] ^= 0x01; res = 1; - (void)wc_dilithium_verify_mu(sigBuf, - (word32)sizeof(sig_44_mu), mu_44, - (word32)sizeof(mu_44), &res, key); + (void)wc_MlDsaKey_VerifyMu(key, sigBuf, (word32)sizeof(sig_44_mu), mu_44, (word32)sizeof(mu_44), &res); ExpectIntEQ(res, 0); XFREE(sigBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); sigBuf = NULL; } - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif /* !WOLFSSL_NO_ML_DSA_44 */ #ifndef WOLFSSL_NO_ML_DSA_65 /* ML-DSA-65: verify the known-good (mu, sig) pair. */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_65_mu, - (word32)sizeof(pk_65_mu), key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_65_mu, (word32)sizeof(pk_65_mu)), 0); res = 0; - ExpectIntEQ(wc_dilithium_verify_mu(sig_65_mu, - (word32)sizeof(sig_65_mu), mu_65, - (word32)sizeof(mu_65), &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyMu(key, sig_65_mu, (word32)sizeof(sig_65_mu), mu_65, (word32)sizeof(mu_65), &res), 0); ExpectIntEQ(res, 1); /* Tamper mu: verification must fail. */ XMEMCPY(muBuf, mu_65, sizeof(mu_65)); muBuf[0] ^= 0x01; res = 1; - (void)wc_dilithium_verify_mu(sig_65_mu, - (word32)sizeof(sig_65_mu), muBuf, - (word32)sizeof(mu_65), &res, key); + (void)wc_MlDsaKey_VerifyMu(key, sig_65_mu, (word32)sizeof(sig_65_mu), muBuf, (word32)sizeof(mu_65), &res); ExpectIntEQ(res, 0); /* Tamper signature: verification must fail. */ @@ -29691,34 +29622,27 @@ int test_wc_dilithium_verify_mu_kats(void) XMEMCPY(sigBuf, sig_65_mu, sizeof(sig_65_mu)); sigBuf[0] ^= 0x01; res = 1; - (void)wc_dilithium_verify_mu(sigBuf, - (word32)sizeof(sig_65_mu), mu_65, - (word32)sizeof(mu_65), &res, key); + (void)wc_MlDsaKey_VerifyMu(key, sigBuf, (word32)sizeof(sig_65_mu), mu_65, (word32)sizeof(mu_65), &res); ExpectIntEQ(res, 0); XFREE(sigBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); sigBuf = NULL; } - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif /* !WOLFSSL_NO_ML_DSA_65 */ #ifndef WOLFSSL_NO_ML_DSA_87 /* ML-DSA-87: verify the known-good (mu, sig) pair. */ - ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); - ExpectIntEQ(wc_dilithium_import_public(pk_87_mu, - (word32)sizeof(pk_87_mu), key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_MlDsaKey_ImportPubRaw(key, pk_87_mu, (word32)sizeof(pk_87_mu)), 0); res = 0; - ExpectIntEQ(wc_dilithium_verify_mu(sig_87_mu, - (word32)sizeof(sig_87_mu), mu_87, - (word32)sizeof(mu_87), &res, key), 0); + ExpectIntEQ(wc_MlDsaKey_VerifyMu(key, sig_87_mu, (word32)sizeof(sig_87_mu), mu_87, (word32)sizeof(mu_87), &res), 0); ExpectIntEQ(res, 1); /* Tamper mu: verification must fail. */ XMEMCPY(muBuf, mu_87, sizeof(mu_87)); muBuf[0] ^= 0x01; res = 1; - (void)wc_dilithium_verify_mu(sig_87_mu, - (word32)sizeof(sig_87_mu), muBuf, - (word32)sizeof(mu_87), &res, key); + (void)wc_MlDsaKey_VerifyMu(key, sig_87_mu, (word32)sizeof(sig_87_mu), muBuf, (word32)sizeof(mu_87), &res); ExpectIntEQ(res, 0); /* Tamper signature: verification must fail. */ @@ -29728,14 +29652,12 @@ int test_wc_dilithium_verify_mu_kats(void) XMEMCPY(sigBuf, sig_87_mu, sizeof(sig_87_mu)); sigBuf[0] ^= 0x01; res = 1; - (void)wc_dilithium_verify_mu(sigBuf, - (word32)sizeof(sig_87_mu), mu_87, - (word32)sizeof(mu_87), &res, key); + (void)wc_MlDsaKey_VerifyMu(key, sigBuf, (word32)sizeof(sig_87_mu), mu_87, (word32)sizeof(mu_87), &res); ExpectIntEQ(res, 0); XFREE(sigBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); sigBuf = NULL; } - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #endif /* !WOLFSSL_NO_ML_DSA_87 */ XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif @@ -29743,9 +29665,9 @@ int test_wc_dilithium_verify_mu_kats(void) } #if !defined(NO_ASN) && defined(HAVE_PKCS8) && \ - defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_ASN1) && defined(WOLFSSL_ASN_TEMPLATE) + defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_ASN1) && defined(WOLFSSL_ASN_TEMPLATE) static struct { const char* fileName; byte level; @@ -29806,22 +29728,22 @@ static struct { }; #endif -int test_wc_Dilithium_PrivateKeyDecode_OpenSSL_form(void) +int test_mldsa_PrivateKeyDecode_OpenSSL_form(void) { EXPECT_DECLS; #if !defined(NO_ASN) && defined(HAVE_PKCS8) && \ - defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_ASN1) && defined(WOLFSSL_ASN_TEMPLATE) + defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_ASN1) && defined(WOLFSSL_ASN_TEMPLATE) byte* der = NULL; - size_t derMaxSz = ML_DSA_LEVEL5_BOTH_KEY_DER_SIZE; + size_t derMaxSz = WC_MLDSA_87_BOTH_KEY_DER_SIZE; size_t derSz = 0; FILE* fp = NULL; word32 inOutIdx = 0; word32 inOutIdx2 = 0; - dilithium_key key; + wc_MlDsaKey key; int expect = 0; int pkeySz = 0; byte level = 0; @@ -29838,63 +29760,59 @@ int test_wc_Dilithium_PrivateKeyDecode_OpenSSL_form(void) /* Specify a level with PKCS8 format */ XMEMSET(&key, 0, sizeof(key)); - ExpectIntEQ(wc_dilithium_init(&key), 0); - ExpectIntEQ(wc_dilithium_set_level(&key, ossl_form[i].level), 0); + ExpectIntEQ(wc_MlDsaKey_Init(&key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(&key, ossl_form[i].level), 0); inOutIdx = 0; expect = ossl_form[i].p8_lv ? 0 : ASN_PARSE_E; - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der, &inOutIdx, &key, - (word32)derSz), expect); + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(&key, der, (word32)derSz, &inOutIdx), expect); if (expect == 0) { - ExpectIntEQ(wc_dilithium_get_level(&key, &level), 0); + ExpectIntEQ(wc_MlDsaKey_GetParams(&key, &level), 0); ExpectIntEQ(level, ossl_form[i].level); } - wc_dilithium_free(&key); + wc_MlDsaKey_Free(&key); /* Not specify a level with PKCS8 format */ XMEMSET(&key, 0, sizeof(key)); - ExpectIntEQ(wc_dilithium_init(&key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(&key, NULL, INVALID_DEVID), 0); inOutIdx = 0; expect = ossl_form[i].p8_nolv ? 0 : ASN_PARSE_E; - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der, &inOutIdx, &key, - (word32)derSz), expect); + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(&key, der, (word32)derSz, &inOutIdx), expect); if (expect == 0) { - ExpectIntEQ(wc_dilithium_get_level(&key, &level), 0); + ExpectIntEQ(wc_MlDsaKey_GetParams(&key, &level), 0); ExpectIntEQ(level, ossl_form[i].level); } - wc_dilithium_free(&key); + wc_MlDsaKey_Free(&key); /* Specify a level with traditional format */ XMEMSET(&key, 0, sizeof(key)); - ExpectIntEQ(wc_dilithium_init(&key), 0); - ExpectIntEQ(wc_dilithium_set_level(&key, ossl_form[i].level), 0); + ExpectIntEQ(wc_MlDsaKey_Init(&key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_MlDsaKey_SetParams(&key, ossl_form[i].level), 0); inOutIdx = 0; expect = ossl_form[i].trad_lv ? 0 : ASN_PARSE_E; ExpectIntGT(pkeySz = wc_GetPkcs8TraditionalOffset(der, &inOutIdx, (word32)derSz), 0); inOutIdx2 = 0; - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der + inOutIdx, &inOutIdx2, - &key, (word32)pkeySz), expect); + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(&key, der + inOutIdx, (word32)pkeySz, &inOutIdx2), expect); if (expect == 0) { - ExpectIntEQ(wc_dilithium_get_level(&key, &level), 0); + ExpectIntEQ(wc_MlDsaKey_GetParams(&key, &level), 0); ExpectIntEQ(level, ossl_form[i].level); } - wc_dilithium_free(&key); + wc_MlDsaKey_Free(&key); /* Not specify a level with traditional format */ XMEMSET(&key, 0, sizeof(key)); - ExpectIntEQ(wc_dilithium_init(&key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(&key, NULL, INVALID_DEVID), 0); inOutIdx = 0; expect = ossl_form[i].trad_nolv ? 0 : ASN_PARSE_E; ExpectIntGT(pkeySz = wc_GetPkcs8TraditionalOffset(der, &inOutIdx, (word32)derSz), 0); inOutIdx2 = 0; - ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der + inOutIdx, &inOutIdx2, - &key, (word32)pkeySz), expect); + ExpectIntEQ(wc_MlDsaKey_PrivateKeyDecode(&key, der + inOutIdx, (word32)pkeySz, &inOutIdx2), expect); if (expect == 0) { - ExpectIntEQ(wc_dilithium_get_level(&key, &level), 0); + ExpectIntEQ(wc_MlDsaKey_GetParams(&key, &level), 0); ExpectIntEQ(level, ossl_form[i].level); } - wc_dilithium_free(&key); + wc_MlDsaKey_Free(&key); } PRIVATE_KEY_LOCK(); @@ -29908,21 +29826,21 @@ int test_mldsa_pkcs8_import_OpenSSL_form(void) { EXPECT_DECLS; #if !defined(NO_ASN) && defined(HAVE_PKCS8) && \ - defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ - !defined(WOLFSSL_DILITHIUM_NO_ASN1) && defined(WOLFSSL_ASN_TEMPLATE) && \ + defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_ASN1) && defined(WOLFSSL_ASN_TEMPLATE) && \ !defined(NO_TLS) && \ (!defined(NO_WOLFSSL_CLIENT) || !defined(NO_WOLFSSL_SERVER)) byte* der = NULL; - size_t derMaxSz = ML_DSA_LEVEL5_BOTH_KEY_DER_SIZE; + size_t derMaxSz = WC_MLDSA_87_BOTH_KEY_DER_SIZE; size_t derSz = 0; WOLFSSL_CTX* ctx = NULL; FILE* fp = NULL; #ifdef WOLFSSL_DER_TO_PEM byte* pem = NULL; - size_t pemMaxSz = ML_DSA_LEVEL5_BOTH_KEY_PEM_SIZE; + size_t pemMaxSz = WC_MLDSA_87_BOTH_KEY_PEM_SIZE; size_t pemSz = 0; #endif /* WOLFSSL_DER_TO_PEM */ @@ -29982,21 +29900,21 @@ int test_mldsa_pkcs8_export_import_wolfSSL_form(void) { EXPECT_DECLS; #if !defined(NO_ASN) && defined(HAVE_PKCS8) && \ - defined(HAVE_DILITHIUM) && !defined(NO_TLS) && \ + defined(WOLFSSL_HAVE_MLDSA) && !defined(NO_TLS) && \ (!defined(NO_WOLFSSL_CLIENT) || !defined(NO_WOLFSSL_SERVER)) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ - !defined(WOLFSSL_DILITHIUM_NO_ASN1) && defined(WOLFSSL_ASN_TEMPLATE) + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_ASN1) && defined(WOLFSSL_ASN_TEMPLATE) WOLFSSL_CTX* ctx = NULL; size_t i; - const int derMaxSz = DILITHIUM_MAX_BOTH_KEY_DER_SIZE; - const int tempMaxSz = DILITHIUM_MAX_BOTH_KEY_PEM_SIZE; + const int derMaxSz = MLDSA_MAX_BOTH_KEY_DER_SIZE; + const int tempMaxSz = MLDSA_MAX_BOTH_KEY_PEM_SIZE; byte* der = NULL; byte* temp = NULL; /* Store PEM or intermediate key */ word32 derSz = 0; word32 pemSz = 0; - dilithium_key mldsa_key; + wc_MlDsaKey mldsa_key; WC_RNG rng; int ret; @@ -30006,13 +29924,13 @@ int test_mldsa_pkcs8_export_import_wolfSSL_form(void) int keySz; } test_variant[] = { #ifndef WOLFSSL_NO_ML_DSA_44 - {WC_ML_DSA_44, ML_DSA_LEVEL2k, ML_DSA_LEVEL2_PRV_KEY_SIZE}, + {WC_ML_DSA_44, ML_DSA_44k, WC_MLDSA_44_PRV_KEY_SIZE}, #endif #ifndef WOLFSSL_NO_ML_DSA_65 - {WC_ML_DSA_65, ML_DSA_LEVEL3k, ML_DSA_LEVEL3_PRV_KEY_SIZE}, + {WC_ML_DSA_65, ML_DSA_65k, WC_MLDSA_65_PRV_KEY_SIZE}, #endif #ifndef WOLFSSL_NO_ML_DSA_87 - {WC_ML_DSA_87, ML_DSA_LEVEL5k, ML_DSA_LEVEL5_PRV_KEY_SIZE} + {WC_ML_DSA_87, ML_DSA_87k, WC_MLDSA_87_PRV_KEY_SIZE} #endif }; @@ -30032,15 +29950,15 @@ int test_mldsa_pkcs8_export_import_wolfSSL_form(void) #endif /* NO_WOLFSSL_SERVER */ ExpectIntEQ(wc_InitRng(&rng), 0); - ExpectIntEQ(wc_dilithium_init(&mldsa_key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(&mldsa_key, NULL, INVALID_DEVID), 0); /* Test private + public key (separated format) */ for (i = 0; i < sizeof(test_variant) / sizeof(test_variant[0]); ++i) { - ExpectIntEQ(wc_dilithium_set_level(&mldsa_key, + ExpectIntEQ(wc_MlDsaKey_SetParams(&mldsa_key, test_variant[i].wcId), 0); - ExpectIntEQ(wc_dilithium_make_key(&mldsa_key, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(&mldsa_key, &rng), 0); - ExpectIntGT(derSz = wc_Dilithium_KeyToDer(&mldsa_key, der, derMaxSz), + ExpectIntGT(derSz = wc_MlDsaKey_KeyToDer(&mldsa_key, der, derMaxSz), 0); ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, der, derSz, WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS); @@ -30055,11 +29973,11 @@ int test_mldsa_pkcs8_export_import_wolfSSL_form(void) /* Test private key only */ for (i = 0; i < sizeof(test_variant) / sizeof(test_variant[0]); ++i) { - ExpectIntEQ(wc_dilithium_set_level(&mldsa_key, test_variant[i].wcId), + ExpectIntEQ(wc_MlDsaKey_SetParams(&mldsa_key, test_variant[i].wcId), 0); - ExpectIntEQ(wc_dilithium_make_key(&mldsa_key, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(&mldsa_key, &rng), 0); - ExpectIntGT(derSz = wc_Dilithium_PrivateKeyToDer(&mldsa_key, der, + ExpectIntGT(derSz = wc_MlDsaKey_PrivateKeyToDer(&mldsa_key, der, derMaxSz), 0); ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, der, derSz, WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS); @@ -30072,7 +29990,7 @@ int test_mldsa_pkcs8_export_import_wolfSSL_form(void) #endif /* WOLFSSL_DER_TO_PEM */ } - wc_dilithium_free(&mldsa_key); + wc_MlDsaKey_Free(&mldsa_key); ret = wc_FreeRng(&rng); ExpectIntEQ(ret, 0); wolfSSL_CTX_free(ctx); @@ -30085,22 +30003,22 @@ int test_mldsa_pkcs8_export_import_wolfSSL_form(void) /* Exercise w1 encoding with adversarial inputs to catch undefined behavior. * - * The word32-optimized paths in dilithium_encode_w1_88_c and - * dilithium_encode_w1_32_c left-shift sword32 values by up to 30 bits. + * The word32-optimized paths in mldsa_encode_w1_88_c and + * mldsa_encode_w1_32_c left-shift sword32 values by up to 30 bits. * Large or invalid w1 values trigger signed integer overflow (UB in C). * Under -fsanitize=undefined this test will trap on the offending shifts. * * We also test that encoding the same input twice yields identical output * (determinism check - UB can cause nondeterministic results). */ -int test_wc_dilithium_encode_w1_large_values(void) +int test_mldsa_encode_w1_large_values(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && \ - (!defined(WOLFSSL_DILITHIUM_NO_SIGN) || \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY)) +#if defined(WOLFSSL_HAVE_MLDSA) && \ + (!defined(WOLFSSL_MLDSA_NO_SIGN) || \ + !defined(WOLFSSL_MLDSA_NO_VERIFY)) - sword32 w1[DILITHIUM_N]; + sword32 w1[MLDSA_N]; unsigned int j, k; /* Adversarial w1 values: @@ -30123,92 +30041,92 @@ int test_wc_dilithium_encode_w1_large_values(void) }; const int n_patterns = (int)(sizeof(patterns) / sizeof(patterns[0])); - /* ---- 6-bit encoding (dilithium_encode_w1_88 path) ---- */ + /* ---- 6-bit encoding (mldsa_encode_w1_88 path) ---- */ #ifndef WOLFSSL_NO_ML_DSA_44 { - ALIGN32 byte enc_a[DILITHIUM_N * DILITHIUM_Q_HI_88_ENC_BITS / 8]; - ALIGN32 byte enc_b[DILITHIUM_N * DILITHIUM_Q_HI_88_ENC_BITS / 8]; + ALIGN32 byte enc_a[MLDSA_N * MLDSA_Q_HI_88_ENC_BITS / 8]; + ALIGN32 byte enc_b[MLDSA_N * MLDSA_Q_HI_88_ENC_BITS / 8]; /* Uniform fill with each pattern */ for (k = 0; k < (unsigned int)n_patterns; k++) { - for (j = 0; j < DILITHIUM_N; j++) { + for (j = 0; j < MLDSA_N; j++) { w1[j] = patterns[k]; } XMEMSET(enc_a, 0, sizeof(enc_a)); XMEMSET(enc_b, 0, sizeof(enc_b)); - wc_dilithium_encode_w1_88(w1, enc_a); - wc_dilithium_encode_w1_88(w1, enc_b); + wc_mldsa_encode_w1_88(w1, enc_a); + wc_mldsa_encode_w1_88(w1, enc_b); /* Determinism: same input must produce same output */ ExpectIntEQ(XMEMCMP(enc_a, enc_b, sizeof(enc_a)), 0); } /* Alternating pattern: adjacent elements get different values */ - for (j = 0; j < DILITHIUM_N; j++) { + for (j = 0; j < MLDSA_N; j++) { w1[j] = (j & 1) ? 43 : 0; } XMEMSET(enc_a, 0, sizeof(enc_a)); XMEMSET(enc_b, 0, sizeof(enc_b)); - wc_dilithium_encode_w1_88(w1, enc_a); - wc_dilithium_encode_w1_88(w1, enc_b); + wc_mldsa_encode_w1_88(w1, enc_a); + wc_mldsa_encode_w1_88(w1, enc_b); ExpectIntEQ(XMEMCMP(enc_a, enc_b, sizeof(enc_a)), 0); /* Ascending pattern: each element differs */ - for (j = 0; j < DILITHIUM_N; j++) { + for (j = 0; j < MLDSA_N; j++) { w1[j] = (sword32)(j % 44); /* 0..43 cycling */ } XMEMSET(enc_a, 0, sizeof(enc_a)); XMEMSET(enc_b, 0, sizeof(enc_b)); - wc_dilithium_encode_w1_88(w1, enc_a); - wc_dilithium_encode_w1_88(w1, enc_b); + wc_mldsa_encode_w1_88(w1, enc_a); + wc_mldsa_encode_w1_88(w1, enc_b); ExpectIntEQ(XMEMCMP(enc_a, enc_b, sizeof(enc_a)), 0); } #endif /* !WOLFSSL_NO_ML_DSA_44 */ - /* ---- 4-bit encoding (dilithium_encode_w1_32 path) ---- */ + /* ---- 4-bit encoding (mldsa_encode_w1_32 path) ---- */ #if !defined(WOLFSSL_NO_ML_DSA_65) || !defined(WOLFSSL_NO_ML_DSA_87) { - ALIGN32 byte enc_a[DILITHIUM_N * DILITHIUM_Q_HI_32_ENC_BITS / 8]; - ALIGN32 byte enc_b[DILITHIUM_N * DILITHIUM_Q_HI_32_ENC_BITS / 8]; + ALIGN32 byte enc_a[MLDSA_N * MLDSA_Q_HI_32_ENC_BITS / 8]; + ALIGN32 byte enc_b[MLDSA_N * MLDSA_Q_HI_32_ENC_BITS / 8]; /* Uniform fill with each pattern */ for (k = 0; k < (unsigned int)n_patterns; k++) { - for (j = 0; j < DILITHIUM_N; j++) { + for (j = 0; j < MLDSA_N; j++) { w1[j] = patterns[k]; } XMEMSET(enc_a, 0, sizeof(enc_a)); XMEMSET(enc_b, 0, sizeof(enc_b)); - wc_dilithium_encode_w1_32(w1, enc_a); - wc_dilithium_encode_w1_32(w1, enc_b); + wc_mldsa_encode_w1_32(w1, enc_a); + wc_mldsa_encode_w1_32(w1, enc_b); ExpectIntEQ(XMEMCMP(enc_a, enc_b, sizeof(enc_a)), 0); } /* Alternating pattern */ - for (j = 0; j < DILITHIUM_N; j++) { + for (j = 0; j < MLDSA_N; j++) { w1[j] = (j & 1) ? 15 : 0; } XMEMSET(enc_a, 0, sizeof(enc_a)); XMEMSET(enc_b, 0, sizeof(enc_b)); - wc_dilithium_encode_w1_32(w1, enc_a); - wc_dilithium_encode_w1_32(w1, enc_b); + wc_mldsa_encode_w1_32(w1, enc_a); + wc_mldsa_encode_w1_32(w1, enc_b); ExpectIntEQ(XMEMCMP(enc_a, enc_b, sizeof(enc_a)), 0); /* Ascending pattern */ - for (j = 0; j < DILITHIUM_N; j++) { + for (j = 0; j < MLDSA_N; j++) { w1[j] = (sword32)(j % 16); /* 0..15 cycling */ } XMEMSET(enc_a, 0, sizeof(enc_a)); XMEMSET(enc_b, 0, sizeof(enc_b)); - wc_dilithium_encode_w1_32(w1, enc_a); - wc_dilithium_encode_w1_32(w1, enc_b); + wc_mldsa_encode_w1_32(w1, enc_a); + wc_mldsa_encode_w1_32(w1, enc_b); ExpectIntEQ(XMEMCMP(enc_a, enc_b, sizeof(enc_a)), 0); } #endif /* !WOLFSSL_NO_ML_DSA_65 || !WOLFSSL_NO_ML_DSA_87 */ -#endif /* HAVE_DILITHIUM && sign/verify */ +#endif /* WOLFSSL_HAVE_MLDSA && sign/verify */ return EXPECT_RESULT(); } @@ -30216,7 +30134,7 @@ int test_mldsa_pkcs12(void) { EXPECT_DECLS; #if !defined(NO_ASN) && defined(HAVE_PKCS12) && \ - defined(HAVE_DILITHIUM) && defined(WOLFSSL_DILITHIUM_PRIVATE_KEY) && \ + defined(WOLFSSL_HAVE_MLDSA) && defined(WOLFSSL_MLDSA_PRIVATE_KEY) && \ !defined(NO_TLS) && !defined(NO_PWDBASED) && !defined(NO_HMAC) && \ !defined(NO_CERTS) && !defined(NO_DES3) && \ (!defined(NO_WOLFSSL_CLIENT) || !defined(NO_WOLFSSL_SERVER)) && \ @@ -30227,16 +30145,16 @@ int test_mldsa_pkcs12(void) byte* inKey = NULL; byte* inCert = NULL; const word32 inKeyHeaderSz = 4; - const word32 inKeyMaxSz = inKeyHeaderSz + DILITHIUM_MAX_PRV_KEY_SIZE; + const word32 inKeyMaxSz = inKeyHeaderSz + MLDSA_MAX_PRV_KEY_SIZE; const word32 certConstSz = 412; const word32 inCertMaxSz = - certConstSz + DILITHIUM_MAX_PUB_KEY_SIZE + - WOLFSSL_ASN_MAX_LENGTH_SZ + DILITHIUM_MAX_SIG_SIZE; + certConstSz + MLDSA_MAX_PUB_KEY_SIZE + + WOLFSSL_ASN_MAX_LENGTH_SZ + MLDSA_MAX_SIG_SIZE; /* max signature size + ASN1 encoding */ const word32 pkcs8HeaderSz = 24; WC_RNG rng; - dilithium_key mldsa_key; + wc_MlDsaKey mldsa_key; char pkcs12Passwd[] = "mldsa"; int ret; @@ -30248,18 +30166,18 @@ int test_mldsa_pkcs12(void) int sigType; int keyType; } test_variant[] = { - {PBE_SHA1_DES3, WC_ML_DSA_44, ML_DSA_LEVEL2k, - ML_DSA_LEVEL2_PRV_KEY_SIZE, CTC_ML_DSA_LEVEL2, ML_DSA_LEVEL2_TYPE}, - {PBE_SHA1_DES3, WC_ML_DSA_65, ML_DSA_LEVEL3k, - ML_DSA_LEVEL3_PRV_KEY_SIZE, CTC_ML_DSA_LEVEL3, ML_DSA_LEVEL3_TYPE}, - {PBE_SHA1_DES3, WC_ML_DSA_87, ML_DSA_LEVEL5k, - ML_DSA_LEVEL5_PRV_KEY_SIZE, CTC_ML_DSA_LEVEL5, ML_DSA_LEVEL5_TYPE}, - {-1, WC_ML_DSA_44, ML_DSA_LEVEL2k, - ML_DSA_LEVEL2_PRV_KEY_SIZE, CTC_ML_DSA_LEVEL2, ML_DSA_LEVEL2_TYPE}, - {-1, WC_ML_DSA_65, ML_DSA_LEVEL3k, - ML_DSA_LEVEL3_PRV_KEY_SIZE, CTC_ML_DSA_LEVEL3, ML_DSA_LEVEL3_TYPE}, - {-1, WC_ML_DSA_87, ML_DSA_LEVEL5k, - ML_DSA_LEVEL5_PRV_KEY_SIZE, CTC_ML_DSA_LEVEL5, ML_DSA_LEVEL5_TYPE}, + {PBE_SHA1_DES3, WC_ML_DSA_44, ML_DSA_44k, + WC_MLDSA_44_PRV_KEY_SIZE, CTC_ML_DSA_44, ML_DSA_44_TYPE}, + {PBE_SHA1_DES3, WC_ML_DSA_65, ML_DSA_65k, + WC_MLDSA_65_PRV_KEY_SIZE, CTC_ML_DSA_65, ML_DSA_65_TYPE}, + {PBE_SHA1_DES3, WC_ML_DSA_87, ML_DSA_87k, + WC_MLDSA_87_PRV_KEY_SIZE, CTC_ML_DSA_87, ML_DSA_87_TYPE}, + {-1, WC_ML_DSA_44, ML_DSA_44k, + WC_MLDSA_44_PRV_KEY_SIZE, CTC_ML_DSA_44, ML_DSA_44_TYPE}, + {-1, WC_ML_DSA_65, ML_DSA_65k, + WC_MLDSA_65_PRV_KEY_SIZE, CTC_ML_DSA_65, ML_DSA_65_TYPE}, + {-1, WC_ML_DSA_87, ML_DSA_87k, + WC_MLDSA_87_PRV_KEY_SIZE, CTC_ML_DSA_87, ML_DSA_87_TYPE}, }; XMEMSET(&rng, 0, sizeof(rng)); @@ -30276,7 +30194,7 @@ int test_mldsa_pkcs12(void) #endif /* NO_WOLFSSL_SERVER */ ExpectIntEQ(wc_InitRng(&rng), 0); - ExpectIntEQ(wc_dilithium_init(&mldsa_key), 0); + ExpectIntEQ(wc_MlDsaKey_Init(&mldsa_key, NULL, INVALID_DEVID), 0); for (i = 0; i < sizeof(test_variant) / sizeof(test_variant[0]); ++i) { WC_PKCS12* pkcs12Export = NULL; @@ -30302,15 +30220,15 @@ int test_mldsa_pkcs12(void) inKey[2] = (test_variant[i].keySz >> 8) & 0xff; /* MSB of the length */ inKey[3] = test_variant[i].keySz & 0xff; /* LSB of the length */ inKeySz += inKeyHeaderSz; - ExpectIntEQ(wc_dilithium_set_level(&mldsa_key, test_variant[i].wcId), + ExpectIntEQ(wc_MlDsaKey_SetParams(&mldsa_key, test_variant[i].wcId), 0); - ExpectIntEQ(wc_dilithium_make_key(&mldsa_key, &rng), 0); + ExpectIntEQ(wc_MlDsaKey_MakeKey(&mldsa_key, &rng), 0); size = inKeyMaxSz - inKeySz; - ExpectIntEQ(wc_dilithium_export_private(&mldsa_key, inKey + inKeySz, + ExpectIntEQ(wc_MlDsaKey_ExportPrivRaw(&mldsa_key, inKey + inKeySz, &size), 0); inKeySz += size; size = inKeyMaxSz - inKeySz; - ExpectIntEQ(wc_dilithium_export_public(&mldsa_key, inKey + inKeySz, + ExpectIntEQ(wc_MlDsaKey_ExportPubRaw(&mldsa_key, inKey + inKeySz, &size), 0); inKeySz += size; @@ -30371,7 +30289,7 @@ int test_mldsa_pkcs12(void) wc_PKCS12_free(pkcs12Export); } - wc_dilithium_free(&mldsa_key); + wc_MlDsaKey_Free(&mldsa_key); ret = wc_FreeRng(&rng); ExpectIntEQ(ret, 0); wolfSSL_CTX_free(ctx); @@ -30389,16 +30307,16 @@ int test_mldsa_pkcs12(void) int test_mldsa_x509_pubkey_sigtype(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && defined(OPENSSL_EXTRA) && \ +#if defined(WOLFSSL_HAVE_MLDSA) && defined(OPENSSL_EXTRA) && \ !defined(NO_CERTS) && !defined(NO_FILESYSTEM) static const struct { const char* pem_path; - int expected_sig_oid; /* CTC_ML_DSA_LEVEL* (stored as int, + int expected_sig_oid; /* CTC_ML_DSA_{44,65,87} (stored as int, * same bit pattern as word32 return) */ } cases[] = { - { "./certs/mldsa/mldsa44-cert.pem", (int)CTC_ML_DSA_LEVEL2 }, - { "./certs/mldsa/mldsa65-cert.pem", (int)CTC_ML_DSA_LEVEL3 }, - { "./certs/mldsa/mldsa87-cert.pem", (int)CTC_ML_DSA_LEVEL5 }, + { "./certs/mldsa/mldsa44-cert.pem", (int)CTC_ML_DSA_44 }, + { "./certs/mldsa/mldsa65-cert.pem", (int)CTC_ML_DSA_65 }, + { "./certs/mldsa/mldsa87-cert.pem", (int)CTC_ML_DSA_87 }, }; int i; int n = (int)(sizeof(cases) / sizeof(cases[0])); @@ -30431,7 +30349,7 @@ int test_mldsa_x509_pubkey_sigtype(void) wolfSSL_X509_free(x509); } -#endif /* HAVE_DILITHIUM && OPENSSL_EXTRA && !NO_CERTS && !NO_FILESYSTEM */ +#endif /* WOLFSSL_HAVE_MLDSA && OPENSSL_EXTRA && !NO_CERTS && !NO_FILESYSTEM */ return EXPECT_RESULT(); } @@ -30453,7 +30371,7 @@ int test_mldsa_x509_pubkey_sigtype(void) * non-GNU compilers fall back to plain static WC_INLINE. * =========================================================================== */ -#if defined(HAVE_DILITHIUM) +#if defined(WOLFSSL_HAVE_MLDSA) PRAGMA_CLANG_DIAG_PUSH PRAGMA_CLANG("clang diagnostic ignored \"-Wunreachable-code\"") @@ -30586,137 +30504,7 @@ WOLFSSL_MLDSA_API_CHECK_INLINE void wc_mldsa_canonical_api_check(void) } } -/* Compile-time validation of the dilithium.h legacy alias shim. */ -#if !defined(WOLFSSL_NO_DILITHIUM_LEGACY_NAMES) - -WOLFSSL_MLDSA_API_CHECK_INLINE void wc_mldsa_legacy_alias_check(void) -{ - if (0) { - wc_MlDsaKey k; - dilithium_key *kp = (dilithium_key *)0; - const wc_dilithium_params *pp = (const wc_dilithium_params *)0; - const byte buf[1] = { 0 }; - word32 sz = 0; - WC_RNG *rng = NULL; - int res = 0; - byte level = 0; - - (void)kp; - (void)pp; - - /* Type aliases. */ - (void)sizeof(dilithium_key); - (void)sizeof(wc_dilithium_params); - - /* No-arg-reorder lifecycle / parameters. */ - (void)wc_dilithium_init(&k); - (void)wc_dilithium_init_ex(&k, NULL, INVALID_DEVID); - #ifdef WOLF_PRIVATE_KEY_ID - (void)wc_dilithium_init_id(&k, NULL, 0, NULL, INVALID_DEVID); - (void)wc_dilithium_init_label(&k, NULL, NULL, INVALID_DEVID); - #endif - #ifndef WC_NO_CONSTRUCTORS - (void)wc_dilithium_new(NULL, INVALID_DEVID); - (void)wc_dilithium_delete(&k, NULL); - #endif - wc_dilithium_free(&k); - (void)wc_dilithium_set_level(&k, level); - (void)wc_dilithium_get_level(&k, &level); - #ifdef WOLFSSL_MLDSA_PRIVATE_KEY - (void)wc_dilithium_size(&k); - #ifdef WOLFSSL_MLDSA_PUBLIC_KEY - (void)wc_dilithium_priv_size(&k); - #endif - #endif - #ifdef WOLFSSL_MLDSA_PUBLIC_KEY - (void)wc_dilithium_pub_size(&k); - #endif - #if !defined(WOLFSSL_MLDSA_NO_SIGN) || !defined(WOLFSSL_MLDSA_NO_VERIFY) - (void)wc_dilithium_sig_size(&k); - #endif - #ifdef WOLFSSL_MLDSA_CHECK_KEY - (void)wc_dilithium_check_key(&k); - #endif - - /* Make / import / export (arg-reorder). */ - #ifndef WOLFSSL_MLDSA_VERIFY_ONLY - (void)wc_dilithium_make_key(&k, rng); - (void)wc_dilithium_make_key_from_seed(&k, NULL); - #endif - #ifdef WOLFSSL_MLDSA_PUBLIC_KEY - (void)wc_dilithium_import_public(buf, sz, &k); - (void)wc_dilithium_export_public(&k, NULL, &sz); - #endif - #ifdef WOLFSSL_MLDSA_PRIVATE_KEY - (void)wc_dilithium_import_private(buf, sz, &k); - (void)wc_dilithium_import_private_only(buf, sz, &k); - (void)wc_dilithium_import_key(buf, sz, buf, sz, &k); - (void)wc_dilithium_export_private(&k, NULL, &sz); - (void)wc_dilithium_export_private_only(&k, NULL, &sz); - (void)wc_dilithium_export_key(&k, NULL, &sz, NULL, &sz); - #endif - - /* Sign / verify (arg-reorder). */ - #ifndef WOLFSSL_MLDSA_VERIFY_ONLY - #ifdef WOLFSSL_MLDSA_NO_CTX - (void)wc_dilithium_sign_msg(buf, sz, NULL, &sz, &k, rng); - (void)wc_dilithium_sign_msg_with_seed(buf, sz, NULL, &sz, &k, NULL); - #endif - (void)wc_dilithium_sign_ctx_msg(NULL, 0, buf, sz, NULL, &sz, &k, rng); - (void)wc_dilithium_sign_ctx_hash(NULL, 0, 0, buf, sz, NULL, &sz, &k, - rng); - (void)wc_dilithium_sign_ctx_msg_with_seed(NULL, 0, buf, sz, NULL, &sz, - &k, NULL); - (void)wc_dilithium_sign_ctx_hash_with_seed(NULL, 0, 0, buf, sz, NULL, - &sz, &k, NULL); - (void)wc_dilithium_sign_mu_with_seed(buf, sz, NULL, &sz, &k, NULL); - #endif - #ifdef WOLFSSL_MLDSA_NO_CTX - (void)wc_dilithium_verify_msg(buf, sz, buf, sz, &res, &k); - #endif - (void)wc_dilithium_verify_ctx_msg(buf, sz, NULL, 0, buf, sz, &res, &k); - (void)wc_dilithium_verify_ctx_hash(buf, sz, NULL, 0, 0, buf, sz, &res, - &k); - (void)wc_dilithium_verify_mu(buf, sz, buf, sz, &res, &k); - - /* DER decode / encode (arg-reorder). */ - #ifndef WOLFSSL_MLDSA_NO_ASN1 - #ifdef WOLFSSL_MLDSA_PRIVATE_KEY - (void)wc_Dilithium_PrivateKeyDecode(buf, &sz, &k, sz); - (void)wc_Dilithium_PrivateKeyToDer(&k, NULL, sz); - (void)wc_Dilithium_KeyToDer(&k, NULL, sz); - #endif - #ifdef WOLFSSL_MLDSA_PUBLIC_KEY - (void)wc_Dilithium_PublicKeyDecode(buf, &sz, &k, sz); - #endif - #if defined(WOLFSSL_MLDSA_PUBLIC_KEY) && \ - defined(WC_ENABLE_ASYM_KEY_EXPORT) - (void)wc_Dilithium_PublicKeyToDer(&k, NULL, sz, 0); - #endif - #endif - - /* Internal-helper aliases (see dilithium.h). */ - #ifndef WOLFSSL_MLDSA_NO_ASN1 - (void)dilithium_get_oid_sum(&k, NULL); - #endif - #if !defined(WOLFSSL_MLDSA_NO_SIGN) || !defined(WOLFSSL_MLDSA_NO_VERIFY) - #ifndef WOLFSSL_NO_ML_DSA_44 - wc_dilithium_encode_w1_88(NULL, NULL); - #endif - #if !defined(WOLFSSL_NO_ML_DSA_65) || !defined(WOLFSSL_NO_ML_DSA_87) - wc_dilithium_encode_w1_32(NULL, NULL); - #endif - #endif - - (void)res; - (void)rng; - (void)sz; - (void)buf; - (void)level; - } -} -#endif /* !WOLFSSL_NO_DILITHIUM_LEGACY_NAMES */ PRAGMA_CLANG_DIAG_POP -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ diff --git a/tests/api/test_mldsa.h b/tests/api/test_mldsa.h index 76c1f534b5..82c844b54e 100644 --- a/tests/api/test_mldsa.h +++ b/tests/api/test_mldsa.h @@ -24,53 +24,64 @@ #include -int test_wc_dilithium(void); -int test_wc_dilithium_sign_pubonly_fails(void); -int test_wc_dilithium_make_key(void); -int test_wc_dilithium_sign(void); -int test_wc_dilithium_verify(void); -int test_wc_dilithium_sign_vfy(void); -int test_wc_dilithium_check_key(void); -int test_wc_dilithium_public_der_decode(void); -int test_wc_dilithium_der(void); -int test_wc_dilithium_oneasymkey_version(void); -int test_wc_dilithium_make_key_from_seed(void); -int test_wc_dilithium_sig_kats(void); -int test_wc_dilithium_sign_ctx_kats(void); -int test_wc_dilithium_verify_ctx_kats(void); -int test_wc_dilithium_verify_kats(void); -int test_wc_dilithium_sign_mu_kats(void); -int test_wc_dilithium_verify_mu_kats(void); -int test_wc_Dilithium_PrivateKeyDecode_OpenSSL_form(void); +/* Canonical ML-DSA tests defined in tests/api/test_mldsa.c. + * These exercise the wc_MlDsaKey / wc_MlDsaKey_* / WC_MLDSA_* API surface + * directly and run under all build configurations. */ +int test_mldsa(void); +int test_mldsa_sign_pubonly_fails(void); +int test_mldsa_make_key(void); +int test_mldsa_sign(void); +int test_mldsa_verify(void); +int test_mldsa_sign_vfy(void); +int test_mldsa_check_key(void); +int test_mldsa_public_der_decode(void); +int test_mldsa_der(void); +int test_mldsa_oneasymkey_version(void); +int test_mldsa_make_key_from_seed(void); +int test_mldsa_sig_kats(void); +int test_mldsa_sign_ctx_kats(void); +int test_mldsa_verify_ctx_kats(void); +int test_mldsa_verify_kats(void); +int test_mldsa_sign_mu_kats(void); +int test_mldsa_verify_mu_kats(void); +int test_mldsa_PrivateKeyDecode_OpenSSL_form(void); int test_mldsa_pkcs8_import_OpenSSL_form(void); int test_mldsa_pkcs8_export_import_wolfSSL_form(void); -int test_wc_dilithium_encode_w1_large_values(void); +int test_mldsa_encode_w1_large_values(void); int test_mldsa_pkcs12(void); int test_mldsa_x509_pubkey_sigtype(void); +/* Legacy-name shim coverage defined in tests/api/test_mldsa_legacy.c. + * Single function -- compile-time wc_static_assert checks for every alias + * + one runtime smoke test that drives each arg-reordering macro family. + * Becomes a TEST_SKIPPED stub when WOLFSSL_NO_DILITHIUM_LEGACY_NAMES is + * defined. */ +int test_mldsa_legacy_shim(void); + #define TEST_MLDSA_DECLS \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_sign_pubonly_fails), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_make_key), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_sign), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_verify), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_sign_vfy), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_check_key), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_public_der_decode), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_der), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_oneasymkey_version), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_make_key_from_seed), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_sig_kats), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_sign_ctx_kats), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_verify_ctx_kats), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_verify_kats), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_sign_mu_kats), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_verify_mu_kats), \ - TEST_DECL_GROUP("mldsa", test_wc_Dilithium_PrivateKeyDecode_OpenSSL_form), \ + TEST_DECL_GROUP("mldsa", test_mldsa), \ + TEST_DECL_GROUP("mldsa", test_mldsa_sign_pubonly_fails), \ + TEST_DECL_GROUP("mldsa", test_mldsa_make_key), \ + TEST_DECL_GROUP("mldsa", test_mldsa_sign), \ + TEST_DECL_GROUP("mldsa", test_mldsa_verify), \ + TEST_DECL_GROUP("mldsa", test_mldsa_sign_vfy), \ + TEST_DECL_GROUP("mldsa", test_mldsa_check_key), \ + TEST_DECL_GROUP("mldsa", test_mldsa_public_der_decode), \ + TEST_DECL_GROUP("mldsa", test_mldsa_der), \ + TEST_DECL_GROUP("mldsa", test_mldsa_oneasymkey_version), \ + TEST_DECL_GROUP("mldsa", test_mldsa_make_key_from_seed), \ + TEST_DECL_GROUP("mldsa", test_mldsa_sig_kats), \ + TEST_DECL_GROUP("mldsa", test_mldsa_sign_ctx_kats), \ + TEST_DECL_GROUP("mldsa", test_mldsa_verify_ctx_kats), \ + TEST_DECL_GROUP("mldsa", test_mldsa_verify_kats), \ + TEST_DECL_GROUP("mldsa", test_mldsa_sign_mu_kats), \ + TEST_DECL_GROUP("mldsa", test_mldsa_verify_mu_kats), \ + TEST_DECL_GROUP("mldsa", test_mldsa_PrivateKeyDecode_OpenSSL_form), \ TEST_DECL_GROUP("mldsa", test_mldsa_pkcs8_import_OpenSSL_form), \ TEST_DECL_GROUP("mldsa", test_mldsa_pkcs8_export_import_wolfSSL_form), \ - TEST_DECL_GROUP("mldsa", test_wc_dilithium_encode_w1_large_values), \ - TEST_DECL_GROUP("mldsa", test_mldsa_pkcs12), \ - TEST_DECL_GROUP("mldsa", test_mldsa_x509_pubkey_sigtype) + TEST_DECL_GROUP("mldsa", test_mldsa_encode_w1_large_values), \ + TEST_DECL_GROUP("mldsa", test_mldsa_pkcs12), \ + TEST_DECL_GROUP("mldsa", test_mldsa_x509_pubkey_sigtype), \ + TEST_DECL_GROUP("mldsa", test_mldsa_legacy_shim) #endif /* WOLFCRYPT_TEST_MLDSA_H */ diff --git a/tests/api/test_mldsa_legacy.c b/tests/api/test_mldsa_legacy.c new file mode 100644 index 0000000000..d02f486e96 --- /dev/null +++ b/tests/api/test_mldsa_legacy.c @@ -0,0 +1,512 @@ +/* test_mldsa_legacy.c + * + * Copyright (C) 2006-2026 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + +/* Coverage for the temporary Dilithium -> ML-DSA legacy-name shim + * (). The shim is purely a set of + * #define aliases and typedef redirects; correctness reduces to: + * + * 1. every legacy name resolves to the canonical symbol / value, and + * 2. the arg-reordering wrappers dispatch to the canonical function + * with the arguments in the right slots. + * + * This file exercises both axes: + * + * - Compile-time: wc_static_assert checks every per-level size-constant + * spelling and every public-enum alias against the canonical value; + * typed function-pointer assignments (no casts) verify every + * symbol-form alias has the canonical signature; a never-called + * `if (0)` block invokes every arg-reordering macro with correctly + * typed dummy arguments so the compiler type-checks the expanded + * canonical call. + * + * - Runtime: a single make-key / sign / verify / export / import / + * DER round-trip drives the arg-reordering macros with valid inputs, + * so a same-type arg swap (which the compile-time invocation can't + * catch) shows up as a verification or import failure. + * + * Functional coverage of the canonical ML-DSA API itself lives in + * tests/api/test_mldsa.c (~24 test_mldsa_* functions), + * wolfcrypt/test/test.c::mldsa_test, and the TLS / X.509 paths in + * tests/api.c that exercise ML-DSA end-to-end; this file is solely a + * regression net for the shim. When WOLFSSL_NO_DILITHIUM_LEGACY_NAMES + * is defined every test below becomes a TEST_SKIPPED stub. + * + * Note on verify-only builds: the runtime smoke test below requires the + * sign side too (to produce a signature against a freshly-made key). + * In a verify-only build the compile-time invocation block still drives + * every verify-side shim macro through its arg-reordering expansion, so + * signature / arg-count regressions are caught at compile time even + * without a KAT-driven runtime verify. A same-type arg swap on the + * verify side specifically (e.g. swapping the two `const byte*` / + * `word32` pairs in `wc_dilithium_verify_ctx_msg`) would not be caught + * in a verify-only build by this file alone; the canonical KAT-driven + * tests in test_mldsa.c::test_mldsa_verify_*_kats cover that case in + * builds that include the canonical headers (which all in-tree builds + * do). */ + +#include + +#include +#ifdef WOLFSSL_HAVE_MLDSA + #include + #include +#endif +#include +#include +#include + +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_NO_DILITHIUM_LEGACY_NAMES) + +/* === Compile-time checks =============================================== */ + +/* Type aliases collapse to the canonical struct. A sizeof-equality check is + * a sufficient and portable proxy for "same type": both legacy spellings + * are typedefs of `struct wc_MlDsaKey`, so any divergence in the typedef + * chain would change sizeof and trip the assert at compile time. */ +wc_static_assert(sizeof(dilithium_key) == sizeof(wc_MlDsaKey)); +wc_static_assert(sizeof(MlDsaKey) == sizeof(wc_MlDsaKey)); +wc_static_assert(sizeof(wc_dilithium_params) == sizeof(wc_MlDsaParams)); + +/* Per-parameter-set size constants. Every spelling family (LEVEL{2,3,5}_*, + * DILITHIUM_LEVEL{2,3,5}_*, DILITHIUM_ML_DSA_{44,65,87}_*) lives in its own + * `#define` line in , so each is checked separately. */ +#define MLDSA_LEGACY_SIZE_ASSERT(LEGACY, CANONICAL) \ + wc_static_assert(LEGACY == CANONICAL) + +/* LEVEL2 = ML-DSA-44 */ +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL2_KEY_SIZE, WC_MLDSA_44_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL2_PRV_KEY_SIZE, WC_MLDSA_44_PRV_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL2_PUB_KEY_SIZE, WC_MLDSA_44_PUB_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL2_SIG_SIZE, WC_MLDSA_44_SIG_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL2_PRV_KEY_DER_SIZE, WC_MLDSA_44_PRV_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL2_PUB_KEY_DER_SIZE, WC_MLDSA_44_PUB_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL2_BOTH_KEY_DER_SIZE, WC_MLDSA_44_BOTH_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL2_BOTH_KEY_PEM_SIZE, WC_MLDSA_44_BOTH_KEY_PEM_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL2_KEY_SIZE, WC_MLDSA_44_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL2_PRV_KEY_SIZE, WC_MLDSA_44_PRV_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL2_PUB_KEY_SIZE, WC_MLDSA_44_PUB_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL2_SIG_SIZE, WC_MLDSA_44_SIG_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL2_PRV_KEY_DER_SIZE,WC_MLDSA_44_PRV_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL2_PUB_KEY_DER_SIZE,WC_MLDSA_44_PUB_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL2_BOTH_KEY_DER_SIZE,WC_MLDSA_44_BOTH_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL2_BOTH_KEY_PEM_SIZE,WC_MLDSA_44_BOTH_KEY_PEM_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_ML_DSA_44_KEY_SIZE, WC_MLDSA_44_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_ML_DSA_44_PRV_KEY_SIZE, WC_MLDSA_44_PRV_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_ML_DSA_44_PUB_KEY_SIZE, WC_MLDSA_44_PUB_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_ML_DSA_44_SIG_SIZE, WC_MLDSA_44_SIG_SIZE); + +/* LEVEL3 = ML-DSA-65 */ +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL3_KEY_SIZE, WC_MLDSA_65_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL3_PRV_KEY_SIZE, WC_MLDSA_65_PRV_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL3_PUB_KEY_SIZE, WC_MLDSA_65_PUB_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL3_SIG_SIZE, WC_MLDSA_65_SIG_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL3_PRV_KEY_DER_SIZE, WC_MLDSA_65_PRV_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL3_PUB_KEY_DER_SIZE, WC_MLDSA_65_PUB_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL3_BOTH_KEY_DER_SIZE, WC_MLDSA_65_BOTH_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL3_BOTH_KEY_PEM_SIZE, WC_MLDSA_65_BOTH_KEY_PEM_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL3_KEY_SIZE, WC_MLDSA_65_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL3_PRV_KEY_SIZE, WC_MLDSA_65_PRV_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL3_PUB_KEY_SIZE, WC_MLDSA_65_PUB_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL3_SIG_SIZE, WC_MLDSA_65_SIG_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL3_PRV_KEY_DER_SIZE,WC_MLDSA_65_PRV_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL3_PUB_KEY_DER_SIZE,WC_MLDSA_65_PUB_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL3_BOTH_KEY_DER_SIZE,WC_MLDSA_65_BOTH_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL3_BOTH_KEY_PEM_SIZE,WC_MLDSA_65_BOTH_KEY_PEM_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_ML_DSA_65_KEY_SIZE, WC_MLDSA_65_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_ML_DSA_65_PRV_KEY_SIZE, WC_MLDSA_65_PRV_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_ML_DSA_65_PUB_KEY_SIZE, WC_MLDSA_65_PUB_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_ML_DSA_65_SIG_SIZE, WC_MLDSA_65_SIG_SIZE); + +/* LEVEL5 = ML-DSA-87 */ +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL5_KEY_SIZE, WC_MLDSA_87_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL5_PRV_KEY_SIZE, WC_MLDSA_87_PRV_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL5_PUB_KEY_SIZE, WC_MLDSA_87_PUB_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL5_SIG_SIZE, WC_MLDSA_87_SIG_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL5_PRV_KEY_DER_SIZE, WC_MLDSA_87_PRV_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL5_PUB_KEY_DER_SIZE, WC_MLDSA_87_PUB_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL5_BOTH_KEY_DER_SIZE, WC_MLDSA_87_BOTH_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(ML_DSA_LEVEL5_BOTH_KEY_PEM_SIZE, WC_MLDSA_87_BOTH_KEY_PEM_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL5_KEY_SIZE, WC_MLDSA_87_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL5_PRV_KEY_SIZE, WC_MLDSA_87_PRV_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL5_PUB_KEY_SIZE, WC_MLDSA_87_PUB_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL5_SIG_SIZE, WC_MLDSA_87_SIG_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL5_PRV_KEY_DER_SIZE,WC_MLDSA_87_PRV_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL5_PUB_KEY_DER_SIZE,WC_MLDSA_87_PUB_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL5_BOTH_KEY_DER_SIZE,WC_MLDSA_87_BOTH_KEY_DER_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_LEVEL5_BOTH_KEY_PEM_SIZE,WC_MLDSA_87_BOTH_KEY_PEM_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_ML_DSA_87_KEY_SIZE, WC_MLDSA_87_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_ML_DSA_87_PRV_KEY_SIZE, WC_MLDSA_87_PRV_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_ML_DSA_87_PUB_KEY_SIZE, WC_MLDSA_87_PUB_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_ML_DSA_87_SIG_SIZE, WC_MLDSA_87_SIG_SIZE); + +/* Maxima (used as stack/heap sizing on the call sites). */ +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_MAX_KEY_SIZE, MLDSA_MAX_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_MAX_PRV_KEY_SIZE, MLDSA_MAX_PRV_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_MAX_PUB_KEY_SIZE, MLDSA_MAX_PUB_KEY_SIZE); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_MAX_SIG_SIZE, MLDSA_MAX_SIG_SIZE); + +/* FIPS 204 algorithm-parameter constants -- spot-check the families that + * exist as both DILITHIUM_* and MLDSA_* spellings. */ +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_Q, MLDSA_Q); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_N, MLDSA_N); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_SEED_SZ, MLDSA_SEED_SZ); +MLDSA_LEGACY_SIZE_ASSERT(DILITHIUM_TR_SZ, MLDSA_TR_SZ); + +#undef MLDSA_LEGACY_SIZE_ASSERT + +/* Public-enum aliases (asn_public.h / asn.h / oid_sum.h). These are + * #define aliases for FIPS 204 enumerators that were renamed in this + * PR; the legacy LEVEL{2,3,5} spellings live behind the same + * WOLFSSL_NO_DILITHIUM_LEGACY_NAMES gate as the dilithium.h shim. Casts + * are deliberately omitted: enum constants are integer constant + * expressions in C, and a hidden enum-width divergence is itself a + * regression worth surfacing. */ +wc_static_assert(ML_DSA_LEVEL2_TYPE == ML_DSA_44_TYPE); +wc_static_assert(ML_DSA_LEVEL3_TYPE == ML_DSA_65_TYPE); +wc_static_assert(ML_DSA_LEVEL5_TYPE == ML_DSA_87_TYPE); +#ifdef WOLFSSL_CERT_GEN +wc_static_assert(ML_DSA_LEVEL2_KEY == ML_DSA_44_KEY); +wc_static_assert(ML_DSA_LEVEL3_KEY == ML_DSA_65_KEY); +wc_static_assert(ML_DSA_LEVEL5_KEY == ML_DSA_87_KEY); +#endif +wc_static_assert(ML_DSA_LEVEL2k == ML_DSA_44k); +wc_static_assert(ML_DSA_LEVEL3k == ML_DSA_65k); +wc_static_assert(ML_DSA_LEVEL5k == ML_DSA_87k); +wc_static_assert(CTC_ML_DSA_LEVEL2 == CTC_ML_DSA_44); +wc_static_assert(CTC_ML_DSA_LEVEL3 == CTC_ML_DSA_65); +wc_static_assert(CTC_ML_DSA_LEVEL5 == CTC_ML_DSA_87); + +/* Error-code rename: the symbol stays at the same numeric value, and the + * legacy spelling is a #define for the canonical enumerator. */ +wc_static_assert(WC_NO_ERR_TRACE(DILITHIUM_KEY_SIZE_E) == + WC_NO_ERR_TRACE(MLDSA_KEY_SIZE_E)); + +/* Function-symbol aliases. Each entry below is a #define legacy canonical + * (a pure symbol redirect, no arg reordering). Assigning to a typed + * function pointer **without a cast** is the actual check: the compiler + * fails the build if the alias's signature drifts from the typedef. The + * casts are deliberately absent -- adding them would silently coerce + * signature mismatches and defeat the purpose. */ +static void mldsa_legacy_shim_symbol_aliases_compile_check(void) +{ + typedef int (*init_fn)(wc_MlDsaKey*, void*, int); + typedef void (*free_fn)(wc_MlDsaKey*); + typedef int (*set_level_fn)(wc_MlDsaKey*, byte); + typedef int (*get_level_fn)(wc_MlDsaKey*, byte*); + typedef int (*size_fn)(wc_MlDsaKey*); + typedef int (*check_fn)(wc_MlDsaKey*); + typedef int (*export_fn)(wc_MlDsaKey*, byte*, word32*); + + init_fn f_init_ex = &wc_dilithium_init_ex; + free_fn f_free = &wc_dilithium_free; + set_level_fn f_set_level = &wc_dilithium_set_level; + get_level_fn f_get_level = &wc_dilithium_get_level; + size_fn f_sig_size = &wc_dilithium_sig_size; + + (void)f_init_ex; (void)f_free; (void)f_set_level; (void)f_get_level; + (void)f_sig_size; + +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY + { + size_fn f_size = &wc_dilithium_size; + export_fn f_export_priv = &wc_dilithium_export_private; + (void)f_size; (void)f_export_priv; + #ifdef WOLFSSL_MLDSA_PUBLIC_KEY + { + size_fn f_priv_size = &wc_dilithium_priv_size; + (void)f_priv_size; + } + #endif + } +#endif +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + { + size_fn f_pub_size = &wc_dilithium_pub_size; + export_fn f_export_pub = &wc_dilithium_export_public; + (void)f_pub_size; (void)f_export_pub; + } +#endif + +#ifdef WOLFSSL_MLDSA_CHECK_KEY + { + check_fn f_check = &wc_dilithium_check_key; + (void)f_check; + } +#else + (void)((check_fn)NULL); +#endif + +#ifdef WOLF_PRIVATE_KEY_ID + { + typedef int (*init_id_fn)(wc_MlDsaKey*, const unsigned char*, int, + void*, int); + typedef int (*init_label_fn)(wc_MlDsaKey*, const char*, void*, int); + init_id_fn f_init_id = &wc_dilithium_init_id; + init_label_fn f_init_label = &wc_dilithium_init_label; + (void)f_init_id; (void)f_init_label; + } +#endif + +#if !defined(WOLFSSL_MLDSA_NO_ASN1) + { + #ifdef WC_ENABLE_ASYM_KEY_EXPORT + { + typedef int (*to_der_fn)(wc_MlDsaKey*, byte*, word32, int); + to_der_fn f_pub_to_der = &wc_Dilithium_PublicKeyToDer; + (void)f_pub_to_der; + } + #endif + #ifdef WOLFSSL_MLDSA_PRIVATE_KEY + { + typedef int (*to_der_priv_fn)(wc_MlDsaKey*, byte*, word32); + to_der_priv_fn f_priv_to_der = &wc_Dilithium_PrivateKeyToDer; + to_der_priv_fn f_key_to_der = &wc_Dilithium_KeyToDer; + (void)f_priv_to_der; (void)f_key_to_der; + } + #endif + } +#endif +} + +/* Compile-time invocation of every arg-reordering shim macro. The macros + * are function-like #defines, so they can only be checked by expansion at + * a call site. The block below is guarded by `if (0)` so it never runs at + * runtime -- the compiler still parses and type-checks every macro + * expansion, so a signature regression or arg-count change in the shim + * trips a build error here even in configurations (e.g. verify-only) + * where the happy-path runtime test below is skipped. + * + * Limitation: a same-type arg swap inside a shim macro (e.g. swapping the + * two `const byte*` operands in `wc_dilithium_verify_msg`) compiles + * cleanly here and is caught only by the runtime smoke test, which + * requires sign+verify. */ +static void mldsa_legacy_shim_macro_invocations_compile_check(void) +{ + wc_MlDsaKey* key = NULL; + const byte* inp = NULL; + byte* outp = NULL; + word32 inLen = 0; + word32 outLen = 0; + word32 idx = 0; + int res = 0; + WC_RNG* rng = NULL; + const byte* seed = NULL; + + /* The bodies are dead code (`if (0)`), but the macro expansions are + * still parsed and type-checked. Return values are discarded with a + * cast to `(void)`. */ + if (0) { +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + (void)wc_dilithium_import_public(inp, inLen, key); +#endif +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY + (void)wc_dilithium_import_private(inp, inLen, key); + (void)wc_dilithium_import_private_only(inp, inLen, key); + (void)wc_dilithium_import_key(inp, inLen, inp, inLen, key); +#endif +#ifndef WOLFSSL_MLDSA_VERIFY_ONLY + #ifdef WOLFSSL_MLDSA_NO_CTX + (void)wc_dilithium_sign_msg(inp, inLen, outp, &outLen, key, rng); + (void)wc_dilithium_sign_msg_with_seed(inp, inLen, outp, &outLen, + key, seed); + #endif + (void)wc_dilithium_sign_ctx_msg(inp, (byte)0, inp, inLen, + outp, &outLen, key, rng); + (void)wc_dilithium_sign_ctx_hash(inp, (byte)0, 0, inp, inLen, + outp, &outLen, key, rng); + (void)wc_dilithium_sign_ctx_msg_with_seed(inp, (byte)0, inp, inLen, + outp, &outLen, key, seed); + (void)wc_dilithium_sign_ctx_hash_with_seed(inp, (byte)0, 0, inp, + inLen, outp, &outLen, key, seed); + (void)wc_dilithium_sign_mu_with_seed(inp, inLen, outp, &outLen, + key, seed); +#endif +#ifdef WOLFSSL_MLDSA_NO_CTX + (void)wc_dilithium_verify_msg(inp, inLen, inp, inLen, &res, key); +#endif + (void)wc_dilithium_verify_ctx_msg(inp, inLen, inp, (byte)0, inp, + inLen, &res, key); + (void)wc_dilithium_verify_ctx_hash(inp, inLen, inp, (byte)0, 0, inp, + inLen, &res, key); + (void)wc_dilithium_verify_mu(inp, inLen, inp, inLen, &res, key); +#if !defined(WOLFSSL_MLDSA_NO_ASN1) + #ifdef WOLFSSL_MLDSA_PRIVATE_KEY + (void)wc_Dilithium_PrivateKeyDecode(inp, &idx, key, inLen); + #endif + #ifdef WOLFSSL_MLDSA_PUBLIC_KEY + (void)wc_Dilithium_PublicKeyDecode(inp, &idx, key, inLen); + #endif +#endif + /* 1-arg init shim. */ + (void)wc_dilithium_init(key); + } + (void)key; (void)inp; (void)outp; (void)inLen; (void)outLen; + (void)idx; (void)res; (void)rng; (void)seed; +} + +/* === Runtime checks ==================================================== */ + +/* Smoke test exercising the arg-reordering macros that are reachable + * end-to-end via a make-key / sign / verify / export / import / decode + * happy-path. A same-type arg swap inside any of these macros shows up as + * a verification or import failure here. + * + * Verify-only / sign-only / no-ASN1 builds skip the corresponding + * sub-blocks; the compile-time invocation check above still type-checks + * every shim macro in those configurations. */ +int test_mldsa_legacy_shim(void) +{ + EXPECT_DECLS; + + /* Reference the compile-only checks so the compiler doesn't drop them + * (and so -Wunused-function stays quiet under strict warning levels). + * These are no-ops at runtime; the work is in the parse/type-check + * the compiler did on the file. */ + (void)&mldsa_legacy_shim_symbol_aliases_compile_check; + (void)&mldsa_legacy_shim_macro_invocations_compile_check; + +#if !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && !defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) && !defined(WOLFSSL_NO_ML_DSA_44) && \ + defined(WOLFSSL_MLDSA_PUBLIC_KEY) && defined(WOLFSSL_MLDSA_PRIVATE_KEY) && \ + !defined(WC_NO_RNG) + { + dilithium_key key; /* legacy typedef */ + WC_RNG rng; + byte level = 0; + byte pubBuf[WC_MLDSA_44_PUB_KEY_SIZE]; + byte privBuf[WC_MLDSA_44_KEY_SIZE]; + word32 pubLen = (word32)sizeof(pubBuf); + word32 privLen = (word32)sizeof(privBuf); + static const byte msg[] = "wolfSSL ML-DSA legacy shim smoke test"; + + XMEMSET(&key, 0, sizeof(key)); + XMEMSET(&rng, 0, sizeof(rng)); + + ExpectIntEQ(wc_InitRng(&rng), 0); + + /* 1-arg shim macro -> wc_MlDsaKey_Init(key, NULL, INVALID_DEVID). */ + ExpectIntEQ(wc_dilithium_init(&key), 0); + ExpectIntEQ(wc_dilithium_set_level(&key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_dilithium_get_level(&key, &level), 0); + ExpectIntEQ((int)level, WC_ML_DSA_44); + + /* Sizes -- pure symbol aliases. PrivSize is the export size of the + * "private key" form (priv + pub combined), not the raw secret-key + * buffer. */ + ExpectIntEQ(wc_dilithium_priv_size(&key), WC_MLDSA_44_PRV_KEY_SIZE); + ExpectIntEQ(wc_dilithium_pub_size(&key), WC_MLDSA_44_PUB_KEY_SIZE); + ExpectIntEQ(wc_dilithium_sig_size(&key), WC_MLDSA_44_SIG_SIZE); + + PRIVATE_KEY_UNLOCK(); + ExpectIntEQ(wc_dilithium_make_key(&key, &rng), 0); + PRIVATE_KEY_LOCK(); + + #ifdef WOLFSSL_MLDSA_CHECK_KEY + ExpectIntEQ(wc_dilithium_check_key(&key), 0); + #endif + + /* Sign + verify drive the arg-reordering sign/verify shim macros + * with a real signature; a same-type arg swap shows up as a + * verification failure. */ + #ifdef WOLFSSL_MLDSA_NO_CTX + { + byte sig[WC_MLDSA_44_SIG_SIZE]; + word32 sigLen = (word32)sizeof(sig); + int verifyRes = 0; + + ExpectIntEQ(wc_dilithium_sign_msg(msg, (word32)sizeof(msg), + sig, &sigLen, &key, &rng), 0); + ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, + msg, (word32)sizeof(msg), &verifyRes, &key), 0); + ExpectIntEQ(verifyRes, 1); + } + #else + { + byte sig[WC_MLDSA_44_SIG_SIZE]; + word32 sigLen = (word32)sizeof(sig); + int verifyRes = 0; + + ExpectIntEQ(wc_dilithium_sign_ctx_msg(NULL, 0, + msg, (word32)sizeof(msg), sig, &sigLen, &key, &rng), 0); + ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig, sigLen, NULL, 0, + msg, (word32)sizeof(msg), &verifyRes, &key), 0); + ExpectIntEQ(verifyRes, 1); + } + #endif + + /* Export raw key material and re-import via the legacy arg order. */ + ExpectIntEQ(wc_dilithium_export_public(&key, pubBuf, &pubLen), 0); + ExpectIntEQ((int)pubLen, WC_MLDSA_44_PUB_KEY_SIZE); + ExpectIntEQ(wc_dilithium_export_private(&key, privBuf, &privLen), 0); + ExpectIntEQ((int)privLen, WC_MLDSA_44_KEY_SIZE); + + { + dilithium_key imported; + XMEMSET(&imported, 0, sizeof(imported)); + ExpectIntEQ(wc_dilithium_init(&imported), 0); + ExpectIntEQ(wc_dilithium_set_level(&imported, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_dilithium_import_public(pubBuf, pubLen, &imported), + 0); + ExpectIntEQ(wc_dilithium_import_private(privBuf, privLen, + &imported), 0); + wc_dilithium_free(&imported); + } + + /* ASN.1 round-trip through the legacy Decode wrapper (arg order: + * input, inOutIdx, key, inSz). */ + #if !defined(WOLFSSL_MLDSA_NO_ASN1) + { + byte der[MLDSA_MAX_PRV_KEY_DER_SIZE]; + int derSz; + word32 idx = 0; + dilithium_key decoded; + + XMEMSET(&decoded, 0, sizeof(decoded)); + derSz = wc_Dilithium_PrivateKeyToDer(&key, der, + (word32)sizeof(der)); + ExpectIntGT(derSz, 0); + + ExpectIntEQ(wc_dilithium_init(&decoded), 0); + ExpectIntEQ(wc_dilithium_set_level(&decoded, WC_ML_DSA_44), 0); + PRIVATE_KEY_UNLOCK(); + ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der, &idx, &decoded, + (word32)derSz), 0); + PRIVATE_KEY_LOCK(); + wc_dilithium_free(&decoded); + } + #endif + + wc_dilithium_free(&key); + wc_FreeRng(&rng); + } +#endif /* sign+verify happy-path */ + + return EXPECT_RESULT(); +} + +#else /* !WOLFSSL_HAVE_MLDSA || WOLFSSL_NO_DILITHIUM_LEGACY_NAMES */ + +int test_mldsa_legacy_shim(void) +{ + return TEST_SKIPPED; +} + +#endif diff --git a/tests/suites.c b/tests/suites.c index 4e830fd75a..337c169e0f 100644 --- a/tests/suites.c +++ b/tests/suites.c @@ -1263,7 +1263,7 @@ int SuiteTest(int argc, char** argv) goto exit; } #endif -#if defined(WOLFSSL_HAVE_SLHDSA) && defined(HAVE_DILITHIUM) && \ +#if defined(WOLFSSL_HAVE_SLHDSA) && defined(WOLFSSL_HAVE_MLDSA) && \ defined(WOLFSSL_SLHDSA_PARAM_128S) && \ defined(WOLFSSL_TLS13) && !defined(WOLFSSL_NO_ML_DSA_44) /* SLH-DSA-SHAKE-128s root + ML-DSA-44 entity cert tests (TLS 1.3) */ @@ -1294,7 +1294,7 @@ int SuiteTest(int argc, char** argv) args.argc = 2; #endif #if defined(WOLFSSL_HAVE_SLHDSA) && defined(WOLFSSL_SLHDSA_SHA2) && \ - defined(WOLFSSL_SLHDSA_PARAM_SHA2_128S) && defined(HAVE_DILITHIUM) && \ + defined(WOLFSSL_SLHDSA_PARAM_SHA2_128S) && defined(WOLFSSL_HAVE_MLDSA) && \ defined(WOLFSSL_TLS13) && !defined(WOLFSSL_NO_ML_DSA_44) /* SLH-DSA-SHA2-128s root + ML-DSA-44 entity cert tests (TLS 1.3) */ XSTRLCPY(argv0[1], "tests/test-tls13-slhdsa-sha2.conf", diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index fb351a4571..c99fc71822 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -190,8 +190,8 @@ #if defined(HAVE_FALCON) #include #endif -#if defined(HAVE_DILITHIUM) - #include +#if defined(WOLFSSL_HAVE_MLDSA) + #include #endif #ifdef WOLF_CRYPTO_CB @@ -915,9 +915,6 @@ static WC_INLINE void bench_append_memory_info(char* buffer, size_t size, BENCH_ML_KEM_1024) #define BENCH_FALCON_LEVEL1_SIGN 0x00000001 #define BENCH_FALCON_LEVEL5_SIGN 0x00000002 -#define BENCH_DILITHIUM_LEVEL2_SIGN 0x04000000 -#define BENCH_DILITHIUM_LEVEL3_SIGN 0x08000000 -#define BENCH_DILITHIUM_LEVEL5_SIGN 0x10000000 #define BENCH_ML_DSA_44_SIGN 0x04000000 #define BENCH_ML_DSA_65_SIGN 0x08000000 #define BENCH_ML_DSA_87_SIGN 0x10000000 @@ -1358,7 +1355,7 @@ static const bench_pq_hash_sig_alg bench_pq_hash_sig_opt[] = { #if !defined(WOLFSSL_BENCHMARK_ALL) && !defined(MAIN_NO_ARGS) #if defined(WOLFSSL_HAVE_MLKEM) || defined(HAVE_FALCON) || \ - defined(HAVE_DILITHIUM) + defined(WOLFSSL_HAVE_MLDSA) /* The post-quantum-specific mapping of command line option to bit values and * OQS name. */ typedef struct bench_pq_alg { @@ -1386,10 +1383,12 @@ static const bench_pq_alg bench_pq_asym_opt[] = { { "-falcon_level1", BENCH_FALCON_LEVEL1_SIGN }, { "-falcon_level5", BENCH_FALCON_LEVEL5_SIGN }, #endif -#if defined(HAVE_DILITHIUM) - { "-dilithium_level2", BENCH_DILITHIUM_LEVEL2_SIGN }, - { "-dilithium_level3", BENCH_DILITHIUM_LEVEL3_SIGN }, - { "-dilithium_level5", BENCH_DILITHIUM_LEVEL5_SIGN }, +#if defined(WOLFSSL_HAVE_MLDSA) + /* Legacy CLI option names, kept as deprecated aliases for -ml-dsa-{44,65,87}. + * Will be removed in a future release. */ + { "-dilithium_level2", BENCH_ML_DSA_44_SIGN }, + { "-dilithium_level3", BENCH_ML_DSA_65_SIGN }, + { "-dilithium_level5", BENCH_ML_DSA_87_SIGN }, { "-ml-dsa", BENCH_ML_DSA_SIGN }, { "-ml-dsa-44", BENCH_ML_DSA_44_SIGN }, { "-ml-dsa-65", BENCH_ML_DSA_65_SIGN }, @@ -1517,7 +1516,7 @@ static const char* bench_result_words1[][5] = { defined(HAVE_CURVE25519) || defined(HAVE_CURVE25519_SHARED_SECRET) || \ defined(HAVE_ED25519) || defined(HAVE_CURVE448) || \ defined(HAVE_CURVE448_SHARED_SECRET) || defined(HAVE_ED448) || \ - defined(HAVE_DILITHIUM)) && !defined(WC_NO_RNG)) || \ + defined(WOLFSSL_HAVE_MLDSA)) && !defined(WC_NO_RNG)) || \ defined(WOLFSSL_HAVE_MLKEM) static const char* bench_desc_words[][15] = { @@ -2061,7 +2060,7 @@ static const char* bench_result_words3[][5] = { defined(HAVE_CURVE448) || defined(HAVE_ED448) || \ defined(HAVE_ECC) || !defined(NO_DH) || \ !defined(NO_RSA) || defined(HAVE_SCRYPT) || \ - defined(WOLFSSL_HAVE_MLKEM) || defined(HAVE_DILITHIUM) || \ + defined(WOLFSSL_HAVE_MLKEM) || defined(WOLFSSL_HAVE_MLDSA) || \ defined(WOLFSSL_HAVE_LMS) #define BENCH_ASYM #endif @@ -3315,7 +3314,7 @@ static void bench_stats_ops_finish(const char* algo, int strength, #if ((defined(HAVE_ECC) || !defined(NO_RSA) || !defined(NO_DH) || \ defined(HAVE_CURVE25519) || defined(HAVE_ED25519) || \ defined(HAVE_CURVE448) || defined(HAVE_ED448) || \ - defined(HAVE_DILITHIUM) || defined(WOLFSSL_HAVE_LMS)) && \ + defined(WOLFSSL_HAVE_MLDSA) || defined(WOLFSSL_HAVE_LMS)) && \ !defined(WC_NO_RNG)) || defined(WOLFSSL_HAVE_MLKEM) static void bench_stats_asym_finish_ex(const char* algo, int strength, const char* desc, const char* desc_extra, int useDeviceID, int count, @@ -4717,18 +4716,18 @@ static void* benchmarks_do(void* args) if (bench_all || (bench_pq_asym_algs & BENCH_FALCON_LEVEL5_SIGN)) bench_falconKeySign(5); #endif -#if defined(HAVE_DILITHIUM) && !defined(WC_NO_RNG) +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WC_NO_RNG) #ifndef WOLFSSL_NO_ML_DSA_44 - if (bench_all || (bench_pq_asym_algs & BENCH_DILITHIUM_LEVEL2_SIGN)) - bench_dilithiumKeySign(2); + if (bench_all || (bench_pq_asym_algs & BENCH_ML_DSA_44_SIGN)) + bench_mldsaKeySign(2); #endif #ifndef WOLFSSL_NO_ML_DSA_65 - if (bench_all || (bench_pq_asym_algs & BENCH_DILITHIUM_LEVEL3_SIGN)) - bench_dilithiumKeySign(3); + if (bench_all || (bench_pq_asym_algs & BENCH_ML_DSA_65_SIGN)) + bench_mldsaKeySign(3); #endif #ifndef WOLFSSL_NO_ML_DSA_87 - if (bench_all || (bench_pq_asym_algs & BENCH_DILITHIUM_LEVEL5_SIGN)) - bench_dilithiumKeySign(5); + if (bench_all || (bench_pq_asym_algs & BENCH_ML_DSA_87_SIGN)) + bench_mldsaKeySign(5); #endif #endif @@ -15046,1093 +15045,1099 @@ void bench_falconKeySign(byte level) } #endif /* HAVE_FALCON */ -#if defined(HAVE_DILITHIUM) && !defined(WC_NO_RNG) +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WC_NO_RNG) -#if defined(WOLFSSL_DILITHIUM_NO_SIGN) && !defined(WOLFSSL_DILITHIUM_NO_VERIFY) +#if defined(WOLFSSL_MLDSA_NO_SIGN) && !defined(WOLFSSL_MLDSA_NO_VERIFY) #ifndef WOLFSSL_NO_ML_DSA_44 -static const unsigned char bench_dilithium_level2_sig[] = { - 0x5e, 0xc1, 0xce, 0x0e, 0x31, 0xea, 0x10, 0x52, 0xa3, 0x7a, - 0xfe, 0x4d, 0xac, 0x07, 0x89, 0x5a, 0x45, 0xbd, 0x5a, 0xe5, - 0x22, 0xed, 0x98, 0x4d, 0x2f, 0xc8, 0x27, 0x00, 0x99, 0x40, - 0x00, 0x79, 0xcd, 0x93, 0x27, 0xd0, 0x40, 0x33, 0x79, 0x4f, - 0xe5, 0x16, 0x89, 0x9f, 0xbd, 0xa6, 0x3f, 0xdd, 0x68, 0x74, - 0x73, 0xc3, 0x97, 0x54, 0x11, 0x1d, 0xc8, 0xb8, 0xc8, 0xfd, - 0x3a, 0xbe, 0xca, 0x17, 0x0f, 0x10, 0x6d, 0x89, 0x6d, 0xe0, - 0xb2, 0xff, 0x3b, 0xe5, 0xa1, 0x75, 0xea, 0x35, 0x16, 0xa3, - 0x0c, 0x6e, 0x4a, 0x7b, 0xdb, 0x28, 0xc6, 0x2a, 0x76, 0x0e, - 0x78, 0x78, 0xa0, 0x4f, 0x4e, 0xf8, 0x99, 0xff, 0xe7, 0x47, - 0x7e, 0xc4, 0x62, 0xa7, 0xb4, 0xb9, 0x2b, 0xc1, 0xc7, 0xd0, - 0x00, 0xb6, 0xaa, 0xa7, 0x37, 0xd5, 0x1e, 0x19, 0xc4, 0xc4, - 0x59, 0x2f, 0xa5, 0x09, 0xa3, 0xda, 0x5d, 0xd4, 0x48, 0x64, - 0x16, 0x0e, 0x92, 0xdf, 0x61, 0xb7, 0x25, 0x3b, 0x90, 0x5a, - 0x08, 0xb5, 0x88, 0xe8, 0x64, 0x80, 0x63, 0xee, 0xbf, 0x59, - 0x0f, 0x4a, 0x48, 0x1e, 0x77, 0xa9, 0x46, 0xc6, 0x9c, 0x0b, - 0x83, 0xad, 0xb5, 0xbf, 0xb5, 0x5b, 0x99, 0xf3, 0x55, 0xe8, - 0xe5, 0xe7, 0x5c, 0x12, 0xac, 0x06, 0x06, 0xe0, 0xc0, 0x32, - 0x5d, 0xb6, 0x9f, 0x2b, 0x8e, 0x19, 0x5c, 0x2a, 0x58, 0xbb, - 0x37, 0xf1, 0x68, 0x56, 0x8b, 0x74, 0x94, 0x58, 0x48, 0x28, - 0xee, 0xf7, 0x0a, 0x8f, 0xad, 0x43, 0x67, 0xe1, 0xa3, 0x8c, - 0x3b, 0x35, 0x48, 0xcc, 0x52, 0x14, 0x36, 0x99, 0x18, 0x71, - 0x1c, 0xb2, 0xfc, 0x82, 0xda, 0xac, 0xd5, 0x55, 0x0a, 0x77, - 0x44, 0x6a, 0x48, 0xed, 0xfc, 0x5a, 0x68, 0xa6, 0x4d, 0x65, - 0xe7, 0x30, 0xaa, 0x23, 0x66, 0x84, 0xdf, 0x83, 0xf1, 0x17, - 0x5c, 0x46, 0xfe, 0x63, 0xcb, 0xc3, 0x6e, 0x4e, 0x47, 0x8d, - 0x30, 0x48, 0x06, 0xda, 0x97, 0x6b, 0x04, 0x5d, 0x44, 0xf3, - 0xb7, 0x2a, 0x6d, 0x2b, 0xbb, 0xcd, 0x97, 0x4e, 0x26, 0x8e, - 0xc9, 0x03, 0x0b, 0x5d, 0x68, 0xed, 0x81, 0xf7, 0x19, 0x61, - 0x81, 0xe9, 0xac, 0x3a, 0x35, 0xcd, 0xe8, 0xfd, 0x99, 0xdb, - 0x89, 0x83, 0x7d, 0x23, 0x6a, 0xc1, 0xc1, 0x10, 0xe9, 0xd3, - 0xfa, 0x9e, 0x5a, 0xcd, 0x73, 0xa3, 0x0a, 0x37, 0xa3, 0x12, - 0xef, 0x72, 0xa2, 0x28, 0xd4, 0x3d, 0x67, 0x53, 0x24, 0x0d, - 0x61, 0x98, 0xbb, 0x07, 0xf3, 0xa7, 0x79, 0x22, 0x74, 0x57, - 0x99, 0xe8, 0x7a, 0xbf, 0x90, 0x84, 0xa2, 0x6b, 0x29, 0x34, - 0xac, 0xc9, 0xff, 0x67, 0x82, 0xd0, 0xd2, 0x7d, 0x69, 0xc0, - 0xf3, 0xd7, 0x4b, 0x5c, 0xf2, 0xa8, 0x53, 0x8b, 0x78, 0x57, - 0xfc, 0x74, 0xf5, 0x81, 0x6e, 0xc2, 0x5b, 0x32, 0x52, 0x9e, - 0x58, 0x84, 0xa1, 0x71, 0xd5, 0x8c, 0xf5, 0x16, 0x36, 0x4d, - 0x11, 0xd4, 0xb5, 0xc2, 0x05, 0xc4, 0x03, 0xce, 0x83, 0xea, - 0x0b, 0x6a, 0x2e, 0xf6, 0x28, 0x5e, 0xb2, 0x40, 0x8c, 0xa3, - 0x6a, 0xc7, 0xee, 0x04, 0x54, 0x93, 0x0f, 0x3b, 0xf9, 0x57, - 0x92, 0x00, 0xf1, 0xc7, 0x1b, 0x48, 0x63, 0xcb, 0xd3, 0xdd, - 0x40, 0x90, 0x46, 0xb0, 0x87, 0x2a, 0xb8, 0xec, 0xbc, 0x07, - 0x09, 0x83, 0x25, 0xb1, 0x88, 0x2c, 0xa0, 0x0a, 0x40, 0x4f, - 0xfd, 0xec, 0xfd, 0xbe, 0x18, 0xae, 0xdd, 0x83, 0x89, 0x83, - 0x2d, 0x10, 0xb4, 0x14, 0x30, 0xac, 0x6c, 0xd9, 0xc9, 0xaa, - 0xbc, 0xdb, 0x5e, 0x14, 0xab, 0x19, 0x64, 0xaa, 0xb1, 0x9c, - 0xc3, 0xf5, 0xdc, 0x2b, 0xcd, 0x26, 0x0b, 0x81, 0x1a, 0x0e, - 0x0a, 0xd6, 0x39, 0x79, 0x10, 0x06, 0xbf, 0xe0, 0xc1, 0x8b, - 0x20, 0x24, 0x90, 0x8b, 0x0f, 0xa4, 0x2d, 0x2d, 0x46, 0x2a, - 0xd4, 0xf3, 0xa9, 0x58, 0x4b, 0xd9, 0xa6, 0x6c, 0x75, 0x3d, - 0xbc, 0x36, 0x76, 0x7f, 0xef, 0x1b, 0xa1, 0x41, 0xba, 0xd0, - 0xfe, 0x16, 0x19, 0xc3, 0x92, 0xe3, 0x59, 0x07, 0x3f, 0x48, - 0x11, 0x70, 0xe0, 0x8a, 0xff, 0x97, 0xbc, 0x71, 0xd5, 0xb9, - 0x4a, 0x9b, 0x4c, 0xb8, 0x4b, 0x50, 0xd6, 0x43, 0xe8, 0x84, - 0x0a, 0x95, 0xd0, 0x20, 0x28, 0xd3, 0x20, 0x4a, 0x0e, 0x1b, - 0xe6, 0x5d, 0x2f, 0x0c, 0xdb, 0x76, 0xab, 0xa3, 0xc2, 0xad, - 0xd5, 0x86, 0xae, 0xb9, 0x26, 0xb2, 0x5d, 0x72, 0x27, 0xbb, - 0xec, 0x23, 0x9f, 0x42, 0x90, 0x58, 0xe1, 0xf8, 0xe9, 0x63, - 0xdf, 0x1a, 0x46, 0x53, 0x65, 0x05, 0xfb, 0x20, 0x21, 0xa6, - 0x64, 0xc8, 0x5c, 0x67, 0x6b, 0x41, 0x6c, 0x04, 0x34, 0xeb, - 0x05, 0x71, 0xeb, 0xbe, 0xed, 0x6d, 0xa2, 0x96, 0x67, 0x45, - 0xe7, 0x47, 0x22, 0x64, 0xaf, 0x82, 0xf8, 0x78, 0x0e, 0xe6, - 0xa1, 0x4a, 0x2d, 0x82, 0x1e, 0xd0, 0xc2, 0x79, 0x4e, 0x29, - 0x89, 0xd9, 0xf3, 0x3f, 0xb6, 0xc4, 0xee, 0x69, 0xb2, 0x8f, - 0x8b, 0xd9, 0x13, 0xd9, 0x6e, 0x3a, 0xc5, 0x9f, 0xdf, 0x25, - 0xb7, 0xc3, 0x16, 0xb8, 0xa2, 0x85, 0x17, 0xae, 0xe9, 0x95, - 0x5d, 0xb8, 0x1d, 0x21, 0xbb, 0xd9, 0x38, 0x11, 0x8f, 0x44, - 0xea, 0xe8, 0x4c, 0x91, 0x82, 0xf5, 0x45, 0xee, 0x8f, 0xf5, - 0x6a, 0x0d, 0x08, 0xe7, 0x6b, 0xb0, 0x91, 0xd5, 0x42, 0x17, - 0x8c, 0x37, 0x6a, 0x5a, 0x0a, 0x87, 0x53, 0x76, 0xc3, 0x59, - 0x35, 0x13, 0x1c, 0xf1, 0x72, 0x2c, 0x2b, 0xb2, 0x9e, 0xda, - 0x10, 0x2a, 0xce, 0x38, 0xb4, 0x67, 0x8c, 0x4b, 0x08, 0xa1, - 0xb6, 0xa3, 0x08, 0x9c, 0xeb, 0xd8, 0x93, 0x1b, 0x29, 0x5a, - 0xa7, 0x03, 0x17, 0x7e, 0xec, 0x58, 0x6b, 0x5b, 0xc5, 0x46, - 0x03, 0x33, 0x7f, 0x0e, 0x93, 0x9a, 0xdd, 0xb5, 0x89, 0xb1, - 0x16, 0x4c, 0xa7, 0xd8, 0x0e, 0x73, 0xd8, 0xc3, 0xd2, 0x36, - 0x85, 0x66, 0xcb, 0x5b, 0x64, 0xf2, 0xdc, 0xba, 0x39, 0xcc, - 0xa5, 0xe0, 0x9b, 0xaa, 0x2a, 0x95, 0x6d, 0xdc, 0x49, 0xde, - 0x3b, 0x61, 0xa2, 0x3b, 0x1f, 0xed, 0x32, 0xfa, 0x10, 0xe4, - 0x88, 0x59, 0xca, 0x5a, 0xe4, 0xf9, 0x5e, 0xe2, 0xca, 0x21, - 0x5a, 0xdc, 0x02, 0x73, 0x7a, 0xc8, 0x90, 0x7a, 0x8e, 0x91, - 0x19, 0x04, 0x53, 0x3c, 0x50, 0x15, 0x8a, 0x84, 0x93, 0x8f, - 0xac, 0x99, 0x82, 0xdd, 0xc6, 0xce, 0xfb, 0x18, 0x84, 0x29, - 0x2a, 0x8d, 0xa2, 0xc5, 0x7f, 0x87, 0xce, 0x4c, 0xf5, 0xdf, - 0x73, 0xd2, 0xba, 0xc2, 0x4f, 0xe3, 0x74, 0xa5, 0x8f, 0xc3, - 0xf4, 0x99, 0xd1, 0xe8, 0x4e, 0xb8, 0xe0, 0x2e, 0xef, 0xd6, - 0x87, 0x70, 0xcf, 0x45, 0x3b, 0xff, 0x03, 0xfd, 0x59, 0x7f, - 0x7c, 0xd0, 0x4e, 0x49, 0xf7, 0xd5, 0x08, 0xd9, 0x06, 0x53, - 0x90, 0x0a, 0x5a, 0x1b, 0x2e, 0xf5, 0xb0, 0x85, 0xb6, 0xb6, - 0x61, 0xa5, 0x71, 0x47, 0xbf, 0x4a, 0xf6, 0xae, 0x9a, 0x19, - 0x6c, 0xd8, 0x2d, 0x9b, 0xb4, 0x40, 0x9e, 0x15, 0x77, 0x2e, - 0x7e, 0xe9, 0xb4, 0x3d, 0x0f, 0x1b, 0xb5, 0x1c, 0xc2, 0x58, - 0x4e, 0x4b, 0xf6, 0x53, 0x9e, 0x6f, 0x09, 0x55, 0xa0, 0xb8, - 0x73, 0x11, 0x64, 0x70, 0x54, 0xb4, 0xcb, 0xb7, 0x27, 0xe5, - 0xdf, 0x58, 0x67, 0x5b, 0xc0, 0xd6, 0xf5, 0x64, 0xa6, 0x66, - 0x6d, 0xdf, 0xd8, 0xf8, 0xd6, 0x85, 0xba, 0xba, 0x30, 0xa7, - 0xca, 0x34, 0xf4, 0x9a, 0xba, 0x0a, 0xfb, 0x0e, 0xa0, 0x65, - 0x98, 0x78, 0xee, 0xaa, 0x14, 0x6a, 0x99, 0x77, 0x67, 0xad, - 0x01, 0x95, 0x5e, 0x50, 0x22, 0xe9, 0x74, 0x95, 0xa7, 0x13, - 0x3f, 0xdd, 0xa6, 0x69, 0x64, 0xf6, 0x50, 0x06, 0x6d, 0xba, - 0x90, 0x5a, 0x8c, 0x81, 0xa0, 0xda, 0x55, 0xe9, 0x97, 0x0e, - 0xd7, 0x10, 0x8e, 0x1f, 0x23, 0x65, 0xd9, 0x14, 0xd4, 0xde, - 0xa5, 0xf9, 0xec, 0xb6, 0xad, 0x65, 0xce, 0x0b, 0x1b, 0x0a, - 0x4c, 0x7d, 0xb0, 0x97, 0xa6, 0xfe, 0x67, 0xfb, 0x4f, 0x8f, - 0x00, 0x92, 0xb6, 0x0d, 0x20, 0x78, 0x65, 0x1d, 0x9a, 0x56, - 0x57, 0xc6, 0x15, 0x88, 0xba, 0x55, 0x02, 0x7a, 0x9a, 0xac, - 0x50, 0x4c, 0xc7, 0x9e, 0x66, 0x8b, 0xfc, 0xf3, 0x67, 0x48, - 0x07, 0xbf, 0x84, 0x94, 0x9b, 0x22, 0x2a, 0xae, 0x1b, 0x25, - 0xe9, 0x94, 0x06, 0xa7, 0xe8, 0x61, 0x52, 0x89, 0xdc, 0x93, - 0x6e, 0x89, 0xdc, 0x30, 0x6e, 0xd9, 0xee, 0xcb, 0x12, 0x38, - 0x58, 0x9d, 0x8b, 0xc5, 0x05, 0x2c, 0x50, 0x4e, 0xc8, 0xc2, - 0xe0, 0x65, 0xb6, 0x49, 0xc4, 0xf0, 0x1e, 0x5c, 0x8e, 0x3c, - 0xe9, 0x77, 0xd2, 0x9e, 0xa8, 0xd5, 0xf5, 0xd9, 0xc5, 0xad, - 0x5b, 0x74, 0x48, 0x08, 0x3a, 0x30, 0x84, 0x57, 0x71, 0x1e, - 0x69, 0x45, 0x09, 0xdd, 0xea, 0x62, 0xec, 0x7c, 0xa3, 0xf9, - 0x92, 0xee, 0x16, 0xdc, 0xe5, 0x9d, 0xcf, 0xb7, 0x08, 0x51, - 0x8a, 0x76, 0x3a, 0x23, 0x94, 0x50, 0x8e, 0x4d, 0x3a, 0xea, - 0xf3, 0xc1, 0x53, 0x2c, 0x65, 0x9c, 0x36, 0x8c, 0x10, 0xe3, - 0x9c, 0x01, 0xa4, 0xe6, 0x45, 0x77, 0xa6, 0x5d, 0x7e, 0x37, - 0x31, 0x95, 0x2f, 0xec, 0x61, 0x92, 0x69, 0x65, 0x53, 0x54, - 0x6d, 0xbe, 0x9e, 0x5a, 0x68, 0x12, 0xc4, 0xe7, 0xe4, 0x06, - 0x51, 0x5a, 0xc0, 0x63, 0xb9, 0x69, 0xb8, 0x3c, 0xd8, 0xae, - 0x8b, 0xff, 0x96, 0x4d, 0x55, 0xce, 0x25, 0x2b, 0x8b, 0x89, - 0xc9, 0x3a, 0x16, 0x48, 0x2a, 0x73, 0xb2, 0x70, 0x8b, 0x62, - 0xd5, 0xb1, 0xa0, 0x30, 0xe5, 0x46, 0xab, 0x8b, 0xc3, 0xeb, - 0x37, 0x2f, 0xbd, 0xb8, 0x4e, 0x6c, 0x30, 0xdc, 0x6c, 0x8a, - 0xf1, 0x89, 0x06, 0xce, 0x64, 0x0a, 0x3e, 0xb2, 0x16, 0x31, - 0xa1, 0xe4, 0x4b, 0x98, 0xe7, 0xf1, 0x99, 0x76, 0x00, 0x5f, - 0xd2, 0xd3, 0x30, 0xf0, 0xbf, 0xa7, 0x4a, 0xf6, 0x9e, 0xa5, - 0x75, 0x74, 0x78, 0xfe, 0xec, 0x72, 0x7c, 0x89, 0xe9, 0xf6, - 0x0d, 0x7e, 0x15, 0xd6, 0xd8, 0x79, 0x85, 0x3c, 0xcf, 0xb0, - 0x21, 0xc8, 0x9c, 0x54, 0x87, 0x63, 0xb3, 0x05, 0xbb, 0x8a, - 0x02, 0xe4, 0x79, 0xdc, 0xa1, 0xa2, 0xd3, 0x19, 0xd8, 0x86, - 0xff, 0x8a, 0x0e, 0x82, 0x89, 0xaf, 0xaa, 0x62, 0x2e, 0xd4, - 0xb2, 0xd0, 0x5d, 0x0d, 0x4f, 0x2a, 0xda, 0x0e, 0x9f, 0x8a, - 0x2b, 0x32, 0xe9, 0x09, 0xf5, 0x55, 0x51, 0xe7, 0xd5, 0x69, - 0x12, 0xdd, 0x33, 0x6b, 0x3d, 0xd7, 0xe9, 0xfd, 0xb2, 0xa7, - 0xf5, 0x97, 0x2a, 0x6d, 0x89, 0x30, 0x65, 0x2a, 0x0d, 0xf2, - 0x00, 0x81, 0xbe, 0xfb, 0xd9, 0xd7, 0x1b, 0xc2, 0x48, 0x7a, - 0x22, 0x30, 0xae, 0x35, 0xf6, 0x32, 0x41, 0x9d, 0xd9, 0x12, - 0xb3, 0xa7, 0x6d, 0xba, 0x74, 0x93, 0x2d, 0x0d, 0xb2, 0xb6, - 0xdc, 0xa9, 0x98, 0x5b, 0x3b, 0xaa, 0x2b, 0x47, 0x06, 0xc4, - 0x36, 0xfd, 0x04, 0x10, 0x94, 0x61, 0x61, 0x47, 0x1c, 0x02, - 0x54, 0x85, 0x4a, 0xcb, 0x75, 0x6b, 0x75, 0xf5, 0xb4, 0x61, - 0x26, 0xb3, 0x12, 0x43, 0x31, 0x55, 0xb5, 0xda, 0x4b, 0xb5, - 0x11, 0xb4, 0xb8, 0xfb, 0x0a, 0xd9, 0xa7, 0x0e, 0x9f, 0x2a, - 0x74, 0x01, 0xf6, 0x1a, 0x33, 0x10, 0x9e, 0x66, 0xff, 0x82, - 0xfa, 0xa9, 0xa4, 0xa0, 0x9b, 0x25, 0x2d, 0x16, 0xbf, 0x60, - 0x0d, 0x87, 0xea, 0x94, 0xad, 0xdd, 0xc4, 0xd0, 0xa8, 0xdd, - 0x2d, 0xc7, 0xc8, 0xac, 0x39, 0x9e, 0x87, 0x69, 0xc4, 0x3a, - 0xbc, 0x28, 0x7e, 0x36, 0x69, 0xfd, 0x20, 0x25, 0xac, 0xa3, - 0xa7, 0x37, 0x96, 0xe9, 0x8a, 0x65, 0xe4, 0xb0, 0x2a, 0x61, - 0x23, 0x28, 0x64, 0xff, 0x17, 0x6c, 0x36, 0x9e, 0x0a, 0xba, - 0xe4, 0x4b, 0xeb, 0x84, 0x24, 0x20, 0x57, 0x0f, 0x34, 0x05, - 0x95, 0x56, 0xc3, 0x2f, 0x2b, 0xf0, 0x36, 0xef, 0xca, 0x68, - 0xfe, 0x78, 0xf8, 0x98, 0x09, 0x4a, 0x25, 0xcc, 0x17, 0xbe, - 0x05, 0x00, 0xff, 0xf9, 0xa5, 0x5b, 0xe6, 0xaa, 0x5b, 0x56, - 0xb6, 0x89, 0x64, 0x9c, 0x16, 0x48, 0xe1, 0xcd, 0x67, 0x87, - 0xdd, 0xba, 0xbd, 0x02, 0x0d, 0xd8, 0xb4, 0xc9, 0x7c, 0x37, - 0x92, 0xd0, 0x39, 0x46, 0xd2, 0xc4, 0x78, 0x13, 0xf0, 0x76, - 0x45, 0x5f, 0xeb, 0x52, 0xd2, 0x3f, 0x61, 0x87, 0x34, 0x09, - 0xb7, 0x24, 0x4e, 0x93, 0xf3, 0xc5, 0x10, 0x19, 0x66, 0x66, - 0x3f, 0x15, 0xe3, 0x05, 0x55, 0x43, 0xb7, 0xf4, 0x62, 0x57, - 0xb4, 0xd9, 0xef, 0x46, 0x47, 0xb5, 0xfb, 0x79, 0xc9, 0x67, - 0xc5, 0xc3, 0x18, 0x91, 0x73, 0x75, 0xec, 0xd5, 0x68, 0x2b, - 0xf6, 0x42, 0xb4, 0xff, 0xfb, 0x27, 0x61, 0x77, 0x28, 0x10, - 0x6b, 0xce, 0x19, 0xad, 0x87, 0xc3, 0x85, 0xe3, 0x78, 0x00, - 0xdb, 0x21, 0xee, 0xd8, 0xfa, 0x9c, 0x81, 0x11, 0x97, 0xac, - 0xd0, 0x50, 0x89, 0x45, 0x23, 0xf6, 0x85, 0x7d, 0x60, 0xb2, - 0xad, 0x0c, 0x5d, 0xd8, 0x9e, 0xe4, 0xe1, 0x25, 0xb2, 0x13, - 0x1a, 0x54, 0x54, 0xfd, 0x7b, 0xab, 0x85, 0x20, 0xe8, 0xda, - 0x52, 0x0f, 0xac, 0x49, 0x70, 0xf1, 0x4c, 0x66, 0x74, 0x8c, - 0x87, 0x6e, 0xca, 0xc1, 0x0d, 0x92, 0xc0, 0xa8, 0x08, 0xfd, - 0x0f, 0x60, 0x55, 0xaf, 0x24, 0xcb, 0x04, 0xb7, 0xff, 0xa9, - 0xc5, 0x07, 0x26, 0xf6, 0xe2, 0x1e, 0x2f, 0xd1, 0x99, 0x6d, - 0xef, 0xc0, 0xdb, 0x5b, 0xf7, 0x06, 0x80, 0x92, 0x5f, 0x56, - 0x54, 0xdb, 0x2e, 0xba, 0x93, 0xb2, 0x94, 0xf2, 0xad, 0xbc, - 0x91, 0x6e, 0x4e, 0xce, 0x21, 0xc4, 0x8b, 0x18, 0xc4, 0xfc, - 0xab, 0xb4, 0x4f, 0xd7, 0xa2, 0xef, 0x55, 0x00, 0x6d, 0x34, - 0x17, 0x59, 0x8d, 0x79, 0x75, 0x02, 0xa3, 0x7a, 0x52, 0x57, - 0x5c, 0x26, 0xb9, 0xae, 0xd6, 0x19, 0x2e, 0x31, 0x02, 0x98, - 0x98, 0xe5, 0x3d, 0xc2, 0xa5, 0x56, 0xb6, 0x02, 0xae, 0x0d, - 0x3b, 0x35, 0x97, 0xd2, 0x43, 0x38, 0x8a, 0x65, 0xfa, 0x86, - 0x20, 0xb7, 0xb5, 0xb0, 0xda, 0x19, 0x01, 0x2f, 0x13, 0xb5, - 0x6d, 0xbd, 0xb2, 0x34, 0xa7, 0xff, 0xae, 0x7e, 0x8f, 0x98, - 0x1b, 0xc4, 0x27, 0xbd, 0xa9, 0x64, 0xdc, 0xab, 0x2a, 0xd2, - 0xb4, 0x27, 0xd0, 0x25, 0xdd, 0xff, 0xdc, 0x0a, 0x96, 0xd3, - 0x85, 0x3e, 0xc5, 0x11, 0x34, 0x60, 0xa2, 0x33, 0x92, 0x90, - 0xbb, 0x4c, 0x86, 0xdd, 0xd6, 0x1e, 0xcb, 0x0a, 0x17, 0xc6, - 0x87, 0x4e, 0x3e, 0x7a, 0x4b, 0xab, 0xef, 0x0a, 0x00, 0x3d, - 0x94, 0x34, 0x8b, 0x63, 0x36, 0xd9, 0xaf, 0x5d, 0x63, 0x40, - 0xbb, 0x32, 0x4b, 0x64, 0xf0, 0x31, 0x48, 0xdb, 0x44, 0x2b, - 0x48, 0x60, 0x6a, 0xea, 0xa4, 0x8c, 0xdd, 0xaf, 0x81, 0x3f, - 0x86, 0x81, 0x99, 0x7a, 0x98, 0xe1, 0xff, 0x21, 0x7a, 0x28, - 0xbc, 0x33, 0xe6, 0x4e, 0xb0, 0x85, 0x6b, 0xec, 0x11, 0x37, - 0x81, 0x7f, 0xf9, 0xdc, 0xbf, 0x1a, 0xa6, 0x6d, 0x4d, 0x0f, - 0x5b, 0x99, 0x73, 0xb8, 0xd2, 0x6e, 0x37, 0xf0, 0x71, 0xf1, - 0x1a, 0xc3, 0x5c, 0xea, 0x12, 0x5f, 0x2e, 0x85, 0x3f, 0xfd, - 0xd5, 0x87, 0x67, 0x9f, 0x67, 0x9f, 0xd7, 0xef, 0x9f, 0x81, - 0xa4, 0xbc, 0x63, 0x1d, 0x00, 0x81, 0xf6, 0x20, 0x77, 0xae, - 0x0b, 0x90, 0xe5, 0x9c, 0xa9, 0x44, 0xb5, 0xd7, 0xb1, 0x61, - 0x33, 0x4f, 0x75, 0xa9, 0xb7, 0xf4, 0xa4, 0x72, 0x9e, 0x72, - 0xec, 0x7b, 0xcd, 0x83, 0xb3, 0xd6, 0x22, 0x50, 0x50, 0x97, - 0x0f, 0x63, 0x0f, 0xe1, 0x15, 0xb3, 0x07, 0xb6, 0xa3, 0xfa, - 0x2f, 0xb5, 0xf3, 0x5b, 0x5d, 0x7f, 0x90, 0x20, 0xcd, 0x5f, - 0x40, 0x48, 0x87, 0x43, 0xfd, 0xa3, 0x69, 0xdc, 0xf8, 0x51, - 0x08, 0x67, 0xc2, 0x2d, 0xff, 0xfe, 0xbf, 0x85, 0x3e, 0x80, - 0xff, 0x91, 0x62, 0xc5, 0x83, 0xe0, 0x80, 0xeb, 0xce, 0xdc, - 0xff, 0xb1, 0xdb, 0x02, 0xb7, 0x01, 0x1e, 0xa6, 0xf0, 0x32, - 0xfb, 0x95, 0x6a, 0x47, 0x44, 0x84, 0x42, 0x6e, 0x3a, 0xb1, - 0xcf, 0xf9, 0x28, 0xb4, 0x3a, 0x8e, 0xa7, 0x8d, 0x48, 0x81, - 0x1c, 0x7e, 0xf5, 0x0b, 0x46, 0x7e, 0x92, 0x4e, 0xb9, 0xa8, - 0x36, 0xb8, 0x81, 0x6d, 0x8c, 0x70, 0x59, 0x33, 0x12, 0x61, - 0xbb, 0xe6, 0x10, 0x8a, 0xe4, 0xc1, 0x2c, 0x50, 0x12, 0xbf, - 0xd3, 0xc6, 0x3c, 0x53, 0x91, 0x50, 0x07, 0xc8, 0x85, 0x32, - 0x3c, 0xe1, 0x67, 0x99, 0x68, 0xc1, 0xf4, 0x74, 0x86, 0x35, - 0x8a, 0x6c, 0x75, 0x1d, 0x8f, 0x8a, 0x60, 0xe1, 0xc7, 0x59, - 0x4e, 0xb0, 0xe0, 0x45, 0x5a, 0x11, 0x05, 0x24, 0xa7, 0x8d, - 0x39, 0x93, 0x60, 0x4c, 0xc5, 0x9e, 0x8a, 0x70, 0xcc, 0x44, - 0x96, 0x92, 0xc8, 0xf7, 0x23, 0x14, 0xc7, 0xf4, 0x82, 0x9d, - 0x5b, 0x1c, 0x26, 0xd0, 0x3c, 0x76, 0x36, 0xe9, 0x98, 0x8a, - 0xbb, 0xe6, 0xa0, 0xad, 0xed, 0xf7, 0xd9, 0x06, 0x50, 0x67, - 0x79, 0x50, 0x4e, 0xd5, 0x80, 0x4e, 0x59, 0x72, 0x5d, 0x8b, - 0xcb, 0x86, 0x3b, 0x57, 0xc4, 0xb2, 0x3d, 0xbc, 0x35, 0x6d, - 0xb1, 0x50, 0xf5, 0x8c, 0xf2, 0x89, 0x72, 0x20, 0xd0, 0x47, - 0x68, 0x13, 0x42, 0x25, 0x1a, 0xb6, 0xc5, 0x07, 0xdf, 0x45, - 0x11, 0xa9, 0x05, 0x5d, 0xad, 0xf0, 0x49, 0x9e, 0x70, 0x78, - 0xed, 0xe7, 0xf9, 0x00, 0x1f, 0x62, 0x76, 0x47, 0xb5, 0x48, - 0x4f, 0x2c, 0x2e, 0xe3, 0x78, 0x6a, 0x44, 0x46, 0x1e, 0x6b, - 0x00, 0x74, 0x54, 0xb9, 0xd1, 0x4f, 0x6d, 0x45, 0xc1, 0xa6, - 0x45, 0x2e, 0x1a, 0xaf, 0x94, 0x3f, 0xd0, 0x72, 0x67, 0x0d, - 0x2e, 0xa9, 0x8d, 0x16, 0xc4, 0x05, 0x01, 0x07, 0x13, 0x1b, - 0x1c, 0x3d, 0x43, 0x71, 0x91, 0x95, 0x9a, 0xae, 0xaf, 0xc4, - 0xe5, 0xe6, 0xe9, 0xff, 0x02, 0x0c, 0x0f, 0x3e, 0x62, 0x67, - 0x68, 0x81, 0xc7, 0xd0, 0xd8, 0xdd, 0xe0, 0xf5, 0x0b, 0x25, - 0x35, 0x45, 0x4a, 0x4b, 0x63, 0x74, 0x79, 0x7e, 0x82, 0xa2, - 0xaf, 0xc6, 0xc7, 0xcc, 0xd2, 0xfa, 0x2a, 0x2d, 0x2f, 0x32, - 0x35, 0x38, 0x3f, 0x4c, 0x7f, 0x80, 0x81, 0x8b, 0x9b, 0x9c, - 0x9d, 0xa7, 0xa9, 0xcb, 0xe9, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x20, 0x32, 0x46, +/* ML-DSA-44 signature over the 512-byte bench message, + * produced from certs/mldsa/mldsa44_priv-only.der. */ +static const unsigned char bench_mldsa_44_sig[] = { + 0x2b, 0xfe, 0x1f, 0xbe, 0x5c, 0xe6, 0xb4, 0xe0, 0xb8, 0x1c, + 0xad, 0xe4, 0x5e, 0x33, 0x93, 0x94, 0x28, 0xc0, 0x27, 0x63, + 0x42, 0xe5, 0x23, 0x0f, 0xaf, 0x4a, 0xec, 0x17, 0xf5, 0x4a, + 0x52, 0xd8, 0xb9, 0x2b, 0xb4, 0x9c, 0x04, 0x6b, 0x71, 0x62, + 0x9f, 0xf4, 0xd8, 0x82, 0x90, 0x6f, 0x03, 0x9b, 0x3b, 0x39, + 0x16, 0x2e, 0xff, 0x1b, 0x21, 0xdc, 0xd0, 0xec, 0x19, 0x72, + 0x50, 0xc3, 0x28, 0x76, 0x03, 0xde, 0x95, 0x44, 0xad, 0xfe, + 0xd5, 0xb6, 0x62, 0xcc, 0xc7, 0x8a, 0xfb, 0xdc, 0xb0, 0x95, + 0x4a, 0x11, 0x5f, 0x20, 0x24, 0x50, 0x42, 0xd9, 0xba, 0x4e, + 0x6c, 0x61, 0xb3, 0x4f, 0x18, 0x61, 0x32, 0x98, 0x6e, 0x9f, + 0x2b, 0xf5, 0xec, 0xf0, 0x1f, 0xc0, 0xdd, 0x31, 0x9d, 0x98, + 0x55, 0xfa, 0x56, 0x47, 0x62, 0x83, 0xbf, 0x23, 0x54, 0x69, + 0x08, 0x1a, 0x3c, 0x4a, 0xb8, 0xeb, 0xd3, 0x02, 0xd2, 0x23, + 0x52, 0x59, 0x16, 0x91, 0x8e, 0x97, 0x1f, 0x57, 0xa6, 0x01, + 0x13, 0x3f, 0xa3, 0xbc, 0x9b, 0x24, 0xf0, 0x6e, 0xef, 0x62, + 0x8f, 0x2c, 0xe8, 0x53, 0x20, 0x2b, 0x7d, 0x45, 0xf3, 0x90, + 0x24, 0x5f, 0x41, 0x18, 0x8b, 0xa6, 0x2e, 0x34, 0x4c, 0xa3, + 0xfb, 0x8c, 0x0e, 0x8c, 0x1c, 0x51, 0xf4, 0xee, 0xd5, 0x11, + 0x59, 0x2e, 0xee, 0x20, 0x73, 0x33, 0x26, 0xb5, 0x28, 0x24, + 0x25, 0x38, 0x8c, 0x28, 0x89, 0xa7, 0x7d, 0xd7, 0x0b, 0x48, + 0x2e, 0x0b, 0x2c, 0x51, 0xbc, 0x2d, 0xf4, 0x49, 0x0e, 0xe8, + 0x73, 0xa7, 0x34, 0x54, 0x5e, 0x99, 0x17, 0x47, 0xac, 0x0f, + 0x60, 0xa4, 0xd6, 0xbb, 0x79, 0x9b, 0xa5, 0x4f, 0xe5, 0x88, + 0x2a, 0x41, 0x96, 0xca, 0xfa, 0x60, 0xc9, 0xbb, 0x8d, 0xf7, + 0x2c, 0xf8, 0x63, 0x07, 0x50, 0xa2, 0x3a, 0x17, 0x52, 0x66, + 0xdc, 0xd5, 0x81, 0x93, 0x44, 0xf6, 0x82, 0x28, 0xb5, 0xab, + 0x21, 0xe4, 0x5e, 0x77, 0x5b, 0xa7, 0xe6, 0xbe, 0x81, 0xd5, + 0x81, 0x03, 0x32, 0x54, 0xc2, 0xef, 0x20, 0xc2, 0xd8, 0xff, + 0x24, 0x35, 0x78, 0xa3, 0x3e, 0x5e, 0x99, 0xc2, 0x1b, 0x98, + 0x7a, 0xc4, 0x3f, 0x7e, 0xcb, 0x8d, 0xf6, 0xd6, 0x01, 0x19, + 0xa8, 0xc9, 0xd7, 0xa9, 0x10, 0x55, 0x39, 0x62, 0xe1, 0x8f, + 0x07, 0xdb, 0x70, 0xfa, 0xf4, 0x42, 0x8b, 0x0d, 0xcf, 0x1d, + 0x41, 0x70, 0x54, 0x43, 0xc2, 0x32, 0x3e, 0xe7, 0xc8, 0x2e, + 0x79, 0x43, 0x37, 0xd0, 0xbd, 0x9e, 0x2d, 0xf9, 0xbd, 0x8d, + 0xc1, 0xc5, 0xbe, 0x2d, 0x9e, 0x67, 0x66, 0x91, 0x94, 0x2e, + 0xcc, 0xaf, 0xdb, 0x7a, 0xe3, 0x5d, 0xac, 0xd7, 0x07, 0xe8, + 0x9e, 0x2e, 0x55, 0xa9, 0xec, 0x98, 0x2c, 0xc1, 0x60, 0x2e, + 0x6e, 0x00, 0xa7, 0x7d, 0x57, 0x66, 0x97, 0x98, 0x17, 0x9f, + 0x0c, 0xef, 0x8a, 0x20, 0xfb, 0xe5, 0x59, 0xe8, 0x42, 0x81, + 0x0e, 0xc8, 0x04, 0x21, 0xaa, 0x99, 0x0e, 0xef, 0x46, 0xa4, + 0xc4, 0xdb, 0xf3, 0xb0, 0xa6, 0x13, 0x19, 0x82, 0xa7, 0x2c, + 0x05, 0x1f, 0x4f, 0x4f, 0x90, 0x5e, 0x35, 0xc8, 0x26, 0x14, + 0xff, 0x4b, 0xdb, 0xe8, 0x7f, 0xfd, 0x2a, 0x45, 0xe3, 0xd0, + 0xa0, 0xe2, 0x06, 0x8b, 0x51, 0x01, 0x3f, 0xa3, 0x17, 0xc0, + 0xdc, 0xdf, 0x7a, 0x63, 0x93, 0x83, 0x6c, 0xb4, 0x43, 0x0d, + 0x87, 0x3a, 0x1b, 0xe1, 0x34, 0xaf, 0x11, 0x8d, 0x6d, 0x07, + 0x05, 0x08, 0x1b, 0x46, 0x63, 0xda, 0x85, 0xe9, 0x40, 0x39, + 0xf3, 0xcf, 0x06, 0x77, 0xad, 0xd1, 0x67, 0x19, 0x1a, 0xf3, + 0x02, 0x5c, 0x0d, 0xf6, 0x3e, 0x51, 0x26, 0xe5, 0x83, 0x29, + 0xf5, 0xf3, 0x75, 0x3d, 0xe9, 0x6a, 0xd4, 0x67, 0x7b, 0x21, + 0xb0, 0x8b, 0x2f, 0xf2, 0x94, 0x3d, 0x83, 0x4d, 0x62, 0xab, + 0x24, 0xf8, 0x01, 0x60, 0xa6, 0x75, 0xe5, 0x1b, 0xb8, 0x89, + 0x04, 0x2c, 0x36, 0xd2, 0x62, 0x1a, 0x55, 0xae, 0x00, 0xfa, + 0x00, 0x86, 0x47, 0x87, 0x8d, 0xc2, 0xd5, 0x3a, 0x60, 0xba, + 0xc8, 0xed, 0x09, 0xdf, 0x37, 0x9a, 0x31, 0x1b, 0xed, 0xec, + 0x5d, 0x0b, 0xfb, 0x1f, 0x47, 0xaf, 0x08, 0xc6, 0x96, 0xd1, + 0x3f, 0x81, 0x3c, 0x42, 0x83, 0x74, 0x82, 0x8e, 0xac, 0xef, + 0x3a, 0xec, 0xa3, 0x87, 0x3b, 0x85, 0xb6, 0xff, 0x12, 0x02, + 0x2a, 0xff, 0x0c, 0x2d, 0xe5, 0x85, 0xc1, 0xd9, 0xb0, 0x91, + 0x5a, 0x56, 0x04, 0xa4, 0x9a, 0x9f, 0x87, 0x6f, 0x66, 0xf6, + 0xfe, 0x90, 0xa7, 0x4d, 0xdd, 0x81, 0xc7, 0xf7, 0xb7, 0xf2, + 0x48, 0xa8, 0xcc, 0x69, 0xdd, 0x00, 0xa6, 0x6f, 0x14, 0x16, + 0x16, 0xda, 0xa8, 0x86, 0x19, 0x67, 0xee, 0x76, 0x52, 0xbc, + 0xd5, 0xf3, 0x1f, 0x93, 0x60, 0x5f, 0xc1, 0xb9, 0x41, 0xcf, + 0xad, 0x4f, 0x88, 0xba, 0x7e, 0x46, 0x06, 0x86, 0x0e, 0x35, + 0xab, 0x79, 0xd3, 0x86, 0x4d, 0x5d, 0x29, 0x56, 0xb3, 0xb4, + 0xbc, 0x36, 0xd9, 0xdd, 0x01, 0xc7, 0x2c, 0x89, 0xd7, 0x60, + 0x50, 0x75, 0x8f, 0x62, 0x16, 0x97, 0x12, 0x34, 0xee, 0x81, + 0x94, 0xd0, 0x50, 0x6e, 0x41, 0x1e, 0xa8, 0x82, 0x4f, 0xb8, + 0xf2, 0x8b, 0xc5, 0x82, 0x14, 0x6c, 0xd5, 0xa4, 0x5e, 0x53, + 0xbb, 0x20, 0x26, 0x3e, 0x30, 0x56, 0x79, 0x49, 0x01, 0xdd, + 0xa9, 0xc1, 0x34, 0x8e, 0x14, 0xda, 0x10, 0xbc, 0x5a, 0x81, + 0xb3, 0xc0, 0x55, 0xdd, 0xfa, 0xce, 0x09, 0x21, 0xc4, 0x2d, + 0xa7, 0x35, 0xcc, 0x47, 0x67, 0x93, 0x94, 0xfc, 0xeb, 0x0c, + 0xec, 0xb1, 0x3c, 0xe0, 0x51, 0xc8, 0x70, 0x38, 0x08, 0x68, + 0x6a, 0xb1, 0xcf, 0xb2, 0x02, 0x34, 0x49, 0xf8, 0x24, 0xb8, + 0x56, 0xa8, 0xe0, 0xb6, 0x45, 0x60, 0x77, 0xd8, 0xa1, 0x46, + 0x8d, 0xdb, 0x8a, 0x5c, 0x2e, 0xce, 0xad, 0x97, 0xdf, 0xbe, + 0x75, 0x32, 0xc9, 0xed, 0x3e, 0x8e, 0x5f, 0x65, 0x1d, 0x9d, + 0x54, 0x1f, 0x6f, 0x04, 0xae, 0x8f, 0xd9, 0x87, 0x9e, 0x43, + 0xc2, 0x35, 0x26, 0x71, 0x55, 0x75, 0x4b, 0xa1, 0x3e, 0x06, + 0xbc, 0x5f, 0x80, 0x4e, 0xbb, 0x30, 0x95, 0xb9, 0xde, 0x7b, + 0xf9, 0x5f, 0x2d, 0x06, 0x99, 0x48, 0x3e, 0xd9, 0x35, 0xaa, + 0xff, 0x5d, 0x01, 0xb4, 0xb9, 0x16, 0xea, 0xf6, 0xff, 0x88, + 0xc7, 0x09, 0x7d, 0xf0, 0x0c, 0xb9, 0x32, 0x74, 0x71, 0x76, + 0x2b, 0x23, 0x48, 0x73, 0x96, 0xde, 0x1f, 0x61, 0xeb, 0xb8, + 0x63, 0x20, 0x77, 0xb3, 0xbe, 0x4d, 0xb1, 0x16, 0xa7, 0xab, + 0xb0, 0x17, 0xe5, 0x1a, 0x71, 0x43, 0xc0, 0x1c, 0x7f, 0x7e, + 0xcc, 0x92, 0x73, 0xdc, 0xc6, 0x53, 0x29, 0x5a, 0xa1, 0xf8, + 0xbe, 0x6a, 0x32, 0x26, 0x3d, 0xed, 0x0c, 0x82, 0xe4, 0x05, + 0xe7, 0x49, 0xb0, 0xfa, 0x5e, 0xa5, 0x29, 0x0c, 0xb8, 0x0c, + 0x91, 0xce, 0xf1, 0x94, 0x5d, 0x64, 0xda, 0x2c, 0x1c, 0x39, + 0x6d, 0xd3, 0x68, 0xf0, 0x4f, 0x0b, 0x86, 0xec, 0x42, 0xe1, + 0xec, 0x05, 0xea, 0x74, 0x86, 0x5d, 0xdb, 0xac, 0x34, 0x21, + 0xb9, 0xb5, 0x18, 0x0c, 0xae, 0x63, 0x02, 0xf0, 0xbd, 0xa0, + 0x8f, 0x67, 0x69, 0x35, 0x3d, 0x03, 0xa5, 0xf9, 0xfb, 0x47, + 0x83, 0x39, 0xb7, 0x26, 0xed, 0x8b, 0xca, 0x8b, 0x66, 0x90, + 0x5b, 0x39, 0xc1, 0x10, 0x3e, 0x7d, 0xf4, 0xc3, 0x6c, 0xb6, + 0x0b, 0x62, 0x9f, 0x89, 0x38, 0xec, 0x8e, 0x54, 0x55, 0x9d, + 0x2d, 0x08, 0xbb, 0xd0, 0x72, 0xee, 0x89, 0xc9, 0xfd, 0x3b, + 0x9c, 0x52, 0xbd, 0x70, 0xe9, 0xe2, 0xa8, 0x07, 0xa4, 0xc6, + 0x2b, 0xbb, 0x0b, 0x4a, 0x1c, 0x99, 0xac, 0x91, 0x68, 0x19, + 0x40, 0x89, 0x9a, 0xd4, 0x0e, 0x80, 0xce, 0xa8, 0x6f, 0x27, + 0x9c, 0xeb, 0x00, 0x5d, 0x6e, 0x61, 0x99, 0x79, 0x5b, 0xa2, + 0x1d, 0x33, 0xc1, 0xcb, 0x3e, 0xc6, 0x13, 0x63, 0xd9, 0xfa, + 0x63, 0xcc, 0x12, 0x2e, 0xf3, 0x89, 0x02, 0x5c, 0xb1, 0x6b, + 0x53, 0x10, 0x34, 0xdf, 0xfa, 0xed, 0xe9, 0x62, 0xe3, 0x64, + 0x6a, 0x8b, 0xd0, 0xb7, 0xf6, 0x67, 0x4c, 0xa6, 0x42, 0x84, + 0x38, 0x2a, 0x35, 0xa2, 0x63, 0x0d, 0x69, 0xaa, 0x68, 0x10, + 0x1a, 0x45, 0xa6, 0x30, 0xd8, 0xc7, 0xb3, 0x13, 0x8e, 0x00, + 0x58, 0x11, 0x9b, 0x71, 0x32, 0x60, 0xd6, 0xc4, 0xcf, 0x49, + 0x02, 0x58, 0x08, 0xd3, 0xe3, 0xd9, 0x33, 0x2c, 0x0b, 0x62, + 0x6f, 0x5a, 0x6e, 0xb7, 0x5d, 0x19, 0xba, 0x53, 0xef, 0xba, + 0x25, 0x26, 0x49, 0x20, 0x52, 0x0a, 0x17, 0x3c, 0x56, 0x4d, + 0xc6, 0xa5, 0xfc, 0x11, 0x9f, 0x82, 0xc0, 0xf0, 0x5a, 0xf1, + 0x5d, 0x83, 0x7d, 0x0b, 0xf3, 0xba, 0x32, 0x13, 0xd4, 0x8d, + 0xa9, 0xff, 0x2b, 0x02, 0x78, 0x55, 0x93, 0x9a, 0x79, 0x44, + 0xe9, 0xe7, 0x0c, 0x1e, 0x53, 0x9d, 0xc4, 0x98, 0xe1, 0x7a, + 0x9f, 0x15, 0x4c, 0x18, 0x72, 0x49, 0x82, 0x90, 0x71, 0xf2, + 0x27, 0x9a, 0x97, 0x17, 0x1c, 0x12, 0xde, 0x5e, 0x02, 0x2d, + 0xc9, 0x1e, 0xe7, 0x01, 0x8f, 0x59, 0xab, 0x14, 0xe9, 0x8c, + 0xfc, 0x4b, 0x8f, 0xc4, 0x8a, 0xec, 0x11, 0x58, 0x47, 0x8e, + 0xf1, 0xb7, 0x0e, 0x61, 0xb8, 0x75, 0x90, 0x6c, 0x0f, 0x4d, + 0xe7, 0xef, 0xe7, 0xe8, 0x9c, 0xc7, 0xba, 0x89, 0xc7, 0x79, + 0x98, 0xb9, 0xdd, 0xc5, 0x09, 0xd7, 0xeb, 0xcd, 0x39, 0x51, + 0x37, 0x48, 0x1c, 0x6b, 0x57, 0xc5, 0x44, 0xf9, 0x39, 0xc4, + 0x4b, 0xb7, 0x72, 0x25, 0xa6, 0x71, 0xc6, 0x36, 0x4d, 0xd4, + 0x25, 0x7d, 0x5e, 0xe3, 0x30, 0xd7, 0x83, 0x82, 0x5e, 0x60, + 0xfb, 0xd9, 0x08, 0xa0, 0x5f, 0x2a, 0xb7, 0x88, 0x00, 0x48, + 0x67, 0xc8, 0x85, 0x16, 0x9d, 0x51, 0x21, 0xb6, 0x6a, 0x1f, + 0xd4, 0x96, 0x4f, 0x50, 0x12, 0x3c, 0x1b, 0x37, 0x17, 0x8b, + 0x6d, 0x43, 0xe0, 0x66, 0x62, 0x93, 0x50, 0x6b, 0xda, 0x2a, + 0xc0, 0x61, 0xfb, 0xba, 0xec, 0x2c, 0xb2, 0x35, 0xe0, 0x82, + 0x5b, 0xe6, 0xb4, 0x60, 0xaf, 0x5f, 0x3d, 0x94, 0x93, 0xa6, + 0x70, 0x07, 0x94, 0x36, 0xe8, 0xe1, 0xcc, 0x97, 0xee, 0xf4, + 0xc5, 0x2e, 0x47, 0xf9, 0x7a, 0x35, 0xf5, 0xca, 0x24, 0xbe, + 0xdc, 0x88, 0xb8, 0x09, 0x85, 0x30, 0x67, 0x56, 0x91, 0x6a, + 0x3c, 0x33, 0x14, 0x61, 0xbe, 0x45, 0x60, 0xef, 0x99, 0x78, + 0xa4, 0x71, 0xa9, 0x51, 0x95, 0x1a, 0x1f, 0x08, 0x36, 0x10, + 0xcd, 0xad, 0x95, 0x64, 0xce, 0xd6, 0x83, 0xfb, 0xa1, 0x7e, + 0xa1, 0x52, 0xcf, 0xea, 0xa6, 0xeb, 0x6a, 0x90, 0x8e, 0x0f, + 0x0b, 0xec, 0xe3, 0x5d, 0xae, 0x30, 0x06, 0x76, 0x9c, 0x1d, + 0x98, 0x5b, 0xff, 0x03, 0xe4, 0x9d, 0x0a, 0x8d, 0x5d, 0x52, + 0xe1, 0xec, 0xc3, 0xa1, 0x69, 0x51, 0x4f, 0x29, 0x76, 0x2a, + 0xef, 0x57, 0xae, 0x79, 0x3e, 0x48, 0xe6, 0xdd, 0xe8, 0xe3, + 0xab, 0xfe, 0xf0, 0x00, 0xda, 0x8f, 0x83, 0x4f, 0x39, 0x5a, + 0xe5, 0xc6, 0x04, 0xec, 0xa5, 0x86, 0xcf, 0xe2, 0x5f, 0x50, + 0x6b, 0xe9, 0x62, 0x8d, 0x31, 0xea, 0x88, 0xae, 0xcc, 0xb2, + 0x0f, 0x85, 0x30, 0xd4, 0x38, 0xac, 0xb9, 0x2e, 0xcf, 0xf8, + 0x4f, 0xba, 0x35, 0xd3, 0x3f, 0x2d, 0xbf, 0xf7, 0x5a, 0x08, + 0x0c, 0x01, 0xb5, 0x9c, 0x98, 0xed, 0xf4, 0x94, 0xa6, 0xde, + 0xa0, 0xa7, 0x01, 0xd0, 0x69, 0x06, 0x82, 0x38, 0xf0, 0x87, + 0xaa, 0x21, 0x6b, 0xdf, 0xfa, 0xbc, 0xbf, 0xa8, 0x4a, 0xb4, + 0xf7, 0x49, 0x0f, 0xa3, 0x59, 0xb9, 0xed, 0x48, 0x01, 0xb8, + 0x06, 0xb5, 0xe1, 0xcf, 0xc2, 0x18, 0xc9, 0xbe, 0xa6, 0x93, + 0x42, 0x38, 0x1b, 0x74, 0xaf, 0xa3, 0x8b, 0x31, 0x7f, 0xdc, + 0xae, 0x54, 0xc5, 0xbd, 0xce, 0x3c, 0x96, 0x06, 0xdb, 0x6c, + 0x07, 0x43, 0xe6, 0x11, 0x2d, 0x58, 0x8c, 0x17, 0xcb, 0xd5, + 0x8a, 0x56, 0xce, 0x3a, 0x4c, 0x95, 0x82, 0xd9, 0x31, 0x68, + 0x1e, 0xb5, 0xf4, 0x3f, 0x27, 0x73, 0xb2, 0x54, 0xce, 0xad, + 0x34, 0x3a, 0xb5, 0xf6, 0xce, 0xc7, 0x50, 0x65, 0x1a, 0xc2, + 0x94, 0xb3, 0x69, 0x22, 0xf4, 0x23, 0x4f, 0xa7, 0x91, 0xf9, + 0xc5, 0x41, 0x15, 0xa8, 0x0b, 0x46, 0x90, 0x89, 0x89, 0xba, + 0xc1, 0x05, 0x26, 0x00, 0x68, 0x03, 0xaf, 0x01, 0x72, 0xbb, + 0xa5, 0x77, 0x3c, 0xda, 0x77, 0x7a, 0x24, 0x6b, 0x14, 0x86, + 0xa1, 0xcd, 0x4e, 0x09, 0x68, 0x46, 0xb3, 0x67, 0xfe, 0x2a, + 0xb1, 0x1d, 0x83, 0xc9, 0x50, 0xbf, 0xce, 0xa7, 0xe3, 0xfa, + 0x40, 0x09, 0x60, 0x19, 0xac, 0x4f, 0x1a, 0x3a, 0x14, 0xf8, + 0xf2, 0xb0, 0xd7, 0x33, 0xb2, 0xa0, 0x02, 0xf4, 0xdb, 0xf2, + 0x22, 0x80, 0x1c, 0xa0, 0x45, 0xc2, 0xc7, 0xc4, 0x1d, 0x40, + 0x0e, 0x75, 0x33, 0x8c, 0xcc, 0x1d, 0x2a, 0x5c, 0x0d, 0x63, + 0x17, 0x91, 0x56, 0x92, 0x8c, 0x59, 0xcb, 0xc7, 0xed, 0x15, + 0xfe, 0x5d, 0x23, 0xc2, 0x0e, 0x71, 0xb5, 0x62, 0x72, 0xbf, + 0xd9, 0x62, 0x85, 0x6c, 0xf1, 0xac, 0x04, 0x7a, 0x4f, 0x20, + 0x95, 0x7b, 0xa2, 0x35, 0x35, 0x97, 0xda, 0x92, 0xa8, 0x4f, + 0x4d, 0xc4, 0x3d, 0xca, 0x95, 0x1f, 0x2e, 0xbc, 0xc6, 0x55, + 0x46, 0x6d, 0xb0, 0xac, 0xbc, 0xea, 0xd8, 0xdf, 0xa1, 0x9a, + 0xa5, 0xef, 0x99, 0x6e, 0x6a, 0x30, 0xe9, 0x80, 0x67, 0xe8, + 0x0c, 0x22, 0xa8, 0x71, 0x72, 0x51, 0x46, 0x1c, 0x30, 0x71, + 0x8e, 0x34, 0x4c, 0xa8, 0x64, 0x78, 0x46, 0xf0, 0x60, 0x95, + 0x23, 0x0b, 0xb4, 0x6b, 0xe5, 0xc8, 0xce, 0x73, 0x43, 0x61, + 0x95, 0x38, 0xb2, 0x6f, 0xe3, 0x90, 0x34, 0xde, 0x1a, 0xe0, + 0xc4, 0xef, 0xf2, 0xef, 0x63, 0xd3, 0x62, 0x24, 0x8c, 0x94, + 0xf3, 0x12, 0xa1, 0x15, 0x37, 0x42, 0xbf, 0x02, 0x3f, 0x30, + 0xe4, 0x8f, 0x4d, 0xcf, 0x17, 0xbb, 0x74, 0x62, 0x84, 0xe1, + 0x79, 0x10, 0x61, 0x42, 0x18, 0xc5, 0xd3, 0x57, 0x78, 0x8b, + 0xee, 0xe7, 0x95, 0x90, 0xae, 0x00, 0x2d, 0xf1, 0x24, 0xfc, + 0x2f, 0x67, 0xce, 0x42, 0x3e, 0x70, 0x52, 0xb7, 0xb5, 0x11, + 0xe7, 0xd8, 0x0e, 0x74, 0xa8, 0x26, 0xd3, 0xf2, 0x4f, 0xf6, + 0x5d, 0xdc, 0x4c, 0x56, 0x89, 0xd4, 0x99, 0xf0, 0x1a, 0x52, + 0x78, 0x54, 0xab, 0xa4, 0x13, 0x42, 0x2e, 0xf3, 0x2c, 0x67, + 0x36, 0xfe, 0x6d, 0xa2, 0x7b, 0xe3, 0x7f, 0x1f, 0x88, 0x2d, + 0x3c, 0x24, 0xd3, 0x4b, 0x0c, 0xd3, 0x26, 0x53, 0xff, 0x85, + 0xc1, 0x8b, 0x96, 0x66, 0xd9, 0x24, 0x91, 0x48, 0xf7, 0xb4, + 0xee, 0x25, 0xe2, 0xb7, 0x92, 0x11, 0x13, 0x84, 0x1e, 0x52, + 0xed, 0x42, 0x57, 0x6a, 0xb0, 0x48, 0x5e, 0xb3, 0x57, 0x9f, + 0x52, 0x47, 0x22, 0x0e, 0xcf, 0x5f, 0xb0, 0x35, 0xe6, 0x52, + 0x07, 0x5a, 0xd1, 0x92, 0xcc, 0xbd, 0x41, 0x4b, 0xfc, 0x52, + 0xce, 0xf0, 0xef, 0x3b, 0x07, 0x0e, 0xfe, 0x6b, 0x00, 0x31, + 0x4e, 0x3a, 0x84, 0xad, 0x8f, 0x99, 0x8a, 0x41, 0x1e, 0x15, + 0xb6, 0x8e, 0x15, 0x43, 0x96, 0xcf, 0xbe, 0xa1, 0x94, 0xac, + 0x96, 0x14, 0x65, 0xf9, 0x47, 0xab, 0x11, 0x19, 0x8d, 0x81, + 0xb4, 0x07, 0xc6, 0x66, 0xe1, 0xda, 0xdf, 0x75, 0xad, 0x5f, + 0x86, 0x39, 0x3a, 0x20, 0x72, 0x05, 0xa3, 0xa4, 0x18, 0x22, + 0x8f, 0x97, 0x25, 0xff, 0xf1, 0x96, 0x65, 0x5c, 0x3e, 0x8e, + 0xc8, 0x79, 0x6d, 0xdf, 0x69, 0xe9, 0x24, 0xa9, 0x8d, 0xba, + 0xe5, 0xd0, 0x06, 0x42, 0x51, 0xb9, 0xc0, 0x7e, 0x22, 0xd4, + 0xe4, 0x18, 0x2c, 0x16, 0x15, 0xfb, 0xb9, 0xff, 0xe7, 0x81, + 0x73, 0x72, 0x99, 0xf5, 0xb0, 0x9f, 0x74, 0x79, 0xc4, 0x0f, + 0x5f, 0xd7, 0x15, 0x74, 0xf3, 0xa6, 0xd5, 0x3d, 0xcc, 0xad, + 0x4c, 0x95, 0x90, 0x7c, 0x15, 0x0e, 0x4d, 0x61, 0x5d, 0xe3, + 0xd3, 0x60, 0xdb, 0x46, 0x04, 0x5a, 0x3e, 0x39, 0xfd, 0xdd, + 0xa7, 0xcd, 0x0f, 0x00, 0xac, 0x00, 0x7f, 0x17, 0xd8, 0x68, + 0xb1, 0xff, 0x8e, 0xb9, 0xc0, 0x01, 0x63, 0xbb, 0x21, 0x6e, + 0x1a, 0xbc, 0x58, 0xd8, 0x7b, 0x1c, 0xb5, 0xbe, 0xdf, 0x20, + 0x30, 0xd1, 0x22, 0xf0, 0x97, 0x47, 0x24, 0xc4, 0x9b, 0x4c, + 0x8b, 0x54, 0x5a, 0x43, 0x1e, 0x09, 0xef, 0x47, 0xde, 0x6a, + 0x9e, 0x9e, 0x03, 0x7d, 0xd4, 0x5d, 0x45, 0xad, 0x00, 0x45, + 0x27, 0x22, 0x40, 0x45, 0x7a, 0x66, 0xe5, 0x31, 0x23, 0x9d, + 0xf6, 0xc4, 0x4a, 0x9a, 0x3e, 0x69, 0xe0, 0x16, 0x47, 0xdf, + 0xd4, 0x53, 0x77, 0x32, 0xd0, 0xed, 0x58, 0x13, 0x94, 0xf7, + 0xa4, 0x90, 0x04, 0x92, 0xf3, 0x40, 0xa5, 0x3f, 0x2e, 0x91, + 0xa9, 0xab, 0x9d, 0x46, 0x00, 0x60, 0x9c, 0x3d, 0xc2, 0xe9, + 0x20, 0x6e, 0xc4, 0x6f, 0xf6, 0x38, 0xe7, 0x6b, 0x77, 0xf3, + 0xf5, 0xa3, 0x6d, 0x4d, 0x78, 0xf8, 0x10, 0x38, 0x34, 0xf0, + 0x2d, 0xa6, 0xff, 0xf8, 0xb7, 0xf7, 0x31, 0x6c, 0x5a, 0x40, + 0x9f, 0x9f, 0x1f, 0xbb, 0x27, 0x89, 0x69, 0x8a, 0xba, 0x40, + 0x4f, 0x5e, 0x34, 0x0b, 0x30, 0x80, 0x8f, 0x4c, 0x3f, 0x47, + 0x73, 0xf5, 0x42, 0x6d, 0x73, 0x6c, 0x31, 0xa3, 0xc9, 0xdd, + 0x39, 0x2d, 0x54, 0x38, 0xcb, 0x10, 0x97, 0xa5, 0x59, 0xcd, + 0xff, 0x6d, 0x07, 0x26, 0x0d, 0xd0, 0x95, 0x59, 0x8f, 0x7c, + 0xcb, 0x97, 0x97, 0x25, 0xff, 0x98, 0x4e, 0x3c, 0xa5, 0xa3, + 0x60, 0xcf, 0x09, 0xff, 0x12, 0xf1, 0x87, 0xa7, 0x90, 0x65, + 0x23, 0xbe, 0x79, 0x5c, 0xa5, 0xb1, 0x24, 0x38, 0x52, 0x72, + 0x7c, 0x89, 0xa2, 0xa3, 0xac, 0xb4, 0xbd, 0xdf, 0xef, 0xf1, + 0xfd, 0x09, 0x29, 0x2a, 0x3c, 0x46, 0x4e, 0x5d, 0x6f, 0x73, + 0x83, 0x8b, 0x9a, 0x9f, 0xa0, 0xa4, 0xa8, 0xab, 0xb1, 0xb3, + 0xb9, 0xcc, 0xe4, 0xf6, 0x1a, 0x1c, 0x2c, 0x33, 0x39, 0x3c, + 0x3d, 0x4a, 0x9f, 0xa0, 0xd4, 0xd5, 0xf0, 0x00, 0x0e, 0x21, + 0x37, 0x66, 0x76, 0x8e, 0x9a, 0xbd, 0xcb, 0xf7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x26, 0x33, 0x3e }; -static const int sizeof_bench_dilithium_level2_sig = - sizeof(bench_dilithium_level2_sig); +static const int sizeof_bench_mldsa_44_sig = + sizeof(bench_mldsa_44_sig); #endif #ifndef WOLFSSL_NO_ML_DSA_65 -static const unsigned char bench_dilithium_level3_sig[] = { - 0x3e, 0xff, 0xf4, 0x48, 0x80, 0x2d, 0x88, 0x87, 0xf4, 0xcc, - 0xa4, 0x61, 0xe1, 0x27, 0x20, 0x55, 0x66, 0xc8, 0xfe, 0x3e, - 0xdd, 0xf5, 0x5c, 0x70, 0x6c, 0x54, 0xba, 0x50, 0x8a, 0xa2, - 0x4b, 0x88, 0xbc, 0xb8, 0x87, 0xf9, 0x4e, 0x50, 0x3a, 0x04, - 0x18, 0xb3, 0xf4, 0x5f, 0x77, 0x4a, 0x7e, 0xa8, 0xf5, 0xca, - 0x49, 0x00, 0xdc, 0x24, 0xaa, 0x05, 0x35, 0x0f, 0x34, 0xf7, - 0xbf, 0x09, 0xa6, 0xcf, 0x75, 0x37, 0x07, 0xcd, 0x07, 0x99, - 0x92, 0x1d, 0xc7, 0xc9, 0x17, 0x1c, 0xdd, 0x27, 0x8c, 0x66, - 0xf2, 0x8b, 0x75, 0xb0, 0x86, 0x2d, 0xbd, 0x51, 0x16, 0xc2, - 0x50, 0xe0, 0x7e, 0x0a, 0x21, 0x58, 0x93, 0x22, 0x06, 0xcb, - 0x85, 0x8b, 0xfd, 0x97, 0x61, 0xc0, 0xdb, 0xab, 0xfa, 0x4a, - 0x69, 0xef, 0x9c, 0xc1, 0x4e, 0xae, 0xb2, 0xb3, 0xa2, 0x74, - 0xa4, 0x94, 0x0a, 0xed, 0x39, 0x9e, 0xe8, 0x58, 0xeb, 0xfd, - 0x43, 0x05, 0x73, 0x38, 0xd6, 0xbb, 0xeb, 0xb9, 0x9d, 0x3b, - 0xf8, 0x85, 0xb4, 0x4b, 0x16, 0x5c, 0x9e, 0xfe, 0xb8, 0x13, - 0xf8, 0x68, 0x44, 0x90, 0x05, 0x61, 0xb3, 0xed, 0x6f, 0x47, - 0xc9, 0x50, 0xcf, 0x6c, 0xc0, 0xac, 0xdf, 0x4c, 0x4c, 0x1b, - 0x42, 0xce, 0x0a, 0x32, 0x69, 0xb0, 0xfd, 0x87, 0xef, 0xf3, - 0x9c, 0xcc, 0xba, 0x2f, 0x03, 0xd7, 0xdb, 0x76, 0xee, 0xa0, - 0x71, 0x4a, 0x80, 0xcb, 0x90, 0x9e, 0xbb, 0x8f, 0x00, 0x46, - 0x81, 0xe0, 0xde, 0xa6, 0x43, 0xb5, 0x37, 0x79, 0xf2, 0x35, - 0xce, 0x9e, 0xd2, 0xb1, 0x5b, 0xff, 0x91, 0xfb, 0x98, 0xc1, - 0xe1, 0x66, 0x2c, 0x00, 0x1b, 0x89, 0xf2, 0x57, 0x81, 0x73, - 0x7e, 0x9f, 0x8d, 0x50, 0xd0, 0xe0, 0xe3, 0x93, 0xf2, 0x87, - 0x41, 0x64, 0x6c, 0xb7, 0x09, 0x60, 0x91, 0x4e, 0x0b, 0xbe, - 0xbe, 0xd4, 0x98, 0xfa, 0x14, 0x8c, 0x46, 0x09, 0xfa, 0xaa, - 0x82, 0xd6, 0xdd, 0x65, 0x93, 0x39, 0x45, 0x50, 0x90, 0x10, - 0xae, 0x1b, 0xff, 0xab, 0x7e, 0x86, 0xda, 0xb9, 0x4d, 0xf1, - 0xc2, 0x00, 0x54, 0x66, 0xee, 0x40, 0xc0, 0x56, 0x2f, 0xe8, - 0x43, 0x89, 0xbb, 0xb8, 0x59, 0x24, 0x63, 0x45, 0x9a, 0xde, - 0x08, 0xf3, 0x16, 0x94, 0xd2, 0x8d, 0xee, 0xf9, 0xbe, 0x4f, - 0x29, 0xe1, 0x4b, 0x5e, 0x2b, 0x14, 0xef, 0x66, 0xe2, 0x12, - 0xf8, 0x87, 0x2e, 0xb1, 0x75, 0x8b, 0x21, 0xb5, 0x8f, 0x8e, - 0xc5, 0x0e, 0x60, 0x27, 0x15, 0xbd, 0x72, 0xe4, 0x26, 0x4e, - 0x62, 0x7d, 0x3a, 0x46, 0x49, 0x93, 0xa9, 0x52, 0x7f, 0xc2, - 0x27, 0xb9, 0x55, 0x6a, 0x45, 0x9f, 0x2c, 0x7a, 0x5a, 0xc9, - 0xf4, 0x55, 0xaf, 0x49, 0xb3, 0xd5, 0xc0, 0x84, 0xdb, 0x89, - 0x5f, 0x21, 0x04, 0xf5, 0x4c, 0x66, 0x1e, 0x2e, 0x69, 0xdf, - 0x5b, 0x14, 0x60, 0x89, 0x84, 0xf8, 0xa3, 0xaf, 0xdf, 0xb9, - 0x18, 0x5e, 0xbf, 0x81, 0x95, 0x9a, 0x5e, 0x4f, 0x24, 0x45, - 0xad, 0xab, 0xe2, 0x36, 0x7c, 0x19, 0xde, 0xc0, 0xf4, 0x1a, - 0x42, 0xb2, 0xc2, 0x58, 0x2f, 0x5f, 0xd0, 0x2e, 0x28, 0x33, - 0x59, 0x75, 0xc2, 0xde, 0x41, 0xe3, 0x9b, 0x85, 0x46, 0xad, - 0x6d, 0xf1, 0x06, 0xf0, 0x6a, 0xb9, 0xed, 0x71, 0x7b, 0xfd, - 0xf1, 0xc4, 0x56, 0xd8, 0xb3, 0x1a, 0x5f, 0x04, 0xae, 0xe8, - 0xce, 0xde, 0xa1, 0x6d, 0x46, 0x2a, 0x4f, 0x62, 0xee, 0x25, - 0xdf, 0x22, 0x21, 0xb2, 0x8f, 0x5f, 0x26, 0x33, 0x5a, 0xdd, - 0xbe, 0x08, 0xb3, 0x93, 0x16, 0x16, 0xad, 0x2e, 0x00, 0xb8, - 0x14, 0x0c, 0x10, 0xa3, 0x29, 0x89, 0x1f, 0xd7, 0x06, 0x7a, - 0x09, 0xf3, 0x84, 0xf9, 0x18, 0x04, 0x56, 0x2f, 0x7f, 0xbd, - 0x8e, 0x12, 0xdf, 0x4d, 0x58, 0x5c, 0x1d, 0x81, 0x0c, 0x7d, - 0x62, 0x02, 0xe0, 0xf9, 0x1b, 0x69, 0xe9, 0x38, 0x45, 0x84, - 0x2d, 0x9a, 0x4a, 0x3d, 0x7b, 0x48, 0xd5, 0x0d, 0x76, 0xba, - 0xff, 0x20, 0x00, 0xf8, 0x42, 0x7f, 0xd2, 0x25, 0x70, 0x90, - 0x88, 0xb3, 0x98, 0xac, 0xe9, 0xd9, 0xac, 0x58, 0xa6, 0x49, - 0xcc, 0x93, 0xa5, 0x04, 0x0c, 0x68, 0x53, 0x64, 0x72, 0x8c, - 0xfc, 0x8d, 0x61, 0xeb, 0x3f, 0x93, 0x8b, 0x85, 0x98, 0x05, - 0xce, 0x06, 0xd7, 0xbf, 0xbb, 0xa5, 0x22, 0xda, 0xe9, 0x8a, - 0x29, 0x30, 0x5e, 0x82, 0xe4, 0x46, 0x7c, 0x36, 0x5e, 0xf5, - 0xc7, 0xe3, 0x09, 0xdf, 0x20, 0x76, 0x73, 0x33, 0x31, 0x75, - 0xc2, 0x99, 0xe9, 0x74, 0x43, 0x82, 0xb1, 0xeb, 0x74, 0x6f, - 0xad, 0x59, 0x48, 0x12, 0xa0, 0x24, 0xe3, 0x38, 0x48, 0x61, - 0x0c, 0xf6, 0x38, 0x83, 0x3a, 0xcd, 0xd6, 0x45, 0x10, 0x0e, - 0x09, 0x79, 0x31, 0x30, 0x80, 0xfb, 0x34, 0x60, 0x1e, 0x72, - 0x98, 0xe9, 0x5c, 0xbf, 0xab, 0x21, 0x7f, 0xa3, 0x19, 0x7e, - 0x8c, 0xa9, 0xa7, 0xfc, 0x25, 0xe0, 0x8e, 0x6d, 0xa1, 0xb9, - 0x7b, 0x5b, 0x37, 0x33, 0x96, 0xd8, 0x6e, 0x7a, 0xce, 0xa6, - 0x1a, 0xbd, 0xe6, 0x6e, 0x62, 0xc4, 0x8c, 0x69, 0xfe, 0xe4, - 0xcb, 0x0a, 0xa1, 0x6c, 0x66, 0x0e, 0x1a, 0x5e, 0xb9, 0xd1, - 0x4a, 0xa3, 0x91, 0x39, 0xcf, 0x85, 0x07, 0x5b, 0xaf, 0x99, - 0x11, 0xca, 0xee, 0x6f, 0x2e, 0x33, 0xda, 0x60, 0xbf, 0xd6, - 0xa0, 0x7a, 0xdb, 0x91, 0x13, 0xb7, 0xa3, 0x5d, 0x0e, 0x1e, - 0x3b, 0xf9, 0x7a, 0x3e, 0x4f, 0x8d, 0xb3, 0x81, 0xe8, 0x0c, - 0x4d, 0x48, 0x61, 0x06, 0x14, 0x0f, 0x3e, 0x33, 0x9e, 0xea, - 0xa6, 0xd8, 0xd8, 0x4d, 0x9b, 0x00, 0x34, 0x0d, 0x31, 0x62, - 0x54, 0x93, 0x04, 0xd2, 0x02, 0x21, 0x38, 0x91, 0x58, 0xca, - 0x77, 0xd3, 0x6c, 0xd1, 0x94, 0x05, 0xfa, 0x30, 0x6a, 0x0b, - 0xf0, 0x52, 0x52, 0xb7, 0xdb, 0x34, 0xff, 0x18, 0x5c, 0x78, - 0x25, 0x44, 0x39, 0xe4, 0x54, 0x8a, 0xf1, 0x49, 0x04, 0xab, - 0x8a, 0x5f, 0x87, 0xe1, 0x6e, 0x1a, 0xf2, 0xba, 0x39, 0xb4, - 0x7c, 0x71, 0x5b, 0xbe, 0x8d, 0xbb, 0xed, 0x3b, 0xed, 0x20, - 0x95, 0xdf, 0xa7, 0x50, 0xb5, 0x66, 0xff, 0xd0, 0x3a, 0x92, - 0xde, 0xf2, 0xa3, 0xf2, 0xd6, 0x48, 0x6b, 0xd8, 0xef, 0x80, - 0x4d, 0xc2, 0x3c, 0xc7, 0xc6, 0x6e, 0xdf, 0xd1, 0x54, 0xfb, - 0x22, 0xac, 0x1a, 0x11, 0x81, 0x02, 0xc7, 0x66, 0xe0, 0xf3, - 0xad, 0x0b, 0xd0, 0xec, 0xae, 0x93, 0x53, 0xa5, 0xbf, 0xa5, - 0x17, 0x59, 0x14, 0x7d, 0x7e, 0x1e, 0x26, 0x15, 0x7a, 0x74, - 0xfb, 0xb1, 0x7a, 0x0e, 0xd3, 0xb5, 0x7c, 0x8c, 0x3a, 0xd7, - 0x45, 0x38, 0x55, 0xae, 0x4b, 0xe1, 0xfe, 0x5b, 0x57, 0x20, - 0x73, 0x38, 0xb9, 0x67, 0x34, 0xb1, 0xf3, 0x15, 0xb0, 0xb7, - 0x46, 0xa7, 0x1b, 0x19, 0x6d, 0xaf, 0x5e, 0x2c, 0x9c, 0x02, - 0x3f, 0x0f, 0xa3, 0x56, 0x2f, 0x9f, 0x1a, 0x82, 0x0e, 0xb4, - 0x46, 0xf5, 0x69, 0x89, 0x91, 0xf9, 0x2d, 0x99, 0x45, 0xa6, - 0x3c, 0x82, 0x74, 0xac, 0xeb, 0x58, 0x4a, 0xdd, 0x03, 0xaf, - 0xd1, 0x0a, 0xca, 0x4b, 0xe8, 0x4c, 0x63, 0xd4, 0x73, 0x94, - 0xbf, 0xd1, 0xc5, 0x8a, 0x3f, 0x6e, 0x58, 0xfc, 0x70, 0x76, - 0x69, 0x92, 0x05, 0xe0, 0xb9, 0xed, 0x5f, 0x19, 0xd7, 0x6f, - 0xd0, 0x35, 0xbb, 0x5a, 0x8d, 0x45, 0xac, 0x43, 0xcb, 0x74, - 0xcc, 0x92, 0xc3, 0x62, 0x56, 0x02, 0xb0, 0x0a, 0xb6, 0x88, - 0x40, 0x6f, 0x76, 0x1b, 0x89, 0xe4, 0x51, 0xeb, 0x7e, 0x08, - 0x8c, 0xce, 0x24, 0xc8, 0xd8, 0x58, 0xbd, 0x0e, 0x48, 0x57, - 0xc8, 0x9f, 0xad, 0x64, 0xcf, 0x69, 0x72, 0x35, 0xbf, 0x04, - 0x09, 0xfb, 0x0e, 0x62, 0x92, 0x76, 0x8b, 0x8d, 0xd5, 0x16, - 0xa2, 0x51, 0xdb, 0x71, 0xa9, 0x08, 0xb2, 0xf9, 0x1e, 0x07, - 0xe7, 0xf8, 0xf4, 0x79, 0x59, 0x2f, 0x8f, 0xf1, 0x5b, 0x45, - 0xe1, 0xb8, 0xb7, 0xef, 0x86, 0x69, 0x71, 0x51, 0x1c, 0xe5, - 0x61, 0xee, 0xb8, 0x1d, 0xa7, 0xdc, 0x48, 0xba, 0x51, 0xa5, - 0x70, 0x4d, 0xfd, 0x2c, 0x46, 0x21, 0x63, 0x0c, 0x9f, 0xb7, - 0x68, 0x58, 0x7b, 0xb3, 0x7d, 0x64, 0xfd, 0xaf, 0x87, 0x3d, - 0x86, 0x06, 0x36, 0x8a, 0x6d, 0xfe, 0xdf, 0xce, 0xa8, 0x16, - 0x42, 0x46, 0x15, 0xe5, 0xcf, 0x48, 0xa6, 0x4b, 0xe5, 0xc1, - 0xad, 0x14, 0x3a, 0x6d, 0xeb, 0xf9, 0xc9, 0x32, 0xd1, 0x82, - 0x60, 0x23, 0xf0, 0xff, 0xa7, 0xe6, 0x2e, 0xd6, 0x8d, 0x9d, - 0x4f, 0x6d, 0xb3, 0xc4, 0xad, 0xd9, 0xf0, 0xf5, 0x5c, 0x47, - 0x6c, 0x67, 0xf4, 0x0e, 0x18, 0x25, 0xbb, 0x67, 0xfa, 0x11, - 0x70, 0xd5, 0xbc, 0x3a, 0x34, 0xae, 0xa2, 0x76, 0x4b, 0x9f, - 0x59, 0x01, 0x18, 0x69, 0x44, 0xc4, 0x8a, 0xff, 0x00, 0xfc, - 0x2a, 0x45, 0xa9, 0x50, 0x8e, 0x37, 0x6b, 0x78, 0x14, 0x69, - 0xe7, 0x92, 0x3d, 0xf1, 0x34, 0xd5, 0x5c, 0x48, 0xc2, 0x50, - 0xb3, 0x0c, 0x7d, 0x54, 0x05, 0x31, 0x1e, 0xce, 0xaa, 0xc1, - 0x4c, 0xc9, 0x13, 0x33, 0x26, 0x1f, 0x56, 0x7e, 0x7e, 0x74, - 0xd3, 0x78, 0x3e, 0x00, 0x4a, 0xc8, 0xc6, 0x20, 0x5b, 0xb8, - 0x80, 0xb4, 0x13, 0x35, 0x23, 0xff, 0x50, 0xde, 0x25, 0x92, - 0x67, 0x08, 0xb8, 0xa3, 0xb6, 0x39, 0xd4, 0x30, 0xdc, 0xa5, - 0x88, 0x8a, 0x44, 0x08, 0x8b, 0x6d, 0x2e, 0xb8, 0xf3, 0x0d, - 0x23, 0xda, 0x35, 0x08, 0x5a, 0x92, 0xe1, 0x40, 0xac, 0xc7, - 0x15, 0x05, 0x8a, 0xdf, 0xe5, 0x71, 0xd8, 0xe0, 0xd7, 0x9f, - 0x58, 0x03, 0xf4, 0xec, 0x99, 0x3c, 0xb0, 0xe0, 0x07, 0x42, - 0x9b, 0xa0, 0x10, 0x7c, 0x24, 0x60, 0x19, 0xe8, 0x84, 0xd4, - 0xb1, 0x86, 0x19, 0x0a, 0x52, 0x70, 0x6e, 0xc2, 0x3c, 0xe2, - 0x73, 0x8d, 0xfe, 0xf8, 0x7e, 0xdf, 0x78, 0xe7, 0x92, 0x36, - 0x10, 0xf7, 0x2d, 0x76, 0x93, 0x8a, 0x0f, 0x20, 0xc8, 0x30, - 0x59, 0x81, 0xff, 0x3b, 0x70, 0x22, 0xce, 0x6e, 0x23, 0x68, - 0x35, 0x59, 0x0e, 0xcf, 0xf8, 0xf6, 0xcd, 0x45, 0xb6, 0x41, - 0xba, 0xda, 0xe6, 0x35, 0x0b, 0xd1, 0xef, 0xa5, 0x7c, 0xe0, - 0xb9, 0x6f, 0x5b, 0xa9, 0xab, 0x87, 0xe3, 0x3b, 0x92, 0xce, - 0xbe, 0xfe, 0xf7, 0xab, 0x82, 0xa3, 0xe6, 0xbd, 0xfe, 0xce, - 0xa6, 0x17, 0xcb, 0x4c, 0xb4, 0x4c, 0xd6, 0xfe, 0xbb, 0x1c, - 0x10, 0xde, 0x29, 0x3e, 0x92, 0x66, 0x20, 0xf8, 0xee, 0x83, - 0x86, 0x66, 0xe0, 0x66, 0x97, 0x85, 0xaf, 0x3a, 0x8f, 0xa9, - 0x97, 0x09, 0xde, 0x77, 0xda, 0xb7, 0x81, 0x41, 0x10, 0xca, - 0x66, 0x00, 0xec, 0xf8, 0x46, 0x73, 0xa6, 0x24, 0x36, 0xec, - 0x25, 0xbe, 0x93, 0x5e, 0x74, 0x9f, 0xbe, 0xf4, 0x84, 0x15, - 0x9c, 0xc5, 0x43, 0xd9, 0xea, 0x5a, 0xcc, 0x2c, 0x4e, 0x2e, - 0x4e, 0x32, 0xa6, 0x88, 0xb1, 0x25, 0x34, 0xf7, 0xba, 0xab, - 0xd3, 0xa0, 0xc2, 0x06, 0x70, 0xed, 0x66, 0x4d, 0x71, 0x34, - 0xaf, 0x10, 0x99, 0x10, 0x11, 0x4f, 0xe4, 0x7d, 0x42, 0x03, - 0x04, 0x02, 0xc2, 0x41, 0x85, 0x1e, 0xc4, 0xca, 0xae, 0xf0, - 0x83, 0x78, 0x34, 0x98, 0x55, 0x8b, 0x4c, 0xa0, 0x14, 0xea, - 0x15, 0x2c, 0xa1, 0x30, 0xd8, 0xcf, 0xac, 0xd4, 0xca, 0xf7, - 0xf4, 0xc4, 0x20, 0xca, 0xa1, 0xef, 0xce, 0x5d, 0x6b, 0x32, - 0xb6, 0xf0, 0x22, 0x08, 0x49, 0x21, 0x0c, 0x57, 0x0f, 0xf8, - 0xc0, 0xd2, 0xe3, 0xc0, 0xa6, 0x31, 0xc7, 0x87, 0x96, 0xa9, - 0xfe, 0x69, 0xa0, 0x7f, 0xf7, 0x8e, 0x31, 0x92, 0x37, 0xce, - 0xde, 0x36, 0x3f, 0xf5, 0x7d, 0x07, 0xaa, 0xa9, 0x43, 0xee, - 0x3c, 0x8c, 0xd3, 0x7d, 0x2c, 0xa6, 0xc3, 0x98, 0xab, 0xbe, - 0x90, 0x4c, 0xa5, 0x5a, 0x27, 0xeb, 0x0e, 0xed, 0xa1, 0x1e, - 0x3e, 0x44, 0xa3, 0x4b, 0x49, 0xad, 0xe4, 0x19, 0x90, 0xc8, - 0x9e, 0x6e, 0x5b, 0x68, 0xbc, 0x37, 0x54, 0xaf, 0xa6, 0xb7, - 0x71, 0x5c, 0x5d, 0x74, 0x83, 0xf4, 0xb9, 0x2f, 0xe5, 0x1a, - 0x0c, 0x73, 0x30, 0x56, 0x82, 0x04, 0xb3, 0x0e, 0x32, 0x98, - 0xfd, 0x27, 0xa0, 0xfe, 0xe0, 0xe0, 0xf5, 0xb7, 0xe0, 0x47, - 0x2a, 0xa6, 0x4a, 0xe0, 0xfc, 0xb5, 0xd8, 0xfd, 0x01, 0xfe, - 0x4e, 0x96, 0x17, 0x06, 0xcc, 0x92, 0x7c, 0xa1, 0x2f, 0xb5, - 0x04, 0x08, 0x76, 0xcc, 0x40, 0x75, 0x37, 0x4d, 0x2c, 0x74, - 0xcd, 0xc7, 0x62, 0xa6, 0xe6, 0xd8, 0x9e, 0x21, 0x7f, 0x2e, - 0xf5, 0x2c, 0xcf, 0x0b, 0x3f, 0xd7, 0xed, 0x17, 0xee, 0x92, - 0xaf, 0xf9, 0xa4, 0x71, 0x5d, 0x5f, 0x81, 0xb9, 0x2f, 0x12, - 0xe5, 0x57, 0x2d, 0x1e, 0xf1, 0x67, 0x47, 0x2a, 0xde, 0xab, - 0xf2, 0xea, 0xb7, 0xb5, 0x83, 0xdc, 0x46, 0xd4, 0xf3, 0x25, - 0x65, 0x15, 0x4d, 0x66, 0x34, 0x54, 0xab, 0x94, 0x89, 0x80, - 0x39, 0xd3, 0x39, 0xe3, 0xa2, 0xb1, 0x91, 0x2a, 0x5e, 0x55, - 0xe1, 0xa4, 0x0f, 0xc3, 0x4b, 0x5a, 0xa5, 0x4a, 0xb3, 0xc0, - 0x40, 0xea, 0x16, 0x0c, 0xd5, 0x2d, 0x83, 0x3e, 0x28, 0x20, - 0xac, 0x0a, 0x1b, 0x5b, 0x87, 0xcf, 0xf1, 0x51, 0xd6, 0xda, - 0xd1, 0xc9, 0xb1, 0x27, 0xf5, 0x62, 0x03, 0x10, 0xcf, 0x76, - 0x28, 0xa2, 0xea, 0x4b, 0x76, 0xaf, 0x9c, 0x3d, 0xf1, 0x1b, - 0x92, 0xff, 0xb0, 0xca, 0x16, 0xa2, 0x29, 0x94, 0x0e, 0x1e, - 0x51, 0xfb, 0xe1, 0x2b, 0x5a, 0x50, 0xfd, 0xaf, 0xab, 0xd7, - 0x32, 0xaa, 0x43, 0xa7, 0xcb, 0xd3, 0xd3, 0xe9, 0x1e, 0xb1, - 0x70, 0xd2, 0xbb, 0x15, 0x68, 0x49, 0xee, 0x6e, 0x1e, 0xc5, - 0x64, 0x4b, 0x26, 0x08, 0xe7, 0x32, 0x1c, 0x1d, 0x73, 0x8f, - 0x42, 0xfe, 0xeb, 0x67, 0x89, 0x42, 0x25, 0x40, 0xd6, 0x15, - 0x02, 0x55, 0x87, 0xe3, 0x87, 0xdd, 0x78, 0xc1, 0x01, 0x94, - 0xbc, 0x30, 0x5f, 0xbd, 0x89, 0xe1, 0xb0, 0x5c, 0xcd, 0xb7, - 0x68, 0xd5, 0xbb, 0xf4, 0xa0, 0x5d, 0x3d, 0xdd, 0x89, 0x12, - 0xc7, 0xb8, 0x5d, 0x51, 0x8a, 0xf4, 0xd5, 0x05, 0xc6, 0xdd, - 0x7b, 0x44, 0x38, 0xce, 0xb1, 0x24, 0x24, 0xe1, 0x9d, 0xc7, - 0x80, 0x86, 0x46, 0x2a, 0xd2, 0xa4, 0x0f, 0xec, 0xd3, 0x6b, - 0x31, 0xc0, 0x05, 0x31, 0xff, 0xf5, 0x1a, 0x33, 0x35, 0x68, - 0x2e, 0x68, 0x24, 0xbd, 0x62, 0xfc, 0x46, 0x79, 0x54, 0x5e, - 0x1e, 0x27, 0x93, 0x07, 0xed, 0x78, 0x94, 0x50, 0x42, 0x98, - 0x53, 0x88, 0xb7, 0x57, 0x04, 0x7d, 0xe2, 0xe1, 0xb5, 0x61, - 0x9e, 0x5a, 0x88, 0x31, 0x3e, 0x6c, 0x69, 0xbc, 0x8a, 0xe6, - 0xbc, 0x9d, 0x20, 0x7a, 0x86, 0xe5, 0x73, 0x93, 0x02, 0xc5, - 0xde, 0xdc, 0xcc, 0xbf, 0x89, 0x76, 0xdc, 0x4e, 0xa1, 0x89, - 0xe7, 0x95, 0x75, 0x01, 0xf7, 0x43, 0xaa, 0x3f, 0x1b, 0xb7, - 0x8c, 0x92, 0x66, 0x22, 0xbe, 0x34, 0xf1, 0x2f, 0xc3, 0xc7, - 0x21, 0xaf, 0x25, 0x57, 0x9a, 0x2c, 0x80, 0xf0, 0xb3, 0xdd, - 0xb3, 0xb2, 0x82, 0x97, 0x85, 0x73, 0xa9, 0x76, 0xe4, 0x37, - 0xa2, 0x65, 0xf9, 0xc1, 0x3d, 0x11, 0xbf, 0xcb, 0x3c, 0x8e, - 0xdd, 0xaf, 0x98, 0x57, 0x6a, 0xe1, 0x33, 0xe7, 0xf0, 0xff, - 0xed, 0x61, 0x53, 0xfe, 0x1e, 0x2d, 0x06, 0x2f, 0xb8, 0x9e, - 0xf9, 0xa5, 0x21, 0x06, 0xf3, 0x72, 0xf6, 0xa3, 0x77, 0xbb, - 0x63, 0x6e, 0x52, 0xb2, 0x42, 0x47, 0x9b, 0x92, 0x4c, 0xf8, - 0xd2, 0xe6, 0x02, 0xa5, 0x57, 0x2d, 0x6f, 0x30, 0x05, 0xe2, - 0xfd, 0x33, 0xe5, 0xb6, 0x23, 0x85, 0x89, 0x4a, 0x99, 0x20, - 0x33, 0xea, 0x2f, 0xcd, 0x28, 0x27, 0xff, 0xfd, 0x2e, 0x73, - 0x52, 0x29, 0x19, 0x7c, 0x65, 0xf5, 0x6a, 0xaa, 0x97, 0x6e, - 0xe9, 0x42, 0xa8, 0x55, 0x97, 0x56, 0x92, 0x9d, 0xd2, 0xd1, - 0xc4, 0x30, 0xaa, 0x95, 0x86, 0xba, 0x71, 0xdd, 0x2f, 0xf1, - 0xed, 0x66, 0x54, 0x78, 0x4b, 0x13, 0x31, 0xed, 0x9d, 0x2c, - 0xae, 0x0a, 0xc3, 0xca, 0xfb, 0x3f, 0x92, 0x92, 0x30, 0xa3, - 0x8e, 0xc8, 0x6d, 0x7b, 0x42, 0xd5, 0x5d, 0x99, 0x79, 0x42, - 0x28, 0x63, 0x9f, 0x97, 0x8e, 0x94, 0x6d, 0x1d, 0xb4, 0x21, - 0x39, 0xc7, 0x64, 0x48, 0x44, 0x5e, 0x15, 0x10, 0x45, 0x9f, - 0x8a, 0x01, 0x45, 0x20, 0x5c, 0xd1, 0x28, 0x0d, 0xe9, 0xfb, - 0xa9, 0x72, 0x68, 0x07, 0x31, 0x20, 0x75, 0x76, 0x82, 0x76, - 0x5d, 0x7c, 0xc1, 0x5d, 0x42, 0x40, 0xfd, 0x06, 0xa9, 0x66, - 0xb0, 0x36, 0x55, 0x86, 0x6c, 0x96, 0xbd, 0xb8, 0xf7, 0x36, - 0x87, 0xf2, 0xa1, 0x37, 0xd8, 0x2d, 0x83, 0xf5, 0xdc, 0xd8, - 0xde, 0x9e, 0x69, 0xd6, 0xe1, 0x0d, 0xd5, 0x93, 0xc5, 0xee, - 0xba, 0xd3, 0x40, 0x71, 0xbb, 0xc7, 0xbb, 0x50, 0x1a, 0x10, - 0x80, 0x99, 0x62, 0x1c, 0xe3, 0x1f, 0xa2, 0xcc, 0x98, 0xe1, - 0xaa, 0xff, 0xd9, 0x69, 0xe7, 0x87, 0x04, 0x87, 0x76, 0xec, - 0x55, 0x18, 0xaf, 0x82, 0x34, 0x4d, 0x4f, 0xf7, 0x57, 0x1f, - 0xa5, 0x43, 0xcc, 0xe9, 0x7a, 0x4a, 0xc8, 0xb4, 0x1f, 0x61, - 0x40, 0x5e, 0x1d, 0x11, 0xdd, 0xdc, 0xdc, 0xb4, 0x57, 0xf9, - 0x47, 0x96, 0xbc, 0x47, 0x29, 0xf8, 0xf2, 0x43, 0xc4, 0xa0, - 0x8c, 0x14, 0x5e, 0x73, 0x52, 0xac, 0xac, 0x39, 0x3b, 0x06, - 0x19, 0x1a, 0xca, 0x22, 0xc8, 0x96, 0x12, 0x2e, 0x4c, 0x7b, - 0xa0, 0x96, 0x53, 0x16, 0xce, 0x6d, 0x6e, 0xac, 0xb2, 0x07, - 0x17, 0x22, 0x07, 0x30, 0x20, 0x84, 0x9b, 0x0e, 0x92, 0x31, - 0x07, 0xe2, 0x77, 0xcd, 0x6a, 0x3e, 0x16, 0x4f, 0xd6, 0x12, - 0x88, 0x8a, 0x70, 0x5a, 0x87, 0xd8, 0xb9, 0xef, 0x76, 0xab, - 0x14, 0x65, 0x87, 0x3a, 0xef, 0xd8, 0x0e, 0x24, 0x40, 0x73, - 0x93, 0x2b, 0xbf, 0xac, 0xfe, 0x96, 0x8a, 0x9d, 0x12, 0xe6, - 0xc1, 0x5b, 0x00, 0x3b, 0x23, 0xee, 0xe2, 0x10, 0xb6, 0xbe, - 0x0e, 0x2f, 0xa2, 0x77, 0x16, 0x17, 0xfc, 0x4b, 0x2c, 0xd7, - 0x9c, 0xad, 0x66, 0xb4, 0xf2, 0xfd, 0xc1, 0xaf, 0x81, 0x12, - 0xd9, 0xed, 0x14, 0x32, 0xcf, 0x1b, 0xee, 0xc6, 0x63, 0xe8, - 0xe5, 0xe6, 0xb6, 0x91, 0x8d, 0x1b, 0x90, 0x75, 0x5d, 0x69, - 0x4c, 0x5d, 0xd6, 0xac, 0x79, 0xe8, 0xb6, 0xdf, 0xbf, 0x43, - 0x39, 0xd3, 0xb8, 0xf0, 0x39, 0xf4, 0x90, 0xaf, 0x73, 0x26, - 0xc7, 0x73, 0x6f, 0x93, 0xbb, 0xce, 0x6e, 0xdc, 0x1c, 0xd0, - 0x36, 0x23, 0x17, 0xb2, 0x39, 0x37, 0x15, 0xf5, 0x3a, 0x61, - 0xa9, 0x15, 0x52, 0x6e, 0xc5, 0x3a, 0x63, 0x79, 0x5d, 0x45, - 0xdc, 0x3a, 0xd5, 0x26, 0x01, 0x56, 0x97, 0x80, 0x7f, 0x83, - 0xf9, 0xec, 0xde, 0xa0, 0x2e, 0x7a, 0xb2, 0x4b, 0x04, 0x63, - 0x60, 0x05, 0xce, 0x96, 0xeb, 0xe0, 0x0a, 0x5f, 0xb0, 0x7e, - 0x6d, 0x0a, 0x24, 0x32, 0x47, 0x82, 0x7f, 0x0b, 0xd7, 0xe9, - 0xd5, 0x14, 0xa9, 0x6b, 0x10, 0x5d, 0x1e, 0x1f, 0x8a, 0xad, - 0x70, 0x91, 0xd4, 0x33, 0x1d, 0xc2, 0x3e, 0xf8, 0xc8, 0x52, - 0x9a, 0x27, 0x1f, 0x45, 0x2f, 0xb5, 0xc7, 0xb1, 0x8b, 0xf9, - 0xc6, 0x7b, 0xb5, 0x92, 0x7a, 0xdd, 0xeb, 0x07, 0x6c, 0x6f, - 0x11, 0xd7, 0x5b, 0x56, 0x56, 0xec, 0x88, 0x1c, 0xc9, 0xb4, - 0xe8, 0x43, 0xab, 0xdf, 0x0b, 0xc5, 0x28, 0xba, 0x70, 0x5d, - 0xd3, 0xb2, 0xe2, 0xcf, 0xa7, 0xbb, 0x53, 0x04, 0x6b, 0x73, - 0xdf, 0x27, 0xa6, 0x63, 0x58, 0xe1, 0x39, 0x26, 0x2a, 0x1a, - 0x21, 0xec, 0xbb, 0x5f, 0x46, 0x98, 0x3d, 0x48, 0x66, 0xfe, - 0xf3, 0xcb, 0xfc, 0x6e, 0x99, 0x82, 0x91, 0xce, 0x53, 0xfd, - 0x75, 0xc9, 0xb6, 0x08, 0xa8, 0xf3, 0xe4, 0xe0, 0xa0, 0x24, - 0x45, 0xb4, 0x69, 0x11, 0xac, 0x06, 0x1c, 0x39, 0x71, 0xcf, - 0x72, 0xfc, 0x77, 0x9b, 0x5f, 0xf4, 0x8b, 0x02, 0x31, 0xf3, - 0x67, 0xd1, 0x9b, 0xe0, 0x49, 0xa4, 0x69, 0x20, 0x99, 0x38, - 0xa7, 0xf5, 0x43, 0xd2, 0x45, 0x9f, 0x7a, 0xe7, 0xad, 0x7e, - 0x36, 0xee, 0xfd, 0x8c, 0xc5, 0x6a, 0x12, 0x58, 0x15, 0x3b, - 0x02, 0x81, 0x73, 0x8b, 0x10, 0xda, 0x21, 0xc7, 0x1d, 0x38, - 0xd8, 0x40, 0x7a, 0xa3, 0x59, 0x55, 0x35, 0x44, 0xa9, 0x9c, - 0xf5, 0xf4, 0xe4, 0x14, 0xc1, 0xc4, 0x15, 0x26, 0x01, 0xe3, - 0x31, 0xbf, 0xdc, 0xbc, 0x69, 0x0b, 0xcf, 0x71, 0x8c, 0xdb, - 0x16, 0xab, 0x36, 0x3e, 0xb3, 0xa4, 0x9f, 0xcc, 0xbf, 0xa2, - 0x93, 0x93, 0x9a, 0x3b, 0xaf, 0x72, 0x8d, 0x8b, 0x92, 0x44, - 0x5d, 0x6f, 0xc5, 0xf0, 0xdc, 0x65, 0x62, 0xea, 0xba, 0x33, - 0xe7, 0x6c, 0xa4, 0x35, 0xcf, 0xd9, 0xbc, 0x3c, 0xbf, 0x25, - 0x7b, 0x7c, 0x0b, 0x62, 0x92, 0x5a, 0x66, 0x63, 0xe1, 0x27, - 0x89, 0x12, 0xe2, 0xae, 0xb7, 0xf8, 0x04, 0x70, 0xda, 0x4a, - 0x3d, 0xa6, 0x67, 0x12, 0x14, 0x9e, 0x8e, 0xdc, 0xa2, 0xf2, - 0x3d, 0xc7, 0xd2, 0x8f, 0x18, 0x3a, 0x53, 0x8c, 0x83, 0x5d, - 0x66, 0xbb, 0x9f, 0x8c, 0xaf, 0xa8, 0x73, 0x08, 0x2e, 0x6d, - 0x30, 0xa0, 0xd0, 0x20, 0x94, 0x48, 0xad, 0x5e, 0x31, 0xfd, - 0x5e, 0xfd, 0xf9, 0xb5, 0xa2, 0x39, 0xa3, 0xb9, 0xdf, 0x4d, - 0xa4, 0xb1, 0x54, 0xcc, 0x92, 0x63, 0x2c, 0x66, 0x2d, 0x01, - 0x88, 0x8b, 0x7d, 0xc6, 0x5c, 0x9f, 0x18, 0x9a, 0x53, 0x91, - 0x59, 0x66, 0x70, 0xd7, 0x81, 0x0e, 0xa1, 0x3c, 0x7e, 0x86, - 0x85, 0x64, 0x38, 0x6f, 0xec, 0x76, 0x57, 0x80, 0x41, 0x9d, - 0xef, 0x61, 0xb8, 0xb2, 0x8a, 0xeb, 0xe9, 0x26, 0xbb, 0x69, - 0xb3, 0x8d, 0xd4, 0x6b, 0x05, 0xd8, 0x55, 0x1c, 0xbd, 0x9f, - 0x6b, 0x23, 0x46, 0x2b, 0xf7, 0xfb, 0x4d, 0x33, 0x3b, 0x21, - 0x6d, 0xea, 0x1b, 0x15, 0xaf, 0x0f, 0x8c, 0x98, 0xc8, 0xf4, - 0xd1, 0x3c, 0xdd, 0x21, 0xd0, 0x45, 0xdc, 0xaf, 0x89, 0x89, - 0xbf, 0xde, 0xbf, 0x46, 0x9e, 0x9e, 0x18, 0x56, 0x9d, 0x05, - 0x4d, 0x63, 0x5f, 0x1c, 0xd9, 0x15, 0xd1, 0x43, 0x17, 0x0c, - 0x48, 0x3d, 0x36, 0x8b, 0x14, 0x87, 0xc8, 0x10, 0x44, 0xdf, - 0x9c, 0xfd, 0x6e, 0x88, 0x88, 0xae, 0x7f, 0x7f, 0x67, 0xa3, - 0x33, 0x4d, 0xa3, 0x84, 0x8b, 0x58, 0x07, 0x17, 0xd8, 0x1d, - 0x9e, 0x43, 0xd6, 0x41, 0x9c, 0xff, 0xfa, 0x35, 0xa2, 0x42, - 0xa9, 0x5d, 0xa9, 0x4b, 0x95, 0x23, 0x6a, 0x6e, 0x42, 0xd7, - 0xa2, 0x0a, 0x70, 0x00, 0x61, 0x8b, 0x45, 0xbb, 0xac, 0x20, - 0x27, 0xcd, 0xfc, 0x61, 0x17, 0xfe, 0xab, 0x6b, 0xe8, 0xe0, - 0x51, 0xab, 0xa3, 0xbf, 0xe4, 0x85, 0x69, 0x8e, 0xd7, 0xa6, - 0x62, 0x33, 0x8f, 0x7c, 0xba, 0x48, 0xfa, 0x83, 0x94, 0xa5, - 0xdf, 0xa1, 0x76, 0xdc, 0xa9, 0x4b, 0x3c, 0x27, 0xff, 0xd9, - 0xbe, 0xf4, 0x80, 0x5a, 0xca, 0x33, 0xf3, 0x9a, 0x1d, 0xf8, - 0xf3, 0xe1, 0x83, 0x27, 0x0b, 0x59, 0x87, 0x31, 0x7d, 0x4f, - 0x5a, 0x5e, 0xe1, 0xbe, 0xa9, 0x68, 0xe9, 0x6f, 0x10, 0x0a, - 0xe2, 0x70, 0x05, 0xaa, 0xcb, 0xdd, 0x41, 0xd7, 0x49, 0x8a, - 0x98, 0xa0, 0x40, 0x2d, 0xc6, 0x56, 0x49, 0xca, 0x60, 0x16, - 0x9c, 0x38, 0xc9, 0xfe, 0x99, 0x15, 0xfb, 0x79, 0x01, 0x33, - 0xcd, 0x54, 0x2f, 0xf3, 0x70, 0x37, 0x82, 0x36, 0x32, 0x76, - 0x8f, 0x63, 0x00, 0xa2, 0x42, 0xce, 0x39, 0x90, 0xfc, 0xf8, - 0xff, 0x34, 0x38, 0x0a, 0x17, 0x5e, 0x9d, 0x34, 0x86, 0xde, - 0x33, 0x45, 0xac, 0xbf, 0x81, 0xdf, 0xd2, 0xbc, 0xc7, 0xd7, - 0xd1, 0xee, 0xde, 0x2b, 0x5b, 0x50, 0x56, 0xb5, 0x88, 0x00, - 0x92, 0x76, 0x5a, 0x34, 0x0c, 0xfe, 0x8f, 0xc5, 0xa0, 0x92, - 0xb0, 0xed, 0x43, 0xe7, 0x81, 0x39, 0x36, 0x6e, 0xb7, 0x4d, - 0x5b, 0xcf, 0xc7, 0xf0, 0x83, 0xe5, 0xdc, 0xb7, 0x74, 0xf4, - 0xf3, 0xbd, 0xa8, 0xa6, 0x7b, 0xe0, 0xc5, 0x50, 0xaa, 0xc7, - 0x83, 0x4d, 0xd9, 0xc5, 0x97, 0x03, 0x7c, 0x0c, 0x3b, 0x3a, - 0x18, 0xb2, 0x8c, 0xee, 0x67, 0x91, 0x38, 0x84, 0x8f, 0xef, - 0xb4, 0xf4, 0xe4, 0x7c, 0x1a, 0x3f, 0xa3, 0x0a, 0xd9, 0xba, - 0xff, 0x56, 0xd8, 0xe2, 0x82, 0xfc, 0x58, 0x8f, 0xf6, 0x12, - 0x10, 0x65, 0x6a, 0x68, 0x53, 0x2d, 0x9f, 0x2c, 0x77, 0xd1, - 0xb8, 0x21, 0x8a, 0xcb, 0xe9, 0xd4, 0x25, 0x18, 0x22, 0x46, - 0x3e, 0x72, 0x29, 0x2a, 0x68, 0x70, 0x73, 0xe2, 0x61, 0xa2, - 0xa8, 0x1f, 0x24, 0x48, 0x92, 0xa0, 0xd4, 0xdd, 0xde, 0xe5, - 0x02, 0x1b, 0x59, 0x5c, 0x7e, 0x92, 0x9c, 0xd8, 0xf4, 0x2d, - 0x6b, 0x79, 0x7b, 0xc7, 0xcd, 0xef, 0x21, 0x2a, 0x50, 0x7e, - 0xba, 0xdd, 0x02, 0x45, 0x7e, 0xc1, 0xdd, 0xeb, 0x00, 0x00, +/* ML-DSA-65 signature over the 512-byte bench message, + * produced from certs/mldsa/mldsa65_priv-only.der. */ +static const unsigned char bench_mldsa_65_sig[] = { + 0x9c, 0xe7, 0x2f, 0x65, 0xec, 0x86, 0x32, 0xeb, 0x83, 0x2f, + 0x94, 0xa4, 0x7d, 0x30, 0x1b, 0xfa, 0xe9, 0x07, 0x36, 0xfa, + 0x33, 0xc5, 0x2d, 0x04, 0xc3, 0x3e, 0x43, 0x15, 0x9a, 0x5d, + 0x13, 0x27, 0x77, 0xa6, 0xf8, 0xcd, 0x5c, 0x6e, 0xae, 0xd7, + 0x2c, 0x27, 0xe3, 0xec, 0xdf, 0x96, 0xe6, 0x8a, 0x50, 0x5b, + 0xdb, 0x63, 0xbc, 0x2c, 0x81, 0x11, 0xb3, 0xe9, 0x2a, 0x05, + 0x79, 0xe5, 0x4c, 0xda, 0xe1, 0xe0, 0x48, 0x6f, 0x81, 0xfc, + 0x04, 0xdb, 0x7b, 0x8d, 0x8e, 0xde, 0xab, 0xe2, 0xfc, 0x5f, + 0xb8, 0x06, 0x08, 0xbe, 0x09, 0x22, 0x66, 0x84, 0xe6, 0x87, + 0xb3, 0x99, 0xb8, 0x90, 0x00, 0x21, 0x57, 0xa3, 0xc7, 0xbe, + 0x9c, 0xc2, 0x9b, 0x5f, 0x8a, 0x6f, 0x52, 0x36, 0x88, 0xa6, + 0x0e, 0xf8, 0x27, 0x7f, 0x40, 0x68, 0x03, 0x54, 0x88, 0x3c, + 0xd1, 0x74, 0x8f, 0x24, 0x60, 0x71, 0x4a, 0x78, 0xef, 0x11, + 0x51, 0x50, 0x77, 0x68, 0x54, 0x89, 0xfc, 0x38, 0x62, 0x91, + 0xf2, 0xcd, 0xae, 0x95, 0xde, 0xa3, 0xd2, 0x89, 0x91, 0x81, + 0xd1, 0x3c, 0x89, 0x1b, 0x69, 0xb0, 0x3d, 0x3c, 0x6d, 0xd8, + 0x6c, 0x60, 0xfa, 0xae, 0xe7, 0x16, 0xcc, 0xdd, 0x9d, 0xca, + 0x6a, 0x2c, 0x66, 0xdd, 0xbb, 0xca, 0x35, 0xe4, 0x59, 0xfb, + 0x2c, 0xf5, 0x18, 0x6b, 0x99, 0x7b, 0x7f, 0x2c, 0x77, 0x0d, + 0xb7, 0x65, 0xba, 0x43, 0x1c, 0x66, 0x0e, 0x09, 0x50, 0x83, + 0x97, 0xae, 0xeb, 0xf8, 0xac, 0xa9, 0xb4, 0x6d, 0xc7, 0x25, + 0x9c, 0x0b, 0x2d, 0xb1, 0xeb, 0x89, 0x84, 0xfe, 0xa8, 0x39, + 0x82, 0xd8, 0x31, 0xf7, 0x29, 0xbd, 0x28, 0x1f, 0x71, 0xf2, + 0xfa, 0xfc, 0x61, 0x6a, 0x30, 0x0b, 0xab, 0xf9, 0x0b, 0x59, + 0x44, 0x3a, 0x1c, 0xb8, 0x07, 0xf4, 0x2e, 0xe7, 0xd6, 0xc4, + 0x80, 0x9c, 0x6b, 0x8e, 0xa8, 0x9d, 0xbf, 0x69, 0xb1, 0x25, + 0xa9, 0x75, 0xc7, 0xc6, 0x9d, 0x30, 0xbd, 0x2a, 0xb0, 0xc5, + 0x37, 0xc9, 0x99, 0x58, 0xca, 0x96, 0x94, 0x58, 0x19, 0x3a, + 0x9e, 0x77, 0x04, 0x99, 0x65, 0xc5, 0x52, 0xf3, 0xa2, 0x65, + 0x96, 0x55, 0xfb, 0xbe, 0xd3, 0xa4, 0xc5, 0xaa, 0x19, 0x12, + 0x98, 0x11, 0x54, 0x72, 0xc1, 0x31, 0x4f, 0xdb, 0x50, 0x40, + 0x20, 0x10, 0xb6, 0x1d, 0xc8, 0x5a, 0x37, 0xaf, 0xcb, 0xf0, + 0xa1, 0x07, 0x93, 0x66, 0xb8, 0xb1, 0xb2, 0xda, 0x34, 0xfe, + 0x3e, 0x43, 0x3d, 0x98, 0xcf, 0x2c, 0xfa, 0xb2, 0x9e, 0x74, + 0xcc, 0x0c, 0x87, 0xa1, 0x2d, 0x7f, 0x80, 0xa3, 0x03, 0x2d, + 0xd6, 0xa3, 0xc8, 0xa6, 0x50, 0xda, 0x4b, 0xf8, 0xdb, 0xdf, + 0xb6, 0x8f, 0xde, 0xb5, 0xff, 0xd4, 0xd4, 0x05, 0x0a, 0xa0, + 0x61, 0x25, 0xbc, 0xaf, 0xe8, 0xc8, 0x8a, 0x81, 0x6a, 0x67, + 0xbd, 0x51, 0x84, 0x24, 0xe2, 0x90, 0xe2, 0x9f, 0xed, 0xde, + 0xc5, 0x1e, 0x0c, 0x20, 0x30, 0x2c, 0x34, 0xa5, 0xd7, 0x14, + 0x0c, 0xc4, 0x6c, 0x5a, 0x89, 0x8c, 0x45, 0xbb, 0xea, 0x16, + 0xd1, 0x93, 0x36, 0x02, 0x0c, 0x86, 0x42, 0x33, 0x37, 0x0d, + 0x85, 0x8e, 0x23, 0x71, 0x71, 0x2a, 0xe4, 0x40, 0x82, 0x42, + 0x7e, 0x69, 0x50, 0x75, 0xee, 0x28, 0x34, 0x21, 0xb6, 0x19, + 0x58, 0xea, 0xdc, 0x72, 0x75, 0x0d, 0x5a, 0x53, 0xd6, 0x9e, + 0x09, 0x1f, 0x22, 0x06, 0x4e, 0x7e, 0xcc, 0xc2, 0x7d, 0x3f, + 0xe3, 0xa3, 0x91, 0xbf, 0x61, 0x43, 0xfb, 0xcd, 0xfb, 0x1c, + 0xcd, 0x12, 0x25, 0x0f, 0x30, 0x69, 0x16, 0x7a, 0x5b, 0x35, + 0x45, 0xf2, 0x47, 0x09, 0x77, 0x99, 0x62, 0xf6, 0x6f, 0x3b, + 0x53, 0x30, 0x16, 0x89, 0x81, 0x8b, 0x94, 0xc3, 0x41, 0xa2, + 0x93, 0x43, 0x88, 0x7e, 0xeb, 0xdf, 0x82, 0xd1, 0xe9, 0xaa, + 0xc9, 0xc4, 0xda, 0x9b, 0x30, 0xec, 0xa7, 0xad, 0x67, 0x78, + 0xc7, 0x50, 0x75, 0x6e, 0xa3, 0x9b, 0x7b, 0xc6, 0xaa, 0x8f, + 0x5b, 0x88, 0xfc, 0x0a, 0x97, 0x5e, 0xba, 0x32, 0xc3, 0x26, + 0xa9, 0x2c, 0x1b, 0x57, 0xef, 0x06, 0x46, 0x20, 0x28, 0xc8, + 0xcf, 0x9c, 0x34, 0xa8, 0x18, 0x30, 0xf4, 0xd7, 0x29, 0x1e, + 0xae, 0x54, 0xf9, 0x6b, 0x6b, 0x96, 0x88, 0x6b, 0x21, 0xfa, + 0x75, 0x27, 0xdd, 0x28, 0x2d, 0x37, 0x4c, 0x4d, 0xaa, 0xc9, + 0xfd, 0xd8, 0x75, 0xa5, 0x9b, 0x8d, 0xa7, 0x16, 0x23, 0xe0, + 0x2f, 0xa6, 0xc0, 0x92, 0x1e, 0xcf, 0xa4, 0xc4, 0x69, 0x3b, + 0xe3, 0x72, 0x8e, 0x29, 0xb8, 0xcb, 0xc5, 0x3b, 0x6e, 0x61, + 0x9c, 0xca, 0x1a, 0x93, 0x3e, 0xe6, 0x1d, 0x58, 0x84, 0x78, + 0xe6, 0x6f, 0x3b, 0xc8, 0x49, 0x25, 0x8c, 0x1f, 0xe9, 0xcf, + 0xfe, 0xe9, 0x0b, 0x7e, 0x4b, 0x8b, 0xf7, 0x55, 0x71, 0x35, + 0x56, 0xe3, 0xea, 0xd6, 0x42, 0xaa, 0x67, 0x55, 0x05, 0x64, + 0x85, 0x74, 0x95, 0x9d, 0xac, 0xce, 0x78, 0xed, 0x9e, 0x30, + 0x6a, 0x6a, 0x79, 0x40, 0x91, 0x0b, 0x32, 0xee, 0x83, 0x49, + 0xe8, 0x07, 0x6a, 0x68, 0x89, 0x96, 0x5f, 0x12, 0x9c, 0x06, + 0xe3, 0xfd, 0x1e, 0x2f, 0x28, 0xa1, 0x6f, 0x5f, 0xb9, 0xdc, + 0x7c, 0x80, 0x16, 0xe6, 0x16, 0xc2, 0xbe, 0x71, 0x1a, 0x28, + 0xdd, 0x30, 0x00, 0x9d, 0x6b, 0x1f, 0x35, 0xbc, 0xa1, 0x94, + 0x91, 0xdb, 0xff, 0x68, 0x97, 0x0d, 0xf3, 0xde, 0x58, 0x7c, + 0x6e, 0xe7, 0x12, 0x15, 0x18, 0x18, 0x12, 0xbd, 0x36, 0xbe, + 0xf5, 0x09, 0x81, 0xb8, 0x67, 0xcf, 0x9e, 0xd3, 0xc7, 0x0a, + 0x06, 0x6c, 0x1b, 0x28, 0x3b, 0x32, 0xb4, 0xbd, 0x83, 0x9b, + 0x64, 0x2f, 0x53, 0xf8, 0xec, 0xae, 0x7b, 0x9a, 0x75, 0xba, + 0x30, 0xeb, 0xd7, 0xe8, 0x07, 0x30, 0x2d, 0xb9, 0x66, 0x5e, + 0x39, 0x0b, 0xfd, 0x52, 0xb9, 0x1e, 0x43, 0x1d, 0x27, 0xfc, + 0x94, 0x1b, 0xb7, 0x7b, 0xbc, 0xad, 0x0f, 0x5e, 0x2d, 0x5b, + 0xe6, 0x36, 0x63, 0x22, 0x41, 0x26, 0xbe, 0x0b, 0xd9, 0xd9, + 0x2e, 0xdc, 0xec, 0xdd, 0x19, 0xe6, 0x9a, 0xf3, 0x46, 0x2a, + 0xcf, 0xc8, 0xd2, 0x9b, 0xfc, 0xc4, 0x1d, 0xf9, 0x0c, 0x00, + 0xb3, 0x77, 0xd7, 0xdd, 0x55, 0x90, 0x78, 0xf4, 0x5b, 0x0a, + 0x3f, 0x08, 0x7d, 0x65, 0x1d, 0x50, 0xd3, 0x1d, 0xea, 0xec, + 0x66, 0xf7, 0xb9, 0x71, 0x61, 0x5f, 0xbb, 0x02, 0x59, 0xa9, + 0xb9, 0x5c, 0xf6, 0x11, 0x15, 0x6f, 0x13, 0x94, 0xa1, 0xfc, + 0x7c, 0x42, 0xc3, 0x09, 0x34, 0xa3, 0x86, 0x26, 0xd2, 0xf6, + 0x6b, 0x28, 0x33, 0x4b, 0xe7, 0x34, 0xaa, 0xc4, 0x23, 0x8a, + 0x57, 0x76, 0x83, 0x0d, 0xed, 0x98, 0xb0, 0xaf, 0xae, 0xde, + 0xc0, 0xf3, 0x79, 0x40, 0x44, 0xa8, 0x48, 0x3e, 0x35, 0x67, + 0x0c, 0x0c, 0x8d, 0x26, 0x5f, 0x00, 0xed, 0xd7, 0x51, 0x01, + 0x62, 0xa6, 0xd8, 0x13, 0x10, 0x82, 0xf6, 0x43, 0xde, 0xb2, + 0x17, 0x78, 0xab, 0xb8, 0x05, 0x9c, 0x55, 0xb4, 0x3e, 0xa8, + 0xbe, 0x00, 0x18, 0x28, 0x3f, 0x50, 0x09, 0xee, 0x81, 0x19, + 0xfb, 0x82, 0x24, 0xc1, 0x94, 0x1f, 0x74, 0xa0, 0x82, 0x12, + 0x75, 0x9a, 0x8b, 0x63, 0xa4, 0x91, 0x0f, 0x48, 0x80, 0x43, + 0xae, 0xd5, 0x1e, 0xa4, 0x4d, 0x39, 0x7b, 0x68, 0x64, 0x97, + 0x03, 0x0d, 0xb2, 0xfa, 0xb4, 0xcd, 0xa2, 0x55, 0xe4, 0xd0, + 0x33, 0x66, 0xbe, 0x63, 0xaa, 0x29, 0x28, 0x90, 0x41, 0x61, + 0xd5, 0x32, 0xb2, 0xf7, 0x53, 0x5b, 0x4a, 0x30, 0x28, 0xdd, + 0xdd, 0x83, 0x54, 0x09, 0x6b, 0xc8, 0xb6, 0xf3, 0xbe, 0xfa, + 0x79, 0x1e, 0x4f, 0xda, 0x94, 0xee, 0xfa, 0xc5, 0x0d, 0x11, + 0x62, 0x26, 0x2a, 0x85, 0x52, 0xe4, 0x28, 0xf4, 0xee, 0xd7, + 0xd5, 0x1f, 0x03, 0x3a, 0x64, 0x2a, 0x6d, 0xf9, 0x2d, 0x0f, + 0xe1, 0x0e, 0x3d, 0x95, 0xb5, 0x97, 0x32, 0xf8, 0x5c, 0xb7, + 0xf1, 0x1d, 0x11, 0x5d, 0xf3, 0xac, 0xdd, 0xe7, 0xf8, 0x28, + 0x64, 0x1c, 0xf4, 0x35, 0xe7, 0x62, 0xf2, 0x43, 0x8b, 0x75, + 0x8a, 0x77, 0xd2, 0xe6, 0x40, 0xa1, 0x10, 0x31, 0x6b, 0x1e, + 0x79, 0x55, 0xef, 0x4a, 0x40, 0xe9, 0x2c, 0x07, 0x1c, 0x85, + 0xf9, 0x0b, 0xa4, 0x33, 0xb8, 0x42, 0x4d, 0x0f, 0xff, 0xec, + 0xbf, 0xcb, 0x26, 0xc3, 0x3e, 0x4b, 0x4d, 0x94, 0x87, 0x78, + 0x6b, 0x24, 0x11, 0xb5, 0xe7, 0x89, 0x6f, 0xd4, 0xae, 0x44, + 0x51, 0xd7, 0x39, 0x25, 0xa7, 0x97, 0x30, 0x9e, 0x49, 0x3a, + 0xf9, 0x3f, 0x05, 0xbd, 0xf8, 0x29, 0xf5, 0x82, 0x8a, 0x04, + 0x47, 0x63, 0x3a, 0xc1, 0x9f, 0x48, 0x6a, 0xb2, 0x88, 0x07, + 0x51, 0x27, 0xec, 0x23, 0x65, 0x2a, 0x1d, 0xfe, 0xb8, 0x99, + 0x72, 0xc1, 0x4f, 0xce, 0x30, 0x06, 0x8c, 0x66, 0x88, 0x1d, + 0xa6, 0xf9, 0xb3, 0x11, 0x9b, 0x1a, 0x39, 0xaf, 0xf7, 0x9c, + 0x0e, 0xbc, 0xb6, 0x9c, 0x47, 0x2d, 0x64, 0x8f, 0x50, 0xd4, + 0xc4, 0x4b, 0x5a, 0x70, 0x2a, 0xa5, 0x4c, 0xad, 0x6e, 0x82, + 0x76, 0x22, 0x2f, 0xf4, 0x63, 0x51, 0xf9, 0x1a, 0x87, 0x3f, + 0x2b, 0x4d, 0x8e, 0x80, 0x2d, 0x82, 0xb2, 0x92, 0xcd, 0x36, + 0x41, 0xa6, 0x68, 0xe8, 0x70, 0x17, 0x6b, 0xf3, 0x28, 0x0f, + 0xe4, 0xce, 0xb2, 0x80, 0xe9, 0x40, 0x88, 0x70, 0xab, 0x1f, + 0xf1, 0x1e, 0x26, 0x7c, 0x6d, 0x6e, 0x77, 0x2c, 0x5c, 0xf4, + 0x01, 0xdc, 0x56, 0xd9, 0xca, 0x2c, 0xeb, 0x9b, 0xdc, 0x94, + 0x7a, 0x21, 0x0b, 0x4b, 0xc0, 0x1d, 0x22, 0x18, 0xa4, 0x11, + 0x74, 0x36, 0x02, 0xe3, 0x9f, 0x29, 0x07, 0x79, 0x12, 0x25, + 0x78, 0xd2, 0x5b, 0x01, 0x7b, 0x5f, 0xac, 0xfd, 0x7d, 0xba, + 0xa2, 0x77, 0xeb, 0x19, 0x03, 0xa7, 0x79, 0xcd, 0xe1, 0xaa, + 0x3f, 0x9c, 0xf9, 0x68, 0x7a, 0x89, 0x21, 0xa4, 0x56, 0x54, + 0xbf, 0x6c, 0xad, 0xfb, 0xfd, 0x1f, 0xe6, 0xda, 0x0b, 0x58, + 0x4f, 0x9f, 0x14, 0x4e, 0x8a, 0x5e, 0xc7, 0x80, 0x51, 0xd2, + 0x04, 0x43, 0x80, 0x7f, 0x93, 0xf8, 0x4f, 0x21, 0x88, 0x11, + 0xe2, 0x3c, 0xb2, 0xe8, 0x8f, 0xaa, 0xc3, 0x3b, 0x01, 0x3e, + 0x8b, 0x14, 0x88, 0x21, 0xd6, 0x96, 0xd7, 0xe1, 0x92, 0x2d, + 0x2f, 0xc1, 0x5d, 0xcf, 0x09, 0xf3, 0x1f, 0x3d, 0x30, 0xc1, + 0x70, 0x7e, 0xd9, 0xae, 0xcf, 0x61, 0x70, 0x74, 0x70, 0x5e, + 0x0c, 0x11, 0x38, 0x14, 0x9e, 0x94, 0x3f, 0x51, 0x15, 0x03, + 0x55, 0x0d, 0xd3, 0xa7, 0x2e, 0xa3, 0xdf, 0x76, 0x70, 0xdc, + 0x03, 0x47, 0x08, 0xeb, 0x4c, 0x02, 0xa4, 0xbc, 0xb7, 0x05, + 0x7e, 0xcd, 0xa5, 0x64, 0x49, 0xcc, 0x90, 0xa8, 0x04, 0x24, + 0xde, 0x90, 0x59, 0xc2, 0x18, 0x4d, 0x33, 0x3f, 0xce, 0x81, + 0xfd, 0x74, 0x30, 0xc1, 0x77, 0x50, 0xc9, 0x4c, 0xa0, 0xa7, + 0x74, 0x9b, 0xfd, 0x9c, 0xa9, 0xb8, 0x2a, 0x8c, 0x3b, 0xea, + 0x62, 0x70, 0x25, 0xf1, 0x20, 0x1c, 0x86, 0x30, 0xb6, 0x51, + 0x0e, 0x01, 0x14, 0x45, 0x5c, 0x13, 0x04, 0x5d, 0x50, 0x52, + 0xc1, 0x45, 0xa1, 0x5a, 0xd6, 0x81, 0x99, 0x0e, 0x23, 0x13, + 0xd1, 0x15, 0xaa, 0x4d, 0x11, 0x11, 0xcd, 0x2d, 0x14, 0x8e, + 0xbe, 0x84, 0x58, 0xb4, 0x66, 0x9a, 0xda, 0xfe, 0xbe, 0x29, + 0x8e, 0x48, 0xa3, 0xf6, 0xda, 0x28, 0xa8, 0x49, 0x2b, 0x90, + 0x53, 0xaa, 0xb9, 0x19, 0xab, 0xbb, 0xd4, 0xd0, 0x88, 0x9a, + 0xe9, 0x49, 0xde, 0xe5, 0x94, 0x7e, 0x5a, 0xf1, 0x8d, 0x64, + 0x8e, 0x35, 0x42, 0x8e, 0xc2, 0x1f, 0xff, 0x35, 0xe6, 0x73, + 0x85, 0x84, 0x74, 0x30, 0x53, 0xce, 0x44, 0xed, 0xb7, 0xb1, + 0x02, 0x87, 0xb6, 0x85, 0x06, 0x95, 0x88, 0x78, 0x26, 0x78, + 0xa2, 0xb9, 0x4f, 0x42, 0x18, 0x2a, 0xf7, 0xd6, 0x30, 0xde, + 0x43, 0xa6, 0x61, 0x0e, 0xfd, 0xf5, 0x86, 0x32, 0x70, 0xea, + 0xfc, 0x27, 0x91, 0xf0, 0x78, 0x34, 0x17, 0x03, 0x61, 0x3f, + 0x58, 0xb2, 0xb6, 0x09, 0x9c, 0x6b, 0x80, 0x36, 0x00, 0x82, + 0x66, 0x3d, 0x8b, 0x3d, 0xab, 0x6c, 0xd7, 0xf3, 0x24, 0x25, + 0xcf, 0xf0, 0xbe, 0x3f, 0xbe, 0xc1, 0x7c, 0x07, 0x20, 0x6d, + 0x9b, 0xa5, 0x3f, 0x1f, 0x5c, 0xbc, 0x53, 0x64, 0x8e, 0x52, + 0xbe, 0x2c, 0x6c, 0x82, 0xdb, 0x1e, 0xee, 0x31, 0xea, 0x97, + 0x90, 0x20, 0xb7, 0xb9, 0xd6, 0x94, 0xe8, 0xa1, 0x51, 0xc9, + 0x72, 0x1d, 0xb0, 0x91, 0x9a, 0x40, 0x01, 0xaa, 0xe2, 0xe9, + 0x56, 0xed, 0xf5, 0xf2, 0x13, 0xbb, 0xa1, 0x48, 0x0b, 0x0b, + 0x6c, 0x3d, 0xde, 0x22, 0xc3, 0xd3, 0x60, 0xe0, 0xa8, 0xd7, + 0x34, 0x35, 0xf5, 0x51, 0xce, 0x75, 0x3b, 0x9e, 0x3b, 0x86, + 0xd6, 0xde, 0x33, 0x05, 0x16, 0x49, 0x52, 0x8f, 0x06, 0xd8, + 0xdd, 0x8f, 0xf3, 0x46, 0xf7, 0x1c, 0x0f, 0xa0, 0x67, 0x96, + 0x0f, 0x37, 0x7e, 0x5b, 0xfc, 0xd4, 0x55, 0x55, 0xbf, 0xf5, + 0x94, 0x8c, 0xf6, 0xc1, 0x5d, 0xd0, 0xc9, 0xe4, 0x77, 0xb3, + 0xf9, 0x0b, 0xfa, 0x05, 0x9b, 0x0c, 0x28, 0x56, 0x53, 0x44, + 0xda, 0x74, 0x68, 0xfb, 0x37, 0x91, 0xd0, 0xad, 0xb0, 0xe8, + 0xa4, 0xdc, 0xbd, 0x3b, 0xb9, 0x93, 0x8b, 0xa5, 0x88, 0x8f, + 0xa2, 0xe9, 0x92, 0x44, 0x0a, 0xab, 0x1d, 0x1a, 0x5c, 0x59, + 0x3b, 0x3b, 0xaf, 0x3b, 0x3f, 0x9d, 0xca, 0xa9, 0x28, 0xc7, + 0x02, 0xf8, 0x99, 0xe4, 0x94, 0xd8, 0x49, 0xa0, 0x48, 0x52, + 0xe1, 0x28, 0xff, 0x3f, 0xe5, 0x49, 0x23, 0x24, 0x2b, 0x55, + 0xe5, 0xf5, 0x98, 0x81, 0x15, 0x7c, 0x68, 0x0d, 0xfb, 0x2a, + 0x3f, 0x7a, 0x10, 0x68, 0xeb, 0x54, 0xce, 0xaf, 0x2f, 0xad, + 0x1e, 0x91, 0xe4, 0xd9, 0x40, 0xd9, 0x2f, 0x17, 0x97, 0xc9, + 0x5b, 0xa3, 0x8e, 0x36, 0x47, 0xdc, 0x67, 0x61, 0x0d, 0xaf, + 0x5d, 0x32, 0xb7, 0xf2, 0xf4, 0x6f, 0xb9, 0x31, 0x68, 0x57, + 0xf3, 0x1f, 0x77, 0xc0, 0x01, 0x81, 0x33, 0x87, 0xdb, 0x2f, + 0xf5, 0xb5, 0x48, 0x46, 0x31, 0xc1, 0x48, 0x1f, 0x1a, 0x1e, + 0x7e, 0x30, 0x19, 0x24, 0x08, 0x62, 0x6d, 0x9f, 0x0d, 0x0f, + 0xdd, 0x70, 0xa6, 0x05, 0xf0, 0x91, 0x53, 0x3c, 0x9a, 0x42, + 0xc8, 0x6f, 0x97, 0x41, 0x93, 0xc4, 0x85, 0xf8, 0x67, 0x04, + 0x1b, 0xac, 0xa7, 0x8e, 0xf6, 0x2d, 0xc6, 0x97, 0xc9, 0xdb, + 0x86, 0x65, 0x4e, 0x1e, 0x86, 0x45, 0xdc, 0x38, 0x20, 0x4c, + 0x8b, 0x9d, 0xe7, 0x88, 0x5e, 0x2d, 0xcf, 0x95, 0xa8, 0xdb, + 0x4a, 0xa3, 0x8e, 0x64, 0x28, 0xb4, 0x95, 0x56, 0x90, 0x61, + 0x4a, 0x29, 0xe8, 0x12, 0x68, 0xaa, 0x47, 0x28, 0xde, 0x4d, + 0xe6, 0xf0, 0xfa, 0x12, 0x43, 0x6b, 0xce, 0xcb, 0xe3, 0x16, + 0x14, 0xa3, 0x76, 0x8a, 0xad, 0x2a, 0x04, 0x85, 0xaf, 0xe4, + 0x99, 0x8d, 0xb7, 0xb2, 0x50, 0xe8, 0xd7, 0xb8, 0x4d, 0x5b, + 0x52, 0x41, 0x10, 0xe1, 0x90, 0x7b, 0x8b, 0x28, 0x40, 0x2d, + 0x53, 0x92, 0xca, 0x1a, 0x76, 0x63, 0xef, 0x02, 0x57, 0x5c, + 0xd6, 0x0b, 0x2f, 0x6f, 0x5c, 0xa9, 0x53, 0xf3, 0xcb, 0xaa, + 0xf0, 0xc9, 0x57, 0x49, 0x43, 0x3a, 0xa0, 0xea, 0xd1, 0xfe, + 0x42, 0x17, 0xad, 0x88, 0x35, 0xb0, 0x42, 0xa3, 0x60, 0x9c, + 0x36, 0xf2, 0x68, 0xb4, 0x0a, 0xec, 0xb0, 0x58, 0xb2, 0xcc, + 0x1a, 0xd8, 0x5a, 0x10, 0x1b, 0x66, 0x8f, 0x89, 0x8d, 0x02, + 0x2f, 0x8b, 0x87, 0x7f, 0x0f, 0x17, 0x98, 0x55, 0xdd, 0x2a, + 0x49, 0x55, 0xd9, 0xa5, 0x6a, 0xa6, 0x93, 0xe5, 0xc4, 0xee, + 0xd1, 0x64, 0xbb, 0x66, 0xbd, 0xca, 0xe9, 0xbd, 0x56, 0x54, + 0x07, 0x91, 0xd7, 0xa0, 0x91, 0xf3, 0x24, 0x24, 0x6d, 0xe6, + 0xa6, 0xe0, 0x0b, 0xf8, 0xc1, 0x16, 0x58, 0x77, 0x7c, 0x9b, + 0xcd, 0xcf, 0x46, 0x44, 0xfb, 0xcf, 0x18, 0xa1, 0xfa, 0xfc, + 0x57, 0x46, 0xf7, 0x44, 0x8f, 0x19, 0x00, 0x8a, 0xb5, 0x03, + 0x09, 0x1d, 0x35, 0xeb, 0x65, 0x93, 0x92, 0x3e, 0xeb, 0x2c, + 0xcd, 0x90, 0x24, 0xdb, 0x73, 0x4e, 0x23, 0x02, 0x07, 0x50, + 0xf4, 0x5d, 0x40, 0x58, 0x8c, 0x80, 0x02, 0x4f, 0x9c, 0xee, + 0x9f, 0x94, 0x86, 0x11, 0x6b, 0xc7, 0xa4, 0x7b, 0x5a, 0xb7, + 0xfe, 0xdb, 0x2a, 0x59, 0x6e, 0x97, 0x1d, 0x95, 0x8b, 0x5e, + 0x32, 0x50, 0x2d, 0xd8, 0x90, 0xc5, 0x73, 0xce, 0x1d, 0xbd, + 0xaf, 0x7b, 0xf4, 0x58, 0xb0, 0x97, 0x25, 0xfc, 0x1d, 0x8f, + 0x39, 0xe1, 0x4e, 0x63, 0x1e, 0x28, 0x64, 0xde, 0x5c, 0xba, + 0x13, 0xfb, 0x2e, 0x2c, 0x62, 0xae, 0xfe, 0x83, 0xd1, 0x93, + 0xbf, 0xe1, 0xb0, 0x3c, 0xb2, 0x85, 0xa8, 0x38, 0x7b, 0x0c, + 0xe1, 0x98, 0x63, 0xf2, 0x97, 0xa5, 0x62, 0xf9, 0xec, 0x57, + 0x2f, 0x03, 0x1d, 0xf6, 0x3e, 0x7e, 0xb9, 0xa2, 0x28, 0xc6, + 0x3b, 0x85, 0xb3, 0x8f, 0xcb, 0x30, 0x97, 0xdc, 0xad, 0x4c, + 0x6a, 0x6c, 0x91, 0xf0, 0x38, 0x37, 0x83, 0xfd, 0x16, 0xb3, + 0x5b, 0x57, 0x45, 0x8f, 0x9a, 0xca, 0x42, 0x54, 0xc8, 0x2b, + 0xc4, 0x1a, 0x04, 0x1d, 0xab, 0x1c, 0x33, 0xfc, 0xfa, 0x96, + 0x7e, 0x58, 0xdd, 0x23, 0x06, 0x2b, 0xe0, 0xad, 0x73, 0xcd, + 0xa6, 0xf9, 0xbc, 0x1e, 0x7f, 0x8d, 0x42, 0x22, 0x9d, 0xcc, + 0x2d, 0x4a, 0x4f, 0x5e, 0x67, 0x59, 0xe0, 0xa5, 0xe2, 0x3e, + 0x7a, 0x7f, 0x63, 0xb0, 0x13, 0x43, 0xbd, 0x40, 0xf2, 0x46, + 0xa9, 0x8d, 0x9f, 0x34, 0x7b, 0x7c, 0x4f, 0xb9, 0x38, 0x36, + 0xb0, 0xfd, 0x51, 0x22, 0xb2, 0xdc, 0x78, 0x1f, 0xe2, 0xec, + 0x26, 0x92, 0x63, 0xfc, 0x49, 0x73, 0xb5, 0xf9, 0xc5, 0x6e, + 0xd2, 0x8b, 0xca, 0x79, 0x82, 0x37, 0x95, 0x67, 0x1e, 0x16, + 0x91, 0x64, 0xbd, 0x05, 0x3c, 0x56, 0x2d, 0xf3, 0xba, 0xf3, + 0xdb, 0xfd, 0x62, 0x41, 0x39, 0xa9, 0x33, 0x6c, 0xed, 0x93, + 0xd0, 0x27, 0xe5, 0x77, 0x14, 0x01, 0x97, 0x75, 0x88, 0xba, + 0xf3, 0x2e, 0x9c, 0x41, 0xfc, 0xe2, 0xba, 0xf1, 0x59, 0x5e, + 0xe5, 0xda, 0xa1, 0x5a, 0xac, 0x97, 0x4e, 0xa9, 0xf2, 0xa5, + 0x09, 0x6a, 0xc0, 0x84, 0x14, 0xe2, 0x63, 0xe7, 0xe8, 0x2e, + 0x37, 0x62, 0x20, 0xb2, 0x05, 0x63, 0xbe, 0xc8, 0x4d, 0xab, + 0xd6, 0x75, 0x3b, 0x5a, 0x4a, 0xdd, 0x1a, 0xb2, 0xec, 0x15, + 0xbb, 0xc9, 0x69, 0x2a, 0xd5, 0x74, 0x24, 0x57, 0x8c, 0x4e, + 0xa9, 0xa5, 0xb7, 0xb5, 0x44, 0xfb, 0xf7, 0xd1, 0x72, 0x11, + 0xf7, 0xe7, 0x62, 0x52, 0xe6, 0xd1, 0xc6, 0x18, 0x26, 0xe0, + 0xdc, 0xc1, 0xaa, 0x13, 0xa2, 0xb0, 0x1e, 0x10, 0xbb, 0x10, + 0xce, 0x70, 0x55, 0x04, 0x84, 0x75, 0x16, 0x1d, 0x3b, 0x45, + 0xcd, 0xbf, 0x01, 0x27, 0x1d, 0xbd, 0xb7, 0xb1, 0x4d, 0xf4, + 0x5c, 0x7c, 0xd8, 0xf7, 0x18, 0x82, 0xc0, 0x5d, 0x26, 0x0d, + 0x73, 0xa5, 0x96, 0xba, 0x5f, 0x95, 0xd9, 0x81, 0xee, 0x4a, + 0xe1, 0x4b, 0x89, 0xb2, 0xee, 0x62, 0x51, 0x2c, 0x0e, 0x35, + 0x7e, 0x14, 0x19, 0xa0, 0x56, 0x82, 0x5d, 0x3f, 0x87, 0x46, + 0x39, 0x87, 0x9f, 0xe0, 0xdb, 0x94, 0x50, 0xbf, 0x88, 0xd8, + 0x8d, 0xe2, 0x81, 0x4d, 0x6f, 0xeb, 0x93, 0xfe, 0xd9, 0xd2, + 0xac, 0x7d, 0x6f, 0x2b, 0x1b, 0x0f, 0xf3, 0xbf, 0xff, 0xb9, + 0x00, 0x71, 0xfa, 0x12, 0xfc, 0x95, 0x9e, 0xec, 0xe8, 0x66, + 0x6a, 0xc8, 0x59, 0xc7, 0xd9, 0x5b, 0x7d, 0xa6, 0xbf, 0x7a, + 0x1a, 0xf7, 0xb8, 0x11, 0x13, 0xee, 0xc0, 0xfc, 0xfa, 0x43, + 0x5d, 0x56, 0x0c, 0x74, 0x08, 0x1d, 0x09, 0xd8, 0xd4, 0x1a, + 0x63, 0xea, 0xb9, 0x5e, 0xef, 0xcb, 0xbd, 0xc7, 0x22, 0x29, + 0x0a, 0x3d, 0xea, 0xa1, 0x82, 0x04, 0x7e, 0x93, 0x60, 0xe0, + 0x56, 0xf1, 0x1b, 0x16, 0x86, 0x14, 0x88, 0x27, 0xac, 0x95, + 0xaf, 0x55, 0xf9, 0xb2, 0x06, 0xc6, 0xb8, 0x53, 0x76, 0x4f, + 0xaf, 0x78, 0xa6, 0xa4, 0x7c, 0x8f, 0xa7, 0x0f, 0x54, 0x15, + 0xd9, 0xf9, 0xda, 0x05, 0x69, 0x94, 0x65, 0xa1, 0x9c, 0xc0, + 0x8f, 0x7a, 0x32, 0x02, 0x5e, 0x3e, 0x10, 0xa8, 0xf5, 0x39, + 0xdd, 0x94, 0x85, 0x13, 0xc6, 0x55, 0xec, 0x9c, 0x5a, 0x9b, + 0x66, 0xc4, 0x3d, 0x64, 0x2b, 0xf9, 0xff, 0xf6, 0xe7, 0xd4, + 0xbb, 0x0d, 0x4b, 0xd8, 0x95, 0xfd, 0x2a, 0x14, 0xc2, 0x23, + 0xb7, 0x6e, 0x76, 0x75, 0x4e, 0x16, 0x45, 0x15, 0x43, 0x34, + 0x9d, 0x45, 0x54, 0x02, 0x24, 0x0b, 0x16, 0x9a, 0x7c, 0x44, + 0x18, 0x6d, 0x02, 0xb9, 0x2b, 0x4c, 0xc0, 0xc8, 0x45, 0xb6, + 0x5c, 0x96, 0xdb, 0x1e, 0xf1, 0xbd, 0xd4, 0x06, 0x7c, 0x37, + 0xb6, 0x6a, 0xfa, 0x89, 0x39, 0xdc, 0xb3, 0xdc, 0x23, 0x1e, + 0x4e, 0x90, 0xd2, 0x8c, 0x8c, 0xa1, 0xca, 0x7f, 0x66, 0xb4, + 0xc1, 0x8d, 0x3f, 0xc6, 0xd7, 0xac, 0x32, 0x84, 0x99, 0x1f, + 0x81, 0xc9, 0x3e, 0xb2, 0xdb, 0xad, 0x1c, 0xb6, 0x2c, 0x6a, + 0xf9, 0x76, 0x53, 0x77, 0x95, 0xf9, 0xbb, 0x34, 0x36, 0xbb, + 0x50, 0x6d, 0x5e, 0x8a, 0x97, 0x61, 0x8a, 0x28, 0xcc, 0x7c, + 0x86, 0xb5, 0xaa, 0x9f, 0x37, 0x5d, 0xf0, 0x1b, 0x2d, 0xee, + 0x02, 0x27, 0x1c, 0x9d, 0xf5, 0x7c, 0xad, 0xe5, 0x52, 0xfe, + 0x18, 0x91, 0x0b, 0x5f, 0x57, 0xcf, 0x7d, 0xfe, 0x0d, 0xd1, + 0xfb, 0xaf, 0xfd, 0x21, 0xca, 0x2e, 0x39, 0x6e, 0xb3, 0xf8, + 0x92, 0x16, 0xef, 0xc0, 0x3d, 0xed, 0xd0, 0x83, 0xcf, 0x77, + 0xb3, 0x98, 0x97, 0x3d, 0x6d, 0xb7, 0x88, 0xe4, 0x24, 0xcc, + 0x7f, 0xf3, 0x55, 0x04, 0x14, 0x2b, 0x1a, 0xb5, 0xe7, 0x65, + 0xc9, 0x44, 0xfb, 0xf0, 0x5f, 0xb0, 0x79, 0xae, 0x1c, 0x3e, + 0x57, 0x4e, 0x78, 0xfe, 0x1e, 0xf8, 0x5f, 0xd0, 0x14, 0x1f, + 0x25, 0x95, 0x84, 0x73, 0xc4, 0xe8, 0xd9, 0xd3, 0x70, 0xfb, + 0x2e, 0x9f, 0xce, 0xf8, 0x04, 0xdd, 0xf1, 0x50, 0xd0, 0xfc, + 0x53, 0x5d, 0xe5, 0x2b, 0xbb, 0x1c, 0x86, 0xb4, 0x80, 0xc0, + 0x55, 0xa3, 0x01, 0xaa, 0x6d, 0x60, 0x93, 0x0a, 0x13, 0x6c, + 0x7a, 0x66, 0x75, 0x5b, 0x15, 0x13, 0x70, 0x28, 0x17, 0xfc, + 0xe2, 0x24, 0x91, 0xda, 0xd2, 0xdd, 0xbe, 0x70, 0x4d, 0x79, + 0x17, 0x6f, 0x7c, 0x46, 0xaf, 0xe0, 0x67, 0x68, 0x97, 0xb1, + 0x1f, 0xac, 0x97, 0xe8, 0x3d, 0xbe, 0x6f, 0x61, 0xd7, 0xda, + 0xa5, 0xab, 0xb0, 0xf2, 0xcd, 0x75, 0x32, 0x4c, 0x4b, 0xb0, + 0xd3, 0xb4, 0x51, 0x91, 0x73, 0x3e, 0xa4, 0xbc, 0x35, 0x17, + 0x0f, 0x04, 0x71, 0x31, 0xda, 0x48, 0xff, 0x95, 0x35, 0x78, + 0x82, 0x19, 0x05, 0x2d, 0x33, 0x83, 0xb7, 0xfe, 0x41, 0xa1, + 0x2f, 0x22, 0x34, 0xb1, 0x8f, 0xa7, 0xcd, 0x48, 0x8d, 0xf0, + 0xc8, 0x35, 0x74, 0x7b, 0xf0, 0xde, 0x4b, 0x6e, 0xc2, 0x5c, + 0x21, 0xf8, 0xae, 0x25, 0x3f, 0xa4, 0x64, 0x0a, 0xc0, 0xcf, + 0xcf, 0xe1, 0x4d, 0xa0, 0xe7, 0xf0, 0x90, 0x0a, 0x18, 0x1b, + 0xce, 0xc3, 0xee, 0xef, 0x0d, 0x4c, 0x6f, 0x41, 0x4d, 0xdc, + 0x02, 0xb0, 0xc2, 0x8a, 0xd9, 0x4f, 0xa2, 0xaa, 0x11, 0x9d, + 0x5c, 0x2d, 0x24, 0x55, 0x3e, 0x9d, 0xcf, 0x8a, 0xb6, 0x99, + 0x16, 0xbe, 0xda, 0x13, 0xb2, 0xb2, 0xd6, 0x3d, 0xa4, 0xbb, + 0xfb, 0xb2, 0x21, 0x1a, 0xf3, 0x77, 0x85, 0x0a, 0x2b, 0x73, + 0xa0, 0xb1, 0x50, 0x1f, 0x49, 0xac, 0x19, 0x8e, 0x47, 0x97, + 0xc9, 0x9a, 0xef, 0x43, 0x2d, 0xb6, 0xbd, 0xa8, 0x3b, 0x96, + 0xc6, 0x80, 0x18, 0x78, 0x39, 0x51, 0xc4, 0xf2, 0x48, 0x86, + 0x05, 0xdb, 0x60, 0x55, 0x58, 0x8a, 0x61, 0xc2, 0x35, 0x7f, + 0xd0, 0x27, 0xf0, 0x1c, 0xef, 0x5c, 0xd9, 0x3f, 0xec, 0x5c, + 0xba, 0x73, 0x48, 0x59, 0xfe, 0x1c, 0xb8, 0x32, 0xf6, 0xbe, + 0x0d, 0x16, 0x48, 0x46, 0x3b, 0x2e, 0x0e, 0x2d, 0x24, 0x53, + 0x04, 0x43, 0xd2, 0x2f, 0x8f, 0xc3, 0x97, 0x2e, 0x15, 0x5a, + 0x67, 0x5e, 0xbe, 0xb9, 0xd0, 0x97, 0x9b, 0x22, 0xb8, 0x09, + 0x5a, 0xac, 0x8f, 0xd7, 0x92, 0xad, 0xa4, 0xbc, 0xdf, 0x68, + 0xf5, 0xce, 0x12, 0xda, 0x77, 0x2c, 0x25, 0xf3, 0x79, 0x52, + 0x07, 0x10, 0x80, 0xb7, 0x3b, 0x43, 0x91, 0xc6, 0xf8, 0x5d, + 0x7b, 0x59, 0x68, 0xc1, 0x84, 0xcd, 0xc9, 0x91, 0xa3, 0xc5, + 0x26, 0xf2, 0xbd, 0x3e, 0x73, 0x28, 0x9e, 0xed, 0x0d, 0x40, + 0x7e, 0x82, 0x96, 0x9e, 0xa3, 0xc1, 0xd2, 0xeb, 0x11, 0x52, + 0x7c, 0xa2, 0xd1, 0x04, 0x42, 0x88, 0xb1, 0xee, 0x1e, 0x26, + 0x37, 0x7d, 0x93, 0x9d, 0x09, 0x0d, 0x41, 0x69, 0x7f, 0xa1, + 0xa2, 0xb6, 0xc5, 0xca, 0xd2, 0x1e, 0x9c, 0x9e, 0xd4, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x0c, 0x15, 0x1c, 0x22, 0x28, + 0x00, 0x00, 0x00, 0x0a, 0x0f, 0x14, 0x1a, 0x25, 0x2a }; -static const int sizeof_bench_dilithium_level3_sig = - sizeof(bench_dilithium_level3_sig); +static const int sizeof_bench_mldsa_65_sig = + sizeof(bench_mldsa_65_sig); #endif #ifndef WOLFSSL_NO_ML_DSA_87 -static const unsigned char bench_dilithium_level5_sig[] = { - 0x78, 0xed, 0x1a, 0x3f, 0x41, 0xab, 0xf8, 0x93, 0x80, 0xf0, - 0xc6, 0xbf, 0x4a, 0xde, 0xaf, 0x29, 0x93, 0xe5, 0x9a, 0xbf, - 0x38, 0x08, 0x18, 0x33, 0xca, 0x7d, 0x5e, 0x65, 0xa4, 0xd2, - 0xd7, 0x45, 0xe3, 0xe7, 0x58, 0xfb, 0x05, 0xab, 0x65, 0x57, - 0xac, 0x6f, 0xf5, 0x43, 0x28, 0x5f, 0x9c, 0x9a, 0x3e, 0x35, - 0x84, 0xe4, 0xef, 0xa5, 0x57, 0x17, 0xad, 0x51, 0x44, 0x70, - 0x09, 0x00, 0x81, 0xbe, 0xfe, 0x14, 0x01, 0xfe, 0x0c, 0x94, - 0xbe, 0xa9, 0x89, 0xfd, 0x47, 0xfc, 0xb9, 0xd8, 0x17, 0x4d, - 0xd8, 0x73, 0xd5, 0x50, 0x9f, 0x13, 0x6c, 0x07, 0x71, 0x47, - 0xaa, 0x3c, 0xc0, 0x64, 0x00, 0x19, 0x2e, 0x74, 0x51, 0x0e, - 0x0f, 0x25, 0x30, 0x7f, 0x13, 0x96, 0xc6, 0xc5, 0xbf, 0xd4, - 0x82, 0xd3, 0x0d, 0xd3, 0x65, 0x4c, 0x72, 0x67, 0xe2, 0x37, - 0x6b, 0x3c, 0x8e, 0xa3, 0x36, 0x84, 0xe9, 0xaa, 0xac, 0x7d, - 0xf3, 0xac, 0xfc, 0x01, 0x50, 0x87, 0x88, 0xf6, 0xbf, 0x84, - 0xc3, 0xa0, 0x23, 0xe4, 0xe8, 0x01, 0x38, 0x39, 0x30, 0x8a, - 0xf3, 0xba, 0x92, 0x62, 0x37, 0xd7, 0x20, 0xd7, 0xf7, 0x41, - 0xff, 0xae, 0x81, 0x02, 0x29, 0x2a, 0x66, 0x8b, 0x20, 0xbe, - 0x61, 0x8d, 0xfb, 0x7c, 0x70, 0x14, 0xad, 0xf4, 0x94, 0x8c, - 0xee, 0x64, 0x3b, 0x9f, 0xe1, 0x6e, 0x68, 0x17, 0x07, 0xb8, - 0xfc, 0x99, 0xdc, 0xde, 0x69, 0x58, 0x8c, 0x97, 0x7d, 0xb3, - 0x2c, 0x9e, 0x90, 0x33, 0x2e, 0x7b, 0xbf, 0xf8, 0x6f, 0xf8, - 0x12, 0x64, 0xda, 0xc0, 0xfb, 0x30, 0xe6, 0xbf, 0x7b, 0x9a, - 0xde, 0xb5, 0xac, 0x9d, 0x6b, 0xcb, 0xe1, 0x0d, 0xf1, 0xbb, - 0xf3, 0x97, 0xc5, 0x08, 0xd3, 0x3e, 0xe3, 0xa4, 0xeb, 0x6f, - 0x6b, 0x62, 0x61, 0xc5, 0x0b, 0xa8, 0x02, 0xc2, 0xf1, 0xbe, - 0xbb, 0x93, 0x13, 0xa5, 0x8d, 0x7b, 0x5a, 0x6d, 0x1f, 0x28, - 0xbc, 0x35, 0xd8, 0xe8, 0xcf, 0x80, 0x8b, 0x4b, 0x02, 0x80, - 0x3b, 0xdc, 0x00, 0xce, 0x88, 0xb0, 0x62, 0x35, 0x7d, 0x51, - 0x7f, 0x5c, 0xb2, 0x23, 0x85, 0x47, 0x7e, 0x73, 0x88, 0x65, - 0xfd, 0x0d, 0x47, 0x33, 0xef, 0xb9, 0x75, 0x05, 0x86, 0x5d, - 0xd3, 0x98, 0xa6, 0x91, 0xe6, 0x8c, 0xe2, 0x71, 0x7a, 0x95, - 0xe0, 0x8c, 0x54, 0x4b, 0x68, 0x4d, 0x5a, 0xec, 0xad, 0xae, - 0x54, 0x4e, 0x3b, 0x0e, 0xcd, 0x70, 0xe6, 0x81, 0xbf, 0xf4, - 0x86, 0xab, 0xfe, 0xd8, 0xed, 0x69, 0xdd, 0x0f, 0x75, 0x8f, - 0x8e, 0xcd, 0x72, 0x40, 0x21, 0xee, 0x80, 0x6f, 0x9e, 0xa0, - 0x80, 0xf7, 0xf6, 0xa2, 0xf5, 0x04, 0x82, 0xea, 0xb6, 0xb1, - 0xa3, 0xfe, 0xa2, 0x2d, 0x83, 0xc7, 0x01, 0x4b, 0x27, 0x19, - 0x6a, 0x31, 0x04, 0x70, 0xce, 0x75, 0x22, 0x4b, 0x7a, 0x21, - 0x29, 0xfd, 0xe9, 0xcb, 0xbb, 0xca, 0x95, 0x0a, 0xd8, 0xcd, - 0x20, 0x2a, 0xb7, 0xbe, 0xdf, 0x2f, 0x0f, 0xfa, 0xf1, 0xc0, - 0x39, 0xf3, 0x74, 0x22, 0x05, 0x33, 0xca, 0x2a, 0x9c, 0x9f, - 0x06, 0x71, 0x90, 0x1e, 0x74, 0x4b, 0xbe, 0x9a, 0xc7, 0x1e, - 0x37, 0x9b, 0x96, 0x19, 0xfd, 0xa0, 0x61, 0x87, 0x93, 0xab, - 0x75, 0x79, 0xac, 0x2f, 0x83, 0xe1, 0x8c, 0x70, 0x54, 0x70, - 0x01, 0x93, 0xce, 0x76, 0x7a, 0x08, 0xe7, 0x75, 0xfb, 0x5e, - 0xa4, 0xcc, 0xd6, 0xeb, 0x90, 0xe2, 0x57, 0x07, 0x53, 0x88, - 0x8f, 0x7f, 0x29, 0x39, 0x80, 0xc4, 0x7f, 0x70, 0x6f, 0xff, - 0x44, 0x25, 0x2b, 0x9e, 0xa1, 0xbb, 0xda, 0x43, 0x53, 0x14, - 0xf8, 0x97, 0x08, 0xa4, 0xaf, 0xa0, 0xa5, 0x0c, 0xfa, 0xcc, - 0xba, 0xcd, 0x4f, 0xd3, 0x90, 0x28, 0x02, 0x25, 0xbe, 0xc6, - 0x35, 0x66, 0x99, 0xb0, 0x69, 0x46, 0xe5, 0xbf, 0x7e, 0x4f, - 0x53, 0x11, 0x1f, 0xa5, 0x2c, 0x9b, 0xd1, 0x70, 0x90, 0x34, - 0x66, 0xaa, 0x9f, 0xa8, 0x02, 0x3a, 0x05, 0x2b, 0x0a, 0xd0, - 0x72, 0x5d, 0x01, 0x7b, 0x02, 0xce, 0x18, 0xb9, 0x63, 0xd1, - 0x7d, 0xd2, 0x34, 0xa3, 0x2d, 0xaa, 0x78, 0xf0, 0x30, 0x6e, - 0x59, 0xe3, 0xf1, 0x1e, 0xf1, 0x33, 0x41, 0xde, 0xc4, 0x4e, - 0x88, 0x61, 0xc3, 0xb4, 0x6b, 0x21, 0x5d, 0xcc, 0x69, 0x44, - 0xf3, 0xb0, 0x84, 0x54, 0x2a, 0x23, 0x22, 0xa2, 0xc4, 0xba, - 0xad, 0x00, 0x57, 0x5b, 0xdf, 0xa0, 0xf7, 0x1c, 0x00, 0xc3, - 0x23, 0x93, 0xc0, 0x2f, 0x3b, 0x9d, 0x6e, 0x8c, 0x38, 0xa6, - 0x5e, 0xd8, 0x98, 0x7a, 0x6c, 0x90, 0xd5, 0x40, 0x3f, 0x8c, - 0xc3, 0xf0, 0x92, 0x66, 0xc4, 0xe5, 0xa8, 0x42, 0x25, 0x4c, - 0x56, 0x42, 0x37, 0x9a, 0xa4, 0x1d, 0xf5, 0xb0, 0xe3, 0x8a, - 0x9c, 0x57, 0x52, 0x63, 0xdc, 0xd9, 0xb0, 0xbf, 0xc3, 0xfc, - 0xfc, 0x6c, 0xab, 0x41, 0xae, 0xec, 0xc7, 0x40, 0x80, 0xb6, - 0x0b, 0x3c, 0xa9, 0xf5, 0x4f, 0x2d, 0xf6, 0x72, 0xe3, 0xba, - 0x13, 0x2c, 0x73, 0x61, 0x98, 0x66, 0x6f, 0x03, 0x88, 0x3b, - 0xe6, 0x95, 0x43, 0x33, 0x3b, 0xfe, 0xfd, 0x63, 0x8c, 0x00, - 0x8a, 0x67, 0x1c, 0x46, 0x0e, 0x0b, 0x51, 0x26, 0x79, 0x4f, - 0x7b, 0xb1, 0x36, 0x34, 0x52, 0x41, 0x7e, 0x74, 0xbb, 0x71, - 0x52, 0x8f, 0xcc, 0xf2, 0x99, 0x24, 0x3f, 0x18, 0xe6, 0xcf, - 0xdf, 0x6b, 0xfe, 0x77, 0xfa, 0xa8, 0x3f, 0xe3, 0x6b, 0xb7, - 0x32, 0x30, 0x8e, 0x16, 0x08, 0x59, 0x66, 0xdf, 0x95, 0x75, - 0x7d, 0xa3, 0x80, 0xf0, 0x0c, 0x1a, 0xa8, 0xe7, 0x87, 0x2f, - 0xe3, 0x39, 0x11, 0x82, 0x00, 0x3e, 0xe5, 0x71, 0x05, 0x7d, - 0x0c, 0x90, 0xae, 0xbc, 0xbf, 0xe0, 0x4b, 0x8f, 0x91, 0x85, - 0x1d, 0x0a, 0xa2, 0x36, 0x66, 0x18, 0x78, 0xd0, 0x0a, 0xa0, - 0xaf, 0x0f, 0x1c, 0x01, 0xdb, 0xb2, 0x21, 0x96, 0x25, 0xf7, - 0x9e, 0x3a, 0x9e, 0xc3, 0xe8, 0x92, 0x34, 0xaf, 0x7e, 0x3b, - 0x5f, 0xd9, 0x23, 0x97, 0x09, 0xf1, 0x87, 0x31, 0x3a, 0x94, - 0xc8, 0x9b, 0x52, 0xf4, 0x57, 0x54, 0x7b, 0x3e, 0x50, 0xd3, - 0x75, 0x2a, 0xba, 0x97, 0xd7, 0xec, 0x95, 0x6c, 0x35, 0x63, - 0xa4, 0xa1, 0x8f, 0xf5, 0xcc, 0xbe, 0x42, 0x65, 0x4e, 0x69, - 0x35, 0x55, 0xa5, 0x3e, 0xc4, 0xf0, 0xde, 0x60, 0x54, 0xdf, - 0xbb, 0x83, 0xad, 0xdf, 0xa5, 0x24, 0x8f, 0xbe, 0x0b, 0x16, - 0xfc, 0xf2, 0x64, 0xd5, 0x79, 0x68, 0xf3, 0x91, 0x81, 0x2a, - 0xd7, 0x1c, 0xc0, 0xdd, 0xe6, 0xb6, 0xb3, 0xa2, 0x4f, 0xc0, - 0x6d, 0x77, 0x02, 0xee, 0x43, 0xd6, 0x5e, 0x82, 0x66, 0x7f, - 0xb4, 0xe6, 0x5c, 0xff, 0x87, 0x1e, 0x1d, 0x6f, 0x1d, 0x96, - 0x6d, 0xbd, 0x90, 0x57, 0x65, 0xc2, 0x01, 0x35, 0xfa, 0x9a, - 0xc6, 0xe0, 0x4e, 0x2c, 0x4b, 0x16, 0xfa, 0x0d, 0x38, 0x87, - 0x39, 0x2c, 0x2b, 0x48, 0x14, 0x92, 0x3d, 0x83, 0x00, 0xa9, - 0x1a, 0x3d, 0x4d, 0x30, 0x23, 0x48, 0xcd, 0xd5, 0xcd, 0x01, - 0xb1, 0x45, 0x85, 0xcc, 0x66, 0x47, 0x1d, 0x63, 0x3d, 0x70, - 0xb8, 0x0c, 0xfd, 0xe3, 0xb2, 0x0f, 0x64, 0x6e, 0xb9, 0x2b, - 0xe5, 0xb0, 0x4d, 0x44, 0x4d, 0x66, 0x1a, 0xfa, 0x49, 0xbb, - 0xc3, 0xb8, 0xad, 0x64, 0x23, 0x7e, 0x71, 0x9f, 0x59, 0xec, - 0x25, 0xa8, 0x5e, 0x11, 0xd6, 0x6e, 0xc9, 0x09, 0xe7, 0xb9, - 0x6a, 0x63, 0x91, 0xaa, 0x5d, 0xd2, 0x8c, 0x91, 0xe8, 0x8d, - 0x35, 0x6d, 0x10, 0xf6, 0xfc, 0x6a, 0x3c, 0x77, 0x90, 0xf8, - 0x2a, 0x49, 0x13, 0x7f, 0xdb, 0xf5, 0x0c, 0xe9, 0xc8, 0x57, - 0xc6, 0xfd, 0x26, 0x8d, 0x79, 0xb5, 0xdd, 0x47, 0x74, 0x6e, - 0xe8, 0x8f, 0x50, 0xf5, 0xa7, 0x9e, 0xd1, 0x74, 0x10, 0xbb, - 0xf4, 0x8f, 0x8f, 0x0d, 0xcd, 0x1f, 0xf6, 0x59, 0xb8, 0x6c, - 0xd2, 0x37, 0x83, 0x28, 0xb2, 0x36, 0xc1, 0x39, 0x5b, 0xde, - 0x59, 0xee, 0x77, 0xa2, 0x6e, 0x67, 0xc6, 0xea, 0x1d, 0x2b, - 0x41, 0x8f, 0x6f, 0x96, 0x94, 0x1b, 0x5d, 0xab, 0x30, 0x53, - 0x1e, 0xf8, 0x17, 0x06, 0xea, 0xcc, 0x98, 0xa8, 0xdf, 0x81, - 0xe1, 0x80, 0xb7, 0xad, 0x69, 0xcb, 0x8f, 0x81, 0x1e, 0x76, - 0x75, 0x3c, 0x11, 0x9b, 0x38, 0x95, 0xa7, 0x87, 0x1f, 0xd9, - 0x76, 0x82, 0x21, 0x13, 0x25, 0x20, 0x42, 0xd3, 0x8c, 0xd9, - 0x1c, 0x64, 0xed, 0xe9, 0x55, 0xb5, 0x29, 0x98, 0x85, 0x7c, - 0x01, 0x94, 0xaa, 0xdd, 0x8c, 0x78, 0x08, 0x99, 0x99, 0x5a, - 0xf6, 0x61, 0x4c, 0xe0, 0x99, 0xf8, 0x15, 0x74, 0x2e, 0x0d, - 0x14, 0x89, 0x11, 0x84, 0xcd, 0x78, 0x0c, 0x6b, 0x48, 0xde, - 0xb4, 0xd6, 0x05, 0xbd, 0x99, 0x58, 0xb7, 0xe5, 0xc5, 0x7a, - 0x43, 0x18, 0x55, 0x33, 0x16, 0x2b, 0xfa, 0x27, 0xf5, 0xbb, - 0xaa, 0x52, 0xb5, 0x28, 0x5c, 0xfe, 0x61, 0x7f, 0x7a, 0x70, - 0xc2, 0x32, 0x4b, 0x05, 0x8d, 0x7b, 0x4d, 0x22, 0x57, 0x25, - 0x40, 0x46, 0x7c, 0xad, 0x2f, 0x8a, 0xc8, 0x16, 0xd6, 0xac, - 0x4e, 0xe3, 0xe3, 0x29, 0xe4, 0xe8, 0x00, 0x2b, 0xc9, 0xe3, - 0x3a, 0x6f, 0x66, 0xf1, 0x37, 0x37, 0x52, 0x88, 0x77, 0xf6, - 0xbd, 0x59, 0x5f, 0xf8, 0x11, 0x46, 0x7b, 0x12, 0x88, 0x2f, - 0x4b, 0x0d, 0x16, 0x89, 0x3e, 0x2a, 0x56, 0x58, 0xa8, 0x1c, - 0xee, 0x23, 0xd5, 0x66, 0x86, 0x5f, 0x59, 0x55, 0xac, 0x07, - 0xfd, 0xda, 0x6b, 0xf1, 0xc7, 0x01, 0x19, 0xdb, 0xff, 0x63, - 0x6f, 0x27, 0xdb, 0xa1, 0xc7, 0xe9, 0xe0, 0xdb, 0xe4, 0x9a, - 0xce, 0xf5, 0xac, 0x68, 0xab, 0x59, 0x0c, 0x83, 0xa3, 0x1c, - 0x2a, 0x86, 0x55, 0xe2, 0xaa, 0xa1, 0xb3, 0xed, 0xc2, 0x2d, - 0x43, 0xc5, 0x13, 0x68, 0xe4, 0x83, 0x3e, 0xd5, 0x7f, 0xf7, - 0xd5, 0xd0, 0x60, 0xd3, 0x70, 0x7f, 0x88, 0xaa, 0xca, 0x74, - 0xcc, 0x50, 0x8d, 0x55, 0x9c, 0xfe, 0x4a, 0xc6, 0xc9, 0x36, - 0xf7, 0x27, 0x26, 0x64, 0xd3, 0x6c, 0xdb, 0x16, 0x31, 0x81, - 0xe9, 0xce, 0x73, 0x60, 0x61, 0x9c, 0x0f, 0xb5, 0x6e, 0x68, - 0xbc, 0xb1, 0x9e, 0x9f, 0xcd, 0x6c, 0x27, 0x31, 0x2d, 0x40, - 0x36, 0xce, 0x91, 0xee, 0x47, 0xdc, 0xa0, 0x4f, 0xd7, 0x14, - 0x4f, 0x93, 0x00, 0xc4, 0x34, 0xca, 0xd4, 0x42, 0x21, 0x90, - 0xf6, 0x9d, 0xea, 0x45, 0x15, 0xfe, 0x2d, 0xd6, 0xab, 0xc2, - 0x36, 0x47, 0xc0, 0x5b, 0xd2, 0xae, 0x53, 0x33, 0xb0, 0x2d, - 0x29, 0xa3, 0x14, 0xda, 0xa4, 0x48, 0xc1, 0x57, 0x0c, 0xdc, - 0x72, 0x4a, 0xd0, 0xf5, 0x5b, 0x9a, 0x57, 0x1d, 0x06, 0xc8, - 0x0f, 0xc7, 0x5b, 0x70, 0xbb, 0x27, 0xf4, 0xe2, 0xf4, 0xf3, - 0x3c, 0xdc, 0xba, 0x43, 0xc4, 0x4e, 0xe2, 0x96, 0xd4, 0x6c, - 0x33, 0x3e, 0xbf, 0x85, 0xf7, 0x3c, 0x1d, 0x46, 0x59, 0x4e, - 0xa1, 0xa7, 0xa3, 0x76, 0x55, 0x8a, 0x72, 0x83, 0xd0, 0x45, - 0x86, 0x38, 0xa5, 0x4d, 0xc8, 0x62, 0xe4, 0x8a, 0xd5, 0x8e, - 0xb7, 0x4c, 0x6e, 0xaf, 0xa4, 0xbe, 0x88, 0x87, 0x77, 0xd1, - 0x7b, 0xb2, 0x1d, 0xe0, 0x1e, 0x53, 0x30, 0x31, 0x15, 0x6c, - 0x10, 0x81, 0x03, 0x55, 0xa7, 0x69, 0xb6, 0xa5, 0x48, 0xf4, - 0xb2, 0x3b, 0x76, 0x8b, 0x2e, 0x42, 0xa6, 0xaa, 0x7e, 0x66, - 0x57, 0xc2, 0x11, 0xc5, 0x2c, 0x7d, 0x96, 0xdf, 0xe3, 0x58, - 0x12, 0x98, 0x18, 0x0d, 0x87, 0xbd, 0x64, 0xbd, 0xfe, 0x6d, - 0xad, 0x6d, 0x1e, 0xf6, 0x34, 0x01, 0xb5, 0x56, 0xe8, 0x6a, - 0xb3, 0x8c, 0x70, 0x84, 0x36, 0x17, 0xd6, 0x4b, 0xaa, 0x57, - 0xab, 0xb3, 0x45, 0x30, 0x36, 0x10, 0xd4, 0xee, 0x8a, 0xc9, - 0x29, 0xd1, 0x92, 0x9b, 0xe2, 0x7c, 0x12, 0xd1, 0x29, 0x62, - 0x41, 0x69, 0xae, 0x3a, 0x50, 0xcc, 0x89, 0x50, 0x2e, 0xe6, - 0x07, 0xf8, 0x9c, 0x98, 0x80, 0xd5, 0xa3, 0xc8, 0x74, 0xfb, - 0xfc, 0x91, 0x16, 0x02, 0xdc, 0xf0, 0x42, 0x49, 0xbc, 0xc9, - 0x2f, 0x7f, 0x8d, 0x93, 0xf7, 0xf0, 0x74, 0xb7, 0xd1, 0x55, - 0xfc, 0x79, 0x03, 0x37, 0xfb, 0xf6, 0x7d, 0x2f, 0x2d, 0xf8, - 0x6b, 0xc5, 0xf9, 0x66, 0x38, 0xf5, 0xfd, 0x64, 0xc6, 0x08, - 0x99, 0xb3, 0x25, 0xad, 0xf4, 0xfd, 0x69, 0x2f, 0xf1, 0x18, - 0x46, 0xd6, 0x5c, 0x1a, 0x37, 0xcd, 0xee, 0xa3, 0xbf, 0x0f, - 0x57, 0x5c, 0xc3, 0x97, 0x94, 0x84, 0x89, 0xbe, 0x00, 0xf6, - 0x40, 0xe9, 0x5a, 0x52, 0xaf, 0x3a, 0x5b, 0xf4, 0x56, 0xb0, - 0x04, 0x49, 0xc6, 0x32, 0x8c, 0xa1, 0x0a, 0xd8, 0x88, 0xa1, - 0xc3, 0xb7, 0x8b, 0x96, 0xc3, 0x39, 0x51, 0x50, 0x83, 0xa6, - 0xf0, 0x6d, 0xe7, 0x6e, 0x20, 0xff, 0x9d, 0xac, 0x03, 0x57, - 0xbc, 0xcb, 0x6a, 0x19, 0xa7, 0xc5, 0xd2, 0x44, 0x4f, 0x17, - 0x1e, 0x9a, 0x8d, 0x97, 0x25, 0x55, 0x52, 0x49, 0xe2, 0x48, - 0xae, 0x4b, 0x3f, 0x94, 0x5a, 0xb2, 0x2d, 0x40, 0xd9, 0x85, - 0xef, 0x03, 0xa0, 0xd3, 0x66, 0x9a, 0x8f, 0x7b, 0xc0, 0x8d, - 0x54, 0x95, 0x42, 0x49, 0xeb, 0x15, 0x00, 0xf3, 0x6d, 0x6f, - 0x40, 0xf2, 0x8b, 0xc1, 0x50, 0xa6, 0x22, 0x3b, 0xd6, 0x88, - 0xa1, 0xf7, 0xb0, 0x1f, 0xcd, 0x20, 0x4e, 0x5b, 0xad, 0x66, - 0x4a, 0xda, 0x40, 0xee, 0x4c, 0x4c, 0x3e, 0xa7, 0x75, 0x51, - 0x90, 0xba, 0xee, 0x59, 0xbc, 0xe3, 0xcd, 0x4d, 0xb9, 0x57, - 0xb7, 0xf8, 0xc1, 0xb9, 0x8d, 0x0f, 0x58, 0x2c, 0x4c, 0x98, - 0xa6, 0x9c, 0xd9, 0x0e, 0x25, 0x4f, 0xea, 0x4c, 0x15, 0x0b, - 0x89, 0xe4, 0xac, 0xa1, 0x5a, 0xa1, 0xfd, 0x5b, 0xc6, 0xfe, - 0xf0, 0xf1, 0x4c, 0xa7, 0x60, 0xbc, 0xc3, 0xa5, 0x80, 0x00, - 0x3b, 0x3f, 0x22, 0x38, 0x60, 0x40, 0x76, 0x52, 0x83, 0x32, - 0xee, 0x20, 0x6a, 0xf9, 0x1e, 0x6b, 0x99, 0x52, 0xe7, 0x04, - 0xdc, 0x5a, 0x9d, 0x77, 0x8a, 0xdd, 0x9b, 0x53, 0x19, 0xff, - 0x69, 0x8c, 0xbc, 0xc6, 0xe0, 0x79, 0x0d, 0x3d, 0x3d, 0x54, - 0x5b, 0xe0, 0x47, 0x5b, 0x71, 0x05, 0x98, 0x8f, 0xbb, 0x65, - 0xe1, 0x31, 0x9a, 0xc8, 0x1e, 0x7a, 0x4a, 0xf8, 0xcb, 0x17, - 0xd1, 0x83, 0x58, 0xb1, 0xc0, 0xe4, 0xb1, 0x85, 0xca, 0xa5, - 0xf8, 0x0e, 0xd1, 0x0c, 0xe8, 0x71, 0xc3, 0xfa, 0xbf, 0x1d, - 0xd6, 0x98, 0x03, 0xed, 0x77, 0x3b, 0x55, 0xaf, 0x69, 0x72, - 0x6b, 0x42, 0x31, 0x98, 0x95, 0xd5, 0x79, 0xa5, 0x4c, 0x51, - 0xcf, 0x02, 0x65, 0x93, 0xf2, 0x71, 0xdc, 0xde, 0x9a, 0xa3, - 0x86, 0xa7, 0xea, 0xcf, 0xd7, 0xe5, 0x00, 0xde, 0x40, 0x02, - 0xcd, 0x6b, 0x46, 0x0b, 0xbb, 0xbf, 0x77, 0x5f, 0x9d, 0x7c, - 0xa4, 0x7f, 0x7c, 0x8a, 0xba, 0xd6, 0x99, 0xc5, 0xaa, 0x06, - 0x36, 0xe1, 0x7e, 0x9c, 0x6f, 0x28, 0xd4, 0x6e, 0x1d, 0x5b, - 0xdd, 0x01, 0x24, 0xbd, 0x6c, 0x5d, 0x87, 0x3c, 0xc1, 0xf6, - 0x93, 0x37, 0xe2, 0x3b, 0x70, 0xc4, 0xd8, 0x10, 0x0e, 0x44, - 0x37, 0x00, 0xe3, 0x07, 0xbd, 0x67, 0xd3, 0x9d, 0xe6, 0xe7, - 0x48, 0x1b, 0xe0, 0x79, 0xb3, 0x30, 0x91, 0x89, 0x0f, 0x89, - 0x77, 0xfa, 0x13, 0x85, 0xd0, 0x32, 0xbd, 0xc1, 0x9e, 0x52, - 0x04, 0x80, 0x54, 0xb1, 0x08, 0x39, 0x20, 0xda, 0x3e, 0xf1, - 0xd9, 0x15, 0x74, 0x55, 0x06, 0xfc, 0x4d, 0x85, 0xd4, 0x98, - 0x02, 0x64, 0x10, 0x86, 0xd7, 0xcd, 0x01, 0x0d, 0x85, 0xa0, - 0x78, 0xb0, 0x58, 0x99, 0x7b, 0xdf, 0xe4, 0x8c, 0x3f, 0xab, - 0xc0, 0xbc, 0xa5, 0x30, 0x28, 0xe1, 0x4e, 0x02, 0x98, 0xab, - 0x03, 0xf3, 0x21, 0xe7, 0xa7, 0xe7, 0xc3, 0x5f, 0x98, 0xc0, - 0x83, 0x02, 0xe8, 0x8a, 0x30, 0x75, 0x95, 0xcf, 0x77, 0x83, - 0xfb, 0x32, 0x5a, 0xf9, 0x13, 0xed, 0xdb, 0xda, 0xc3, 0x84, - 0x4b, 0x8f, 0x1a, 0xf0, 0xad, 0x8e, 0xcf, 0xe3, 0xa7, 0x2b, - 0xb5, 0x44, 0x75, 0xd6, 0xda, 0x33, 0x81, 0x22, 0xa7, 0x6a, - 0xbd, 0x21, 0x64, 0x85, 0xfa, 0x65, 0x8e, 0xc4, 0x58, 0xec, - 0xc4, 0x18, 0x90, 0xa3, 0xcc, 0x2e, 0xaa, 0xa2, 0x2e, 0x46, - 0x7a, 0x4a, 0x35, 0xbf, 0x58, 0x78, 0x2b, 0x1e, 0x72, 0xe5, - 0x80, 0xc9, 0xe0, 0x9e, 0x43, 0x01, 0xcc, 0xe1, 0x0c, 0x00, - 0xe9, 0xc1, 0xa5, 0x1a, 0x9b, 0x4e, 0x6e, 0x34, 0x32, 0xfd, - 0x86, 0xb7, 0xae, 0xc3, 0x6e, 0x69, 0x04, 0xf6, 0x6a, 0x92, - 0x78, 0xb1, 0x1f, 0x9d, 0x5e, 0x0c, 0xf9, 0xc4, 0x1a, 0xf6, - 0xb4, 0x8a, 0x63, 0xb5, 0x87, 0x5b, 0xfb, 0x50, 0xbf, 0xd5, - 0x17, 0x97, 0x8e, 0x55, 0x1c, 0xfe, 0x82, 0xf6, 0xa7, 0x9c, - 0x0b, 0xc9, 0x0a, 0xf6, 0x7f, 0x70, 0xd1, 0x00, 0xed, 0x1c, - 0x6c, 0x3a, 0x95, 0xed, 0x61, 0xa4, 0xd6, 0x57, 0xfb, 0x57, - 0xf8, 0x9b, 0x4c, 0xce, 0x50, 0x26, 0x5c, 0x19, 0xd2, 0xa7, - 0xd6, 0xe8, 0x3c, 0x29, 0x34, 0xfb, 0x26, 0x7f, 0xc5, 0x78, - 0xbf, 0xfe, 0xb6, 0x2a, 0x5a, 0x62, 0x8e, 0x31, 0x9b, 0x57, - 0xa4, 0xe7, 0x4d, 0x3d, 0x18, 0x05, 0xf0, 0x94, 0xbb, 0x04, - 0xfa, 0x0a, 0x92, 0xf4, 0xc6, 0x7f, 0x16, 0xa2, 0x31, 0xed, - 0xc1, 0xb4, 0x62, 0x54, 0x3a, 0x23, 0x12, 0x6a, 0x76, 0xcc, - 0x8c, 0x91, 0x89, 0x58, 0x8c, 0x20, 0x23, 0xd9, 0xaa, 0x0d, - 0x80, 0xbe, 0xb9, 0xb4, 0x40, 0x1e, 0xff, 0xa9, 0xf7, 0x71, - 0x0a, 0xa0, 0x0a, 0xdf, 0x11, 0x0b, 0x66, 0x3f, 0xf2, 0x4d, - 0x5d, 0x39, 0x7c, 0x77, 0xe1, 0xb1, 0x09, 0xa1, 0x6b, 0x2e, - 0x30, 0x43, 0x33, 0x80, 0x6e, 0x6a, 0x1d, 0x47, 0xd9, 0xd6, - 0xac, 0xdc, 0x3f, 0x16, 0xb1, 0x58, 0x11, 0x9f, 0x67, 0xd7, - 0x15, 0x45, 0xd8, 0xc3, 0x69, 0x24, 0x8d, 0xac, 0xff, 0xc3, - 0x43, 0xfd, 0x24, 0xaf, 0xf1, 0xc8, 0x3a, 0xc7, 0xd6, 0x1f, - 0x56, 0x26, 0x16, 0xe6, 0x30, 0xcd, 0x6e, 0x0a, 0x63, 0x2a, - 0x7b, 0x86, 0xd7, 0x65, 0x39, 0x45, 0x7c, 0xe6, 0xa0, 0xe6, - 0x38, 0xed, 0x54, 0x84, 0x00, 0x4d, 0x8e, 0xc2, 0xba, 0x56, - 0x9b, 0xf3, 0xe1, 0xe8, 0x7d, 0xfe, 0x47, 0xf0, 0x58, 0xe7, - 0x59, 0x60, 0x97, 0x2e, 0x57, 0x1a, 0x09, 0x1f, 0x8b, 0x2b, - 0x0b, 0x47, 0x75, 0xc0, 0xb3, 0x79, 0xce, 0x10, 0x47, 0x6d, - 0xfc, 0xcb, 0x22, 0x61, 0x5c, 0x39, 0xc4, 0x3f, 0xc5, 0xef, - 0xb8, 0xc8, 0x88, 0x52, 0xce, 0x90, 0x17, 0xf5, 0x3c, 0xa9, - 0x87, 0x6f, 0xcb, 0x2f, 0x11, 0x53, 0x65, 0x9b, 0x74, 0x21, - 0x3e, 0xdd, 0x7b, 0x1f, 0x19, 0x9f, 0x53, 0xe6, 0xab, 0xc0, - 0x56, 0xba, 0x80, 0x19, 0x5d, 0x3f, 0xc7, 0xe2, 0xfb, 0x8c, - 0xe2, 0x93, 0xe0, 0x31, 0xc9, 0x33, 0x31, 0x23, 0x31, 0xa1, - 0x36, 0x4c, 0x62, 0xd8, 0x0a, 0xfd, 0x85, 0x97, 0xae, 0xa9, - 0xe9, 0x58, 0x29, 0x17, 0x33, 0x09, 0x5a, 0x8e, 0xa3, 0x90, - 0x41, 0xd3, 0xfc, 0x24, 0x98, 0x61, 0x4d, 0x30, 0x1f, 0x76, - 0x8f, 0xfc, 0xd0, 0x96, 0x8b, 0x2e, 0x9b, 0x24, 0x73, 0x35, - 0x00, 0xb7, 0xf6, 0xe8, 0xba, 0xec, 0x98, 0x74, 0x41, 0xa4, - 0x47, 0x10, 0x0d, 0xbc, 0xba, 0xd1, 0xe7, 0xdb, 0x12, 0xcb, - 0x5f, 0x02, 0xb1, 0xa6, 0xa0, 0xd7, 0x28, 0x30, 0x3e, 0x0a, - 0x5c, 0x5f, 0xe6, 0x2f, 0x3c, 0xde, 0x46, 0x60, 0xaf, 0x07, - 0x5f, 0xed, 0x08, 0xc0, 0x06, 0x58, 0xba, 0xd7, 0x36, 0x5b, - 0xa0, 0x4a, 0xf7, 0xa1, 0x05, 0x9b, 0x00, 0xda, 0x49, 0xdc, - 0xbf, 0xea, 0xe1, 0x03, 0xda, 0x95, 0x95, 0xa0, 0xfa, 0x2e, - 0xf1, 0x60, 0x11, 0x47, 0xdd, 0xb3, 0xfb, 0x0b, 0xa2, 0x92, - 0xcf, 0x73, 0xbb, 0xce, 0x82, 0x71, 0xbc, 0xbd, 0x50, 0x64, - 0xf1, 0x96, 0x48, 0x48, 0x93, 0xf8, 0xdc, 0x1c, 0x18, 0x12, - 0xc6, 0x17, 0x6a, 0xa9, 0xc1, 0x4d, 0x6f, 0x76, 0xda, 0x2f, - 0x4e, 0x59, 0xdd, 0x8b, 0x1c, 0xa5, 0x30, 0xb6, 0xe9, 0x88, - 0x8f, 0x75, 0x0c, 0xcd, 0xd8, 0x61, 0xf4, 0x28, 0xc5, 0x9a, - 0xcd, 0x77, 0x0d, 0x36, 0x5f, 0x75, 0xa5, 0x0a, 0x77, 0x20, - 0x28, 0x5a, 0xac, 0x5f, 0xa1, 0x83, 0x67, 0x70, 0xb7, 0xd8, - 0x23, 0x48, 0x60, 0xa8, 0xd0, 0xaf, 0xee, 0x7a, 0xb8, 0x25, - 0xd7, 0x8f, 0x82, 0x8c, 0xd0, 0x81, 0x7a, 0x49, 0x69, 0xe4, - 0x22, 0x73, 0x29, 0x48, 0xc8, 0x09, 0x72, 0x16, 0xf8, 0x3d, - 0xff, 0x13, 0xac, 0x98, 0x03, 0x76, 0x33, 0xcb, 0x19, 0xb0, - 0x22, 0x5b, 0x1e, 0x16, 0x29, 0xb9, 0xcc, 0xa6, 0x92, 0xd8, - 0xed, 0x93, 0x0f, 0xbd, 0x10, 0x98, 0x53, 0x0a, 0x07, 0x7f, - 0xd6, 0x51, 0x76, 0xda, 0xdc, 0x0c, 0xeb, 0x2a, 0x95, 0xd0, - 0x3e, 0xa6, 0xc4, 0xc6, 0xd8, 0xfb, 0x1b, 0x2a, 0x7f, 0xf1, - 0x08, 0xbe, 0xd3, 0xed, 0x67, 0x63, 0x5f, 0x1d, 0x29, 0xdb, - 0x47, 0x03, 0x4a, 0xf4, 0x6b, 0xb4, 0x46, 0x02, 0x28, 0x4f, - 0x88, 0x9b, 0x46, 0x66, 0x40, 0x56, 0x34, 0x4c, 0xec, 0x8e, - 0x0b, 0x5d, 0x14, 0x94, 0x91, 0xfc, 0xdc, 0x0c, 0xdc, 0x5b, - 0x45, 0x12, 0x7e, 0xa1, 0xe9, 0x75, 0x38, 0xcb, 0xd3, 0x6b, - 0xd7, 0xa4, 0x24, 0x94, 0x78, 0x09, 0x7f, 0x77, 0xc8, 0x6d, - 0xe1, 0x82, 0x1c, 0x1c, 0x91, 0xc6, 0x38, 0x9e, 0x3b, 0x3d, - 0x31, 0xdd, 0x9e, 0x46, 0x58, 0x7a, 0x42, 0x16, 0x6f, 0xfd, - 0x7d, 0x8c, 0xf5, 0xf0, 0x9f, 0x92, 0x6e, 0xbe, 0x47, 0xa6, - 0x1e, 0x8e, 0x82, 0x15, 0x24, 0xc3, 0x1b, 0xb0, 0xd1, 0x68, - 0xf9, 0xd1, 0x7c, 0x60, 0x98, 0x86, 0xd9, 0x53, 0xa2, 0x38, - 0x62, 0xf4, 0x72, 0x71, 0xcb, 0xb9, 0x35, 0xef, 0xb9, 0x49, - 0x3a, 0x73, 0xb2, 0xd7, 0x0f, 0x90, 0xf5, 0x2c, 0x5b, 0xf5, - 0xfd, 0x39, 0x17, 0xf7, 0xe4, 0x69, 0x81, 0x0f, 0x6b, 0xe7, - 0x32, 0xd2, 0xdc, 0x5d, 0x40, 0xbf, 0x41, 0x95, 0x89, 0x81, - 0x29, 0x80, 0x40, 0xa3, 0xac, 0xd2, 0xc7, 0xf7, 0xe8, 0xd0, - 0x45, 0xed, 0x48, 0x43, 0x3a, 0xed, 0x8d, 0xef, 0x37, 0xe1, - 0x24, 0x9a, 0x67, 0x9a, 0x6b, 0x71, 0x4f, 0x9a, 0xb9, 0x2c, - 0x1b, 0x10, 0x48, 0xe2, 0x31, 0x1e, 0xbb, 0xf2, 0x4a, 0xad, - 0x04, 0xc7, 0xd7, 0xf2, 0xe8, 0x83, 0x5f, 0xe8, 0xa2, 0x81, - 0x95, 0xf9, 0x60, 0x51, 0x9c, 0x99, 0x76, 0x69, 0x76, 0x4e, - 0xbd, 0x44, 0x52, 0x36, 0xca, 0xd8, 0x6e, 0xf7, 0x1a, 0xa1, - 0x54, 0xdf, 0x90, 0x52, 0x94, 0xb6, 0x3a, 0xcb, 0x43, 0x56, - 0x11, 0xde, 0xa0, 0xe1, 0x45, 0x8a, 0x80, 0x2d, 0xaf, 0x1f, - 0x24, 0x3f, 0x80, 0x17, 0x1f, 0x28, 0xbb, 0xcc, 0x1a, 0xd2, - 0x2d, 0xa6, 0x9e, 0xe0, 0xdc, 0xf0, 0x98, 0x16, 0x58, 0x88, - 0xc6, 0xf1, 0x81, 0x71, 0x91, 0x8f, 0xa2, 0xab, 0xa5, 0xe6, - 0x68, 0x1f, 0xa5, 0x86, 0xb5, 0xd9, 0x05, 0xba, 0x50, 0x67, - 0x0b, 0x1e, 0xfe, 0x42, 0x50, 0xf8, 0x01, 0xf8, 0x38, 0x92, - 0x57, 0x86, 0x08, 0x47, 0xee, 0x23, 0x11, 0x60, 0x61, 0x1a, - 0x77, 0x3c, 0x1a, 0x8e, 0x08, 0xe3, 0xaf, 0x84, 0x04, 0x75, - 0x15, 0x47, 0x7a, 0x83, 0x8e, 0x92, 0x3e, 0xe8, 0xf0, 0xc2, - 0x81, 0x89, 0x3b, 0x73, 0x81, 0xe5, 0xe8, 0x97, 0x97, 0x63, - 0x64, 0xf3, 0xa9, 0x1b, 0x61, 0x65, 0x7f, 0x0e, 0x47, 0x6b, - 0x14, 0x57, 0x29, 0x8f, 0x91, 0x35, 0x43, 0x10, 0x12, 0x86, - 0x99, 0xec, 0xc8, 0x9e, 0x67, 0x90, 0x20, 0x21, 0x3c, 0x83, - 0xdb, 0x73, 0x4e, 0x8e, 0x7d, 0x86, 0xde, 0xb8, 0xd8, 0xfa, - 0x23, 0x1f, 0x5a, 0xe4, 0xc7, 0x0c, 0x1d, 0x5e, 0xd1, 0x10, - 0x58, 0xd5, 0x86, 0xfa, 0x40, 0x30, 0x0a, 0x78, 0x0a, 0xa5, - 0x56, 0xd5, 0xe6, 0x86, 0xd4, 0x14, 0x77, 0x32, 0xcd, 0x07, - 0xf9, 0xbe, 0x7a, 0xd8, 0xbc, 0x91, 0xe0, 0xda, 0x76, 0x6b, - 0x97, 0x10, 0xda, 0xea, 0x27, 0xa2, 0x67, 0x6d, 0x94, 0x27, - 0x6e, 0xea, 0xca, 0x56, 0x45, 0x32, 0x1d, 0x38, 0x12, 0x21, - 0x33, 0x2c, 0x3c, 0x5c, 0x33, 0xb0, 0x9e, 0x80, 0x0b, 0x4e, - 0xbb, 0x09, 0x5e, 0x56, 0x54, 0xb0, 0x9b, 0x7e, 0xb6, 0x00, - 0xe8, 0x63, 0x19, 0x85, 0xf1, 0x4d, 0x65, 0x9d, 0x1f, 0x8d, - 0x18, 0xcc, 0x63, 0xc6, 0xd9, 0xa6, 0xbc, 0xe7, 0x42, 0x55, - 0x12, 0xdc, 0x8c, 0x26, 0x2d, 0x8d, 0xc2, 0xe9, 0x3b, 0xbc, - 0xed, 0x06, 0x08, 0x31, 0xb0, 0xe0, 0x99, 0xe2, 0x86, 0x81, - 0x88, 0x4a, 0xac, 0x1f, 0x4a, 0xb2, 0x1e, 0x1e, 0x4c, 0xb2, - 0x9f, 0x27, 0xa0, 0xd9, 0x8a, 0x7e, 0xe7, 0xa3, 0xad, 0xeb, - 0x2c, 0xfd, 0x14, 0xc6, 0x4b, 0x26, 0xce, 0x38, 0xb9, 0x01, - 0x9e, 0xde, 0xc8, 0x7b, 0x82, 0x2f, 0xaa, 0x72, 0x80, 0xbe, - 0x3a, 0x35, 0x95, 0xc8, 0xf3, 0x7c, 0x36, 0x68, 0x02, 0xdc, - 0xa2, 0xda, 0xef, 0xd7, 0xf1, 0x3e, 0x81, 0xb3, 0x5d, 0x2f, - 0xcf, 0x7e, 0xe6, 0x9c, 0xa0, 0x32, 0x29, 0x8b, 0x52, 0x24, - 0xbd, 0x0d, 0x36, 0xdc, 0x1d, 0xcc, 0x6a, 0x0a, 0x74, 0x52, - 0x1b, 0x68, 0x4d, 0x15, 0x05, 0x47, 0xe1, 0x2f, 0x97, 0x45, - 0x52, 0x17, 0x4b, 0x2a, 0x3b, 0x74, 0xc5, 0x20, 0x35, 0x5c, - 0x37, 0xae, 0xe6, 0xa7, 0x24, 0x0f, 0x34, 0x70, 0xea, 0x7c, - 0x03, 0xa3, 0xde, 0x2d, 0x22, 0x55, 0x88, 0x01, 0x45, 0xf2, - 0x5f, 0x1f, 0xaf, 0x3b, 0xb1, 0xa6, 0x5d, 0xcd, 0x93, 0xfb, - 0xf8, 0x2f, 0x87, 0xcc, 0x26, 0xc5, 0x36, 0xde, 0x06, 0x9b, - 0xe9, 0xa7, 0x66, 0x7e, 0x8c, 0xcd, 0x99, 0x6b, 0x51, 0x1c, - 0xb0, 0xa0, 0xfa, 0xc7, 0x46, 0xfe, 0x65, 0xe4, 0x80, 0x5b, - 0x5f, 0x24, 0x3b, 0xa4, 0xe6, 0x81, 0x31, 0xe5, 0x87, 0x2c, - 0xa4, 0x83, 0xaf, 0x8b, 0x9f, 0x89, 0xb4, 0x3c, 0x7a, 0xbe, - 0x4c, 0xb3, 0xbf, 0x3d, 0xec, 0x78, 0xb0, 0x8a, 0xdd, 0xc8, - 0x43, 0x8c, 0x45, 0xa1, 0xa3, 0x3a, 0x82, 0x7d, 0x06, 0xdf, - 0x20, 0x27, 0x9b, 0x4e, 0x09, 0x90, 0x6a, 0x23, 0xbf, 0x1b, - 0x04, 0x1d, 0x50, 0xe2, 0xb4, 0xff, 0xe0, 0xd0, 0x9b, 0x40, - 0x2b, 0xc0, 0x52, 0xc1, 0x39, 0x29, 0x60, 0x83, 0x06, 0x9b, - 0x48, 0xb8, 0xa7, 0xe1, 0x2b, 0xfb, 0xf0, 0x2b, 0x82, 0xf1, - 0xda, 0xc9, 0x30, 0x47, 0x3f, 0xf5, 0xf9, 0xf7, 0x6c, 0xf0, - 0x0f, 0xe7, 0xb1, 0x4d, 0x46, 0x49, 0xf8, 0xb3, 0xe1, 0xfe, - 0x85, 0x61, 0xcc, 0xf7, 0xfa, 0xd2, 0xf1, 0xbc, 0xf0, 0x7f, - 0x3b, 0xe6, 0x45, 0xa2, 0x1b, 0x55, 0xf6, 0x0c, 0x02, 0x95, - 0xdc, 0x78, 0x94, 0xa0, 0xc4, 0x6a, 0x21, 0x7e, 0xa8, 0x5f, - 0xbd, 0xc3, 0xb3, 0x4d, 0x9b, 0x30, 0x31, 0x1d, 0x5b, 0x8b, - 0x45, 0x3c, 0x18, 0xe9, 0x61, 0xe8, 0x76, 0x3e, 0x91, 0xd2, - 0xfd, 0x1a, 0xd7, 0x30, 0x4d, 0xfe, 0xef, 0x7f, 0xc0, 0x7e, - 0x45, 0x43, 0xe9, 0xf9, 0x23, 0xfe, 0xd8, 0xef, 0xbc, 0xd6, - 0x99, 0x79, 0x54, 0xed, 0x7a, 0x8b, 0x39, 0xa6, 0xe7, 0x9d, - 0x3f, 0x9f, 0x35, 0xe1, 0xe4, 0xd5, 0x26, 0x31, 0x3a, 0x44, - 0x03, 0x79, 0xde, 0xdc, 0x29, 0x1e, 0x8e, 0x26, 0x41, 0xc6, - 0x60, 0xaa, 0xfd, 0xe1, 0x5e, 0xa6, 0xc0, 0x2f, 0x90, 0x1e, - 0x3b, 0xc1, 0xe6, 0xf6, 0xde, 0x60, 0x87, 0x57, 0x51, 0x11, - 0x6a, 0x8e, 0x9d, 0x70, 0x9d, 0x6d, 0x36, 0x21, 0x05, 0x55, - 0xc1, 0x56, 0x9b, 0xc9, 0x91, 0x50, 0x3e, 0xb4, 0xbd, 0x19, - 0x53, 0x44, 0x99, 0xc7, 0xb8, 0xce, 0xce, 0x86, 0x06, 0x5d, - 0x99, 0x85, 0x33, 0xd4, 0x16, 0x21, 0x4a, 0xe9, 0x7e, 0x2e, - 0xcc, 0x7e, 0x3f, 0xc1, 0x47, 0x3b, 0x32, 0xd0, 0x57, 0x1c, - 0xc2, 0x26, 0x67, 0xf0, 0xd9, 0xc4, 0x9e, 0xbb, 0x65, 0xa4, - 0xf7, 0xf7, 0x8d, 0x7d, 0x08, 0xd4, 0x9c, 0x1e, 0x0f, 0xb9, - 0xff, 0x24, 0x2f, 0xaf, 0xfa, 0x24, 0x26, 0xb7, 0xb1, 0x78, - 0xc1, 0xd1, 0xfe, 0x85, 0x55, 0xa0, 0x86, 0x77, 0xf6, 0xc2, - 0xe0, 0x12, 0xe4, 0x45, 0x85, 0xd0, 0xe7, 0x68, 0xf0, 0x31, - 0x4c, 0x9c, 0xb0, 0x5f, 0x89, 0xca, 0xfe, 0xc2, 0xf0, 0x1e, - 0xeb, 0xee, 0x75, 0x64, 0xea, 0x09, 0xd4, 0x1c, 0x72, 0x12, - 0xd4, 0x31, 0xf0, 0x89, 0x71, 0x74, 0x6e, 0x01, 0x32, 0xca, - 0x8a, 0x91, 0x0c, 0xdf, 0xd7, 0x05, 0xe9, 0x35, 0xed, 0x06, - 0x1a, 0x17, 0x5a, 0xf3, 0x65, 0xc5, 0xbd, 0x37, 0xf2, 0x53, - 0x49, 0x2f, 0xcd, 0xc6, 0x15, 0xb3, 0x36, 0x88, 0xd8, 0x7a, - 0x2f, 0xfa, 0x21, 0x7f, 0x55, 0x20, 0xc6, 0xf4, 0x23, 0x59, - 0x6b, 0x3c, 0xeb, 0xe5, 0xd3, 0x78, 0xdc, 0x31, 0xeb, 0x87, - 0x86, 0x3d, 0x7c, 0x10, 0x64, 0x66, 0xa4, 0xad, 0x07, 0xe1, - 0x93, 0x15, 0x07, 0x4c, 0xe4, 0xb4, 0x4a, 0x06, 0xca, 0x2a, - 0x50, 0xa2, 0x85, 0xc6, 0xa1, 0x19, 0x89, 0x7f, 0x8a, 0x05, - 0x00, 0x23, 0x72, 0x5f, 0x89, 0x74, 0x8e, 0x22, 0xa1, 0x5d, - 0x26, 0xf9, 0xfe, 0xdf, 0x6d, 0x98, 0x3a, 0xc4, 0x7c, 0x93, - 0xcf, 0xc4, 0xfe, 0xed, 0x98, 0xb0, 0x31, 0x4c, 0x81, 0x83, - 0x0d, 0x5d, 0x3d, 0x0c, 0x27, 0x4e, 0xca, 0xcf, 0x38, 0x0c, - 0x37, 0xb0, 0xf8, 0xc5, 0xc8, 0x52, 0x14, 0xec, 0x53, 0x80, - 0xb9, 0xd8, 0x8a, 0x05, 0x4e, 0x31, 0x3d, 0x67, 0x57, 0xf0, - 0x7a, 0xa2, 0xc5, 0xc9, 0x02, 0x25, 0x69, 0x83, 0xb9, 0x3e, - 0x1b, 0x04, 0xbf, 0xb2, 0xe6, 0x97, 0x7a, 0x6b, 0x8e, 0x37, - 0x77, 0x2e, 0x16, 0x8b, 0x33, 0xe1, 0xea, 0x2b, 0x30, 0x01, - 0x6e, 0xa0, 0x28, 0x14, 0x17, 0xe9, 0x98, 0xa8, 0x89, 0x72, - 0x68, 0x64, 0x81, 0x60, 0xa8, 0xf7, 0x72, 0xdf, 0x1a, 0xae, - 0xf5, 0xf0, 0x9f, 0x69, 0x35, 0xbc, 0x58, 0x27, 0x38, 0xd6, - 0x7f, 0x7a, 0xd4, 0xc4, 0xf1, 0xcf, 0xee, 0x59, 0x49, 0x31, - 0xda, 0xc1, 0x08, 0x46, 0x65, 0x68, 0xe9, 0x44, 0x18, 0x2b, - 0xf2, 0x2a, 0x13, 0x60, 0x07, 0xae, 0xe4, 0x96, 0xdb, 0x0a, - 0x6f, 0x52, 0x23, 0x9a, 0xcf, 0x9d, 0xa4, 0xc5, 0xc1, 0x74, - 0xa8, 0x0e, 0xe1, 0x5e, 0xfa, 0xa4, 0x06, 0x9c, 0x2e, 0x70, - 0x08, 0x22, 0x25, 0x4f, 0xc1, 0xf1, 0x13, 0x5a, 0x66, 0xa0, - 0x6c, 0x59, 0xa3, 0xfc, 0x03, 0x9c, 0x8a, 0x23, 0x01, 0x00, - 0xa9, 0x49, 0xf0, 0x22, 0xa3, 0x8f, 0x6c, 0xef, 0xcb, 0x69, - 0x06, 0x3a, 0x69, 0x99, 0x96, 0xd2, 0xa7, 0xa0, 0x0b, 0x7e, - 0x44, 0x7d, 0x04, 0xff, 0x7e, 0x9e, 0x1e, 0x77, 0xa0, 0x30, - 0xd1, 0xdf, 0x18, 0xe4, 0xd8, 0xa5, 0x64, 0xbe, 0x8c, 0x80, - 0x28, 0xe2, 0x98, 0x5e, 0xec, 0x9e, 0xb1, 0x0a, 0xb5, 0x25, - 0xaa, 0xb8, 0x0f, 0x78, 0x30, 0x48, 0x06, 0xe5, 0x76, 0xf9, - 0x24, 0x96, 0x87, 0x2a, 0x91, 0x89, 0xb6, 0xce, 0x04, 0xdf, - 0xfc, 0x13, 0x42, 0x19, 0xba, 0x14, 0x46, 0x20, 0x08, 0x47, - 0xe1, 0x82, 0x57, 0x51, 0x74, 0x3b, 0x5b, 0x23, 0x5c, 0xb2, - 0x85, 0x8c, 0xed, 0xe6, 0xda, 0x4d, 0x56, 0xe8, 0x61, 0x31, - 0xec, 0x97, 0x27, 0xeb, 0xf2, 0xa7, 0x7c, 0x13, 0x1b, 0xc5, - 0x44, 0xfe, 0x63, 0x4b, 0x2b, 0x33, 0x22, 0x23, 0x60, 0x86, - 0x7c, 0x3b, 0x57, 0xba, 0x16, 0xde, 0x47, 0x04, 0x3e, 0x2b, - 0xe5, 0xbd, 0x23, 0xa0, 0xab, 0xdf, 0x5d, 0x6e, 0x20, 0xb1, - 0x37, 0x44, 0xcb, 0xbd, 0x03, 0xa9, 0x5c, 0xe6, 0x92, 0x5e, - 0x2f, 0x6f, 0x95, 0xc6, 0x5b, 0x6d, 0xab, 0x39, 0xdd, 0x1e, - 0x34, 0xd5, 0x21, 0xca, 0x92, 0xee, 0x59, 0xf0, 0xb9, 0x65, - 0xe6, 0x81, 0x49, 0xf8, 0x11, 0xec, 0x45, 0x14, 0x6a, 0x19, - 0xb4, 0xce, 0xbf, 0x9e, 0xf7, 0x32, 0x8d, 0x99, 0x78, 0xc3, - 0x07, 0x3d, 0xfd, 0x18, 0x2d, 0x0e, 0x06, 0x2f, 0x27, 0x24, - 0x6f, 0x16, 0xd8, 0x01, 0x33, 0xc8, 0xbb, 0x7f, 0x7d, 0xfa, - 0x73, 0xf6, 0x7d, 0x54, 0xf2, 0xd4, 0x8a, 0x53, 0xe1, 0x62, - 0x45, 0xf4, 0x01, 0xa6, 0x31, 0x6b, 0x3a, 0x06, 0x56, 0xfd, - 0x79, 0x7f, 0x58, 0xd8, 0x47, 0x33, 0x53, 0xc5, 0x78, 0x70, - 0xce, 0x81, 0x7f, 0x66, 0xa1, 0x58, 0x7c, 0x5a, 0xdb, 0x4a, - 0xad, 0x29, 0xff, 0x93, 0x75, 0x95, 0x35, 0xa9, 0xd2, 0xb1, - 0xeb, 0xa0, 0x4f, 0x10, 0x0a, 0xc9, 0x38, 0x69, 0xc8, 0x8d, - 0x57, 0xef, 0x99, 0x0f, 0xa5, 0x69, 0x86, 0xa6, 0xfb, 0x2b, - 0x37, 0xe4, 0xc7, 0xab, 0x3e, 0xcd, 0x8f, 0x3f, 0x93, 0x8c, - 0x0b, 0xc4, 0x4d, 0x16, 0xe0, 0xb0, 0x94, 0x5a, 0x0d, 0x17, - 0xaf, 0x6e, 0x4b, 0x2e, 0x18, 0x29, 0x0e, 0xe0, 0xf5, 0x72, - 0x1a, 0x21, 0x37, 0xef, 0x7d, 0x6a, 0x39, 0xe9, 0xa8, 0xd7, - 0x96, 0xd6, 0xb3, 0x7d, 0x83, 0x0c, 0x13, 0x30, 0x49, 0x03, - 0xe8, 0x6b, 0xe6, 0x77, 0xe8, 0x69, 0x48, 0x56, 0x5f, 0x39, - 0x63, 0xbc, 0x86, 0xa8, 0x26, 0xa1, 0xbd, 0x4b, 0x24, 0xbd, - 0xdd, 0xe8, 0x02, 0x64, 0xcb, 0xae, 0x24, 0x17, 0x62, 0xbd, - 0x27, 0xa7, 0x22, 0x60, 0x51, 0x0c, 0x53, 0xff, 0x9d, 0x63, - 0x1b, 0xf9, 0xff, 0x76, 0x3b, 0x74, 0x05, 0x98, 0x46, 0x0b, - 0xe8, 0xcb, 0xd4, 0x0a, 0xcd, 0x91, 0xdb, 0x5b, 0x21, 0x4d, - 0xa1, 0x87, 0xbd, 0xb7, 0x58, 0xec, 0x28, 0x00, 0x92, 0xc2, - 0x98, 0xe4, 0x8c, 0x1f, 0x9d, 0xa4, 0x80, 0x83, 0x40, 0xb9, - 0x63, 0xfe, 0xc9, 0x18, 0x3f, 0xd6, 0xab, 0x34, 0x00, 0x2c, - 0x53, 0x40, 0x38, 0x0e, 0xb1, 0x69, 0xa8, 0xb8, 0xa9, 0x2e, - 0x9b, 0x7b, 0x89, 0x8d, 0xff, 0x86, 0x01, 0x51, 0x42, 0xde, - 0x04, 0xd6, 0x1d, 0xd1, 0x29, 0x8d, 0x42, 0x46, 0x5f, 0xd6, - 0x02, 0xde, 0x73, 0xee, 0x2d, 0xe9, 0x6e, 0xb0, 0x3f, 0xf0, - 0x47, 0x72, 0xfe, 0x45, 0xff, 0x05, 0x82, 0x2d, 0xc6, 0x4f, - 0xc9, 0xd3, 0xec, 0xf9, 0x5a, 0x22, 0x50, 0x6c, 0x4f, 0x1e, - 0xc8, 0x5f, 0xfc, 0x2c, 0x04, 0x4f, 0xdf, 0xce, 0xe4, 0x18, - 0xd2, 0xd7, 0x8b, 0x67, 0x83, 0x39, 0x96, 0x47, 0x5e, 0x5b, - 0xad, 0x7f, 0x5d, 0x42, 0x56, 0x97, 0x71, 0x39, 0x28, 0x44, - 0x9d, 0x35, 0xde, 0xde, 0x03, 0x20, 0x34, 0x44, 0xdb, 0xdf, - 0xfc, 0xff, 0x1e, 0x3d, 0x58, 0x5f, 0x7a, 0x8e, 0x90, 0xa1, - 0xd3, 0xeb, 0x0c, 0x23, 0x3f, 0x4e, 0x61, 0x77, 0x79, 0xb2, - 0xdc, 0xfb, 0x21, 0x46, 0x5c, 0x82, 0xb6, 0xf6, 0x34, 0x3c, - 0x3f, 0x45, 0x4b, 0x80, 0x9e, 0xa4, 0xe6, 0x02, 0x13, 0x38, - 0x40, 0x7e, 0x87, 0x92, 0x96, 0x51, 0x63, 0x87, 0xae, 0xc8, - 0x02, 0x6a, 0x70, 0xc8, 0xcd, 0xd0, 0xe2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x12, 0x1c, 0x22, 0x2b, 0x33, 0x38, 0x3f, +/* ML-DSA-87 signature over the 512-byte bench message, + * produced from certs/mldsa/mldsa87_priv-only.der. */ +static const unsigned char bench_mldsa_87_sig[] = { + 0xdf, 0x20, 0x7b, 0xe9, 0xd3, 0xd1, 0xf0, 0xfe, 0x8b, 0xa2, + 0xfb, 0xd5, 0xb1, 0x0d, 0x3d, 0xd9, 0x4e, 0x2b, 0xdd, 0x2b, + 0xca, 0x37, 0x15, 0x64, 0x7d, 0x36, 0x86, 0x70, 0xba, 0x16, + 0x62, 0xd0, 0x63, 0x21, 0x69, 0xe7, 0xc6, 0xa9, 0xf8, 0x7d, + 0x53, 0xe3, 0xad, 0x18, 0x18, 0x13, 0xd4, 0x68, 0x72, 0xf0, + 0xce, 0xf5, 0x2b, 0x0b, 0x58, 0x69, 0x1a, 0x79, 0x42, 0x41, + 0x3f, 0x45, 0x86, 0x0c, 0x59, 0xad, 0x28, 0x09, 0xce, 0xa2, + 0xc8, 0x78, 0x30, 0xec, 0xd9, 0xc7, 0xcd, 0xc6, 0xc7, 0xc6, + 0xce, 0xf0, 0x25, 0x06, 0x3e, 0xbf, 0x7b, 0xfe, 0x7d, 0x2c, + 0x6f, 0xbc, 0x2c, 0x5d, 0x6e, 0x55, 0xf2, 0x20, 0x8a, 0x68, + 0x05, 0xa5, 0xa7, 0x6d, 0xf0, 0x53, 0x9e, 0xb5, 0x69, 0x7e, + 0xd7, 0xdc, 0x4b, 0x8b, 0xdb, 0x43, 0x8f, 0x30, 0xb7, 0xfe, + 0x2f, 0xf9, 0xd5, 0xdf, 0xdf, 0x8b, 0x2d, 0xb1, 0xd0, 0xd2, + 0x10, 0x96, 0xf6, 0xf2, 0x77, 0xa1, 0x8e, 0x63, 0x19, 0x68, + 0x6c, 0xcc, 0xd1, 0x08, 0x6a, 0x07, 0xe3, 0x1d, 0xe4, 0xff, + 0x43, 0xa3, 0x86, 0x8d, 0x60, 0xa9, 0xce, 0x46, 0x28, 0x1e, + 0xc2, 0x9b, 0x90, 0x02, 0x91, 0x54, 0x8e, 0xff, 0xd6, 0xac, + 0x74, 0xc5, 0x33, 0xa1, 0x60, 0x7d, 0x36, 0x6d, 0xcf, 0x67, + 0x5a, 0x4d, 0x15, 0x18, 0x73, 0x50, 0x4e, 0x52, 0x80, 0x60, + 0xeb, 0x67, 0xb5, 0xa3, 0x17, 0xf4, 0xbe, 0x9f, 0x44, 0x3a, + 0x03, 0x9c, 0x52, 0x55, 0xc8, 0xbc, 0xb1, 0x3b, 0x48, 0x5b, + 0x8c, 0xb2, 0xff, 0x01, 0x29, 0xe2, 0xa8, 0xf0, 0x9f, 0x8b, + 0x0d, 0x94, 0xd0, 0xdf, 0xe0, 0x13, 0xa1, 0x44, 0x44, 0x86, + 0x12, 0x0e, 0x31, 0xec, 0x0c, 0x91, 0x91, 0x25, 0xfb, 0x78, + 0x8f, 0xed, 0x88, 0x6a, 0xff, 0x04, 0x64, 0x76, 0xc4, 0x07, + 0x91, 0x71, 0x2c, 0xbd, 0x1a, 0xff, 0x0f, 0xe5, 0x51, 0xd7, + 0xcb, 0xba, 0x53, 0xc5, 0x0f, 0x3c, 0xab, 0xdf, 0x12, 0x3b, + 0x23, 0x78, 0x3b, 0xc4, 0x61, 0xa6, 0x9c, 0xfe, 0x10, 0x7b, + 0xeb, 0xf1, 0xa9, 0x7e, 0x46, 0x41, 0xaa, 0xbf, 0x58, 0x7e, + 0xd7, 0x11, 0x0a, 0x34, 0xad, 0xa9, 0x98, 0x3d, 0x19, 0x05, + 0x23, 0x24, 0x2d, 0x66, 0xf3, 0x34, 0x7a, 0x85, 0x10, 0x72, + 0xd7, 0x49, 0xaa, 0x18, 0x88, 0x83, 0xba, 0xc6, 0x28, 0x19, + 0xcd, 0xd5, 0xf1, 0x39, 0xba, 0x57, 0x5d, 0xe0, 0x91, 0x7a, + 0x2d, 0x23, 0x54, 0x66, 0x4f, 0xf9, 0xe3, 0x6f, 0x8f, 0xb1, + 0x7d, 0xfb, 0x11, 0x89, 0x23, 0x86, 0x04, 0xff, 0x86, 0x04, + 0x09, 0x61, 0x2f, 0x49, 0xee, 0x5f, 0x9e, 0xbd, 0x16, 0x44, + 0x2a, 0x7f, 0x90, 0x02, 0xb3, 0xa8, 0x42, 0xfb, 0xd9, 0x06, + 0x70, 0x3c, 0xaf, 0x4e, 0x1f, 0xf7, 0x8c, 0x57, 0xdc, 0x7e, + 0x10, 0xf3, 0x39, 0x19, 0x7f, 0xbc, 0x76, 0xc9, 0x4e, 0xa6, + 0x85, 0x3c, 0xff, 0xd5, 0x98, 0x23, 0x01, 0x80, 0xf2, 0xce, + 0x2f, 0xe4, 0x5a, 0xde, 0xaa, 0x53, 0xed, 0x9b, 0x74, 0x72, + 0x3c, 0x4d, 0x67, 0x09, 0xbb, 0x0f, 0xa7, 0xd8, 0x8f, 0x99, + 0x91, 0xb5, 0x89, 0xc5, 0xf2, 0xa9, 0xb5, 0x19, 0xab, 0x5a, + 0x40, 0xae, 0x36, 0x20, 0x72, 0xec, 0xe7, 0xe8, 0x9f, 0xa3, + 0xc7, 0x3d, 0x16, 0xaf, 0xd1, 0x1b, 0x1d, 0x54, 0x51, 0xef, + 0x3c, 0xd5, 0x2f, 0x47, 0x70, 0x48, 0x01, 0xc6, 0xf6, 0x21, + 0x1c, 0x7f, 0xc9, 0x32, 0x39, 0xdc, 0x5a, 0x61, 0x5b, 0xd6, + 0xe8, 0x93, 0x14, 0x97, 0x39, 0xb6, 0x01, 0xa3, 0x5e, 0x52, + 0x72, 0xb2, 0xe5, 0x4d, 0x3e, 0x22, 0x7f, 0xb7, 0x62, 0x27, + 0xcc, 0xd0, 0x44, 0xbe, 0x74, 0x15, 0x09, 0xe4, 0xea, 0x9b, + 0x76, 0x56, 0x77, 0x09, 0x0d, 0x8b, 0xe1, 0xe0, 0x2e, 0x8e, + 0x65, 0xb4, 0xb1, 0x7a, 0x2c, 0xf6, 0x95, 0xc3, 0x4d, 0x6d, + 0xb4, 0x4e, 0x45, 0xed, 0x70, 0x23, 0x2c, 0x6b, 0x21, 0x98, + 0x97, 0xf0, 0x2a, 0x37, 0x07, 0xf5, 0x7f, 0x24, 0x46, 0xf5, + 0x3c, 0x6c, 0x61, 0x07, 0x4c, 0x67, 0xd5, 0x2b, 0x00, 0xbc, + 0xa6, 0xec, 0xce, 0xb8, 0xa5, 0xba, 0x5e, 0x9d, 0x02, 0x9a, + 0xa5, 0x9d, 0xb6, 0x54, 0xcd, 0x31, 0x9b, 0x75, 0x96, 0xb7, + 0xb5, 0xc1, 0xaf, 0xd5, 0x50, 0xda, 0x11, 0x09, 0x38, 0x04, + 0x6d, 0x6d, 0x65, 0xd3, 0x4e, 0xc1, 0x21, 0x70, 0x4b, 0x63, + 0x9c, 0xa8, 0xe6, 0xd3, 0x3d, 0x16, 0xdd, 0xab, 0x27, 0x84, + 0x41, 0x60, 0x5e, 0x41, 0x12, 0x0d, 0xd9, 0xd5, 0x02, 0xbf, + 0xcf, 0x63, 0xab, 0x12, 0xf1, 0xb0, 0xe7, 0x1d, 0xb3, 0x39, + 0xce, 0xca, 0x27, 0xca, 0xd2, 0x6c, 0xa2, 0x30, 0x08, 0xe7, + 0x34, 0x7f, 0x2a, 0xc5, 0xa3, 0xdf, 0x19, 0x14, 0xd1, 0x05, + 0xad, 0x97, 0x4b, 0x8c, 0x69, 0x03, 0xe0, 0xf1, 0x72, 0xd6, + 0x90, 0x14, 0xbd, 0x55, 0x90, 0x45, 0x2d, 0xb3, 0x00, 0xd1, + 0x58, 0xc0, 0x39, 0x5f, 0xfa, 0xac, 0xdf, 0xb0, 0x4b, 0x60, + 0xd3, 0x22, 0xa3, 0x41, 0x36, 0x4f, 0x4e, 0x05, 0x98, 0xcb, + 0x57, 0x12, 0xd4, 0x9e, 0x5f, 0xb8, 0x4c, 0xc9, 0xb4, 0xab, + 0xa2, 0x36, 0x3b, 0xb7, 0x4d, 0x7c, 0xfd, 0xb4, 0xd8, 0x98, + 0x3e, 0x14, 0x43, 0x31, 0x71, 0x75, 0xf5, 0x4c, 0x6d, 0x7a, + 0x74, 0x90, 0x27, 0xb3, 0x89, 0xb5, 0xa5, 0x92, 0x13, 0x32, + 0x46, 0xae, 0x9c, 0xda, 0x3b, 0xd0, 0xaf, 0x7f, 0xc0, 0xc6, + 0x81, 0xc7, 0x71, 0x51, 0x7e, 0xfc, 0xbd, 0x7d, 0x1b, 0xf1, + 0x1a, 0x29, 0x00, 0xea, 0xf3, 0x65, 0x9a, 0x01, 0xa3, 0xfe, + 0xe4, 0x9f, 0x2b, 0x01, 0x6d, 0xe2, 0x87, 0x17, 0xcc, 0xcf, + 0x3d, 0x9b, 0x74, 0x0f, 0x51, 0x03, 0x31, 0x70, 0x85, 0x26, + 0x7f, 0xc0, 0x6a, 0x22, 0xcc, 0xf9, 0xcf, 0xde, 0x9f, 0x85, + 0xb4, 0x8f, 0xa9, 0xf9, 0xf3, 0x18, 0xb9, 0x33, 0x22, 0x5b, + 0x15, 0x63, 0xb4, 0x0c, 0x53, 0x1f, 0x3d, 0xca, 0xd0, 0xdb, + 0x93, 0xfc, 0xe3, 0x40, 0x59, 0x5b, 0x25, 0x40, 0xd6, 0x6e, + 0x54, 0xba, 0x3c, 0xd7, 0xc1, 0xb7, 0xa3, 0xcd, 0x11, 0x21, + 0xff, 0x60, 0xe7, 0x16, 0x42, 0x72, 0xe1, 0xf6, 0x57, 0x56, + 0x33, 0x6c, 0x89, 0x19, 0x9d, 0xf3, 0x4f, 0x6d, 0x2d, 0x7e, + 0xbf, 0xd1, 0xa2, 0x4b, 0x49, 0x86, 0x75, 0x3a, 0xa6, 0x41, + 0x6a, 0xc4, 0x29, 0x5d, 0xab, 0xfe, 0x43, 0x85, 0x9c, 0x8a, + 0x17, 0xb7, 0x07, 0xa3, 0x0e, 0x0d, 0x21, 0x55, 0x3a, 0x22, + 0x95, 0x73, 0xa3, 0x66, 0x4e, 0x52, 0x30, 0xdc, 0x14, 0x0f, + 0x4f, 0x9a, 0x74, 0xea, 0xf9, 0xa3, 0x82, 0xaf, 0xaa, 0x1b, + 0xb3, 0x87, 0xdc, 0xd6, 0x04, 0x7b, 0x4a, 0x04, 0x8b, 0xb2, + 0x83, 0x44, 0x76, 0x40, 0xb5, 0x8e, 0xdf, 0x11, 0xb7, 0xac, + 0x74, 0x6f, 0xc2, 0xbe, 0xc4, 0x68, 0x97, 0x0d, 0xb6, 0x74, + 0x51, 0xa3, 0xe0, 0xf9, 0x97, 0x58, 0xeb, 0xe0, 0x05, 0x29, + 0x6e, 0xaa, 0x05, 0x85, 0x64, 0xe9, 0xb8, 0x36, 0x7b, 0x50, + 0x88, 0x06, 0xe6, 0x9b, 0x09, 0x84, 0x63, 0x27, 0xd2, 0x7f, + 0x59, 0xb5, 0xa8, 0xc4, 0xc0, 0x42, 0x50, 0x3f, 0x3a, 0xc9, + 0xb2, 0xa5, 0x7f, 0x54, 0xb2, 0x25, 0xf9, 0xb4, 0x41, 0xc7, + 0xe2, 0xf8, 0x7a, 0xf1, 0x1b, 0xda, 0x7a, 0x71, 0x65, 0xb2, + 0xc7, 0x42, 0x12, 0xc2, 0xa1, 0x51, 0x35, 0x09, 0xa4, 0x81, + 0x14, 0xc9, 0x2c, 0x3d, 0xe5, 0x37, 0x71, 0xa3, 0xe5, 0x96, + 0xc4, 0xcc, 0x63, 0x97, 0x8d, 0xb9, 0x6f, 0xf7, 0x7c, 0xb4, + 0x36, 0xcf, 0x1d, 0x2a, 0xa4, 0xb0, 0x32, 0xe4, 0x73, 0x0c, + 0xef, 0xaf, 0x65, 0x4d, 0xe2, 0xf8, 0x02, 0x2d, 0x0b, 0x68, + 0x5f, 0x5e, 0x1f, 0x9f, 0x76, 0xcc, 0x08, 0x61, 0xba, 0xeb, + 0x14, 0x17, 0x8c, 0x9d, 0x4d, 0xe2, 0x4a, 0xb5, 0x26, 0xf8, + 0x12, 0xea, 0x42, 0xcd, 0x70, 0xed, 0x01, 0x8f, 0xa0, 0x22, + 0xa0, 0xfc, 0xe1, 0xb5, 0x91, 0xb9, 0x45, 0x2a, 0xa8, 0x9a, + 0x15, 0xda, 0xd3, 0x3b, 0xdf, 0x6f, 0x0e, 0x12, 0x4a, 0x06, + 0x92, 0xf9, 0x82, 0xc0, 0x28, 0x01, 0xae, 0x35, 0x96, 0x00, + 0x2c, 0xf0, 0xab, 0x5e, 0x80, 0x4c, 0xab, 0xb5, 0x7b, 0x28, + 0x81, 0x94, 0xa4, 0x2d, 0xfb, 0x80, 0x87, 0x89, 0xf6, 0xb5, + 0xa7, 0x0a, 0x8f, 0x59, 0xbe, 0xfd, 0x81, 0xf2, 0x31, 0x1a, + 0x29, 0x57, 0x9e, 0x67, 0xa8, 0x6e, 0x25, 0x1e, 0x82, 0x02, + 0x48, 0x46, 0x98, 0x00, 0xd6, 0xf7, 0x22, 0x6c, 0x33, 0xc6, + 0xc8, 0xc5, 0xc5, 0x3d, 0x80, 0xf5, 0xab, 0x39, 0x0d, 0xee, + 0xb0, 0xfa, 0x25, 0xeb, 0xe1, 0x33, 0xf3, 0x96, 0xa3, 0xcc, + 0x3b, 0xe8, 0x92, 0xb0, 0x19, 0x09, 0x6f, 0x12, 0xae, 0x68, + 0xe7, 0xc6, 0x51, 0x51, 0xe5, 0x90, 0x6f, 0xba, 0xc2, 0x40, + 0x53, 0xe2, 0x83, 0xf1, 0x68, 0x71, 0x2a, 0x0f, 0xdd, 0x54, + 0x8e, 0x76, 0x50, 0x31, 0x38, 0xfd, 0xf8, 0x7e, 0xe3, 0x11, + 0xda, 0x3c, 0xf7, 0x2f, 0x5d, 0xbf, 0x59, 0x99, 0x1d, 0x3e, + 0xf2, 0x76, 0x16, 0xed, 0xb8, 0x1e, 0x6c, 0xe2, 0xb9, 0x5e, + 0xa4, 0xbb, 0x19, 0x2f, 0x42, 0x80, 0x43, 0x22, 0x25, 0x85, + 0xe9, 0x61, 0x8c, 0x3c, 0xc4, 0xdc, 0x63, 0x5e, 0xaf, 0x7a, + 0x14, 0x72, 0x6f, 0xae, 0x4c, 0x20, 0x1b, 0x08, 0x8a, 0x29, + 0x65, 0xec, 0xca, 0xe0, 0x79, 0x0c, 0x30, 0x6d, 0xb8, 0x0d, + 0xe1, 0x98, 0x19, 0x8d, 0xba, 0x73, 0x25, 0xf2, 0xa0, 0x16, + 0x25, 0x2e, 0x0b, 0xf8, 0xc6, 0xb2, 0xe8, 0xa6, 0x5f, 0x48, + 0xa9, 0x59, 0x6c, 0x4a, 0x51, 0xb9, 0xc1, 0x7d, 0x96, 0x90, + 0xa7, 0x3b, 0x7c, 0x8f, 0x84, 0xea, 0x27, 0x5f, 0xd8, 0xdf, + 0xde, 0x33, 0x22, 0x05, 0xd4, 0x04, 0x09, 0x95, 0x94, 0x74, + 0x63, 0x6a, 0x16, 0x0f, 0x4d, 0x8a, 0x31, 0x0b, 0x6f, 0x14, + 0x33, 0x55, 0x9c, 0x1a, 0xf1, 0xb9, 0xb7, 0xbe, 0x27, 0xf1, + 0xd4, 0xcd, 0xfb, 0xb8, 0xb2, 0x7b, 0x24, 0x94, 0x91, 0x26, + 0xc6, 0x6f, 0x1f, 0x72, 0x7b, 0x19, 0xd5, 0xaf, 0x1d, 0xc4, + 0x62, 0xd1, 0x65, 0x9a, 0xfc, 0xa2, 0x25, 0xe5, 0x08, 0x42, + 0x9a, 0x98, 0x94, 0x76, 0xd3, 0x6d, 0xeb, 0x58, 0x86, 0xc1, + 0x9b, 0x08, 0x79, 0xd2, 0x09, 0xdc, 0xd0, 0x8a, 0x3a, 0xb2, + 0xd7, 0xa6, 0x9a, 0xf1, 0x08, 0x94, 0xfa, 0x7f, 0x70, 0x75, + 0xb2, 0x5c, 0x20, 0x27, 0x25, 0x4d, 0x1b, 0xa9, 0x0c, 0x70, + 0xd0, 0xf5, 0xe5, 0x09, 0xc3, 0xe0, 0xdb, 0x3e, 0x2e, 0xf4, + 0xeb, 0x74, 0x41, 0xa1, 0x7a, 0x00, 0x89, 0x8f, 0x9f, 0x83, + 0x4c, 0x42, 0x4c, 0x09, 0x79, 0x52, 0x4f, 0x25, 0x5e, 0xd2, + 0x9e, 0x9c, 0x9e, 0xcf, 0x87, 0x8e, 0xff, 0x91, 0x4b, 0x43, + 0x12, 0xf7, 0xab, 0x93, 0x63, 0xdd, 0x7c, 0xe0, 0x48, 0x5c, + 0x57, 0xda, 0x9b, 0xd4, 0x4c, 0xe7, 0x35, 0xb6, 0xdf, 0xa0, + 0x49, 0xa9, 0xb8, 0x2f, 0x4c, 0x6e, 0x7b, 0xda, 0x85, 0x20, + 0x48, 0x41, 0x64, 0xaf, 0x34, 0xfe, 0x5d, 0x63, 0xb0, 0x77, + 0xc4, 0xc6, 0xa9, 0xbf, 0xd3, 0x39, 0x31, 0x25, 0xbe, 0x57, + 0x1a, 0xf4, 0xef, 0x84, 0xcc, 0x74, 0xb6, 0xa7, 0xd6, 0x23, + 0x62, 0x6e, 0xf5, 0x30, 0x5b, 0xac, 0xd7, 0x44, 0x9a, 0x24, + 0x1b, 0x68, 0xa9, 0x71, 0x50, 0xdd, 0x15, 0x05, 0x9b, 0x78, + 0x0e, 0x87, 0x55, 0xde, 0x18, 0x41, 0xe3, 0x83, 0xcf, 0xf5, + 0xff, 0x3b, 0x6f, 0x29, 0x97, 0xa3, 0x3b, 0x1a, 0x58, 0x99, + 0xf0, 0x7f, 0x38, 0xf0, 0x96, 0x7d, 0xfe, 0x7c, 0xeb, 0xb3, + 0xdd, 0x18, 0x2f, 0xc0, 0x84, 0xf0, 0xb8, 0x64, 0x7e, 0xa6, + 0x4c, 0xd3, 0x62, 0xeb, 0x0b, 0x4a, 0x37, 0x08, 0xe5, 0xd2, + 0xa9, 0xe2, 0x6b, 0xe8, 0x0f, 0x54, 0x3b, 0x9c, 0xb1, 0xf5, + 0xd8, 0x6f, 0x1a, 0x1a, 0xc3, 0x74, 0x67, 0xfa, 0xfe, 0xff, + 0x95, 0xd0, 0x38, 0x54, 0xac, 0x25, 0x51, 0xea, 0x8c, 0x09, + 0x2e, 0x1d, 0x33, 0xe1, 0x1d, 0x36, 0xfb, 0xd6, 0xec, 0x82, + 0xdc, 0x91, 0x1e, 0x3b, 0xb9, 0x27, 0x74, 0x52, 0x71, 0x7f, + 0x16, 0xe3, 0xaa, 0x41, 0xfb, 0x36, 0x96, 0x25, 0xbd, 0xb7, + 0x3e, 0x5b, 0x1a, 0xd8, 0xb3, 0x59, 0x32, 0xd8, 0x5b, 0xb1, + 0x1a, 0xec, 0x74, 0xbc, 0x84, 0xdc, 0x5a, 0x59, 0xa5, 0x99, + 0x08, 0xda, 0xad, 0x28, 0xfa, 0x64, 0x44, 0x4e, 0x52, 0x12, + 0x1f, 0x50, 0xb5, 0x92, 0xe6, 0x97, 0x4d, 0x15, 0xf9, 0x27, + 0x8d, 0xd4, 0xe6, 0xb7, 0xae, 0x45, 0x49, 0x6f, 0x6c, 0x10, + 0xdb, 0x09, 0x74, 0xe7, 0x89, 0x64, 0x0e, 0x70, 0x86, 0x8d, + 0x88, 0x98, 0xc6, 0xbd, 0x1e, 0xef, 0x56, 0x83, 0x5d, 0xc9, + 0xd3, 0xa3, 0xf6, 0x11, 0xbf, 0x7e, 0x61, 0x23, 0x26, 0xc7, + 0x13, 0x56, 0x4c, 0x81, 0x8a, 0x02, 0x3f, 0x26, 0x67, 0xc8, + 0x40, 0x14, 0xe1, 0x70, 0x84, 0x25, 0x5d, 0xa1, 0xe0, 0xe7, + 0x43, 0x02, 0x08, 0xb2, 0x77, 0xaa, 0x6e, 0x55, 0xfa, 0x65, + 0x4d, 0x73, 0x3e, 0x3d, 0x29, 0x8b, 0xae, 0x2b, 0x22, 0x00, + 0x37, 0x1e, 0x2e, 0x7a, 0x88, 0xce, 0x34, 0xd1, 0x16, 0xf2, + 0xf3, 0xad, 0x39, 0xb3, 0xb1, 0x66, 0xd6, 0xed, 0xf6, 0xad, + 0x6c, 0x46, 0xd4, 0xdc, 0x2a, 0x4c, 0x0d, 0x1a, 0x99, 0xa7, + 0x89, 0xa0, 0x51, 0x2c, 0xf0, 0xb2, 0x56, 0xe7, 0xbc, 0x3d, + 0xeb, 0x72, 0xa2, 0x2a, 0x4b, 0xca, 0xbc, 0xf7, 0x91, 0x51, + 0x02, 0xc1, 0x39, 0xe3, 0x51, 0x06, 0xe7, 0x6e, 0x9e, 0xff, + 0x8b, 0xc3, 0xc4, 0x73, 0xac, 0xc5, 0xc5, 0x42, 0x9d, 0x86, + 0x51, 0x66, 0x88, 0xbd, 0x30, 0xf2, 0x16, 0x48, 0xa4, 0x58, + 0xdb, 0xfb, 0x52, 0x68, 0x4d, 0x37, 0x40, 0xf4, 0x67, 0xc7, + 0x15, 0xd7, 0x38, 0x0a, 0x7b, 0xba, 0xbb, 0x85, 0x59, 0x5b, + 0xe9, 0x09, 0x82, 0x4f, 0x0f, 0x96, 0x76, 0x3a, 0x87, 0x2e, + 0x53, 0x89, 0x4f, 0x21, 0xc4, 0x21, 0x17, 0x7a, 0x5e, 0x4f, + 0x41, 0x67, 0x97, 0x14, 0x13, 0xaa, 0x46, 0xbb, 0x04, 0x0b, + 0xe9, 0xa4, 0x09, 0x5d, 0x0d, 0x9b, 0x4f, 0x4f, 0x1b, 0x9f, + 0x43, 0x2d, 0x34, 0xac, 0x34, 0x95, 0xd2, 0x65, 0xe8, 0xc7, + 0x44, 0x4e, 0x42, 0xae, 0x88, 0xa8, 0x92, 0xfb, 0x2c, 0xe8, + 0x52, 0x3b, 0x2f, 0xa2, 0x94, 0xbe, 0x63, 0xa6, 0x60, 0xf0, + 0x6c, 0xcc, 0x94, 0x77, 0xff, 0x84, 0xf0, 0xb9, 0x12, 0xb8, + 0xc8, 0x39, 0x75, 0x13, 0x67, 0x8c, 0xae, 0x16, 0xd2, 0xaa, + 0xea, 0xed, 0x1d, 0x85, 0xc0, 0x36, 0xca, 0xa6, 0x10, 0x49, + 0xf7, 0x5e, 0x5e, 0x58, 0xc6, 0x66, 0x11, 0x99, 0xf6, 0xd7, + 0x6d, 0x14, 0xb3, 0xc6, 0xa4, 0xed, 0xc6, 0x23, 0xa8, 0xed, + 0xe3, 0xbe, 0xaa, 0xdb, 0x97, 0xde, 0x6d, 0x62, 0xb7, 0x4d, + 0xcc, 0xc0, 0x08, 0x1c, 0x33, 0x45, 0xf4, 0xf5, 0xcd, 0xc6, + 0x6e, 0x5c, 0x53, 0xd6, 0x4c, 0x86, 0x7b, 0x47, 0x21, 0x70, + 0x6e, 0xb8, 0xed, 0xb8, 0xd4, 0x16, 0x2e, 0x37, 0x04, 0xb2, + 0xae, 0x4c, 0x5c, 0x8c, 0x72, 0x17, 0x7d, 0x46, 0x7f, 0x83, + 0x95, 0x4a, 0x8f, 0x11, 0xc2, 0xb1, 0xc6, 0x46, 0xf3, 0xd3, + 0x1e, 0x01, 0xa7, 0x2b, 0xbb, 0x76, 0x43, 0x99, 0x74, 0x8b, + 0x44, 0x29, 0x80, 0x04, 0x1e, 0x67, 0xe9, 0x81, 0xee, 0xb1, + 0xe8, 0xe8, 0x1f, 0x17, 0xec, 0xd1, 0x25, 0x25, 0x24, 0x6f, + 0x65, 0x4e, 0xc8, 0x60, 0x7d, 0xa9, 0x90, 0xd2, 0xb5, 0xe4, + 0x43, 0xd2, 0x62, 0xa4, 0x50, 0xa9, 0x17, 0x27, 0x18, 0xf0, + 0xce, 0x94, 0x68, 0xbf, 0x2b, 0x78, 0x61, 0xb2, 0xd0, 0xb6, + 0x43, 0xa6, 0xcc, 0x9b, 0x9d, 0xd8, 0xb3, 0x7c, 0x28, 0x2b, + 0xae, 0x39, 0x84, 0xd7, 0xd6, 0x07, 0x80, 0x75, 0xd7, 0xfc, + 0x76, 0x37, 0xb7, 0x6c, 0xf4, 0x7b, 0x3e, 0x33, 0x33, 0x09, + 0x72, 0x25, 0x61, 0xe6, 0x54, 0x12, 0xfd, 0x52, 0x19, 0xe7, + 0x31, 0x15, 0x39, 0xbb, 0x37, 0x94, 0x9b, 0x38, 0x58, 0x15, + 0x15, 0x48, 0x44, 0xc9, 0x8f, 0x7f, 0xe5, 0x8b, 0xe7, 0x12, + 0xab, 0x16, 0x32, 0x63, 0x98, 0x3c, 0x6b, 0xb7, 0x4a, 0x43, + 0xb3, 0x40, 0x94, 0x0b, 0xde, 0xdb, 0x0d, 0xf8, 0x3f, 0x23, + 0x0f, 0x84, 0x6c, 0x02, 0x32, 0x98, 0x52, 0xb7, 0x5c, 0x87, + 0x73, 0xed, 0x32, 0xca, 0xd6, 0xb0, 0x1e, 0x1a, 0x52, 0xdc, + 0x1f, 0xf4, 0xc5, 0x35, 0xe0, 0xdc, 0x44, 0x72, 0x9a, 0xf5, + 0x84, 0x6d, 0xd3, 0xa5, 0xe9, 0xb1, 0xfa, 0x49, 0x2f, 0x53, + 0x26, 0xa4, 0x20, 0xa7, 0x65, 0x2e, 0xa4, 0xd1, 0x6f, 0x33, + 0xc1, 0x9d, 0x8a, 0x9c, 0xc8, 0xf4, 0x23, 0x31, 0x83, 0xdd, + 0x63, 0x9c, 0xd2, 0x6f, 0xae, 0x1e, 0x1b, 0xda, 0x16, 0x4b, + 0xaf, 0x10, 0xf0, 0xc9, 0xea, 0xf6, 0x24, 0x14, 0xf9, 0x06, + 0x25, 0x60, 0xec, 0x44, 0xcb, 0xea, 0xf1, 0xa0, 0x30, 0x7a, + 0xbf, 0x06, 0x88, 0xde, 0xd2, 0x0e, 0x91, 0xae, 0x58, 0xaf, + 0xf7, 0x7e, 0x58, 0xd9, 0xc8, 0x56, 0x48, 0x3a, 0x7f, 0x9d, + 0x60, 0x5e, 0xf1, 0xc3, 0xbc, 0x14, 0xba, 0x7b, 0xed, 0x4a, + 0xfa, 0x42, 0x63, 0x3f, 0x31, 0x88, 0x0b, 0x8d, 0x8d, 0x10, + 0xfc, 0x70, 0x33, 0xc5, 0x79, 0x11, 0xbd, 0xa3, 0x8e, 0xd2, + 0x03, 0x2e, 0xd3, 0x73, 0x2b, 0xdf, 0x91, 0x45, 0x13, 0xa4, + 0xbd, 0x8a, 0x97, 0x90, 0x7a, 0x2e, 0x49, 0x2f, 0x32, 0x2e, + 0x34, 0x8a, 0x2b, 0xdc, 0x69, 0xf5, 0x09, 0x09, 0xff, 0x6a, + 0x03, 0x25, 0x3c, 0x52, 0x30, 0x41, 0xe4, 0x9a, 0x76, 0x66, + 0xc7, 0x0f, 0x1b, 0x91, 0xd6, 0xe1, 0x39, 0xf0, 0x73, 0x08, + 0x1d, 0xf3, 0x43, 0xd0, 0x7d, 0x61, 0xf3, 0xd2, 0xf6, 0x2b, + 0xb6, 0x69, 0x07, 0xb1, 0xc3, 0x4c, 0x99, 0xcc, 0x63, 0x3a, + 0xd5, 0x49, 0x43, 0x30, 0xae, 0x5a, 0xbf, 0x94, 0x06, 0x2f, + 0x65, 0x37, 0xb3, 0x88, 0xe8, 0x33, 0x80, 0x68, 0xd6, 0xa9, + 0x0a, 0xce, 0xae, 0xaf, 0xea, 0x3c, 0x16, 0x21, 0xfe, 0x1b, + 0xd3, 0x34, 0x14, 0xdf, 0x77, 0x68, 0x57, 0x5f, 0x52, 0xad, + 0x19, 0x40, 0xbc, 0xac, 0xa1, 0x14, 0xf4, 0xdd, 0x69, 0xcc, + 0x21, 0x4e, 0xe1, 0xad, 0xb6, 0x9f, 0x74, 0x02, 0x56, 0x9d, + 0x98, 0x34, 0x3f, 0x91, 0xd1, 0x8b, 0x25, 0xbb, 0x3c, 0xd1, + 0x7c, 0xb1, 0x59, 0xcb, 0x30, 0xc5, 0x0a, 0x68, 0x13, 0x69, + 0x0c, 0x15, 0x75, 0x6b, 0xa9, 0xb4, 0xf1, 0xba, 0xaf, 0x86, + 0xba, 0x86, 0xac, 0x43, 0x5a, 0x71, 0x1b, 0x98, 0x4b, 0x55, + 0xeb, 0xbf, 0x58, 0xfe, 0xb5, 0x39, 0x8f, 0xd2, 0x47, 0xcd, + 0x46, 0x55, 0xc0, 0x15, 0x16, 0x99, 0x96, 0x2d, 0x73, 0xe2, + 0x4c, 0x9a, 0xe2, 0x84, 0xce, 0x3c, 0xd2, 0x62, 0xc7, 0x01, + 0xab, 0x05, 0xd3, 0x15, 0x17, 0x0d, 0xed, 0x7d, 0x6e, 0xb0, + 0xf3, 0x37, 0x74, 0x18, 0x04, 0xad, 0x94, 0x33, 0xd6, 0xbd, + 0x70, 0x1d, 0x86, 0x67, 0x01, 0x42, 0x1e, 0x52, 0x28, 0x79, + 0x94, 0x26, 0x94, 0x09, 0xe3, 0xea, 0x86, 0xd4, 0x06, 0x4e, + 0xcb, 0x49, 0x1b, 0x66, 0xec, 0x20, 0x31, 0x08, 0x60, 0x58, + 0x8f, 0xad, 0x50, 0xb9, 0x5c, 0xd4, 0x77, 0xca, 0x46, 0xb2, + 0x1f, 0x71, 0x34, 0x12, 0xd9, 0x2a, 0xe0, 0xe7, 0x8f, 0x6f, + 0x1f, 0x92, 0xd5, 0x4e, 0x2d, 0xab, 0x13, 0x22, 0x07, 0x86, + 0x74, 0x01, 0xae, 0x8a, 0xb8, 0x2f, 0xe5, 0x67, 0x21, 0xa9, + 0x1e, 0x70, 0x3f, 0x83, 0xe4, 0xe9, 0x93, 0x5d, 0xd2, 0xee, + 0x04, 0x01, 0x62, 0xab, 0xda, 0x65, 0x44, 0x16, 0xbb, 0xfd, + 0x3e, 0xfd, 0x94, 0xfc, 0x69, 0xf3, 0x92, 0xb7, 0xbd, 0x4a, + 0x41, 0x1d, 0x18, 0x6a, 0x6e, 0x36, 0x07, 0x87, 0xc2, 0xdc, + 0x0e, 0x28, 0xea, 0xa4, 0x10, 0x7a, 0x3e, 0xd0, 0x89, 0x4e, + 0x51, 0x3e, 0x40, 0xd1, 0x7c, 0x31, 0xae, 0x09, 0xa3, 0xa0, + 0x2a, 0x8a, 0xde, 0x02, 0x98, 0x50, 0x95, 0x81, 0xa7, 0x8f, + 0x94, 0xe6, 0x9f, 0x45, 0xfa, 0x41, 0xc1, 0x97, 0xf0, 0x67, + 0x9b, 0xbd, 0x9a, 0x32, 0xdd, 0x6e, 0x27, 0xc7, 0xde, 0xd2, + 0x75, 0xea, 0x4f, 0xad, 0x5f, 0x01, 0xaf, 0xc0, 0x2f, 0xb1, + 0xcb, 0x5b, 0x79, 0xd5, 0x5f, 0x38, 0x21, 0xf9, 0x92, 0x11, + 0xae, 0x99, 0xc6, 0x78, 0xd6, 0x44, 0x15, 0xc5, 0x3c, 0xf0, + 0xe7, 0x6c, 0x2e, 0x42, 0xc1, 0xdf, 0x7a, 0x94, 0x58, 0xe9, + 0x02, 0x5d, 0x4b, 0x85, 0xc6, 0x2b, 0x69, 0xd4, 0x34, 0x79, + 0x36, 0xad, 0xfc, 0xa4, 0x92, 0xcd, 0xcd, 0x00, 0xb2, 0xc7, + 0x94, 0x89, 0x3c, 0xc9, 0x08, 0xa5, 0x8d, 0x47, 0x3e, 0xd0, + 0x23, 0xd2, 0xbc, 0x94, 0x75, 0x66, 0xbb, 0x9e, 0xa7, 0x73, + 0xd7, 0x90, 0xde, 0xd7, 0xf9, 0x60, 0x91, 0x45, 0x70, 0x49, + 0x59, 0x21, 0xa8, 0x33, 0xa3, 0xc4, 0xd3, 0xb4, 0x6b, 0x76, + 0x63, 0x3f, 0xd1, 0x76, 0x13, 0x01, 0xcb, 0x1c, 0xee, 0x6e, + 0x24, 0x8c, 0x89, 0x35, 0x90, 0x80, 0x92, 0x74, 0xa5, 0x1a, + 0xea, 0x05, 0x25, 0xdf, 0x86, 0x38, 0x71, 0x5d, 0xc6, 0x98, + 0x73, 0x8b, 0xe9, 0xdc, 0x47, 0x1d, 0xe9, 0x21, 0x82, 0x28, + 0x72, 0x9f, 0xec, 0xb1, 0x8c, 0xdd, 0x5d, 0x4f, 0x17, 0x6a, + 0xe2, 0xfe, 0x3f, 0x1e, 0x20, 0x6f, 0xa5, 0x30, 0x68, 0xca, + 0xfb, 0xbb, 0x70, 0x50, 0x5c, 0x03, 0xe3, 0x9f, 0x42, 0xe4, + 0xc0, 0x5f, 0x41, 0xdc, 0x69, 0x24, 0xe5, 0xc8, 0x74, 0xab, + 0x14, 0x1e, 0x81, 0x88, 0xba, 0xbd, 0x47, 0x91, 0x84, 0x70, + 0xe8, 0x76, 0x33, 0xbb, 0x20, 0x01, 0x1a, 0x62, 0x65, 0xca, + 0x88, 0x2d, 0x12, 0x74, 0x92, 0x1d, 0x3c, 0x1b, 0xa2, 0x85, + 0x2a, 0xe7, 0xb8, 0x67, 0x08, 0x10, 0x6e, 0xfa, 0x8b, 0x05, + 0x68, 0x60, 0x7b, 0x87, 0x5f, 0xf3, 0xce, 0xa0, 0xd6, 0x6c, + 0x76, 0x6f, 0x17, 0x73, 0x16, 0x3b, 0x7e, 0xb5, 0x9f, 0x73, + 0xb6, 0xa8, 0x9c, 0xf5, 0xb8, 0x1b, 0x0f, 0xb4, 0xa4, 0xc0, + 0x0a, 0xef, 0xd0, 0xf7, 0xf6, 0x33, 0xe3, 0xac, 0x9b, 0xaf, + 0x27, 0x28, 0xd6, 0x2c, 0x5f, 0xa3, 0xc1, 0x79, 0xc5, 0xe4, + 0x26, 0xa5, 0x2f, 0xca, 0x1f, 0x68, 0x9a, 0x34, 0xf8, 0x90, + 0x72, 0x5d, 0x51, 0x0c, 0x3a, 0xf9, 0x5b, 0x47, 0x3e, 0xec, + 0x53, 0xb8, 0xa8, 0x10, 0x96, 0x5a, 0x63, 0x69, 0x26, 0xe4, + 0xae, 0x5b, 0x99, 0x21, 0x04, 0x9e, 0x54, 0x85, 0x7a, 0x96, + 0xc8, 0x35, 0x06, 0xcd, 0x6a, 0xfa, 0x79, 0x2d, 0x39, 0xeb, + 0xde, 0xb3, 0x14, 0x26, 0xc3, 0x2e, 0xca, 0x4a, 0xbe, 0xb6, + 0x6f, 0x9b, 0x77, 0xf5, 0x11, 0xd8, 0x20, 0xff, 0x04, 0x87, + 0x1c, 0xeb, 0x8b, 0xc2, 0x52, 0x4f, 0xc9, 0xef, 0xe1, 0x9e, + 0xb8, 0xa8, 0x15, 0xee, 0x89, 0x0b, 0xe2, 0xe5, 0xf7, 0xc3, + 0xfa, 0x48, 0x33, 0xb7, 0xa7, 0x41, 0xdf, 0x3b, 0xdc, 0x56, + 0x8f, 0xbf, 0x43, 0x03, 0x06, 0xae, 0x66, 0x85, 0xa7, 0x00, + 0x16, 0x2d, 0xf0, 0x1a, 0xc4, 0x76, 0xe0, 0x69, 0xdb, 0x8e, + 0x81, 0x2e, 0x2b, 0xd9, 0xaa, 0x22, 0x17, 0xf2, 0x0e, 0xe9, + 0x79, 0xce, 0x16, 0xb0, 0xbf, 0x1d, 0x48, 0xd3, 0x26, 0x62, + 0x49, 0x5c, 0xd9, 0x6b, 0x3a, 0x04, 0xb9, 0x70, 0xf4, 0x0a, + 0x6d, 0xdc, 0xac, 0x49, 0x35, 0xdb, 0xb6, 0xe9, 0xb8, 0x15, + 0x29, 0xea, 0x6d, 0xf2, 0x93, 0x43, 0xcd, 0x4d, 0x17, 0x6c, + 0xf6, 0x3f, 0x4c, 0x01, 0x66, 0x09, 0x9b, 0xf8, 0x47, 0x0e, + 0xfa, 0x9c, 0x4b, 0x90, 0xb0, 0x66, 0xce, 0xd5, 0x34, 0x9b, + 0x36, 0xb1, 0xbe, 0x71, 0x5c, 0x07, 0xd4, 0xfd, 0x7b, 0x77, + 0xf5, 0x26, 0x8e, 0x8c, 0x0f, 0x34, 0x9f, 0xc1, 0xbc, 0x66, + 0xce, 0x47, 0xc5, 0xfb, 0xc4, 0x3d, 0x12, 0xf4, 0xeb, 0x5f, + 0xde, 0xb2, 0x3f, 0x7b, 0xf0, 0xb2, 0x79, 0x16, 0x07, 0x5a, + 0xc6, 0x26, 0x27, 0x8b, 0x29, 0x67, 0x7d, 0x17, 0x02, 0x58, + 0x43, 0x72, 0x47, 0x69, 0x2d, 0x6e, 0x9b, 0xe3, 0xc9, 0x9e, + 0xae, 0x4d, 0xbb, 0x87, 0x07, 0x61, 0x4a, 0x75, 0xac, 0x65, + 0xec, 0xd5, 0x25, 0x6a, 0xc9, 0x79, 0x42, 0x7d, 0xbe, 0x74, + 0x17, 0x94, 0x13, 0x02, 0x41, 0x42, 0xdf, 0x0f, 0xe8, 0xab, + 0x94, 0xf2, 0x39, 0xf7, 0xa8, 0x89, 0x0a, 0x79, 0x68, 0x45, + 0xd1, 0xff, 0xe8, 0xce, 0x82, 0xa8, 0x61, 0x91, 0xd8, 0xb0, + 0x5b, 0xd3, 0xd3, 0xbf, 0x7f, 0x79, 0x46, 0xa9, 0x84, 0x82, + 0xc9, 0xd3, 0xc4, 0xba, 0x88, 0xec, 0x73, 0xd0, 0x68, 0x0f, + 0xd2, 0xac, 0x5f, 0x45, 0x2d, 0xda, 0xc2, 0x13, 0x9e, 0x32, + 0x9b, 0xa7, 0xf6, 0xbc, 0x48, 0x93, 0xa8, 0x7e, 0xef, 0x7d, + 0xa7, 0x40, 0x06, 0x4d, 0x08, 0x0e, 0xda, 0x4b, 0x52, 0x1a, + 0x34, 0x7a, 0x3a, 0x22, 0x6c, 0x86, 0x59, 0x2e, 0xcf, 0x3c, + 0x47, 0xc3, 0x8d, 0x07, 0x58, 0x26, 0xbd, 0x7b, 0xda, 0x80, + 0xde, 0x79, 0x0d, 0x56, 0xe6, 0xd2, 0x05, 0xfe, 0xcb, 0x9c, + 0x19, 0x66, 0xc4, 0xb9, 0x24, 0xdd, 0xfe, 0x08, 0x36, 0xb6, + 0x6c, 0xd5, 0x26, 0x3f, 0xb7, 0x20, 0x6a, 0x18, 0xa0, 0x84, + 0x3a, 0x28, 0x8c, 0x07, 0x56, 0x40, 0xcc, 0x8a, 0x43, 0x11, + 0xf6, 0xc0, 0x3c, 0x62, 0xe9, 0xc5, 0x85, 0x98, 0x14, 0x39, + 0xa1, 0x6a, 0xaa, 0x8a, 0x9a, 0x04, 0x40, 0x4b, 0xec, 0x46, + 0x67, 0xdb, 0x42, 0xae, 0x51, 0x96, 0x9b, 0x75, 0xb8, 0xd9, + 0x3f, 0xc5, 0x95, 0xb4, 0xae, 0x5b, 0x23, 0x32, 0x29, 0xe0, + 0x7d, 0x83, 0x57, 0x35, 0x10, 0xbf, 0x89, 0x02, 0x37, 0x27, + 0x87, 0x09, 0x41, 0x78, 0xae, 0xfb, 0x61, 0x05, 0x13, 0x02, + 0x56, 0x8b, 0x4b, 0x6e, 0xa0, 0xa7, 0x83, 0xa6, 0xa8, 0x39, + 0xed, 0xf0, 0x70, 0xb3, 0x73, 0x8c, 0xa7, 0x80, 0x4f, 0x2d, + 0x3d, 0xca, 0x72, 0x30, 0xd7, 0xe7, 0x45, 0xb2, 0x2f, 0xd2, + 0x44, 0xfa, 0x82, 0x40, 0x4e, 0x7a, 0xf4, 0xf7, 0x14, 0xd9, + 0x6c, 0xdd, 0x33, 0x80, 0x0a, 0x44, 0xdd, 0x7b, 0xad, 0x12, + 0x51, 0xfb, 0x12, 0xa8, 0x3d, 0x79, 0xbc, 0x94, 0xf6, 0x6d, + 0xb5, 0x1e, 0xad, 0xe1, 0x6d, 0x05, 0x3f, 0x04, 0xa2, 0xe1, + 0xf1, 0x1a, 0x8f, 0xe3, 0xf4, 0x7f, 0xf9, 0x2f, 0xb3, 0xaf, + 0x28, 0x94, 0x66, 0x53, 0x03, 0x23, 0xf3, 0xf0, 0xb2, 0xce, + 0x29, 0xed, 0x00, 0x99, 0xe6, 0xe4, 0xf1, 0x6a, 0x0d, 0x38, + 0x71, 0x5a, 0xb9, 0x95, 0x23, 0xe2, 0xea, 0xd5, 0xbb, 0xf4, + 0xe3, 0x9c, 0x86, 0x84, 0x2f, 0x4e, 0x37, 0x8c, 0xc8, 0x22, + 0xf8, 0xa0, 0x9d, 0xd7, 0xb5, 0x5c, 0x8f, 0xa9, 0x4a, 0xb0, + 0xae, 0xb3, 0xc1, 0x89, 0x0f, 0x90, 0x65, 0x5d, 0x44, 0x77, + 0xf9, 0x8e, 0x52, 0x92, 0x19, 0x04, 0xcc, 0x39, 0xc2, 0x76, + 0x1b, 0xb4, 0xe2, 0x22, 0xf9, 0x67, 0x39, 0xca, 0x32, 0x1f, + 0x32, 0xb0, 0x8b, 0x08, 0x6d, 0xd7, 0xc8, 0x5e, 0x2d, 0xc8, + 0xe1, 0xef, 0x87, 0x56, 0x47, 0x38, 0x00, 0xf9, 0xae, 0x65, + 0xc7, 0x84, 0x5f, 0xf0, 0x65, 0x19, 0x5b, 0xf0, 0xd5, 0x41, + 0xaf, 0x77, 0xef, 0xba, 0x8f, 0x68, 0xbb, 0x91, 0x80, 0x0d, + 0xb2, 0xa7, 0xc8, 0x55, 0x0d, 0x9c, 0x38, 0xac, 0xac, 0x4a, + 0x25, 0xd0, 0xc3, 0xf9, 0xfa, 0x62, 0x7a, 0x92, 0x0b, 0x30, + 0x90, 0x27, 0x52, 0x51, 0x75, 0xd1, 0x6a, 0xaf, 0x86, 0xb6, + 0x24, 0x77, 0x5c, 0x6d, 0xf6, 0x9a, 0x59, 0xe4, 0x51, 0x61, + 0xce, 0xc6, 0x32, 0x72, 0x69, 0x22, 0x6f, 0xa3, 0x9c, 0x0c, + 0x83, 0x94, 0x9d, 0xf7, 0x9a, 0x01, 0xc2, 0x42, 0xa7, 0xc2, + 0xac, 0xc2, 0xb9, 0x58, 0x44, 0x00, 0x5b, 0x50, 0x6e, 0xea, + 0x32, 0x54, 0x3f, 0xdc, 0x1b, 0x57, 0x1b, 0xde, 0x3e, 0x20, + 0x4f, 0x4d, 0x38, 0x0c, 0xca, 0x6d, 0xca, 0x9f, 0x3c, 0x0e, + 0x73, 0x24, 0xe1, 0x8a, 0x30, 0x2e, 0xc6, 0x2a, 0xe7, 0xbd, + 0x21, 0x37, 0x3f, 0x68, 0x6f, 0x7f, 0x30, 0x24, 0x19, 0x6a, + 0xee, 0x2c, 0x6f, 0x9c, 0x77, 0x06, 0xce, 0x40, 0x8a, 0x12, + 0x2b, 0x94, 0x00, 0x83, 0x27, 0x93, 0x75, 0x1f, 0x6c, 0xdb, + 0xc6, 0xbc, 0x0e, 0x2c, 0x35, 0x3d, 0xdf, 0x7f, 0xf8, 0x1f, + 0x39, 0xe0, 0xe3, 0x43, 0x0b, 0xe2, 0xfe, 0xa3, 0xfb, 0x95, + 0x13, 0x0b, 0x7a, 0x0f, 0x29, 0x8f, 0xa3, 0xc0, 0x58, 0x81, + 0x72, 0x04, 0x9e, 0x4d, 0xef, 0xff, 0x9d, 0xc6, 0xf6, 0xe1, + 0x51, 0x53, 0x30, 0xe4, 0x1b, 0x29, 0xec, 0x18, 0xf1, 0xbe, + 0x0c, 0x50, 0xbe, 0x5a, 0xe6, 0x5f, 0xd2, 0x7a, 0x2c, 0x98, + 0x8b, 0x49, 0x84, 0x85, 0xeb, 0xb8, 0x0e, 0x71, 0x5c, 0x80, + 0xdc, 0xd4, 0x7c, 0x63, 0x44, 0xf4, 0x95, 0x84, 0x83, 0x95, + 0xc4, 0xb4, 0x46, 0xd6, 0x38, 0x91, 0x23, 0xc6, 0x60, 0xb9, + 0x68, 0x1f, 0x36, 0x5d, 0x93, 0x18, 0x11, 0x24, 0x3e, 0xb7, + 0xe6, 0xb4, 0x28, 0xf6, 0x87, 0x31, 0x35, 0x70, 0xb3, 0x27, + 0x64, 0x63, 0x8a, 0xb6, 0xa8, 0x2f, 0x09, 0x92, 0x04, 0x55, + 0x56, 0x7b, 0xf1, 0xe2, 0x87, 0x68, 0xf6, 0xdd, 0x35, 0x9d, + 0xc4, 0x75, 0x77, 0x10, 0x8f, 0x2e, 0x3d, 0x1c, 0xeb, 0x5d, + 0x93, 0xc9, 0xd3, 0x35, 0xea, 0x17, 0xa9, 0xd7, 0xfc, 0xcb, + 0x39, 0x01, 0x31, 0xde, 0xb2, 0x0e, 0x16, 0xaf, 0x9d, 0x21, + 0xc4, 0x02, 0xb6, 0x1c, 0x2a, 0x7c, 0x9d, 0xb2, 0x43, 0x06, + 0x27, 0xbe, 0x75, 0x71, 0x98, 0xa3, 0x37, 0xcd, 0x28, 0x58, + 0x6d, 0xb3, 0xaa, 0xb8, 0xd0, 0xf9, 0xd9, 0x40, 0x3f, 0x11, + 0xef, 0x8c, 0xe7, 0xb7, 0x9d, 0x79, 0x5b, 0xf6, 0x0f, 0xca, + 0xef, 0xd8, 0x0c, 0x69, 0x88, 0xee, 0x47, 0x59, 0x02, 0x4c, + 0xf4, 0x9d, 0x87, 0x76, 0x10, 0x1c, 0x8e, 0x36, 0x16, 0x6f, + 0x5e, 0x4b, 0x7a, 0xd2, 0x67, 0xc6, 0xe2, 0x32, 0xd3, 0x80, + 0x12, 0x3b, 0x0c, 0xc7, 0x42, 0x6b, 0x80, 0x8f, 0xd3, 0x50, + 0xaa, 0xcb, 0x08, 0x2e, 0x5e, 0x9c, 0x17, 0x82, 0x25, 0x68, + 0xb1, 0xf5, 0x9e, 0xbe, 0x00, 0xc8, 0xec, 0x25, 0x5c, 0xa2, + 0x28, 0xd1, 0xe3, 0x5b, 0xb5, 0x14, 0xed, 0x2d, 0xc5, 0xb1, + 0x88, 0xfe, 0xbb, 0x25, 0x35, 0x4c, 0xc5, 0xa2, 0xd3, 0xcd, + 0x7d, 0xb4, 0x0c, 0x41, 0xf4, 0x34, 0x29, 0x53, 0x17, 0x67, + 0x0a, 0xb1, 0x5d, 0x53, 0x8f, 0x30, 0x15, 0xbd, 0x66, 0xc2, + 0xd7, 0x51, 0x15, 0xb5, 0xe2, 0x17, 0x0d, 0x1f, 0xc9, 0x30, + 0xb3, 0x24, 0xc8, 0xa0, 0x7d, 0x86, 0xab, 0x4a, 0xfb, 0xc5, + 0xa9, 0x71, 0x6c, 0x16, 0x64, 0xaa, 0x0f, 0x3a, 0xa7, 0xce, + 0x15, 0x26, 0xf6, 0x55, 0xd5, 0x69, 0x1b, 0x2e, 0xb1, 0x25, + 0xd6, 0x5e, 0xc3, 0x37, 0xbc, 0x81, 0x09, 0x9b, 0x39, 0xb2, + 0x33, 0x33, 0x2f, 0x5e, 0x39, 0x9d, 0x66, 0xc9, 0x53, 0xb2, + 0x8b, 0x9a, 0xf3, 0xd3, 0x45, 0x47, 0x2d, 0x03, 0xe4, 0x7b, + 0x57, 0xed, 0x1d, 0x43, 0x11, 0xf3, 0x86, 0xb7, 0xb8, 0xba, + 0x66, 0xe1, 0xe2, 0x26, 0xcd, 0xf8, 0x9a, 0xa7, 0x03, 0x39, + 0x03, 0x5b, 0xc0, 0x7a, 0x9e, 0xca, 0xd9, 0xf0, 0x1f, 0x61, + 0xb6, 0x46, 0xd2, 0xfd, 0xb3, 0x8a, 0x3b, 0xfc, 0x14, 0xdc, + 0x9b, 0xf7, 0x0a, 0x3c, 0xdf, 0x27, 0xaa, 0x75, 0x7c, 0xbf, + 0x30, 0x27, 0x6d, 0xdf, 0xba, 0x70, 0x40, 0x3b, 0x6a, 0xb3, + 0x31, 0x14, 0x6a, 0x69, 0x0d, 0x62, 0x85, 0x39, 0xc6, 0x29, + 0xba, 0x11, 0x82, 0xcc, 0x50, 0x50, 0x9b, 0x69, 0x69, 0xa5, + 0xc6, 0xb5, 0xce, 0xac, 0xc3, 0xef, 0x2e, 0x01, 0x3d, 0x3b, + 0x40, 0xa8, 0x27, 0x40, 0x81, 0xb0, 0x74, 0xf9, 0xb5, 0xee, + 0x2e, 0x16, 0x9c, 0xda, 0xc4, 0x36, 0x23, 0x4c, 0x2b, 0xb7, + 0xe6, 0x99, 0xb1, 0x7f, 0xac, 0xe0, 0x5c, 0xbe, 0xb7, 0x38, + 0x9d, 0xf5, 0xcd, 0x6f, 0x14, 0x25, 0x80, 0x8f, 0x9b, 0x26, + 0x03, 0x59, 0x80, 0x56, 0x31, 0xa0, 0xd5, 0x25, 0xdb, 0x1a, + 0x68, 0x24, 0x9d, 0xdc, 0xc7, 0x62, 0x0b, 0x25, 0x9b, 0x3e, + 0x10, 0x77, 0xe8, 0x4e, 0xdc, 0xba, 0x26, 0x61, 0xb8, 0x27, + 0xc1, 0x5b, 0x08, 0x06, 0xb4, 0x01, 0x5e, 0x0b, 0xbd, 0xf5, + 0x83, 0xd9, 0xa3, 0xb4, 0xbf, 0xf1, 0xf0, 0x14, 0x64, 0x98, + 0x93, 0xfc, 0x67, 0x29, 0x61, 0x9e, 0xff, 0x76, 0x3c, 0x76, + 0xa6, 0x9d, 0xe4, 0xa6, 0x28, 0x69, 0x32, 0x7a, 0x4f, 0xb8, + 0x92, 0xf5, 0x05, 0x0f, 0x41, 0x20, 0x73, 0xea, 0x4d, 0x62, + 0xa3, 0xb1, 0x44, 0xf9, 0xd8, 0xb4, 0x51, 0x5a, 0x43, 0x86, + 0x15, 0xd8, 0x8e, 0xa3, 0x63, 0x6b, 0x17, 0x9c, 0xb0, 0x98, + 0x3d, 0xa5, 0x9b, 0x76, 0x9b, 0x87, 0x40, 0x14, 0x45, 0xfa, + 0xd8, 0xd4, 0x7b, 0x68, 0x01, 0x75, 0x03, 0x7d, 0xb0, 0xbd, + 0x40, 0x15, 0xa3, 0xfd, 0xa1, 0x17, 0x84, 0x68, 0x51, 0x20, + 0x66, 0x96, 0x78, 0x34, 0xb9, 0x90, 0x4d, 0x7a, 0x3e, 0x24, + 0x8e, 0xd7, 0x83, 0x6f, 0x19, 0x53, 0xae, 0xb6, 0xd3, 0xab, + 0x4e, 0x38, 0x6f, 0xb7, 0x54, 0x5f, 0xb7, 0xa6, 0xc5, 0x27, + 0x5c, 0x29, 0xed, 0xd5, 0x4b, 0xa3, 0x0b, 0x9a, 0x80, 0xbc, + 0x94, 0xa8, 0x36, 0xde, 0xf2, 0x38, 0xd8, 0x84, 0x1f, 0x09, + 0x73, 0xaa, 0xcf, 0x20, 0xaf, 0xf9, 0x6f, 0xe5, 0x34, 0x9f, + 0x95, 0x0b, 0x21, 0x50, 0x4e, 0xdf, 0xe9, 0x82, 0x10, 0x16, + 0xe6, 0x6d, 0xa5, 0x3b, 0x03, 0x10, 0xdf, 0xdf, 0x7a, 0xc9, + 0x84, 0x59, 0x5e, 0xca, 0x29, 0x8b, 0xb6, 0x25, 0x6b, 0xf2, + 0x97, 0x12, 0xc2, 0xb8, 0x9a, 0x08, 0xb6, 0x27, 0x8a, 0xfa, + 0x83, 0xa5, 0x4a, 0x02, 0x7c, 0x6d, 0xe1, 0x34, 0x1d, 0xfc, + 0x41, 0x72, 0xc1, 0x7a, 0x06, 0x6c, 0xec, 0xdc, 0x69, 0xd3, + 0x9d, 0x01, 0x9c, 0xc4, 0x8f, 0x3e, 0x08, 0x6e, 0x41, 0x22, + 0x93, 0x09, 0x22, 0x68, 0xd9, 0xc3, 0x7b, 0x1c, 0x24, 0x1e, + 0x5c, 0x48, 0x95, 0x96, 0xce, 0xf3, 0x87, 0xd0, 0x0e, 0xd1, + 0xfe, 0x18, 0xe3, 0x1d, 0x13, 0x1b, 0x3b, 0x87, 0xcf, 0xd5, + 0xf4, 0x05, 0x28, 0x3d, 0x4a, 0x51, 0x56, 0xbb, 0x0b, 0x19, + 0x1d, 0x29, 0x38, 0x5f, 0x88, 0xa0, 0xf6, 0x05, 0x29, 0x37, + 0x44, 0x4a, 0x83, 0xd7, 0xd8, 0xe5, 0xef, 0xa1, 0xfb, 0x16, + 0x2c, 0x45, 0x48, 0x53, 0x6e, 0xce, 0xd1, 0xe0, 0x27, 0x6b, + 0xb3, 0xea, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x0e, 0x17, 0x1d, 0x21, 0x23, 0x2c, 0x31 }; -static const int sizeof_bench_dilithium_level5_sig = - sizeof(bench_dilithium_level5_sig); +static const int sizeof_bench_mldsa_87_sig = + sizeof(bench_mldsa_87_sig); #endif -#endif /* !WOLFSSL_DILITHIUM_NO_VERIFY */ +#endif /* !WOLFSSL_MLDSA_NO_VERIFY */ -void bench_dilithiumKeySign(byte level) +void bench_mldsaKeySign(byte level) { int ret = 0; double start; int i, count; -#if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) +#if !defined(WOLFSSL_MLDSA_NO_SIGN) || !defined(WOLFSSL_MLDSA_NO_VERIFY) word32 x = 0; #endif -#define DILITHIUM_BENCH_MSG_SIZE 512 +#define WC_MLDSA_BENCH_MSG_SIZE 512 #ifdef WOLFSSL_SMALL_STACK - dilithium_key *key = NULL; - #if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) + wc_MlDsaKey *key = NULL; + #if !defined(WOLFSSL_MLDSA_NO_SIGN) || \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) byte *sig = NULL; byte *msg = NULL; #endif #else - dilithium_key key[1]; - #if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - byte sig[DILITHIUM_MAX_SIG_SIZE]; - byte msg[DILITHIUM_BENCH_MSG_SIZE]; + wc_MlDsaKey key[1]; + #if !defined(WOLFSSL_MLDSA_NO_SIGN) || \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) + byte sig[MLDSA_MAX_SIG_SIZE]; + byte msg[WC_MLDSA_BENCH_MSG_SIZE]; #endif #endif @@ -16143,19 +16148,19 @@ void bench_dilithiumKeySign(byte level) bench_stats_prepare(); #ifdef WOLFSSL_SMALL_STACK - key = (dilithium_key *)XMALLOC(sizeof(*key), HEAP_HINT, + key = (wc_MlDsaKey *)XMALLOC(sizeof(*key), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - #if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - sig = (byte *)XMALLOC(DILITHIUM_MAX_SIG_SIZE, HEAP_HINT, + #if !defined(WOLFSSL_MLDSA_NO_SIGN) || \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) + sig = (byte *)XMALLOC(MLDSA_MAX_SIG_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - msg = (byte *)XMALLOC(DILITHIUM_BENCH_MSG_SIZE, HEAP_HINT, + msg = (byte *)XMALLOC(WC_MLDSA_BENCH_MSG_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif if (key == NULL) { - #if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) + #if !defined(WOLFSSL_MLDSA_NO_SIGN) || \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) XFREE(sig, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); sig = NULL; XFREE(msg, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -16163,8 +16168,8 @@ void bench_dilithiumKeySign(byte level) #endif goto out; } - #if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) + #if !defined(WOLFSSL_MLDSA_NO_SIGN) || \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) if ((sig == NULL) || (msg == NULL)) { XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); key = NULL; @@ -16187,31 +16192,31 @@ void bench_dilithiumKeySign(byte level) params = 87; } -#if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) +#if !defined(WOLFSSL_MLDSA_NO_SIGN) || !defined(WOLFSSL_MLDSA_NO_VERIFY) /* make dummy msg */ - for (i = 0; i < DILITHIUM_BENCH_MSG_SIZE; i++) { + for (i = 0; i < WC_MLDSA_BENCH_MSG_SIZE; i++) { msg[i] = (byte)i; } #endif - ret = wc_dilithium_init_ex(key, HEAP_HINT, devId); + ret = wc_MlDsaKey_Init(key, HEAP_HINT, devId); if (ret != 0) { - printf("wc_dilithium_init_ex failed %d\n", ret); + printf("wc_MlDsaKey_Init failed %d\n", ret); goto out; } - ret = wc_dilithium_set_level(key, level); + ret = wc_MlDsaKey_SetParams(key, level); if (ret != 0) { - printf("wc_dilithium_set_level() failed %d\n", ret); + printf("wc_MlDsaKey_SetParams() failed %d\n", ret); } -#ifndef WOLFSSL_DILITHIUM_NO_MAKE_KEY +#ifndef WOLFSSL_MLDSA_NO_MAKE_KEY bench_stats_start(&count, &start); do { for (i = 0; i < agreeTimes; i++) { - ret = wc_dilithium_make_key(key, GLOBAL_RNG); + ret = wc_MlDsaKey_MakeKey(key, GLOBAL_RNG); if (ret != 0) { - printf("wc_dilithium_import_private_key failed %d\n", ret); + printf("wc_MlDsaKey_MakeKey failed %d\n", ret); goto out; } } @@ -16230,44 +16235,64 @@ void bench_dilithiumKeySign(byte level) #endif } -#elif !defined WOLFSSL_DILITHIUM_NO_SIGN +#elif !defined(WOLFSSL_MLDSA_NO_SIGN) + { + #ifndef WOLFSSL_MLDSA_NO_ASN1 + word32 idx = 0; + #endif - PRIVATE_KEY_UNLOCK(); -#ifndef WOLFSSL_NO_ML_DSA_44 - if (level == 2) { - ret = wc_dilithium_import_private(bench_dilithium_level2_key, - sizeof_bench_dilithium_level2_key, key); - } -#endif -#ifndef WOLFSSL_NO_ML_DSA_65 - if (level == 3) { - ret = wc_dilithium_import_private(bench_dilithium_level3_key, - sizeof_bench_dilithium_level3_key, key); - } -#endif -#ifndef WOLFSSL_NO_ML_DSA_87 - if (level == 5) { - ret = wc_dilithium_import_private(bench_dilithium_level5_key, - sizeof_bench_dilithium_level5_key, key); - } -#endif - PRIVATE_KEY_LOCK(); - if (ret != 0) { - printf("Failed to load private key\n"); - goto out; + PRIVATE_KEY_UNLOCK(); + #ifndef WOLFSSL_NO_ML_DSA_44 + if (level == 2) { + #ifndef WOLFSSL_MLDSA_NO_ASN1 + ret = wc_MlDsaKey_PrivateKeyDecode(key, mldsa44_priv_only, + sizeof_mldsa44_priv_only, &idx); + #else + ret = wc_MlDsaKey_ImportPrivRaw(key, bench_mldsa_44_key, + sizeof_bench_mldsa_44_key); + #endif + } + #endif + #ifndef WOLFSSL_NO_ML_DSA_65 + if (level == 3) { + #ifndef WOLFSSL_MLDSA_NO_ASN1 + ret = wc_MlDsaKey_PrivateKeyDecode(key, mldsa65_priv_only, + sizeof_mldsa65_priv_only, &idx); + #else + ret = wc_MlDsaKey_ImportPrivRaw(key, bench_mldsa_65_key, + sizeof_bench_mldsa_65_key); + #endif + } + #endif + #ifndef WOLFSSL_NO_ML_DSA_87 + if (level == 5) { + #ifndef WOLFSSL_MLDSA_NO_ASN1 + ret = wc_MlDsaKey_PrivateKeyDecode(key, mldsa87_priv_only, + sizeof_mldsa87_priv_only, &idx); + #else + ret = wc_MlDsaKey_ImportPrivRaw(key, bench_mldsa_87_key, + sizeof_bench_mldsa_87_key); + #endif + } + #endif + PRIVATE_KEY_LOCK(); + if (ret != 0) { + printf("Failed to load private key\n"); + goto out; + } } #endif -#ifndef WOLFSSL_DILITHIUM_NO_SIGN +#ifndef WOLFSSL_MLDSA_NO_SIGN if (level == 2) { - x = DILITHIUM_LEVEL2_SIG_SIZE; + x = WC_MLDSA_44_SIG_SIZE; } else if (level == 3) { - x = DILITHIUM_LEVEL3_SIG_SIZE; + x = WC_MLDSA_65_SIG_SIZE; } else { - x = DILITHIUM_LEVEL5_SIG_SIZE; + x = WC_MLDSA_87_SIG_SIZE; } RESET_MULTI_VALUE_STATS_VARS(); @@ -16276,10 +16301,10 @@ void bench_dilithiumKeySign(byte level) do { for (i = 0; i < agreeTimes; i++) { if (ret == 0) { - ret = wc_dilithium_sign_ctx_msg(NULL, 0, msg, - DILITHIUM_BENCH_MSG_SIZE, sig, &x, key, GLOBAL_RNG); + ret = wc_MlDsaKey_SignCtx(key, NULL, 0, sig, &x, + msg, WC_MLDSA_BENCH_MSG_SIZE, GLOBAL_RNG); if (ret != 0) { - printf("wc_dilithium_sign_ctx_msg failed\n"); + printf("wc_MlDsaKey_SignCtx failed\n"); } } RECORD_MULTI_VALUE_STATS(); @@ -16301,48 +16326,68 @@ void bench_dilithiumKeySign(byte level) #endif -#if !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && \ - (defined(WOLFSSL_DILITHIUM_NO_SIGN) || \ - defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY)) +#if !defined(WOLFSSL_MLDSA_NO_VERIFY) && \ + (defined(WOLFSSL_MLDSA_NO_SIGN) || \ + defined(WOLFSSL_MLDSA_NO_MAKE_KEY)) + { + #ifndef WOLFSSL_MLDSA_NO_ASN1 + word32 idx = 0; + #endif -#ifndef WOLFSSL_NO_ML_DSA_44 - if (level == 2) { - #ifdef WOLFSSL_DILITHIUM_NO_SIGN - x = sizeof_bench_dilithium_level2_sig; - XMEMCPY(sig, bench_dilithium_level2_sig, x); + #ifndef WOLFSSL_NO_ML_DSA_44 + if (level == 2) { + #ifdef WOLFSSL_MLDSA_NO_SIGN + x = sizeof_bench_mldsa_44_sig; + XMEMCPY(sig, bench_mldsa_44_sig, x); + #endif + #ifndef WOLFSSL_MLDSA_NO_ASN1 + ret = wc_MlDsaKey_PublicKeyDecode(key, mldsa44_pub_spki, + sizeof_mldsa44_pub_spki, &idx); + #else + ret = wc_MlDsaKey_ImportPubRaw(key, bench_mldsa_44_pubkey, + sizeof_bench_mldsa_44_pubkey); + #endif + } #endif - ret = wc_dilithium_import_public(bench_dilithium_level2_pubkey, - sizeof_bench_dilithium_level2_pubkey, key); - } -#endif -#ifndef WOLFSSL_NO_ML_DSA_65 - if (level == 3) { - #ifdef WOLFSSL_DILITHIUM_NO_SIGN - x = sizeof_bench_dilithium_level3_sig; - XMEMCPY(sig, bench_dilithium_level3_sig, x); + #ifndef WOLFSSL_NO_ML_DSA_65 + if (level == 3) { + #ifdef WOLFSSL_MLDSA_NO_SIGN + x = sizeof_bench_mldsa_65_sig; + XMEMCPY(sig, bench_mldsa_65_sig, x); + #endif + #ifndef WOLFSSL_MLDSA_NO_ASN1 + ret = wc_MlDsaKey_PublicKeyDecode(key, mldsa65_pub_spki, + sizeof_mldsa65_pub_spki, &idx); + #else + ret = wc_MlDsaKey_ImportPubRaw(key, bench_mldsa_65_pubkey, + sizeof_bench_mldsa_65_pubkey); + #endif + } #endif - ret = wc_dilithium_import_public(bench_dilithium_level3_pubkey, - sizeof_bench_dilithium_level3_pubkey, key); - } -#endif -#ifndef WOLFSSL_NO_ML_DSA_87 - if (level == 5) { - #ifdef WOLFSSL_DILITHIUM_NO_SIGN - x = sizeof_bench_dilithium_level5_sig; - XMEMCPY(sig, bench_dilithium_level5_sig, x); + #ifndef WOLFSSL_NO_ML_DSA_87 + if (level == 5) { + #ifdef WOLFSSL_MLDSA_NO_SIGN + x = sizeof_bench_mldsa_87_sig; + XMEMCPY(sig, bench_mldsa_87_sig, x); + #endif + #ifndef WOLFSSL_MLDSA_NO_ASN1 + ret = wc_MlDsaKey_PublicKeyDecode(key, mldsa87_pub_spki, + sizeof_mldsa87_pub_spki, &idx); + #else + ret = wc_MlDsaKey_ImportPubRaw(key, bench_mldsa_87_pubkey, + sizeof_bench_mldsa_87_pubkey); + #endif + } #endif - ret = wc_dilithium_import_public(bench_dilithium_level5_pubkey, - sizeof_bench_dilithium_level5_pubkey, key); - } -#endif - if (ret != 0) { - printf("Failed to load public key\n"); - goto out; + if (ret != 0) { + printf("Failed to load public key\n"); + goto out; + } } #endif -#ifndef WOLFSSL_DILITHIUM_NO_VERIFY +#ifndef WOLFSSL_MLDSA_NO_VERIFY RESET_MULTI_VALUE_STATS_VARS(); bench_stats_start(&count, &start); @@ -16350,11 +16395,11 @@ void bench_dilithiumKeySign(byte level) for (i = 0; i < agreeTimes; i++) { if (ret == 0) { int verify = 0; - ret = wc_dilithium_verify_ctx_msg(sig, x, NULL, 0, msg, - DILITHIUM_BENCH_MSG_SIZE, &verify, key); + ret = wc_MlDsaKey_VerifyCtx(key, sig, x, NULL, 0, msg, + WC_MLDSA_BENCH_MSG_SIZE, &verify); if (ret != 0 || verify != 1) { - printf("wc_dilithium_verify_ctx_msg failed %d, verify %d\n", + printf("wc_MlDsaKey_VerifyCtx failed %d, verify %d\n", ret, verify); ret = -1; } @@ -16383,18 +16428,18 @@ void bench_dilithiumKeySign(byte level) if (key) #endif { - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); } #ifdef WOLFSSL_SMALL_STACK XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - #if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) + #if !defined(WOLFSSL_MLDSA_NO_SIGN) || !defined(WOLFSSL_MLDSA_NO_VERIFY) XFREE(sig, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(msg, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif #endif } -#endif /* HAVE_DILITHIUM && !WC_NO_RNG */ +#endif /* WOLFSSL_HAVE_MLDSA && !WC_NO_RNG */ #if defined(_WIN32) && !defined(INTIME_RTOS) @@ -17039,7 +17084,7 @@ static void Usage(void) for (i=0; bench_other_opt[i].str != NULL; i++) print_alg(bench_other_opt[i].str, &line); #if defined(WOLFSSL_HAVE_MLKEM) || defined(HAVE_FALCON) || \ - defined(HAVE_DILITHIUM) + defined(WOLFSSL_HAVE_MLDSA) for (i=0; bench_pq_asym_opt[i].str != NULL; i++) print_alg(bench_pq_asym_opt[i].str, &line); #endif @@ -17340,7 +17385,7 @@ int wolfcrypt_benchmark_main(int argc, char** argv) } } #if defined(WOLFSSL_HAVE_MLKEM) || defined(HAVE_FALCON) || \ - defined(HAVE_DILITHIUM) + defined(WOLFSSL_HAVE_MLDSA) /* Known asymmetric post-quantum algorithms */ for (i=0; !optMatched && bench_pq_asym_opt[i].str != NULL; i++) { if (string_matches(argv[1], bench_pq_asym_opt[i].str)) { diff --git a/wolfcrypt/benchmark/benchmark.h b/wolfcrypt/benchmark/benchmark.h index 2ea0fc06e2..067dd61749 100644 --- a/wolfcrypt/benchmark/benchmark.h +++ b/wolfcrypt/benchmark/benchmark.h @@ -140,7 +140,7 @@ void bench_blake2s(void); void bench_ascon_hash(void); void bench_pbkdf2(void); void bench_falconKeySign(byte level); -void bench_dilithiumKeySign(byte level); +void bench_mldsaKeySign(byte level); void bench_stats_print(void); diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index 055856141e..a4bd0d7ae2 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -185,11 +185,11 @@ ASN Options: * HAVE_PKCS12: Enable PKCS#12 support * * Algorithms (ASN encoding/decoding): - * HAVE_DILITHIUM: Enable Dilithium ASN support - * WOLFSSL_DILITHIUM_NO_ASN1: Disable Dilithium ASN.1 encoding - * WOLFSSL_DILITHIUM_FIPS204_DRAFT: FIPS 204 draft Dilithium - * WOLFSSL_DILITHIUM_NO_SIGN: Disable Dilithium signing - * WOLFSSL_DILITHIUM_NO_VERIFY: Disable Dilithium verify + * WOLFSSL_HAVE_MLDSA: Enable ML-DSA ASN support + * WOLFSSL_MLDSA_NO_ASN1: Disable ML-DSA ASN.1 encoding + * WOLFSSL_MLDSA_FIPS204_DRAFT: FIPS 204 draft ML-DSA + * WOLFSSL_MLDSA_NO_SIGN: Disable ML-DSA signing + * WOLFSSL_MLDSA_NO_VERIFY: Disable ML-DSA verify * HAVE_FALCON: Enable Falcon ASN support * WOLFSSL_HAVE_SLHDSA: Enable SLH-DSA ASN support * @@ -274,8 +274,8 @@ ASN Options: #if defined(HAVE_FALCON) #include #endif -#if defined(HAVE_DILITHIUM) - #include +#if defined(WOLFSSL_HAVE_MLDSA) + #include #endif #if defined(WOLFSSL_HAVE_SLHDSA) #include @@ -4418,9 +4418,9 @@ static int EncodeName(EncodedName* name, const char* nameStr, byte nameTag, byte #endif #ifdef WOLFSSL_CERT_GEN static int SetValidity(byte* output, int daysValid); -static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey, ecc_key* eccKey, WC_RNG* rng, DsaKey* dsaKey, ed25519_key* ed25519Key, ed448_key* ed448Key, falcon_key* falconKey, dilithium_key* dilithiumKey, SlhDsaKey* slhDsaKey); +static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey, ecc_key* eccKey, WC_RNG* rng, DsaKey* dsaKey, ed25519_key* ed25519Key, ed448_key* ed448Key, falcon_key* falconKey, wc_MlDsaKey* mldsaKey, SlhDsaKey* slhDsaKey); #ifdef WOLFSSL_CERT_REQ -static int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey, DsaKey* dsaKey, ecc_key* eccKey, ed25519_key* ed25519Key, ed448_key* ed448Key, falcon_key* falconKey, dilithium_key* dilithiumKey, SlhDsaKey* slhDsaKey); +static int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey, DsaKey* dsaKey, ecc_key* eccKey, ed25519_key* ed25519Key, ed448_key* ed448Key, falcon_key* falconKey, wc_MlDsaKey* mldsaKey, SlhDsaKey* slhDsaKey); #endif #endif #endif @@ -4598,8 +4598,8 @@ static int ParseCRL_Extensions(DecodedCRL* dcrl, const byte* buf, word32* inOutI /* Falcon Level 5: 1 3 9999 3 14 */ static const byte sigFalcon_Level5Oid[] = {43, 206, 15, 3, 14}; #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_HAVE_MLDSA +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT /* Dilithium Level 2: 1.3.6.1.4.1.2.267.12.4.4 */ static const byte sigDilithium_Level2Oid[] = {43, 6, 1, 4, 1, 2, 130, 11, 12, 4, 4}; @@ -4611,20 +4611,20 @@ static int ParseCRL_Extensions(DecodedCRL* dcrl, const byte* buf, word32* inOutI /* Dilithium Level 5: 1.3.6.1.4.1.2.267.12.8.7 */ static const byte sigDilithium_Level5Oid[] = {43, 6, 1, 4, 1, 2, 130, 11, 12, 8, 7}; -#endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ +#endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ - /* ML-DSA Level 2: 2.16.840.1.101.3.4.3.17 */ - static const byte sigMlDsa_Level2Oid[] = + /* ML-DSA-44: 2.16.840.1.101.3.4.3.17 */ + static const byte sigMlDsa_44Oid[] = {96, 134, 72, 1, 101, 3, 4, 3, 17}; - /* ML-DSA Level 3: 2.16.840.1.101.3.4.3.18 */ - static const byte sigMlDsa_Level3Oid[] = + /* ML-DSA-65: 2.16.840.1.101.3.4.3.18 */ + static const byte sigMlDsa_65Oid[] = {96, 134, 72, 1, 101, 3, 4, 3, 18}; - /* ML-DSA Level 5: 2.16.840.1.101.3.4.3.19 */ - static const byte sigMlDsa_Level5Oid[] = + /* ML-DSA-87: 2.16.840.1.101.3.4.3.19 */ + static const byte sigMlDsa_87Oid[] = {96, 134, 72, 1, 101, 3, 4, 3, 19}; -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WOLFSSL_HAVE_SLHDSA /* SLH-DSA-SHA2-128s: 2.16.840.1.101.3.4.3.20 */ static const byte sigSlhDsa_Sha2_128sOid[] = {96, 134, 72, 1, 101, 3, 4, 3, 20}; @@ -4698,8 +4698,8 @@ static int ParseCRL_Extensions(DecodedCRL* dcrl, const byte* buf, word32* inOutI /* Falcon Level 5: 1 3 9999 3 14 */ static const byte keyFalcon_Level5Oid[] = {43, 206, 15, 3, 14}; #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_HAVE_MLDSA +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT /* Dilithium Level 2: 1.3.6.1.4.1.2.267.12.4.4 */ static const byte keyDilithium_Level2Oid[] = {43, 6, 1, 4, 1, 2, 130, 11, 12, 4, 4}; @@ -4713,18 +4713,18 @@ static int ParseCRL_Extensions(DecodedCRL* dcrl, const byte* buf, word32* inOutI {43, 6, 1, 4, 1, 2, 130, 11, 12, 8, 7}; #endif - /* ML-DSA Level 2: 2.16.840.1.101.3.4.3.17 */ - static const byte keyMlDsa_Level2Oid[] = + /* ML-DSA-44: 2.16.840.1.101.3.4.3.17 */ + static const byte keyMlDsa_44Oid[] = {96, 134, 72, 1, 101, 3, 4, 3, 17}; - /* ML-DSA Level 3: 2.16.840.1.101.3.4.3.18 */ - static const byte keyMlDsa_Level3Oid[] = + /* ML-DSA-65: 2.16.840.1.101.3.4.3.18 */ + static const byte keyMlDsa_65Oid[] = {96, 134, 72, 1, 101, 3, 4, 3, 18}; - /* ML-DSA Level 5: 2.16.840.1.101.3.4.3.19 */ - static const byte keyMlDsa_Level5Oid[] = + /* ML-DSA-87: 2.16.840.1.101.3.4.3.19 */ + static const byte keyMlDsa_87Oid[] = {96, 134, 72, 1, 101, 3, 4, 3, 19}; -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WOLFSSL_HAVE_SLHDSA /* SLH-DSA-SHA2-128s: 2.16.840.1.101.3.4.3.20 */ static const byte keySlhDsa_Sha2_128sOid[] = {96, 134, 72, 1, 101, 3, 4, 3, 20}; @@ -5818,8 +5818,8 @@ const byte* OidFromId(word32 id, word32 type, word32* oidSz) *oidSz = sizeof(sigFalcon_Level5Oid); break; #endif /* HAVE_FALCON */ - #ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case CTC_DILITHIUM_LEVEL2: oid = sigDilithium_Level2Oid; *oidSz = sizeof(sigDilithium_Level2Oid); @@ -5833,19 +5833,19 @@ const byte* OidFromId(word32 id, word32 type, word32* oidSz) *oidSz = sizeof(sigDilithium_Level5Oid); break; #endif - case CTC_ML_DSA_LEVEL2: - oid = sigMlDsa_Level2Oid; - *oidSz = sizeof(sigMlDsa_Level2Oid); + case CTC_ML_DSA_44: + oid = sigMlDsa_44Oid; + *oidSz = sizeof(sigMlDsa_44Oid); break; - case CTC_ML_DSA_LEVEL3: - oid = sigMlDsa_Level3Oid; - *oidSz = sizeof(sigMlDsa_Level3Oid); + case CTC_ML_DSA_65: + oid = sigMlDsa_65Oid; + *oidSz = sizeof(sigMlDsa_65Oid); break; - case CTC_ML_DSA_LEVEL5: - oid = sigMlDsa_Level5Oid; - *oidSz = sizeof(sigMlDsa_Level5Oid); + case CTC_ML_DSA_87: + oid = sigMlDsa_87Oid; + *oidSz = sizeof(sigMlDsa_87Oid); break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WOLFSSL_HAVE_SLHDSA case CTC_SLH_DSA_SHA2_128S: oid = sigSlhDsa_Sha2_128sOid; @@ -5983,8 +5983,8 @@ const byte* OidFromId(word32 id, word32 type, word32* oidSz) *oidSz = sizeof(keyFalcon_Level5Oid); break; #endif /* HAVE_FALCON */ - #ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: oid = keyDilithium_Level2Oid; *oidSz = sizeof(keyDilithium_Level2Oid); @@ -5998,19 +5998,19 @@ const byte* OidFromId(word32 id, word32 type, word32* oidSz) *oidSz = sizeof(keyDilithium_Level5Oid); break; #endif - case ML_DSA_LEVEL2k: - oid = keyMlDsa_Level2Oid; - *oidSz = sizeof(keyMlDsa_Level2Oid); + case ML_DSA_44k: + oid = keyMlDsa_44Oid; + *oidSz = sizeof(keyMlDsa_44Oid); break; - case ML_DSA_LEVEL3k: - oid = keyMlDsa_Level3Oid; - *oidSz = sizeof(keyMlDsa_Level3Oid); + case ML_DSA_65k: + oid = keyMlDsa_65Oid; + *oidSz = sizeof(keyMlDsa_65Oid); break; - case ML_DSA_LEVEL5k: - oid = keyMlDsa_Level5Oid; - *oidSz = sizeof(keyMlDsa_Level5Oid); + case ML_DSA_87k: + oid = keyMlDsa_87Oid; + *oidSz = sizeof(keyMlDsa_87Oid); break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WOLFSSL_HAVE_SLHDSA case SLH_DSA_SHA2_128Sk: oid = keySlhDsa_Sha2_128sOid; @@ -9404,70 +9404,70 @@ int wc_CheckPrivateKey(const byte* privKey, word32 privKeySz, } else #endif /* HAVE_FALCON */ -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && !defined(WOLFSSL_DILITHIUM_NO_ASN1) - if ((ks == ML_DSA_LEVEL2k) || - (ks == ML_DSA_LEVEL3k) || - (ks == ML_DSA_LEVEL5k) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) && !defined(WOLFSSL_MLDSA_NO_ASN1) + if ((ks == ML_DSA_44k) || + (ks == ML_DSA_65k) || + (ks == ML_DSA_87k) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT || (ks == DILITHIUM_LEVEL2k) || (ks == DILITHIUM_LEVEL3k) || (ks == DILITHIUM_LEVEL5k) #endif ) { - WC_DECLARE_VAR(key_pair, dilithium_key, 1, 0); + WC_DECLARE_VAR(key_pair, wc_MlDsaKey, 1, 0); word32 keyIdx = 0; - WC_ALLOC_VAR_EX(key_pair, dilithium_key, 1, NULL, - DYNAMIC_TYPE_DILITHIUM, return MEMORY_E); - ret = wc_dilithium_init(key_pair); + WC_ALLOC_VAR_EX(key_pair, wc_MlDsaKey, 1, NULL, + DYNAMIC_TYPE_MLDSA, return MEMORY_E); + ret = wc_MlDsaKey_Init(key_pair, NULL, INVALID_DEVID); if (ret < 0) { - WC_FREE_VAR_EX(key_pair, NULL, DYNAMIC_TYPE_DILITHIUM); + WC_FREE_VAR_EX(key_pair, NULL, DYNAMIC_TYPE_MLDSA); return ret; } - if (ks == ML_DSA_LEVEL2k) { - ret = wc_dilithium_set_level(key_pair, WC_ML_DSA_44); + if (ks == ML_DSA_44k) { + ret = wc_MlDsaKey_SetParams(key_pair, WC_ML_DSA_44); } - else if (ks == ML_DSA_LEVEL3k) { - ret = wc_dilithium_set_level(key_pair, WC_ML_DSA_65); + else if (ks == ML_DSA_65k) { + ret = wc_MlDsaKey_SetParams(key_pair, WC_ML_DSA_65); } - else if (ks == ML_DSA_LEVEL5k) { - ret = wc_dilithium_set_level(key_pair, WC_ML_DSA_87); + else if (ks == ML_DSA_87k) { + ret = wc_MlDsaKey_SetParams(key_pair, WC_ML_DSA_87); } - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT else if (ks == DILITHIUM_LEVEL2k) { - ret = wc_dilithium_set_level(key_pair, WC_ML_DSA_44_DRAFT); + ret = wc_MlDsaKey_SetParams(key_pair, WC_ML_DSA_44_DRAFT); } else if (ks == DILITHIUM_LEVEL3k) { - ret = wc_dilithium_set_level(key_pair, WC_ML_DSA_65_DRAFT); + ret = wc_MlDsaKey_SetParams(key_pair, WC_ML_DSA_65_DRAFT); } else if (ks == DILITHIUM_LEVEL5k) { - ret = wc_dilithium_set_level(key_pair, WC_ML_DSA_87_DRAFT); + ret = wc_MlDsaKey_SetParams(key_pair, WC_ML_DSA_87_DRAFT); } #endif if (ret < 0) { - WC_FREE_VAR_EX(key_pair, NULL, DYNAMIC_TYPE_DILITHIUM); + WC_FREE_VAR_EX(key_pair, NULL, DYNAMIC_TYPE_MLDSA); return ret; } - if ((ret = wc_Dilithium_PrivateKeyDecode(privKey, &keyIdx, key_pair, - privKeySz)) == 0) { - WOLFSSL_MSG("Checking Dilithium key pair"); + if ((ret = wc_MlDsaKey_PrivateKeyDecode(key_pair, privKey, + privKeySz, &keyIdx)) == 0) { + WOLFSSL_MSG("Checking ML-DSA key pair"); keyIdx = 0; - if ((ret = wc_dilithium_import_public(pubKey, pubKeySz, - key_pair)) == 0) { + if ((ret = wc_MlDsaKey_ImportPubRaw(key_pair, pubKey, + pubKeySz)) == 0) { /* Public and private extracted successfully. Sanity check. */ - if ((ret = wc_dilithium_check_key(key_pair)) == 0) + if ((ret = wc_MlDsaKey_CheckKey(key_pair)) == 0) ret = 1; } } - wc_dilithium_free(key_pair); - WC_FREE_VAR_EX(key_pair, NULL, DYNAMIC_TYPE_DILITHIUM); + wc_MlDsaKey_Free(key_pair); + WC_FREE_VAR_EX(key_pair, NULL, DYNAMIC_TYPE_MLDSA); } else -#endif /* HAVE_DILITHIUM && !WOLFSSL_DILITHIUM_VERIFY_ONLY */ +#endif /* WOLFSSL_HAVE_MLDSA && !WOLFSSL_MLDSA_VERIFY_ONLY */ #if defined(WOLFSSL_HAVE_SLHDSA) && !defined(WOLFSSL_SLHDSA_VERIFY_ONLY) if (wc_IsSlhDsaOid(ks)) { WC_DECLARE_VAR(key_pair, SlhDsaKey, 1, 0); @@ -9899,58 +9899,58 @@ int wc_GetKeyOID(byte* key, word32 keySz, const byte** curveOID, word32* oidSz, XFREE(falcon, heap, DYNAMIC_TYPE_TMP_BUFFER); } #endif /* HAVE_FALCON */ -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && !defined(WOLFSSL_DILITHIUM_NO_ASN1) +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) && !defined(WOLFSSL_MLDSA_NO_ASN1) if (*algoID == 0) { - dilithium_key *dilithium = (dilithium_key *)XMALLOC(sizeof(*dilithium), + wc_MlDsaKey *mldsa = (wc_MlDsaKey *)XMALLOC(sizeof(*mldsa), heap, DYNAMIC_TYPE_TMP_BUFFER); - if (dilithium == NULL) + if (mldsa == NULL) return MEMORY_E; - /* wc_dilithium_init() returns 0 on success and a non-zero value on + /* wc_MlDsaKey_Init() returns 0 on success and a non-zero value on * failure. */ - if (wc_dilithium_init(dilithium) == 0) { + if (wc_MlDsaKey_Init(mldsa, NULL, INVALID_DEVID) == 0) { if ((*algoID == 0) && - (wc_dilithium_set_level(dilithium, WC_ML_DSA_44) == 0)) { + (wc_MlDsaKey_SetParams(mldsa, WC_ML_DSA_44) == 0)) { tmpIdx = 0; - if (wc_Dilithium_PrivateKeyDecode(key, &tmpIdx, dilithium, - keySz) == 0) { - *algoID = ML_DSA_LEVEL2k; + if (wc_MlDsaKey_PrivateKeyDecode(mldsa, key, keySz, + &tmpIdx) == 0) { + *algoID = ML_DSA_44k; } else { - WOLFSSL_MSG("Not Dilithium Level 2 DER key"); + WOLFSSL_MSG("Not ML-DSA-44 DER key"); } } if ((*algoID == 0) && - (wc_dilithium_set_level(dilithium, WC_ML_DSA_65) == 0)) { + (wc_MlDsaKey_SetParams(mldsa, WC_ML_DSA_65) == 0)) { tmpIdx = 0; - if (wc_Dilithium_PrivateKeyDecode(key, &tmpIdx, dilithium, - keySz) == 0) { - *algoID = ML_DSA_LEVEL3k; + if (wc_MlDsaKey_PrivateKeyDecode(mldsa, key, keySz, + &tmpIdx) == 0) { + *algoID = ML_DSA_65k; } else { - WOLFSSL_MSG("Not Dilithium Level 3 DER key"); + WOLFSSL_MSG("Not ML-DSA-65 DER key"); } } if ((*algoID == 0) && - (wc_dilithium_set_level(dilithium, WC_ML_DSA_87) == 0)) { + (wc_MlDsaKey_SetParams(mldsa, WC_ML_DSA_87) == 0)) { tmpIdx = 0; - if (wc_Dilithium_PrivateKeyDecode(key, &tmpIdx, dilithium, - keySz) == 0) { - *algoID = ML_DSA_LEVEL5k; + if (wc_MlDsaKey_PrivateKeyDecode(mldsa, key, keySz, + &tmpIdx) == 0) { + *algoID = ML_DSA_87k; } else { - WOLFSSL_MSG("Not Dilithium Level 5 DER key"); + WOLFSSL_MSG("Not ML-DSA-87 DER key"); } } if (*algoID == 0) { - WOLFSSL_MSG("GetKeyOID dilithium initialization failed"); + WOLFSSL_MSG("GetKeyOID ML-DSA initialization failed"); } - wc_dilithium_free(dilithium); + wc_MlDsaKey_Free(mldsa); } - XFREE(dilithium, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(mldsa, heap, DYNAMIC_TYPE_TMP_BUFFER); } -#endif /* HAVE_DILITHIUM && !WOLFSSL_DILITHIUM_VERIFY_ONLY */ +#endif /* WOLFSSL_HAVE_MLDSA && !WOLFSSL_MLDSA_VERIFY_ONLY */ #if defined(WOLFSSL_HAVE_SLHDSA) && !defined(WOLFSSL_SLHDSA_VERIFY_ONLY) if (*algoID == 0) { enum SlhDsaParam placeholder; @@ -12521,7 +12521,7 @@ void wc_FreeDecodedCert(DecodedCert* cert) } #if defined(HAVE_ED25519) || defined(HAVE_ED448) || defined(HAVE_FALCON) || \ - defined(HAVE_DILITHIUM) || defined(WOLFSSL_HAVE_SLHDSA) || \ + defined(WOLFSSL_HAVE_MLDSA) || defined(WOLFSSL_HAVE_SLHDSA) || \ defined(WOLFSSL_HAVE_LMS) || defined(WOLFSSL_HAVE_XMSS) /* Store the key data under the BIT_STRING in dynamically allocated data. * @@ -13417,19 +13417,19 @@ static int GetCertKey(DecodedCert* cert, const byte* source, word32* inOutIdx, ret = StoreKey(cert, source, &srcIdx, maxIdx); break; #endif /* HAVE_FALCON */ - #ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: case DILITHIUM_LEVEL3k: case DILITHIUM_LEVEL5k: #endif - case ML_DSA_LEVEL2k: - case ML_DSA_LEVEL3k: - case ML_DSA_LEVEL5k: + case ML_DSA_44k: + case ML_DSA_65k: + case ML_DSA_87k: cert->pkCurveOID = cert->keyOID; ret = StoreKey(cert, source, &srcIdx, maxIdx); break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WOLFSSL_HAVE_SLHDSA case SLH_DSA_SHAKE_128Fk: case SLH_DSA_SHAKE_192Fk: @@ -15918,15 +15918,15 @@ static WC_INLINE int IsSigAlgoNoParams(word32 algoOID) || (algoOID == FALCON_LEVEL1k) || (algoOID == FALCON_LEVEL5k) #endif - #ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT || (algoOID == DILITHIUM_LEVEL2k) || (algoOID == DILITHIUM_LEVEL3k) || (algoOID == DILITHIUM_LEVEL5k) #endif - || (algoOID == ML_DSA_LEVEL2k) - || (algoOID == ML_DSA_LEVEL3k) - || (algoOID == ML_DSA_LEVEL5k) + || (algoOID == ML_DSA_44k) + || (algoOID == ML_DSA_65k) + || (algoOID == ML_DSA_87k) #endif #ifdef WOLFSSL_HAVE_SLHDSA || (algoOID == SLH_DSA_SHAKE_128Fk) @@ -16265,23 +16265,23 @@ void FreeSignatureCtx(SignatureCtx* sigCtx) #endif break; #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: case DILITHIUM_LEVEL3k: case DILITHIUM_LEVEL5k: #endif - case ML_DSA_LEVEL2k: - case ML_DSA_LEVEL3k: - case ML_DSA_LEVEL5k: - wc_dilithium_free(sigCtx->key.dilithium); + case ML_DSA_44k: + case ML_DSA_65k: + case ML_DSA_87k: + wc_MlDsaKey_Free(sigCtx->key.mldsa); #ifndef WOLFSSL_NO_MALLOC - XFREE(sigCtx->key.dilithium, sigCtx->heap, - DYNAMIC_TYPE_DILITHIUM); - sigCtx->key.dilithium = NULL; + XFREE(sigCtx->key.mldsa, sigCtx->heap, + DYNAMIC_TYPE_MLDSA); + sigCtx->key.mldsa = NULL; #endif break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #if defined(WOLFSSL_HAVE_SLHDSA) case SLH_DSA_SHAKE_128Fk: case SLH_DSA_SHAKE_192Fk: @@ -16493,15 +16493,15 @@ static int HashForSignature(const byte* buf, word32 bufSz, word32 sigOID, /* Hashes done in signing operation. */ break; #endif - #ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case CTC_DILITHIUM_LEVEL2: case CTC_DILITHIUM_LEVEL3: case CTC_DILITHIUM_LEVEL5: #endif - case CTC_ML_DSA_LEVEL2: - case CTC_ML_DSA_LEVEL3: - case CTC_ML_DSA_LEVEL5: + case CTC_ML_DSA_44: + case CTC_ML_DSA_65: + case CTC_ML_DSA_87: /* Hashes done in signing operation. */ break; #endif @@ -16686,9 +16686,9 @@ static int SigOidMatchesKeyOid(word32 sigOID, word32 keyOID) case FALCON_LEVEL5k: return (sigOID == CTC_FALCON_LEVEL5); #endif - #if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && \ - !defined(WOLFSSL_DILITHIUM_NO_ASN1) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_VERIFY) && \ + !defined(WOLFSSL_MLDSA_NO_ASN1) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: return (sigOID == CTC_DILITHIUM_LEVEL2); case DILITHIUM_LEVEL3k: @@ -16696,12 +16696,12 @@ static int SigOidMatchesKeyOid(word32 sigOID, word32 keyOID) case DILITHIUM_LEVEL5k: return (sigOID == CTC_DILITHIUM_LEVEL5); #endif - case ML_DSA_LEVEL2k: - return (sigOID == CTC_ML_DSA_LEVEL2); - case ML_DSA_LEVEL3k: - return (sigOID == CTC_ML_DSA_LEVEL3); - case ML_DSA_LEVEL5k: - return (sigOID == CTC_ML_DSA_LEVEL5); + case ML_DSA_44k: + return (sigOID == CTC_ML_DSA_44); + case ML_DSA_65k: + return (sigOID == CTC_ML_DSA_65); + case ML_DSA_87k: + return (sigOID == CTC_ML_DSA_87); #endif #if defined(WOLFSSL_HAVE_SLHDSA) case SLH_DSA_SHAKE_128Fk: @@ -17131,30 +17131,30 @@ int ConfirmSignature(SignatureCtx* sigCtx, break; } #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && \ - !defined(WOLFSSL_DILITHIUM_NO_ASN1) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) && \ + !defined(WOLFSSL_MLDSA_NO_ASN1) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: case DILITHIUM_LEVEL3k: case DILITHIUM_LEVEL5k: #endif - case ML_DSA_LEVEL2k: - case ML_DSA_LEVEL3k: - case ML_DSA_LEVEL5k: + case ML_DSA_44k: + case ML_DSA_65k: + case ML_DSA_87k: { word32 idx = 0; int level; - if (keyOID == ML_DSA_LEVEL2k) { + if (keyOID == ML_DSA_44k) { level = WC_ML_DSA_44; } - else if (keyOID == ML_DSA_LEVEL3k) { + else if (keyOID == ML_DSA_65k) { level = WC_ML_DSA_65; } - else if (keyOID == ML_DSA_LEVEL5k) { + else if (keyOID == ML_DSA_87k) { level = WC_ML_DSA_87; } - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT else if (keyOID == DILITHIUM_LEVEL2k) { level = WC_ML_DSA_44_DRAFT; } @@ -17166,34 +17166,34 @@ int ConfirmSignature(SignatureCtx* sigCtx, } #endif else { - WOLFSSL_MSG("Invalid Dilithium key OID"); + WOLFSSL_MSG("Invalid ML-DSA key OID"); goto exit_cs; } sigCtx->verify = 0; #ifndef WOLFSSL_NO_MALLOC - sigCtx->key.dilithium = (dilithium_key*)XMALLOC( - sizeof(dilithium_key), sigCtx->heap, - DYNAMIC_TYPE_DILITHIUM); - if (sigCtx->key.dilithium == NULL) { + sigCtx->key.mldsa = (wc_MlDsaKey*)XMALLOC( + sizeof(wc_MlDsaKey), sigCtx->heap, + DYNAMIC_TYPE_MLDSA); + if (sigCtx->key.mldsa == NULL) { ERROR_OUT(MEMORY_E, exit_cs); } #endif - if ((ret = wc_dilithium_init_ex(sigCtx->key.dilithium, + if ((ret = wc_MlDsaKey_Init(sigCtx->key.mldsa, sigCtx->heap, sigCtx->devId)) < 0) { goto exit_cs; } - if ((ret = wc_dilithium_set_level(sigCtx->key.dilithium, + if ((ret = wc_MlDsaKey_SetParams(sigCtx->key.mldsa, (byte)level)) < 0) { goto exit_cs; } - if ((ret = wc_Dilithium_PublicKeyDecode(key, &idx, - sigCtx->key.dilithium, keySz)) < 0) { - WOLFSSL_MSG("ASN Key import error Dilithium"); + if ((ret = wc_MlDsaKey_PublicKeyDecode(sigCtx->key.mldsa, + key, keySz, &idx)) < 0) { + WOLFSSL_MSG("ASN Key import error ML-DSA"); goto exit_cs; } break; } - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #if defined(WOLFSSL_HAVE_SLHDSA) #ifndef WOLFSSL_SLHDSA_SHA2 /* SHA-2 OIDs recognised but backend not built; emit a @@ -17481,27 +17481,26 @@ int ConfirmSignature(SignatureCtx* sigCtx, break; } #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_VERIFY) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: case DILITHIUM_LEVEL3k: case DILITHIUM_LEVEL5k: { - ret = wc_dilithium_verify_msg(sig, sigSz, buf, bufSz, - &sigCtx->verify, - sigCtx->key.dilithium); + ret = wc_MlDsaKey_Verify(sigCtx->key.mldsa, sig, sigSz, + buf, bufSz, &sigCtx->verify); break; } #endif - case ML_DSA_LEVEL2k: - case ML_DSA_LEVEL3k: - case ML_DSA_LEVEL5k: + case ML_DSA_44k: + case ML_DSA_65k: + case ML_DSA_87k: { - ret = wc_dilithium_verify_ctx_msg(sig, sigSz, NULL, 0, buf, - bufSz, &sigCtx->verify, sigCtx->key.dilithium); + ret = wc_MlDsaKey_VerifyCtx(sigCtx->key.mldsa, sig, sigSz, + NULL, 0, buf, bufSz, &sigCtx->verify); break; } - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #if defined(WOLFSSL_HAVE_SLHDSA) #ifdef WOLFSSL_SLHDSA_SHA2 case SLH_DSA_SHA2_128Fk: @@ -17724,15 +17723,15 @@ int ConfirmSignature(SignatureCtx* sigCtx, break; } #endif /* HAVE_FALCON */ - #ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: case DILITHIUM_LEVEL3k: case DILITHIUM_LEVEL5k: - #endif /* WOLFSSL_DILITHIUM_FIPS204_DRAFT */ - case ML_DSA_LEVEL2k: - case ML_DSA_LEVEL3k: - case ML_DSA_LEVEL5k: + #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ + case ML_DSA_44k: + case ML_DSA_65k: + case ML_DSA_87k: if (sigCtx->verify == 1) { ret = 0; } @@ -17741,7 +17740,7 @@ int ConfirmSignature(SignatureCtx* sigCtx, ret = ASN_SIG_CONFIRM_E; } break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WOLFSSL_HAVE_SLHDSA #ifdef WOLFSSL_SLHDSA_SHA2 case SLH_DSA_SHA2_128Fk: @@ -23972,8 +23971,8 @@ static wcchar END_PUB_KEY = "-----END PUBLIC KEY-----"; static wcchar BEGIN_FALCON_LEVEL5_PRIV = "-----BEGIN FALCON_LEVEL5 PRIVATE KEY-----"; static wcchar END_FALCON_LEVEL5_PRIV = "-----END FALCON_LEVEL5 PRIVATE KEY-----"; #endif /* HAVE_FALCON */ -#if defined(HAVE_DILITHIUM) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#if defined(WOLFSSL_HAVE_MLDSA) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT static wcchar BEGIN_DILITHIUM_LEVEL2_PRIV = "-----BEGIN DILITHIUM_LEVEL2 PRIVATE KEY-----"; static wcchar END_DILITHIUM_LEVEL2_PRIV = "-----END DILITHIUM_LEVEL2 PRIVATE KEY-----"; static wcchar BEGIN_DILITHIUM_LEVEL3_PRIV = "-----BEGIN DILITHIUM_LEVEL3 PRIVATE KEY-----"; @@ -23987,7 +23986,7 @@ static wcchar END_PUB_KEY = "-----END PUBLIC KEY-----"; static wcchar END_ML_DSA_LEVEL3_PRIV = "-----END ML_DSA_LEVEL3 PRIVATE KEY-----"; static wcchar BEGIN_ML_DSA_LEVEL5_PRIV = "-----BEGIN ML_DSA_LEVEL5 PRIVATE KEY-----"; static wcchar END_ML_DSA_LEVEL5_PRIV = "-----END ML_DSA_LEVEL5 PRIVATE KEY-----"; -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #if defined(WOLFSSL_HAVE_SLHDSA) static wcchar BEGIN_SLH_DSA_SHAKE_128F_PRIV = "-----BEGIN SLH_DSA_SHAKE_128F PRIVATE KEY-----"; static wcchar END_SLH_DSA_SHAKE_128F_PRIV = "-----END SLH_DSA_SHAKE_128F PRIVATE KEY-----"; @@ -24151,8 +24150,8 @@ int wc_PemGetHeaderFooter(int type, const char** header, const char** footer) ret = 0; break; #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2_TYPE: if (header) *header = BEGIN_DILITHIUM_LEVEL2_PRIV; if (footer) *footer = END_DILITHIUM_LEVEL2_PRIV; @@ -24169,22 +24168,22 @@ int wc_PemGetHeaderFooter(int type, const char** header, const char** footer) ret = 0; break; #endif - case ML_DSA_LEVEL2_TYPE: + case ML_DSA_44_TYPE: if (header) *header = BEGIN_ML_DSA_LEVEL2_PRIV; if (footer) *footer = END_ML_DSA_LEVEL2_PRIV; ret = 0; break; - case ML_DSA_LEVEL3_TYPE: + case ML_DSA_65_TYPE: if (header) *header = BEGIN_ML_DSA_LEVEL3_PRIV; if (footer) *footer = END_ML_DSA_LEVEL3_PRIV; ret = 0; break; - case ML_DSA_LEVEL5_TYPE: + case ML_DSA_87_TYPE: if (header) *header = BEGIN_ML_DSA_LEVEL5_PRIV; if (footer) *footer = END_ML_DSA_LEVEL5_PRIV; ret = 0; break; -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WOLFSSL_HAVE_SLHDSA case SLH_DSA_SHAKE_128F_TYPE: if (header) *header = BEGIN_SLH_DSA_SHAKE_128F_PRIV; @@ -27102,7 +27101,7 @@ static int EncodePublicKey(int keyType, byte* output, int outLen, RsaKey* rsaKey, ecc_key* eccKey, ed25519_key* ed25519Key, ed448_key* ed448Key, DsaKey* dsaKey, falcon_key* falconKey, - dilithium_key* dilithiumKey, SlhDsaKey* slhDsaKey) + wc_MlDsaKey* mldsaKey, SlhDsaKey* slhDsaKey) { int ret = 0; @@ -27113,7 +27112,7 @@ static int EncodePublicKey(int keyType, byte* output, int outLen, (void)ed448Key; (void)dsaKey; (void)falconKey; - (void)dilithiumKey; + (void)mldsaKey; (void)slhDsaKey; switch (keyType) { @@ -27160,22 +27159,22 @@ static int EncodePublicKey(int keyType, byte* output, int outLen, } break; #endif /* HAVE_FALCON */ - #if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_ASN1) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT + #if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_ASN1) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2_KEY: case DILITHIUM_LEVEL3_KEY: case DILITHIUM_LEVEL5_KEY: #endif - case ML_DSA_LEVEL2_KEY: - case ML_DSA_LEVEL3_KEY: - case ML_DSA_LEVEL5_KEY: - ret = wc_Dilithium_PublicKeyToDer(dilithiumKey, output, + case ML_DSA_44_KEY: + case ML_DSA_65_KEY: + case ML_DSA_87_KEY: + ret = wc_MlDsaKey_PublicKeyToDer(mldsaKey, output, (word32)outLen, 1); if (ret <= 0) { ret = PUBLIC_KEY_E; } break; - #endif /* HAVE_DILITHIUM */ + #endif /* WOLFSSL_HAVE_MLDSA */ #if defined(WOLFSSL_HAVE_SLHDSA) case SLH_DSA_SHAKE_128F_KEY: case SLH_DSA_SHAKE_192F_KEY: @@ -27963,14 +27962,14 @@ static int InternalSignCb(const byte* in, word32 inLen, } else #endif /* HAVE_FALCON */ -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_SIGN) +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_SIGN) if ((keyType == DILITHIUM_LEVEL2_TYPE || keyType == DILITHIUM_LEVEL3_TYPE || keyType == DILITHIUM_LEVEL5_TYPE) && signCtx->key) { /* Dilithium signs messages, not hashes - cannot use callback path */ ret = SIG_TYPE_E; } else -#endif /* HAVE_DILITHIUM && !WOLFSSL_DILITHIUM_NO_SIGN */ +#endif /* WOLFSSL_HAVE_MLDSA && !WOLFSSL_MLDSA_NO_SIGN */ #if defined(WOLFSSL_HAVE_SLHDSA) if (IsSlhDsaKeyType(keyType) && signCtx->key) { /* SLH-DSA signs messages, not hashes - cannot use callback path */ @@ -28000,7 +27999,7 @@ static int InternalSignCb(const byte* in, word32 inLen, static int MakeSignature(CertSignCtx* certSignCtx, const byte* buf, word32 sz, byte* sig, word32 sigSz, RsaKey* rsaKey, ecc_key* eccKey, ed25519_key* ed25519Key, ed448_key* ed448Key, falcon_key* falconKey, - dilithium_key* dilithiumKey, SlhDsaKey* slhDsaKey, WC_RNG* rng, + wc_MlDsaKey* mldsaKey, SlhDsaKey* slhDsaKey, WC_RNG* rng, word32 sigAlgoType, void* heap) { int ret = 0; @@ -28012,7 +28011,7 @@ static int MakeSignature(CertSignCtx* certSignCtx, const byte* buf, word32 sz, (void)ed25519Key; (void)ed448Key; (void)falconKey; - (void)dilithiumKey; + (void)mldsaKey; (void)slhDsaKey; (void)rng; (void)heap; @@ -28076,27 +28075,27 @@ static int MakeSignature(CertSignCtx* certSignCtx, const byte* buf, word32 sz, } #endif /* HAVE_FALCON */ -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_SIGN) - if (dilithiumKey) { +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_SIGN) + if (mldsaKey) { word32 outSz = sigSz; - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - if ((dilithiumKey->params->level == WC_ML_DSA_44_DRAFT) || - (dilithiumKey->params->level == WC_ML_DSA_65_DRAFT) || - (dilithiumKey->params->level == WC_ML_DSA_87_DRAFT)) { - ret = wc_dilithium_sign_msg(buf, sz, sig, &outSz, dilithiumKey, rng); + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + if ((mldsaKey->params->level == WC_ML_DSA_44_DRAFT) || + (mldsaKey->params->level == WC_ML_DSA_65_DRAFT) || + (mldsaKey->params->level == WC_ML_DSA_87_DRAFT)) { + ret = wc_MlDsaKey_Sign(mldsaKey, sig, &outSz, buf, sz, rng); if (ret == 0) ret = (int)outSz; } else #endif { - ret = wc_dilithium_sign_ctx_msg(NULL, 0, buf, sz, sig, - &outSz, dilithiumKey, rng); + ret = wc_MlDsaKey_SignCtx(mldsaKey, NULL, 0, sig, &outSz, + buf, sz, rng); if (ret == 0) ret = (int)outSz; } } -#endif /* HAVE_DILITHIUM && !WOLFSSL_DILITHIUM_NO_SIGN */ +#endif /* WOLFSSL_HAVE_MLDSA && !WOLFSSL_MLDSA_NO_SIGN */ #if defined(WOLFSSL_HAVE_SLHDSA) && !defined(WOLFSSL_SLHDSA_VERIFY_ONLY) if (slhDsaKey) { @@ -28254,7 +28253,7 @@ static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey, ecc_key* eccKey, WC_RNG* rng, DsaKey* dsaKey, ed25519_key* ed25519Key, ed448_key* ed448Key, falcon_key* falconKey, - dilithium_key* dilithiumKey, SlhDsaKey* slhDsaKey) + wc_MlDsaKey* mldsaKey, SlhDsaKey* slhDsaKey) { /* TODO: issRaw and sbjRaw should be NUL terminated. */ DECL_ASNSETDATA(dataASN, x509CertASN_Length); @@ -28269,7 +28268,7 @@ static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz, /* Unused without PQC */ (void)falconKey; - (void)dilithiumKey; + (void)mldsaKey; (void)slhDsaKey; CALLOC_ASNSETDATA(dataASN, x509CertASN_Length, ret, cert->heap); @@ -28299,34 +28298,34 @@ static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz, cert->keyType = FALCON_LEVEL5_KEY; } #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_44_DRAFT)) { +#ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_44_DRAFT)) { cert->keyType = DILITHIUM_LEVEL2_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_65_DRAFT)) { + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_65_DRAFT)) { cert->keyType = DILITHIUM_LEVEL3_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_87_DRAFT)) { + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_87_DRAFT)) { cert->keyType = DILITHIUM_LEVEL5_KEY; } #endif - else if ((dilithiumKey != NULL) && - (dilithiumKey->level == WC_ML_DSA_44)) { - cert->keyType = ML_DSA_LEVEL2_KEY; + else if ((mldsaKey != NULL) && + (mldsaKey->level == WC_ML_DSA_44)) { + cert->keyType = ML_DSA_44_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->level == WC_ML_DSA_65)) { - cert->keyType = ML_DSA_LEVEL3_KEY; + else if ((mldsaKey != NULL) && + (mldsaKey->level == WC_ML_DSA_65)) { + cert->keyType = ML_DSA_65_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->level == WC_ML_DSA_87)) { - cert->keyType = ML_DSA_LEVEL5_KEY; + else if ((mldsaKey != NULL) && + (mldsaKey->level == WC_ML_DSA_87)) { + cert->keyType = ML_DSA_87_KEY; } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WOLFSSL_HAVE_SLHDSA else if ((slhDsaKey != NULL) && (slhDsaKey->params != NULL)) { int slhdsaKt = SlhDsaParamToKeyType(slhDsaKey->params->param); @@ -28386,7 +28385,7 @@ static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz, /* Calculate public key encoding size. */ ret = EncodePublicKey(cert->keyType, NULL, 0, rsaKey, eccKey, ed25519Key, ed448Key, dsaKey, falconKey, - dilithiumKey, slhDsaKey); + mldsaKey, slhDsaKey); publicKeySz = (word32)ret; } if (ret >= 0) { @@ -28573,7 +28572,7 @@ static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz, (int)dataASN[X509CERTASN_IDX_TBS_SPUBKEYINFO_SEQ] .data.buffer.length, rsaKey, eccKey, ed25519Key, ed448Key, dsaKey, - falconKey, dilithiumKey, slhDsaKey); + falconKey, mldsaKey, slhDsaKey); } if ((ret >= 0) && (!dataASN[X509CERTASN_IDX_TBS_EXT_SEQ].noOut)) { /* Encode extensions into buffer. */ @@ -28616,8 +28615,8 @@ int wc_MakeCert_ex(Cert* cert, byte* derBuffer, word32 derSz, int keyType, ed25519_key* ed25519Key = NULL; ed448_key* ed448Key = NULL; falcon_key* falconKey = NULL; - dilithium_key* dilithiumKey = NULL; - SlhDsaKey* slhDsaKey = NULL; + wc_MlDsaKey* mldsaKey = NULL; + SlhDsaKey* slhDsaKey = NULL; if (keyType == RSA_TYPE) rsaKey = (RsaKey*)key; @@ -28633,27 +28632,27 @@ int wc_MakeCert_ex(Cert* cert, byte* derBuffer, word32 derSz, int keyType, falconKey = (falcon_key*)key; else if (keyType == FALCON_LEVEL5_TYPE) falconKey = (falcon_key*)key; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT else if (keyType == DILITHIUM_LEVEL2_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; else if (keyType == DILITHIUM_LEVEL3_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; else if (keyType == DILITHIUM_LEVEL5_TYPE) - dilithiumKey = (dilithium_key*)key; -#endif - else if (keyType == ML_DSA_LEVEL2_TYPE) - dilithiumKey = (dilithium_key*)key; - else if (keyType == ML_DSA_LEVEL3_TYPE) - dilithiumKey = (dilithium_key*)key; - else if (keyType == ML_DSA_LEVEL5_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; +#endif + else if (keyType == ML_DSA_44_TYPE) + mldsaKey = (wc_MlDsaKey*)key; + else if (keyType == ML_DSA_65_TYPE) + mldsaKey = (wc_MlDsaKey*)key; + else if (keyType == ML_DSA_87_TYPE) + mldsaKey = (wc_MlDsaKey*)key; #ifdef WOLFSSL_HAVE_SLHDSA else if (IsSlhDsaKeyType(keyType)) slhDsaKey = (SlhDsaKey*)key; #endif return MakeAnyCert(cert, derBuffer, derSz, rsaKey, eccKey, rng, dsaKey, - ed25519Key, ed448Key, falconKey, dilithiumKey, + ed25519Key, ed448Key, falconKey, mldsaKey, slhDsaKey); } @@ -28730,7 +28729,7 @@ enum { static int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey, DsaKey* dsaKey, ecc_key* eccKey, ed25519_key* ed25519Key, ed448_key* ed448Key, - falcon_key* falconKey, dilithium_key* dilithiumKey, + falcon_key* falconKey, wc_MlDsaKey* mldsaKey, SlhDsaKey* slhDsaKey) { DECL_ASNSETDATA(dataASN, certReqBodyASN_Length); @@ -28745,7 +28744,7 @@ static int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz, /* Unused without PQC */ (void)falconKey; - (void)dilithiumKey; + (void)mldsaKey; (void)slhDsaKey; CALLOC_ASNSETDATA(dataASN, certReqBodyASN_Length, ret, cert->heap); @@ -28775,34 +28774,34 @@ static int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz, cert->keyType = FALCON_LEVEL5_KEY; } #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_44_DRAFT)) { +#ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_44_DRAFT)) { cert->keyType = DILITHIUM_LEVEL2_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_65_DRAFT)) { + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_65_DRAFT)) { cert->keyType = DILITHIUM_LEVEL3_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_87_DRAFT)) { + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_87_DRAFT)) { cert->keyType = DILITHIUM_LEVEL5_KEY; } #endif - else if ((dilithiumKey != NULL) && - (dilithiumKey->level == WC_ML_DSA_44)) { - cert->keyType = ML_DSA_LEVEL2_KEY; + else if ((mldsaKey != NULL) && + (mldsaKey->level == WC_ML_DSA_44)) { + cert->keyType = ML_DSA_44_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->level == WC_ML_DSA_65)) { - cert->keyType = ML_DSA_LEVEL3_KEY; + else if ((mldsaKey != NULL) && + (mldsaKey->level == WC_ML_DSA_65)) { + cert->keyType = ML_DSA_65_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->level == WC_ML_DSA_87)) { - cert->keyType = ML_DSA_LEVEL5_KEY; + else if ((mldsaKey != NULL) && + (mldsaKey->level == WC_ML_DSA_87)) { + cert->keyType = ML_DSA_87_KEY; } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WOLFSSL_HAVE_SLHDSA else if ((slhDsaKey != NULL) && (slhDsaKey->params != NULL)) { int slhdsaKt = SlhDsaParamToKeyType(slhDsaKey->params->param); @@ -28836,7 +28835,7 @@ static int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz, /* Determine encode public key size. */ ret = EncodePublicKey(cert->keyType, NULL, 0, rsaKey, eccKey, ed25519Key, ed448Key, dsaKey, falconKey, - dilithiumKey, slhDsaKey); + mldsaKey, slhDsaKey); publicKeySz = (word32)ret; } if (ret >= 0) { @@ -28956,7 +28955,7 @@ static int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz, dataASN[CERTREQBODYASN_IDX_SPUBKEYINFO_SEQ].data.buffer.data, (int)dataASN[CERTREQBODYASN_IDX_SPUBKEYINFO_SEQ].data.buffer.length, rsaKey, eccKey, ed25519Key, ed448Key, dsaKey, falconKey, - dilithiumKey, slhDsaKey); + mldsaKey, slhDsaKey); } if ((ret >= 0 && derBuffer != NULL) && (!dataASN[CERTREQBODYASN_IDX_EXT_BODY].noOut)) { @@ -28988,8 +28987,8 @@ int wc_MakeCertReq_ex(Cert* cert, byte* derBuffer, word32 derSz, int keyType, ed25519_key* ed25519Key = NULL; ed448_key* ed448Key = NULL; falcon_key* falconKey = NULL; - dilithium_key* dilithiumKey = NULL; - SlhDsaKey* slhDsaKey = NULL; + wc_MlDsaKey* mldsaKey = NULL; + SlhDsaKey* slhDsaKey = NULL; if (keyType == RSA_TYPE) rsaKey = (RsaKey*)key; @@ -29005,27 +29004,27 @@ int wc_MakeCertReq_ex(Cert* cert, byte* derBuffer, word32 derSz, int keyType, falconKey = (falcon_key*)key; else if (keyType == FALCON_LEVEL5_TYPE) falconKey = (falcon_key*)key; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT else if (keyType == DILITHIUM_LEVEL2_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; else if (keyType == DILITHIUM_LEVEL3_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; else if (keyType == DILITHIUM_LEVEL5_TYPE) - dilithiumKey = (dilithium_key*)key; -#endif - else if (keyType == ML_DSA_LEVEL2_TYPE) - dilithiumKey = (dilithium_key*)key; - else if (keyType == ML_DSA_LEVEL3_TYPE) - dilithiumKey = (dilithium_key*)key; - else if (keyType == ML_DSA_LEVEL5_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; +#endif + else if (keyType == ML_DSA_44_TYPE) + mldsaKey = (wc_MlDsaKey*)key; + else if (keyType == ML_DSA_65_TYPE) + mldsaKey = (wc_MlDsaKey*)key; + else if (keyType == ML_DSA_87_TYPE) + mldsaKey = (wc_MlDsaKey*)key; #ifdef WOLFSSL_HAVE_SLHDSA else if (IsSlhDsaKeyType(keyType)) slhDsaKey = (SlhDsaKey*)key; #endif return MakeCertReq(cert, derBuffer, derSz, rsaKey, dsaKey, eccKey, - ed25519Key, ed448Key, falconKey, dilithiumKey, + ed25519Key, ed448Key, falconKey, mldsaKey, slhDsaKey); } @@ -29180,7 +29179,7 @@ static int MakeSignatureCb(CertSignCtx* certSignCtx, const byte* buf, static int SignCert(int requestSz, int sType, byte* buf, word32 buffSz, RsaKey* rsaKey, ecc_key* eccKey, ed25519_key* ed25519Key, ed448_key* ed448Key, falcon_key* falconKey, - dilithium_key* dilithiumKey, SlhDsaKey* slhDsaKey, + wc_MlDsaKey* mldsaKey, SlhDsaKey* slhDsaKey, WC_RNG* rng) { int sigSz = 0; @@ -29226,7 +29225,7 @@ static int SignCert(int requestSz, int sType, byte* buf, word32 buffSz, sigSz = MakeSignature(certSignCtx, buf, (word32)requestSz, certSignCtx->sig, MAX_ENCODED_SIG_SZ, rsaKey, eccKey, ed25519Key, ed448Key, - falconKey, dilithiumKey, slhDsaKey, rng, (word32)sType, heap); + falconKey, mldsaKey, slhDsaKey, rng, (word32)sType, heap); #ifdef WOLFSSL_ASYNC_CRYPT if (sigSz == WC_NO_ERR_TRACE(WC_PENDING_E)) { /* Not free'ing certSignCtx->sig here because it could still be in use @@ -29275,8 +29274,8 @@ int wc_MakeSigWithBitStr(byte *sig, int sigSz, int sType, byte* buf, ed25519_key* ed25519Key = NULL; ed448_key* ed448Key = NULL; falcon_key* falconKey = NULL; - dilithium_key* dilithiumKey = NULL; - SlhDsaKey* slhDsaKey = NULL; + wc_MlDsaKey* mldsaKey = NULL; + SlhDsaKey* slhDsaKey = NULL; int ret = 0; int headerSz; void* heap = NULL; @@ -29309,15 +29308,15 @@ int wc_MakeSigWithBitStr(byte *sig, int sigSz, int sType, byte* buf, case FALCON_LEVEL5_TYPE: falconKey = (falcon_key*)key; break; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2_TYPE: case DILITHIUM_LEVEL3_TYPE: case DILITHIUM_LEVEL5_TYPE: #endif - case ML_DSA_LEVEL2_TYPE: - case ML_DSA_LEVEL3_TYPE: - case ML_DSA_LEVEL5_TYPE: - dilithiumKey = (dilithium_key*)key; + case ML_DSA_44_TYPE: + case ML_DSA_65_TYPE: + case ML_DSA_87_TYPE: + mldsaKey = (wc_MlDsaKey*)key; break; case SLH_DSA_SHAKE_128F_TYPE: case SLH_DSA_SHAKE_192F_TYPE: @@ -29372,7 +29371,7 @@ int wc_MakeSigWithBitStr(byte *sig, int sigSz, int sType, byte* buf, ret = MakeSignature(certSignCtx, buf, (word32)bufSz, certSignCtx->sig, MAX_ENCODED_SIG_SZ, rsaKey, eccKey, ed25519Key, ed448Key, - falconKey, dilithiumKey, slhDsaKey, rng, (word32)sType, heap); + falconKey, mldsaKey, slhDsaKey, rng, (word32)sType, heap); #ifdef WOLFSSL_ASYNC_CRYPT if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) { /* Not free'ing certSignCtx->sig here because it could still be in use @@ -29430,8 +29429,8 @@ int wc_SignCert_ex(int requestSz, int sType, byte* buf, word32 buffSz, ed25519_key* ed25519Key = NULL; ed448_key* ed448Key = NULL; falcon_key* falconKey = NULL; - dilithium_key* dilithiumKey = NULL; - SlhDsaKey* slhDsaKey = NULL; + wc_MlDsaKey* mldsaKey = NULL; + SlhDsaKey* slhDsaKey = NULL; if (keyType == RSA_TYPE) rsaKey = (RsaKey*)key; @@ -29445,27 +29444,27 @@ int wc_SignCert_ex(int requestSz, int sType, byte* buf, word32 buffSz, falconKey = (falcon_key*)key; else if (keyType == FALCON_LEVEL5_TYPE) falconKey = (falcon_key*)key; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT else if (keyType == DILITHIUM_LEVEL2_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; else if (keyType == DILITHIUM_LEVEL3_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; else if (keyType == DILITHIUM_LEVEL5_TYPE) - dilithiumKey = (dilithium_key*)key; -#endif - else if (keyType == ML_DSA_LEVEL2_TYPE) - dilithiumKey = (dilithium_key*)key; - else if (keyType == ML_DSA_LEVEL3_TYPE) - dilithiumKey = (dilithium_key*)key; - else if (keyType == ML_DSA_LEVEL5_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; +#endif + else if (keyType == ML_DSA_44_TYPE) + mldsaKey = (wc_MlDsaKey*)key; + else if (keyType == ML_DSA_65_TYPE) + mldsaKey = (wc_MlDsaKey*)key; + else if (keyType == ML_DSA_87_TYPE) + mldsaKey = (wc_MlDsaKey*)key; #ifdef WOLFSSL_HAVE_SLHDSA else if (IsSlhDsaKeyType(keyType)) slhDsaKey = (SlhDsaKey*)key; #endif return SignCert(requestSz, sType, buf, buffSz, rsaKey, eccKey, ed25519Key, - ed448Key, falconKey, dilithiumKey, slhDsaKey, rng); + ed448Key, falconKey, mldsaKey, slhDsaKey, rng); } int wc_SignCert(int requestSz, int sType, byte* buf, word32 buffSz, @@ -29620,7 +29619,7 @@ int wc_GetSubjectRaw(byte **subjectRaw, Cert *cert) static int SetKeyIdFromPublicKey(Cert *cert, RsaKey *rsakey, ecc_key *eckey, ed25519_key* ed25519Key, ed448_key* ed448Key, falcon_key* falconKey, - dilithium_key* dilithiumKey, + wc_MlDsaKey* mldsaKey, SlhDsaKey *slhDsaKey, int kid_type) { byte *buf; @@ -29628,7 +29627,7 @@ static int SetKeyIdFromPublicKey(Cert *cert, RsaKey *rsakey, ecc_key *eckey, if (cert == NULL || (rsakey == NULL && eckey == NULL && ed25519Key == NULL && - ed448Key == NULL && falconKey == NULL && dilithiumKey == NULL && + ed448Key == NULL && falconKey == NULL && mldsaKey == NULL && slhDsaKey == NULL) || (kid_type != SKID_TYPE && kid_type != AKID_TYPE)) return BAD_FUNC_ARG; @@ -29668,9 +29667,9 @@ static int SetKeyIdFromPublicKey(Cert *cert, RsaKey *rsakey, ecc_key *eckey, 0); } #endif -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_ASN1) - if (dilithiumKey != NULL) { - bufferSz = wc_Dilithium_PublicKeyToDer(dilithiumKey, buf, +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_ASN1) + if (mldsaKey != NULL) { + bufferSz = wc_MlDsaKey_PublicKeyToDer(mldsaKey, buf, MAX_PUBLIC_KEY_SZ, 0); } #endif @@ -29717,8 +29716,8 @@ int wc_SetSubjectKeyIdFromPublicKey_ex(Cert *cert, int keyType, void* key) ed25519_key* ed25519Key = NULL; ed448_key* ed448Key = NULL; falcon_key* falconKey = NULL; - dilithium_key* dilithiumKey = NULL; - SlhDsaKey* slhDsaKey = NULL; + wc_MlDsaKey* mldsaKey = NULL; + SlhDsaKey* slhDsaKey = NULL; if (keyType == RSA_TYPE) rsaKey = (RsaKey*)key; @@ -29732,27 +29731,27 @@ int wc_SetSubjectKeyIdFromPublicKey_ex(Cert *cert, int keyType, void* key) falconKey = (falcon_key*)key; else if (keyType == FALCON_LEVEL5_TYPE) falconKey = (falcon_key*)key; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT else if (keyType == DILITHIUM_LEVEL2_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; else if (keyType == DILITHIUM_LEVEL3_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; else if (keyType == DILITHIUM_LEVEL5_TYPE) - dilithiumKey = (dilithium_key*)key; -#endif - else if (keyType == ML_DSA_LEVEL2_TYPE) - dilithiumKey = (dilithium_key*)key; - else if (keyType == ML_DSA_LEVEL3_TYPE) - dilithiumKey = (dilithium_key*)key; - else if (keyType == ML_DSA_LEVEL5_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; +#endif + else if (keyType == ML_DSA_44_TYPE) + mldsaKey = (wc_MlDsaKey*)key; + else if (keyType == ML_DSA_65_TYPE) + mldsaKey = (wc_MlDsaKey*)key; + else if (keyType == ML_DSA_87_TYPE) + mldsaKey = (wc_MlDsaKey*)key; #ifdef WOLFSSL_HAVE_SLHDSA else if (IsSlhDsaKeyType(keyType)) slhDsaKey = (SlhDsaKey*)key; #endif return SetKeyIdFromPublicKey(cert, rsaKey, eccKey, ed25519Key, ed448Key, - falconKey, dilithiumKey, slhDsaKey, + falconKey, mldsaKey, slhDsaKey, SKID_TYPE); } @@ -29770,8 +29769,8 @@ int wc_SetAuthKeyIdFromPublicKey_ex(Cert *cert, int keyType, void* key) ed25519_key* ed25519Key = NULL; ed448_key* ed448Key = NULL; falcon_key* falconKey = NULL; - dilithium_key* dilithiumKey = NULL; - SlhDsaKey* slhDsaKey = NULL; + wc_MlDsaKey* mldsaKey = NULL; + SlhDsaKey* slhDsaKey = NULL; if (keyType == RSA_TYPE) rsaKey = (RsaKey*)key; @@ -29785,27 +29784,27 @@ int wc_SetAuthKeyIdFromPublicKey_ex(Cert *cert, int keyType, void* key) falconKey = (falcon_key*)key; else if (keyType == FALCON_LEVEL5_TYPE) falconKey = (falcon_key*)key; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT else if (keyType == DILITHIUM_LEVEL2_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; else if (keyType == DILITHIUM_LEVEL3_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; else if (keyType == DILITHIUM_LEVEL5_TYPE) - dilithiumKey = (dilithium_key*)key; -#endif - else if (keyType == ML_DSA_LEVEL2_TYPE) - dilithiumKey = (dilithium_key*)key; - else if (keyType == ML_DSA_LEVEL3_TYPE) - dilithiumKey = (dilithium_key*)key; - else if (keyType == ML_DSA_LEVEL5_TYPE) - dilithiumKey = (dilithium_key*)key; + mldsaKey = (wc_MlDsaKey*)key; +#endif + else if (keyType == ML_DSA_44_TYPE) + mldsaKey = (wc_MlDsaKey*)key; + else if (keyType == ML_DSA_65_TYPE) + mldsaKey = (wc_MlDsaKey*)key; + else if (keyType == ML_DSA_87_TYPE) + mldsaKey = (wc_MlDsaKey*)key; #ifdef WOLFSSL_HAVE_SLHDSA else if (IsSlhDsaKeyType(keyType)) slhDsaKey = (SlhDsaKey*)key; #endif return SetKeyIdFromPublicKey(cert, rsaKey, eccKey, ed25519Key, ed448Key, - falconKey, dilithiumKey, slhDsaKey, + falconKey, mldsaKey, slhDsaKey, AKID_TYPE); } @@ -31782,7 +31781,7 @@ enum { || (defined(HAVE_CURVE25519) && defined(HAVE_CURVE25519_KEY_IMPORT)) \ || (defined(HAVE_ED448) && defined(HAVE_ED448_KEY_IMPORT)) \ || (defined(HAVE_CURVE448) && defined(HAVE_CURVE448_KEY_IMPORT)) \ - || defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) || defined(WOLFSSL_HAVE_SLHDSA)) + || defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) || defined(WOLFSSL_HAVE_SLHDSA)) int DecodeAsymKey_Assign(const byte* input, word32* inOutIdx, word32 inSz, @@ -32144,7 +32143,7 @@ int DecodeAsymKeyPublic(const byte* input, word32* inOutIdx, word32 inSz, return ret; } -#endif /* HAVE_ED25519 || etc... || HAVE_DILITHIUM || WOLFSSL_HAVE_SLHDSA */ +#endif /* HAVE_ED25519 || etc... || WOLFSSL_HAVE_MLDSA || WOLFSSL_HAVE_SLHDSA */ #endif /* WC_ENABLE_ASYM_KEY_IMPORT */ #if defined(HAVE_ED25519) && defined(HAVE_ED25519_KEY_IMPORT) diff --git a/wolfcrypt/src/asn_orig.c b/wolfcrypt/src/asn_orig.c index 1c1f86a44f..7db2a4eed1 100644 --- a/wolfcrypt/src/asn_orig.c +++ b/wolfcrypt/src/asn_orig.c @@ -6070,7 +6070,7 @@ static int SetValidity(byte* output, int daysValid) static int EncodeCert(Cert* cert, DerCert* der, RsaKey* rsaKey, ecc_key* eccKey, WC_RNG* rng, DsaKey* dsaKey, ed25519_key* ed25519Key, ed448_key* ed448Key, falcon_key* falconKey, - dilithium_key* dilithiumKey, SlhDsaKey* slhDsaKey) + wc_MlDsaKey* mldsaKey, SlhDsaKey* slhDsaKey) { int ret; @@ -6080,7 +6080,7 @@ static int EncodeCert(Cert* cert, DerCert* der, RsaKey* rsaKey, ecc_key* eccKey, /* make sure at least one key type is provided */ if (rsaKey == NULL && eccKey == NULL && ed25519Key == NULL && dsaKey == NULL && ed448Key == NULL && falconKey == NULL && - dilithiumKey == NULL && slhDsaKey == NULL) { + mldsaKey == NULL && slhDsaKey == NULL) { return PUBLIC_KEY_E; } @@ -6168,24 +6168,24 @@ static int EncodeCert(Cert* cert, DerCert* der, RsaKey* rsaKey, ecc_key* eccKey, (word32)sizeof(der->publicKey), 1); } #endif /* HAVE_FALCON */ -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_ASN1) - if ((cert->keyType == ML_DSA_LEVEL2_KEY) || - (cert->keyType == ML_DSA_LEVEL3_KEY) || - (cert->keyType == ML_DSA_LEVEL5_KEY) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_ASN1) + if ((cert->keyType == ML_DSA_44_KEY) || + (cert->keyType == ML_DSA_65_KEY) || + (cert->keyType == ML_DSA_87_KEY) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT || (cert->keyType == DILITHIUM_LEVEL2_KEY) || (cert->keyType == DILITHIUM_LEVEL3_KEY) || (cert->keyType == DILITHIUM_LEVEL5_KEY) #endif ) { - if (dilithiumKey == NULL) + if (mldsaKey == NULL) return PUBLIC_KEY_E; der->publicKeySz = - wc_Dilithium_PublicKeyToDer(dilithiumKey, der->publicKey, + wc_MlDsaKey_PublicKeyToDer(mldsaKey, der->publicKey, (word32)sizeof(der->publicKey), 1); } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #if defined(WOLFSSL_HAVE_SLHDSA) if ((cert->keyType == SLH_DSA_SHAKE_128F_KEY) || (cert->keyType == SLH_DSA_SHAKE_192F_KEY) || @@ -6669,7 +6669,7 @@ static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey, ecc_key* eccKey, WC_RNG* rng, DsaKey* dsaKey, ed25519_key* ed25519Key, ed448_key* ed448Key, falcon_key* falconKey, - dilithium_key* dilithiumKey, SlhDsaKey* slhDsaKey) + wc_MlDsaKey* mldsaKey, SlhDsaKey* slhDsaKey) { int ret; WC_DECLARE_VAR(der, DerCert, 1, 0); @@ -6693,34 +6693,34 @@ static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz, else if ((falconKey != NULL) && (falconKey->level == 5)) cert->keyType = FALCON_LEVEL5_KEY; #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_44_DRAFT)) { +#ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_44_DRAFT)) { cert->keyType = DILITHIUM_LEVEL2_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_65_DRAFT)) { + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_65_DRAFT)) { cert->keyType = DILITHIUM_LEVEL3_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_87_DRAFT)) { + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_87_DRAFT)) { cert->keyType = DILITHIUM_LEVEL5_KEY; } #endif - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_44)) { - cert->keyType = ML_DSA_LEVEL2_KEY; + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_44)) { + cert->keyType = ML_DSA_44_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_65)) { - cert->keyType = ML_DSA_LEVEL3_KEY; + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_65)) { + cert->keyType = ML_DSA_65_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_87)) { - cert->keyType = ML_DSA_LEVEL5_KEY; + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_87)) { + cert->keyType = ML_DSA_87_KEY; } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WOLFSSL_HAVE_SLHDSA else if ((slhDsaKey != NULL) && (slhDsaKey->params != NULL) && (SlhDsaParamToKeyType(slhDsaKey->params->param) != 0)) { @@ -6734,7 +6734,7 @@ static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz, return MEMORY_E); ret = EncodeCert(cert, der, rsaKey, eccKey, rng, dsaKey, ed25519Key, - ed448Key, falconKey, dilithiumKey, slhDsaKey); + ed448Key, falconKey, mldsaKey, slhDsaKey); if (ret == 0) { if (der->total + MAX_SEQ_SZ * 2 > (int)derSz) ret = BUFFER_E; @@ -6909,7 +6909,7 @@ static int SetCustomObjectId(Cert* cert, byte* output, word32 outSz, static int EncodeCertReq(Cert* cert, DerCert* der, RsaKey* rsaKey, DsaKey* dsaKey, ecc_key* eccKey, ed25519_key* ed25519Key, ed448_key* ed448Key, - falcon_key* falconKey, dilithium_key* dilithiumKey, + falcon_key* falconKey, wc_MlDsaKey* mldsaKey, SlhDsaKey* slhDsaKey) { int ret; @@ -6918,7 +6918,7 @@ static int EncodeCertReq(Cert* cert, DerCert* der, RsaKey* rsaKey, (void)ed25519Key; (void)ed448Key; (void)falconKey; - (void)dilithiumKey; + (void)mldsaKey; (void)slhDsaKey; if (cert == NULL || der == NULL) @@ -6926,7 +6926,7 @@ static int EncodeCertReq(Cert* cert, DerCert* der, RsaKey* rsaKey, if (rsaKey == NULL && eccKey == NULL && ed25519Key == NULL && dsaKey == NULL && ed448Key == NULL && falconKey == NULL && - dilithiumKey == NULL && slhDsaKey == NULL) { + mldsaKey == NULL && slhDsaKey == NULL) { return PUBLIC_KEY_E; } @@ -7017,19 +7017,19 @@ static int EncodeCertReq(Cert* cert, DerCert* der, RsaKey* rsaKey, der->publicKey, (word32)sizeof(der->publicKey), 1); } #endif -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_ASN1) - if ((cert->keyType == ML_DSA_LEVEL2_KEY) || - (cert->keyType == ML_DSA_LEVEL3_KEY) || - (cert->keyType == ML_DSA_LEVEL5_KEY) - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#if defined(WOLFSSL_HAVE_MLDSA) && !defined(WOLFSSL_MLDSA_NO_ASN1) + if ((cert->keyType == ML_DSA_44_KEY) || + (cert->keyType == ML_DSA_65_KEY) || + (cert->keyType == ML_DSA_87_KEY) + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT || (cert->keyType == DILITHIUM_LEVEL2_KEY) || (cert->keyType == DILITHIUM_LEVEL3_KEY) || (cert->keyType == DILITHIUM_LEVEL5_KEY) #endif ) { - if (dilithiumKey == NULL) + if (mldsaKey == NULL) return PUBLIC_KEY_E; - der->publicKeySz = wc_Dilithium_PublicKeyToDer(dilithiumKey, + der->publicKeySz = wc_MlDsaKey_PublicKeyToDer(mldsaKey, der->publicKey, (word32)sizeof(der->publicKey), 1); } #endif @@ -7301,7 +7301,7 @@ static int WriteCertReqBody(DerCert* der, byte* buf) static int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz, RsaKey* rsaKey, DsaKey* dsaKey, ecc_key* eccKey, ed25519_key* ed25519Key, ed448_key* ed448Key, - falcon_key* falconKey, dilithium_key* dilithiumKey, + falcon_key* falconKey, wc_MlDsaKey* mldsaKey, SlhDsaKey* slhDsaKey) { int ret; @@ -7323,34 +7323,34 @@ static int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz, else if ((falconKey != NULL) && (falconKey->level == 5)) cert->keyType = FALCON_LEVEL5_KEY; #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM - #ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_44_DRAFT)) { +#ifdef WOLFSSL_HAVE_MLDSA + #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_44_DRAFT)) { cert->keyType = DILITHIUM_LEVEL2_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_65_DRAFT)) { + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_65_DRAFT)) { cert->keyType = DILITHIUM_LEVEL3_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_87_DRAFT)) { + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_87_DRAFT)) { cert->keyType = DILITHIUM_LEVEL5_KEY; } #endif - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_44)) { - cert->keyType = ML_DSA_LEVEL2_KEY; + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_44)) { + cert->keyType = ML_DSA_44_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_65)) { - cert->keyType = ML_DSA_LEVEL3_KEY; + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_65)) { + cert->keyType = ML_DSA_65_KEY; } - else if ((dilithiumKey != NULL) && - (dilithiumKey->params->level == WC_ML_DSA_87)) { - cert->keyType = ML_DSA_LEVEL5_KEY; + else if ((mldsaKey != NULL) && + (mldsaKey->params->level == WC_ML_DSA_87)) { + cert->keyType = ML_DSA_87_KEY; } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #ifdef WOLFSSL_HAVE_SLHDSA else if ((slhDsaKey != NULL) && (slhDsaKey->params != NULL) && (SlhDsaParamToKeyType(slhDsaKey->params->param) != 0)) { @@ -7364,7 +7364,7 @@ static int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz, return MEMORY_E); ret = EncodeCertReq(cert, der, rsaKey, dsaKey, eccKey, ed25519Key, ed448Key, - falconKey, dilithiumKey, slhDsaKey); + falconKey, mldsaKey, slhDsaKey); if (ret == 0) { if (der->total + MAX_SEQ_SZ * 2 > (int)derSz) diff --git a/wolfcrypt/src/cryptocb.c b/wolfcrypt/src/cryptocb.c index d08e8d810f..d647fda7bf 100644 --- a/wolfcrypt/src/cryptocb.c +++ b/wolfcrypt/src/cryptocb.c @@ -1288,7 +1288,7 @@ int wc_CryptoCb_PqcDecapsulate(const byte* ciphertext, word32 ciphertextLen, } #endif /* WOLFSSL_HAVE_MLKEM */ -#if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) || \ +#if defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) || \ defined(WOLFSSL_HAVE_SLHDSA) int wc_CryptoCb_PqcSigGetDevId(int type, void* key) { @@ -1298,9 +1298,9 @@ int wc_CryptoCb_PqcSigGetDevId(int type, void* key) return devId; /* get devId */ -#if defined(HAVE_DILITHIUM) +#if defined(WOLFSSL_HAVE_MLDSA) if (type == WC_PQC_SIG_TYPE_MLDSA) { - devId = ((dilithium_key*) key)->devId; + devId = ((wc_MlDsaKey*) key)->devId; } #endif #if defined(HAVE_FALCON) @@ -1462,7 +1462,7 @@ int wc_CryptoCb_PqcSignatureCheckPrivKey(void* key, int type, return wc_CryptoCb_TranslateErrorCode(ret); } -#endif /* HAVE_FALCON || HAVE_DILITHIUM || WOLFSSL_HAVE_SLHDSA */ +#endif /* HAVE_FALCON || WOLFSSL_HAVE_MLDSA || WOLFSSL_HAVE_SLHDSA */ #ifndef NO_AES #ifdef HAVE_AESGCM diff --git a/wolfcrypt/src/evp.c b/wolfcrypt/src/evp.c index 8b01a071f0..186fd80988 100644 --- a/wolfcrypt/src/evp.c +++ b/wolfcrypt/src/evp.c @@ -10060,7 +10060,7 @@ int wolfSSL_EVP_PKEY_type(int type) return WC_EVP_PKEY_EC; case WC_EVP_PKEY_DH: return WC_EVP_PKEY_DH; - #ifdef HAVE_DILITHIUM + #ifdef WOLFSSL_HAVE_MLDSA case WC_EVP_PKEY_DILITHIUM: return WC_EVP_PKEY_DILITHIUM; #endif diff --git a/wolfcrypt/src/evp_pk.c b/wolfcrypt/src/evp_pk.c index b3fc0c4d17..03eb059b8c 100644 --- a/wolfcrypt/src/evp_pk.c +++ b/wolfcrypt/src/evp_pk.c @@ -852,9 +852,9 @@ static int d2iTryFalconKey(WOLFSSL_EVP_PKEY** out, const unsigned char* mem, } #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM +#ifdef WOLFSSL_HAVE_MLDSA /** - * Try to make a Dilithium EVP PKEY from data. + * Try to make an ML-DSA EVP PKEY from data. * * Accepts either raw key bytes or DER (PKCS#8 / SPKI). Raw bytes are * size-keyed, so each level is tried in turn. DER input is decoded once, @@ -870,81 +870,81 @@ static int d2iTryFalconKey(WOLFSSL_EVP_PKEY** out, const unsigned char* mem, * object creation/import failed. * @return WOLFSSL_FATAL_ERROR when input is not this key type. */ -static int d2iTryDilithiumKey(WOLFSSL_EVP_PKEY** out, const unsigned char* mem, +static int d2iTryMlDsaKey(WOLFSSL_EVP_PKEY** out, const unsigned char* mem, long memSz, int priv) { static const byte levels[] = { WC_ML_DSA_44, WC_ML_DSA_65, WC_ML_DSA_87 }; word32 inSz = (word32)memSz; word32 keyIdx = 0; - int isDilithium = 0; + int isMlDsa = 0; int i, numLevels, rc; - WC_DECLARE_VAR(dilithium, dilithium_key, 1, NULL); + WC_DECLARE_VAR(mldsa, wc_MlDsaKey, 1, NULL); -#if !defined(WOLFSSL_DILITHIUM_PRIVATE_KEY) +#if !defined(WOLFSSL_MLDSA_PRIVATE_KEY) if (priv) { return WOLFSSL_FATAL_ERROR; } #endif - WC_ALLOC_VAR_EX(dilithium, dilithium_key, 1, NULL, DYNAMIC_TYPE_DILITHIUM, + WC_ALLOC_VAR_EX(mldsa, wc_MlDsaKey, 1, NULL, DYNAMIC_TYPE_MLDSA, return 0); - if (wc_dilithium_init(dilithium) != 0) { - WC_FREE_VAR_EX(dilithium, NULL, DYNAMIC_TYPE_DILITHIUM); + if (wc_MlDsaKey_Init(mldsa, NULL, INVALID_DEVID) != 0) { + WC_FREE_VAR_EX(mldsa, NULL, DYNAMIC_TYPE_MLDSA); return 0; } /* Raw key bytes are size-keyed, try each level */ numLevels = (int)(sizeof(levels) / sizeof(levels[0])); - for (i = 0; i < numLevels && !isDilithium; i++) { - if (wc_dilithium_set_level(dilithium, levels[i]) != 0) { + for (i = 0; i < numLevels && !isMlDsa; i++) { + if (wc_MlDsaKey_SetParams(mldsa, levels[i]) != 0) { continue; } - #if defined(WOLFSSL_DILITHIUM_PRIVATE_KEY) + #if defined(WOLFSSL_MLDSA_PRIVATE_KEY) if (priv) { - rc = wc_dilithium_import_private(mem, inSz, dilithium); + rc = wc_MlDsaKey_ImportPrivRaw(mldsa, mem, inSz); } else #endif { - rc = wc_dilithium_import_public(mem, inSz, dilithium); + rc = wc_MlDsaKey_ImportPubRaw(mldsa, mem, inSz); } if (rc == 0) { - isDilithium = 1; + isMlDsa = 1; } } /* DER input includes auto level detection */ - if (!isDilithium) { - wc_dilithium_free(dilithium); - if (wc_dilithium_init(dilithium) != 0) { - WC_FREE_VAR_EX(dilithium, NULL, DYNAMIC_TYPE_DILITHIUM); + if (!isMlDsa) { + wc_MlDsaKey_Free(mldsa); + if (wc_MlDsaKey_Init(mldsa, NULL, INVALID_DEVID) != 0) { + WC_FREE_VAR_EX(mldsa, NULL, DYNAMIC_TYPE_MLDSA); return 0; } - #if defined(WOLFSSL_DILITHIUM_PRIVATE_KEY) + #if defined(WOLFSSL_MLDSA_PRIVATE_KEY) if (priv) { - rc = wc_Dilithium_PrivateKeyDecode(mem, &keyIdx, dilithium, inSz); + rc = wc_MlDsaKey_PrivateKeyDecode(mldsa, mem, inSz, &keyIdx); } else #endif { - rc = wc_Dilithium_PublicKeyDecode(mem, &keyIdx, dilithium, inSz); + rc = wc_MlDsaKey_PublicKeyDecode(mldsa, mem, inSz, &keyIdx); } if (rc == 0) { - isDilithium = 1; + isMlDsa = 1; } } - wc_dilithium_free(dilithium); - WC_FREE_VAR_EX(dilithium, NULL, DYNAMIC_TYPE_DILITHIUM); + wc_MlDsaKey_Free(mldsa); + WC_FREE_VAR_EX(mldsa, NULL, DYNAMIC_TYPE_MLDSA); - if (!isDilithium) { + if (!isMlDsa) { return WOLFSSL_FATAL_ERROR; } return d2i_make_pkey(out, NULL, 0, priv, WC_EVP_PKEY_DILITHIUM); } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ /** * Try to make a WOLFSSL_EVP_PKEY from data. @@ -1030,12 +1030,12 @@ static WOLFSSL_EVP_PKEY* d2i_evp_pkey_try(WOLFSSL_EVP_PKEY** out, } else #endif /* HAVE_FALCON */ -#ifdef HAVE_DILITHIUM - if (d2iTryDilithiumKey(&pkey, *in, inSz, priv) >= 0) { +#ifdef WOLFSSL_HAVE_MLDSA + if (d2iTryMlDsaKey(&pkey, *in, inSz, priv) >= 0) { found = 1; } else -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ { WOLFSSL_MSG("d2i_evp_pkey_try couldn't determine key type"); } diff --git a/wolfcrypt/src/wc_mldsa.c b/wolfcrypt/src/wc_mldsa.c index c6a8373598..dca96173a6 100644 --- a/wolfcrypt/src/wc_mldsa.c +++ b/wolfcrypt/src/wc_mldsa.c @@ -148,13 +148,12 @@ #if defined(WOLFSSL_HAVE_MLDSA) -/* Pull in the legacy compatibility shim. settings.h has already run the - * forward arm of the sub-config gate translation block (legacy - * WOLFSSL_DILITHIUM_* / WC_DILITHIUM_* -> canonical WOLFSSL_MLDSA_* / - * WC_MLDSA_*) so wc_mldsa.h's own conditional declarations read the - * canonical gates regardless of which spelling was used by the build - * system or user_settings.h. This include brings in the reverse arm - * (canonical -> legacy) and the legacy macro / inline aliases. */ +/* Pull in the legacy compatibility shim. wc_mldsa.h pulls in dilithium.h + * itself for the forward arm of the sub-config gate translation (so the + * canonical WOLFSSL_MLDSA_* gates are visible to wc_mldsa.h's own + * conditional declarations regardless of which spelling was used by the + * build system or user_settings.h). This include brings in the reverse + * arm (canonical -> legacy) and the legacy macro / inline aliases. */ #include #include #include @@ -11931,11 +11930,11 @@ int wc_MlDsaKey_ExportKey(wc_MlDsaKey* key, byte* priv, word32 *privSz, static int mapOidToSecLevel(int oid) { switch (oid) { - case ML_DSA_LEVEL2k: + case ML_DSA_44k: return WC_ML_DSA_44; - case ML_DSA_LEVEL3k: + case ML_DSA_65k: return WC_ML_DSA_65; - case ML_DSA_LEVEL5k: + case ML_DSA_87k: return WC_ML_DSA_87; #ifdef WOLFSSL_MLDSA_FIPS204_DRAFT case DILITHIUM_LEVEL2k: @@ -11970,13 +11969,13 @@ int mldsa_get_oid_sum(wc_MlDsaKey* key, int* keyFormat) { else #endif /* WOLFSSL_MLDSA_FIPS204_DRAFT */ if (key->level == WC_ML_DSA_44) { - *keyFormat = ML_DSA_LEVEL2k; + *keyFormat = ML_DSA_44k; } else if (key->level == WC_ML_DSA_65) { - *keyFormat = ML_DSA_LEVEL3k; + *keyFormat = ML_DSA_65k; } else if (key->level == WC_ML_DSA_87) { - *keyFormat = ML_DSA_LEVEL5k; + *keyFormat = ML_DSA_87k; } else { /* Level is not set */ @@ -12048,13 +12047,13 @@ int wc_MlDsaKey_PrivateKeyDecode(wc_MlDsaKey* key, const byte* input, } #endif else if (key->level == WC_ML_DSA_44) { - keyType = ML_DSA_LEVEL2k; + keyType = ML_DSA_44k; } else if (key->level == WC_ML_DSA_65) { - keyType = ML_DSA_LEVEL3k; + keyType = ML_DSA_65k; } else if (key->level == WC_ML_DSA_87) { - keyType = ML_DSA_LEVEL5k; + keyType = ML_DSA_87k; } else { ret = BAD_FUNC_ARG; @@ -12368,13 +12367,13 @@ int wc_MlDsaKey_PublicKeyDecode(wc_MlDsaKey* key, const byte* input, else #endif if (key->level == WC_ML_DSA_44) { - keyType = ML_DSA_LEVEL2k; + keyType = ML_DSA_44k; } else if (key->level == WC_ML_DSA_65) { - keyType = ML_DSA_LEVEL3k; + keyType = ML_DSA_65k; } else if (key->level == WC_ML_DSA_87) { - keyType = ML_DSA_LEVEL5k; + keyType = ML_DSA_87k; } else { /* Level not set by caller, decode from DER */ @@ -12554,15 +12553,15 @@ int wc_MlDsaKey_PublicKeyToDer(wc_MlDsaKey* key, byte* output, word32 len, else #endif if (key->level == WC_ML_DSA_44) { - keyType = ML_DSA_LEVEL2k; + keyType = ML_DSA_44k; pubKeyLen = WC_MLDSA_44_PUB_KEY_SIZE; } else if (key->level == WC_ML_DSA_65) { - keyType = ML_DSA_LEVEL3k; + keyType = ML_DSA_65k; pubKeyLen = WC_MLDSA_65_PUB_KEY_SIZE; } else if (key->level == WC_ML_DSA_87) { - keyType = ML_DSA_LEVEL5k; + keyType = ML_DSA_87k; pubKeyLen = WC_MLDSA_87_PUB_KEY_SIZE; } else { @@ -12627,15 +12626,15 @@ int wc_MlDsaKey_KeyToDer(wc_MlDsaKey* key, byte* output, word32 len) #endif if (key->level == WC_ML_DSA_44) { ret = SetAsymKeyDer(key->k, WC_MLDSA_44_KEY_SIZE, key->p, - WC_MLDSA_44_PUB_KEY_SIZE, output, len, ML_DSA_LEVEL2k); + WC_MLDSA_44_PUB_KEY_SIZE, output, len, ML_DSA_44k); } else if (key->level == WC_ML_DSA_65) { ret = SetAsymKeyDer(key->k, WC_MLDSA_65_KEY_SIZE, key->p, - WC_MLDSA_65_PUB_KEY_SIZE, output, len, ML_DSA_LEVEL3k); + WC_MLDSA_65_PUB_KEY_SIZE, output, len, ML_DSA_65k); } else if (key->level == WC_ML_DSA_87) { ret = SetAsymKeyDer(key->k, WC_MLDSA_87_KEY_SIZE, key->p, - WC_MLDSA_87_PUB_KEY_SIZE, output, len, ML_DSA_LEVEL5k); + WC_MLDSA_87_PUB_KEY_SIZE, output, len, ML_DSA_87k); } } @@ -12681,15 +12680,15 @@ int wc_MlDsaKey_PrivateKeyToDer(wc_MlDsaKey* key, byte* output, word32 len) #endif if (key->level == WC_ML_DSA_44) { ret = SetAsymKeyDer(key->k, WC_MLDSA_44_KEY_SIZE, NULL, 0, output, - len, ML_DSA_LEVEL2k); + len, ML_DSA_44k); } else if (key->level == WC_ML_DSA_65) { ret = SetAsymKeyDer(key->k, WC_MLDSA_65_KEY_SIZE, NULL, 0, output, - len, ML_DSA_LEVEL3k); + len, ML_DSA_65k); } else if (key->level == WC_ML_DSA_87) { ret = SetAsymKeyDer(key->k, WC_MLDSA_87_KEY_SIZE, NULL, 0, output, - len, ML_DSA_LEVEL5k); + len, ML_DSA_87k); } } diff --git a/wolfcrypt/src/wc_pkcs11.c b/wolfcrypt/src/wc_pkcs11.c index 0d369559a6..5a3b3cf5fe 100644 --- a/wolfcrypt/src/wc_pkcs11.c +++ b/wolfcrypt/src/wc_pkcs11.c @@ -66,8 +66,8 @@ #if defined(NO_PKCS11_RNG) && !defined(WC_NO_RNG) #define WC_NO_RNG #endif -#if defined(NO_PKCS11_MLDSA) && defined(HAVE_DILITHIUM) - #undef HAVE_DILITHIUM +#if defined(NO_PKCS11_MLDSA) && defined(WOLFSSL_HAVE_MLDSA) + #undef WOLFSSL_HAVE_MLDSA #endif #if defined(NO_PKCS11_MLKEM) && defined(WOLFSSL_HAVE_MLKEM) #undef WOLFSSL_HAVE_MLKEM @@ -81,7 +81,7 @@ static CK_BBOOL ckFalse = CK_FALSE; #endif #if !defined(NO_RSA) || defined(HAVE_ECC) || (!defined(NO_AES) && \ (defined(HAVE_AESGCM) || defined(HAVE_AES_CBC))) || \ - !defined(NO_HMAC) || defined(HAVE_DILITHIUM) || \ + !defined(NO_HMAC) || defined(WOLFSSL_HAVE_MLDSA) || \ defined(WOLFSSL_HAVE_MLKEM) /* Pointer to true required for templates. */ static CK_BBOOL ckTrue = CK_TRUE; @@ -99,11 +99,11 @@ static CK_KEY_TYPE ecKeyType = CKK_EC; /* Pointer to ML-KEM key type required for templates. */ static CK_KEY_TYPE mlkemKeyType = CKK_ML_KEM; #endif -#if defined(HAVE_DILITHIUM) +#if defined(WOLFSSL_HAVE_MLDSA) /* Pointer to ML-DSA key type required for templates. */ static CK_KEY_TYPE mldsaKeyType = CKK_ML_DSA; #endif -#if !defined(NO_RSA) || defined(HAVE_ECC) || defined(HAVE_DILITHIUM) || \ +#if !defined(NO_RSA) || defined(HAVE_ECC) || defined(WOLFSSL_HAVE_MLDSA) || \ defined(WOLFSSL_HAVE_MLKEM) /* Pointer to public key class required for templates. */ static CK_OBJECT_CLASS pubKeyClass = CKO_PUBLIC_KEY; @@ -1773,7 +1773,7 @@ static int Pkcs11CreateMlKemPrivateKey(CK_OBJECT_HANDLE* privateKey, } #endif /* WOLFSSL_HAVE_MLKEM */ -#ifdef HAVE_DILITHIUM +#ifdef WOLFSSL_HAVE_MLDSA /** * Create a PKCS#11 object containing the ML-DSA public key data. * @param handle [out] Handle to public key object. @@ -1824,21 +1824,21 @@ static int Pkcs11CreateMldsaPublicKey(CK_OBJECT_HANDLE* handle, } if ((key->level == WC_ML_DSA_44) && - (mechInfo->ulMinKeySize <= ML_DSA_LEVEL2_PUB_KEY_SIZE) && - (mechInfo->ulMaxKeySize >= ML_DSA_LEVEL2_PUB_KEY_SIZE)) { - publicKeyLen = ML_DSA_LEVEL2_PUB_KEY_SIZE; + (mechInfo->ulMinKeySize <= WC_MLDSA_44_PUB_KEY_SIZE) && + (mechInfo->ulMaxKeySize >= WC_MLDSA_44_PUB_KEY_SIZE)) { + publicKeyLen = WC_MLDSA_44_PUB_KEY_SIZE; param_set = CKP_ML_DSA_44; } else if ((key->level == WC_ML_DSA_65) && - (mechInfo->ulMinKeySize <= ML_DSA_LEVEL3_PUB_KEY_SIZE) && - (mechInfo->ulMaxKeySize >= ML_DSA_LEVEL3_PUB_KEY_SIZE)) { - publicKeyLen = ML_DSA_LEVEL3_PUB_KEY_SIZE; + (mechInfo->ulMinKeySize <= WC_MLDSA_65_PUB_KEY_SIZE) && + (mechInfo->ulMaxKeySize >= WC_MLDSA_65_PUB_KEY_SIZE)) { + publicKeyLen = WC_MLDSA_65_PUB_KEY_SIZE; param_set = CKP_ML_DSA_65; } else if ((key->level == WC_ML_DSA_87) && - (mechInfo->ulMinKeySize <= ML_DSA_LEVEL5_PUB_KEY_SIZE) && - (mechInfo->ulMaxKeySize >= ML_DSA_LEVEL5_PUB_KEY_SIZE)) { - publicKeyLen = ML_DSA_LEVEL5_PUB_KEY_SIZE; + (mechInfo->ulMinKeySize <= WC_MLDSA_87_PUB_KEY_SIZE) && + (mechInfo->ulMaxKeySize >= WC_MLDSA_87_PUB_KEY_SIZE)) { + publicKeyLen = WC_MLDSA_87_PUB_KEY_SIZE; param_set = CKP_ML_DSA_87; } else { @@ -1907,21 +1907,21 @@ static int Pkcs11CreateMldsaPrivateKey(CK_OBJECT_HANDLE* privateKey, } if ((key->level == WC_ML_DSA_44) && - (mechInfo->ulMinKeySize <= ML_DSA_LEVEL2_PUB_KEY_SIZE) && - (mechInfo->ulMaxKeySize >= ML_DSA_LEVEL2_PUB_KEY_SIZE)) { - privateKeyLen = ML_DSA_LEVEL2_KEY_SIZE; + (mechInfo->ulMinKeySize <= WC_MLDSA_44_PUB_KEY_SIZE) && + (mechInfo->ulMaxKeySize >= WC_MLDSA_44_PUB_KEY_SIZE)) { + privateKeyLen = WC_MLDSA_44_KEY_SIZE; param_set = CKP_ML_DSA_44; } else if ((key->level == WC_ML_DSA_65) && - (mechInfo->ulMinKeySize <= ML_DSA_LEVEL3_PUB_KEY_SIZE) && - (mechInfo->ulMaxKeySize >= ML_DSA_LEVEL3_PUB_KEY_SIZE)) { - privateKeyLen = ML_DSA_LEVEL3_KEY_SIZE; + (mechInfo->ulMinKeySize <= WC_MLDSA_65_PUB_KEY_SIZE) && + (mechInfo->ulMaxKeySize >= WC_MLDSA_65_PUB_KEY_SIZE)) { + privateKeyLen = WC_MLDSA_65_KEY_SIZE; param_set = CKP_ML_DSA_65; } else if ((key->level == WC_ML_DSA_87) && - (mechInfo->ulMinKeySize <= ML_DSA_LEVEL5_PUB_KEY_SIZE) && - (mechInfo->ulMaxKeySize >= ML_DSA_LEVEL5_PUB_KEY_SIZE)) { - privateKeyLen = ML_DSA_LEVEL5_KEY_SIZE; + (mechInfo->ulMinKeySize <= WC_MLDSA_87_PUB_KEY_SIZE) && + (mechInfo->ulMaxKeySize >= WC_MLDSA_87_PUB_KEY_SIZE)) { + privateKeyLen = WC_MLDSA_87_KEY_SIZE; param_set = CKP_ML_DSA_87; } else { @@ -1943,11 +1943,11 @@ static int Pkcs11CreateMldsaPrivateKey(CK_OBJECT_HANDLE* privateKey, return ret; } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #if !defined(NO_RSA) || defined(HAVE_ECC) || (!defined(NO_AES) && \ (defined(HAVE_AESGCM) || defined(HAVE_AES_CBC))) || \ - !defined(NO_HMAC) || defined(HAVE_DILITHIUM) || \ + !defined(NO_HMAC) || defined(WOLFSSL_HAVE_MLDSA) || \ defined(WOLFSSL_HAVE_MLKEM) /** * Check if mechanism is available in session on token. @@ -2220,7 +2220,7 @@ int wc_Pkcs11StoreKey(Pkcs11Token* token, int type, int clear, void* key) break; } #endif /* WOLFSSL_HAVE_MLKEM */ - #if defined(HAVE_DILITHIUM) + #if defined(WOLFSSL_HAVE_MLDSA) case PKCS11_KEY_TYPE_MLDSA: { wc_MlDsaKey* mldsaKey = (wc_MlDsaKey*) key; CK_MECHANISM_INFO mechInfo; @@ -2246,19 +2246,19 @@ int wc_Pkcs11StoreKey(Pkcs11Token* token, int type, int clear, void* key) session.func->C_DestroyObject(session.handle, privKey); } } - #if !defined(WOLFSSL_DILITHIUM_ASSIGN_KEY) && \ - !defined(WOLFSSL_DILITHIUM_DYNAMIC_KEYS) + #if !defined(WOLFSSL_MLDSA_ASSIGN_KEY) && \ + !defined(WOLFSSL_MLDSA_DYNAMIC_KEYS) if (ret == 0 && clear) { ForceZero(mldsaKey->k, sizeof(mldsaKey->k)); } - #elif defined(WOLFSSL_DILITHIUM_DYNAMIC_KEYS) + #elif defined(WOLFSSL_MLDSA_DYNAMIC_KEYS) if (ret == 0 && clear && mldsaKey->k != NULL) { ForceZero(mldsaKey->k, mldsaKey->kSz); } #endif break; } - #endif /* HAVE_DILITHIUM*/ + #endif /* WOLFSSL_HAVE_MLDSA */ default: ret = NOT_COMPILED_IN; break; @@ -4748,7 +4748,7 @@ static int Pkcs11PqcKemDecapsulate(Pkcs11Session* session, wc_CryptoInfo* info) } #endif /* WOLFSSL_HAVE_MLKEM */ -#if defined(HAVE_DILITHIUM) +#if defined(WOLFSSL_HAVE_MLDSA) /** * Find the PKCS#11 object containing the ML-DSA public or private key data. * @@ -4852,11 +4852,11 @@ static int Pkcs11GetMldsaPublicKey(wc_MlDsaKey* key, PKCS11_DUMP_TEMPLATE("ML-DSA Public Key", tmpl, tmplCnt); } if (ret == 0) { - if (pubKeySize == ML_DSA_LEVEL2_PUB_KEY_SIZE) + if (pubKeySize == WC_MLDSA_44_PUB_KEY_SIZE) wc_MlDsaKey_SetParams(key, WC_ML_DSA_44); - else if (pubKeySize == ML_DSA_LEVEL3_PUB_KEY_SIZE) + else if (pubKeySize == WC_MLDSA_65_PUB_KEY_SIZE) wc_MlDsaKey_SetParams(key, WC_ML_DSA_65); - else if (pubKeySize == ML_DSA_LEVEL5_PUB_KEY_SIZE) + else if (pubKeySize == WC_MLDSA_87_PUB_KEY_SIZE) wc_MlDsaKey_SetParams(key, WC_ML_DSA_87); else ret = WC_KEY_SIZE_E; @@ -4965,18 +4965,18 @@ static int Pkcs11MldsaKeyGen(Pkcs11Session* session, wc_MlDsaKey* key) ret = Pkcs11MechAvail(session, CKM_ML_DSA_KEY_PAIR_GEN, &mechInfo); if (ret == 0) { if ((key->level == WC_ML_DSA_44) && - (mechInfo.ulMinKeySize <= ML_DSA_LEVEL2_PUB_KEY_SIZE) && - (mechInfo.ulMaxKeySize >= ML_DSA_LEVEL2_PUB_KEY_SIZE)) { + (mechInfo.ulMinKeySize <= WC_MLDSA_44_PUB_KEY_SIZE) && + (mechInfo.ulMaxKeySize >= WC_MLDSA_44_PUB_KEY_SIZE)) { param_set = CKP_ML_DSA_44; } else if ((key->level == WC_ML_DSA_65) && - (mechInfo.ulMinKeySize <= ML_DSA_LEVEL3_PUB_KEY_SIZE) && - (mechInfo.ulMaxKeySize >= ML_DSA_LEVEL3_PUB_KEY_SIZE)) { + (mechInfo.ulMinKeySize <= WC_MLDSA_65_PUB_KEY_SIZE) && + (mechInfo.ulMaxKeySize >= WC_MLDSA_65_PUB_KEY_SIZE)) { param_set = CKP_ML_DSA_65; } else if ((key->level == WC_ML_DSA_87) && - (mechInfo.ulMinKeySize <= ML_DSA_LEVEL5_PUB_KEY_SIZE) && - (mechInfo.ulMaxKeySize >= ML_DSA_LEVEL5_PUB_KEY_SIZE)) { + (mechInfo.ulMinKeySize <= WC_MLDSA_87_PUB_KEY_SIZE) && + (mechInfo.ulMaxKeySize >= WC_MLDSA_87_PUB_KEY_SIZE)) { param_set = CKP_ML_DSA_87; } else { @@ -5333,7 +5333,7 @@ static int Pkcs11MldsaCheckPrivKey(Pkcs11Session* session, wc_CryptoInfo* info) wc_MlDsaKey* privKey = (wc_MlDsaKey*) info->pk.pqc_sig_check.key; WC_DECLARE_VAR(pubKey, wc_MlDsaKey, 1, privKey->heap); - WC_ALLOC_VAR_EX(pubKey, wc_MlDsaKey, 1, privKey->heap, DYNAMIC_TYPE_DILITHIUM, + WC_ALLOC_VAR_EX(pubKey, wc_MlDsaKey, 1, privKey->heap, DYNAMIC_TYPE_MLDSA, ret = MEMORY_E); /* Get the ML-DSA public key object. */ @@ -5357,11 +5357,11 @@ static int Pkcs11MldsaCheckPrivKey(Pkcs11Session* session, wc_CryptoInfo* info) if (ret == 0) { if (key_level == WC_ML_DSA_44) - storedKeySize = ML_DSA_LEVEL2_PUB_KEY_SIZE; + storedKeySize = WC_MLDSA_44_PUB_KEY_SIZE; else if (key_level == WC_ML_DSA_65) - storedKeySize = ML_DSA_LEVEL3_PUB_KEY_SIZE; + storedKeySize = WC_MLDSA_65_PUB_KEY_SIZE; else if (key_level == WC_ML_DSA_87) - storedKeySize = ML_DSA_LEVEL5_PUB_KEY_SIZE; + storedKeySize = WC_MLDSA_87_PUB_KEY_SIZE; else ret = WC_KEY_SIZE_E; } @@ -5385,7 +5385,7 @@ static int Pkcs11MldsaCheckPrivKey(Pkcs11Session* session, wc_CryptoInfo* info) wc_MlDsaKey_Free(pubKey); } - WC_FREE_VAR_EX(pubKey, privKey->heap, DYNAMIC_TYPE_DILITHIUM); + WC_FREE_VAR_EX(pubKey, privKey->heap, DYNAMIC_TYPE_MLDSA); return ret; } @@ -5512,7 +5512,7 @@ static int Pkcs11PqcSigCheckPrivKey(Pkcs11Session* session, wc_CryptoInfo* info) return ret; } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #if !defined(NO_AES) && defined(HAVE_AESGCM) /** @@ -6329,7 +6329,7 @@ int wc_Pkcs11_CryptoDevCb(int devId, wc_CryptoInfo* info, void* ctx) */ if (ret == 0) { if (info->algo_type == WC_ALGO_TYPE_PK) { -#if !defined(NO_RSA) || defined(HAVE_ECC) || defined(HAVE_DILITHIUM) || \ +#if !defined(NO_RSA) || defined(HAVE_ECC) || defined(WOLFSSL_HAVE_MLDSA) || \ defined(WOLFSSL_HAVE_MLKEM) switch (info->pk.type) { #ifndef NO_RSA @@ -6433,7 +6433,7 @@ int wc_Pkcs11_CryptoDevCb(int devId, wc_CryptoInfo* info, void* ctx) } break; #endif - #if defined(HAVE_DILITHIUM) + #if defined(WOLFSSL_HAVE_MLDSA) case WC_PK_TYPE_PQC_SIG_KEYGEN: ret = Pkcs11OpenSession(token, &session, readWrite); if (ret == 0) { @@ -6469,7 +6469,7 @@ int wc_Pkcs11_CryptoDevCb(int devId, wc_CryptoInfo* info, void* ctx) } #else ret = NOT_COMPILED_IN; -#endif /* !NO_RSA || HAVE_ECC || HAVE_DILITHIUM || WOLFSSL_HAVE_MLKEM */ +#endif /* !NO_RSA || HAVE_ECC || WOLFSSL_HAVE_MLDSA || WOLFSSL_HAVE_MLKEM */ } else if (info->algo_type == WC_ALGO_TYPE_CIPHER) { #ifndef NO_AES @@ -6629,7 +6629,7 @@ int wc_Pkcs11_CryptoDevCb(int devId, wc_CryptoInfo* info, void* ctx) } else #endif - #ifdef HAVE_DILITHIUM + #ifdef WOLFSSL_HAVE_MLDSA if (info->free.algo == WC_ALGO_TYPE_PK && info->free.type == WC_PK_TYPE_PQC_SIG_KEYGEN && info->free.subType == WC_PQC_SIG_TYPE_MLDSA) { diff --git a/wolfcrypt/src/wc_slhdsa.c b/wolfcrypt/src/wc_slhdsa.c index cb97e1623a..e1e7b115e0 100644 --- a/wolfcrypt/src/wc_slhdsa.c +++ b/wolfcrypt/src/wc_slhdsa.c @@ -7840,7 +7840,7 @@ static const byte slhdsakey_oid_sha3_512[] = { * corresponding OID for the chosen hash algorithm. * * The HashSLH-DSA family takes the digest as input rather than the full - * message. This mirrors the wc_dilithium_*_ctx_hash interface and matches the + * message. This mirrors the wc_MlDsaKey_*Ctx_Hash interface and matches the * convention used by NIST ACVP signatureInterface=external / preHash test * vectors and other libraries (OpenSSL HASH-ML-DSA, leancrypto SLH-DSA, * mldsa-native pre_hash_internal). The expected digest length is fixed by @@ -9185,7 +9185,7 @@ int wc_SlhDsaKey_PublicKeyDecode(const byte* input, word32* inOutIdx, * parameter set -- callers chaining decoders must pass inSz scoped to * just the public-key buffer or the import will reject the length and * fall through to SPKI parsing. Mirrors the raw-first fallback in - * wc_Dilithium_PublicKeyDecode and wc_Falcon_PublicKeyDecode so all PQ + * wc_MlDsaKey_PublicKeyDecode and wc_Falcon_PublicKeyDecode so all PQ * public-key decoders accept either raw bytes or SPKI. * * The length check in ImportPublic is the disambiguator: a real SPKI diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index 1f8ce25537..a60683457f 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -395,8 +395,8 @@ static const byte const_byte_array[] = "A+Gd\0\0\0"; #ifdef WOLFSSL_HAVE_MLKEM #include #endif -#ifdef HAVE_DILITHIUM - #include +#ifdef WOLFSSL_HAVE_MLDSA + #include #endif #if defined(WOLFSSL_HAVE_XMSS) #include @@ -965,8 +965,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t scrypt_test(void); #ifdef WOLFSSL_HAVE_MLKEM WOLFSSL_TEST_SUBROUTINE wc_test_ret_t mlkem_test(void); #endif -#ifdef HAVE_DILITHIUM - WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dilithium_test(void); +#ifdef WOLFSSL_HAVE_MLDSA + WOLFSSL_TEST_SUBROUTINE wc_test_ret_t mldsa_test(void); #endif #if defined(WOLFSSL_HAVE_XMSS) #if !defined(WOLFSSL_SMALL_STACK) && WOLFSSL_XMSS_MIN_HEIGHT <= 10 @@ -1447,14 +1447,14 @@ static WC_MAYBE_UNUSED Aes* test_AesGcmNew(void* heap, int declaredDevId, #ifdef WOLFSSL_STATIC_MEMORY #if defined(WOLFSSL_STATIC_MEMORY_TEST_SZ) static byte gTestMemory[WOLFSSL_STATIC_MEMORY_TEST_SZ]; - #elif defined(HAVE_DILITHIUM) - #if defined(WOLFSSL_DILITHIUM_VERIFY_SMALL_MEM) && \ - defined(WOLFSSL_DILITHIUM_SIGN_SMALL_MEM) && \ - defined(WOLFSSL_DILITHIUM_MAKE_KEY_SMALL_MEM) && \ - defined(WOLFSSL_DILITHIUM_VERIFY_ONLY) - static byte gTestMemory[192*1024]; /* Dilithium low mem */ + #elif defined(WOLFSSL_HAVE_MLDSA) + #if defined(WOLFSSL_MLDSA_VERIFY_SMALL_MEM) && \ + defined(WOLFSSL_MLDSA_SIGN_SMALL_MEM) && \ + defined(WOLFSSL_MLDSA_MAKE_KEY_SMALL_MEM) && \ + defined(WOLFSSL_MLDSA_VERIFY_ONLY) + static byte gTestMemory[192*1024]; /* ML-DSA low mem */ #else - static byte gTestMemory[576*1024]; /* Dilithium full mem */ + static byte gTestMemory[576*1024]; /* ML-DSA full mem */ #endif #elif defined(BENCH_EMBEDDED) static byte gTestMemory[14000]; @@ -3130,12 +3130,12 @@ options: [-s max_relative_stack_bytes] [-m max_relative_heap_memory_bytes]\n\ PRIVATE_KEY_LOCK(); #endif -#ifdef HAVE_DILITHIUM +#ifdef WOLFSSL_HAVE_MLDSA PRIVATE_KEY_UNLOCK(); - if ( (ret = dilithium_test()) != 0) - TEST_FAIL("DILITHIUM test failed!\n", ret); + if ( (ret = mldsa_test()) != 0) + TEST_FAIL("ML-DSA test failed!\n", ret); else - TEST_PASS("DILITHIUM test passed!\n"); + TEST_PASS("ML-DSA test passed!\n"); PRIVATE_KEY_LOCK(); #endif @@ -52263,22 +52263,22 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t mlkem_test(void) } #endif /* WOLFSSL_HAVE_MLKEM */ -#ifdef HAVE_DILITHIUM -#ifndef WOLFSSL_DILITHIUM_NO_VERIFY -static wc_test_ret_t dilithium_param_vfy_test(int param, const byte* pubKey, +#ifdef WOLFSSL_HAVE_MLDSA +#ifndef WOLFSSL_MLDSA_NO_VERIFY +static wc_test_ret_t mldsa_param_vfy_test(int param, const byte* pubKey, word32 pubKeyLen, const byte* sig, word32 sigLen) { - #ifndef DILITHIUM_TEST_MSG_SZ - #define DILITHIUM_TEST_MSG_SZ 512 + #ifndef WC_MLDSA_TEST_MSG_SZ + #define WC_MLDSA_TEST_MSG_SZ 512 #endif #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) byte* msg = NULL; - dilithium_key* key = NULL; + wc_MlDsaKey* key = NULL; byte* pubExported = NULL; #else - byte msg[DILITHIUM_TEST_MSG_SZ]; - dilithium_key key[1]; - byte pubExported[DILITHIUM_MAX_PUB_KEY_SIZE]; + byte msg[WC_MLDSA_TEST_MSG_SZ]; + wc_MlDsaKey key[1]; + byte pubExported[MLDSA_MAX_PUB_KEY_SIZE]; #endif wc_test_ret_t ret; int i; @@ -52287,9 +52287,9 @@ static wc_test_ret_t dilithium_param_vfy_test(int param, const byte* pubKey, int n_diff = 0; #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - msg = (byte*)XMALLOC(DILITHIUM_TEST_MSG_SZ, HEAP_HINT, + msg = (byte*)XMALLOC(WC_MLDSA_TEST_MSG_SZ, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - key = (dilithium_key*)XMALLOC(sizeof(*key), HEAP_HINT, + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); pubExported = (byte*)XMALLOC(pubKeyLen, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -52299,33 +52299,33 @@ static wc_test_ret_t dilithium_param_vfy_test(int param, const byte* pubKey, #endif /* make dummy msg */ - for (i = 0; i < DILITHIUM_TEST_MSG_SZ; i++) { + for (i = 0; i < WC_MLDSA_TEST_MSG_SZ; i++) { msg[i] = (byte)i; } - ret = wc_dilithium_init_ex(key, NULL, devId); + ret = wc_MlDsaKey_Init(key, NULL, devId); if (ret != 0) { ret = WC_TEST_RET_ENC_EC(ret); return ret; } - ret = wc_dilithium_set_level(key, param); + ret = wc_MlDsaKey_SetParams(key, param); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); - ret = wc_dilithium_import_public(pubKey, pubKeyLen, key); + ret = wc_MlDsaKey_ImportPubRaw(key, pubKey, pubKeyLen); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT if (param >= WC_ML_DSA_DRAFT) { - ret = wc_dilithium_verify_msg(sig, sigLen, msg, DILITHIUM_TEST_MSG_SZ, - &res, key); + ret = wc_MlDsaKey_Verify(key, sig, sigLen, msg, WC_MLDSA_TEST_MSG_SZ, + &res); } else #endif { - ret = wc_dilithium_verify_ctx_msg(sig, sigLen, NULL, 0, msg, - DILITHIUM_TEST_MSG_SZ, &res, key); + ret = wc_MlDsaKey_VerifyCtx(key, sig, sigLen, NULL, 0, msg, + WC_MLDSA_TEST_MSG_SZ, &res); } if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); @@ -52333,7 +52333,7 @@ static wc_test_ret_t dilithium_param_vfy_test(int param, const byte* pubKey, ERROR_OUT(WC_TEST_RET_ENC_EC(res), out); /* Now test the export pub raw API, verify we recover the original pub. */ - ret = wc_dilithium_export_public(key, pubExported, &lenExported); + ret = wc_MlDsaKey_ExportPubRaw(key, pubExported, &lenExported); if (ret != 0) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); } @@ -52349,7 +52349,7 @@ static wc_test_ret_t dilithium_param_vfy_test(int param, const byte* pubKey, } out: - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) XFREE(msg, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -52359,7 +52359,7 @@ static wc_test_ret_t dilithium_param_vfy_test(int param, const byte* pubKey, } #ifndef WOLFSSL_NO_ML_DSA_44 -static wc_test_ret_t dilithium_param_44_vfy_test(void) +static wc_test_ret_t mldsa_param_44_vfy_test(void) { WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_44_pub_key[] = { 0xd8, 0xac, 0xaf, 0xd8, 0x2e, 0x14, 0x23, 0x78, 0xf7, 0x0d, 0x9a, 0x04, @@ -52473,7 +52473,7 @@ static wc_test_ret_t dilithium_param_44_vfy_test(void) 0x2f, 0x4b, 0x2e, 0x23, 0x4c, 0x0f, 0x0f, 0xe0, 0x14, 0xa5, 0xe7, 0xe5, 0x70, 0x8d, 0x8b, 0x9c }; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_44_draft_pub_key[] = { 0xea, 0x05, 0x24, 0x0d, 0x80, 0x72, 0x25, 0x55, 0xf4, 0x5b, 0xc2, 0x13, 0x8b, 0x87, 0x5d, 0x31, 0x99, 0x2f, 0x1d, 0xa9, @@ -52813,7 +52813,7 @@ static wc_test_ret_t dilithium_param_44_vfy_test(void) 0x7c, 0x8c, 0x8d, 0x92, 0x99, 0x9c, 0xad, 0xb5, 0xb7, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x23, 0x36, 0x4a }; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_44_draft_sig[] = { 0x5e, 0xc1, 0xce, 0x0e, 0x31, 0xea, 0x10, 0x52, 0xa3, 0x7a, 0xfe, 0x4d, 0xac, 0x07, 0x89, 0x5a, 0x45, 0xbd, 0x5a, 0xe5, @@ -53061,12 +53061,12 @@ static wc_test_ret_t dilithium_param_44_vfy_test(void) #endif wc_test_ret_t ret; - ret = dilithium_param_vfy_test(WC_ML_DSA_44, ml_dsa_44_pub_key, + ret = mldsa_param_vfy_test(WC_ML_DSA_44, ml_dsa_44_pub_key, (word32)sizeof(ml_dsa_44_pub_key), ml_dsa_44_sig, (word32)sizeof(ml_dsa_44_sig)); -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT if (ret == 0) { - ret = dilithium_param_vfy_test(WC_ML_DSA_44_DRAFT, + ret = mldsa_param_vfy_test(WC_ML_DSA_44_DRAFT, ml_dsa_44_draft_pub_key, (word32)sizeof(ml_dsa_44_draft_pub_key), ml_dsa_44_draft_sig, (word32)sizeof(ml_dsa_44_draft_sig)); } @@ -53077,7 +53077,7 @@ static wc_test_ret_t dilithium_param_44_vfy_test(void) #endif #ifndef WOLFSSL_NO_ML_DSA_65 -static wc_test_ret_t dilithium_param_65_vfy_test(void) +static wc_test_ret_t mldsa_param_65_vfy_test(void) { WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_65_pub_key[] = { 0x2c, 0x32, 0xfa, 0x59, 0x71, 0x16, 0x4a, 0x0e, 0x45, 0x0f, 0x21, 0xfd, @@ -53244,7 +53244,7 @@ static wc_test_ret_t dilithium_param_65_vfy_test(void) 0xa1, 0xe9, 0xa4, 0xb7, 0x42, 0x62, 0xee, 0xea, 0x43, 0xf3, 0xd8, 0xd0, 0x7a, 0x53, 0x91, 0x34, 0x7f, 0xe7, 0x9a, 0xc6 }; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_65_draft_pub_key[] = { 0x15, 0xc9, 0xe5, 0x53, 0x2f, 0xd8, 0x1f, 0xb4, 0xa3, 0x9f, 0xae, 0xad, 0xb3, 0x10, 0xd0, 0x72, 0x69, 0xd3, 0x02, 0xf3, @@ -53722,7 +53722,7 @@ static wc_test_ret_t dilithium_param_65_vfy_test(void) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0b, 0x13, 0x1a, 0x1d, 0x25 }; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_65_draft_sig[] = { 0x3e, 0xff, 0xf4, 0x48, 0x80, 0x2d, 0x88, 0x87, 0xf4, 0xcc, 0xa4, 0x61, 0xe1, 0x27, 0x20, 0x55, 0x66, 0xc8, 0xfe, 0x3e, @@ -54059,12 +54059,12 @@ static wc_test_ret_t dilithium_param_65_vfy_test(void) #endif wc_test_ret_t ret; - ret = dilithium_param_vfy_test(WC_ML_DSA_65, ml_dsa_65_pub_key, + ret = mldsa_param_vfy_test(WC_ML_DSA_65, ml_dsa_65_pub_key, (word32)sizeof(ml_dsa_65_pub_key), ml_dsa_65_sig, (word32)sizeof(ml_dsa_65_sig)); -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT if (ret == 0) { - ret = dilithium_param_vfy_test(WC_ML_DSA_65_DRAFT, + ret = mldsa_param_vfy_test(WC_ML_DSA_65_DRAFT, ml_dsa_65_draft_pub_key, (word32)sizeof(ml_dsa_65_draft_pub_key), ml_dsa_65_draft_sig, (word32)sizeof(ml_dsa_65_draft_sig)); } @@ -54075,7 +54075,7 @@ static wc_test_ret_t dilithium_param_65_vfy_test(void) #endif #ifndef WOLFSSL_NO_ML_DSA_87 -static wc_test_ret_t dilithium_param_87_vfy_test(void) +static wc_test_ret_t mldsa_param_87_vfy_test(void) { WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_87_pub_key[] = { 0x8a, 0x66, 0xe3, 0x6e, 0x3c, 0x11, 0x70, 0x9f, 0x82, 0xdd, 0xeb, 0x9e, @@ -54295,7 +54295,7 @@ static wc_test_ret_t dilithium_param_87_vfy_test(void) 0xe5, 0xef, 0x19, 0xbe, 0x04, 0xf6, 0x6b, 0xad, 0x41, 0x4c, 0x5a, 0x50, 0xf6, 0xac, 0x1b, 0x25, 0x8a, 0xdd, 0xe3, 0x57, 0xab, 0x7c, 0x92, 0xe4 }; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_87_draft_pub_key[] = { 0xef, 0x49, 0x79, 0x47, 0x15, 0xc4, 0x8a, 0xa9, 0x74, 0x2a, 0xf0, 0x36, 0x94, 0x5c, 0x91, 0x1c, 0x5d, 0xff, 0x2c, 0x83, @@ -54947,7 +54947,7 @@ static wc_test_ret_t dilithium_param_87_vfy_test(void) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x20, 0x24, 0x2f, 0x33, 0x3f }; -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_87_draft_sig[] = { 0x78, 0xed, 0x1a, 0x3f, 0x41, 0xab, 0xf8, 0x93, 0x80, 0xf0, 0xc6, 0xbf, 0x4a, 0xde, 0xaf, 0x29, 0x93, 0xe5, 0x9a, 0xbf, @@ -55416,12 +55416,12 @@ static wc_test_ret_t dilithium_param_87_vfy_test(void) #endif wc_test_ret_t ret; - ret = dilithium_param_vfy_test(WC_ML_DSA_87, ml_dsa_87_pub_key, + ret = mldsa_param_vfy_test(WC_ML_DSA_87, ml_dsa_87_pub_key, (word32)sizeof(ml_dsa_87_pub_key), ml_dsa_87_sig, (word32)sizeof(ml_dsa_87_sig)); -#ifdef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifdef WOLFSSL_MLDSA_FIPS204_DRAFT if (ret == 0) { - ret = dilithium_param_vfy_test(WC_ML_DSA_87_DRAFT, + ret = mldsa_param_vfy_test(WC_ML_DSA_87_DRAFT, ml_dsa_87_draft_pub_key, (word32)sizeof(ml_dsa_87_draft_pub_key), ml_dsa_87_draft_sig, (word32)sizeof(ml_dsa_87_draft_sig)); } @@ -55432,64 +55432,64 @@ static wc_test_ret_t dilithium_param_87_vfy_test(void) #endif #endif -#ifndef WOLFSSL_DILITHIUM_NO_MAKE_KEY -static wc_test_ret_t dilithium_param_test(int param, WC_RNG* rng) +#ifndef WOLFSSL_MLDSA_NO_MAKE_KEY +static wc_test_ret_t mldsa_param_test(int param, WC_RNG* rng) { wc_test_ret_t ret; #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - dilithium_key* key = NULL; + wc_MlDsaKey* key = NULL; byte* sig = NULL; #else - dilithium_key key[1]; -#ifndef WOLFSSL_DILITHIUM_NO_SIGN - byte sig[DILITHIUM_MAX_SIG_SIZE]; + wc_MlDsaKey key[1]; +#ifndef WOLFSSL_MLDSA_NO_SIGN + byte sig[MLDSA_MAX_SIG_SIZE]; #endif #endif -#ifndef WOLFSSL_DILITHIUM_NO_SIGN +#ifndef WOLFSSL_MLDSA_NO_SIGN word32 sigLen; byte msg[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; -#ifndef WOLFSSL_DILITHIUM_NO_VERIFY +#ifndef WOLFSSL_MLDSA_NO_VERIFY int res = 0; #endif #endif - dilithium_key* tmpKey = NULL; + wc_MlDsaKey* tmpKey = NULL; #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - key = (dilithium_key*)XMALLOC(sizeof(*key), HEAP_HINT, + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - sig = (byte*)XMALLOC(DILITHIUM_MAX_SIG_SIZE, HEAP_HINT, + sig = (byte*)XMALLOC(MLDSA_MAX_SIG_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); if (key == NULL || sig == NULL) { ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); } #endif - ret = wc_dilithium_init_ex(key, NULL, devId); + ret = wc_MlDsaKey_Init(key, NULL, devId); if (ret != 0) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); } - ret = wc_dilithium_set_level(key, param); + ret = wc_MlDsaKey_SetParams(key, param); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); - ret = wc_dilithium_make_key(key, rng); + ret = wc_MlDsaKey_MakeKey(key, rng); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); -#ifndef WOLFSSL_DILITHIUM_NO_SIGN - sigLen = wc_dilithium_sig_size(key); +#ifndef WOLFSSL_MLDSA_NO_SIGN + sigLen = wc_MlDsaKey_SigSize(key); if (sigLen <= 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); - ret = wc_dilithium_sign_ctx_msg(NULL, 0, msg, (word32)sizeof(msg), sig, - &sigLen, key, rng); + ret = wc_MlDsaKey_SignCtx(key, NULL, 0, sig, &sigLen, + msg, (word32)sizeof(msg), rng); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); -#ifndef WOLFSSL_DILITHIUM_NO_VERIFY - ret = wc_dilithium_verify_ctx_msg(sig, sigLen, NULL, 0, msg, - (word32)sizeof(msg), &res, key); +#ifndef WOLFSSL_MLDSA_NO_VERIFY + ret = wc_MlDsaKey_VerifyCtx(key, sig, sigLen, NULL, 0, msg, + (word32)sizeof(msg), &res); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (res != 1) @@ -55497,16 +55497,16 @@ static wc_test_ret_t dilithium_param_test(int param, WC_RNG* rng) #endif #endif - tmpKey = wc_dilithium_new(HEAP_HINT, devId); + tmpKey = wc_MlDsaKey_New(HEAP_HINT, devId); if (tmpKey == NULL) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); - ret = wc_dilithium_delete(tmpKey, &tmpKey); + ret = wc_MlDsaKey_Delete(tmpKey, &tmpKey); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); out: - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) XFREE(sig, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -55515,77 +55515,77 @@ static wc_test_ret_t dilithium_param_test(int param, WC_RNG* rng) } #endif -#if defined(WC_DILITHIUM_CACHE_MATRIX_A) && \ - !defined(WC_DILITHIUM_FIXED_ARRAY) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) +#if defined(WC_MLDSA_CACHE_MATRIX_A) && \ + !defined(WC_MLDSA_FIXED_ARRAY) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) /* Regression test for sign path matrix A cache allocation. * - * dilithium_sign_with_seed_mu() previously stored the result of XMALLOC for + * mldsa_sign_with_seed_mu() previously stored the result of XMALLOC for * the matrix A cache into a local variable instead of key->a. The local was * then immediately overwritten by `a = key->a` (still NULL), so the just- * allocated buffer was leaked and a NULL pointer was passed to - * dilithium_expand_a(). + * mldsa_expand_a(). * * This test exercises that exact code path by clearing the cache state on a * key after make_key, then signing. The post-condition asserts that key->a * was populated (proving the allocation made it into the key, not the local) * and that signing produces a verifiable signature. */ -static wc_test_ret_t dilithium_sign_cache_alloc_test(int param, WC_RNG* rng) +static wc_test_ret_t mldsa_sign_cache_alloc_test(int param, WC_RNG* rng) { wc_test_ret_t ret; - dilithium_key* key = NULL; + wc_MlDsaKey* key = NULL; byte* sig = NULL; word32 sigLen; byte msg[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; int res = 0; - key = (dilithium_key*)XMALLOC(sizeof(*key), HEAP_HINT, + key = (wc_MlDsaKey*)XMALLOC(sizeof(*key), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); if (key == NULL) { ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); } - /* Init before further allocations so wc_dilithium_free() in the cleanup + /* Init before further allocations so wc_MlDsaKey_Free() in the cleanup * path operates on a zeroed struct, not garbage cached-pointer fields. */ - ret = wc_dilithium_init_ex(key, NULL, devId); + ret = wc_MlDsaKey_Init(key, NULL, devId); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); - sig = (byte*)XMALLOC(DILITHIUM_MAX_SIG_SIZE, HEAP_HINT, + sig = (byte*)XMALLOC(MLDSA_MAX_SIG_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); if (sig == NULL) { ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); } - ret = wc_dilithium_set_level(key, param); + ret = wc_MlDsaKey_SetParams(key, param); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); - ret = wc_dilithium_make_key(key, rng); + ret = wc_MlDsaKey_MakeKey(key, rng); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); /* Drop the cached matrix A so the next sign exercises the allocation - * branch in dilithium_sign_with_seed_mu(). */ - XFREE(key->a, key->heap, DYNAMIC_TYPE_DILITHIUM); + * branch in mldsa_sign_with_seed_mu(). */ + XFREE(key->a, key->heap, DYNAMIC_TYPE_MLDSA); key->a = NULL; key->aSet = 0; -#ifdef WC_DILITHIUM_CACHE_PRIV_VECTORS - XFREE(key->s1, key->heap, DYNAMIC_TYPE_DILITHIUM); +#ifdef WC_MLDSA_CACHE_PRIV_VECTORS + XFREE(key->s1, key->heap, DYNAMIC_TYPE_MLDSA); key->s1 = NULL; key->s2 = NULL; key->t0 = NULL; key->privVecsSet = 0; #endif - sigLen = wc_dilithium_sig_size(key); + sigLen = wc_MlDsaKey_SigSize(key); if (sigLen <= 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); - ret = wc_dilithium_sign_ctx_msg(NULL, 0, msg, (word32)sizeof(msg), sig, - &sigLen, key, rng); + ret = wc_MlDsaKey_SignCtx(key, NULL, 0, sig, &sigLen, + msg, (word32)sizeof(msg), rng); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); @@ -55597,8 +55597,8 @@ static wc_test_ret_t dilithium_sign_cache_alloc_test(int param, WC_RNG* rng) if (key->aSet != 1) ERROR_OUT(WC_TEST_RET_ENC_NC, out); - ret = wc_dilithium_verify_ctx_msg(sig, sigLen, NULL, 0, msg, - (word32)sizeof(msg), &res, key); + ret = wc_MlDsaKey_VerifyCtx(key, sig, sigLen, NULL, 0, msg, + (word32)sizeof(msg), &res); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (res != 1) @@ -55606,48 +55606,48 @@ static wc_test_ret_t dilithium_sign_cache_alloc_test(int param, WC_RNG* rng) out: if (key != NULL) - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); XFREE(sig, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); return ret; } -#endif /* WC_DILITHIUM_CACHE_MATRIX_A && !WC_DILITHIUM_FIXED_ARRAY && - * !WOLFSSL_DILITHIUM_NO_MAKE_KEY && !WOLFSSL_DILITHIUM_NO_SIGN && - * !WOLFSSL_DILITHIUM_NO_VERIFY */ +#endif /* WC_MLDSA_CACHE_MATRIX_A && !WC_MLDSA_FIXED_ARRAY && + * !WOLFSSL_MLDSA_NO_MAKE_KEY && !WOLFSSL_MLDSA_NO_SIGN && + * !WOLFSSL_MLDSA_NO_VERIFY */ -#if (defined(WOLFSSL_DILITHIUM_PRIVATE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN)) || \ - (defined(WOLFSSL_DILITHIUM_PUBLIC_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY)) +#if (defined(WOLFSSL_MLDSA_PRIVATE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN)) || \ + (defined(WOLFSSL_MLDSA_PUBLIC_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY)) /* Tests decoding a key from DER without the security level specified */ -static wc_test_ret_t test_dilithium_decode_level(const byte* rawKey, +static wc_test_ret_t test_mldsa_decode_level(const byte* rawKey, word32 rawKeySz, int expectedLevel, int isPublicOnlyKey) { int ret = 0; -#if !defined(WOLFSSL_DILITHIUM_NO_ASN1) && defined(WOLFSSL_ASN_TEMPLATE) +#if !defined(WOLFSSL_MLDSA_NO_ASN1) && defined(WOLFSSL_ASN_TEMPLATE) /* Size the buffer to accommodate the largest encoded key size */ - const word32 maxDerSz = DILITHIUM_MAX_PRV_KEY_DER_SIZE; + const word32 maxDerSz = MLDSA_MAX_PRV_KEY_DER_SIZE; word32 derSz; word32 idx; #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) byte* der = NULL; #else - byte der[DILITHIUM_MAX_PRV_KEY_DER_SIZE]; + byte der[MLDSA_MAX_PRV_KEY_DER_SIZE]; #endif #endif #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - dilithium_key *key = NULL; + wc_MlDsaKey *key = NULL; #else - dilithium_key key[1]; + wc_MlDsaKey key[1]; #endif #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) /* Allocate DER buffer */ der = (byte*)XMALLOC(maxDerSz, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - key = (dilithium_key *)XMALLOC(sizeof(*key), HEAP_HINT, + key = (wc_MlDsaKey *)XMALLOC(sizeof(*key), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); if (der == NULL || key == NULL) { ret = MEMORY_E; @@ -55656,38 +55656,38 @@ static wc_test_ret_t test_dilithium_decode_level(const byte* rawKey, /* Initialize key */ if (ret == 0) { - ret = wc_dilithium_init_ex(key, NULL, devId); + ret = wc_MlDsaKey_Init(key, NULL, devId); } /* Import raw key, setting the security level */ if (ret == 0) { - ret = wc_dilithium_set_level(key, expectedLevel); + ret = wc_MlDsaKey_SetParams(key, expectedLevel); } if (ret == 0) { -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY if (isPublicOnlyKey) { - ret = wc_dilithium_import_public(rawKey, rawKeySz, key); + ret = wc_MlDsaKey_ImportPubRaw(key, rawKey, rawKeySz); } #endif -#ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY if (!isPublicOnlyKey) { - ret = wc_dilithium_import_private(rawKey, rawKeySz, key); + ret = wc_MlDsaKey_ImportPrivRaw(key, rawKey, rawKeySz); } #endif } -#if !defined(WOLFSSL_DILITHIUM_NO_ASN1) && defined(WOLFSSL_ASN_TEMPLATE) +#if !defined(WOLFSSL_MLDSA_NO_ASN1) && defined(WOLFSSL_ASN_TEMPLATE) /* Export raw key as DER */ if (ret == 0) { -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY if (isPublicOnlyKey) { - ret = wc_Dilithium_PublicKeyToDer(key, der, maxDerSz, 1); + ret = wc_MlDsaKey_PublicKeyToDer(key, der, maxDerSz, 1); } #endif -#ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY if (!isPublicOnlyKey) { - ret = wc_Dilithium_PrivateKeyToDer(key, der, maxDerSz); + ret = wc_MlDsaKey_PrivateKeyToDer(key, der, maxDerSz); } #endif if (ret >= 0) { @@ -55698,63 +55698,63 @@ static wc_test_ret_t test_dilithium_decode_level(const byte* rawKey, /* Free and reinit key to test fresh decode */ if (ret == 0) { - wc_dilithium_free(key); - ret = wc_dilithium_init_ex(key, NULL, devId); + wc_MlDsaKey_Free(key); + ret = wc_MlDsaKey_Init(key, NULL, devId); } /* First test decoding when security level is set externally */ if (ret == 0) { - ret = wc_dilithium_set_level(key, expectedLevel); + ret = wc_MlDsaKey_SetParams(key, expectedLevel); } if (ret == 0) { idx = 0; -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY if (isPublicOnlyKey) { - ret = wc_Dilithium_PublicKeyDecode(der, &idx, key, derSz); + ret = wc_MlDsaKey_PublicKeyDecode(key, der, derSz, &idx); } #endif -#ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY if (!isPublicOnlyKey) { - ret = wc_Dilithium_PrivateKeyDecode(der, &idx, key, derSz); + ret = wc_MlDsaKey_PrivateKeyDecode(key, der, derSz, &idx); } #endif } /* Free and reinit key to test fresh decode */ if (ret == 0) { - wc_dilithium_free(key); - ret = wc_dilithium_init_ex(key, NULL, devId); + wc_MlDsaKey_Free(key); + ret = wc_MlDsaKey_Init(key, NULL, devId); } -#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT +#ifndef WOLFSSL_MLDSA_FIPS204_DRAFT /* Test decoding without setting security level - should auto-detect */ if (ret == 0) { idx = 0; -#ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY if (isPublicOnlyKey) { - ret = wc_Dilithium_PublicKeyDecode(der, &idx, key, derSz); + ret = wc_MlDsaKey_PublicKeyDecode(key, der, derSz, &idx); } #endif -#ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY if (!isPublicOnlyKey) { - ret = wc_Dilithium_PrivateKeyDecode(der, &idx, key, derSz); + ret = wc_MlDsaKey_PrivateKeyDecode(key, der, derSz, &idx); } #endif } /* Verify auto-detected security level */ if (ret == 0 && key->level != expectedLevel) { - printf("Dilithium key decode failed to detect level.\n" + printf("ML-DSA key decode failed to detect level.\n" "\tExpected level=%d\n\tGot level=%d\n", expectedLevel, key->level); ret = WC_TEST_RET_ENC_NC; } -#endif /* !WOLFSSL_DILITHIUM_FIPS204_DRAFT */ -#endif /* !WOLFSSL_DILITHIUM_NO_ASN1 && WOLFSSL_ASN_TEMPLATE */ +#endif /* !WOLFSSL_MLDSA_FIPS204_DRAFT */ +#endif /* !WOLFSSL_MLDSA_NO_ASN1 && WOLFSSL_ASN_TEMPLATE */ /* Cleanup */ - wc_dilithium_free(key); + wc_MlDsaKey_Free(key); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -55763,97 +55763,97 @@ static wc_test_ret_t test_dilithium_decode_level(const byte* rawKey, } /* Test Dilithium key decoding and security level detection */ -static wc_test_ret_t dilithium_decode_test(void) +static wc_test_ret_t mldsa_decode_test(void) { wc_test_ret_t ret; const byte* key; word32 keySz; -#if defined(WOLFSSL_DILITHIUM_PRIVATE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) +#if defined(WOLFSSL_MLDSA_PRIVATE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) const int isPrvKey = 0; #endif -#if defined(WOLFSSL_DILITHIUM_PUBLIC_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) +#if defined(WOLFSSL_MLDSA_PUBLIC_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) const int isPubKey = 1; #endif #ifndef WOLFSSL_NO_ML_DSA_44 -#if defined(WOLFSSL_DILITHIUM_PRIVATE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) +#if defined(WOLFSSL_MLDSA_PRIVATE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) /* Test ML-DSA-44 */ - key = bench_dilithium_level2_key; - keySz = sizeof_bench_dilithium_level2_key; - ret = test_dilithium_decode_level(key, keySz, WC_ML_DSA_44, isPrvKey); + key = bench_mldsa_44_key; + keySz = sizeof_bench_mldsa_44_key; + ret = test_mldsa_decode_level(key, keySz, WC_ML_DSA_44, isPrvKey); if (ret != 0) { return ret; } -#endif /* WOLFSSL_DILITHIUM_PRIVATE_KEY */ +#endif /* WOLFSSL_MLDSA_PRIVATE_KEY */ -#if defined(WOLFSSL_DILITHIUM_PUBLIC_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - key = bench_dilithium_level2_pubkey; - keySz = sizeof_bench_dilithium_level2_pubkey; - ret = test_dilithium_decode_level(key, keySz, WC_ML_DSA_44, isPubKey); +#if defined(WOLFSSL_MLDSA_PUBLIC_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) + key = bench_mldsa_44_pubkey; + keySz = sizeof_bench_mldsa_44_pubkey; + ret = test_mldsa_decode_level(key, keySz, WC_ML_DSA_44, isPubKey); if (ret != 0) { return ret; } -#endif /* WOLFSSL_DILITHIUM_PUBLIC_KEY */ +#endif /* WOLFSSL_MLDSA_PUBLIC_KEY */ #endif /* WOLFSSL_NO_ML_DSA_44 */ #ifndef WOLFSSL_NO_ML_DSA_65 -#if defined(WOLFSSL_DILITHIUM_PRIVATE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) +#if defined(WOLFSSL_MLDSA_PRIVATE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) /* Test ML-DSA-65 */ - key = bench_dilithium_level3_key; - keySz = sizeof_bench_dilithium_level3_key; - ret = test_dilithium_decode_level(key, keySz, WC_ML_DSA_65, isPrvKey); + key = bench_mldsa_65_key; + keySz = sizeof_bench_mldsa_65_key; + ret = test_mldsa_decode_level(key, keySz, WC_ML_DSA_65, isPrvKey); if (ret != 0) { return ret; } -#endif /* WOLFSSL_DILITHIUM_PRIVATE_KEY */ +#endif /* WOLFSSL_MLDSA_PRIVATE_KEY */ -#if defined(WOLFSSL_DILITHIUM_PUBLIC_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - key = bench_dilithium_level3_pubkey; - keySz = sizeof_bench_dilithium_level3_pubkey; - ret = test_dilithium_decode_level(key, keySz, WC_ML_DSA_65, isPubKey); +#if defined(WOLFSSL_MLDSA_PUBLIC_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) + key = bench_mldsa_65_pubkey; + keySz = sizeof_bench_mldsa_65_pubkey; + ret = test_mldsa_decode_level(key, keySz, WC_ML_DSA_65, isPubKey); if (ret != 0) { return ret; } -#endif /* WOLFSSL_DILITHIUM_PUBLIC_KEY */ +#endif /* WOLFSSL_MLDSA_PUBLIC_KEY */ #endif /* WOLFSSL_NO_ML_DSA_65 */ #ifndef WOLFSSL_NO_ML_DSA_87 -#if defined(WOLFSSL_DILITHIUM_PRIVATE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) +#if defined(WOLFSSL_MLDSA_PRIVATE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) /* Test ML-DSA-87 */ - key = bench_dilithium_level5_key; - keySz = sizeof_bench_dilithium_level5_key; - ret = test_dilithium_decode_level(key, keySz, WC_ML_DSA_87, isPrvKey); + key = bench_mldsa_87_key; + keySz = sizeof_bench_mldsa_87_key; + ret = test_mldsa_decode_level(key, keySz, WC_ML_DSA_87, isPrvKey); if (ret != 0) { return ret; } -#endif /* WOLFSSL_DILITHIUM_PRIVATE_KEY */ +#endif /* WOLFSSL_MLDSA_PRIVATE_KEY */ -#if defined(WOLFSSL_DILITHIUM_PUBLIC_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - key = bench_dilithium_level5_pubkey; - keySz = sizeof_bench_dilithium_level5_pubkey; - ret = test_dilithium_decode_level(key, keySz, WC_ML_DSA_87, isPubKey); +#if defined(WOLFSSL_MLDSA_PUBLIC_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) + key = bench_mldsa_87_pubkey; + keySz = sizeof_bench_mldsa_87_pubkey; + ret = test_mldsa_decode_level(key, keySz, WC_ML_DSA_87, isPubKey); if (ret != 0) { return ret; } -#endif /* WOLFSSL_DILITHIUM_PUBLIC_KEY */ +#endif /* WOLFSSL_MLDSA_PUBLIC_KEY */ #endif /* WOLFSSL_NO_ML_DSA_87 */ return ret; } -#endif /* (WOLFSSL_DILITHIUM_PUBLIC_KEY && !WOLFSSL_DILITHIUM_NO_VERIFY) || - * (WOLFSSL_DILITHIUM_PRIVATE_KEY && !WOLFSSL_DILITHIUM_NO_SIGN) */ +#endif /* (WOLFSSL_MLDSA_PUBLIC_KEY && !WOLFSSL_MLDSA_NO_VERIFY) || + * (WOLFSSL_MLDSA_PRIVATE_KEY && !WOLFSSL_MLDSA_NO_SIGN) */ -WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dilithium_test(void) +WOLFSSL_TEST_SUBROUTINE wc_test_ret_t mldsa_test(void) { wc_test_ret_t ret; WC_RNG rng; @@ -55869,85 +55869,85 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dilithium_test(void) } #ifndef WOLFSSL_NO_ML_DSA_44 -#ifndef WOLFSSL_DILITHIUM_NO_VERIFY - ret = dilithium_param_44_vfy_test(); +#ifndef WOLFSSL_MLDSA_NO_VERIFY + ret = mldsa_param_44_vfy_test(); if (ret != 0) ERROR_OUT(ret, out); #endif -#ifndef WOLFSSL_DILITHIUM_NO_MAKE_KEY - ret = dilithium_param_test(WC_ML_DSA_44, &rng); +#ifndef WOLFSSL_MLDSA_NO_MAKE_KEY + ret = mldsa_param_test(WC_ML_DSA_44, &rng); if (ret != 0) ERROR_OUT(ret, out); #endif #endif #ifndef WOLFSSL_NO_ML_DSA_65 -#ifndef WOLFSSL_DILITHIUM_NO_VERIFY - ret = dilithium_param_65_vfy_test(); +#ifndef WOLFSSL_MLDSA_NO_VERIFY + ret = mldsa_param_65_vfy_test(); if (ret != 0) ERROR_OUT(ret, out); #endif -#ifndef WOLFSSL_DILITHIUM_NO_MAKE_KEY - ret = dilithium_param_test(WC_ML_DSA_65, &rng); +#ifndef WOLFSSL_MLDSA_NO_MAKE_KEY + ret = mldsa_param_test(WC_ML_DSA_65, &rng); if (ret != 0) ERROR_OUT(ret, out); #endif #endif #ifndef WOLFSSL_NO_ML_DSA_87 -#ifndef WOLFSSL_DILITHIUM_NO_VERIFY - ret = dilithium_param_87_vfy_test(); +#ifndef WOLFSSL_MLDSA_NO_VERIFY + ret = mldsa_param_87_vfy_test(); if (ret != 0) ERROR_OUT(ret, out); #endif -#ifndef WOLFSSL_DILITHIUM_NO_MAKE_KEY - ret = dilithium_param_test(WC_ML_DSA_87, &rng); +#ifndef WOLFSSL_MLDSA_NO_MAKE_KEY + ret = mldsa_param_test(WC_ML_DSA_87, &rng); if (ret != 0) ERROR_OUT(ret, out); #endif #endif -#if defined(WC_DILITHIUM_CACHE_MATRIX_A) && \ - !defined(WC_DILITHIUM_FIXED_ARRAY) && \ - !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) +#if defined(WC_MLDSA_CACHE_MATRIX_A) && \ + !defined(WC_MLDSA_FIXED_ARRAY) && \ + !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) #ifndef WOLFSSL_NO_ML_DSA_44 - ret = dilithium_sign_cache_alloc_test(WC_ML_DSA_44, &rng); + ret = mldsa_sign_cache_alloc_test(WC_ML_DSA_44, &rng); if (ret != 0) ERROR_OUT(ret, out); #endif #ifndef WOLFSSL_NO_ML_DSA_65 - ret = dilithium_sign_cache_alloc_test(WC_ML_DSA_65, &rng); + ret = mldsa_sign_cache_alloc_test(WC_ML_DSA_65, &rng); if (ret != 0) ERROR_OUT(ret, out); #endif #ifndef WOLFSSL_NO_ML_DSA_87 - ret = dilithium_sign_cache_alloc_test(WC_ML_DSA_87, &rng); + ret = mldsa_sign_cache_alloc_test(WC_ML_DSA_87, &rng); if (ret != 0) ERROR_OUT(ret, out); #endif #endif -#if (defined(WOLFSSL_DILITHIUM_PRIVATE_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN)) || \ - (defined(WOLFSSL_DILITHIUM_PUBLIC_KEY) && \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY)) - ret = dilithium_decode_test(); +#if (defined(WOLFSSL_MLDSA_PRIVATE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_SIGN)) || \ + (defined(WOLFSSL_MLDSA_PUBLIC_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY)) + ret = mldsa_decode_test(); if (ret != 0) { ERROR_OUT(ret, out); } -#endif /* (WOLFSSL_DILITHIUM_PUBLIC_KEY && !WOLFSSL_DILITHIUM_NO_VERIFY) || - * (WOLFSSL_DILITHIUM_PRIVATE_KEY && !WOLFSSL_DILITHIUM_NO_SIGN) */ +#endif /* (WOLFSSL_MLDSA_PUBLIC_KEY && !WOLFSSL_MLDSA_NO_VERIFY) || + * (WOLFSSL_MLDSA_PRIVATE_KEY && !WOLFSSL_MLDSA_NO_SIGN) */ -#if !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) || \ - !defined(WOLFSSL_DILITHIUM_NO_VERIFY) || \ - defined(WOLFSSL_DILITHIUM_PRIVATE_KEY) || \ - defined(WOLFSSL_DILITHIUM_PUBLIC_KEY) +#if !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) || \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) || \ + defined(WOLFSSL_MLDSA_PRIVATE_KEY) || \ + defined(WOLFSSL_MLDSA_PUBLIC_KEY) out: #endif wc_FreeRng(&rng); return ret; } -#endif /* HAVE_DILITHIUM */ +#endif /* WOLFSSL_HAVE_MLDSA */ #if defined(WOLFSSL_HAVE_XMSS) && !defined(WOLFSSL_XMSS_VERIFY_ONLY) static enum wc_XmssRc xmss_write_key_mem(const byte * priv, word32 privSz, @@ -73047,14 +73047,14 @@ static int myCryptoDevCb(int devIdArg, wc_CryptoInfo* info, void* ctx) break; } #endif -#if defined(HAVE_DILITHIUM) || defined(WOLFSSL_HAVE_SLHDSA) +#if defined(WOLFSSL_HAVE_MLDSA) || defined(WOLFSSL_HAVE_SLHDSA) case WC_PK_TYPE_PQC_SIG_KEYGEN: { - #ifdef HAVE_DILITHIUM + #ifdef WOLFSSL_HAVE_MLDSA if (info->free.subType == WC_PQC_SIG_TYPE_MLDSA) { - dilithium_key* dil = (dilithium_key*)info->free.obj; + wc_MlDsaKey* dil = (wc_MlDsaKey*)info->free.obj; dil->devId = INVALID_DEVID; - wc_dilithium_free(dil); + wc_MlDsaKey_Free(dil); ret = 0; } #endif @@ -73729,9 +73729,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t cryptocb_test(void) if (ret == 0) ret = mlkem_test(); #endif -#ifdef HAVE_DILITHIUM +#ifdef WOLFSSL_HAVE_MLDSA if (ret == 0) - ret = dilithium_test(); + ret = mldsa_test(); #endif #ifdef WOLFSSL_HAVE_SLHDSA if (ret == 0) { diff --git a/wolfcrypt/test/test.h b/wolfcrypt/test/test.h index 9c1154fc2d..e54a7b9fad 100644 --- a/wolfcrypt/test/test.h +++ b/wolfcrypt/test/test.h @@ -307,8 +307,8 @@ extern WOLFSSL_TEST_SUBROUTINE wc_test_ret_t scrypt_test(void); #ifdef WOLFSSL_HAVE_MLKEM extern WOLFSSL_TEST_SUBROUTINE wc_test_ret_t mlkem_test(void); #endif -#ifdef HAVE_DILITHIUM - extern WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dilithium_test(void); +#ifdef WOLFSSL_HAVE_MLDSA + extern WOLFSSL_TEST_SUBROUTINE wc_test_ret_t mldsa_test(void); #endif #if defined(WOLFSSL_HAVE_XMSS) #if !defined(WOLFSSL_SMALL_STACK) && WOLFSSL_XMSS_MIN_HEIGHT <= 10 diff --git a/wolfssl/certs_test.h b/wolfssl/certs_test.h index b0cfe85f5c..b438a23edc 100644 --- a/wolfssl/certs_test.h +++ b/wolfssl/certs_test.h @@ -4108,1805 +4108,1792 @@ static const unsigned char bench_falcon_level5_key[] = #endif /* HAVE_FALCON */ #if defined(WOLFSSL_HAVE_MLDSA) + #ifndef WOLFSSL_MLDSA_NO_SIGN +/* ./certs/mldsa/bench_mldsa_44_key.der */ +static const unsigned char bench_mldsa_44_key[] = +{ + 0xEA, 0x05, 0x24, 0x0D, 0x80, 0x72, 0x25, 0x55, 0xF4, 0x5B, + 0xC2, 0x13, 0x8B, 0x87, 0x5D, 0x31, 0x99, 0x2F, 0x1D, 0xA9, + 0x41, 0x09, 0x05, 0x76, 0xA7, 0xB7, 0x5E, 0x8C, 0x44, 0xE2, + 0x64, 0x79, 0xD8, 0x79, 0x4C, 0xEE, 0x92, 0x2B, 0x37, 0xAB, + 0xB1, 0x16, 0x65, 0x72, 0xC3, 0x49, 0xC2, 0xEC, 0xFD, 0x9A, + 0xE6, 0x2D, 0x1E, 0x5B, 0xE3, 0x04, 0x96, 0x16, 0xAD, 0x97, + 0x5D, 0xAC, 0xF2, 0xCC, 0x62, 0x2E, 0x34, 0x5D, 0x67, 0x19, + 0x47, 0xEE, 0x0F, 0x8B, 0x97, 0x60, 0xB4, 0x0B, 0xEB, 0x6A, + 0x7A, 0x75, 0x14, 0x27, 0x00, 0x39, 0xD6, 0x60, 0xCE, 0x39, + 0x6E, 0x69, 0x46, 0xE1, 0x0D, 0xF9, 0xA6, 0xFA, 0x8C, 0xCF, + 0x65, 0x50, 0x59, 0x1D, 0xB0, 0x26, 0xC2, 0xE2, 0xF1, 0xB9, + 0xCD, 0x09, 0x60, 0xCC, 0xBB, 0x57, 0xD6, 0xAC, 0xCC, 0xF9, + 0x58, 0x73, 0xA8, 0x81, 0x61, 0x2F, 0xD2, 0xA4, 0x5B, 0x98, + 0x0D, 0x12, 0x88, 0x51, 0x63, 0x38, 0x6E, 0xA2, 0x46, 0x64, + 0x52, 0xC0, 0x71, 0xC1, 0x42, 0x68, 0xD8, 0x42, 0x32, 0x5C, + 0xB4, 0x44, 0x08, 0x95, 0x48, 0xA2, 0x46, 0x6C, 0x0B, 0x10, + 0x09, 0xC8, 0x24, 0x4D, 0x18, 0x37, 0x4C, 0x4C, 0x82, 0x05, + 0x02, 0x22, 0x10, 0x4A, 0x86, 0x30, 0x03, 0x03, 0x11, 0x44, + 0x22, 0x62, 0x01, 0xA9, 0x51, 0x13, 0x02, 0x2C, 0x19, 0x85, + 0x65, 0x51, 0x14, 0x01, 0x9C, 0xB2, 0x81, 0x0A, 0x49, 0x52, + 0xA2, 0xB2, 0x4C, 0x98, 0x34, 0x01, 0x0A, 0x07, 0x06, 0x58, + 0xB2, 0x69, 0x51, 0x24, 0x2D, 0x59, 0x12, 0x52, 0xE0, 0xB4, + 0x04, 0x14, 0x40, 0x29, 0xA2, 0xB0, 0x31, 0x54, 0xC0, 0x40, + 0x63, 0x00, 0x69, 0x18, 0x47, 0x85, 0xC8, 0x30, 0x81, 0x0B, + 0x15, 0x0A, 0xD8, 0xA0, 0x0C, 0x5C, 0x20, 0x4A, 0x11, 0x38, + 0x64, 0x04, 0x94, 0x84, 0xD3, 0x24, 0x72, 0x58, 0x38, 0x28, + 0x18, 0x37, 0x6D, 0x94, 0xC0, 0x4D, 0xA0, 0xA6, 0x0C, 0x9A, + 0x82, 0x31, 0xC2, 0x40, 0x48, 0xDA, 0x46, 0x85, 0x03, 0x00, + 0x05, 0xD8, 0x02, 0x4D, 0x0B, 0x85, 0x40, 0xE2, 0x32, 0x86, + 0x4C, 0xA0, 0x65, 0x8A, 0x36, 0x65, 0x42, 0x18, 0x6E, 0x60, + 0x36, 0x0D, 0x40, 0xC0, 0x01, 0x5A, 0x44, 0x42, 0xC4, 0xA4, + 0x0D, 0xD4, 0x88, 0x8D, 0x88, 0x22, 0x52, 0x00, 0xC0, 0x0C, + 0x5B, 0x36, 0x90, 0x09, 0x20, 0x22, 0x08, 0x03, 0x12, 0x90, + 0x12, 0x42, 0x04, 0x20, 0x29, 0x8C, 0x48, 0x6D, 0x20, 0x32, + 0x08, 0x94, 0x88, 0x6C, 0x10, 0x87, 0x21, 0xC1, 0x44, 0x02, + 0x52, 0x40, 0x12, 0xDB, 0xC8, 0x24, 0x14, 0x09, 0x2C, 0x93, + 0x40, 0x09, 0x64, 0xC8, 0x4C, 0x08, 0x48, 0x70, 0xA1, 0x10, + 0x81, 0x4A, 0x80, 0x8C, 0x20, 0x03, 0x31, 0x18, 0xB3, 0x80, + 0xD3, 0x82, 0x25, 0x4C, 0x94, 0x8C, 0x1C, 0x93, 0x89, 0x1A, + 0x91, 0x51, 0xD1, 0xB6, 0x68, 0x43, 0x14, 0x25, 0x84, 0x48, + 0x61, 0x82, 0x40, 0x24, 0xDB, 0x22, 0x4D, 0x63, 0x16, 0x66, + 0x62, 0x90, 0x50, 0xA1, 0x18, 0x86, 0x49, 0x28, 0x25, 0xA0, + 0x10, 0x68, 0x8C, 0x04, 0x00, 0x08, 0x32, 0x4E, 0x22, 0x43, + 0x31, 0x42, 0x96, 0x28, 0x11, 0x23, 0x89, 0xD2, 0xC4, 0x6D, + 0x11, 0x82, 0x8D, 0x8A, 0xA8, 0x90, 0xD2, 0x06, 0x29, 0x80, + 0x82, 0x89, 0x00, 0xA8, 0x41, 0x00, 0x13, 0x6A, 0x12, 0xA8, + 0x04, 0x83, 0xC2, 0x51, 0x13, 0x09, 0x08, 0x62, 0xB4, 0x8D, + 0x94, 0xC2, 0x44, 0x5A, 0xB4, 0x08, 0x0A, 0x10, 0x48, 0xA1, + 0x28, 0x20, 0x1B, 0xB7, 0x64, 0x60, 0x24, 0x25, 0x48, 0xC0, + 0x00, 0x0A, 0x10, 0x09, 0x64, 0xB8, 0x88, 0xCB, 0x44, 0x64, + 0x54, 0x90, 0x05, 0xD2, 0xB8, 0x21, 0x49, 0x28, 0x28, 0x49, + 0x42, 0x0D, 0x63, 0xA0, 0x65, 0xCB, 0x90, 0x30, 0x51, 0x82, + 0x8D, 0x5C, 0xC6, 0x0C, 0x51, 0x06, 0x6A, 0x1A, 0x27, 0x22, + 0x01, 0xA8, 0x24, 0x61, 0xB2, 0x84, 0x23, 0x40, 0x86, 0xA3, + 0xB4, 0x48, 0x19, 0x28, 0x0C, 0x14, 0x06, 0x2E, 0xE2, 0x02, + 0x0D, 0xC4, 0x90, 0x09, 0x08, 0x06, 0x66, 0x9B, 0xC8, 0x10, + 0x5C, 0x46, 0x21, 0xCA, 0xA8, 0x30, 0x83, 0x20, 0x89, 0x03, + 0x83, 0x6C, 0xA1, 0x46, 0x8C, 0x90, 0x14, 0x4C, 0x99, 0x02, + 0x81, 0x53, 0x02, 0x10, 0x8B, 0x48, 0x91, 0xE4, 0x40, 0x4A, + 0x22, 0xB1, 0x88, 0xC1, 0x06, 0x0E, 0xC3, 0xA8, 0x08, 0xC8, + 0x46, 0x92, 0x03, 0xB5, 0x4C, 0x23, 0x03, 0x0C, 0xA4, 0x06, + 0x2E, 0xDC, 0x92, 0x81, 0x0C, 0x45, 0x22, 0x40, 0x34, 0x91, + 0x90, 0x96, 0x48, 0x81, 0x82, 0x31, 0xCB, 0x16, 0x72, 0x49, + 0xC8, 0x29, 0x44, 0x86, 0x90, 0x60, 0x22, 0x4E, 0x42, 0x42, + 0x09, 0x4B, 0x82, 0x20, 0x0A, 0xB2, 0x64, 0x20, 0x86, 0x70, + 0x1A, 0xC0, 0x00, 0x1C, 0x41, 0x49, 0x89, 0x84, 0x05, 0x0C, + 0x36, 0x49, 0x19, 0x99, 0x6D, 0x00, 0x08, 0x50, 0x23, 0x96, + 0x6C, 0xE0, 0x44, 0x08, 0x98, 0x24, 0x2C, 0x0A, 0x23, 0x20, + 0x12, 0x04, 0x31, 0xC9, 0x06, 0x32, 0x14, 0x01, 0x41, 0x08, + 0x37, 0x08, 0x58, 0x00, 0x0C, 0x19, 0x04, 0x29, 0x90, 0x18, + 0x05, 0xE1, 0x88, 0x44, 0xC2, 0x20, 0x6C, 0xD1, 0x46, 0x64, + 0xD9, 0x26, 0x62, 0x09, 0x88, 0x68, 0x02, 0x29, 0x29, 0xE1, + 0x18, 0x65, 0x98, 0x04, 0x24, 0xE4, 0x34, 0x0C, 0x12, 0x85, + 0x2D, 0x20, 0x14, 0x06, 0x24, 0x15, 0x82, 0x89, 0x08, 0x91, + 0x60, 0x84, 0x28, 0x24, 0x34, 0x41, 0x1B, 0x49, 0x22, 0xD3, + 0x96, 0x64, 0x1B, 0x86, 0x4C, 0x0C, 0xB9, 0x20, 0x20, 0x39, + 0x04, 0x04, 0x34, 0x6D, 0xC1, 0x28, 0x32, 0x08, 0x14, 0x44, + 0x81, 0x18, 0x2E, 0xDA, 0x38, 0x41, 0x63, 0x18, 0x26, 0xD8, + 0x48, 0x26, 0x12, 0x20, 0x21, 0x09, 0xC5, 0x25, 0x92, 0x42, + 0x0C, 0x88, 0x04, 0x64, 0x11, 0x43, 0x8A, 0x19, 0x92, 0x60, + 0x5C, 0xC6, 0x31, 0xA1, 0x24, 0x6A, 0xD8, 0xB6, 0x49, 0x1B, + 0x81, 0x90, 0xE2, 0x32, 0x4E, 0x62, 0x44, 0x21, 0x80, 0xB8, + 0x10, 0x4B, 0x90, 0x49, 0x5C, 0x06, 0x09, 0x48, 0x20, 0x49, + 0xA2, 0x92, 0x71, 0x5C, 0x48, 0x02, 0xC8, 0x08, 0x81, 0xA4, + 0x32, 0x66, 0xC9, 0x30, 0x11, 0xCA, 0x92, 0x91, 0xC0, 0x00, + 0x41, 0x44, 0x98, 0x4D, 0x98, 0x12, 0x4E, 0x92, 0x46, 0x8E, + 0x49, 0xB8, 0x64, 0xDC, 0x18, 0x50, 0x51, 0xB4, 0x48, 0x08, + 0x47, 0x24, 0x08, 0x46, 0x32, 0x1B, 0x23, 0x00, 0x09, 0xB8, + 0x04, 0x0A, 0x44, 0x0C, 0x0B, 0xC7, 0x8D, 0x19, 0xA4, 0x09, + 0x11, 0x30, 0x41, 0xE3, 0x24, 0x45, 0x89, 0x1F, 0x65, 0x54, + 0xF6, 0x38, 0x04, 0x37, 0xCC, 0x89, 0xC3, 0xC5, 0xDC, 0x43, + 0xD9, 0x13, 0x56, 0x06, 0x05, 0x50, 0x29, 0x4E, 0x0F, 0xA5, + 0x5C, 0x5D, 0xD7, 0x82, 0xA1, 0x63, 0x59, 0x0D, 0x3E, 0x5B, + 0x00, 0xE6, 0x0E, 0xD8, 0x1C, 0xC7, 0xAF, 0xC0, 0x48, 0xB6, + 0x07, 0x5C, 0x65, 0x00, 0x89, 0xB3, 0x09, 0xBC, 0x4A, 0xAA, + 0xA6, 0x72, 0xBE, 0x6B, 0x9A, 0xB3, 0x5B, 0x27, 0x82, 0x65, + 0x9B, 0xC9, 0x6F, 0x19, 0x88, 0x94, 0x0B, 0x37, 0x44, 0x2F, + 0xE3, 0x9A, 0x02, 0xDA, 0xFF, 0x11, 0xB0, 0x48, 0x89, 0x70, + 0x8C, 0x84, 0xC2, 0xC0, 0x31, 0x4A, 0xAD, 0x70, 0xE1, 0xA7, + 0x15, 0xFD, 0xB2, 0x6D, 0x93, 0xDA, 0x17, 0x68, 0xC4, 0xE3, + 0xFD, 0x2C, 0x08, 0x15, 0xB9, 0xA4, 0xC5, 0x1B, 0x97, 0xC9, + 0xA3, 0xAF, 0x0D, 0x21, 0x06, 0x3D, 0xF1, 0x05, 0xD4, 0x35, + 0x80, 0x2E, 0x23, 0x99, 0xBD, 0x3A, 0x1A, 0x6C, 0xAD, 0xBF, + 0x56, 0xB5, 0xD3, 0x95, 0x1B, 0x30, 0x4D, 0x56, 0xC1, 0x77, + 0xE6, 0xD6, 0xAB, 0x94, 0x46, 0x68, 0xD7, 0xB8, 0xE4, 0x9D, + 0xB2, 0x8D, 0xC4, 0xD1, 0xC8, 0x92, 0xBE, 0x5D, 0x1F, 0x58, + 0x55, 0x7F, 0x11, 0x55, 0xC5, 0x2E, 0xC3, 0x9E, 0x2A, 0x29, + 0x51, 0xE8, 0x75, 0x49, 0xA7, 0xA3, 0xDA, 0x0B, 0xCF, 0xF8, + 0x3F, 0x78, 0xAC, 0x4C, 0x4E, 0x78, 0x6F, 0x0E, 0x67, 0xAD, + 0x94, 0x59, 0x20, 0x5E, 0x37, 0x18, 0xB9, 0x09, 0x87, 0xDB, + 0xDD, 0xF0, 0xC2, 0x4D, 0x03, 0xCC, 0x98, 0x22, 0x4B, 0xE5, + 0x7D, 0x8E, 0x74, 0x7E, 0xA9, 0x1B, 0xEB, 0x7A, 0xAE, 0xAF, + 0x2E, 0x7C, 0x3C, 0xC0, 0x1A, 0x30, 0x40, 0x0D, 0x79, 0x86, + 0x53, 0xCC, 0x0B, 0x2B, 0xBE, 0xA5, 0x72, 0x3B, 0xBB, 0x53, + 0x9E, 0xD5, 0xC2, 0x23, 0x1D, 0x35, 0xCD, 0x22, 0x12, 0xED, + 0x9A, 0xEE, 0xC8, 0xF9, 0x05, 0x27, 0xDB, 0x46, 0x56, 0xCC, + 0x24, 0x4D, 0xEE, 0xAF, 0xAB, 0xA9, 0x78, 0x75, 0x75, 0xB9, + 0xD1, 0xFD, 0x39, 0x3A, 0xB2, 0xA2, 0xEB, 0x87, 0x76, 0xB2, + 0x19, 0x47, 0x88, 0xAB, 0x42, 0x85, 0x4B, 0xD9, 0x76, 0x22, + 0x68, 0x4B, 0xC9, 0x88, 0x38, 0x28, 0x0A, 0x34, 0x5D, 0x12, + 0x4F, 0xF5, 0x43, 0x64, 0x44, 0x8C, 0x3C, 0xC2, 0x99, 0x91, + 0x4E, 0xFD, 0xFD, 0x9C, 0x73, 0xBF, 0x85, 0xF9, 0x9F, 0xE1, + 0x53, 0x19, 0xC8, 0x19, 0xCB, 0x7C, 0xDB, 0x9A, 0x3A, 0x2C, + 0x34, 0x55, 0x8C, 0x64, 0x6F, 0xC5, 0xB7, 0x93, 0x53, 0xB4, + 0x97, 0x7E, 0xC2, 0xF8, 0x7E, 0x8D, 0x44, 0x10, 0xCA, 0x49, + 0xF5, 0x5C, 0xE8, 0xCE, 0xC4, 0xCC, 0x42, 0xF0, 0x85, 0xF1, + 0xF2, 0x10, 0xA7, 0x0B, 0x37, 0x6A, 0x8E, 0x50, 0x96, 0x96, + 0x9D, 0xD9, 0x8F, 0x54, 0x45, 0x56, 0xF8, 0x64, 0x88, 0xAB, + 0x51, 0x4F, 0x9F, 0x61, 0xD9, 0x12, 0x87, 0xAC, 0x1D, 0xC1, + 0x23, 0xEA, 0xB3, 0x5D, 0xA4, 0x6D, 0xFA, 0x58, 0x92, 0x8F, + 0x77, 0x78, 0x61, 0xE5, 0xE4, 0x33, 0xDB, 0x10, 0x2D, 0xDD, + 0xB6, 0xD7, 0xB4, 0xD0, 0x8D, 0xD1, 0xA8, 0x0B, 0x94, 0xDF, + 0xCF, 0xD7, 0xAC, 0xDF, 0x47, 0x0B, 0x38, 0xE0, 0xA5, 0xF8, + 0xC3, 0xD2, 0xC3, 0xFB, 0x0F, 0x98, 0x00, 0x2B, 0x17, 0x3C, + 0x44, 0x70, 0x36, 0x47, 0x27, 0x89, 0x41, 0xCB, 0x87, 0x5A, + 0xA4, 0x2C, 0x57, 0x6D, 0x8C, 0xCB, 0xC0, 0x7D, 0x6B, 0xF5, + 0xA1, 0x17, 0x39, 0x4A, 0xB5, 0xAC, 0xC6, 0x41, 0x90, 0x66, + 0x85, 0xC4, 0x4B, 0x18, 0xC6, 0xE6, 0x09, 0x6D, 0x6E, 0xBB, + 0x7F, 0x72, 0x96, 0xD3, 0x21, 0x5A, 0x96, 0xAF, 0x9E, 0xB6, + 0x0B, 0x3F, 0xE8, 0x83, 0xE5, 0x53, 0x11, 0x81, 0xC6, 0xAB, + 0x40, 0xA9, 0x09, 0xB6, 0x74, 0x5E, 0xE1, 0xC3, 0x82, 0x1E, + 0xDA, 0x2F, 0x24, 0xE0, 0x94, 0x8F, 0x07, 0xB7, 0x9B, 0xC6, + 0x50, 0xEF, 0x3A, 0x79, 0x89, 0x4D, 0x6F, 0x16, 0x33, 0x04, + 0x24, 0x7E, 0x4A, 0xAB, 0x5D, 0x03, 0x29, 0xAD, 0xBA, 0xA3, + 0x6C, 0xE2, 0x05, 0xAB, 0x4D, 0x69, 0xB6, 0x61, 0x39, 0x9D, + 0xC3, 0x53, 0x11, 0xC0, 0xE3, 0xAA, 0x2E, 0xDC, 0x74, 0x09, + 0xBD, 0x19, 0xB5, 0xBB, 0x51, 0x1E, 0x77, 0x3E, 0xCE, 0x64, + 0x13, 0xEB, 0x74, 0x03, 0xB7, 0x49, 0x99, 0xB0, 0x71, 0x99, + 0xE6, 0x17, 0x3C, 0x80, 0xE6, 0xB5, 0x51, 0xE9, 0xB3, 0xE4, + 0x2B, 0xAA, 0x52, 0x15, 0x99, 0x4E, 0x46, 0x6D, 0x67, 0x8E, + 0x79, 0xC4, 0x3C, 0xA6, 0xDC, 0x8F, 0xED, 0x87, 0xB9, 0x68, + 0x6D, 0xDC, 0x19, 0xA1, 0x52, 0x37, 0x06, 0x76, 0xAD, 0xE9, + 0x61, 0x5C, 0x82, 0x16, 0x81, 0xAF, 0x3A, 0x89, 0xBF, 0x72, + 0xB0, 0xC7, 0x88, 0x3C, 0x58, 0xFE, 0xE4, 0xA5, 0x41, 0x50, + 0xFC, 0x8A, 0x15, 0xB0, 0x78, 0xD4, 0x77, 0x06, 0x4B, 0xC4, + 0x21, 0x7F, 0xAA, 0x2B, 0x88, 0x7F, 0x8C, 0x3B, 0x9B, 0xBB, + 0x2E, 0x41, 0xCF, 0x9B, 0x06, 0xD3, 0x4D, 0xCF, 0xB2, 0x9C, + 0x91, 0x46, 0x35, 0x3A, 0x5A, 0x0B, 0xE4, 0xAC, 0x96, 0x7C, + 0xE0, 0xD4, 0x34, 0xE5, 0xAB, 0xAE, 0xA7, 0x67, 0xBF, 0x4D, + 0xAB, 0x48, 0xFD, 0xCB, 0x3F, 0x5C, 0xDE, 0x3F, 0x83, 0xCC, + 0x52, 0x0F, 0xDD, 0x7F, 0x20, 0x25, 0xED, 0xEE, 0xD0, 0x14, + 0x38, 0xF7, 0x33, 0x4C, 0x3C, 0x5E, 0x23, 0x80, 0xA3, 0x0A, + 0xE8, 0xB0, 0xEF, 0x5B, 0xCA, 0xC9, 0x97, 0x13, 0x98, 0xFE, + 0x91, 0x62, 0x14, 0xA8, 0x64, 0xF6, 0x20, 0xC9, 0xC9, 0x6F, + 0x8B, 0xC0, 0xEC, 0x39, 0x15, 0xA7, 0x59, 0x62, 0x68, 0x21, + 0xE1, 0x5F, 0xF6, 0xA1, 0x76, 0xB0, 0xCA, 0x1B, 0x2A, 0x71, + 0xE3, 0x1A, 0x24, 0x91, 0x1F, 0x3A, 0xBB, 0xF1, 0xC9, 0x09, + 0x42, 0x48, 0x7E, 0x19, 0x1B, 0xF1, 0xF0, 0x13, 0x33, 0xF1, + 0x62, 0x31, 0x00, 0x97, 0x73, 0x9B, 0x3C, 0x26, 0xF8, 0x42, + 0xD0, 0xD4, 0x41, 0x1B, 0x9F, 0x7E, 0x43, 0x4B, 0x0B, 0x08, + 0xD7, 0xA0, 0xA8, 0x32, 0x34, 0x0A, 0xC9, 0xEF, 0xB8, 0xEB, + 0xE7, 0x64, 0x3B, 0x40, 0x88, 0xE0, 0x60, 0x59, 0x07, 0xEF, + 0xB9, 0x5F, 0x71, 0x92, 0x90, 0xA4, 0x5F, 0x34, 0x38, 0x93, + 0x92, 0x43, 0x87, 0xAF, 0xDD, 0x87, 0x63, 0x8C, 0x1D, 0xE5, + 0x86, 0x9E, 0xE6, 0xDE, 0x94, 0xDD, 0x33, 0x5D, 0x95, 0x64, + 0xD8, 0xC4, 0x8A, 0x3C, 0xE7, 0x4B, 0xD6, 0x3F, 0xC5, 0x69, + 0x6A, 0xA8, 0x7F, 0x0F, 0x93, 0x77, 0x02, 0x46, 0x66, 0xA5, + 0xA0, 0x60, 0x8B, 0xEC, 0xB1, 0xA2, 0xFC, 0x2A, 0x09, 0xB8, + 0x08, 0x1C, 0x05, 0x6B, 0x78, 0xB7, 0x7A, 0xE5, 0x60, 0xA4, + 0xAF, 0x3A, 0x9D, 0xAA, 0xF5, 0x22, 0x9B, 0x5E, 0xEF, 0xC3, + 0x46, 0xED, 0x67, 0xD0, 0x8B, 0xDA, 0xB4, 0xA3, 0x34, 0x32, + 0x20, 0x9D, 0x88, 0x7E, 0x43, 0x42, 0x6F, 0x02, 0xF8, 0x48, + 0x9B, 0xC5, 0x02, 0xAD, 0xAA, 0xA9, 0xEE, 0x19, 0x1B, 0xDE, + 0x02, 0x83, 0x81, 0x10, 0xA6, 0x79, 0x4E, 0xAD, 0x15, 0xF7, + 0x3E, 0x4E, 0x1E, 0x72, 0xFE, 0x52, 0x49, 0x24, 0xCE, 0x82, + 0x31, 0x59, 0x72, 0xAE, 0xD5, 0x34, 0x50, 0x87, 0x8B, 0xE3, + 0x8E, 0xEC, 0x61, 0x35, 0x13, 0x57, 0xB1, 0xE6, 0xAC, 0xFB, + 0x16, 0xC3, 0x1A, 0x98, 0x92, 0xCB, 0xCD, 0xC9, 0xF7, 0x10, + 0x6A, 0x43, 0x96, 0x33, 0x2D, 0x6F, 0x6C, 0x76, 0xB0, 0xF6, + 0x48, 0x4C, 0xAE, 0x13, 0x67, 0x5D, 0x42, 0x01, 0x8E, 0x54, + 0x51, 0xCC, 0x65, 0xF1, 0x95, 0x11, 0x3C, 0x96, 0x2A, 0x5A, + 0x42, 0x3D, 0x9B, 0xBB, 0xB7, 0x7B, 0x28, 0x96, 0x09, 0xBB, + 0xED, 0x2D, 0xBC, 0xB7, 0x90, 0x62, 0xD3, 0xBE, 0xBD, 0xAE, + 0x50, 0x15, 0x96, 0xC1, 0x03, 0x91, 0x14, 0x34, 0x4F, 0x21, + 0xA5, 0x6E, 0x78, 0x4A, 0x5D, 0x8B, 0xCF, 0x5B, 0x1A, 0x8A, + 0x57, 0x43, 0xB8, 0x25, 0xD3, 0xA2, 0xCD, 0x78, 0xB4, 0x93, + 0x07, 0x7A, 0x14, 0xC1, 0x0C, 0x6F, 0x5F, 0x5E, 0xCB, 0x11, + 0x17, 0x81, 0x0D, 0x7D, 0x0F, 0xDA, 0xD1, 0x92, 0x43, 0x56, + 0xAF, 0x75, 0x53, 0x44, 0x1F, 0xC7, 0x9C, 0xD3, 0xC5, 0x47, + 0xE0, 0xAC, 0x4A, 0x11, 0xE4, 0xFE, 0x6C, 0x80, 0x79, 0xCC, + 0x60, 0x7A, 0xD9, 0x56, 0x65, 0x83, 0x5E, 0xCF, 0x37, 0x27, + 0x55, 0xE2, 0x4D, 0xF9, 0xD6, 0x09, 0x2D, 0xEE, 0xDA, 0x10, + 0x6B, 0xDC, 0xD2, 0x70, 0x46, 0x94, 0xAA, 0xF5, 0x21, 0xC5, + 0xF0, 0x79, 0xDB, 0x9B, 0x8E, 0x9A, 0xDB, 0x5A, 0x56, 0x41, + 0x43, 0xE7, 0x1F, 0x8D, 0xFD, 0xDA, 0x12, 0x5F, 0xF7, 0x9E, + 0x47, 0x1A, 0xF7, 0x73, 0x40, 0x67, 0xC2, 0x61, 0x07, 0x33, + 0x16, 0x78, 0x60, 0x05, 0x85, 0x5C, 0x2F, 0x2B, 0xBF, 0x2C, + 0x7A, 0x39, 0xC6, 0xED, 0xCB, 0x43, 0x66, 0x27, 0x93, 0xCD, + 0x92, 0x8D, 0x62, 0x8C, 0xAA, 0x61, 0x1C, 0x9C, 0x4C, 0x90, + 0xBA, 0xBA, 0x4B, 0xC1, 0xF1, 0x22, 0xDE, 0xE0, 0xF9, 0x3E, + 0x04, 0xB9, 0x56, 0xA3, 0x1C, 0xE8, 0xDA, 0xD6, 0x09, 0x4A, + 0x7D, 0x89, 0xBC, 0xF4, 0xE8, 0x4D, 0xA1, 0xE8, 0x34, 0x90, + 0xA5, 0x31, 0x3A, 0xEC, 0x56, 0xC5, 0xD2, 0x92, 0x0B, 0xE9, + 0x58, 0xBB, 0xB2, 0x84, 0x9B, 0xA9, 0x1D, 0x19, 0xDB, 0x7A, + 0x02, 0x75, 0x79, 0x16, 0x35, 0xEE, 0x3A, 0x3F, 0x4E, 0x5E, + 0x11, 0x90, 0x04, 0x03, 0xCE, 0x8B, 0xA0, 0xD8, 0xC1, 0xEE, + 0x52, 0x33, 0x6E, 0xD2, 0x6E, 0x06, 0x5C, 0x99, 0x24, 0x6F, + 0x16, 0xD9, 0x90, 0x28, 0xE5, 0x2D, 0x91, 0x6F, 0x1A, 0x57, + 0xF0, 0x4C, 0x7C, 0x3F, 0x7B, 0xD7, 0x30, 0xED, 0x6D, 0x21, + 0xB7, 0xF8, 0xED, 0xF3, 0x34, 0x89, 0xFA, 0xF0, 0x51, 0x6F, + 0x99, 0xA0, 0x5E, 0xF8, 0x74, 0xC7, 0x4F, 0xB5, 0x59, 0x52, + 0xBE, 0x45, 0xAC, 0x3F, 0x34, 0x51, 0x87, 0x6E, 0x84, 0xEA, + 0xB0, 0x40, 0xE1, 0x84, 0x16, 0x66, 0x30, 0xF1, 0x5C, 0xB2, + 0x74, 0x25, 0x03, 0xE3, 0x2E, 0x82, 0xC5, 0x60, 0x9D, 0xE4, + 0xCA, 0xEC, 0x49, 0x6B, 0x4E, 0x5A, 0x09, 0xA8, 0xFE, 0xFF, + 0x1D, 0xA1, 0xE8, 0xEC, 0x9A, 0x22, 0x3B, 0xD6, 0x72, 0x93, + 0x6F, 0x6B, 0x5A, 0xFB, 0x2D, 0x5A, 0xDE, 0x01, 0x3E, 0xF6, + 0xDC, 0x77, 0x55, 0x1E, 0x32, 0x19, 0xC8, 0xA1, 0xBB, 0xCF, + 0xCB, 0x41, 0x54, 0xA2, 0xCB, 0xE6, 0x61, 0xCA, 0x43, 0x63, + 0xD2, 0x2C, 0xAE, 0xF4, 0xD9, 0x49, 0xB1, 0x75, 0x1A, 0x06, + 0x92, 0x13, 0x90, 0x57, 0x89, 0x8E, 0x9F, 0x26, 0xC5, 0x14, + 0xD8, 0xC7, 0x93, 0xB2, 0xAA, 0x3A, 0x9C, 0x10, 0xD5, 0x68, + 0x52, 0x28, 0x39, 0xEE, 0x30, 0xDC, 0x00, 0x4B, 0x65, 0x72, + 0x59, 0x98, 0xAD, 0x2E, 0x8C, 0xAF, 0x4E, 0x79, 0x0A, 0x8C, + 0x0C, 0x9D, 0xB6, 0x43, 0x26, 0x83, 0x71, 0x7B, 0x1E, 0x86, + 0x4D, 0x33, 0xD7, 0x20, 0x29, 0x6A, 0xBF, 0x2F, 0x8E, 0x4B, + 0x13, 0x35, 0x65, 0xC8, 0xEC, 0xE3, 0x2C, 0xDE, 0xFB, 0x30, + 0x57, 0xA9, 0x92, 0x22, 0x5D, 0x79, 0x16, 0x07, 0x73, 0x9B, + 0xE2, 0x6E, 0xD4, 0x99, 0xB4, 0x35, 0xFD, 0xA2, 0xB5, 0xD9, + 0xE5, 0x74, 0xD1, 0xB2, 0xCF, 0x32, 0xF1, 0x19, 0x69, 0xCF, + 0x1E, 0x10, 0xCC, 0x3C, 0xAF, 0xBE, 0xA4, 0x33, 0x11, 0x83, + 0x64, 0xC0, 0x39, 0xE5, 0xB0, 0x8F, 0x32, 0xF4, 0x01, 0x6A, + 0x2A, 0x11, 0x8E, 0xDD, 0x03, 0x81, 0x39, 0xE7, 0x70, 0x16, + 0x2F, 0x0E, 0x24, 0xA9, 0x12, 0x0B, 0xDB, 0xA8, 0x6C, 0xB3, + 0xF3, 0x74, 0x95, 0xCA, 0x64, 0x1D, 0xEE, 0x25, 0xC5, 0x27, + 0xED, 0x0F, 0x82, 0xB5, 0x7A, 0x62, 0x27, 0xB2, 0x87, 0x53, + 0x11, 0x39, 0x5E, 0xB8, 0x11, 0xCA, 0x25, 0xE8, 0x17, 0x46, + 0xD3, 0x0F, 0x5D, 0x70, 0x68, 0xE1, 0x5F, 0xD1, 0xAB, 0x65, + 0xE5, 0x42, 0x87, 0x1E, 0x96, 0xAF, 0x13, 0x0C, 0x9B, 0x15, + 0x75, 0x14, 0x31, 0x75, 0xCC, 0x15, 0xBF, 0x2C, 0x74, 0xAB, + 0xC9, 0x9C, 0xDA, 0x62, 0x1D, 0xEB, 0x19, 0x81, 0x67, 0x5E, + 0xCD, 0x54, 0x87, 0x07, 0x67, 0xBA, 0xE3, 0xF6, 0x03, 0xBE, + 0x6D, 0x64, 0x2D, 0xBC, 0xEC, 0x54, 0x13, 0x12, 0x5B, 0x44, + 0x90, 0x95, 0x86, 0x77, 0x8C, 0x59, 0xBD, 0x8E, 0xBA, 0xB1, + 0x12, 0xEA, 0xC1, 0x94, 0x37, 0xA0, 0x11, 0xFF, 0xB2, 0xA4, + 0xC3, 0x61, 0xF2, 0xA3, 0x49, 0xBE, 0xE7, 0xB6, 0x96, 0x2F -/* raw private key without ASN1 syntax from - * ./certs/dilithium/bench_dilithium_level2_key.der */ -static const unsigned char bench_dilithium_level2_key[] = { - 0xea, 0x05, 0x24, 0x0d, 0x80, 0x72, 0x25, 0x55, 0xf4, 0x5b, - 0xc2, 0x13, 0x8b, 0x87, 0x5d, 0x31, 0x99, 0x2f, 0x1d, 0xa9, - 0x41, 0x09, 0x05, 0x76, 0xa7, 0xb7, 0x5e, 0x8c, 0x44, 0xe2, - 0x64, 0x79, 0xd8, 0x79, 0x4c, 0xee, 0x92, 0x2b, 0x37, 0xab, - 0xb1, 0x16, 0x65, 0x72, 0xc3, 0x49, 0xc2, 0xec, 0xfd, 0x9a, - 0xe6, 0x2d, 0x1e, 0x5b, 0xe3, 0x04, 0x96, 0x16, 0xad, 0x97, - 0x5d, 0xac, 0xf2, 0xcc, 0x62, 0x2e, 0x34, 0x5d, 0x67, 0x19, - 0x47, 0xee, 0x0f, 0x8b, 0x97, 0x60, 0xb4, 0x0b, 0xeb, 0x6a, - 0x7a, 0x75, 0x14, 0x27, 0x00, 0x39, 0xd6, 0x60, 0xce, 0x39, - 0x6e, 0x69, 0x46, 0xe1, 0x0d, 0xf9, 0xa6, 0xfa, 0x8c, 0xcf, - 0x65, 0x50, 0x59, 0x1d, 0xb0, 0x26, 0xc2, 0xe2, 0xf1, 0xb9, - 0xcd, 0x09, 0x60, 0xcc, 0xbb, 0x57, 0xd6, 0xac, 0xcc, 0xf9, - 0x58, 0x73, 0xa8, 0x81, 0x61, 0x2f, 0xd2, 0xa4, 0x5b, 0x98, - 0x0d, 0x12, 0x88, 0x51, 0x63, 0x38, 0x6e, 0xa2, 0x46, 0x64, - 0x52, 0xc0, 0x71, 0xc1, 0x42, 0x68, 0xd8, 0x42, 0x32, 0x5c, - 0xb4, 0x44, 0x08, 0x95, 0x48, 0xa2, 0x46, 0x6c, 0x0b, 0x10, - 0x09, 0xc8, 0x24, 0x4d, 0x18, 0x37, 0x4c, 0x4c, 0x82, 0x05, - 0x02, 0x22, 0x10, 0x4a, 0x86, 0x30, 0x03, 0x03, 0x11, 0x44, - 0x22, 0x62, 0x01, 0xa9, 0x51, 0x13, 0x02, 0x2c, 0x19, 0x85, - 0x65, 0x51, 0x14, 0x01, 0x9c, 0xb2, 0x81, 0x0a, 0x49, 0x52, - 0xa2, 0xb2, 0x4c, 0x98, 0x34, 0x01, 0x0a, 0x07, 0x06, 0x58, - 0xb2, 0x69, 0x51, 0x24, 0x2d, 0x59, 0x12, 0x52, 0xe0, 0xb4, - 0x04, 0x14, 0x40, 0x29, 0xa2, 0xb0, 0x31, 0x54, 0xc0, 0x40, - 0x63, 0x00, 0x69, 0x18, 0x47, 0x85, 0xc8, 0x30, 0x81, 0x0b, - 0x15, 0x0a, 0xd8, 0xa0, 0x0c, 0x5c, 0x20, 0x4a, 0x11, 0x38, - 0x64, 0x04, 0x94, 0x84, 0xd3, 0x24, 0x72, 0x58, 0x38, 0x28, - 0x18, 0x37, 0x6d, 0x94, 0xc0, 0x4d, 0xa0, 0xa6, 0x0c, 0x9a, - 0x82, 0x31, 0xc2, 0x40, 0x48, 0xda, 0x46, 0x85, 0x03, 0x00, - 0x05, 0xd8, 0x02, 0x4d, 0x0b, 0x85, 0x40, 0xe2, 0x32, 0x86, - 0x4c, 0xa0, 0x65, 0x8a, 0x36, 0x65, 0x42, 0x18, 0x6e, 0x60, - 0x36, 0x0d, 0x40, 0xc0, 0x01, 0x5a, 0x44, 0x42, 0xc4, 0xa4, - 0x0d, 0xd4, 0x88, 0x8d, 0x88, 0x22, 0x52, 0x00, 0xc0, 0x0c, - 0x5b, 0x36, 0x90, 0x09, 0x20, 0x22, 0x08, 0x03, 0x12, 0x90, - 0x12, 0x42, 0x04, 0x20, 0x29, 0x8c, 0x48, 0x6d, 0x20, 0x32, - 0x08, 0x94, 0x88, 0x6c, 0x10, 0x87, 0x21, 0xc1, 0x44, 0x02, - 0x52, 0x40, 0x12, 0xdb, 0xc8, 0x24, 0x14, 0x09, 0x2c, 0x93, - 0x40, 0x09, 0x64, 0xc8, 0x4c, 0x08, 0x48, 0x70, 0xa1, 0x10, - 0x81, 0x4a, 0x80, 0x8c, 0x20, 0x03, 0x31, 0x18, 0xb3, 0x80, - 0xd3, 0x82, 0x25, 0x4c, 0x94, 0x8c, 0x1c, 0x93, 0x89, 0x1a, - 0x91, 0x51, 0xd1, 0xb6, 0x68, 0x43, 0x14, 0x25, 0x84, 0x48, - 0x61, 0x82, 0x40, 0x24, 0xdb, 0x22, 0x4d, 0x63, 0x16, 0x66, - 0x62, 0x90, 0x50, 0xa1, 0x18, 0x86, 0x49, 0x28, 0x25, 0xa0, - 0x10, 0x68, 0x8c, 0x04, 0x00, 0x08, 0x32, 0x4e, 0x22, 0x43, - 0x31, 0x42, 0x96, 0x28, 0x11, 0x23, 0x89, 0xd2, 0xc4, 0x6d, - 0x11, 0x82, 0x8d, 0x8a, 0xa8, 0x90, 0xd2, 0x06, 0x29, 0x80, - 0x82, 0x89, 0x00, 0xa8, 0x41, 0x00, 0x13, 0x6a, 0x12, 0xa8, - 0x04, 0x83, 0xc2, 0x51, 0x13, 0x09, 0x08, 0x62, 0xb4, 0x8d, - 0x94, 0xc2, 0x44, 0x5a, 0xb4, 0x08, 0x0a, 0x10, 0x48, 0xa1, - 0x28, 0x20, 0x1b, 0xb7, 0x64, 0x60, 0x24, 0x25, 0x48, 0xc0, - 0x00, 0x0a, 0x10, 0x09, 0x64, 0xb8, 0x88, 0xcb, 0x44, 0x64, - 0x54, 0x90, 0x05, 0xd2, 0xb8, 0x21, 0x49, 0x28, 0x28, 0x49, - 0x42, 0x0d, 0x63, 0xa0, 0x65, 0xcb, 0x90, 0x30, 0x51, 0x82, - 0x8d, 0x5c, 0xc6, 0x0c, 0x51, 0x06, 0x6a, 0x1a, 0x27, 0x22, - 0x01, 0xa8, 0x24, 0x61, 0xb2, 0x84, 0x23, 0x40, 0x86, 0xa3, - 0xb4, 0x48, 0x19, 0x28, 0x0c, 0x14, 0x06, 0x2e, 0xe2, 0x02, - 0x0d, 0xc4, 0x90, 0x09, 0x08, 0x06, 0x66, 0x9b, 0xc8, 0x10, - 0x5c, 0x46, 0x21, 0xca, 0xa8, 0x30, 0x83, 0x20, 0x89, 0x03, - 0x83, 0x6c, 0xa1, 0x46, 0x8c, 0x90, 0x14, 0x4c, 0x99, 0x02, - 0x81, 0x53, 0x02, 0x10, 0x8b, 0x48, 0x91, 0xe4, 0x40, 0x4a, - 0x22, 0xb1, 0x88, 0xc1, 0x06, 0x0e, 0xc3, 0xa8, 0x08, 0xc8, - 0x46, 0x92, 0x03, 0xb5, 0x4c, 0x23, 0x03, 0x0c, 0xa4, 0x06, - 0x2e, 0xdc, 0x92, 0x81, 0x0c, 0x45, 0x22, 0x40, 0x34, 0x91, - 0x90, 0x96, 0x48, 0x81, 0x82, 0x31, 0xcb, 0x16, 0x72, 0x49, - 0xc8, 0x29, 0x44, 0x86, 0x90, 0x60, 0x22, 0x4e, 0x42, 0x42, - 0x09, 0x4b, 0x82, 0x20, 0x0a, 0xb2, 0x64, 0x20, 0x86, 0x70, - 0x1a, 0xc0, 0x00, 0x1c, 0x41, 0x49, 0x89, 0x84, 0x05, 0x0c, - 0x36, 0x49, 0x19, 0x99, 0x6d, 0x00, 0x08, 0x50, 0x23, 0x96, - 0x6c, 0xe0, 0x44, 0x08, 0x98, 0x24, 0x2c, 0x0a, 0x23, 0x20, - 0x12, 0x04, 0x31, 0xc9, 0x06, 0x32, 0x14, 0x01, 0x41, 0x08, - 0x37, 0x08, 0x58, 0x00, 0x0c, 0x19, 0x04, 0x29, 0x90, 0x18, - 0x05, 0xe1, 0x88, 0x44, 0xc2, 0x20, 0x6c, 0xd1, 0x46, 0x64, - 0xd9, 0x26, 0x62, 0x09, 0x88, 0x68, 0x02, 0x29, 0x29, 0xe1, - 0x18, 0x65, 0x98, 0x04, 0x24, 0xe4, 0x34, 0x0c, 0x12, 0x85, - 0x2d, 0x20, 0x14, 0x06, 0x24, 0x15, 0x82, 0x89, 0x08, 0x91, - 0x60, 0x84, 0x28, 0x24, 0x34, 0x41, 0x1b, 0x49, 0x22, 0xd3, - 0x96, 0x64, 0x1b, 0x86, 0x4c, 0x0c, 0xb9, 0x20, 0x20, 0x39, - 0x04, 0x04, 0x34, 0x6d, 0xc1, 0x28, 0x32, 0x08, 0x14, 0x44, - 0x81, 0x18, 0x2e, 0xda, 0x38, 0x41, 0x63, 0x18, 0x26, 0xd8, - 0x48, 0x26, 0x12, 0x20, 0x21, 0x09, 0xc5, 0x25, 0x92, 0x42, - 0x0c, 0x88, 0x04, 0x64, 0x11, 0x43, 0x8a, 0x19, 0x92, 0x60, - 0x5c, 0xc6, 0x31, 0xa1, 0x24, 0x6a, 0xd8, 0xb6, 0x49, 0x1b, - 0x81, 0x90, 0xe2, 0x32, 0x4e, 0x62, 0x44, 0x21, 0x80, 0xb8, - 0x10, 0x4b, 0x90, 0x49, 0x5c, 0x06, 0x09, 0x48, 0x20, 0x49, - 0xa2, 0x92, 0x71, 0x5c, 0x48, 0x02, 0xc8, 0x08, 0x81, 0xa4, - 0x32, 0x66, 0xc9, 0x30, 0x11, 0xca, 0x92, 0x91, 0xc0, 0x00, - 0x41, 0x44, 0x98, 0x4d, 0x98, 0x12, 0x4e, 0x92, 0x46, 0x8e, - 0x49, 0xb8, 0x64, 0xdc, 0x18, 0x50, 0x51, 0xb4, 0x48, 0x08, - 0x47, 0x24, 0x08, 0x46, 0x32, 0x1b, 0x23, 0x00, 0x09, 0xb8, - 0x04, 0x0a, 0x44, 0x0c, 0x0b, 0xc7, 0x8d, 0x19, 0xa4, 0x09, - 0x11, 0x30, 0x41, 0xe3, 0x24, 0x45, 0x89, 0x1f, 0x65, 0x54, - 0xf6, 0x38, 0x04, 0x37, 0xcc, 0x89, 0xc3, 0xc5, 0xdc, 0x43, - 0xd9, 0x13, 0x56, 0x06, 0x05, 0x50, 0x29, 0x4e, 0x0f, 0xa5, - 0x5c, 0x5d, 0xd7, 0x82, 0xa1, 0x63, 0x59, 0x0d, 0x3e, 0x5b, - 0x00, 0xe6, 0x0e, 0xd8, 0x1c, 0xc7, 0xaf, 0xc0, 0x48, 0xb6, - 0x07, 0x5c, 0x65, 0x00, 0x89, 0xb3, 0x09, 0xbc, 0x4a, 0xaa, - 0xa6, 0x72, 0xbe, 0x6b, 0x9a, 0xb3, 0x5b, 0x27, 0x82, 0x65, - 0x9b, 0xc9, 0x6f, 0x19, 0x88, 0x94, 0x0b, 0x37, 0x44, 0x2f, - 0xe3, 0x9a, 0x02, 0xda, 0xff, 0x11, 0xb0, 0x48, 0x89, 0x70, - 0x8c, 0x84, 0xc2, 0xc0, 0x31, 0x4a, 0xad, 0x70, 0xe1, 0xa7, - 0x15, 0xfd, 0xb2, 0x6d, 0x93, 0xda, 0x17, 0x68, 0xc4, 0xe3, - 0xfd, 0x2c, 0x08, 0x15, 0xb9, 0xa4, 0xc5, 0x1b, 0x97, 0xc9, - 0xa3, 0xaf, 0x0d, 0x21, 0x06, 0x3d, 0xf1, 0x05, 0xd4, 0x35, - 0x80, 0x2e, 0x23, 0x99, 0xbd, 0x3a, 0x1a, 0x6c, 0xad, 0xbf, - 0x56, 0xb5, 0xd3, 0x95, 0x1b, 0x30, 0x4d, 0x56, 0xc1, 0x77, - 0xe6, 0xd6, 0xab, 0x94, 0x46, 0x68, 0xd7, 0xb8, 0xe4, 0x9d, - 0xb2, 0x8d, 0xc4, 0xd1, 0xc8, 0x92, 0xbe, 0x5d, 0x1f, 0x58, - 0x55, 0x7f, 0x11, 0x55, 0xc5, 0x2e, 0xc3, 0x9e, 0x2a, 0x29, - 0x51, 0xe8, 0x75, 0x49, 0xa7, 0xa3, 0xda, 0x0b, 0xcf, 0xf8, - 0x3f, 0x78, 0xac, 0x4c, 0x4e, 0x78, 0x6f, 0x0e, 0x67, 0xad, - 0x94, 0x59, 0x20, 0x5e, 0x37, 0x18, 0xb9, 0x09, 0x87, 0xdb, - 0xdd, 0xf0, 0xc2, 0x4d, 0x03, 0xcc, 0x98, 0x22, 0x4b, 0xe5, - 0x7d, 0x8e, 0x74, 0x7e, 0xa9, 0x1b, 0xeb, 0x7a, 0xae, 0xaf, - 0x2e, 0x7c, 0x3c, 0xc0, 0x1a, 0x30, 0x40, 0x0d, 0x79, 0x86, - 0x53, 0xcc, 0x0b, 0x2b, 0xbe, 0xa5, 0x72, 0x3b, 0xbb, 0x53, - 0x9e, 0xd5, 0xc2, 0x23, 0x1d, 0x35, 0xcd, 0x22, 0x12, 0xed, - 0x9a, 0xee, 0xc8, 0xf9, 0x05, 0x27, 0xdb, 0x46, 0x56, 0xcc, - 0x24, 0x4d, 0xee, 0xaf, 0xab, 0xa9, 0x78, 0x75, 0x75, 0xb9, - 0xd1, 0xfd, 0x39, 0x3a, 0xb2, 0xa2, 0xeb, 0x87, 0x76, 0xb2, - 0x19, 0x47, 0x88, 0xab, 0x42, 0x85, 0x4b, 0xd9, 0x76, 0x22, - 0x68, 0x4b, 0xc9, 0x88, 0x38, 0x28, 0x0a, 0x34, 0x5d, 0x12, - 0x4f, 0xf5, 0x43, 0x64, 0x44, 0x8c, 0x3c, 0xc2, 0x99, 0x91, - 0x4e, 0xfd, 0xfd, 0x9c, 0x73, 0xbf, 0x85, 0xf9, 0x9f, 0xe1, - 0x53, 0x19, 0xc8, 0x19, 0xcb, 0x7c, 0xdb, 0x9a, 0x3a, 0x2c, - 0x34, 0x55, 0x8c, 0x64, 0x6f, 0xc5, 0xb7, 0x93, 0x53, 0xb4, - 0x97, 0x7e, 0xc2, 0xf8, 0x7e, 0x8d, 0x44, 0x10, 0xca, 0x49, - 0xf5, 0x5c, 0xe8, 0xce, 0xc4, 0xcc, 0x42, 0xf0, 0x85, 0xf1, - 0xf2, 0x10, 0xa7, 0x0b, 0x37, 0x6a, 0x8e, 0x50, 0x96, 0x96, - 0x9d, 0xd9, 0x8f, 0x54, 0x45, 0x56, 0xf8, 0x64, 0x88, 0xab, - 0x51, 0x4f, 0x9f, 0x61, 0xd9, 0x12, 0x87, 0xac, 0x1d, 0xc1, - 0x23, 0xea, 0xb3, 0x5d, 0xa4, 0x6d, 0xfa, 0x58, 0x92, 0x8f, - 0x77, 0x78, 0x61, 0xe5, 0xe4, 0x33, 0xdb, 0x10, 0x2d, 0xdd, - 0xb6, 0xd7, 0xb4, 0xd0, 0x8d, 0xd1, 0xa8, 0x0b, 0x94, 0xdf, - 0xcf, 0xd7, 0xac, 0xdf, 0x47, 0x0b, 0x38, 0xe0, 0xa5, 0xf8, - 0xc3, 0xd2, 0xc3, 0xfb, 0x0f, 0x98, 0x00, 0x2b, 0x17, 0x3c, - 0x44, 0x70, 0x36, 0x47, 0x27, 0x89, 0x41, 0xcb, 0x87, 0x5a, - 0xa4, 0x2c, 0x57, 0x6d, 0x8c, 0xcb, 0xc0, 0x7d, 0x6b, 0xf5, - 0xa1, 0x17, 0x39, 0x4a, 0xb5, 0xac, 0xc6, 0x41, 0x90, 0x66, - 0x85, 0xc4, 0x4b, 0x18, 0xc6, 0xe6, 0x09, 0x6d, 0x6e, 0xbb, - 0x7f, 0x72, 0x96, 0xd3, 0x21, 0x5a, 0x96, 0xaf, 0x9e, 0xb6, - 0x0b, 0x3f, 0xe8, 0x83, 0xe5, 0x53, 0x11, 0x81, 0xc6, 0xab, - 0x40, 0xa9, 0x09, 0xb6, 0x74, 0x5e, 0xe1, 0xc3, 0x82, 0x1e, - 0xda, 0x2f, 0x24, 0xe0, 0x94, 0x8f, 0x07, 0xb7, 0x9b, 0xc6, - 0x50, 0xef, 0x3a, 0x79, 0x89, 0x4d, 0x6f, 0x16, 0x33, 0x04, - 0x24, 0x7e, 0x4a, 0xab, 0x5d, 0x03, 0x29, 0xad, 0xba, 0xa3, - 0x6c, 0xe2, 0x05, 0xab, 0x4d, 0x69, 0xb6, 0x61, 0x39, 0x9d, - 0xc3, 0x53, 0x11, 0xc0, 0xe3, 0xaa, 0x2e, 0xdc, 0x74, 0x09, - 0xbd, 0x19, 0xb5, 0xbb, 0x51, 0x1e, 0x77, 0x3e, 0xce, 0x64, - 0x13, 0xeb, 0x74, 0x03, 0xb7, 0x49, 0x99, 0xb0, 0x71, 0x99, - 0xe6, 0x17, 0x3c, 0x80, 0xe6, 0xb5, 0x51, 0xe9, 0xb3, 0xe4, - 0x2b, 0xaa, 0x52, 0x15, 0x99, 0x4e, 0x46, 0x6d, 0x67, 0x8e, - 0x79, 0xc4, 0x3c, 0xa6, 0xdc, 0x8f, 0xed, 0x87, 0xb9, 0x68, - 0x6d, 0xdc, 0x19, 0xa1, 0x52, 0x37, 0x06, 0x76, 0xad, 0xe9, - 0x61, 0x5c, 0x82, 0x16, 0x81, 0xaf, 0x3a, 0x89, 0xbf, 0x72, - 0xb0, 0xc7, 0x88, 0x3c, 0x58, 0xfe, 0xe4, 0xa5, 0x41, 0x50, - 0xfc, 0x8a, 0x15, 0xb0, 0x78, 0xd4, 0x77, 0x06, 0x4b, 0xc4, - 0x21, 0x7f, 0xaa, 0x2b, 0x88, 0x7f, 0x8c, 0x3b, 0x9b, 0xbb, - 0x2e, 0x41, 0xcf, 0x9b, 0x06, 0xd3, 0x4d, 0xcf, 0xb2, 0x9c, - 0x91, 0x46, 0x35, 0x3a, 0x5a, 0x0b, 0xe4, 0xac, 0x96, 0x7c, - 0xe0, 0xd4, 0x34, 0xe5, 0xab, 0xae, 0xa7, 0x67, 0xbf, 0x4d, - 0xab, 0x48, 0xfd, 0xcb, 0x3f, 0x5c, 0xde, 0x3f, 0x83, 0xcc, - 0x52, 0x0f, 0xdd, 0x7f, 0x20, 0x25, 0xed, 0xee, 0xd0, 0x14, - 0x38, 0xf7, 0x33, 0x4c, 0x3c, 0x5e, 0x23, 0x80, 0xa3, 0x0a, - 0xe8, 0xb0, 0xef, 0x5b, 0xca, 0xc9, 0x97, 0x13, 0x98, 0xfe, - 0x91, 0x62, 0x14, 0xa8, 0x64, 0xf6, 0x20, 0xc9, 0xc9, 0x6f, - 0x8b, 0xc0, 0xec, 0x39, 0x15, 0xa7, 0x59, 0x62, 0x68, 0x21, - 0xe1, 0x5f, 0xf6, 0xa1, 0x76, 0xb0, 0xca, 0x1b, 0x2a, 0x71, - 0xe3, 0x1a, 0x24, 0x91, 0x1f, 0x3a, 0xbb, 0xf1, 0xc9, 0x09, - 0x42, 0x48, 0x7e, 0x19, 0x1b, 0xf1, 0xf0, 0x13, 0x33, 0xf1, - 0x62, 0x31, 0x00, 0x97, 0x73, 0x9b, 0x3c, 0x26, 0xf8, 0x42, - 0xd0, 0xd4, 0x41, 0x1b, 0x9f, 0x7e, 0x43, 0x4b, 0x0b, 0x08, - 0xd7, 0xa0, 0xa8, 0x32, 0x34, 0x0a, 0xc9, 0xef, 0xb8, 0xeb, - 0xe7, 0x64, 0x3b, 0x40, 0x88, 0xe0, 0x60, 0x59, 0x07, 0xef, - 0xb9, 0x5f, 0x71, 0x92, 0x90, 0xa4, 0x5f, 0x34, 0x38, 0x93, - 0x92, 0x43, 0x87, 0xaf, 0xdd, 0x87, 0x63, 0x8c, 0x1d, 0xe5, - 0x86, 0x9e, 0xe6, 0xde, 0x94, 0xdd, 0x33, 0x5d, 0x95, 0x64, - 0xd8, 0xc4, 0x8a, 0x3c, 0xe7, 0x4b, 0xd6, 0x3f, 0xc5, 0x69, - 0x6a, 0xa8, 0x7f, 0x0f, 0x93, 0x77, 0x02, 0x46, 0x66, 0xa5, - 0xa0, 0x60, 0x8b, 0xec, 0xb1, 0xa2, 0xfc, 0x2a, 0x09, 0xb8, - 0x08, 0x1c, 0x05, 0x6b, 0x78, 0xb7, 0x7a, 0xe5, 0x60, 0xa4, - 0xaf, 0x3a, 0x9d, 0xaa, 0xf5, 0x22, 0x9b, 0x5e, 0xef, 0xc3, - 0x46, 0xed, 0x67, 0xd0, 0x8b, 0xda, 0xb4, 0xa3, 0x34, 0x32, - 0x20, 0x9d, 0x88, 0x7e, 0x43, 0x42, 0x6f, 0x02, 0xf8, 0x48, - 0x9b, 0xc5, 0x02, 0xad, 0xaa, 0xa9, 0xee, 0x19, 0x1b, 0xde, - 0x02, 0x83, 0x81, 0x10, 0xa6, 0x79, 0x4e, 0xad, 0x15, 0xf7, - 0x3e, 0x4e, 0x1e, 0x72, 0xfe, 0x52, 0x49, 0x24, 0xce, 0x82, - 0x31, 0x59, 0x72, 0xae, 0xd5, 0x34, 0x50, 0x87, 0x8b, 0xe3, - 0x8e, 0xec, 0x61, 0x35, 0x13, 0x57, 0xb1, 0xe6, 0xac, 0xfb, - 0x16, 0xc3, 0x1a, 0x98, 0x92, 0xcb, 0xcd, 0xc9, 0xf7, 0x10, - 0x6a, 0x43, 0x96, 0x33, 0x2d, 0x6f, 0x6c, 0x76, 0xb0, 0xf6, - 0x48, 0x4c, 0xae, 0x13, 0x67, 0x5d, 0x42, 0x01, 0x8e, 0x54, - 0x51, 0xcc, 0x65, 0xf1, 0x95, 0x11, 0x3c, 0x96, 0x2a, 0x5a, - 0x42, 0x3d, 0x9b, 0xbb, 0xb7, 0x7b, 0x28, 0x96, 0x09, 0xbb, - 0xed, 0x2d, 0xbc, 0xb7, 0x90, 0x62, 0xd3, 0xbe, 0xbd, 0xae, - 0x50, 0x15, 0x96, 0xc1, 0x03, 0x91, 0x14, 0x34, 0x4f, 0x21, - 0xa5, 0x6e, 0x78, 0x4a, 0x5d, 0x8b, 0xcf, 0x5b, 0x1a, 0x8a, - 0x57, 0x43, 0xb8, 0x25, 0xd3, 0xa2, 0xcd, 0x78, 0xb4, 0x93, - 0x07, 0x7a, 0x14, 0xc1, 0x0c, 0x6f, 0x5f, 0x5e, 0xcb, 0x11, - 0x17, 0x81, 0x0d, 0x7d, 0x0f, 0xda, 0xd1, 0x92, 0x43, 0x56, - 0xaf, 0x75, 0x53, 0x44, 0x1f, 0xc7, 0x9c, 0xd3, 0xc5, 0x47, - 0xe0, 0xac, 0x4a, 0x11, 0xe4, 0xfe, 0x6c, 0x80, 0x79, 0xcc, - 0x60, 0x7a, 0xd9, 0x56, 0x65, 0x83, 0x5e, 0xcf, 0x37, 0x27, - 0x55, 0xe2, 0x4d, 0xf9, 0xd6, 0x09, 0x2d, 0xee, 0xda, 0x10, - 0x6b, 0xdc, 0xd2, 0x70, 0x46, 0x94, 0xaa, 0xf5, 0x21, 0xc5, - 0xf0, 0x79, 0xdb, 0x9b, 0x8e, 0x9a, 0xdb, 0x5a, 0x56, 0x41, - 0x43, 0xe7, 0x1f, 0x8d, 0xfd, 0xda, 0x12, 0x5f, 0xf7, 0x9e, - 0x47, 0x1a, 0xf7, 0x73, 0x40, 0x67, 0xc2, 0x61, 0x07, 0x33, - 0x16, 0x78, 0x60, 0x05, 0x85, 0x5c, 0x2f, 0x2b, 0xbf, 0x2c, - 0x7a, 0x39, 0xc6, 0xed, 0xcb, 0x43, 0x66, 0x27, 0x93, 0xcd, - 0x92, 0x8d, 0x62, 0x8c, 0xaa, 0x61, 0x1c, 0x9c, 0x4c, 0x90, - 0xba, 0xba, 0x4b, 0xc1, 0xf1, 0x22, 0xde, 0xe0, 0xf9, 0x3e, - 0x04, 0xb9, 0x56, 0xa3, 0x1c, 0xe8, 0xda, 0xd6, 0x09, 0x4a, - 0x7d, 0x89, 0xbc, 0xf4, 0xe8, 0x4d, 0xa1, 0xe8, 0x34, 0x90, - 0xa5, 0x31, 0x3a, 0xec, 0x56, 0xc5, 0xd2, 0x92, 0x0b, 0xe9, - 0x58, 0xbb, 0xb2, 0x84, 0x9b, 0xa9, 0x1d, 0x19, 0xdb, 0x7a, - 0x02, 0x75, 0x79, 0x16, 0x35, 0xee, 0x3a, 0x3f, 0x4e, 0x5e, - 0x11, 0x90, 0x04, 0x03, 0xce, 0x8b, 0xa0, 0xd8, 0xc1, 0xee, - 0x52, 0x33, 0x6e, 0xd2, 0x6e, 0x06, 0x5c, 0x99, 0x24, 0x6f, - 0x16, 0xd9, 0x90, 0x28, 0xe5, 0x2d, 0x91, 0x6f, 0x1a, 0x57, - 0xf0, 0x4c, 0x7c, 0x3f, 0x7b, 0xd7, 0x30, 0xed, 0x6d, 0x21, - 0xb7, 0xf8, 0xed, 0xf3, 0x34, 0x89, 0xfa, 0xf0, 0x51, 0x6f, - 0x99, 0xa0, 0x5e, 0xf8, 0x74, 0xc7, 0x4f, 0xb5, 0x59, 0x52, - 0xbe, 0x45, 0xac, 0x3f, 0x34, 0x51, 0x87, 0x6e, 0x84, 0xea, - 0xb0, 0x40, 0xe1, 0x84, 0x16, 0x66, 0x30, 0xf1, 0x5c, 0xb2, - 0x74, 0x25, 0x03, 0xe3, 0x2e, 0x82, 0xc5, 0x60, 0x9d, 0xe4, - 0xca, 0xec, 0x49, 0x6b, 0x4e, 0x5a, 0x09, 0xa8, 0xfe, 0xff, - 0x1d, 0xa1, 0xe8, 0xec, 0x9a, 0x22, 0x3b, 0xd6, 0x72, 0x93, - 0x6f, 0x6b, 0x5a, 0xfb, 0x2d, 0x5a, 0xde, 0x01, 0x3e, 0xf6, - 0xdc, 0x77, 0x55, 0x1e, 0x32, 0x19, 0xc8, 0xa1, 0xbb, 0xcf, - 0xcb, 0x41, 0x54, 0xa2, 0xcb, 0xe6, 0x61, 0xca, 0x43, 0x63, - 0xd2, 0x2c, 0xae, 0xf4, 0xd9, 0x49, 0xb1, 0x75, 0x1a, 0x06, - 0x92, 0x13, 0x90, 0x57, 0x89, 0x8e, 0x9f, 0x26, 0xc5, 0x14, - 0xd8, 0xc7, 0x93, 0xb2, 0xaa, 0x3a, 0x9c, 0x10, 0xd5, 0x68, - 0x52, 0x28, 0x39, 0xee, 0x30, 0xdc, 0x00, 0x4b, 0x65, 0x72, - 0x59, 0x98, 0xad, 0x2e, 0x8c, 0xaf, 0x4e, 0x79, 0x0a, 0x8c, - 0x0c, 0x9d, 0xb6, 0x43, 0x26, 0x83, 0x71, 0x7b, 0x1e, 0x86, - 0x4d, 0x33, 0xd7, 0x20, 0x29, 0x6a, 0xbf, 0x2f, 0x8e, 0x4b, - 0x13, 0x35, 0x65, 0xc8, 0xec, 0xe3, 0x2c, 0xde, 0xfb, 0x30, - 0x57, 0xa9, 0x92, 0x22, 0x5d, 0x79, 0x16, 0x07, 0x73, 0x9b, - 0xe2, 0x6e, 0xd4, 0x99, 0xb4, 0x35, 0xfd, 0xa2, 0xb5, 0xd9, - 0xe5, 0x74, 0xd1, 0xb2, 0xcf, 0x32, 0xf1, 0x19, 0x69, 0xcf, - 0x1e, 0x10, 0xcc, 0x3c, 0xaf, 0xbe, 0xa4, 0x33, 0x11, 0x83, - 0x64, 0xc0, 0x39, 0xe5, 0xb0, 0x8f, 0x32, 0xf4, 0x01, 0x6a, - 0x2a, 0x11, 0x8e, 0xdd, 0x03, 0x81, 0x39, 0xe7, 0x70, 0x16, - 0x2f, 0x0e, 0x24, 0xa9, 0x12, 0x0b, 0xdb, 0xa8, 0x6c, 0xb3, - 0xf3, 0x74, 0x95, 0xca, 0x64, 0x1d, 0xee, 0x25, 0xc5, 0x27, - 0xed, 0x0f, 0x82, 0xb5, 0x7a, 0x62, 0x27, 0xb2, 0x87, 0x53, - 0x11, 0x39, 0x5e, 0xb8, 0x11, 0xca, 0x25, 0xe8, 0x17, 0x46, - 0xd3, 0x0f, 0x5d, 0x70, 0x68, 0xe1, 0x5f, 0xd1, 0xab, 0x65, - 0xe5, 0x42, 0x87, 0x1e, 0x96, 0xaf, 0x13, 0x0c, 0x9b, 0x15, - 0x75, 0x14, 0x31, 0x75, 0xcc, 0x15, 0xbf, 0x2c, 0x74, 0xab, - 0xc9, 0x9c, 0xda, 0x62, 0x1d, 0xeb, 0x19, 0x81, 0x67, 0x5e, - 0xcd, 0x54, 0x87, 0x07, 0x67, 0xba, 0xe3, 0xf6, 0x03, 0xbe, - 0x6d, 0x64, 0x2d, 0xbc, 0xec, 0x54, 0x13, 0x12, 0x5b, 0x44, - 0x90, 0x95, 0x86, 0x77, 0x8c, 0x59, 0xbd, 0x8e, 0xba, 0xb1, - 0x12, 0xea, 0xc1, 0x94, 0x37, 0xa0, 0x11, 0xff, 0xb2, 0xa4, - 0xc3, 0x61, 0xf2, 0xa3, 0x49, 0xbe, 0xe7, 0xb6, 0x96, 0x2f, }; -#define sizeof_bench_dilithium_level2_key (sizeof(bench_dilithium_level2_key)) - +#define sizeof_bench_mldsa_44_key (sizeof(bench_mldsa_44_key)) #endif /* !WOLFSSL_MLDSA_NO_SIGN */ #ifndef WOLFSSL_MLDSA_NO_VERIFY - -/* raw public key without ASN1 syntax from - * ./certs/dilithium/bench_dilithium_level2_key.der */ -static const unsigned char bench_dilithium_level2_pubkey[] = { - 0xea, 0x05, 0x24, 0x0d, 0x80, 0x72, 0x25, 0x55, 0xf4, 0x5b, - 0xc2, 0x13, 0x8b, 0x87, 0x5d, 0x31, 0x99, 0x2f, 0x1d, 0xa9, - 0x41, 0x09, 0x05, 0x76, 0xa7, 0xb7, 0x5e, 0x8c, 0x44, 0xe2, - 0x64, 0x79, 0xa0, 0xec, 0x1f, 0x24, 0xb6, 0xc8, 0x05, 0x5b, - 0xc1, 0x18, 0xb0, 0xb7, 0xcf, 0x8c, 0x60, 0x67, 0x6b, 0x81, - 0x44, 0x27, 0xb6, 0x0e, 0xfd, 0x9b, 0xc3, 0xcb, 0x52, 0x31, - 0xfa, 0xc9, 0x34, 0x8d, 0x22, 0x1e, 0x07, 0x9d, 0x96, 0x6a, - 0x63, 0x83, 0x5c, 0xd7, 0x83, 0x2d, 0x7f, 0x48, 0x64, 0x79, - 0xca, 0xb4, 0x9f, 0xa2, 0x02, 0xb7, 0x86, 0x1d, 0x0e, 0xc7, - 0xf9, 0x6c, 0x07, 0xc0, 0x35, 0x6a, 0x34, 0x79, 0x7c, 0xb8, - 0x0f, 0xed, 0x98, 0x50, 0xfb, 0x51, 0xe0, 0x36, 0x44, 0x4c, - 0xc6, 0x35, 0xa2, 0xbb, 0x55, 0xb0, 0x5c, 0x39, 0x08, 0x02, - 0x20, 0x35, 0x5c, 0x56, 0x6d, 0x2e, 0xb9, 0xef, 0x21, 0x26, - 0x87, 0x87, 0x85, 0x8a, 0x32, 0xb5, 0xa7, 0x68, 0x70, 0x3a, - 0xfd, 0x0d, 0x21, 0x48, 0x91, 0xa3, 0x29, 0xc1, 0x2a, 0x38, - 0xe5, 0x26, 0x31, 0x1f, 0x42, 0xde, 0x0b, 0x25, 0xff, 0x1d, - 0x6b, 0xb4, 0xe0, 0x5d, 0x2d, 0xcf, 0x44, 0xd5, 0x7d, 0xc4, - 0xf6, 0x95, 0xf2, 0x06, 0x4f, 0x83, 0x88, 0x9d, 0x1e, 0xeb, - 0x1c, 0x09, 0x45, 0x62, 0x67, 0x3d, 0xff, 0x51, 0x47, 0xe8, - 0xbc, 0x9b, 0x03, 0x1f, 0xc7, 0x72, 0x65, 0xce, 0xa8, 0x8c, - 0xc2, 0xa0, 0xc2, 0xbd, 0x5b, 0x7c, 0x17, 0x16, 0x8b, 0x72, - 0xfa, 0xb1, 0xbd, 0xdf, 0x49, 0xd6, 0xa1, 0x00, 0x65, 0xbe, - 0x82, 0xe7, 0x68, 0xc7, 0xe7, 0xbc, 0xc2, 0xa4, 0xdb, 0xaa, - 0xcc, 0xea, 0x41, 0x52, 0x7f, 0x56, 0xb4, 0x68, 0x1f, 0x92, - 0x96, 0x0f, 0xce, 0xd4, 0xd0, 0x87, 0x4c, 0x4a, 0x73, 0xb5, - 0x6c, 0xd4, 0x69, 0x55, 0x15, 0x47, 0xdc, 0x94, 0x7f, 0xd2, - 0x54, 0x5e, 0xb2, 0x90, 0xc2, 0x47, 0xe4, 0xf5, 0xde, 0x8b, - 0x9b, 0xc6, 0x5d, 0x50, 0x95, 0x60, 0xe0, 0xf0, 0xa7, 0x4e, - 0xe0, 0xcd, 0x41, 0x09, 0xef, 0xb3, 0x3d, 0x90, 0x5c, 0x77, - 0x54, 0xec, 0x9e, 0x5d, 0x8a, 0xe7, 0x09, 0x5c, 0xc9, 0x58, - 0x0c, 0xd0, 0x42, 0x35, 0xd2, 0x14, 0x59, 0x38, 0x69, 0xad, - 0xf9, 0xb5, 0xbf, 0x8a, 0x8e, 0x33, 0xd8, 0x5e, 0x7a, 0x55, - 0xd0, 0x53, 0x15, 0x40, 0x4e, 0xc5, 0x86, 0xd7, 0x8f, 0x5f, - 0x2f, 0x55, 0x82, 0xc2, 0x4f, 0x16, 0xe5, 0xea, 0x1c, 0xbc, - 0xff, 0x5e, 0x1f, 0x39, 0x46, 0x70, 0x54, 0x7a, 0x3a, 0x27, - 0x16, 0x1a, 0x2b, 0x6c, 0xd2, 0xb7, 0x80, 0xd3, 0xd1, 0x9d, - 0x25, 0x59, 0xed, 0xe6, 0x51, 0xb1, 0xf2, 0xad, 0x7e, 0x51, - 0x78, 0x14, 0x2b, 0x19, 0xae, 0x64, 0x72, 0x0f, 0xd8, 0x18, - 0x79, 0x8e, 0x66, 0x88, 0xd3, 0xa4, 0xa3, 0xc3, 0x76, 0x21, - 0xcb, 0xe4, 0x79, 0x5e, 0x95, 0x74, 0xe3, 0x31, 0x18, 0x79, - 0xed, 0xc7, 0xe7, 0xfb, 0x86, 0x48, 0x1b, 0x7b, 0x75, 0x5b, - 0x7f, 0x7c, 0x82, 0xc5, 0xab, 0x11, 0xb4, 0x5d, 0x59, 0x6f, - 0x78, 0xb2, 0xa5, 0x39, 0xc6, 0x63, 0x38, 0x6c, 0xeb, 0x50, - 0x06, 0x14, 0x76, 0xf0, 0xe8, 0xfb, 0x11, 0x95, 0x1f, 0x9d, - 0x9c, 0xa6, 0xe1, 0xe2, 0x0d, 0xa3, 0x66, 0xfc, 0x20, 0x83, - 0x50, 0x0e, 0x53, 0x75, 0xb5, 0x12, 0xf4, 0xdf, 0x31, 0x46, - 0x83, 0xac, 0x5b, 0xf3, 0x99, 0xa6, 0xd1, 0x7b, 0x2b, 0xc5, - 0xdc, 0x71, 0x07, 0x27, 0x33, 0x35, 0x34, 0xf5, 0x30, 0x19, - 0xc1, 0x3b, 0xba, 0x8a, 0xaf, 0x7e, 0x49, 0x93, 0x48, 0x5b, - 0x38, 0xc0, 0xbc, 0x2e, 0xc7, 0x59, 0x1b, 0xd9, 0xf5, 0xcc, - 0x86, 0xf5, 0x7b, 0x4d, 0xd7, 0x39, 0xa7, 0xa2, 0x56, 0x20, - 0x48, 0x98, 0x7d, 0x4f, 0x75, 0x56, 0x9b, 0xb8, 0x95, 0x45, - 0x17, 0xf3, 0x86, 0x3d, 0x97, 0x0a, 0x49, 0x1b, 0xca, 0xff, - 0x20, 0xc0, 0x24, 0x2c, 0x51, 0xc2, 0x0a, 0x3c, 0xbf, 0x07, - 0x60, 0x1c, 0x88, 0x85, 0x9b, 0x85, 0x2d, 0x4a, 0xfe, 0x5a, - 0x1c, 0x90, 0xf5, 0x90, 0x12, 0xd3, 0x03, 0x3c, 0x8c, 0x2e, - 0x95, 0x4a, 0x47, 0x76, 0x0f, 0x1f, 0x5d, 0x9e, 0xed, 0xc5, - 0x64, 0xc4, 0x9b, 0xbf, 0x86, 0xc5, 0x63, 0x84, 0x33, 0x00, - 0xf1, 0x26, 0x18, 0x21, 0xf3, 0x88, 0x1a, 0x08, 0x18, 0x6d, - 0x2f, 0xef, 0xd5, 0xeb, 0x2f, 0x69, 0xc8, 0x6e, 0x92, 0x34, - 0xfc, 0x72, 0x3d, 0x9a, 0xa7, 0x9e, 0x51, 0xfb, 0x56, 0xe3, - 0xdc, 0xf4, 0x8f, 0x9b, 0x6d, 0x0d, 0x2a, 0xec, 0x66, 0x12, - 0x26, 0x35, 0xbd, 0x61, 0xc2, 0x67, 0x19, 0xf5, 0x7e, 0xa1, - 0x67, 0xa2, 0x9c, 0x3b, 0x67, 0xb0, 0xc2, 0x51, 0x6a, 0x37, - 0x7c, 0x48, 0xe9, 0x4b, 0xb9, 0xa3, 0x38, 0x2f, 0xfc, 0xde, - 0xb4, 0x7c, 0xda, 0x52, 0x84, 0x0b, 0xb0, 0xd9, 0x08, 0xe9, - 0x7a, 0x4a, 0x6f, 0x79, 0x29, 0x3d, 0xc4, 0x5c, 0x78, 0xee, - 0x63, 0xb6, 0x96, 0x68, 0xd9, 0x82, 0x4e, 0xc1, 0x1b, 0x6f, - 0x52, 0xf5, 0xb3, 0xfb, 0xe8, 0xc4, 0x2a, 0x07, 0xc6, 0x3b, - 0x85, 0x0d, 0xf4, 0xbf, 0xb0, 0x6b, 0xfb, 0xce, 0x1d, 0xb4, - 0xbf, 0x63, 0x0b, 0x91, 0x67, 0xc4, 0xa3, 0x06, 0xa4, 0xaf, - 0x6c, 0xd3, 0xe5, 0x8b, 0x87, 0x4e, 0x64, 0x9c, 0xb1, 0xf3, - 0x70, 0x7c, 0x68, 0x43, 0x46, 0x13, 0x46, 0xee, 0x27, 0x75, - 0x12, 0x45, 0x42, 0xde, 0xa5, 0x8d, 0xcf, 0xf7, 0x09, 0x87, - 0xa8, 0x80, 0x3d, 0xb6, 0x45, 0xee, 0x41, 0x2d, 0x7c, 0x45, - 0x01, 0x9d, 0xaa, 0x78, 0xa8, 0x10, 0xa4, 0xfd, 0xb5, 0x5f, - 0xee, 0x0f, 0x77, 0xba, 0x73, 0xff, 0x49, 0xdc, 0xfa, 0x39, - 0xd6, 0xa3, 0x6f, 0x25, 0xb9, 0x63, 0x2c, 0x92, 0xc5, 0xdf, - 0xfb, 0xba, 0x89, 0xf9, 0xfa, 0x94, 0x5b, 0x6f, 0x5a, 0x4d, - 0x1c, 0xe4, 0xc9, 0x10, 0xf9, 0xa0, 0xe8, 0xc4, 0xcb, 0x55, - 0x1a, 0xdb, 0x56, 0x5f, 0x8e, 0x91, 0x03, 0x23, 0xca, 0xb0, - 0x1f, 0xef, 0xb8, 0x6c, 0x13, 0x5a, 0x99, 0x25, 0xf0, 0x49, - 0xa9, 0x5a, 0x45, 0xf7, 0xfd, 0x1a, 0xc2, 0x71, 0x06, 0xe3, - 0x2d, 0x25, 0x64, 0xb0, 0x52, 0x12, 0x03, 0x62, 0xc7, 0xb6, - 0xf9, 0xdc, 0x1f, 0x78, 0xff, 0x8b, 0xfa, 0xde, 0x7f, 0x71, - 0xa6, 0x35, 0x3e, 0xac, 0x20, 0x54, 0x94, 0xa7, 0x2e, 0x9d, - 0x47, 0x17, 0x4b, 0xad, 0x92, 0xb3, 0x14, 0x26, 0x8c, 0x5a, - 0xd0, 0x16, 0x4b, 0x22, 0xe9, 0x0c, 0x79, 0x6b, 0x8e, 0xac, - 0x0d, 0x12, 0xf5, 0x66, 0x8e, 0x82, 0x1a, 0x44, 0xf3, 0xe9, - 0x56, 0x5a, 0xcd, 0x1c, 0x1b, 0x81, 0x7b, 0x63, 0x59, 0xfe, - 0xc8, 0xc0, 0xe3, 0xda, 0x16, 0x6b, 0x6f, 0x0d, 0xba, 0x0e, - 0x47, 0x12, 0x86, 0x9e, 0xf0, 0x3b, 0x4d, 0x87, 0x3b, 0xf2, - 0x75, 0x73, 0x2d, 0xdf, 0xca, 0x76, 0x0b, 0xbd, 0xe7, 0xb7, - 0x74, 0x24, 0xf3, 0xc6, 0xe6, 0x75, 0x3f, 0x8b, 0x6a, 0xd9, - 0xad, 0xed, 0xc0, 0x70, 0x04, 0x1e, 0x0b, 0x8e, 0x8b, 0x7f, - 0xea, 0xbc, 0x39, 0x6b, 0x8a, 0x44, 0xa6, 0x9a, 0x2d, 0x0d, - 0x8c, 0x21, 0x60, 0x09, 0xd2, 0x4a, 0xe0, 0x62, 0xcf, 0xfa, - 0xe8, 0x9b, 0x35, 0x6f, 0x23, 0x2f, 0xb5, 0x65, 0x08, 0x60, - 0x92, 0x15, 0xd0, 0x5b, 0x63, 0xcc, 0x65, 0x05, 0xd1, 0xef, - 0x0f, 0x7e, 0x1b, 0xb3, 0x8e, 0xc6, 0x12, 0x85, 0xc9, 0x82, - 0x53, 0x79, 0x2e, 0x80, 0x5f, 0x0c, 0x7b, 0xc7, 0x1c, 0x83, - 0x41, 0x06, 0xd8, 0x41, 0xc9, 0xe7, 0xb9, 0x4b, 0xa1, 0x61, - 0xc6, 0x86, 0x67, 0xf5, 0x10, 0xf7, 0x34, 0x0d, 0x39, 0x9e, - 0x2b, 0x5f, 0x19, 0x06, 0x02, 0xa5, 0x02, 0x23, 0x71, 0xc2, - 0x12, 0x65, 0xcc, 0x81, 0x06, 0xfd, 0x8d, 0x09, 0x68, 0x37, - 0x06, 0x3b, 0xff, 0xc4, 0x24, 0xb3, 0x1f, 0xd6, 0xe6, 0x8f, - 0x9c, 0x74, 0x2c, 0x5e, 0xc5, 0xf4, 0xe9, 0xeb, 0xca, 0xd3, - 0x04, 0x5b, 0x92, 0x9e, 0x5c, 0x1a, 0x1d, 0xa1, 0xa7, 0x34, - 0xd2, 0x05, 0xae, 0xdb, 0x3d, 0x71, 0x10, 0x6e, 0x30, 0xd9, - 0xa3, 0x44, 0xa0, 0xbd, 0x9e, 0x7b, 0xb5, 0x12, 0x8a, 0x12, - 0x07, 0x60, 0xd7, 0x1f, 0x92, 0xe6, 0xfe, 0x04, 0xa9, 0x3e, - 0x62, 0x64, 0x00, 0x5f, 0x7c, 0x7b, 0x34, 0x09, 0xeb, 0x4a, - 0x18, 0x9e, 0x77, 0x72, 0x3a, 0x31, 0x1a, 0x62, 0x2a, 0xb5, - 0xcb, 0x4e, 0x53, 0xce, 0xad, 0x8b, 0x5a, 0x20, 0x4f, 0xd7, - 0x3e, 0x16, 0xf8, 0x10, 0xe2, 0xae, 0xbd, 0x3f, 0x02, 0xa9, - 0x18, 0xa0, 0x01, 0x18, 0x84, 0x95, 0x22, 0x2e, 0x93, 0x76, - 0x44, 0x4e, 0x11, 0x7b, 0x03, 0x51, 0x50, 0x19, 0x79, 0xe7, - 0xbb, 0x5c, 0x7b, 0xca, 0x74, 0xb4, 0x25, 0x26, 0xdb, 0x66, - 0xaa, 0x0b, 0x21, 0x07, 0xfb, 0x7a, 0x96, 0x10, 0x7d, 0x99, - 0xa9, 0x16, 0xcb, 0x0e, 0xba, 0x63, 0xab, 0x95, 0xfc, 0x5a, - 0xbe, 0xa6, 0x7f, 0xd8, 0xb4, 0xcd, 0x7c, 0xc5, 0xd0, 0xb1, - 0x1b, 0x48, 0x40, 0xfb, 0xe6, 0x2f, 0x2b, 0x94, 0xfe, 0x68, - 0xa2, 0xc4, 0x36, 0xd9, 0xcd, 0xc1, 0x93, 0x6d, 0xef, 0x39, - 0x5e, 0x43, 0x30, 0x5a, 0x2e, 0x66, 0xb6, 0xf2, 0xed, 0x9a, - 0x8d, 0x12, 0xdf, 0x5c, 0xae, 0xad, 0x16, 0x12, 0x7e, 0x81, - 0x82, 0x91, 0x7d, 0x2b, 0x12, 0xe9, 0x96, 0xb8, 0xb7, 0x42, - 0xcb, 0x1f, 0xf8, 0xd1, 0xfd, 0x83, 0x7a, 0xe4, 0x36, 0x1d, - 0x04, 0x27, 0x4c, 0xe5, 0xbd, 0x75, 0x24, 0xf7, 0xbd, 0xb6, - 0x6a, 0x68, 0x4e, 0x2c, 0x1b, 0x56, 0x3e, 0x60, 0xa4, 0x42, - 0xca, 0x7a, 0x54, 0xe5, 0x06, 0xe3, 0xda, 0x05, 0xf7, 0x77, - 0x36, 0x8b, 0x81, 0x26, 0x99, 0x92, 0x42, 0xda, 0x45, 0xb1, - 0xfe, 0x4b, +/* ./certs/mldsa/bench_mldsa_44_pubkey.der */ +static const unsigned char bench_mldsa_44_pubkey[] = +{ + 0xEA, 0x05, 0x24, 0x0D, 0x80, 0x72, 0x25, 0x55, 0xF4, 0x5B, + 0xC2, 0x13, 0x8B, 0x87, 0x5D, 0x31, 0x99, 0x2F, 0x1D, 0xA9, + 0x41, 0x09, 0x05, 0x76, 0xA7, 0xB7, 0x5E, 0x8C, 0x44, 0xE2, + 0x64, 0x79, 0xA0, 0xEC, 0x1F, 0x24, 0xB6, 0xC8, 0x05, 0x5B, + 0xC1, 0x18, 0xB0, 0xB7, 0xCF, 0x8C, 0x60, 0x67, 0x6B, 0x81, + 0x44, 0x27, 0xB6, 0x0E, 0xFD, 0x9B, 0xC3, 0xCB, 0x52, 0x31, + 0xFA, 0xC9, 0x34, 0x8D, 0x22, 0x1E, 0x07, 0x9D, 0x96, 0x6A, + 0x63, 0x83, 0x5C, 0xD7, 0x83, 0x2D, 0x7F, 0x48, 0x64, 0x79, + 0xCA, 0xB4, 0x9F, 0xA2, 0x02, 0xB7, 0x86, 0x1D, 0x0E, 0xC7, + 0xF9, 0x6C, 0x07, 0xC0, 0x35, 0x6A, 0x34, 0x79, 0x7C, 0xB8, + 0x0F, 0xED, 0x98, 0x50, 0xFB, 0x51, 0xE0, 0x36, 0x44, 0x4C, + 0xC6, 0x35, 0xA2, 0xBB, 0x55, 0xB0, 0x5C, 0x39, 0x08, 0x02, + 0x20, 0x35, 0x5C, 0x56, 0x6D, 0x2E, 0xB9, 0xEF, 0x21, 0x26, + 0x87, 0x87, 0x85, 0x8A, 0x32, 0xB5, 0xA7, 0x68, 0x70, 0x3A, + 0xFD, 0x0D, 0x21, 0x48, 0x91, 0xA3, 0x29, 0xC1, 0x2A, 0x38, + 0xE5, 0x26, 0x31, 0x1F, 0x42, 0xDE, 0x0B, 0x25, 0xFF, 0x1D, + 0x6B, 0xB4, 0xE0, 0x5D, 0x2D, 0xCF, 0x44, 0xD5, 0x7D, 0xC4, + 0xF6, 0x95, 0xF2, 0x06, 0x4F, 0x83, 0x88, 0x9D, 0x1E, 0xEB, + 0x1C, 0x09, 0x45, 0x62, 0x67, 0x3D, 0xFF, 0x51, 0x47, 0xE8, + 0xBC, 0x9B, 0x03, 0x1F, 0xC7, 0x72, 0x65, 0xCE, 0xA8, 0x8C, + 0xC2, 0xA0, 0xC2, 0xBD, 0x5B, 0x7C, 0x17, 0x16, 0x8B, 0x72, + 0xFA, 0xB1, 0xBD, 0xDF, 0x49, 0xD6, 0xA1, 0x00, 0x65, 0xBE, + 0x82, 0xE7, 0x68, 0xC7, 0xE7, 0xBC, 0xC2, 0xA4, 0xDB, 0xAA, + 0xCC, 0xEA, 0x41, 0x52, 0x7F, 0x56, 0xB4, 0x68, 0x1F, 0x92, + 0x96, 0x0F, 0xCE, 0xD4, 0xD0, 0x87, 0x4C, 0x4A, 0x73, 0xB5, + 0x6C, 0xD4, 0x69, 0x55, 0x15, 0x47, 0xDC, 0x94, 0x7F, 0xD2, + 0x54, 0x5E, 0xB2, 0x90, 0xC2, 0x47, 0xE4, 0xF5, 0xDE, 0x8B, + 0x9B, 0xC6, 0x5D, 0x50, 0x95, 0x60, 0xE0, 0xF0, 0xA7, 0x4E, + 0xE0, 0xCD, 0x41, 0x09, 0xEF, 0xB3, 0x3D, 0x90, 0x5C, 0x77, + 0x54, 0xEC, 0x9E, 0x5D, 0x8A, 0xE7, 0x09, 0x5C, 0xC9, 0x58, + 0x0C, 0xD0, 0x42, 0x35, 0xD2, 0x14, 0x59, 0x38, 0x69, 0xAD, + 0xF9, 0xB5, 0xBF, 0x8A, 0x8E, 0x33, 0xD8, 0x5E, 0x7A, 0x55, + 0xD0, 0x53, 0x15, 0x40, 0x4E, 0xC5, 0x86, 0xD7, 0x8F, 0x5F, + 0x2F, 0x55, 0x82, 0xC2, 0x4F, 0x16, 0xE5, 0xEA, 0x1C, 0xBC, + 0xFF, 0x5E, 0x1F, 0x39, 0x46, 0x70, 0x54, 0x7A, 0x3A, 0x27, + 0x16, 0x1A, 0x2B, 0x6C, 0xD2, 0xB7, 0x80, 0xD3, 0xD1, 0x9D, + 0x25, 0x59, 0xED, 0xE6, 0x51, 0xB1, 0xF2, 0xAD, 0x7E, 0x51, + 0x78, 0x14, 0x2B, 0x19, 0xAE, 0x64, 0x72, 0x0F, 0xD8, 0x18, + 0x79, 0x8E, 0x66, 0x88, 0xD3, 0xA4, 0xA3, 0xC3, 0x76, 0x21, + 0xCB, 0xE4, 0x79, 0x5E, 0x95, 0x74, 0xE3, 0x31, 0x18, 0x79, + 0xED, 0xC7, 0xE7, 0xFB, 0x86, 0x48, 0x1B, 0x7B, 0x75, 0x5B, + 0x7F, 0x7C, 0x82, 0xC5, 0xAB, 0x11, 0xB4, 0x5D, 0x59, 0x6F, + 0x78, 0xB2, 0xA5, 0x39, 0xC6, 0x63, 0x38, 0x6C, 0xEB, 0x50, + 0x06, 0x14, 0x76, 0xF0, 0xE8, 0xFB, 0x11, 0x95, 0x1F, 0x9D, + 0x9C, 0xA6, 0xE1, 0xE2, 0x0D, 0xA3, 0x66, 0xFC, 0x20, 0x83, + 0x50, 0x0E, 0x53, 0x75, 0xB5, 0x12, 0xF4, 0xDF, 0x31, 0x46, + 0x83, 0xAC, 0x5B, 0xF3, 0x99, 0xA6, 0xD1, 0x7B, 0x2B, 0xC5, + 0xDC, 0x71, 0x07, 0x27, 0x33, 0x35, 0x34, 0xF5, 0x30, 0x19, + 0xC1, 0x3B, 0xBA, 0x8A, 0xAF, 0x7E, 0x49, 0x93, 0x48, 0x5B, + 0x38, 0xC0, 0xBC, 0x2E, 0xC7, 0x59, 0x1B, 0xD9, 0xF5, 0xCC, + 0x86, 0xF5, 0x7B, 0x4D, 0xD7, 0x39, 0xA7, 0xA2, 0x56, 0x20, + 0x48, 0x98, 0x7D, 0x4F, 0x75, 0x56, 0x9B, 0xB8, 0x95, 0x45, + 0x17, 0xF3, 0x86, 0x3D, 0x97, 0x0A, 0x49, 0x1B, 0xCA, 0xFF, + 0x20, 0xC0, 0x24, 0x2C, 0x51, 0xC2, 0x0A, 0x3C, 0xBF, 0x07, + 0x60, 0x1C, 0x88, 0x85, 0x9B, 0x85, 0x2D, 0x4A, 0xFE, 0x5A, + 0x1C, 0x90, 0xF5, 0x90, 0x12, 0xD3, 0x03, 0x3C, 0x8C, 0x2E, + 0x95, 0x4A, 0x47, 0x76, 0x0F, 0x1F, 0x5D, 0x9E, 0xED, 0xC5, + 0x64, 0xC4, 0x9B, 0xBF, 0x86, 0xC5, 0x63, 0x84, 0x33, 0x00, + 0xF1, 0x26, 0x18, 0x21, 0xF3, 0x88, 0x1A, 0x08, 0x18, 0x6D, + 0x2F, 0xEF, 0xD5, 0xEB, 0x2F, 0x69, 0xC8, 0x6E, 0x92, 0x34, + 0xFC, 0x72, 0x3D, 0x9A, 0xA7, 0x9E, 0x51, 0xFB, 0x56, 0xE3, + 0xDC, 0xF4, 0x8F, 0x9B, 0x6D, 0x0D, 0x2A, 0xEC, 0x66, 0x12, + 0x26, 0x35, 0xBD, 0x61, 0xC2, 0x67, 0x19, 0xF5, 0x7E, 0xA1, + 0x67, 0xA2, 0x9C, 0x3B, 0x67, 0xB0, 0xC2, 0x51, 0x6A, 0x37, + 0x7C, 0x48, 0xE9, 0x4B, 0xB9, 0xA3, 0x38, 0x2F, 0xFC, 0xDE, + 0xB4, 0x7C, 0xDA, 0x52, 0x84, 0x0B, 0xB0, 0xD9, 0x08, 0xE9, + 0x7A, 0x4A, 0x6F, 0x79, 0x29, 0x3D, 0xC4, 0x5C, 0x78, 0xEE, + 0x63, 0xB6, 0x96, 0x68, 0xD9, 0x82, 0x4E, 0xC1, 0x1B, 0x6F, + 0x52, 0xF5, 0xB3, 0xFB, 0xE8, 0xC4, 0x2A, 0x07, 0xC6, 0x3B, + 0x85, 0x0D, 0xF4, 0xBF, 0xB0, 0x6B, 0xFB, 0xCE, 0x1D, 0xB4, + 0xBF, 0x63, 0x0B, 0x91, 0x67, 0xC4, 0xA3, 0x06, 0xA4, 0xAF, + 0x6C, 0xD3, 0xE5, 0x8B, 0x87, 0x4E, 0x64, 0x9C, 0xB1, 0xF3, + 0x70, 0x7C, 0x68, 0x43, 0x46, 0x13, 0x46, 0xEE, 0x27, 0x75, + 0x12, 0x45, 0x42, 0xDE, 0xA5, 0x8D, 0xCF, 0xF7, 0x09, 0x87, + 0xA8, 0x80, 0x3D, 0xB6, 0x45, 0xEE, 0x41, 0x2D, 0x7C, 0x45, + 0x01, 0x9D, 0xAA, 0x78, 0xA8, 0x10, 0xA4, 0xFD, 0xB5, 0x5F, + 0xEE, 0x0F, 0x77, 0xBA, 0x73, 0xFF, 0x49, 0xDC, 0xFA, 0x39, + 0xD6, 0xA3, 0x6F, 0x25, 0xB9, 0x63, 0x2C, 0x92, 0xC5, 0xDF, + 0xFB, 0xBA, 0x89, 0xF9, 0xFA, 0x94, 0x5B, 0x6F, 0x5A, 0x4D, + 0x1C, 0xE4, 0xC9, 0x10, 0xF9, 0xA0, 0xE8, 0xC4, 0xCB, 0x55, + 0x1A, 0xDB, 0x56, 0x5F, 0x8E, 0x91, 0x03, 0x23, 0xCA, 0xB0, + 0x1F, 0xEF, 0xB8, 0x6C, 0x13, 0x5A, 0x99, 0x25, 0xF0, 0x49, + 0xA9, 0x5A, 0x45, 0xF7, 0xFD, 0x1A, 0xC2, 0x71, 0x06, 0xE3, + 0x2D, 0x25, 0x64, 0xB0, 0x52, 0x12, 0x03, 0x62, 0xC7, 0xB6, + 0xF9, 0xDC, 0x1F, 0x78, 0xFF, 0x8B, 0xFA, 0xDE, 0x7F, 0x71, + 0xA6, 0x35, 0x3E, 0xAC, 0x20, 0x54, 0x94, 0xA7, 0x2E, 0x9D, + 0x47, 0x17, 0x4B, 0xAD, 0x92, 0xB3, 0x14, 0x26, 0x8C, 0x5A, + 0xD0, 0x16, 0x4B, 0x22, 0xE9, 0x0C, 0x79, 0x6B, 0x8E, 0xAC, + 0x0D, 0x12, 0xF5, 0x66, 0x8E, 0x82, 0x1A, 0x44, 0xF3, 0xE9, + 0x56, 0x5A, 0xCD, 0x1C, 0x1B, 0x81, 0x7B, 0x63, 0x59, 0xFE, + 0xC8, 0xC0, 0xE3, 0xDA, 0x16, 0x6B, 0x6F, 0x0D, 0xBA, 0x0E, + 0x47, 0x12, 0x86, 0x9E, 0xF0, 0x3B, 0x4D, 0x87, 0x3B, 0xF2, + 0x75, 0x73, 0x2D, 0xDF, 0xCA, 0x76, 0x0B, 0xBD, 0xE7, 0xB7, + 0x74, 0x24, 0xF3, 0xC6, 0xE6, 0x75, 0x3F, 0x8B, 0x6A, 0xD9, + 0xAD, 0xED, 0xC0, 0x70, 0x04, 0x1E, 0x0B, 0x8E, 0x8B, 0x7F, + 0xEA, 0xBC, 0x39, 0x6B, 0x8A, 0x44, 0xA6, 0x9A, 0x2D, 0x0D, + 0x8C, 0x21, 0x60, 0x09, 0xD2, 0x4A, 0xE0, 0x62, 0xCF, 0xFA, + 0xE8, 0x9B, 0x35, 0x6F, 0x23, 0x2F, 0xB5, 0x65, 0x08, 0x60, + 0x92, 0x15, 0xD0, 0x5B, 0x63, 0xCC, 0x65, 0x05, 0xD1, 0xEF, + 0x0F, 0x7E, 0x1B, 0xB3, 0x8E, 0xC6, 0x12, 0x85, 0xC9, 0x82, + 0x53, 0x79, 0x2E, 0x80, 0x5F, 0x0C, 0x7B, 0xC7, 0x1C, 0x83, + 0x41, 0x06, 0xD8, 0x41, 0xC9, 0xE7, 0xB9, 0x4B, 0xA1, 0x61, + 0xC6, 0x86, 0x67, 0xF5, 0x10, 0xF7, 0x34, 0x0D, 0x39, 0x9E, + 0x2B, 0x5F, 0x19, 0x06, 0x02, 0xA5, 0x02, 0x23, 0x71, 0xC2, + 0x12, 0x65, 0xCC, 0x81, 0x06, 0xFD, 0x8D, 0x09, 0x68, 0x37, + 0x06, 0x3B, 0xFF, 0xC4, 0x24, 0xB3, 0x1F, 0xD6, 0xE6, 0x8F, + 0x9C, 0x74, 0x2C, 0x5E, 0xC5, 0xF4, 0xE9, 0xEB, 0xCA, 0xD3, + 0x04, 0x5B, 0x92, 0x9E, 0x5C, 0x1A, 0x1D, 0xA1, 0xA7, 0x34, + 0xD2, 0x05, 0xAE, 0xDB, 0x3D, 0x71, 0x10, 0x6E, 0x30, 0xD9, + 0xA3, 0x44, 0xA0, 0xBD, 0x9E, 0x7B, 0xB5, 0x12, 0x8A, 0x12, + 0x07, 0x60, 0xD7, 0x1F, 0x92, 0xE6, 0xFE, 0x04, 0xA9, 0x3E, + 0x62, 0x64, 0x00, 0x5F, 0x7C, 0x7B, 0x34, 0x09, 0xEB, 0x4A, + 0x18, 0x9E, 0x77, 0x72, 0x3A, 0x31, 0x1A, 0x62, 0x2A, 0xB5, + 0xCB, 0x4E, 0x53, 0xCE, 0xAD, 0x8B, 0x5A, 0x20, 0x4F, 0xD7, + 0x3E, 0x16, 0xF8, 0x10, 0xE2, 0xAE, 0xBD, 0x3F, 0x02, 0xA9, + 0x18, 0xA0, 0x01, 0x18, 0x84, 0x95, 0x22, 0x2E, 0x93, 0x76, + 0x44, 0x4E, 0x11, 0x7B, 0x03, 0x51, 0x50, 0x19, 0x79, 0xE7, + 0xBB, 0x5C, 0x7B, 0xCA, 0x74, 0xB4, 0x25, 0x26, 0xDB, 0x66, + 0xAA, 0x0B, 0x21, 0x07, 0xFB, 0x7A, 0x96, 0x10, 0x7D, 0x99, + 0xA9, 0x16, 0xCB, 0x0E, 0xBA, 0x63, 0xAB, 0x95, 0xFC, 0x5A, + 0xBE, 0xA6, 0x7F, 0xD8, 0xB4, 0xCD, 0x7C, 0xC5, 0xD0, 0xB1, + 0x1B, 0x48, 0x40, 0xFB, 0xE6, 0x2F, 0x2B, 0x94, 0xFE, 0x68, + 0xA2, 0xC4, 0x36, 0xD9, 0xCD, 0xC1, 0x93, 0x6D, 0xEF, 0x39, + 0x5E, 0x43, 0x30, 0x5A, 0x2E, 0x66, 0xB6, 0xF2, 0xED, 0x9A, + 0x8D, 0x12, 0xDF, 0x5C, 0xAE, 0xAD, 0x16, 0x12, 0x7E, 0x81, + 0x82, 0x91, 0x7D, 0x2B, 0x12, 0xE9, 0x96, 0xB8, 0xB7, 0x42, + 0xCB, 0x1F, 0xF8, 0xD1, 0xFD, 0x83, 0x7A, 0xE4, 0x36, 0x1D, + 0x04, 0x27, 0x4C, 0xE5, 0xBD, 0x75, 0x24, 0xF7, 0xBD, 0xB6, + 0x6A, 0x68, 0x4E, 0x2C, 0x1B, 0x56, 0x3E, 0x60, 0xA4, 0x42, + 0xCA, 0x7A, 0x54, 0xE5, 0x06, 0xE3, 0xDA, 0x05, 0xF7, 0x77, + 0x36, 0x8B, 0x81, 0x26, 0x99, 0x92, 0x42, 0xDA, 0x45, 0xB1, + 0xFE, 0x4B }; -#define sizeof_bench_dilithium_level2_pubkey \ - (sizeof(bench_dilithium_level2_pubkey)) - +#define sizeof_bench_mldsa_44_pubkey (sizeof(bench_mldsa_44_pubkey)) #endif /* !WOLFSSL_MLDSA_NO_VERIFY */ #ifndef WOLFSSL_MLDSA_NO_SIGN - -/* raw private key without ASN1 syntax from - * ./certs/dilithium/bench_dilithium_level3_key.der */ -static const unsigned char bench_dilithium_level3_key[] = { - 0x15, 0xc9, 0xe5, 0x53, 0x2f, 0xd8, 0x1f, 0xb4, 0xa3, 0x9f, - 0xae, 0xad, 0xb3, 0x10, 0xd0, 0x72, 0x69, 0xd3, 0x02, 0xf3, - 0xdf, 0x67, 0x5a, 0x31, 0x52, 0x19, 0xca, 0x39, 0x27, 0x77, - 0x61, 0x6d, 0x72, 0xdd, 0x85, 0x06, 0xf6, 0x94, 0x0a, 0x57, - 0x52, 0xcd, 0xac, 0x83, 0x4a, 0xe5, 0xbe, 0xa4, 0x30, 0x79, - 0x9e, 0xc6, 0xd6, 0x04, 0xc8, 0x73, 0xdc, 0x5e, 0x41, 0x75, - 0x2f, 0xac, 0x76, 0x57, 0x03, 0x08, 0x46, 0xcb, 0xaf, 0x4c, - 0x6a, 0x4f, 0x20, 0x18, 0xb3, 0x2e, 0x11, 0x54, 0xb5, 0x94, - 0xe6, 0x6f, 0x76, 0xf6, 0xb9, 0x73, 0x9a, 0x07, 0x73, 0xe8, - 0x90, 0xd1, 0x04, 0xda, 0xc5, 0x97, 0xb9, 0x52, 0x51, 0xc8, - 0xc9, 0xcc, 0x87, 0x29, 0xa1, 0xde, 0x79, 0x9b, 0xf8, 0x7f, - 0x80, 0x3f, 0xfd, 0xb3, 0x24, 0xa5, 0xba, 0xf5, 0xd6, 0xd4, - 0x07, 0xbd, 0xa7, 0x1b, 0xd0, 0xe1, 0xd0, 0x43, 0x14, 0x52, - 0x27, 0x03, 0x33, 0x76, 0x00, 0x67, 0x30, 0x23, 0x76, 0x34, - 0x72, 0x02, 0x41, 0x62, 0x12, 0x43, 0x86, 0x30, 0x18, 0x28, - 0x46, 0x27, 0x45, 0x20, 0x88, 0x33, 0x54, 0x10, 0x03, 0x81, - 0x44, 0x50, 0x06, 0x44, 0x56, 0x30, 0x37, 0x38, 0x38, 0x46, - 0x03, 0x85, 0x01, 0x86, 0x43, 0x80, 0x78, 0x28, 0x83, 0x55, - 0x37, 0x44, 0x80, 0x12, 0x17, 0x51, 0x78, 0x46, 0x22, 0x01, - 0x53, 0x54, 0x63, 0x87, 0x77, 0x38, 0x11, 0x81, 0x43, 0x30, - 0x15, 0x47, 0x66, 0x11, 0x40, 0x65, 0x70, 0x56, 0x62, 0x28, - 0x21, 0x65, 0x30, 0x45, 0x63, 0x53, 0x31, 0x80, 0x81, 0x71, - 0x23, 0x62, 0x85, 0x03, 0x07, 0x56, 0x16, 0x28, 0x18, 0x35, - 0x07, 0x38, 0x60, 0x68, 0x17, 0x30, 0x15, 0x20, 0x04, 0x13, - 0x13, 0x61, 0x51, 0x58, 0x00, 0x37, 0x51, 0x58, 0x14, 0x06, - 0x12, 0x55, 0x13, 0x46, 0x76, 0x05, 0x51, 0x87, 0x32, 0x62, - 0x50, 0x41, 0x88, 0x24, 0x50, 0x31, 0x65, 0x36, 0x31, 0x02, - 0x75, 0x35, 0x78, 0x27, 0x36, 0x08, 0x01, 0x77, 0x22, 0x77, - 0x30, 0x80, 0x11, 0x21, 0x28, 0x26, 0x68, 0x27, 0x13, 0x70, - 0x50, 0x44, 0x88, 0x20, 0x50, 0x67, 0x65, 0x74, 0x17, 0x46, - 0x50, 0x16, 0x42, 0x75, 0x35, 0x12, 0x60, 0x12, 0x17, 0x13, - 0x36, 0x72, 0x04, 0x77, 0x07, 0x55, 0x20, 0x27, 0x15, 0x02, - 0x25, 0x12, 0x57, 0x71, 0x37, 0x45, 0x43, 0x34, 0x40, 0x31, - 0x78, 0x50, 0x31, 0x28, 0x17, 0x84, 0x87, 0x43, 0x25, 0x75, - 0x58, 0x05, 0x61, 0x56, 0x41, 0x44, 0x57, 0x67, 0x85, 0x54, - 0x00, 0x88, 0x88, 0x50, 0x68, 0x11, 0x14, 0x42, 0x08, 0x74, - 0x73, 0x00, 0x38, 0x08, 0x45, 0x28, 0x62, 0x43, 0x36, 0x20, - 0x30, 0x10, 0x87, 0x83, 0x67, 0x62, 0x02, 0x48, 0x46, 0x50, - 0x08, 0x08, 0x41, 0x43, 0x78, 0x22, 0x65, 0x87, 0x43, 0x84, - 0x25, 0x36, 0x58, 0x64, 0x30, 0x10, 0x20, 0x68, 0x82, 0x47, - 0x60, 0x31, 0x76, 0x68, 0x74, 0x68, 0x75, 0x61, 0x16, 0x26, - 0x82, 0x50, 0x32, 0x61, 0x41, 0x22, 0x38, 0x20, 0x86, 0x75, - 0x74, 0x00, 0x77, 0x12, 0x81, 0x35, 0x51, 0x78, 0x88, 0x64, - 0x82, 0x00, 0x41, 0x55, 0x62, 0x87, 0x51, 0x41, 0x74, 0x51, - 0x53, 0x27, 0x33, 0x84, 0x68, 0x86, 0x57, 0x60, 0x44, 0x30, - 0x22, 0x32, 0x10, 0x52, 0x22, 0x83, 0x48, 0x53, 0x66, 0x74, - 0x14, 0x52, 0x32, 0x71, 0x41, 0x08, 0x83, 0x67, 0x41, 0x38, - 0x46, 0x80, 0x88, 0x14, 0x84, 0x30, 0x85, 0x35, 0x46, 0x20, - 0x54, 0x84, 0x56, 0x84, 0x54, 0x82, 0x14, 0x11, 0x52, 0x07, - 0x86, 0x46, 0x05, 0x82, 0x26, 0x85, 0x75, 0x07, 0x88, 0x75, - 0x51, 0x17, 0x54, 0x32, 0x68, 0x66, 0x08, 0x23, 0x66, 0x06, - 0x42, 0x28, 0x00, 0x84, 0x27, 0x27, 0x43, 0x47, 0x12, 0x27, - 0x13, 0x15, 0x17, 0x74, 0x85, 0x14, 0x12, 0x62, 0x06, 0x47, - 0x17, 0x60, 0x00, 0x10, 0x85, 0x16, 0x55, 0x64, 0x46, 0x62, - 0x77, 0x05, 0x51, 0x23, 0x52, 0x37, 0x51, 0x78, 0x35, 0x66, - 0x14, 0x15, 0x78, 0x40, 0x16, 0x54, 0x67, 0x30, 0x61, 0x24, - 0x26, 0x86, 0x56, 0x83, 0x62, 0x78, 0x88, 0x83, 0x50, 0x06, - 0x13, 0x21, 0x33, 0x73, 0x16, 0x44, 0x86, 0x77, 0x65, 0x28, - 0x12, 0x40, 0x62, 0x54, 0x55, 0x84, 0x00, 0x11, 0x77, 0x38, - 0x71, 0x51, 0x38, 0x32, 0x33, 0x67, 0x15, 0x77, 0x24, 0x33, - 0x44, 0x11, 0x05, 0x65, 0x13, 0x03, 0x72, 0x63, 0x81, 0x58, - 0x08, 0x03, 0x34, 0x23, 0x61, 0x00, 0x02, 0x63, 0x86, 0x40, - 0x03, 0x71, 0x34, 0x27, 0x45, 0x10, 0x34, 0x26, 0x83, 0x28, - 0x31, 0x35, 0x26, 0x05, 0x58, 0x41, 0x11, 0x10, 0x65, 0x35, - 0x22, 0x42, 0x28, 0x88, 0x46, 0x06, 0x57, 0x33, 0x88, 0x46, - 0x04, 0x86, 0x88, 0x88, 0x51, 0x74, 0x82, 0x27, 0x58, 0x14, - 0x11, 0x08, 0x13, 0x16, 0x61, 0x16, 0x14, 0x44, 0x83, 0x85, - 0x71, 0x44, 0x55, 0x82, 0x16, 0x62, 0x85, 0x05, 0x43, 0x41, - 0x73, 0x53, 0x60, 0x01, 0x80, 0x68, 0x33, 0x13, 0x43, 0x44, - 0x73, 0x36, 0x65, 0x35, 0x22, 0x26, 0x13, 0x31, 0x36, 0x83, - 0x30, 0x27, 0x15, 0x11, 0x54, 0x53, 0x24, 0x84, 0x75, 0x24, - 0x72, 0x78, 0x34, 0x24, 0x35, 0x80, 0x06, 0x38, 0x88, 0x11, - 0x41, 0x01, 0x34, 0x87, 0x77, 0x20, 0x14, 0x50, 0x55, 0x12, - 0x17, 0x48, 0x87, 0x74, 0x58, 0x42, 0x31, 0x46, 0x36, 0x37, - 0x26, 0x50, 0x04, 0x75, 0x77, 0x15, 0x41, 0x53, 0x04, 0x04, - 0x26, 0x61, 0x65, 0x87, 0x55, 0x56, 0x07, 0x81, 0x28, 0x21, - 0x41, 0x61, 0x41, 0x50, 0x17, 0x47, 0x25, 0x50, 0x20, 0x83, - 0x46, 0x87, 0x18, 0x45, 0x40, 0x21, 0x06, 0x08, 0x12, 0x25, - 0x71, 0x13, 0x35, 0x55, 0x54, 0x61, 0x00, 0x52, 0x74, 0x78, - 0x13, 0x84, 0x55, 0x40, 0x14, 0x40, 0x78, 0x12, 0x88, 0x43, - 0x33, 0x24, 0x66, 0x88, 0x22, 0x44, 0x15, 0x37, 0x81, 0x27, - 0x84, 0x18, 0x28, 0x11, 0x58, 0x51, 0x71, 0x21, 0x02, 0x83, - 0x70, 0x48, 0x32, 0x46, 0x00, 0x70, 0x17, 0x30, 0x63, 0x21, - 0x46, 0x60, 0x50, 0x72, 0x77, 0x45, 0x83, 0x75, 0x26, 0x31, - 0x47, 0x34, 0x47, 0x84, 0x87, 0x63, 0x22, 0x83, 0x21, 0x10, - 0x21, 0x51, 0x47, 0x46, 0x31, 0x06, 0x57, 0x82, 0x65, 0x24, - 0x61, 0x66, 0x24, 0x68, 0x14, 0x03, 0x43, 0x41, 0x04, 0x14, - 0x47, 0x61, 0x57, 0x87, 0x43, 0x83, 0x43, 0x25, 0x87, 0x36, - 0x72, 0x51, 0x38, 0x51, 0x54, 0x54, 0x84, 0x40, 0x15, 0x30, - 0x35, 0x34, 0x43, 0x61, 0x63, 0x42, 0x77, 0x31, 0x42, 0x06, - 0x61, 0x03, 0x01, 0x41, 0x08, 0x84, 0x02, 0x65, 0x04, 0x72, - 0x32, 0x00, 0x21, 0x10, 0x54, 0x73, 0x04, 0x42, 0x48, 0x11, - 0x74, 0x18, 0x63, 0x73, 0x28, 0x61, 0x36, 0x80, 0x20, 0x86, - 0x24, 0x42, 0x16, 0x11, 0x71, 0x83, 0x78, 0x38, 0x82, 0x47, - 0x67, 0x18, 0x56, 0x86, 0x85, 0x66, 0x18, 0x24, 0x50, 0x74, - 0x72, 0x02, 0x66, 0x83, 0x63, 0x08, 0x25, 0x32, 0x15, 0x78, - 0x33, 0x08, 0x34, 0x44, 0x08, 0x28, 0x10, 0x25, 0x40, 0x11, - 0x04, 0x76, 0x60, 0x16, 0x65, 0x16, 0x13, 0x30, 0x53, 0x14, - 0x77, 0x06, 0x06, 0x88, 0x64, 0x47, 0x08, 0x23, 0x11, 0x56, - 0x46, 0x61, 0x48, 0x64, 0x73, 0x66, 0x07, 0x65, 0x41, 0x24, - 0x67, 0x45, 0x42, 0x18, 0x62, 0x01, 0x70, 0x88, 0x03, 0x77, - 0x22, 0x85, 0x77, 0x02, 0x85, 0x03, 0x65, 0x15, 0x57, 0x51, - 0x28, 0x72, 0x53, 0x32, 0x05, 0x58, 0x84, 0x54, 0x03, 0x81, - 0x63, 0x23, 0x38, 0x27, 0x01, 0x85, 0x61, 0x12, 0x28, 0x62, - 0x22, 0x67, 0x56, 0x66, 0x63, 0x08, 0x74, 0x63, 0x21, 0x01, - 0x46, 0x10, 0x08, 0x18, 0x07, 0x86, 0x47, 0x70, 0x50, 0x25, - 0x45, 0x06, 0x55, 0x88, 0x46, 0x11, 0x23, 0x84, 0x70, 0x02, - 0x24, 0x88, 0x52, 0x60, 0x12, 0x72, 0x63, 0x05, 0x81, 0x21, - 0x26, 0x07, 0x64, 0x03, 0x56, 0x48, 0x27, 0x04, 0x38, 0x86, - 0x25, 0x65, 0x21, 0x25, 0x77, 0x21, 0x62, 0x28, 0x82, 0x71, - 0x85, 0x73, 0x78, 0x24, 0x78, 0x51, 0x61, 0x02, 0x81, 0x14, - 0x67, 0x61, 0x08, 0x88, 0x31, 0x77, 0x06, 0x24, 0x45, 0x13, - 0x67, 0x67, 0x54, 0x67, 0x00, 0x12, 0x62, 0x54, 0x11, 0x27, - 0x51, 0x48, 0x07, 0x33, 0x01, 0x24, 0x04, 0x64, 0x11, 0x83, - 0x18, 0x52, 0x55, 0x23, 0x24, 0x58, 0x53, 0x78, 0x30, 0x43, - 0x31, 0x76, 0x62, 0x01, 0x08, 0x73, 0x21, 0x32, 0x12, 0x78, - 0x22, 0x68, 0x33, 0x45, 0x33, 0x73, 0x02, 0x74, 0x21, 0x81, - 0x02, 0x16, 0x54, 0x31, 0x55, 0x76, 0x25, 0x76, 0x41, 0x36, - 0x75, 0x22, 0x78, 0x16, 0x60, 0x48, 0x58, 0x28, 0x83, 0x50, - 0x88, 0x66, 0x72, 0x70, 0x21, 0x21, 0x24, 0x16, 0x62, 0x57, - 0x20, 0x13, 0x80, 0x61, 0x15, 0x45, 0x42, 0x86, 0x00, 0x25, - 0x77, 0x58, 0x84, 0x01, 0x66, 0x16, 0x46, 0x56, 0x68, 0x57, - 0x12, 0x20, 0x75, 0x60, 0x41, 0x85, 0x02, 0x88, 0x12, 0x68, - 0x20, 0x02, 0x41, 0x18, 0x87, 0x13, 0x17, 0x33, 0x74, 0x11, - 0x08, 0x37, 0x47, 0x08, 0x31, 0x67, 0x08, 0x50, 0x61, 0x54, - 0x56, 0x71, 0x63, 0x26, 0x85, 0x22, 0x07, 0x87, 0x71, 0x28, - 0x20, 0x47, 0x48, 0x66, 0x54, 0x38, 0x03, 0x41, 0x38, 0x21, - 0x70, 0x50, 0x66, 0x53, 0x56, 0x70, 0x74, 0x55, 0x70, 0x28, - 0x52, 0x01, 0x42, 0x65, 0x53, 0x73, 0x32, 0x33, 0x67, 0x42, - 0x67, 0x85, 0x18, 0x45, 0x12, 0x37, 0x58, 0x82, 0x13, 0x73, - 0x78, 0x77, 0x03, 0x42, 0x04, 0x65, 0x55, 0x66, 0x07, 0x25, - 0x07, 0x37, 0x40, 0x78, 0x66, 0x71, 0x11, 0x21, 0x43, 0x25, - 0x87, 0x40, 0x58, 0x63, 0x33, 0x43, 0x52, 0x10, 0x31, 0x53, - 0x56, 0x48, 0x05, 0x55, 0x77, 0x77, 0x26, 0x87, 0x28, 0x43, - 0x61, 0x46, 0x11, 0x76, 0x82, 0x50, 0x42, 0x04, 0x32, 0x88, - 0x18, 0x66, 0x16, 0x36, 0x64, 0x41, 0x38, 0x17, 0x55, 0x43, - 0x06, 0x25, 0x80, 0x27, 0x21, 0x16, 0x81, 0x22, 0x64, 0x60, - 0x38, 0x16, 0x82, 0x40, 0x72, 0x34, 0x73, 0x52, 0x61, 0x85, - 0x11, 0x16, 0x00, 0x25, 0x03, 0x30, 0x06, 0x80, 0x21, 0x56, - 0x64, 0x52, 0x23, 0x26, 0x37, 0x75, 0x73, 0x65, 0x53, 0x27, - 0x37, 0x47, 0x56, 0x76, 0x80, 0x38, 0x53, 0x62, 0x14, 0x24, - 0x64, 0x03, 0x66, 0x21, 0x72, 0x16, 0x36, 0x34, 0x11, 0x65, - 0x61, 0x62, 0x86, 0x02, 0x83, 0x27, 0x80, 0x82, 0x70, 0x72, - 0x52, 0x60, 0x20, 0x87, 0x58, 0x58, 0x14, 0x38, 0x47, 0x03, - 0x10, 0x72, 0x60, 0x48, 0x02, 0x01, 0x17, 0x21, 0x61, 0x62, - 0x38, 0x64, 0x27, 0x53, 0x57, 0x13, 0x68, 0x18, 0x26, 0x62, - 0x43, 0x42, 0x21, 0x85, 0x70, 0x23, 0x58, 0x13, 0x72, 0x04, - 0x04, 0x08, 0x05, 0x82, 0x26, 0x18, 0x82, 0x47, 0x87, 0x71, - 0x32, 0x28, 0x68, 0x25, 0x87, 0x24, 0x06, 0x74, 0x41, 0x44, - 0x08, 0x64, 0x68, 0x30, 0x24, 0x44, 0x21, 0x73, 0x03, 0x45, - 0x70, 0x41, 0x06, 0x78, 0x38, 0x33, 0x88, 0x13, 0x31, 0x14, - 0x18, 0x17, 0x45, 0x06, 0x26, 0x67, 0x66, 0x73, 0x82, 0x56, - 0x66, 0x88, 0x70, 0x22, 0x55, 0x47, 0x27, 0x50, 0x86, 0x55, - 0x53, 0x00, 0x28, 0x55, 0x40, 0x62, 0xe9, 0x37, 0x65, 0xe1, - 0x30, 0x48, 0x6b, 0x35, 0x76, 0x96, 0x05, 0x21, 0xce, 0xed, - 0x46, 0xae, 0x7e, 0x6d, 0xc9, 0xf1, 0xc9, 0xb3, 0x7a, 0xa7, - 0xde, 0xa7, 0x62, 0x18, 0x11, 0xc0, 0xd8, 0xd0, 0x17, 0x0f, - 0x38, 0xaf, 0x0e, 0x3d, 0xaf, 0xe6, 0x63, 0xb0, 0xc4, 0x68, - 0x4e, 0x29, 0xa4, 0xf4, 0x20, 0x22, 0xbc, 0x82, 0x15, 0x1d, - 0x08, 0x39, 0x18, 0xfe, 0x69, 0x55, 0x06, 0x3d, 0xf4, 0xa3, - 0xe7, 0x29, 0x23, 0xa4, 0xd9, 0xa4, 0x22, 0x06, 0x2d, 0x5f, - 0x22, 0xb3, 0x9b, 0x1c, 0xb6, 0x3e, 0xf3, 0xf4, 0x8a, 0xb3, - 0x35, 0x18, 0x4c, 0x1f, 0xaf, 0xd4, 0xcf, 0x5b, 0x9b, 0xa7, - 0xf8, 0xd2, 0x86, 0x71, 0x8e, 0x64, 0x96, 0xd1, 0x6e, 0xad, - 0xd2, 0x7e, 0x16, 0x5b, 0x38, 0x91, 0x0e, 0x40, 0xaa, 0x07, - 0x6a, 0x63, 0x2a, 0xc0, 0x5b, 0x14, 0x79, 0x52, 0xcb, 0x23, - 0x6e, 0x76, 0x95, 0xd0, 0x90, 0x6c, 0x18, 0xe7, 0x89, 0xee, - 0xb9, 0x7f, 0x33, 0x08, 0x35, 0x8f, 0xa3, 0xaa, 0xaa, 0x10, - 0x2f, 0x8b, 0xc9, 0x6c, 0x1d, 0x95, 0xb5, 0xb8, 0x54, 0x0d, - 0x67, 0x86, 0xd4, 0x5d, 0xae, 0x8f, 0x33, 0x20, 0xe2, 0x35, - 0xda, 0x71, 0x53, 0x24, 0xad, 0x16, 0x84, 0x2e, 0x98, 0xcd, - 0x00, 0xa2, 0x69, 0x6a, 0x12, 0x9a, 0x86, 0xf3, 0x9f, 0x18, - 0x6c, 0x9f, 0x24, 0xbe, 0xb3, 0xf4, 0x90, 0xb3, 0xc4, 0xa4, - 0x8b, 0xce, 0x88, 0x60, 0xa0, 0x91, 0xb8, 0x9a, 0x52, 0xe5, - 0xfe, 0x16, 0x6d, 0xff, 0xb3, 0xdc, 0x50, 0x79, 0xfe, 0x31, - 0x24, 0xd4, 0x59, 0x5f, 0xf9, 0xb4, 0x70, 0x0b, 0x15, 0x93, - 0xd9, 0xe9, 0x92, 0xb6, 0xf5, 0x80, 0x34, 0x63, 0x66, 0x78, - 0xcf, 0xa9, 0xce, 0x48, 0xbf, 0xbe, 0x9e, 0xfa, 0xdd, 0x7d, - 0xf4, 0x16, 0xe2, 0xd2, 0x98, 0x13, 0xe2, 0x76, 0xdd, 0x0a, - 0xc7, 0x2d, 0xe8, 0x88, 0x8e, 0x1a, 0xc0, 0xfc, 0xe8, 0x35, - 0xaf, 0x5d, 0xe2, 0x4c, 0x96, 0x82, 0x4c, 0xe5, 0x89, 0x14, - 0xb8, 0x27, 0x39, 0xb5, 0x55, 0xc5, 0xa5, 0x8a, 0x01, 0xcc, - 0xfd, 0xbd, 0xa9, 0xec, 0xae, 0xc0, 0xe7, 0xd7, 0xf8, 0x11, - 0x84, 0x35, 0x99, 0x26, 0xb6, 0xc6, 0xf7, 0x35, 0xe0, 0x93, - 0xd8, 0xd7, 0xbf, 0xc0, 0xc8, 0x44, 0xfd, 0x46, 0xf5, 0xb7, - 0xc5, 0x5a, 0x75, 0xd3, 0xc7, 0xfa, 0xf4, 0xe1, 0xc0, 0x84, - 0x5e, 0x31, 0xfe, 0x69, 0x80, 0x5a, 0xe5, 0x4b, 0x9b, 0x5b, - 0xa4, 0x5c, 0x23, 0xaa, 0x85, 0xc9, 0x9a, 0xbd, 0x71, 0x49, - 0x11, 0x30, 0x8b, 0x81, 0xa1, 0xdd, 0xf8, 0xb8, 0x74, 0x91, - 0xe7, 0xf7, 0x82, 0x42, 0x70, 0x22, 0x95, 0xf0, 0xcc, 0x9f, - 0x02, 0x33, 0x0f, 0x08, 0x3b, 0x04, 0x31, 0xd7, 0x4f, 0x86, - 0x78, 0x49, 0xb9, 0x90, 0xf5, 0x8f, 0xec, 0x12, 0x84, 0x52, - 0x03, 0x1f, 0x64, 0x5e, 0xf0, 0x2a, 0xeb, 0x87, 0xa5, 0xec, - 0x95, 0x25, 0x64, 0x25, 0x49, 0x3b, 0x3c, 0x30, 0xed, 0x3b, - 0xe9, 0x36, 0xfd, 0xae, 0xa6, 0x26, 0xd3, 0x45, 0xbc, 0x1b, - 0x78, 0x5f, 0xce, 0x27, 0x45, 0x1c, 0xd5, 0xf9, 0xa7, 0xda, - 0x62, 0xe6, 0x7e, 0xd3, 0xbb, 0xd8, 0x0a, 0xfd, 0xf5, 0xa5, - 0x31, 0x09, 0x6e, 0x40, 0xe8, 0xcf, 0xc1, 0x42, 0x8e, 0x2e, - 0x75, 0x65, 0xaa, 0x91, 0x6f, 0xc7, 0x75, 0x3a, 0x1e, 0x40, - 0x99, 0x71, 0x5e, 0x00, 0xae, 0x07, 0xad, 0x43, 0x49, 0xdd, - 0x6d, 0x36, 0xe3, 0xa8, 0xdf, 0x2c, 0x39, 0xa2, 0x57, 0xd7, - 0x93, 0xa1, 0x16, 0x80, 0x89, 0xa6, 0x56, 0x69, 0x75, 0xea, - 0xb8, 0xb2, 0x43, 0x0c, 0xdf, 0x46, 0x05, 0x9a, 0x39, 0x08, - 0x3b, 0xb6, 0x76, 0xe3, 0x5b, 0x98, 0x5b, 0x48, 0xc0, 0x11, - 0x14, 0x6f, 0xcd, 0xb7, 0xaa, 0x08, 0x1e, 0x53, 0x9b, 0x94, - 0x9d, 0xa2, 0xe6, 0x99, 0xcb, 0x1c, 0xb4, 0xbf, 0x55, 0x84, - 0x12, 0xc9, 0xf1, 0xf0, 0x94, 0xd9, 0x7d, 0x61, 0xa9, 0xe7, - 0xe6, 0xc1, 0xe2, 0xca, 0x6b, 0x36, 0x80, 0x72, 0x31, 0x79, - 0xbf, 0xe7, 0x3e, 0x99, 0x9e, 0xd5, 0x59, 0xd4, 0x97, 0x14, - 0xd5, 0xfa, 0x93, 0x37, 0x8a, 0x65, 0xa5, 0xb6, 0x4e, 0xba, - 0xb3, 0x84, 0xf2, 0xc1, 0x55, 0xb6, 0x94, 0x31, 0x30, 0xe7, - 0xb2, 0x71, 0x4e, 0xc6, 0x21, 0x50, 0xf3, 0xcf, 0x7c, 0xbc, - 0x26, 0xb7, 0x20, 0xcb, 0x2d, 0x9e, 0x55, 0x23, 0x7c, 0xf0, - 0x97, 0x16, 0x57, 0x5b, 0xcc, 0xc5, 0x48, 0xc9, 0xc8, 0xee, - 0x1e, 0x11, 0x6b, 0x72, 0x3b, 0x29, 0x71, 0xa4, 0xed, 0x08, - 0x6c, 0x38, 0xc6, 0x2e, 0x64, 0x3b, 0x16, 0xd8, 0x4d, 0x19, - 0xe8, 0x94, 0xd3, 0xd5, 0xb4, 0x18, 0xb4, 0x03, 0x24, 0x62, - 0xe7, 0x44, 0x5e, 0x09, 0x60, 0xc6, 0xa9, 0xa6, 0xca, 0xbe, - 0x83, 0xe5, 0xf1, 0xbd, 0x04, 0x22, 0x4b, 0x1b, 0x08, 0x0b, - 0xa6, 0x20, 0x95, 0xf2, 0x78, 0x8c, 0x3e, 0x73, 0x03, 0x7b, - 0x75, 0x2c, 0xe5, 0x72, 0xec, 0xc9, 0x25, 0x06, 0x6b, 0x3a, - 0x5e, 0x0e, 0x96, 0xd0, 0xe3, 0x85, 0xb0, 0xb5, 0x6a, 0x83, - 0x40, 0x41, 0x94, 0xce, 0xa1, 0x07, 0x79, 0x07, 0xe2, 0x50, - 0xa4, 0xde, 0x7d, 0x64, 0x2f, 0x7e, 0x43, 0xd5, 0x72, 0xd1, - 0xa7, 0xb9, 0x76, 0xa3, 0xfc, 0x25, 0x33, 0xd7, 0x95, 0xb5, - 0xd9, 0x94, 0x93, 0x55, 0xaf, 0x04, 0x86, 0x4a, 0xfc, 0x2f, - 0x5f, 0x3d, 0x34, 0x86, 0xf2, 0x9a, 0x31, 0x4c, 0xc9, 0xad, - 0x08, 0xa5, 0x03, 0x91, 0x8a, 0x7e, 0x46, 0xc9, 0x44, 0x61, - 0x11, 0x59, 0x4f, 0xbb, 0x70, 0xf9, 0x9d, 0x3e, 0x6d, 0x53, - 0xb4, 0x16, 0x28, 0xd3, 0x67, 0x52, 0x14, 0xad, 0xba, 0xb1, - 0x21, 0xaf, 0x84, 0x18, 0xc9, 0x37, 0x78, 0xb3, 0x78, 0x92, - 0x95, 0xad, 0x1b, 0xc0, 0x70, 0xe7, 0xe9, 0x06, 0x02, 0xed, - 0x6c, 0x99, 0x4e, 0x43, 0xc0, 0xa4, 0x6f, 0x23, 0xa8, 0x02, - 0xc4, 0xbd, 0xc0, 0x16, 0xc4, 0xed, 0xe0, 0xe1, 0x56, 0x06, - 0x3f, 0xf4, 0x77, 0x12, 0x72, 0x52, 0x04, 0xe8, 0xe4, 0x26, - 0xe5, 0x01, 0x47, 0x5b, 0x8a, 0xca, 0x07, 0x3b, 0xc9, 0xb1, - 0x42, 0x8f, 0x7d, 0x64, 0x7d, 0x5d, 0x6a, 0x95, 0xde, 0x4d, - 0x4b, 0xd3, 0xfa, 0xcf, 0xf0, 0x25, 0x27, 0x96, 0x48, 0xb6, - 0xcc, 0x68, 0x29, 0x37, 0x95, 0xcd, 0x36, 0xb7, 0xb0, 0xd6, - 0xf1, 0xfc, 0x4f, 0xe9, 0xa8, 0x6b, 0x9d, 0x75, 0xc7, 0x9b, - 0x19, 0xaf, 0xbb, 0x8a, 0xaf, 0x4b, 0xb8, 0xe2, 0xeb, 0x8d, - 0xd9, 0xf5, 0x75, 0xc5, 0xc8, 0x0b, 0xf2, 0x1c, 0xf9, 0x9e, - 0xc7, 0x4d, 0x7c, 0x71, 0x47, 0xbd, 0x57, 0x7e, 0xe6, 0x59, - 0xca, 0x8c, 0xf2, 0x0c, 0x47, 0x4a, 0x90, 0xa7, 0xf5, 0xb8, - 0xb2, 0x43, 0x97, 0xdb, 0xbe, 0x76, 0x37, 0x29, 0x36, 0x40, - 0xaa, 0x7a, 0x81, 0xf0, 0xa0, 0xd0, 0x81, 0x39, 0x88, 0xf0, - 0x23, 0xb0, 0xa4, 0xbe, 0x5e, 0xd8, 0x33, 0x98, 0x5d, 0x9d, - 0xb5, 0xd4, 0x1c, 0x00, 0xe2, 0x30, 0xb8, 0x68, 0x58, 0x65, - 0x30, 0x94, 0x3d, 0xf2, 0x75, 0x0c, 0x8e, 0x3b, 0xee, 0x9b, - 0xce, 0x6c, 0x67, 0x68, 0x54, 0x86, 0x7d, 0x27, 0x2a, 0x2f, - 0xf7, 0x25, 0xff, 0x22, 0x1e, 0x74, 0xbd, 0x72, 0x11, 0xf4, - 0x47, 0x8e, 0x2f, 0x0d, 0xb9, 0x31, 0xac, 0x5c, 0x1d, 0xa0, - 0x11, 0xea, 0x16, 0x24, 0x86, 0x76, 0xbd, 0xa3, 0x41, 0x7f, - 0x00, 0xe6, 0xe2, 0x86, 0x93, 0xff, 0x02, 0x07, 0xce, 0x49, - 0xe4, 0xaf, 0x00, 0x9b, 0x15, 0xa6, 0x05, 0xf7, 0x54, 0xd1, - 0xbb, 0xa7, 0x09, 0x67, 0xe6, 0x99, 0xf9, 0x23, 0xe6, 0xaa, - 0x6f, 0xcb, 0xe1, 0xc1, 0xac, 0x7b, 0x98, 0xa9, 0x14, 0x43, - 0x55, 0x22, 0x2c, 0x7a, 0x4a, 0x4a, 0x63, 0xc1, 0xfe, 0x5c, - 0xca, 0xf4, 0x91, 0x3b, 0x6f, 0xf8, 0x7e, 0x2a, 0xa1, 0x4a, - 0xc3, 0x16, 0x1c, 0x1d, 0x53, 0x7d, 0x0e, 0x77, 0x0d, 0x72, - 0x07, 0x78, 0xea, 0xce, 0xe4, 0x0c, 0xf7, 0xce, 0xa0, 0xef, - 0xa1, 0xdb, 0x6b, 0x5f, 0xfd, 0xeb, 0x68, 0xc7, 0x76, 0xfd, - 0x35, 0xd2, 0xcb, 0xa4, 0xf6, 0xe6, 0x6b, 0xdb, 0xe9, 0xd5, - 0x1e, 0x05, 0x8a, 0xba, 0xed, 0x77, 0x94, 0x36, 0x6c, 0x3c, - 0xe2, 0x23, 0xf8, 0x84, 0xa1, 0xe3, 0xcd, 0xfa, 0x1d, 0x31, - 0x52, 0x4d, 0xbc, 0x16, 0x31, 0x92, 0xd7, 0xbe, 0x2e, 0xd6, - 0x6d, 0x1d, 0x58, 0x4e, 0xd8, 0x06, 0x8f, 0xb3, 0xe6, 0x79, - 0x60, 0x92, 0x71, 0x1f, 0x72, 0x84, 0x55, 0x7b, 0xfa, 0xc8, - 0xcf, 0x20, 0x16, 0x2f, 0xc7, 0x13, 0x17, 0xd1, 0x2d, 0xd1, - 0x0d, 0x84, 0x48, 0x08, 0x69, 0xd1, 0x55, 0xb1, 0x08, 0xb6, - 0x17, 0x8c, 0x38, 0x31, 0xa4, 0x77, 0x73, 0xc0, 0xe9, 0xfc, - 0x5f, 0x8e, 0xb3, 0x74, 0x1f, 0xab, 0xcf, 0xf5, 0x26, 0x26, - 0x20, 0x80, 0xd8, 0x13, 0x42, 0xcf, 0xc7, 0x9d, 0xd6, 0x5b, - 0x1a, 0xfd, 0x46, 0x83, 0xba, 0xc1, 0xe5, 0x92, 0xe9, 0x27, - 0xa8, 0xa0, 0x36, 0xd5, 0x31, 0x75, 0x7b, 0x8f, 0x53, 0xf6, - 0xbd, 0x08, 0x1a, 0x86, 0x81, 0x83, 0x85, 0x07, 0x44, 0x3e, - 0xf9, 0x72, 0x47, 0xe0, 0xf1, 0xbe, 0x43, 0x6a, 0xc3, 0x00, - 0x94, 0xd3, 0x19, 0x81, 0xde, 0xf3, 0xfd, 0x57, 0x98, 0xdc, - 0x57, 0xfe, 0x9f, 0x4b, 0x38, 0x23, 0xad, 0xa8, 0xd4, 0x07, - 0x07, 0x5c, 0xca, 0x25, 0xb8, 0x77, 0x7e, 0x45, 0x01, 0x9b, - 0xd4, 0x45, 0x5b, 0x94, 0x47, 0x18, 0x35, 0x66, 0xad, 0x0a, - 0x97, 0x06, 0xc6, 0xa7, 0xaa, 0x50, 0xbf, 0x07, 0x90, 0xfe, - 0x50, 0x8d, 0xd9, 0x1f, 0xdd, 0x33, 0xa4, 0xa7, 0x23, 0x48, - 0xa3, 0xd6, 0x5d, 0xb8, 0x9e, 0x97, 0x22, 0x32, 0xd3, 0x8a, - 0xb0, 0x5e, 0xb3, 0xc9, 0x0b, 0x24, 0x09, 0x66, 0x2e, 0xea, - 0x94, 0x9c, 0x90, 0x4f, 0x3e, 0x93, 0xcf, 0x30, 0x3f, 0xb4, - 0xbe, 0x5e, 0x6c, 0xaf, 0x1a, 0xff, 0x00, 0xc7, 0x74, 0x2e, - 0x8b, 0x08, 0xe9, 0x22, 0x61, 0xc5, 0xd1, 0x21, 0x15, 0xa1, - 0xba, 0x37, 0xd2, 0x24, 0xfd, 0xa5, 0x63, 0x9a, 0x97, 0xfa, - 0xfe, 0xb2, 0xa5, 0x1b, 0x3b, 0xbd, 0xb7, 0xb3, 0x2f, 0x3d, - 0xf1, 0x5a, 0xf2, 0xf6, 0xe4, 0x12, 0xe4, 0x3a, 0x26, 0x3c, - 0x21, 0x5c, 0xd6, 0x83, 0x65, 0x26, 0x86, 0xcc, 0x47, 0x84, - 0xd7, 0x26, 0x31, 0x31, 0xcf, 0x1d, 0xd6, 0xc4, 0xa4, 0xf2, - 0xd4, 0x25, 0x54, 0x2b, 0x81, 0x00, 0x1d, 0xd8, 0xdf, 0x04, - 0xb8, 0x4b, 0xcf, 0xe5, 0x16, 0xf4, 0x4a, 0x17, 0xc5, 0xd8, - 0xd3, 0xdf, 0xe4, 0xb7, 0xd3, 0x98, 0xb6, 0x73, 0xa0, 0x37, - 0x67, 0xbb, 0x8b, 0xc3, 0xfc, 0xac, 0x6e, 0x6c, 0x0e, 0x5d, - 0x44, 0xb0, 0x9d, 0xf8, 0xae, 0x17, 0x9b, 0xf9, 0xcb, 0xe8, - 0xfe, 0xc1, 0x7b, 0x78, 0x16, 0xf6, 0x74, 0x04, 0x7d, 0x38, - 0x17, 0x36, 0x09, 0xe3, 0x73, 0xa1, 0x76, 0x78, 0x7c, 0x14, - 0xb3, 0x83, 0x91, 0x59, 0x27, 0xea, 0x8c, 0x69, 0xe6, 0xa5, - 0x21, 0xcd, 0x78, 0xc7, 0x26, 0xa2, 0xfb, 0xd4, 0xf3, 0xaf, - 0x3f, 0xcf, 0x51, 0x10, 0xcc, 0x4b, 0xdd, 0x14, 0xf4, 0xf3, - 0xb8, 0xea, 0x07, 0xa7, 0x76, 0xe7, 0xbe, 0xec, 0x01, 0xb5, - 0x1e, 0xdc, 0xc3, 0x55, 0x19, 0xb1, 0x16, 0x3f, 0xfe, 0xd4, - 0x15, 0x49, 0xaf, 0x04, 0x9d, 0x38, 0xdd, 0x86, 0x53, 0x2a, - 0x80, 0x62, 0x42, 0xb7, 0x98, 0x42, 0x38, 0xaf, 0x9d, 0x87, - 0xe2, 0x3f, 0xea, 0x7e, 0x0a, 0x35, 0xb8, 0xee, 0xa5, 0x48, - 0x09, 0x08, 0xc5, 0x0d, 0xae, 0x01, 0xd5, 0xec, 0x43, 0x29, - 0x3b, 0xfb, 0x78, 0xc4, 0x96, 0x01, 0x1c, 0x21, 0xf2, 0xc9, - 0x44, 0x68, 0x24, 0x66, 0x86, 0x96, 0xb8, 0xc8, 0xe9, 0xd0, - 0x38, 0x0e, 0x96, 0x4d, 0xcc, 0x45, 0xab, 0xe1, 0xca, 0x50, - 0x10, 0x20, 0x01, 0xbe, 0x89, 0xc0, 0x43, 0x84, 0xd8, 0x38, - 0x52, 0xc0, 0xaf, 0x4d, 0x6b, 0x99, 0x0b, 0xc0, 0xc2, 0x99, - 0x07, 0xc6, 0x78, 0xa8, 0xf7, 0x32, 0x84, 0x86, 0xc5, 0x1a, - 0x95, 0x81, 0xa6, 0x6a, 0x05, 0xa7, 0x9d, 0x81, 0x0e, 0x32, - 0x18, 0x11, 0x4a, 0x0f, 0xfc, 0x17, 0x9e, 0xf7, 0xbf, 0x54, - 0x82, 0xed, 0xba, 0x6f, 0xbd, 0x41, 0xc1, 0xca, 0x55, 0x6c, - 0xff, 0x32, 0x6b, 0xa2, 0x59, 0xae, 0xae, 0x92, 0xc1, 0xb5, - 0xa6, 0xfc, 0xaf, 0x09, 0x48, 0x57, 0xd6, 0xee, 0x38, 0x99, - 0xb4, 0xe3, 0x8f, 0xb7, 0xfc, 0x6a, 0x0a, 0x3b, 0x08, 0xe1, - 0x81, 0x46, 0x11, 0xeb, 0x4a, 0x98, 0x43, 0x16, 0x16, 0x1f, - 0x68, 0xdb, 0xb9, 0x71, 0x19, 0xfe, 0x8b, 0xe6, 0xb7, 0x8b, - 0xc1, 0x3b, 0x90, 0xc5, 0x89, 0x1d, 0xca, 0xd9, 0x19, 0x6c, - 0xe8, 0x01, 0xf4, 0x19, 0x50, 0x3e, 0x93, 0x84, 0xbf, 0xaa, - 0x9a, 0x3d, 0x20, 0x4c, 0x4e, 0x79, 0x83, 0xec, 0x46, 0x83, - 0x09, 0x00, 0xc3, 0x8a, 0xad, 0xd5, 0x2b, 0x08, 0xd1, 0x47, - 0xac, 0x96, 0x0e, 0x34, 0xf0, 0x89, 0x1a, 0x0f, 0xf2, 0x51, - 0x8d, 0x2c, 0xb5, 0xf2, 0xfe, 0x8c, 0xdc, 0xed, 0x41, 0x51, - 0x8c, 0x71, 0x12, 0x05, 0xec, 0x68, 0x21, 0x86, 0x94, 0xf4, - 0xfb, 0xfc, 0xaa, 0xc7, 0xc7, 0xbb, 0x74, 0xa2, 0x8b, 0x76, - 0x62, 0x1c, 0x64, 0x11, 0xa0, 0xd0, 0x5f, 0x46, 0x64, 0xd4, - 0x47, 0xbc, 0x8a, 0x5b, 0x2b, 0xc2, 0xc1, 0x88, 0xb2, 0x30, - 0xbd, 0x02, 0x17, 0x18, 0x0a, 0xd7, 0x9b, 0x3d, 0x91, 0xb9, - 0x2c, 0x83, 0x24, 0xb4, 0x8b, 0x9d, 0x02, 0xaf, 0xb2, 0x4e, - 0x57, 0xe1, 0xb0, 0xa2, 0xf3, 0x7c, 0xde, 0x15, 0xba, 0x60, - 0xbd, 0x80, 0xbe, 0x6d, 0x6f, 0x16, 0xb3, 0xb9, 0xb8, 0x6a, - 0x55, 0xb4, 0xad, 0xf1, 0x01, 0x63, 0x40, 0x01, 0xba, 0x5b, - 0x5d, 0x9a, 0xbc, 0xf0, 0x58, 0xa8, 0xf7, 0xbb, 0x8e, 0x91, - 0xa0, 0xfd, 0x8c, 0x49, 0x8f, 0x1a, 0xbb, 0x2a, 0x28, 0x0d, - 0x7a, 0xa6, 0xc2, 0xd7, 0x41, 0x16, 0xed, 0x61, 0x5d, 0xc4, - 0xe7, 0xcf, 0x2b, 0xb4, 0xb9, 0x10, 0x6f, 0x38, 0x42, 0x88, - 0x94, 0x6e, 0x75, 0x2c, 0x89, 0xac, 0xa0, 0xe9, 0x81, 0xec, - 0x2d, 0x62, 0xa3, 0xba, 0x3c, 0x40, 0xdb, 0x65, 0x56, 0x8e, - 0xc7, 0xd8, 0xb0, 0xd4, 0xf9, 0x04, 0x2b, 0x4c, 0x83, 0x20, - 0xbe, 0xad, 0xb8, 0x66, 0x1c, 0x20, 0x32, 0xb3, 0xf6, 0xf1, - 0xac, 0xa5, 0x8a, 0x72, 0x9a, 0x41, 0x1d, 0x6e, 0xa0, 0x16, - 0xe0, 0x0c, 0x39, 0xb6, 0x06, 0x96, 0x55, 0xb7, 0xda, 0x1c, - 0x54, 0x08, 0xf6, 0x30, 0x1b, 0xb6, 0x57, 0xca, 0x7d, 0xb0, - 0xdc, 0x9e, 0xfa, 0x5c, 0x38, 0x7f, 0xac, 0x37, 0x80, 0x26, - 0xba, 0xdc, 0x7a, 0x95, 0xe5, 0x7b, 0x90, 0xf3, 0x1a, 0xc7, - 0x31, 0x8e, 0x97, 0x07, 0x9a, 0xb8, 0xbe, 0xae, 0x16, 0x11, - 0x44, 0xb0, 0x01, 0xf5, 0xe8, 0x37, 0x1a, 0x67, 0xfe, 0x00, - 0x8f, 0xa1, 0xf5, 0x03, 0x7c, 0xed, 0xbf, 0x42, 0xf4, 0x78, - 0x2b, 0xfb, 0x9f, 0x8c, 0xb3, 0x63, 0x0b, 0x42, 0xbf, 0xae, - 0x8e, 0xf7, 0x6f, 0xb4, 0xb1, 0xe8, 0x75, 0x8c, 0xdf, 0x69, - 0xc6, 0xe1, 0x3a, 0x26, 0x05, 0x47, 0x03, 0x61, 0xfc, 0xc5, - 0xa9, 0xc1, 0x4f, 0x70, 0xce, 0x18, 0xbb, 0x01, 0xe6, 0x11, - 0xc9, 0xa7, 0x7e, 0x65, 0xb8, 0xdc, 0x61, 0x3d, 0x9b, 0x47, - 0x2e, 0x34, 0x16, 0xa1, 0x73, 0x61, 0x91, 0xed, 0x45, 0xe3, - 0x01, 0x26, 0xee, 0x16, 0x76, 0x0e, 0xb7, 0xa1, 0xc0, 0xb3, - 0xac, 0xf0, 0xa5, 0x3b, 0xf6, 0x64, 0x1b, 0x93, 0x94, 0x5c, - 0x8f, 0x4c, 0x25, 0x89, 0xa1, 0x92, 0x32, 0x50, 0x28, 0x03, - 0x8b, 0xff, 0xc4, 0xf6, 0x2a, 0xe8, 0xda, 0x8d, 0xfe, 0x49, - 0xb5, 0x33, 0x01, 0xca, 0x2d, 0x2d, 0x60, 0x33, 0xd6, 0x30, - 0x38, 0x8a, 0x1e, 0x38, 0x3d, 0x78, 0x11, 0xff, 0xef, 0x1c, - 0x82, 0x33, 0xbb, 0xfc, 0x95, 0xef, 0x79, 0xb0, 0x59, 0xbd, - 0x2c, 0xfd, 0x1c, 0x3f, 0x42, 0xda, 0xdf, 0xbd, 0x56, 0xf2, - 0xd6, 0xae, 0x2d, 0x23, 0x36, 0xed, 0xb1, 0x8d, 0x62, 0x58, - 0x71, 0x66, 0x21, 0xe0, 0x4d, 0xee, 0xf4, 0x16, 0x48, 0xa6, - 0xcf, 0x1a, 0x8a, 0xf0, 0x8a, 0xd1, 0x53, 0xf6, 0xe5, 0x4e, - 0x98, 0x9d, 0x7d, 0x6c, 0xd2, 0xdf, 0xb8, 0x2d, 0xa6, 0xe5, - 0x8a, 0xd6, 0xb5, 0xae, 0x61, 0x96, 0xfa, 0x6b, 0xca, 0x7f, - 0x08, 0xc2, 0x2b, 0x67, 0x30, 0x5e, 0x21, 0x3b, 0xa4, 0x84, - 0x95, 0xc6, 0x2f, 0x2c, 0x1f, 0xe2, 0x0e, 0x1a, 0xc3, 0x89, - 0x6a, 0x6a, 0xe7, 0x08, 0xf9, 0x74, 0xee, 0x4f, 0xcd, 0x5e, - 0xe8, 0xce, 0x55, 0x4d, 0x38, 0xed, 0x62, 0x35, 0xee, 0xfc, - 0x14, 0x56, 0xb9, 0xf0, 0xce, 0x29, 0x1c, 0x21, 0x40, 0x51, - 0xe4, 0x76, 0xe3, 0xa6, 0xd8, 0x3d, 0x54, 0x58, 0x51, 0xe5, - 0xf0, 0xdc, 0x50, 0x39, 0x43, 0x67, 0x44, 0x14, 0xcc, 0x6e, - 0x5a, 0xb1, 0x15, 0xec, 0xb4, 0x3e, 0x0e, 0xef, 0x8e, 0x72, - 0x6a, 0xdf, 0xba, 0x37, 0x27, 0x15, 0x62, 0xc3, 0xbd, 0xee, - 0x1d, 0xb1, 0x24, 0x2f, 0x57, 0x51, 0xf1, 0x8f, 0xfb, 0xd1, - 0x10, 0x6f, 0x11, 0xb9, 0x94, 0x5c, 0x9c, 0x12, 0x26, 0x46, - 0x46, 0x7b, 0x31, 0x0e, 0xad, 0x93, 0xe4, 0x4f, 0x09, 0xe3, - 0xbf, 0xc5, 0xe3, 0x11, 0xa4, 0x25, 0x8d, 0x9b, 0x8e, 0x26, - 0x02, 0xaa, 0x72, 0x18, 0xce, 0x89, 0x67, 0xfc, 0x1c, 0x28, - 0xab, 0x11, 0x5a, 0x84, 0x23, 0x7c, 0x91, 0xac, 0x6b, 0x48, - 0x9c, 0x39, 0x14, 0xa3, 0xac, 0xc6, 0x30, 0xbc, 0x1e, 0x0c, - 0xd3, 0x34, 0x19, 0xa9, 0x2b, 0xe7, 0xa4, 0xf8, 0xc1, 0xf0, - 0x3c, 0x60, 0xa2, 0xf7, 0x51, 0x86, 0xcf, 0x42, 0xad, 0x34, - 0x81, 0xa6, 0x93, 0x0b, 0x88, 0x4c, 0xbf, 0xd2, 0x4f, 0xe0, - 0xdb, 0xb2, 0x1d, 0x6d, 0xb2, 0x5c, 0xac, 0xd8, 0x64, 0x85, - 0xc3, 0x35, 0x6e, 0x5d, 0xaf, 0x63, 0x3e, 0x47, 0xb7, 0x5d, - 0x39, 0x21, 0x36, 0xa6, 0xd4, 0xef, 0x9e, 0x1c, 0x1f, 0xd6, - 0xa4, 0xe0, 0xe4, 0x22, 0x75, 0x1e, 0xeb, 0x15, 0xb4, 0xee, - 0x43, 0x37, 0x06, 0xf9, 0x77, 0xbf, 0x68, 0x9b, 0x9a, 0x7f, - 0x38, 0x30, 0x87, 0xde, 0x0c, 0x6a, 0x39, 0x41, 0xe1, 0xed, - 0xf4, 0x18, 0x6e, 0x29, 0x44, 0xf0, 0xfc, 0xb6, 0x09, 0x5b, - 0xb3, 0x30, 0xc9, 0x0a, 0x8c, 0x41, 0x6f, 0x1e, 0x95, 0xbe, - 0x93, 0x3c, 0x11, 0x9b, 0x24, 0xf7, 0x57, 0xb8, 0xc5, 0x9b, - 0x08, 0xaa, 0xcd, 0x24, 0x86, 0x98, 0x59, 0x0f, 0xc6, 0x0e, - 0xd2, 0x71, 0xb2, 0x5e, 0xae, 0x72, 0xc9, 0x69, 0x3b, 0x80, - 0xc2, 0x27, +/* ./certs/mldsa/bench_mldsa_65_key.der */ +static const unsigned char bench_mldsa_65_key[] = +{ + 0x15, 0xC9, 0xE5, 0x53, 0x2F, 0xD8, 0x1F, 0xB4, 0xA3, 0x9F, + 0xAE, 0xAD, 0xB3, 0x10, 0xD0, 0x72, 0x69, 0xD3, 0x02, 0xF3, + 0xDF, 0x67, 0x5A, 0x31, 0x52, 0x19, 0xCA, 0x39, 0x27, 0x77, + 0x61, 0x6D, 0x72, 0xDD, 0x85, 0x06, 0xF6, 0x94, 0x0A, 0x57, + 0x52, 0xCD, 0xAC, 0x83, 0x4A, 0xE5, 0xBE, 0xA4, 0x30, 0x79, + 0x9E, 0xC6, 0xD6, 0x04, 0xC8, 0x73, 0xDC, 0x5E, 0x41, 0x75, + 0x2F, 0xAC, 0x76, 0x57, 0x03, 0x08, 0x46, 0xCB, 0xAF, 0x4C, + 0x6A, 0x4F, 0x20, 0x18, 0xB3, 0x2E, 0x11, 0x54, 0xB5, 0x94, + 0xE6, 0x6F, 0x76, 0xF6, 0xB9, 0x73, 0x9A, 0x07, 0x73, 0xE8, + 0x90, 0xD1, 0x04, 0xDA, 0xC5, 0x97, 0xB9, 0x52, 0x51, 0xC8, + 0xC9, 0xCC, 0x87, 0x29, 0xA1, 0xDE, 0x79, 0x9B, 0xF8, 0x7F, + 0x80, 0x3F, 0xFD, 0xB3, 0x24, 0xA5, 0xBA, 0xF5, 0xD6, 0xD4, + 0x07, 0xBD, 0xA7, 0x1B, 0xD0, 0xE1, 0xD0, 0x43, 0x14, 0x52, + 0x27, 0x03, 0x33, 0x76, 0x00, 0x67, 0x30, 0x23, 0x76, 0x34, + 0x72, 0x02, 0x41, 0x62, 0x12, 0x43, 0x86, 0x30, 0x18, 0x28, + 0x46, 0x27, 0x45, 0x20, 0x88, 0x33, 0x54, 0x10, 0x03, 0x81, + 0x44, 0x50, 0x06, 0x44, 0x56, 0x30, 0x37, 0x38, 0x38, 0x46, + 0x03, 0x85, 0x01, 0x86, 0x43, 0x80, 0x78, 0x28, 0x83, 0x55, + 0x37, 0x44, 0x80, 0x12, 0x17, 0x51, 0x78, 0x46, 0x22, 0x01, + 0x53, 0x54, 0x63, 0x87, 0x77, 0x38, 0x11, 0x81, 0x43, 0x30, + 0x15, 0x47, 0x66, 0x11, 0x40, 0x65, 0x70, 0x56, 0x62, 0x28, + 0x21, 0x65, 0x30, 0x45, 0x63, 0x53, 0x31, 0x80, 0x81, 0x71, + 0x23, 0x62, 0x85, 0x03, 0x07, 0x56, 0x16, 0x28, 0x18, 0x35, + 0x07, 0x38, 0x60, 0x68, 0x17, 0x30, 0x15, 0x20, 0x04, 0x13, + 0x13, 0x61, 0x51, 0x58, 0x00, 0x37, 0x51, 0x58, 0x14, 0x06, + 0x12, 0x55, 0x13, 0x46, 0x76, 0x05, 0x51, 0x87, 0x32, 0x62, + 0x50, 0x41, 0x88, 0x24, 0x50, 0x31, 0x65, 0x36, 0x31, 0x02, + 0x75, 0x35, 0x78, 0x27, 0x36, 0x08, 0x01, 0x77, 0x22, 0x77, + 0x30, 0x80, 0x11, 0x21, 0x28, 0x26, 0x68, 0x27, 0x13, 0x70, + 0x50, 0x44, 0x88, 0x20, 0x50, 0x67, 0x65, 0x74, 0x17, 0x46, + 0x50, 0x16, 0x42, 0x75, 0x35, 0x12, 0x60, 0x12, 0x17, 0x13, + 0x36, 0x72, 0x04, 0x77, 0x07, 0x55, 0x20, 0x27, 0x15, 0x02, + 0x25, 0x12, 0x57, 0x71, 0x37, 0x45, 0x43, 0x34, 0x40, 0x31, + 0x78, 0x50, 0x31, 0x28, 0x17, 0x84, 0x87, 0x43, 0x25, 0x75, + 0x58, 0x05, 0x61, 0x56, 0x41, 0x44, 0x57, 0x67, 0x85, 0x54, + 0x00, 0x88, 0x88, 0x50, 0x68, 0x11, 0x14, 0x42, 0x08, 0x74, + 0x73, 0x00, 0x38, 0x08, 0x45, 0x28, 0x62, 0x43, 0x36, 0x20, + 0x30, 0x10, 0x87, 0x83, 0x67, 0x62, 0x02, 0x48, 0x46, 0x50, + 0x08, 0x08, 0x41, 0x43, 0x78, 0x22, 0x65, 0x87, 0x43, 0x84, + 0x25, 0x36, 0x58, 0x64, 0x30, 0x10, 0x20, 0x68, 0x82, 0x47, + 0x60, 0x31, 0x76, 0x68, 0x74, 0x68, 0x75, 0x61, 0x16, 0x26, + 0x82, 0x50, 0x32, 0x61, 0x41, 0x22, 0x38, 0x20, 0x86, 0x75, + 0x74, 0x00, 0x77, 0x12, 0x81, 0x35, 0x51, 0x78, 0x88, 0x64, + 0x82, 0x00, 0x41, 0x55, 0x62, 0x87, 0x51, 0x41, 0x74, 0x51, + 0x53, 0x27, 0x33, 0x84, 0x68, 0x86, 0x57, 0x60, 0x44, 0x30, + 0x22, 0x32, 0x10, 0x52, 0x22, 0x83, 0x48, 0x53, 0x66, 0x74, + 0x14, 0x52, 0x32, 0x71, 0x41, 0x08, 0x83, 0x67, 0x41, 0x38, + 0x46, 0x80, 0x88, 0x14, 0x84, 0x30, 0x85, 0x35, 0x46, 0x20, + 0x54, 0x84, 0x56, 0x84, 0x54, 0x82, 0x14, 0x11, 0x52, 0x07, + 0x86, 0x46, 0x05, 0x82, 0x26, 0x85, 0x75, 0x07, 0x88, 0x75, + 0x51, 0x17, 0x54, 0x32, 0x68, 0x66, 0x08, 0x23, 0x66, 0x06, + 0x42, 0x28, 0x00, 0x84, 0x27, 0x27, 0x43, 0x47, 0x12, 0x27, + 0x13, 0x15, 0x17, 0x74, 0x85, 0x14, 0x12, 0x62, 0x06, 0x47, + 0x17, 0x60, 0x00, 0x10, 0x85, 0x16, 0x55, 0x64, 0x46, 0x62, + 0x77, 0x05, 0x51, 0x23, 0x52, 0x37, 0x51, 0x78, 0x35, 0x66, + 0x14, 0x15, 0x78, 0x40, 0x16, 0x54, 0x67, 0x30, 0x61, 0x24, + 0x26, 0x86, 0x56, 0x83, 0x62, 0x78, 0x88, 0x83, 0x50, 0x06, + 0x13, 0x21, 0x33, 0x73, 0x16, 0x44, 0x86, 0x77, 0x65, 0x28, + 0x12, 0x40, 0x62, 0x54, 0x55, 0x84, 0x00, 0x11, 0x77, 0x38, + 0x71, 0x51, 0x38, 0x32, 0x33, 0x67, 0x15, 0x77, 0x24, 0x33, + 0x44, 0x11, 0x05, 0x65, 0x13, 0x03, 0x72, 0x63, 0x81, 0x58, + 0x08, 0x03, 0x34, 0x23, 0x61, 0x00, 0x02, 0x63, 0x86, 0x40, + 0x03, 0x71, 0x34, 0x27, 0x45, 0x10, 0x34, 0x26, 0x83, 0x28, + 0x31, 0x35, 0x26, 0x05, 0x58, 0x41, 0x11, 0x10, 0x65, 0x35, + 0x22, 0x42, 0x28, 0x88, 0x46, 0x06, 0x57, 0x33, 0x88, 0x46, + 0x04, 0x86, 0x88, 0x88, 0x51, 0x74, 0x82, 0x27, 0x58, 0x14, + 0x11, 0x08, 0x13, 0x16, 0x61, 0x16, 0x14, 0x44, 0x83, 0x85, + 0x71, 0x44, 0x55, 0x82, 0x16, 0x62, 0x85, 0x05, 0x43, 0x41, + 0x73, 0x53, 0x60, 0x01, 0x80, 0x68, 0x33, 0x13, 0x43, 0x44, + 0x73, 0x36, 0x65, 0x35, 0x22, 0x26, 0x13, 0x31, 0x36, 0x83, + 0x30, 0x27, 0x15, 0x11, 0x54, 0x53, 0x24, 0x84, 0x75, 0x24, + 0x72, 0x78, 0x34, 0x24, 0x35, 0x80, 0x06, 0x38, 0x88, 0x11, + 0x41, 0x01, 0x34, 0x87, 0x77, 0x20, 0x14, 0x50, 0x55, 0x12, + 0x17, 0x48, 0x87, 0x74, 0x58, 0x42, 0x31, 0x46, 0x36, 0x37, + 0x26, 0x50, 0x04, 0x75, 0x77, 0x15, 0x41, 0x53, 0x04, 0x04, + 0x26, 0x61, 0x65, 0x87, 0x55, 0x56, 0x07, 0x81, 0x28, 0x21, + 0x41, 0x61, 0x41, 0x50, 0x17, 0x47, 0x25, 0x50, 0x20, 0x83, + 0x46, 0x87, 0x18, 0x45, 0x40, 0x21, 0x06, 0x08, 0x12, 0x25, + 0x71, 0x13, 0x35, 0x55, 0x54, 0x61, 0x00, 0x52, 0x74, 0x78, + 0x13, 0x84, 0x55, 0x40, 0x14, 0x40, 0x78, 0x12, 0x88, 0x43, + 0x33, 0x24, 0x66, 0x88, 0x22, 0x44, 0x15, 0x37, 0x81, 0x27, + 0x84, 0x18, 0x28, 0x11, 0x58, 0x51, 0x71, 0x21, 0x02, 0x83, + 0x70, 0x48, 0x32, 0x46, 0x00, 0x70, 0x17, 0x30, 0x63, 0x21, + 0x46, 0x60, 0x50, 0x72, 0x77, 0x45, 0x83, 0x75, 0x26, 0x31, + 0x47, 0x34, 0x47, 0x84, 0x87, 0x63, 0x22, 0x83, 0x21, 0x10, + 0x21, 0x51, 0x47, 0x46, 0x31, 0x06, 0x57, 0x82, 0x65, 0x24, + 0x61, 0x66, 0x24, 0x68, 0x14, 0x03, 0x43, 0x41, 0x04, 0x14, + 0x47, 0x61, 0x57, 0x87, 0x43, 0x83, 0x43, 0x25, 0x87, 0x36, + 0x72, 0x51, 0x38, 0x51, 0x54, 0x54, 0x84, 0x40, 0x15, 0x30, + 0x35, 0x34, 0x43, 0x61, 0x63, 0x42, 0x77, 0x31, 0x42, 0x06, + 0x61, 0x03, 0x01, 0x41, 0x08, 0x84, 0x02, 0x65, 0x04, 0x72, + 0x32, 0x00, 0x21, 0x10, 0x54, 0x73, 0x04, 0x42, 0x48, 0x11, + 0x74, 0x18, 0x63, 0x73, 0x28, 0x61, 0x36, 0x80, 0x20, 0x86, + 0x24, 0x42, 0x16, 0x11, 0x71, 0x83, 0x78, 0x38, 0x82, 0x47, + 0x67, 0x18, 0x56, 0x86, 0x85, 0x66, 0x18, 0x24, 0x50, 0x74, + 0x72, 0x02, 0x66, 0x83, 0x63, 0x08, 0x25, 0x32, 0x15, 0x78, + 0x33, 0x08, 0x34, 0x44, 0x08, 0x28, 0x10, 0x25, 0x40, 0x11, + 0x04, 0x76, 0x60, 0x16, 0x65, 0x16, 0x13, 0x30, 0x53, 0x14, + 0x77, 0x06, 0x06, 0x88, 0x64, 0x47, 0x08, 0x23, 0x11, 0x56, + 0x46, 0x61, 0x48, 0x64, 0x73, 0x66, 0x07, 0x65, 0x41, 0x24, + 0x67, 0x45, 0x42, 0x18, 0x62, 0x01, 0x70, 0x88, 0x03, 0x77, + 0x22, 0x85, 0x77, 0x02, 0x85, 0x03, 0x65, 0x15, 0x57, 0x51, + 0x28, 0x72, 0x53, 0x32, 0x05, 0x58, 0x84, 0x54, 0x03, 0x81, + 0x63, 0x23, 0x38, 0x27, 0x01, 0x85, 0x61, 0x12, 0x28, 0x62, + 0x22, 0x67, 0x56, 0x66, 0x63, 0x08, 0x74, 0x63, 0x21, 0x01, + 0x46, 0x10, 0x08, 0x18, 0x07, 0x86, 0x47, 0x70, 0x50, 0x25, + 0x45, 0x06, 0x55, 0x88, 0x46, 0x11, 0x23, 0x84, 0x70, 0x02, + 0x24, 0x88, 0x52, 0x60, 0x12, 0x72, 0x63, 0x05, 0x81, 0x21, + 0x26, 0x07, 0x64, 0x03, 0x56, 0x48, 0x27, 0x04, 0x38, 0x86, + 0x25, 0x65, 0x21, 0x25, 0x77, 0x21, 0x62, 0x28, 0x82, 0x71, + 0x85, 0x73, 0x78, 0x24, 0x78, 0x51, 0x61, 0x02, 0x81, 0x14, + 0x67, 0x61, 0x08, 0x88, 0x31, 0x77, 0x06, 0x24, 0x45, 0x13, + 0x67, 0x67, 0x54, 0x67, 0x00, 0x12, 0x62, 0x54, 0x11, 0x27, + 0x51, 0x48, 0x07, 0x33, 0x01, 0x24, 0x04, 0x64, 0x11, 0x83, + 0x18, 0x52, 0x55, 0x23, 0x24, 0x58, 0x53, 0x78, 0x30, 0x43, + 0x31, 0x76, 0x62, 0x01, 0x08, 0x73, 0x21, 0x32, 0x12, 0x78, + 0x22, 0x68, 0x33, 0x45, 0x33, 0x73, 0x02, 0x74, 0x21, 0x81, + 0x02, 0x16, 0x54, 0x31, 0x55, 0x76, 0x25, 0x76, 0x41, 0x36, + 0x75, 0x22, 0x78, 0x16, 0x60, 0x48, 0x58, 0x28, 0x83, 0x50, + 0x88, 0x66, 0x72, 0x70, 0x21, 0x21, 0x24, 0x16, 0x62, 0x57, + 0x20, 0x13, 0x80, 0x61, 0x15, 0x45, 0x42, 0x86, 0x00, 0x25, + 0x77, 0x58, 0x84, 0x01, 0x66, 0x16, 0x46, 0x56, 0x68, 0x57, + 0x12, 0x20, 0x75, 0x60, 0x41, 0x85, 0x02, 0x88, 0x12, 0x68, + 0x20, 0x02, 0x41, 0x18, 0x87, 0x13, 0x17, 0x33, 0x74, 0x11, + 0x08, 0x37, 0x47, 0x08, 0x31, 0x67, 0x08, 0x50, 0x61, 0x54, + 0x56, 0x71, 0x63, 0x26, 0x85, 0x22, 0x07, 0x87, 0x71, 0x28, + 0x20, 0x47, 0x48, 0x66, 0x54, 0x38, 0x03, 0x41, 0x38, 0x21, + 0x70, 0x50, 0x66, 0x53, 0x56, 0x70, 0x74, 0x55, 0x70, 0x28, + 0x52, 0x01, 0x42, 0x65, 0x53, 0x73, 0x32, 0x33, 0x67, 0x42, + 0x67, 0x85, 0x18, 0x45, 0x12, 0x37, 0x58, 0x82, 0x13, 0x73, + 0x78, 0x77, 0x03, 0x42, 0x04, 0x65, 0x55, 0x66, 0x07, 0x25, + 0x07, 0x37, 0x40, 0x78, 0x66, 0x71, 0x11, 0x21, 0x43, 0x25, + 0x87, 0x40, 0x58, 0x63, 0x33, 0x43, 0x52, 0x10, 0x31, 0x53, + 0x56, 0x48, 0x05, 0x55, 0x77, 0x77, 0x26, 0x87, 0x28, 0x43, + 0x61, 0x46, 0x11, 0x76, 0x82, 0x50, 0x42, 0x04, 0x32, 0x88, + 0x18, 0x66, 0x16, 0x36, 0x64, 0x41, 0x38, 0x17, 0x55, 0x43, + 0x06, 0x25, 0x80, 0x27, 0x21, 0x16, 0x81, 0x22, 0x64, 0x60, + 0x38, 0x16, 0x82, 0x40, 0x72, 0x34, 0x73, 0x52, 0x61, 0x85, + 0x11, 0x16, 0x00, 0x25, 0x03, 0x30, 0x06, 0x80, 0x21, 0x56, + 0x64, 0x52, 0x23, 0x26, 0x37, 0x75, 0x73, 0x65, 0x53, 0x27, + 0x37, 0x47, 0x56, 0x76, 0x80, 0x38, 0x53, 0x62, 0x14, 0x24, + 0x64, 0x03, 0x66, 0x21, 0x72, 0x16, 0x36, 0x34, 0x11, 0x65, + 0x61, 0x62, 0x86, 0x02, 0x83, 0x27, 0x80, 0x82, 0x70, 0x72, + 0x52, 0x60, 0x20, 0x87, 0x58, 0x58, 0x14, 0x38, 0x47, 0x03, + 0x10, 0x72, 0x60, 0x48, 0x02, 0x01, 0x17, 0x21, 0x61, 0x62, + 0x38, 0x64, 0x27, 0x53, 0x57, 0x13, 0x68, 0x18, 0x26, 0x62, + 0x43, 0x42, 0x21, 0x85, 0x70, 0x23, 0x58, 0x13, 0x72, 0x04, + 0x04, 0x08, 0x05, 0x82, 0x26, 0x18, 0x82, 0x47, 0x87, 0x71, + 0x32, 0x28, 0x68, 0x25, 0x87, 0x24, 0x06, 0x74, 0x41, 0x44, + 0x08, 0x64, 0x68, 0x30, 0x24, 0x44, 0x21, 0x73, 0x03, 0x45, + 0x70, 0x41, 0x06, 0x78, 0x38, 0x33, 0x88, 0x13, 0x31, 0x14, + 0x18, 0x17, 0x45, 0x06, 0x26, 0x67, 0x66, 0x73, 0x82, 0x56, + 0x66, 0x88, 0x70, 0x22, 0x55, 0x47, 0x27, 0x50, 0x86, 0x55, + 0x53, 0x00, 0x28, 0x55, 0x40, 0x62, 0xE9, 0x37, 0x65, 0xE1, + 0x30, 0x48, 0x6B, 0x35, 0x76, 0x96, 0x05, 0x21, 0xCE, 0xED, + 0x46, 0xAE, 0x7E, 0x6D, 0xC9, 0xF1, 0xC9, 0xB3, 0x7A, 0xA7, + 0xDE, 0xA7, 0x62, 0x18, 0x11, 0xC0, 0xD8, 0xD0, 0x17, 0x0F, + 0x38, 0xAF, 0x0E, 0x3D, 0xAF, 0xE6, 0x63, 0xB0, 0xC4, 0x68, + 0x4E, 0x29, 0xA4, 0xF4, 0x20, 0x22, 0xBC, 0x82, 0x15, 0x1D, + 0x08, 0x39, 0x18, 0xFE, 0x69, 0x55, 0x06, 0x3D, 0xF4, 0xA3, + 0xE7, 0x29, 0x23, 0xA4, 0xD9, 0xA4, 0x22, 0x06, 0x2D, 0x5F, + 0x22, 0xB3, 0x9B, 0x1C, 0xB6, 0x3E, 0xF3, 0xF4, 0x8A, 0xB3, + 0x35, 0x18, 0x4C, 0x1F, 0xAF, 0xD4, 0xCF, 0x5B, 0x9B, 0xA7, + 0xF8, 0xD2, 0x86, 0x71, 0x8E, 0x64, 0x96, 0xD1, 0x6E, 0xAD, + 0xD2, 0x7E, 0x16, 0x5B, 0x38, 0x91, 0x0E, 0x40, 0xAA, 0x07, + 0x6A, 0x63, 0x2A, 0xC0, 0x5B, 0x14, 0x79, 0x52, 0xCB, 0x23, + 0x6E, 0x76, 0x95, 0xD0, 0x90, 0x6C, 0x18, 0xE7, 0x89, 0xEE, + 0xB9, 0x7F, 0x33, 0x08, 0x35, 0x8F, 0xA3, 0xAA, 0xAA, 0x10, + 0x2F, 0x8B, 0xC9, 0x6C, 0x1D, 0x95, 0xB5, 0xB8, 0x54, 0x0D, + 0x67, 0x86, 0xD4, 0x5D, 0xAE, 0x8F, 0x33, 0x20, 0xE2, 0x35, + 0xDA, 0x71, 0x53, 0x24, 0xAD, 0x16, 0x84, 0x2E, 0x98, 0xCD, + 0x00, 0xA2, 0x69, 0x6A, 0x12, 0x9A, 0x86, 0xF3, 0x9F, 0x18, + 0x6C, 0x9F, 0x24, 0xBE, 0xB3, 0xF4, 0x90, 0xB3, 0xC4, 0xA4, + 0x8B, 0xCE, 0x88, 0x60, 0xA0, 0x91, 0xB8, 0x9A, 0x52, 0xE5, + 0xFE, 0x16, 0x6D, 0xFF, 0xB3, 0xDC, 0x50, 0x79, 0xFE, 0x31, + 0x24, 0xD4, 0x59, 0x5F, 0xF9, 0xB4, 0x70, 0x0B, 0x15, 0x93, + 0xD9, 0xE9, 0x92, 0xB6, 0xF5, 0x80, 0x34, 0x63, 0x66, 0x78, + 0xCF, 0xA9, 0xCE, 0x48, 0xBF, 0xBE, 0x9E, 0xFA, 0xDD, 0x7D, + 0xF4, 0x16, 0xE2, 0xD2, 0x98, 0x13, 0xE2, 0x76, 0xDD, 0x0A, + 0xC7, 0x2D, 0xE8, 0x88, 0x8E, 0x1A, 0xC0, 0xFC, 0xE8, 0x35, + 0xAF, 0x5D, 0xE2, 0x4C, 0x96, 0x82, 0x4C, 0xE5, 0x89, 0x14, + 0xB8, 0x27, 0x39, 0xB5, 0x55, 0xC5, 0xA5, 0x8A, 0x01, 0xCC, + 0xFD, 0xBD, 0xA9, 0xEC, 0xAE, 0xC0, 0xE7, 0xD7, 0xF8, 0x11, + 0x84, 0x35, 0x99, 0x26, 0xB6, 0xC6, 0xF7, 0x35, 0xE0, 0x93, + 0xD8, 0xD7, 0xBF, 0xC0, 0xC8, 0x44, 0xFD, 0x46, 0xF5, 0xB7, + 0xC5, 0x5A, 0x75, 0xD3, 0xC7, 0xFA, 0xF4, 0xE1, 0xC0, 0x84, + 0x5E, 0x31, 0xFE, 0x69, 0x80, 0x5A, 0xE5, 0x4B, 0x9B, 0x5B, + 0xA4, 0x5C, 0x23, 0xAA, 0x85, 0xC9, 0x9A, 0xBD, 0x71, 0x49, + 0x11, 0x30, 0x8B, 0x81, 0xA1, 0xDD, 0xF8, 0xB8, 0x74, 0x91, + 0xE7, 0xF7, 0x82, 0x42, 0x70, 0x22, 0x95, 0xF0, 0xCC, 0x9F, + 0x02, 0x33, 0x0F, 0x08, 0x3B, 0x04, 0x31, 0xD7, 0x4F, 0x86, + 0x78, 0x49, 0xB9, 0x90, 0xF5, 0x8F, 0xEC, 0x12, 0x84, 0x52, + 0x03, 0x1F, 0x64, 0x5E, 0xF0, 0x2A, 0xEB, 0x87, 0xA5, 0xEC, + 0x95, 0x25, 0x64, 0x25, 0x49, 0x3B, 0x3C, 0x30, 0xED, 0x3B, + 0xE9, 0x36, 0xFD, 0xAE, 0xA6, 0x26, 0xD3, 0x45, 0xBC, 0x1B, + 0x78, 0x5F, 0xCE, 0x27, 0x45, 0x1C, 0xD5, 0xF9, 0xA7, 0xDA, + 0x62, 0xE6, 0x7E, 0xD3, 0xBB, 0xD8, 0x0A, 0xFD, 0xF5, 0xA5, + 0x31, 0x09, 0x6E, 0x40, 0xE8, 0xCF, 0xC1, 0x42, 0x8E, 0x2E, + 0x75, 0x65, 0xAA, 0x91, 0x6F, 0xC7, 0x75, 0x3A, 0x1E, 0x40, + 0x99, 0x71, 0x5E, 0x00, 0xAE, 0x07, 0xAD, 0x43, 0x49, 0xDD, + 0x6D, 0x36, 0xE3, 0xA8, 0xDF, 0x2C, 0x39, 0xA2, 0x57, 0xD7, + 0x93, 0xA1, 0x16, 0x80, 0x89, 0xA6, 0x56, 0x69, 0x75, 0xEA, + 0xB8, 0xB2, 0x43, 0x0C, 0xDF, 0x46, 0x05, 0x9A, 0x39, 0x08, + 0x3B, 0xB6, 0x76, 0xE3, 0x5B, 0x98, 0x5B, 0x48, 0xC0, 0x11, + 0x14, 0x6F, 0xCD, 0xB7, 0xAA, 0x08, 0x1E, 0x53, 0x9B, 0x94, + 0x9D, 0xA2, 0xE6, 0x99, 0xCB, 0x1C, 0xB4, 0xBF, 0x55, 0x84, + 0x12, 0xC9, 0xF1, 0xF0, 0x94, 0xD9, 0x7D, 0x61, 0xA9, 0xE7, + 0xE6, 0xC1, 0xE2, 0xCA, 0x6B, 0x36, 0x80, 0x72, 0x31, 0x79, + 0xBF, 0xE7, 0x3E, 0x99, 0x9E, 0xD5, 0x59, 0xD4, 0x97, 0x14, + 0xD5, 0xFA, 0x93, 0x37, 0x8A, 0x65, 0xA5, 0xB6, 0x4E, 0xBA, + 0xB3, 0x84, 0xF2, 0xC1, 0x55, 0xB6, 0x94, 0x31, 0x30, 0xE7, + 0xB2, 0x71, 0x4E, 0xC6, 0x21, 0x50, 0xF3, 0xCF, 0x7C, 0xBC, + 0x26, 0xB7, 0x20, 0xCB, 0x2D, 0x9E, 0x55, 0x23, 0x7C, 0xF0, + 0x97, 0x16, 0x57, 0x5B, 0xCC, 0xC5, 0x48, 0xC9, 0xC8, 0xEE, + 0x1E, 0x11, 0x6B, 0x72, 0x3B, 0x29, 0x71, 0xA4, 0xED, 0x08, + 0x6C, 0x38, 0xC6, 0x2E, 0x64, 0x3B, 0x16, 0xD8, 0x4D, 0x19, + 0xE8, 0x94, 0xD3, 0xD5, 0xB4, 0x18, 0xB4, 0x03, 0x24, 0x62, + 0xE7, 0x44, 0x5E, 0x09, 0x60, 0xC6, 0xA9, 0xA6, 0xCA, 0xBE, + 0x83, 0xE5, 0xF1, 0xBD, 0x04, 0x22, 0x4B, 0x1B, 0x08, 0x0B, + 0xA6, 0x20, 0x95, 0xF2, 0x78, 0x8C, 0x3E, 0x73, 0x03, 0x7B, + 0x75, 0x2C, 0xE5, 0x72, 0xEC, 0xC9, 0x25, 0x06, 0x6B, 0x3A, + 0x5E, 0x0E, 0x96, 0xD0, 0xE3, 0x85, 0xB0, 0xB5, 0x6A, 0x83, + 0x40, 0x41, 0x94, 0xCE, 0xA1, 0x07, 0x79, 0x07, 0xE2, 0x50, + 0xA4, 0xDE, 0x7D, 0x64, 0x2F, 0x7E, 0x43, 0xD5, 0x72, 0xD1, + 0xA7, 0xB9, 0x76, 0xA3, 0xFC, 0x25, 0x33, 0xD7, 0x95, 0xB5, + 0xD9, 0x94, 0x93, 0x55, 0xAF, 0x04, 0x86, 0x4A, 0xFC, 0x2F, + 0x5F, 0x3D, 0x34, 0x86, 0xF2, 0x9A, 0x31, 0x4C, 0xC9, 0xAD, + 0x08, 0xA5, 0x03, 0x91, 0x8A, 0x7E, 0x46, 0xC9, 0x44, 0x61, + 0x11, 0x59, 0x4F, 0xBB, 0x70, 0xF9, 0x9D, 0x3E, 0x6D, 0x53, + 0xB4, 0x16, 0x28, 0xD3, 0x67, 0x52, 0x14, 0xAD, 0xBA, 0xB1, + 0x21, 0xAF, 0x84, 0x18, 0xC9, 0x37, 0x78, 0xB3, 0x78, 0x92, + 0x95, 0xAD, 0x1B, 0xC0, 0x70, 0xE7, 0xE9, 0x06, 0x02, 0xED, + 0x6C, 0x99, 0x4E, 0x43, 0xC0, 0xA4, 0x6F, 0x23, 0xA8, 0x02, + 0xC4, 0xBD, 0xC0, 0x16, 0xC4, 0xED, 0xE0, 0xE1, 0x56, 0x06, + 0x3F, 0xF4, 0x77, 0x12, 0x72, 0x52, 0x04, 0xE8, 0xE4, 0x26, + 0xE5, 0x01, 0x47, 0x5B, 0x8A, 0xCA, 0x07, 0x3B, 0xC9, 0xB1, + 0x42, 0x8F, 0x7D, 0x64, 0x7D, 0x5D, 0x6A, 0x95, 0xDE, 0x4D, + 0x4B, 0xD3, 0xFA, 0xCF, 0xF0, 0x25, 0x27, 0x96, 0x48, 0xB6, + 0xCC, 0x68, 0x29, 0x37, 0x95, 0xCD, 0x36, 0xB7, 0xB0, 0xD6, + 0xF1, 0xFC, 0x4F, 0xE9, 0xA8, 0x6B, 0x9D, 0x75, 0xC7, 0x9B, + 0x19, 0xAF, 0xBB, 0x8A, 0xAF, 0x4B, 0xB8, 0xE2, 0xEB, 0x8D, + 0xD9, 0xF5, 0x75, 0xC5, 0xC8, 0x0B, 0xF2, 0x1C, 0xF9, 0x9E, + 0xC7, 0x4D, 0x7C, 0x71, 0x47, 0xBD, 0x57, 0x7E, 0xE6, 0x59, + 0xCA, 0x8C, 0xF2, 0x0C, 0x47, 0x4A, 0x90, 0xA7, 0xF5, 0xB8, + 0xB2, 0x43, 0x97, 0xDB, 0xBE, 0x76, 0x37, 0x29, 0x36, 0x40, + 0xAA, 0x7A, 0x81, 0xF0, 0xA0, 0xD0, 0x81, 0x39, 0x88, 0xF0, + 0x23, 0xB0, 0xA4, 0xBE, 0x5E, 0xD8, 0x33, 0x98, 0x5D, 0x9D, + 0xB5, 0xD4, 0x1C, 0x00, 0xE2, 0x30, 0xB8, 0x68, 0x58, 0x65, + 0x30, 0x94, 0x3D, 0xF2, 0x75, 0x0C, 0x8E, 0x3B, 0xEE, 0x9B, + 0xCE, 0x6C, 0x67, 0x68, 0x54, 0x86, 0x7D, 0x27, 0x2A, 0x2F, + 0xF7, 0x25, 0xFF, 0x22, 0x1E, 0x74, 0xBD, 0x72, 0x11, 0xF4, + 0x47, 0x8E, 0x2F, 0x0D, 0xB9, 0x31, 0xAC, 0x5C, 0x1D, 0xA0, + 0x11, 0xEA, 0x16, 0x24, 0x86, 0x76, 0xBD, 0xA3, 0x41, 0x7F, + 0x00, 0xE6, 0xE2, 0x86, 0x93, 0xFF, 0x02, 0x07, 0xCE, 0x49, + 0xE4, 0xAF, 0x00, 0x9B, 0x15, 0xA6, 0x05, 0xF7, 0x54, 0xD1, + 0xBB, 0xA7, 0x09, 0x67, 0xE6, 0x99, 0xF9, 0x23, 0xE6, 0xAA, + 0x6F, 0xCB, 0xE1, 0xC1, 0xAC, 0x7B, 0x98, 0xA9, 0x14, 0x43, + 0x55, 0x22, 0x2C, 0x7A, 0x4A, 0x4A, 0x63, 0xC1, 0xFE, 0x5C, + 0xCA, 0xF4, 0x91, 0x3B, 0x6F, 0xF8, 0x7E, 0x2A, 0xA1, 0x4A, + 0xC3, 0x16, 0x1C, 0x1D, 0x53, 0x7D, 0x0E, 0x77, 0x0D, 0x72, + 0x07, 0x78, 0xEA, 0xCE, 0xE4, 0x0C, 0xF7, 0xCE, 0xA0, 0xEF, + 0xA1, 0xDB, 0x6B, 0x5F, 0xFD, 0xEB, 0x68, 0xC7, 0x76, 0xFD, + 0x35, 0xD2, 0xCB, 0xA4, 0xF6, 0xE6, 0x6B, 0xDB, 0xE9, 0xD5, + 0x1E, 0x05, 0x8A, 0xBA, 0xED, 0x77, 0x94, 0x36, 0x6C, 0x3C, + 0xE2, 0x23, 0xF8, 0x84, 0xA1, 0xE3, 0xCD, 0xFA, 0x1D, 0x31, + 0x52, 0x4D, 0xBC, 0x16, 0x31, 0x92, 0xD7, 0xBE, 0x2E, 0xD6, + 0x6D, 0x1D, 0x58, 0x4E, 0xD8, 0x06, 0x8F, 0xB3, 0xE6, 0x79, + 0x60, 0x92, 0x71, 0x1F, 0x72, 0x84, 0x55, 0x7B, 0xFA, 0xC8, + 0xCF, 0x20, 0x16, 0x2F, 0xC7, 0x13, 0x17, 0xD1, 0x2D, 0xD1, + 0x0D, 0x84, 0x48, 0x08, 0x69, 0xD1, 0x55, 0xB1, 0x08, 0xB6, + 0x17, 0x8C, 0x38, 0x31, 0xA4, 0x77, 0x73, 0xC0, 0xE9, 0xFC, + 0x5F, 0x8E, 0xB3, 0x74, 0x1F, 0xAB, 0xCF, 0xF5, 0x26, 0x26, + 0x20, 0x80, 0xD8, 0x13, 0x42, 0xCF, 0xC7, 0x9D, 0xD6, 0x5B, + 0x1A, 0xFD, 0x46, 0x83, 0xBA, 0xC1, 0xE5, 0x92, 0xE9, 0x27, + 0xA8, 0xA0, 0x36, 0xD5, 0x31, 0x75, 0x7B, 0x8F, 0x53, 0xF6, + 0xBD, 0x08, 0x1A, 0x86, 0x81, 0x83, 0x85, 0x07, 0x44, 0x3E, + 0xF9, 0x72, 0x47, 0xE0, 0xF1, 0xBE, 0x43, 0x6A, 0xC3, 0x00, + 0x94, 0xD3, 0x19, 0x81, 0xDE, 0xF3, 0xFD, 0x57, 0x98, 0xDC, + 0x57, 0xFE, 0x9F, 0x4B, 0x38, 0x23, 0xAD, 0xA8, 0xD4, 0x07, + 0x07, 0x5C, 0xCA, 0x25, 0xB8, 0x77, 0x7E, 0x45, 0x01, 0x9B, + 0xD4, 0x45, 0x5B, 0x94, 0x47, 0x18, 0x35, 0x66, 0xAD, 0x0A, + 0x97, 0x06, 0xC6, 0xA7, 0xAA, 0x50, 0xBF, 0x07, 0x90, 0xFE, + 0x50, 0x8D, 0xD9, 0x1F, 0xDD, 0x33, 0xA4, 0xA7, 0x23, 0x48, + 0xA3, 0xD6, 0x5D, 0xB8, 0x9E, 0x97, 0x22, 0x32, 0xD3, 0x8A, + 0xB0, 0x5E, 0xB3, 0xC9, 0x0B, 0x24, 0x09, 0x66, 0x2E, 0xEA, + 0x94, 0x9C, 0x90, 0x4F, 0x3E, 0x93, 0xCF, 0x30, 0x3F, 0xB4, + 0xBE, 0x5E, 0x6C, 0xAF, 0x1A, 0xFF, 0x00, 0xC7, 0x74, 0x2E, + 0x8B, 0x08, 0xE9, 0x22, 0x61, 0xC5, 0xD1, 0x21, 0x15, 0xA1, + 0xBA, 0x37, 0xD2, 0x24, 0xFD, 0xA5, 0x63, 0x9A, 0x97, 0xFA, + 0xFE, 0xB2, 0xA5, 0x1B, 0x3B, 0xBD, 0xB7, 0xB3, 0x2F, 0x3D, + 0xF1, 0x5A, 0xF2, 0xF6, 0xE4, 0x12, 0xE4, 0x3A, 0x26, 0x3C, + 0x21, 0x5C, 0xD6, 0x83, 0x65, 0x26, 0x86, 0xCC, 0x47, 0x84, + 0xD7, 0x26, 0x31, 0x31, 0xCF, 0x1D, 0xD6, 0xC4, 0xA4, 0xF2, + 0xD4, 0x25, 0x54, 0x2B, 0x81, 0x00, 0x1D, 0xD8, 0xDF, 0x04, + 0xB8, 0x4B, 0xCF, 0xE5, 0x16, 0xF4, 0x4A, 0x17, 0xC5, 0xD8, + 0xD3, 0xDF, 0xE4, 0xB7, 0xD3, 0x98, 0xB6, 0x73, 0xA0, 0x37, + 0x67, 0xBB, 0x8B, 0xC3, 0xFC, 0xAC, 0x6E, 0x6C, 0x0E, 0x5D, + 0x44, 0xB0, 0x9D, 0xF8, 0xAE, 0x17, 0x9B, 0xF9, 0xCB, 0xE8, + 0xFE, 0xC1, 0x7B, 0x78, 0x16, 0xF6, 0x74, 0x04, 0x7D, 0x38, + 0x17, 0x36, 0x09, 0xE3, 0x73, 0xA1, 0x76, 0x78, 0x7C, 0x14, + 0xB3, 0x83, 0x91, 0x59, 0x27, 0xEA, 0x8C, 0x69, 0xE6, 0xA5, + 0x21, 0xCD, 0x78, 0xC7, 0x26, 0xA2, 0xFB, 0xD4, 0xF3, 0xAF, + 0x3F, 0xCF, 0x51, 0x10, 0xCC, 0x4B, 0xDD, 0x14, 0xF4, 0xF3, + 0xB8, 0xEA, 0x07, 0xA7, 0x76, 0xE7, 0xBE, 0xEC, 0x01, 0xB5, + 0x1E, 0xDC, 0xC3, 0x55, 0x19, 0xB1, 0x16, 0x3F, 0xFE, 0xD4, + 0x15, 0x49, 0xAF, 0x04, 0x9D, 0x38, 0xDD, 0x86, 0x53, 0x2A, + 0x80, 0x62, 0x42, 0xB7, 0x98, 0x42, 0x38, 0xAF, 0x9D, 0x87, + 0xE2, 0x3F, 0xEA, 0x7E, 0x0A, 0x35, 0xB8, 0xEE, 0xA5, 0x48, + 0x09, 0x08, 0xC5, 0x0D, 0xAE, 0x01, 0xD5, 0xEC, 0x43, 0x29, + 0x3B, 0xFB, 0x78, 0xC4, 0x96, 0x01, 0x1C, 0x21, 0xF2, 0xC9, + 0x44, 0x68, 0x24, 0x66, 0x86, 0x96, 0xB8, 0xC8, 0xE9, 0xD0, + 0x38, 0x0E, 0x96, 0x4D, 0xCC, 0x45, 0xAB, 0xE1, 0xCA, 0x50, + 0x10, 0x20, 0x01, 0xBE, 0x89, 0xC0, 0x43, 0x84, 0xD8, 0x38, + 0x52, 0xC0, 0xAF, 0x4D, 0x6B, 0x99, 0x0B, 0xC0, 0xC2, 0x99, + 0x07, 0xC6, 0x78, 0xA8, 0xF7, 0x32, 0x84, 0x86, 0xC5, 0x1A, + 0x95, 0x81, 0xA6, 0x6A, 0x05, 0xA7, 0x9D, 0x81, 0x0E, 0x32, + 0x18, 0x11, 0x4A, 0x0F, 0xFC, 0x17, 0x9E, 0xF7, 0xBF, 0x54, + 0x82, 0xED, 0xBA, 0x6F, 0xBD, 0x41, 0xC1, 0xCA, 0x55, 0x6C, + 0xFF, 0x32, 0x6B, 0xA2, 0x59, 0xAE, 0xAE, 0x92, 0xC1, 0xB5, + 0xA6, 0xFC, 0xAF, 0x09, 0x48, 0x57, 0xD6, 0xEE, 0x38, 0x99, + 0xB4, 0xE3, 0x8F, 0xB7, 0xFC, 0x6A, 0x0A, 0x3B, 0x08, 0xE1, + 0x81, 0x46, 0x11, 0xEB, 0x4A, 0x98, 0x43, 0x16, 0x16, 0x1F, + 0x68, 0xDB, 0xB9, 0x71, 0x19, 0xFE, 0x8B, 0xE6, 0xB7, 0x8B, + 0xC1, 0x3B, 0x90, 0xC5, 0x89, 0x1D, 0xCA, 0xD9, 0x19, 0x6C, + 0xE8, 0x01, 0xF4, 0x19, 0x50, 0x3E, 0x93, 0x84, 0xBF, 0xAA, + 0x9A, 0x3D, 0x20, 0x4C, 0x4E, 0x79, 0x83, 0xEC, 0x46, 0x83, + 0x09, 0x00, 0xC3, 0x8A, 0xAD, 0xD5, 0x2B, 0x08, 0xD1, 0x47, + 0xAC, 0x96, 0x0E, 0x34, 0xF0, 0x89, 0x1A, 0x0F, 0xF2, 0x51, + 0x8D, 0x2C, 0xB5, 0xF2, 0xFE, 0x8C, 0xDC, 0xED, 0x41, 0x51, + 0x8C, 0x71, 0x12, 0x05, 0xEC, 0x68, 0x21, 0x86, 0x94, 0xF4, + 0xFB, 0xFC, 0xAA, 0xC7, 0xC7, 0xBB, 0x74, 0xA2, 0x8B, 0x76, + 0x62, 0x1C, 0x64, 0x11, 0xA0, 0xD0, 0x5F, 0x46, 0x64, 0xD4, + 0x47, 0xBC, 0x8A, 0x5B, 0x2B, 0xC2, 0xC1, 0x88, 0xB2, 0x30, + 0xBD, 0x02, 0x17, 0x18, 0x0A, 0xD7, 0x9B, 0x3D, 0x91, 0xB9, + 0x2C, 0x83, 0x24, 0xB4, 0x8B, 0x9D, 0x02, 0xAF, 0xB2, 0x4E, + 0x57, 0xE1, 0xB0, 0xA2, 0xF3, 0x7C, 0xDE, 0x15, 0xBA, 0x60, + 0xBD, 0x80, 0xBE, 0x6D, 0x6F, 0x16, 0xB3, 0xB9, 0xB8, 0x6A, + 0x55, 0xB4, 0xAD, 0xF1, 0x01, 0x63, 0x40, 0x01, 0xBA, 0x5B, + 0x5D, 0x9A, 0xBC, 0xF0, 0x58, 0xA8, 0xF7, 0xBB, 0x8E, 0x91, + 0xA0, 0xFD, 0x8C, 0x49, 0x8F, 0x1A, 0xBB, 0x2A, 0x28, 0x0D, + 0x7A, 0xA6, 0xC2, 0xD7, 0x41, 0x16, 0xED, 0x61, 0x5D, 0xC4, + 0xE7, 0xCF, 0x2B, 0xB4, 0xB9, 0x10, 0x6F, 0x38, 0x42, 0x88, + 0x94, 0x6E, 0x75, 0x2C, 0x89, 0xAC, 0xA0, 0xE9, 0x81, 0xEC, + 0x2D, 0x62, 0xA3, 0xBA, 0x3C, 0x40, 0xDB, 0x65, 0x56, 0x8E, + 0xC7, 0xD8, 0xB0, 0xD4, 0xF9, 0x04, 0x2B, 0x4C, 0x83, 0x20, + 0xBE, 0xAD, 0xB8, 0x66, 0x1C, 0x20, 0x32, 0xB3, 0xF6, 0xF1, + 0xAC, 0xA5, 0x8A, 0x72, 0x9A, 0x41, 0x1D, 0x6E, 0xA0, 0x16, + 0xE0, 0x0C, 0x39, 0xB6, 0x06, 0x96, 0x55, 0xB7, 0xDA, 0x1C, + 0x54, 0x08, 0xF6, 0x30, 0x1B, 0xB6, 0x57, 0xCA, 0x7D, 0xB0, + 0xDC, 0x9E, 0xFA, 0x5C, 0x38, 0x7F, 0xAC, 0x37, 0x80, 0x26, + 0xBA, 0xDC, 0x7A, 0x95, 0xE5, 0x7B, 0x90, 0xF3, 0x1A, 0xC7, + 0x31, 0x8E, 0x97, 0x07, 0x9A, 0xB8, 0xBE, 0xAE, 0x16, 0x11, + 0x44, 0xB0, 0x01, 0xF5, 0xE8, 0x37, 0x1A, 0x67, 0xFE, 0x00, + 0x8F, 0xA1, 0xF5, 0x03, 0x7C, 0xED, 0xBF, 0x42, 0xF4, 0x78, + 0x2B, 0xFB, 0x9F, 0x8C, 0xB3, 0x63, 0x0B, 0x42, 0xBF, 0xAE, + 0x8E, 0xF7, 0x6F, 0xB4, 0xB1, 0xE8, 0x75, 0x8C, 0xDF, 0x69, + 0xC6, 0xE1, 0x3A, 0x26, 0x05, 0x47, 0x03, 0x61, 0xFC, 0xC5, + 0xA9, 0xC1, 0x4F, 0x70, 0xCE, 0x18, 0xBB, 0x01, 0xE6, 0x11, + 0xC9, 0xA7, 0x7E, 0x65, 0xB8, 0xDC, 0x61, 0x3D, 0x9B, 0x47, + 0x2E, 0x34, 0x16, 0xA1, 0x73, 0x61, 0x91, 0xED, 0x45, 0xE3, + 0x01, 0x26, 0xEE, 0x16, 0x76, 0x0E, 0xB7, 0xA1, 0xC0, 0xB3, + 0xAC, 0xF0, 0xA5, 0x3B, 0xF6, 0x64, 0x1B, 0x93, 0x94, 0x5C, + 0x8F, 0x4C, 0x25, 0x89, 0xA1, 0x92, 0x32, 0x50, 0x28, 0x03, + 0x8B, 0xFF, 0xC4, 0xF6, 0x2A, 0xE8, 0xDA, 0x8D, 0xFE, 0x49, + 0xB5, 0x33, 0x01, 0xCA, 0x2D, 0x2D, 0x60, 0x33, 0xD6, 0x30, + 0x38, 0x8A, 0x1E, 0x38, 0x3D, 0x78, 0x11, 0xFF, 0xEF, 0x1C, + 0x82, 0x33, 0xBB, 0xFC, 0x95, 0xEF, 0x79, 0xB0, 0x59, 0xBD, + 0x2C, 0xFD, 0x1C, 0x3F, 0x42, 0xDA, 0xDF, 0xBD, 0x56, 0xF2, + 0xD6, 0xAE, 0x2D, 0x23, 0x36, 0xED, 0xB1, 0x8D, 0x62, 0x58, + 0x71, 0x66, 0x21, 0xE0, 0x4D, 0xEE, 0xF4, 0x16, 0x48, 0xA6, + 0xCF, 0x1A, 0x8A, 0xF0, 0x8A, 0xD1, 0x53, 0xF6, 0xE5, 0x4E, + 0x98, 0x9D, 0x7D, 0x6C, 0xD2, 0xDF, 0xB8, 0x2D, 0xA6, 0xE5, + 0x8A, 0xD6, 0xB5, 0xAE, 0x61, 0x96, 0xFA, 0x6B, 0xCA, 0x7F, + 0x08, 0xC2, 0x2B, 0x67, 0x30, 0x5E, 0x21, 0x3B, 0xA4, 0x84, + 0x95, 0xC6, 0x2F, 0x2C, 0x1F, 0xE2, 0x0E, 0x1A, 0xC3, 0x89, + 0x6A, 0x6A, 0xE7, 0x08, 0xF9, 0x74, 0xEE, 0x4F, 0xCD, 0x5E, + 0xE8, 0xCE, 0x55, 0x4D, 0x38, 0xED, 0x62, 0x35, 0xEE, 0xFC, + 0x14, 0x56, 0xB9, 0xF0, 0xCE, 0x29, 0x1C, 0x21, 0x40, 0x51, + 0xE4, 0x76, 0xE3, 0xA6, 0xD8, 0x3D, 0x54, 0x58, 0x51, 0xE5, + 0xF0, 0xDC, 0x50, 0x39, 0x43, 0x67, 0x44, 0x14, 0xCC, 0x6E, + 0x5A, 0xB1, 0x15, 0xEC, 0xB4, 0x3E, 0x0E, 0xEF, 0x8E, 0x72, + 0x6A, 0xDF, 0xBA, 0x37, 0x27, 0x15, 0x62, 0xC3, 0xBD, 0xEE, + 0x1D, 0xB1, 0x24, 0x2F, 0x57, 0x51, 0xF1, 0x8F, 0xFB, 0xD1, + 0x10, 0x6F, 0x11, 0xB9, 0x94, 0x5C, 0x9C, 0x12, 0x26, 0x46, + 0x46, 0x7B, 0x31, 0x0E, 0xAD, 0x93, 0xE4, 0x4F, 0x09, 0xE3, + 0xBF, 0xC5, 0xE3, 0x11, 0xA4, 0x25, 0x8D, 0x9B, 0x8E, 0x26, + 0x02, 0xAA, 0x72, 0x18, 0xCE, 0x89, 0x67, 0xFC, 0x1C, 0x28, + 0xAB, 0x11, 0x5A, 0x84, 0x23, 0x7C, 0x91, 0xAC, 0x6B, 0x48, + 0x9C, 0x39, 0x14, 0xA3, 0xAC, 0xC6, 0x30, 0xBC, 0x1E, 0x0C, + 0xD3, 0x34, 0x19, 0xA9, 0x2B, 0xE7, 0xA4, 0xF8, 0xC1, 0xF0, + 0x3C, 0x60, 0xA2, 0xF7, 0x51, 0x86, 0xCF, 0x42, 0xAD, 0x34, + 0x81, 0xA6, 0x93, 0x0B, 0x88, 0x4C, 0xBF, 0xD2, 0x4F, 0xE0, + 0xDB, 0xB2, 0x1D, 0x6D, 0xB2, 0x5C, 0xAC, 0xD8, 0x64, 0x85, + 0xC3, 0x35, 0x6E, 0x5D, 0xAF, 0x63, 0x3E, 0x47, 0xB7, 0x5D, + 0x39, 0x21, 0x36, 0xA6, 0xD4, 0xEF, 0x9E, 0x1C, 0x1F, 0xD6, + 0xA4, 0xE0, 0xE4, 0x22, 0x75, 0x1E, 0xEB, 0x15, 0xB4, 0xEE, + 0x43, 0x37, 0x06, 0xF9, 0x77, 0xBF, 0x68, 0x9B, 0x9A, 0x7F, + 0x38, 0x30, 0x87, 0xDE, 0x0C, 0x6A, 0x39, 0x41, 0xE1, 0xED, + 0xF4, 0x18, 0x6E, 0x29, 0x44, 0xF0, 0xFC, 0xB6, 0x09, 0x5B, + 0xB3, 0x30, 0xC9, 0x0A, 0x8C, 0x41, 0x6F, 0x1E, 0x95, 0xBE, + 0x93, 0x3C, 0x11, 0x9B, 0x24, 0xF7, 0x57, 0xB8, 0xC5, 0x9B, + 0x08, 0xAA, 0xCD, 0x24, 0x86, 0x98, 0x59, 0x0F, 0xC6, 0x0E, + 0xD2, 0x71, 0xB2, 0x5E, 0xAE, 0x72, 0xC9, 0x69, 0x3B, 0x80, + 0xC2, 0x27 }; -#define sizeof_bench_dilithium_level3_key (sizeof(bench_dilithium_level3_key)) - +#define sizeof_bench_mldsa_65_key (sizeof(bench_mldsa_65_key)) #endif /* !WOLFSSL_MLDSA_NO_SIGN */ #ifndef WOLFSSL_MLDSA_NO_VERIFY - -/* raw public key without ASN1 syntax from - * ./certs/dilithium/bench_dilithium_level3_key.der */ -static const unsigned char bench_dilithium_level3_pubkey[] = { - 0x15, 0xc9, 0xe5, 0x53, 0x2f, 0xd8, 0x1f, 0xb4, 0xa3, 0x9f, - 0xae, 0xad, 0xb3, 0x10, 0xd0, 0x72, 0x69, 0xd3, 0x02, 0xf3, - 0xdf, 0x67, 0x5a, 0x31, 0x52, 0x19, 0xca, 0x39, 0x27, 0x77, - 0x61, 0x6d, 0x0f, 0xc1, 0x33, 0x26, 0x09, 0xf0, 0xf9, 0x4d, - 0x12, 0x7a, 0xef, 0xf7, 0x21, 0x26, 0x2c, 0xe0, 0xe2, 0x92, - 0x1f, 0x9d, 0xd1, 0xaa, 0xaf, 0x08, 0x14, 0xf2, 0xaa, 0x24, - 0x99, 0x0f, 0x20, 0x57, 0x35, 0x04, 0x32, 0x96, 0x8e, 0x6e, - 0x10, 0x64, 0xe3, 0xe3, 0x57, 0x26, 0x33, 0x32, 0x7b, 0xe4, - 0x18, 0x41, 0x77, 0xd3, 0x24, 0x63, 0x3d, 0x11, 0xea, 0xdc, - 0xbe, 0x59, 0xff, 0x8d, 0xc2, 0xe4, 0xc7, 0x04, 0xf3, 0xd4, - 0xe0, 0x1d, 0x5e, 0x09, 0x46, 0xbf, 0x02, 0x05, 0xc7, 0xa6, - 0xb7, 0x82, 0x40, 0x1f, 0x55, 0xe9, 0x77, 0x82, 0xc0, 0xcc, - 0x86, 0x99, 0x19, 0x99, 0xa2, 0xc9, 0x1b, 0x4f, 0xdd, 0x49, - 0x4c, 0x78, 0x0a, 0x58, 0xb8, 0xf0, 0x23, 0xac, 0x1a, 0x71, - 0x57, 0x6d, 0xd6, 0x3a, 0x3a, 0x6f, 0x93, 0xb3, 0x2b, 0x09, - 0xbe, 0xec, 0x7b, 0x5b, 0xf7, 0x3a, 0xed, 0xf9, 0xd0, 0xb1, - 0xfe, 0x9f, 0x9b, 0xec, 0x11, 0xb6, 0x6b, 0xd1, 0xb6, 0x00, - 0x72, 0x7f, 0x68, 0x9a, 0x61, 0xa5, 0xf5, 0x6e, 0xe9, 0x46, - 0xa4, 0x82, 0x08, 0x9f, 0x50, 0x4c, 0x75, 0xc3, 0x48, 0x85, - 0x76, 0x39, 0xea, 0x0c, 0xf2, 0xe8, 0x7e, 0x48, 0x69, 0xd9, - 0x6f, 0x9a, 0x89, 0x7d, 0x98, 0xc1, 0x16, 0xdc, 0x2f, 0xc7, - 0x0a, 0x11, 0xa8, 0xbb, 0xe7, 0x91, 0xb1, 0x0f, 0x0e, 0xf0, - 0xb4, 0xc8, 0x41, 0x7e, 0x62, 0x9e, 0x3c, 0x30, 0x4c, 0xbc, - 0x4c, 0xeb, 0x37, 0xaf, 0x48, 0x72, 0x59, 0x64, 0x8e, 0xfb, - 0x77, 0x11, 0x28, 0xdd, 0x30, 0x52, 0x8e, 0x69, 0x8c, 0x9f, - 0x3d, 0xec, 0xdf, 0xa7, 0x5f, 0x42, 0x18, 0xda, 0xba, 0x1a, - 0x96, 0x91, 0x7d, 0x62, 0xd5, 0x52, 0xff, 0x44, 0xc9, 0x1d, - 0x29, 0xa6, 0xb9, 0x03, 0x9a, 0x26, 0x26, 0xcf, 0x57, 0x40, - 0x70, 0x7e, 0x2b, 0xbd, 0xf0, 0x81, 0x71, 0x0f, 0x0b, 0x2e, - 0x9b, 0x03, 0xba, 0x31, 0x41, 0x68, 0x37, 0xc8, 0xff, 0xea, - 0xc4, 0x73, 0xa5, 0xf9, 0xc2, 0x92, 0x78, 0x0c, 0xe7, 0xfd, - 0x5d, 0xb2, 0x01, 0xb5, 0x8d, 0xeb, 0x64, 0xd4, 0x14, 0xea, - 0x7a, 0xd1, 0x42, 0xc8, 0x99, 0xe4, 0x7d, 0x5b, 0x7e, 0x3b, - 0x8f, 0xab, 0x82, 0x12, 0xdf, 0xbb, 0xa1, 0x45, 0x30, 0xc9, - 0x0f, 0xb9, 0xe5, 0xba, 0xe6, 0x8a, 0xf3, 0x78, 0x61, 0xcc, - 0x9f, 0xe1, 0x46, 0x2a, 0x9a, 0x18, 0x0e, 0x2a, 0x57, 0xf3, - 0xe5, 0x56, 0xd1, 0x42, 0x48, 0xe1, 0x5a, 0x8e, 0x33, 0xce, - 0x19, 0xe5, 0x3e, 0x7f, 0x00, 0x70, 0x9c, 0x4c, 0xd3, 0xe1, - 0x0c, 0xa1, 0x7e, 0xd4, 0xa9, 0x9e, 0x8b, 0xe2, 0xf0, 0xac, - 0xdb, 0xa6, 0x72, 0x75, 0x67, 0xa6, 0x57, 0xed, 0x79, 0x2e, - 0xca, 0x8d, 0xeb, 0x9b, 0x9e, 0xb7, 0xbf, 0x30, 0x02, 0x2b, - 0xb3, 0x43, 0x89, 0x9b, 0xa8, 0x88, 0xa5, 0xbb, 0x33, 0xd9, - 0x99, 0x30, 0x7c, 0xc7, 0xd4, 0x28, 0x5e, 0x5e, 0x3f, 0x9d, - 0x6d, 0x35, 0x75, 0x33, 0x8e, 0xff, 0x84, 0x2e, 0x2d, 0xda, - 0xf0, 0xff, 0x70, 0xe5, 0xb5, 0x62, 0x96, 0x33, 0x3a, 0xd9, - 0xb5, 0x82, 0x25, 0x81, 0x81, 0x40, 0x5d, 0x4f, 0x11, 0x86, - 0x63, 0x1a, 0x06, 0xc1, 0x67, 0xc7, 0x49, 0x03, 0xc7, 0xe4, - 0x6f, 0xb4, 0x13, 0x3e, 0x57, 0x62, 0xfd, 0x8a, 0xc6, 0x2b, - 0x65, 0x5b, 0xa4, 0x29, 0x57, 0x8d, 0xde, 0xa5, 0xee, 0x32, - 0xc2, 0x76, 0x03, 0xca, 0xce, 0xc1, 0x48, 0xec, 0x45, 0xcf, - 0x30, 0x21, 0x28, 0x7f, 0x10, 0x47, 0xd2, 0xdb, 0xee, 0xca, - 0x5b, 0x0f, 0xd5, 0x39, 0x3a, 0xc3, 0xa6, 0x78, 0xb2, 0x15, - 0xaf, 0x82, 0x3c, 0x2f, 0xc4, 0x51, 0x5c, 0x52, 0xad, 0xf2, - 0x89, 0x92, 0x8e, 0xf3, 0x50, 0x38, 0xed, 0xf8, 0xc9, 0x14, - 0x4c, 0xe4, 0xa3, 0x9a, 0xaf, 0xc4, 0x5c, 0xf3, 0x9f, 0xc3, - 0xa3, 0xc0, 0xbe, 0x45, 0x1b, 0x21, 0x63, 0xfa, 0xe0, 0xe0, - 0x91, 0x2b, 0x42, 0xca, 0x91, 0xfb, 0x5e, 0x97, 0x9a, 0x0a, - 0xd4, 0x88, 0xba, 0xb8, 0x22, 0xc6, 0xbf, 0x56, 0x58, 0x1e, - 0x92, 0xa9, 0x9d, 0xa7, 0xed, 0xc9, 0xab, 0x54, 0x4f, 0x75, - 0x8d, 0x42, 0xc1, 0xe1, 0x61, 0xd0, 0x91, 0x9a, 0x3a, 0x40, - 0x9a, 0xa3, 0xfb, 0x7b, 0x4e, 0xf0, 0x85, 0xf0, 0xdc, 0x40, - 0x72, 0x9f, 0x05, 0xa8, 0xbe, 0x95, 0x5a, 0x7f, 0xba, 0x75, - 0x00, 0x6e, 0x95, 0x76, 0xbd, 0xb2, 0x40, 0xf5, 0xb0, 0x64, - 0x0a, 0x2f, 0x06, 0x3d, 0x9f, 0xac, 0x6a, 0xa5, 0x46, 0x5a, - 0x85, 0xa4, 0x6f, 0xee, 0x27, 0xa0, 0xeb, 0x5f, 0x1f, 0x91, - 0xbd, 0x2b, 0x02, 0x16, 0xdf, 0x74, 0x97, 0x2c, 0xd0, 0xa8, - 0x9f, 0x3a, 0x7b, 0xdf, 0x3e, 0x98, 0x4a, 0x91, 0xdc, 0x19, - 0x96, 0x88, 0x75, 0x21, 0x1a, 0x6a, 0xa8, 0x4b, 0x1f, 0x35, - 0xd1, 0x92, 0xf5, 0x76, 0xf4, 0x72, 0x55, 0x13, 0xdb, 0x5d, - 0x07, 0x8d, 0xd9, 0x72, 0xe4, 0x75, 0xde, 0x80, 0xbc, 0xe9, - 0x9c, 0xf0, 0x5c, 0x6a, 0x8a, 0x0e, 0x34, 0xf6, 0x3f, 0x5c, - 0xef, 0x0e, 0xcc, 0x52, 0x38, 0x2d, 0x7b, 0xc2, 0x1b, 0x69, - 0x9f, 0xe5, 0xed, 0x14, 0xb0, 0x91, 0x0b, 0xe9, 0x4d, 0x34, - 0xd5, 0xaa, 0xd4, 0xd2, 0x46, 0x39, 0x45, 0x7e, 0x85, 0x2f, - 0xdb, 0x89, 0xf4, 0xff, 0x05, 0x74, 0x51, 0xba, 0xdd, 0xee, - 0xf6, 0xc2, 0xc1, 0x0a, 0x8f, 0xd9, 0xeb, 0xc7, 0x61, 0x30, - 0x8f, 0x86, 0x8b, 0x1f, 0x82, 0xc1, 0x22, 0xfd, 0x83, 0xf4, - 0x5d, 0xc5, 0x94, 0xf5, 0xd7, 0x17, 0xc7, 0x7b, 0x71, 0xf5, - 0x5e, 0x15, 0x49, 0x70, 0xb2, 0x57, 0xa0, 0xc0, 0x57, 0x63, - 0x53, 0x35, 0xb6, 0x52, 0x20, 0x7b, 0x83, 0xd4, 0x57, 0x63, - 0x25, 0x8e, 0x83, 0xb3, 0x8e, 0x26, 0x1f, 0x09, 0xde, 0x14, - 0xd6, 0xa6, 0xfc, 0xe5, 0x93, 0x3c, 0x88, 0x8e, 0xf5, 0x10, - 0x57, 0xb9, 0xc9, 0x9b, 0xff, 0x72, 0x9d, 0x3d, 0x3f, 0x97, - 0xd9, 0x3c, 0x20, 0xe2, 0x57, 0xfd, 0x2a, 0x5c, 0x17, 0x12, - 0xe6, 0x08, 0xaf, 0xe4, 0x26, 0x96, 0xb9, 0x6d, 0xc3, 0xac, - 0x22, 0xf3, 0x8b, 0x89, 0xde, 0xc7, 0x8a, 0x93, 0x06, 0xf7, - 0x1d, 0x08, 0x21, 0x36, 0x16, 0x74, 0x2b, 0x97, 0x23, 0xe4, - 0x79, 0x31, 0x08, 0x23, 0x62, 0x30, 0x67, 0xe2, 0xed, 0x30, - 0x9b, 0x0c, 0xf9, 0x08, 0x7a, 0x29, 0x73, 0xc6, 0x77, 0x8a, - 0xbb, 0x2a, 0x1c, 0x66, 0xd0, 0xdd, 0x9e, 0xa3, 0xe9, 0x62, - 0xcc, 0xb7, 0x88, 0x25, 0x4a, 0x5f, 0xbc, 0xaa, 0xe3, 0xe4, - 0x4f, 0xec, 0xa6, 0x8e, 0xa6, 0xa4, 0x1b, 0x22, 0x2b, 0x2c, - 0x8f, 0x57, 0x7f, 0xb7, 0x33, 0xfe, 0x16, 0x43, 0x85, 0xc5, - 0xd2, 0x95, 0xe6, 0xb9, 0x21, 0x68, 0x88, 0x98, 0x33, 0x8c, - 0x1d, 0x15, 0x9c, 0x4d, 0x62, 0x1f, 0x6b, 0xe8, 0x7a, 0x2d, - 0x6b, 0x0e, 0xc3, 0xde, 0x1a, 0xa8, 0xed, 0x67, 0xb3, 0xb3, - 0x36, 0x5b, 0x4b, 0xcb, 0xe8, 0xa8, 0x5c, 0x0b, 0x2f, 0xca, - 0xd7, 0x71, 0xe8, 0x85, 0xe7, 0x4d, 0xe5, 0x7b, 0x45, 0xed, - 0xb2, 0x4c, 0x69, 0x04, 0x7e, 0x4f, 0xc0, 0xef, 0x1a, 0xca, - 0x0d, 0xa6, 0xc4, 0x79, 0x15, 0x78, 0x9c, 0xd2, 0x91, 0x3c, - 0x32, 0x55, 0x40, 0xe7, 0xcb, 0x7e, 0xde, 0x07, 0xa6, 0x97, - 0x00, 0x2d, 0x70, 0xf6, 0x3d, 0x15, 0xdf, 0x29, 0x8e, 0xa3, - 0x96, 0x6d, 0xf2, 0xbb, 0xa5, 0x1b, 0x7b, 0x58, 0x30, 0xf6, - 0x17, 0xbd, 0xda, 0x13, 0xf7, 0x33, 0xc2, 0x62, 0x32, 0xd4, - 0x1c, 0x2e, 0x31, 0x74, 0x92, 0xad, 0x99, 0x8c, 0x0e, 0x7c, - 0x50, 0x21, 0xcd, 0xff, 0x41, 0xeb, 0xd1, 0xca, 0x14, 0xb7, - 0xb2, 0x31, 0x2f, 0xbe, 0x16, 0xce, 0x4f, 0x26, 0x16, 0x04, - 0xc2, 0xaf, 0xbe, 0x0d, 0x24, 0xab, 0x9a, 0x21, 0x37, 0x06, - 0xac, 0x50, 0x23, 0xf1, 0xbe, 0x5c, 0xbb, 0x64, 0xf3, 0xd3, - 0x66, 0xa3, 0xb8, 0xbe, 0x8b, 0x49, 0x8d, 0xf6, 0xc7, 0xb9, - 0x8f, 0x4e, 0x31, 0x06, 0x51, 0xe5, 0xf3, 0x0e, 0x56, 0xc4, - 0x24, 0x30, 0xf5, 0xe9, 0x36, 0x71, 0xbc, 0xc9, 0x70, 0x2c, - 0x6c, 0x4c, 0x15, 0x43, 0x44, 0xa4, 0xfc, 0xf1, 0xd2, 0x71, - 0x6c, 0x4c, 0xce, 0x30, 0x6c, 0x05, 0x7d, 0x2e, 0xb7, 0xbc, - 0xe4, 0x65, 0x76, 0x24, 0x75, 0x36, 0xdf, 0x28, 0xfc, 0xcd, - 0x9a, 0xba, 0xc2, 0xcd, 0xb0, 0x30, 0xdb, 0xe7, 0x2e, 0x3c, - 0x92, 0x63, 0x1d, 0x30, 0x23, 0x74, 0xb1, 0xb8, 0xcc, 0xd7, - 0xb6, 0x90, 0x65, 0x73, 0xa2, 0x2a, 0x6e, 0x49, 0x95, 0x0d, - 0xab, 0x24, 0xdf, 0x2d, 0xbf, 0x76, 0x46, 0x01, 0x44, 0xe4, - 0x18, 0x8e, 0xd5, 0x9a, 0x76, 0xc9, 0xc6, 0xbc, 0xdb, 0x7f, - 0x80, 0x52, 0xc6, 0x40, 0x41, 0x12, 0x36, 0x7c, 0x80, 0x69, - 0xce, 0x7b, 0xe1, 0xa0, 0x53, 0xa2, 0xd6, 0x8f, 0x3f, 0xf7, - 0xd7, 0x61, 0x09, 0x70, 0xa2, 0xa0, 0xc6, 0xaf, 0xa0, 0xd0, - 0xfa, 0x13, 0xbf, 0xc0, 0x69, 0x15, 0xce, 0x15, 0xec, 0x24, - 0x4b, 0x6b, 0xdc, 0x93, 0x51, 0xc6, 0x82, 0x19, 0x92, 0x84, - 0x5d, 0x99, 0xb0, 0x90, 0x2c, 0xcc, 0x2a, 0x81, 0x6b, 0x22, - 0x64, 0x0a, 0xcb, 0x51, 0x25, 0x82, 0x50, 0x02, 0x2d, 0x3e, - 0xd4, 0x72, 0xb3, 0x0c, 0x15, 0x77, 0xd2, 0xca, 0x98, 0x2f, - 0x41, 0x93, 0x14, 0xb2, 0x7f, 0xa1, 0x97, 0xa3, 0xb8, 0x8a, - 0x56, 0x24, 0x38, 0xa7, 0x36, 0xc5, 0x01, 0xc0, 0x9f, 0x3f, - 0x3e, 0x9a, 0xf6, 0xe9, 0x16, 0x82, 0x01, 0x58, 0x70, 0x0e, - 0x0d, 0xbc, 0xfa, 0x03, 0x57, 0x65, 0xa8, 0x5a, 0x3d, 0x57, - 0x81, 0x23, 0xbe, 0x6e, 0xa9, 0xe8, 0x22, 0xdf, 0x2f, 0x70, - 0xeb, 0x0a, 0x03, 0x96, 0x6b, 0xef, 0x20, 0x9f, 0xf2, 0x62, - 0xe7, 0xb2, 0x6e, 0x3a, 0x1e, 0x40, 0x1f, 0xd2, 0x97, 0x48, - 0xd1, 0x18, 0xf0, 0xeb, 0x52, 0x58, 0x02, 0x26, 0xce, 0x75, - 0xb1, 0x3a, 0x9d, 0x5b, 0x52, 0x94, 0xb2, 0x6e, 0x0e, 0x3f, - 0x39, 0xb6, 0xd9, 0x8a, 0x9d, 0xe8, 0x7c, 0x83, 0x32, 0xcc, - 0x43, 0x35, 0x9b, 0x7a, 0xed, 0xb2, 0x1e, 0x51, 0x37, 0x6c, - 0x14, 0xd8, 0xb8, 0x55, 0xb3, 0x91, 0xef, 0x0c, 0x3a, 0xe5, - 0x77, 0xd0, 0xbd, 0xb0, 0x7d, 0x38, 0x84, 0x2a, 0x47, 0xb2, - 0xb6, 0xda, 0xd7, 0x75, 0xd6, 0x2e, 0x60, 0xc7, 0x10, 0x52, - 0xf7, 0xdd, 0x09, 0x15, 0x6f, 0x04, 0x31, 0xc3, 0x5a, 0x6b, - 0x0c, 0x60, 0x10, 0xa8, 0x6e, 0x20, 0xa9, 0xdd, 0xb7, 0x72, - 0xc3, 0x9e, 0x85, 0xd2, 0x8f, 0x16, 0x7e, 0x3d, 0xe0, 0x63, - 0x81, 0x32, 0xfd, 0xca, 0xbc, 0x0f, 0xef, 0x3e, 0x74, 0x6a, - 0xb1, 0x60, 0xc1, 0x10, 0x50, 0x7c, 0x67, 0xa4, 0x19, 0xa7, - 0xb8, 0xed, 0xe6, 0xf5, 0x4e, 0x41, 0x53, 0xa6, 0x72, 0x1b, - 0x2c, 0x33, 0x6a, 0x37, 0xf1, 0xb5, 0x1c, 0x01, 0x7d, 0xa2, - 0x1f, 0x2c, 0x4e, 0x0a, 0xbf, 0xd4, 0x2c, 0x24, 0x91, 0x58, - 0x62, 0xfb, 0xf8, 0x63, 0xd9, 0xf8, 0x78, 0xf5, 0xc7, 0x78, - 0x32, 0xda, 0x99, 0xeb, 0x58, 0x20, 0x25, 0x19, 0xb1, 0x06, - 0x7f, 0x6a, 0x29, 0x20, 0xdb, 0xc8, 0x22, 0x48, 0xa9, 0x7f, - 0x24, 0x54, 0x8d, 0x7d, 0x8d, 0xb1, 0x69, 0xb2, 0xa3, 0x98, - 0x14, 0x0f, 0xba, 0xfa, 0xb6, 0x15, 0xe8, 0x28, 0x99, 0x3f, - 0x30, 0x04, 0x50, 0xab, 0x5a, 0x3c, 0xf1, 0x97, 0xe1, 0xc8, - 0x0f, 0x0e, 0xb4, 0x11, 0x63, 0x5a, 0x79, 0x08, 0x48, 0x75, - 0xaf, 0x9b, 0xca, 0xd9, 0x13, 0x18, 0xcc, 0xb1, 0xb3, 0xee, - 0xdd, 0x63, 0xdd, 0xf4, 0x21, 0x98, 0x76, 0xe2, 0x3e, 0xd5, - 0x86, 0x23, 0x33, 0x7e, 0xc7, 0xb4, 0x35, 0x4b, 0xc2, 0x2d, - 0xe1, 0xe2, 0xb0, 0x6c, 0x8b, 0x9b, 0x20, 0x3d, 0x48, 0x24, - 0x7c, 0xea, 0xa1, 0x75, 0x27, 0xe5, 0xf4, 0x70, 0xeb, 0x3b, - 0xc7, 0x26, 0x37, 0x04, 0xff, 0x8a, 0x7a, 0xd0, 0xc2, 0xb7, - 0x84, 0xb7, 0x29, 0xfb, 0x0e, 0xa3, 0xa8, 0x71, 0xcd, 0x58, - 0x06, 0x36, 0xe2, 0xf2, 0x77, 0xcc, 0x0f, 0x78, 0x08, 0x2b, - 0xbb, 0xe3, 0x53, 0x05, 0x71, 0xdc, 0x6c, 0x37, 0x32, 0x91, - 0x46, 0x42, 0x4f, 0x21, 0xe0, 0x34, 0xad, 0x3f, 0x30, 0x5a, - 0xc7, 0x0d, 0x17, 0x19, 0x39, 0x31, 0x58, 0x69, 0x3c, 0x8c, - 0xbe, 0xe7, 0xa6, 0x3b, 0xad, 0xfb, 0x46, 0x89, 0x06, 0xc1, - 0x8c, 0x16, 0x9a, 0x06, 0x3a, 0xd0, 0x7e, 0xd6, 0xb0, 0x7b, - 0x7d, 0xf8, 0x91, 0x7c, 0xfa, 0xd9, 0x66, 0x39, 0xfa, 0xbc, - 0x57, 0xa7, 0x78, 0x8b, 0x36, 0x78, 0xc0, 0x1c, 0x0e, 0x23, - 0x05, 0x0e, 0x04, 0x61, 0x16, 0x34, 0xf9, 0xc6, 0x63, 0x58, - 0xdf, 0xf4, 0x52, 0xce, 0xd0, 0x0f, 0x0c, 0xec, 0xb1, 0x82, - 0xf4, 0x72, 0x73, 0x72, 0x3f, 0x02, 0xbe, 0xe3, 0x9c, 0x63, - 0x73, 0xc8, 0x21, 0x65, 0xba, 0x57, 0x52, 0xa9, 0x19, 0xac, - 0x68, 0x50, 0xbd, 0x2d, 0x72, 0x5b, 0x93, 0x0f, 0x1c, 0x81, - 0x77, 0xd7, 0x2e, 0xc3, 0x93, 0x52, 0x6e, 0xdc, 0x79, 0x52, - 0x9f, 0xe3, 0xde, 0xe1, 0xba, 0x58, 0x55, 0xab, 0x8a, 0xf2, - 0x35, 0x6a, 0xcf, 0x94, 0x1f, 0x17, 0xa4, 0x23, 0x2e, 0x8e, - 0x18, 0x21, 0xbe, 0x14, 0xfa, 0xe7, 0x59, 0xc5, 0x44, 0x34, - 0xce, 0x03, 0xf4, 0xb7, 0x75, 0xd3, 0x51, 0x55, 0xdf, 0xff, - 0xcf, 0x4f, 0x44, 0xee, 0x13, 0x9b, 0xcb, 0x12, 0xae, 0xe5, - 0x5b, 0x44, 0x65, 0x28, 0xcb, 0x6a, 0x9c, 0x24, 0x1d, 0xea, - 0x2d, 0x5e, 0xa5, 0xc3, 0x78, 0xad, 0xed, 0x0c, 0x05, 0xa6, - 0xaf, 0x95, 0x04, 0xd2, 0xb5, 0x91, 0x0e, 0xa0, 0x06, 0x77, - 0xc5, 0x82, 0xf6, 0xdd, 0x72, 0x83, 0x04, 0xcc, 0xb0, 0xab, - 0x7a, 0xf0, 0xb4, 0x4d, 0x36, 0x71, 0x72, 0x1a, 0x9a, 0x0d, - 0xcd, 0xa3, 0x11, 0xa8, 0x0d, 0x7d, 0x49, 0xce, 0x9c, 0x09, - 0x1d, 0x08, 0xa4, 0x39, 0x2e, 0x03, 0xdf, 0x3a, 0xc8, 0xfe, - 0x6a, 0x2b, 0x0b, 0x07, 0x80, 0x55, 0x8a, 0xa8, 0xe6, 0x0e, - 0xc9, 0x7e, 0x83, 0xce, 0x3a, 0x98, 0x98, 0x4e, 0x3e, 0x08, - 0x20, 0x8f, 0x10, 0xfc, 0xc1, 0xc4, 0xcf, 0x37, 0x8d, 0x69, - 0xd8, 0x57, 0x9d, 0x48, 0x80, 0x6a, 0xef, 0x0c, 0xdd, 0x27, - 0x99, 0xf9, 0xe7, 0xd0, 0xd2, 0x36, 0xd8, 0xed, 0x41, 0x14, - 0x1b, 0x10, +/* ./certs/mldsa/bench_mldsa_65_pubkey.der */ +static const unsigned char bench_mldsa_65_pubkey[] = +{ + 0x15, 0xC9, 0xE5, 0x53, 0x2F, 0xD8, 0x1F, 0xB4, 0xA3, 0x9F, + 0xAE, 0xAD, 0xB3, 0x10, 0xD0, 0x72, 0x69, 0xD3, 0x02, 0xF3, + 0xDF, 0x67, 0x5A, 0x31, 0x52, 0x19, 0xCA, 0x39, 0x27, 0x77, + 0x61, 0x6D, 0x0F, 0xC1, 0x33, 0x26, 0x09, 0xF0, 0xF9, 0x4D, + 0x12, 0x7A, 0xEF, 0xF7, 0x21, 0x26, 0x2C, 0xE0, 0xE2, 0x92, + 0x1F, 0x9D, 0xD1, 0xAA, 0xAF, 0x08, 0x14, 0xF2, 0xAA, 0x24, + 0x99, 0x0F, 0x20, 0x57, 0x35, 0x04, 0x32, 0x96, 0x8E, 0x6E, + 0x10, 0x64, 0xE3, 0xE3, 0x57, 0x26, 0x33, 0x32, 0x7B, 0xE4, + 0x18, 0x41, 0x77, 0xD3, 0x24, 0x63, 0x3D, 0x11, 0xEA, 0xDC, + 0xBE, 0x59, 0xFF, 0x8D, 0xC2, 0xE4, 0xC7, 0x04, 0xF3, 0xD4, + 0xE0, 0x1D, 0x5E, 0x09, 0x46, 0xBF, 0x02, 0x05, 0xC7, 0xA6, + 0xB7, 0x82, 0x40, 0x1F, 0x55, 0xE9, 0x77, 0x82, 0xC0, 0xCC, + 0x86, 0x99, 0x19, 0x99, 0xA2, 0xC9, 0x1B, 0x4F, 0xDD, 0x49, + 0x4C, 0x78, 0x0A, 0x58, 0xB8, 0xF0, 0x23, 0xAC, 0x1A, 0x71, + 0x57, 0x6D, 0xD6, 0x3A, 0x3A, 0x6F, 0x93, 0xB3, 0x2B, 0x09, + 0xBE, 0xEC, 0x7B, 0x5B, 0xF7, 0x3A, 0xED, 0xF9, 0xD0, 0xB1, + 0xFE, 0x9F, 0x9B, 0xEC, 0x11, 0xB6, 0x6B, 0xD1, 0xB6, 0x00, + 0x72, 0x7F, 0x68, 0x9A, 0x61, 0xA5, 0xF5, 0x6E, 0xE9, 0x46, + 0xA4, 0x82, 0x08, 0x9F, 0x50, 0x4C, 0x75, 0xC3, 0x48, 0x85, + 0x76, 0x39, 0xEA, 0x0C, 0xF2, 0xE8, 0x7E, 0x48, 0x69, 0xD9, + 0x6F, 0x9A, 0x89, 0x7D, 0x98, 0xC1, 0x16, 0xDC, 0x2F, 0xC7, + 0x0A, 0x11, 0xA8, 0xBB, 0xE7, 0x91, 0xB1, 0x0F, 0x0E, 0xF0, + 0xB4, 0xC8, 0x41, 0x7E, 0x62, 0x9E, 0x3C, 0x30, 0x4C, 0xBC, + 0x4C, 0xEB, 0x37, 0xAF, 0x48, 0x72, 0x59, 0x64, 0x8E, 0xFB, + 0x77, 0x11, 0x28, 0xDD, 0x30, 0x52, 0x8E, 0x69, 0x8C, 0x9F, + 0x3D, 0xEC, 0xDF, 0xA7, 0x5F, 0x42, 0x18, 0xDA, 0xBA, 0x1A, + 0x96, 0x91, 0x7D, 0x62, 0xD5, 0x52, 0xFF, 0x44, 0xC9, 0x1D, + 0x29, 0xA6, 0xB9, 0x03, 0x9A, 0x26, 0x26, 0xCF, 0x57, 0x40, + 0x70, 0x7E, 0x2B, 0xBD, 0xF0, 0x81, 0x71, 0x0F, 0x0B, 0x2E, + 0x9B, 0x03, 0xBA, 0x31, 0x41, 0x68, 0x37, 0xC8, 0xFF, 0xEA, + 0xC4, 0x73, 0xA5, 0xF9, 0xC2, 0x92, 0x78, 0x0C, 0xE7, 0xFD, + 0x5D, 0xB2, 0x01, 0xB5, 0x8D, 0xEB, 0x64, 0xD4, 0x14, 0xEA, + 0x7A, 0xD1, 0x42, 0xC8, 0x99, 0xE4, 0x7D, 0x5B, 0x7E, 0x3B, + 0x8F, 0xAB, 0x82, 0x12, 0xDF, 0xBB, 0xA1, 0x45, 0x30, 0xC9, + 0x0F, 0xB9, 0xE5, 0xBA, 0xE6, 0x8A, 0xF3, 0x78, 0x61, 0xCC, + 0x9F, 0xE1, 0x46, 0x2A, 0x9A, 0x18, 0x0E, 0x2A, 0x57, 0xF3, + 0xE5, 0x56, 0xD1, 0x42, 0x48, 0xE1, 0x5A, 0x8E, 0x33, 0xCE, + 0x19, 0xE5, 0x3E, 0x7F, 0x00, 0x70, 0x9C, 0x4C, 0xD3, 0xE1, + 0x0C, 0xA1, 0x7E, 0xD4, 0xA9, 0x9E, 0x8B, 0xE2, 0xF0, 0xAC, + 0xDB, 0xA6, 0x72, 0x75, 0x67, 0xA6, 0x57, 0xED, 0x79, 0x2E, + 0xCA, 0x8D, 0xEB, 0x9B, 0x9E, 0xB7, 0xBF, 0x30, 0x02, 0x2B, + 0xB3, 0x43, 0x89, 0x9B, 0xA8, 0x88, 0xA5, 0xBB, 0x33, 0xD9, + 0x99, 0x30, 0x7C, 0xC7, 0xD4, 0x28, 0x5E, 0x5E, 0x3F, 0x9D, + 0x6D, 0x35, 0x75, 0x33, 0x8E, 0xFF, 0x84, 0x2E, 0x2D, 0xDA, + 0xF0, 0xFF, 0x70, 0xE5, 0xB5, 0x62, 0x96, 0x33, 0x3A, 0xD9, + 0xB5, 0x82, 0x25, 0x81, 0x81, 0x40, 0x5D, 0x4F, 0x11, 0x86, + 0x63, 0x1A, 0x06, 0xC1, 0x67, 0xC7, 0x49, 0x03, 0xC7, 0xE4, + 0x6F, 0xB4, 0x13, 0x3E, 0x57, 0x62, 0xFD, 0x8A, 0xC6, 0x2B, + 0x65, 0x5B, 0xA4, 0x29, 0x57, 0x8D, 0xDE, 0xA5, 0xEE, 0x32, + 0xC2, 0x76, 0x03, 0xCA, 0xCE, 0xC1, 0x48, 0xEC, 0x45, 0xCF, + 0x30, 0x21, 0x28, 0x7F, 0x10, 0x47, 0xD2, 0xDB, 0xEE, 0xCA, + 0x5B, 0x0F, 0xD5, 0x39, 0x3A, 0xC3, 0xA6, 0x78, 0xB2, 0x15, + 0xAF, 0x82, 0x3C, 0x2F, 0xC4, 0x51, 0x5C, 0x52, 0xAD, 0xF2, + 0x89, 0x92, 0x8E, 0xF3, 0x50, 0x38, 0xED, 0xF8, 0xC9, 0x14, + 0x4C, 0xE4, 0xA3, 0x9A, 0xAF, 0xC4, 0x5C, 0xF3, 0x9F, 0xC3, + 0xA3, 0xC0, 0xBE, 0x45, 0x1B, 0x21, 0x63, 0xFA, 0xE0, 0xE0, + 0x91, 0x2B, 0x42, 0xCA, 0x91, 0xFB, 0x5E, 0x97, 0x9A, 0x0A, + 0xD4, 0x88, 0xBA, 0xB8, 0x22, 0xC6, 0xBF, 0x56, 0x58, 0x1E, + 0x92, 0xA9, 0x9D, 0xA7, 0xED, 0xC9, 0xAB, 0x54, 0x4F, 0x75, + 0x8D, 0x42, 0xC1, 0xE1, 0x61, 0xD0, 0x91, 0x9A, 0x3A, 0x40, + 0x9A, 0xA3, 0xFB, 0x7B, 0x4E, 0xF0, 0x85, 0xF0, 0xDC, 0x40, + 0x72, 0x9F, 0x05, 0xA8, 0xBE, 0x95, 0x5A, 0x7F, 0xBA, 0x75, + 0x00, 0x6E, 0x95, 0x76, 0xBD, 0xB2, 0x40, 0xF5, 0xB0, 0x64, + 0x0A, 0x2F, 0x06, 0x3D, 0x9F, 0xAC, 0x6A, 0xA5, 0x46, 0x5A, + 0x85, 0xA4, 0x6F, 0xEE, 0x27, 0xA0, 0xEB, 0x5F, 0x1F, 0x91, + 0xBD, 0x2B, 0x02, 0x16, 0xDF, 0x74, 0x97, 0x2C, 0xD0, 0xA8, + 0x9F, 0x3A, 0x7B, 0xDF, 0x3E, 0x98, 0x4A, 0x91, 0xDC, 0x19, + 0x96, 0x88, 0x75, 0x21, 0x1A, 0x6A, 0xA8, 0x4B, 0x1F, 0x35, + 0xD1, 0x92, 0xF5, 0x76, 0xF4, 0x72, 0x55, 0x13, 0xDB, 0x5D, + 0x07, 0x8D, 0xD9, 0x72, 0xE4, 0x75, 0xDE, 0x80, 0xBC, 0xE9, + 0x9C, 0xF0, 0x5C, 0x6A, 0x8A, 0x0E, 0x34, 0xF6, 0x3F, 0x5C, + 0xEF, 0x0E, 0xCC, 0x52, 0x38, 0x2D, 0x7B, 0xC2, 0x1B, 0x69, + 0x9F, 0xE5, 0xED, 0x14, 0xB0, 0x91, 0x0B, 0xE9, 0x4D, 0x34, + 0xD5, 0xAA, 0xD4, 0xD2, 0x46, 0x39, 0x45, 0x7E, 0x85, 0x2F, + 0xDB, 0x89, 0xF4, 0xFF, 0x05, 0x74, 0x51, 0xBA, 0xDD, 0xEE, + 0xF6, 0xC2, 0xC1, 0x0A, 0x8F, 0xD9, 0xEB, 0xC7, 0x61, 0x30, + 0x8F, 0x86, 0x8B, 0x1F, 0x82, 0xC1, 0x22, 0xFD, 0x83, 0xF4, + 0x5D, 0xC5, 0x94, 0xF5, 0xD7, 0x17, 0xC7, 0x7B, 0x71, 0xF5, + 0x5E, 0x15, 0x49, 0x70, 0xB2, 0x57, 0xA0, 0xC0, 0x57, 0x63, + 0x53, 0x35, 0xB6, 0x52, 0x20, 0x7B, 0x83, 0xD4, 0x57, 0x63, + 0x25, 0x8E, 0x83, 0xB3, 0x8E, 0x26, 0x1F, 0x09, 0xDE, 0x14, + 0xD6, 0xA6, 0xFC, 0xE5, 0x93, 0x3C, 0x88, 0x8E, 0xF5, 0x10, + 0x57, 0xB9, 0xC9, 0x9B, 0xFF, 0x72, 0x9D, 0x3D, 0x3F, 0x97, + 0xD9, 0x3C, 0x20, 0xE2, 0x57, 0xFD, 0x2A, 0x5C, 0x17, 0x12, + 0xE6, 0x08, 0xAF, 0xE4, 0x26, 0x96, 0xB9, 0x6D, 0xC3, 0xAC, + 0x22, 0xF3, 0x8B, 0x89, 0xDE, 0xC7, 0x8A, 0x93, 0x06, 0xF7, + 0x1D, 0x08, 0x21, 0x36, 0x16, 0x74, 0x2B, 0x97, 0x23, 0xE4, + 0x79, 0x31, 0x08, 0x23, 0x62, 0x30, 0x67, 0xE2, 0xED, 0x30, + 0x9B, 0x0C, 0xF9, 0x08, 0x7A, 0x29, 0x73, 0xC6, 0x77, 0x8A, + 0xBB, 0x2A, 0x1C, 0x66, 0xD0, 0xDD, 0x9E, 0xA3, 0xE9, 0x62, + 0xCC, 0xB7, 0x88, 0x25, 0x4A, 0x5F, 0xBC, 0xAA, 0xE3, 0xE4, + 0x4F, 0xEC, 0xA6, 0x8E, 0xA6, 0xA4, 0x1B, 0x22, 0x2B, 0x2C, + 0x8F, 0x57, 0x7F, 0xB7, 0x33, 0xFE, 0x16, 0x43, 0x85, 0xC5, + 0xD2, 0x95, 0xE6, 0xB9, 0x21, 0x68, 0x88, 0x98, 0x33, 0x8C, + 0x1D, 0x15, 0x9C, 0x4D, 0x62, 0x1F, 0x6B, 0xE8, 0x7A, 0x2D, + 0x6B, 0x0E, 0xC3, 0xDE, 0x1A, 0xA8, 0xED, 0x67, 0xB3, 0xB3, + 0x36, 0x5B, 0x4B, 0xCB, 0xE8, 0xA8, 0x5C, 0x0B, 0x2F, 0xCA, + 0xD7, 0x71, 0xE8, 0x85, 0xE7, 0x4D, 0xE5, 0x7B, 0x45, 0xED, + 0xB2, 0x4C, 0x69, 0x04, 0x7E, 0x4F, 0xC0, 0xEF, 0x1A, 0xCA, + 0x0D, 0xA6, 0xC4, 0x79, 0x15, 0x78, 0x9C, 0xD2, 0x91, 0x3C, + 0x32, 0x55, 0x40, 0xE7, 0xCB, 0x7E, 0xDE, 0x07, 0xA6, 0x97, + 0x00, 0x2D, 0x70, 0xF6, 0x3D, 0x15, 0xDF, 0x29, 0x8E, 0xA3, + 0x96, 0x6D, 0xF2, 0xBB, 0xA5, 0x1B, 0x7B, 0x58, 0x30, 0xF6, + 0x17, 0xBD, 0xDA, 0x13, 0xF7, 0x33, 0xC2, 0x62, 0x32, 0xD4, + 0x1C, 0x2E, 0x31, 0x74, 0x92, 0xAD, 0x99, 0x8C, 0x0E, 0x7C, + 0x50, 0x21, 0xCD, 0xFF, 0x41, 0xEB, 0xD1, 0xCA, 0x14, 0xB7, + 0xB2, 0x31, 0x2F, 0xBE, 0x16, 0xCE, 0x4F, 0x26, 0x16, 0x04, + 0xC2, 0xAF, 0xBE, 0x0D, 0x24, 0xAB, 0x9A, 0x21, 0x37, 0x06, + 0xAC, 0x50, 0x23, 0xF1, 0xBE, 0x5C, 0xBB, 0x64, 0xF3, 0xD3, + 0x66, 0xA3, 0xB8, 0xBE, 0x8B, 0x49, 0x8D, 0xF6, 0xC7, 0xB9, + 0x8F, 0x4E, 0x31, 0x06, 0x51, 0xE5, 0xF3, 0x0E, 0x56, 0xC4, + 0x24, 0x30, 0xF5, 0xE9, 0x36, 0x71, 0xBC, 0xC9, 0x70, 0x2C, + 0x6C, 0x4C, 0x15, 0x43, 0x44, 0xA4, 0xFC, 0xF1, 0xD2, 0x71, + 0x6C, 0x4C, 0xCE, 0x30, 0x6C, 0x05, 0x7D, 0x2E, 0xB7, 0xBC, + 0xE4, 0x65, 0x76, 0x24, 0x75, 0x36, 0xDF, 0x28, 0xFC, 0xCD, + 0x9A, 0xBA, 0xC2, 0xCD, 0xB0, 0x30, 0xDB, 0xE7, 0x2E, 0x3C, + 0x92, 0x63, 0x1D, 0x30, 0x23, 0x74, 0xB1, 0xB8, 0xCC, 0xD7, + 0xB6, 0x90, 0x65, 0x73, 0xA2, 0x2A, 0x6E, 0x49, 0x95, 0x0D, + 0xAB, 0x24, 0xDF, 0x2D, 0xBF, 0x76, 0x46, 0x01, 0x44, 0xE4, + 0x18, 0x8E, 0xD5, 0x9A, 0x76, 0xC9, 0xC6, 0xBC, 0xDB, 0x7F, + 0x80, 0x52, 0xC6, 0x40, 0x41, 0x12, 0x36, 0x7C, 0x80, 0x69, + 0xCE, 0x7B, 0xE1, 0xA0, 0x53, 0xA2, 0xD6, 0x8F, 0x3F, 0xF7, + 0xD7, 0x61, 0x09, 0x70, 0xA2, 0xA0, 0xC6, 0xAF, 0xA0, 0xD0, + 0xFA, 0x13, 0xBF, 0xC0, 0x69, 0x15, 0xCE, 0x15, 0xEC, 0x24, + 0x4B, 0x6B, 0xDC, 0x93, 0x51, 0xC6, 0x82, 0x19, 0x92, 0x84, + 0x5D, 0x99, 0xB0, 0x90, 0x2C, 0xCC, 0x2A, 0x81, 0x6B, 0x22, + 0x64, 0x0A, 0xCB, 0x51, 0x25, 0x82, 0x50, 0x02, 0x2D, 0x3E, + 0xD4, 0x72, 0xB3, 0x0C, 0x15, 0x77, 0xD2, 0xCA, 0x98, 0x2F, + 0x41, 0x93, 0x14, 0xB2, 0x7F, 0xA1, 0x97, 0xA3, 0xB8, 0x8A, + 0x56, 0x24, 0x38, 0xA7, 0x36, 0xC5, 0x01, 0xC0, 0x9F, 0x3F, + 0x3E, 0x9A, 0xF6, 0xE9, 0x16, 0x82, 0x01, 0x58, 0x70, 0x0E, + 0x0D, 0xBC, 0xFA, 0x03, 0x57, 0x65, 0xA8, 0x5A, 0x3D, 0x57, + 0x81, 0x23, 0xBE, 0x6E, 0xA9, 0xE8, 0x22, 0xDF, 0x2F, 0x70, + 0xEB, 0x0A, 0x03, 0x96, 0x6B, 0xEF, 0x20, 0x9F, 0xF2, 0x62, + 0xE7, 0xB2, 0x6E, 0x3A, 0x1E, 0x40, 0x1F, 0xD2, 0x97, 0x48, + 0xD1, 0x18, 0xF0, 0xEB, 0x52, 0x58, 0x02, 0x26, 0xCE, 0x75, + 0xB1, 0x3A, 0x9D, 0x5B, 0x52, 0x94, 0xB2, 0x6E, 0x0E, 0x3F, + 0x39, 0xB6, 0xD9, 0x8A, 0x9D, 0xE8, 0x7C, 0x83, 0x32, 0xCC, + 0x43, 0x35, 0x9B, 0x7A, 0xED, 0xB2, 0x1E, 0x51, 0x37, 0x6C, + 0x14, 0xD8, 0xB8, 0x55, 0xB3, 0x91, 0xEF, 0x0C, 0x3A, 0xE5, + 0x77, 0xD0, 0xBD, 0xB0, 0x7D, 0x38, 0x84, 0x2A, 0x47, 0xB2, + 0xB6, 0xDA, 0xD7, 0x75, 0xD6, 0x2E, 0x60, 0xC7, 0x10, 0x52, + 0xF7, 0xDD, 0x09, 0x15, 0x6F, 0x04, 0x31, 0xC3, 0x5A, 0x6B, + 0x0C, 0x60, 0x10, 0xA8, 0x6E, 0x20, 0xA9, 0xDD, 0xB7, 0x72, + 0xC3, 0x9E, 0x85, 0xD2, 0x8F, 0x16, 0x7E, 0x3D, 0xE0, 0x63, + 0x81, 0x32, 0xFD, 0xCA, 0xBC, 0x0F, 0xEF, 0x3E, 0x74, 0x6A, + 0xB1, 0x60, 0xC1, 0x10, 0x50, 0x7C, 0x67, 0xA4, 0x19, 0xA7, + 0xB8, 0xED, 0xE6, 0xF5, 0x4E, 0x41, 0x53, 0xA6, 0x72, 0x1B, + 0x2C, 0x33, 0x6A, 0x37, 0xF1, 0xB5, 0x1C, 0x01, 0x7D, 0xA2, + 0x1F, 0x2C, 0x4E, 0x0A, 0xBF, 0xD4, 0x2C, 0x24, 0x91, 0x58, + 0x62, 0xFB, 0xF8, 0x63, 0xD9, 0xF8, 0x78, 0xF5, 0xC7, 0x78, + 0x32, 0xDA, 0x99, 0xEB, 0x58, 0x20, 0x25, 0x19, 0xB1, 0x06, + 0x7F, 0x6A, 0x29, 0x20, 0xDB, 0xC8, 0x22, 0x48, 0xA9, 0x7F, + 0x24, 0x54, 0x8D, 0x7D, 0x8D, 0xB1, 0x69, 0xB2, 0xA3, 0x98, + 0x14, 0x0F, 0xBA, 0xFA, 0xB6, 0x15, 0xE8, 0x28, 0x99, 0x3F, + 0x30, 0x04, 0x50, 0xAB, 0x5A, 0x3C, 0xF1, 0x97, 0xE1, 0xC8, + 0x0F, 0x0E, 0xB4, 0x11, 0x63, 0x5A, 0x79, 0x08, 0x48, 0x75, + 0xAF, 0x9B, 0xCA, 0xD9, 0x13, 0x18, 0xCC, 0xB1, 0xB3, 0xEE, + 0xDD, 0x63, 0xDD, 0xF4, 0x21, 0x98, 0x76, 0xE2, 0x3E, 0xD5, + 0x86, 0x23, 0x33, 0x7E, 0xC7, 0xB4, 0x35, 0x4B, 0xC2, 0x2D, + 0xE1, 0xE2, 0xB0, 0x6C, 0x8B, 0x9B, 0x20, 0x3D, 0x48, 0x24, + 0x7C, 0xEA, 0xA1, 0x75, 0x27, 0xE5, 0xF4, 0x70, 0xEB, 0x3B, + 0xC7, 0x26, 0x37, 0x04, 0xFF, 0x8A, 0x7A, 0xD0, 0xC2, 0xB7, + 0x84, 0xB7, 0x29, 0xFB, 0x0E, 0xA3, 0xA8, 0x71, 0xCD, 0x58, + 0x06, 0x36, 0xE2, 0xF2, 0x77, 0xCC, 0x0F, 0x78, 0x08, 0x2B, + 0xBB, 0xE3, 0x53, 0x05, 0x71, 0xDC, 0x6C, 0x37, 0x32, 0x91, + 0x46, 0x42, 0x4F, 0x21, 0xE0, 0x34, 0xAD, 0x3F, 0x30, 0x5A, + 0xC7, 0x0D, 0x17, 0x19, 0x39, 0x31, 0x58, 0x69, 0x3C, 0x8C, + 0xBE, 0xE7, 0xA6, 0x3B, 0xAD, 0xFB, 0x46, 0x89, 0x06, 0xC1, + 0x8C, 0x16, 0x9A, 0x06, 0x3A, 0xD0, 0x7E, 0xD6, 0xB0, 0x7B, + 0x7D, 0xF8, 0x91, 0x7C, 0xFA, 0xD9, 0x66, 0x39, 0xFA, 0xBC, + 0x57, 0xA7, 0x78, 0x8B, 0x36, 0x78, 0xC0, 0x1C, 0x0E, 0x23, + 0x05, 0x0E, 0x04, 0x61, 0x16, 0x34, 0xF9, 0xC6, 0x63, 0x58, + 0xDF, 0xF4, 0x52, 0xCE, 0xD0, 0x0F, 0x0C, 0xEC, 0xB1, 0x82, + 0xF4, 0x72, 0x73, 0x72, 0x3F, 0x02, 0xBE, 0xE3, 0x9C, 0x63, + 0x73, 0xC8, 0x21, 0x65, 0xBA, 0x57, 0x52, 0xA9, 0x19, 0xAC, + 0x68, 0x50, 0xBD, 0x2D, 0x72, 0x5B, 0x93, 0x0F, 0x1C, 0x81, + 0x77, 0xD7, 0x2E, 0xC3, 0x93, 0x52, 0x6E, 0xDC, 0x79, 0x52, + 0x9F, 0xE3, 0xDE, 0xE1, 0xBA, 0x58, 0x55, 0xAB, 0x8A, 0xF2, + 0x35, 0x6A, 0xCF, 0x94, 0x1F, 0x17, 0xA4, 0x23, 0x2E, 0x8E, + 0x18, 0x21, 0xBE, 0x14, 0xFA, 0xE7, 0x59, 0xC5, 0x44, 0x34, + 0xCE, 0x03, 0xF4, 0xB7, 0x75, 0xD3, 0x51, 0x55, 0xDF, 0xFF, + 0xCF, 0x4F, 0x44, 0xEE, 0x13, 0x9B, 0xCB, 0x12, 0xAE, 0xE5, + 0x5B, 0x44, 0x65, 0x28, 0xCB, 0x6A, 0x9C, 0x24, 0x1D, 0xEA, + 0x2D, 0x5E, 0xA5, 0xC3, 0x78, 0xAD, 0xED, 0x0C, 0x05, 0xA6, + 0xAF, 0x95, 0x04, 0xD2, 0xB5, 0x91, 0x0E, 0xA0, 0x06, 0x77, + 0xC5, 0x82, 0xF6, 0xDD, 0x72, 0x83, 0x04, 0xCC, 0xB0, 0xAB, + 0x7A, 0xF0, 0xB4, 0x4D, 0x36, 0x71, 0x72, 0x1A, 0x9A, 0x0D, + 0xCD, 0xA3, 0x11, 0xA8, 0x0D, 0x7D, 0x49, 0xCE, 0x9C, 0x09, + 0x1D, 0x08, 0xA4, 0x39, 0x2E, 0x03, 0xDF, 0x3A, 0xC8, 0xFE, + 0x6A, 0x2B, 0x0B, 0x07, 0x80, 0x55, 0x8A, 0xA8, 0xE6, 0x0E, + 0xC9, 0x7E, 0x83, 0xCE, 0x3A, 0x98, 0x98, 0x4E, 0x3E, 0x08, + 0x20, 0x8F, 0x10, 0xFC, 0xC1, 0xC4, 0xCF, 0x37, 0x8D, 0x69, + 0xD8, 0x57, 0x9D, 0x48, 0x80, 0x6A, 0xEF, 0x0C, 0xDD, 0x27, + 0x99, 0xF9, 0xE7, 0xD0, 0xD2, 0x36, 0xD8, 0xED, 0x41, 0x14, + 0x1B, 0x10 }; -static const int sizeof_bench_dilithium_level3_pubkey = - sizeof(bench_dilithium_level3_pubkey); - +#define sizeof_bench_mldsa_65_pubkey (sizeof(bench_mldsa_65_pubkey)) #endif /* !WOLFSSL_MLDSA_NO_VERIFY */ #ifndef WOLFSSL_MLDSA_NO_SIGN - -/* raw private key without ASN1 syntax from - * ./certs/dilithium/bench_dilithium_level5_key.der */ -static const unsigned char bench_dilithium_level5_key[] = { - 0xef, 0x49, 0x79, 0x47, 0x15, 0xc4, 0x8a, 0xa9, 0x74, 0x2a, - 0xf0, 0x36, 0x94, 0x5c, 0x91, 0x1c, 0x5d, 0xff, 0x2c, 0x83, - 0xf2, 0x8b, 0x04, 0xfc, 0x5d, 0x64, 0xbd, 0x49, 0x73, 0xcd, - 0xcc, 0x99, 0xfd, 0x0f, 0x8f, 0x6e, 0xad, 0x75, 0x9b, 0xc9, - 0xb1, 0xb9, 0x90, 0x93, 0xbf, 0xce, 0x02, 0x2d, 0x12, 0x0c, - 0x54, 0x2e, 0xe2, 0x3e, 0x52, 0xff, 0xe0, 0x7a, 0xca, 0x2d, - 0x81, 0x84, 0xea, 0x16, 0x1f, 0x10, 0xc4, 0xc9, 0xde, 0xcd, - 0xf6, 0xbd, 0x60, 0xc9, 0xb3, 0xd0, 0x0f, 0x57, 0xeb, 0x71, - 0x78, 0x9b, 0xb5, 0x72, 0x2a, 0x65, 0x11, 0x14, 0xff, 0x63, - 0x8d, 0x38, 0xcf, 0xa4, 0xf4, 0xad, 0xd0, 0x68, 0x84, 0x97, - 0xfe, 0xd3, 0x91, 0xa0, 0xe4, 0xc3, 0x74, 0xcf, 0x20, 0x87, - 0x89, 0x84, 0x1f, 0x75, 0x91, 0xe3, 0xb3, 0x47, 0x8b, 0xfe, - 0x76, 0xb7, 0x2d, 0x30, 0x89, 0x02, 0x04, 0xc9, 0x93, 0xa8, - 0x31, 0xd3, 0x84, 0x2d, 0xe4, 0x26, 0x12, 0xdb, 0x94, 0x08, - 0x12, 0x45, 0x45, 0xca, 0x44, 0x89, 0x52, 0xc4, 0x28, 0x41, - 0x46, 0x01, 0x1c, 0x93, 0x20, 0x8b, 0x40, 0x6d, 0x09, 0x36, - 0x65, 0x4c, 0xa2, 0x40, 0x62, 0xb8, 0x2c, 0x1b, 0x00, 0x20, - 0x61, 0x42, 0x8c, 0x24, 0xa7, 0x10, 0x19, 0x27, 0x25, 0x22, - 0x14, 0x31, 0x13, 0x33, 0x46, 0x0c, 0x22, 0x22, 0x18, 0xa7, - 0x91, 0x0c, 0x24, 0x61, 0xd9, 0x32, 0x46, 0xc8, 0x96, 0x49, - 0x5c, 0x90, 0x89, 0x9b, 0x84, 0x01, 0x5c, 0x08, 0x42, 0x64, - 0x84, 0x85, 0x0c, 0x42, 0x21, 0x20, 0x48, 0x21, 0x92, 0x00, - 0x28, 0x83, 0x20, 0x4c, 0x08, 0xc7, 0x51, 0x99, 0x06, 0x66, - 0x01, 0x18, 0x51, 0x13, 0x48, 0x0a, 0x0b, 0x42, 0x90, 0x4c, - 0x14, 0x08, 0x83, 0x14, 0x6d, 0x10, 0x10, 0x91, 0xe2, 0xc4, - 0x8d, 0xe1, 0x12, 0x11, 0x10, 0x40, 0x29, 0x99, 0x92, 0x30, - 0x12, 0x39, 0x6c, 0x91, 0x86, 0x68, 0x08, 0x83, 0x0c, 0x54, - 0x80, 0x80, 0xa2, 0x08, 0x52, 0x09, 0x30, 0x71, 0x0c, 0x10, - 0x04, 0x53, 0x00, 0x65, 0x91, 0x12, 0x2d, 0x0c, 0xa2, 0x8c, - 0x18, 0x14, 0x45, 0xd8, 0x14, 0x06, 0xe4, 0x36, 0x72, 0x93, - 0x10, 0x68, 0x09, 0xc2, 0x08, 0x51, 0x14, 0x8c, 0x13, 0x39, - 0x11, 0xd8, 0x44, 0x02, 0x18, 0x39, 0x29, 0x98, 0x16, 0x71, - 0x82, 0x40, 0x70, 0x01, 0x10, 0x8c, 0x1a, 0x30, 0x08, 0x02, - 0x03, 0x41, 0x5a, 0x00, 0x40, 0xa4, 0x16, 0x90, 0x20, 0x26, - 0x32, 0x00, 0x49, 0x61, 0x20, 0x20, 0x0c, 0x1a, 0xb0, 0x10, - 0x63, 0x10, 0x11, 0x58, 0x30, 0x0d, 0x59, 0x80, 0x68, 0x90, - 0x46, 0x2a, 0x91, 0xa8, 0x71, 0x98, 0x20, 0x40, 0x21, 0x83, - 0x6c, 0xc0, 0x48, 0x0d, 0x8b, 0x90, 0x11, 0x08, 0x09, 0x31, - 0x8c, 0x00, 0x12, 0x10, 0x14, 0x6e, 0xc2, 0x06, 0x32, 0x1a, - 0x26, 0x10, 0x0a, 0x91, 0x44, 0x08, 0x99, 0x8d, 0x60, 0x86, - 0x28, 0x11, 0x20, 0x6d, 0xa3, 0x12, 0x81, 0x8b, 0xc6, 0x51, - 0xcb, 0xa0, 0x61, 0x09, 0x97, 0x61, 0x48, 0xb6, 0x0d, 0x21, - 0x49, 0x51, 0x08, 0x13, 0x0c, 0x0a, 0x34, 0x86, 0x49, 0x80, - 0x65, 0x14, 0x39, 0x04, 0x21, 0x01, 0x81, 0x9a, 0xb8, 0x4d, - 0x04, 0x41, 0x48, 0x03, 0x92, 0x81, 0x62, 0x14, 0x6c, 0x10, - 0x16, 0x11, 0xe2, 0xa2, 0x49, 0xe3, 0x30, 0x65, 0x04, 0x93, - 0x8d, 0x1c, 0x33, 0x70, 0x1b, 0x15, 0x50, 0xe4, 0x38, 0x80, - 0x21, 0x37, 0x06, 0x20, 0xc6, 0x24, 0xc8, 0x22, 0x88, 0x4a, - 0x44, 0x80, 0x14, 0x43, 0x88, 0x54, 0x44, 0x42, 0x11, 0x49, - 0x41, 0x19, 0xb9, 0x2d, 0xcc, 0x04, 0x0d, 0x19, 0xc1, 0x65, - 0x5b, 0xa0, 0x11, 0x94, 0x00, 0x84, 0xe4, 0xb6, 0x41, 0xc2, - 0x18, 0x72, 0x5c, 0x02, 0x69, 0x11, 0x85, 0x24, 0x13, 0x35, - 0x00, 0x62, 0x34, 0x04, 0x58, 0x40, 0x21, 0x00, 0xc4, 0x28, - 0x0c, 0x17, 0x30, 0x10, 0x47, 0x60, 0x4b, 0xc2, 0x61, 0x9c, - 0x80, 0x2c, 0x20, 0x94, 0x31, 0x58, 0x92, 0x09, 0xcc, 0x00, - 0x02, 0x42, 0x94, 0x69, 0x99, 0x28, 0x06, 0x98, 0x02, 0x52, - 0x90, 0x32, 0x6e, 0x8a, 0x18, 0x2e, 0x54, 0x94, 0x81, 0x03, - 0xc6, 0x89, 0x03, 0xa1, 0x84, 0x48, 0x82, 0x48, 0x52, 0xc4, - 0x00, 0x91, 0x30, 0x24, 0x20, 0x12, 0x0d, 0x83, 0x80, 0x05, - 0x92, 0x48, 0x61, 0x98, 0x46, 0x92, 0xe1, 0xa6, 0x25, 0x20, - 0x93, 0x4d, 0x1c, 0x37, 0x2c, 0x9b, 0x94, 0x8d, 0xc8, 0x88, - 0x80, 0xa2, 0x18, 0x72, 0x0c, 0x09, 0x70, 0x81, 0x36, 0x90, - 0x24, 0x45, 0x69, 0x53, 0x36, 0x6c, 0xd2, 0x20, 0x51, 0x23, - 0xc1, 0x8c, 0x62, 0xb0, 0x70, 0x11, 0xb2, 0x70, 0xcb, 0x84, - 0x69, 0x4b, 0x32, 0x89, 0x01, 0x21, 0x81, 0x02, 0x38, 0x66, - 0xa3, 0x26, 0x12, 0x24, 0xa3, 0x30, 0x22, 0x24, 0x84, 0x18, - 0xb9, 0x84, 0x40, 0x16, 0x50, 0x22, 0x44, 0x31, 0x1b, 0x13, - 0x8d, 0x53, 0x02, 0x89, 0x4a, 0x22, 0x10, 0x53, 0x18, 0x01, - 0x58, 0x30, 0x2d, 0x00, 0x05, 0x08, 0x13, 0x80, 0x84, 0xc2, - 0x22, 0x0e, 0x88, 0x26, 0x2a, 0x04, 0xc4, 0x4c, 0x19, 0x43, - 0x01, 0xc8, 0x38, 0x4c, 0xd1, 0xb2, 0x90, 0x13, 0x29, 0x10, - 0x12, 0x48, 0x22, 0x01, 0xa8, 0x51, 0xd1, 0x92, 0x40, 0x11, - 0x27, 0x62, 0x10, 0x01, 0x0c, 0x0c, 0xc6, 0x28, 0xe3, 0x46, - 0x60, 0x24, 0x01, 0x8d, 0x14, 0xb6, 0x10, 0x50, 0xb6, 0x25, - 0x44, 0x38, 0x40, 0x44, 0xc2, 0x0c, 0x19, 0xc0, 0x64, 0x9c, - 0x44, 0x02, 0x21, 0x25, 0x65, 0x02, 0x23, 0x86, 0x1a, 0x12, - 0x70, 0x51, 0x24, 0x91, 0x09, 0x08, 0x44, 0x09, 0x35, 0x66, - 0x91, 0x04, 0x12, 0x43, 0x42, 0x8d, 0x22, 0xa0, 0x70, 0x14, - 0x91, 0x25, 0xa0, 0x00, 0x80, 0xe4, 0x00, 0x90, 0x44, 0xb2, - 0x61, 0x14, 0x20, 0x6e, 0xca, 0x14, 0x0d, 0x23, 0x85, 0x68, - 0xda, 0x40, 0x92, 0x0b, 0xb1, 0x20, 0x92, 0x04, 0x46, 0xc0, - 0x08, 0x8a, 0x40, 0xc4, 0x4d, 0x0c, 0x17, 0x45, 0xd3, 0x18, - 0x52, 0x1b, 0x46, 0x24, 0xc2, 0x24, 0x71, 0x83, 0x10, 0x80, - 0xc8, 0x82, 0x68, 0xc2, 0x96, 0x81, 0x0a, 0x01, 0x92, 0x60, - 0xb4, 0x84, 0x09, 0xc6, 0x00, 0x04, 0x37, 0x90, 0x0b, 0xa0, - 0x28, 0x12, 0x27, 0x09, 0x94, 0x80, 0x50, 0xd8, 0x04, 0x86, - 0x08, 0x13, 0x8a, 0x4a, 0x06, 0x89, 0x9b, 0xc4, 0x60, 0xe3, - 0xa2, 0x20, 0xe0, 0x38, 0x21, 0x22, 0xb4, 0x68, 0x0a, 0xa1, - 0x0c, 0x01, 0x24, 0x32, 0x4c, 0x48, 0x30, 0xa2, 0x80, 0x8d, - 0x58, 0x44, 0x10, 0xc8, 0x94, 0x6d, 0x21, 0xc3, 0x61, 0xcb, - 0x98, 0x24, 0xdc, 0x38, 0x11, 0xc9, 0x18, 0x11, 0x20, 0x01, - 0x50, 0x1c, 0x34, 0x8d, 0x02, 0x03, 0x09, 0x0a, 0x40, 0x61, - 0xd4, 0xb8, 0x84, 0x9c, 0xc2, 0x09, 0x04, 0xb1, 0x89, 0x83, - 0x86, 0x84, 0x19, 0x83, 0x0c, 0x5a, 0x86, 0x89, 0x10, 0x21, - 0x0d, 0xd1, 0xc2, 0x80, 0x18, 0x29, 0x2a, 0x0c, 0x01, 0x50, - 0x89, 0x88, 0x48, 0x03, 0xa7, 0x85, 0x21, 0x92, 0x64, 0xc4, - 0x16, 0x81, 0x94, 0x06, 0x6c, 0x53, 0x26, 0x12, 0x90, 0xb6, - 0x21, 0x0b, 0xa8, 0x64, 0x43, 0x96, 0x84, 0x41, 0x88, 0x70, - 0xe3, 0xa6, 0x44, 0x12, 0xc0, 0x09, 0x01, 0xc7, 0x60, 0xc3, - 0x20, 0x42, 0xc3, 0x40, 0x68, 0x10, 0xa6, 0x51, 0xa4, 0xa0, - 0x71, 0x54, 0x98, 0x04, 0x88, 0xb2, 0x00, 0x54, 0x18, 0x6a, - 0x48, 0x98, 0x20, 0x21, 0xb2, 0x8d, 0x82, 0x20, 0x81, 0x99, - 0x16, 0x81, 0x0a, 0xc5, 0x88, 0x0a, 0x23, 0x11, 0x8a, 0x16, - 0x44, 0x24, 0xc9, 0x29, 0x59, 0x08, 0x91, 0x1c, 0x29, 0x05, - 0x14, 0xc9, 0x44, 0xe3, 0x20, 0x10, 0x1b, 0xa1, 0x64, 0x82, - 0xa2, 0x90, 0x00, 0x00, 0x82, 0x98, 0xb2, 0x85, 0xc8, 0x04, - 0x28, 0xc8, 0xb2, 0x65, 0xc9, 0xc6, 0x88, 0xcc, 0x08, 0x91, - 0x84, 0x08, 0x30, 0x94, 0x94, 0x8d, 0xc0, 0x18, 0x46, 0x82, - 0x36, 0x4c, 0x83, 0x10, 0x72, 0x23, 0xb1, 0x88, 0x81, 0x20, - 0x8e, 0x19, 0x03, 0x8a, 0x94, 0x46, 0x22, 0x21, 0x35, 0x8e, - 0x04, 0xc0, 0x88, 0x5b, 0xb6, 0x09, 0x0a, 0x18, 0x44, 0x21, - 0x90, 0x65, 0x03, 0xb2, 0x21, 0xc4, 0x10, 0x50, 0xc1, 0x80, - 0x0c, 0x09, 0x40, 0x49, 0xe4, 0xa8, 0x8c, 0xa4, 0x36, 0x61, - 0x59, 0x12, 0x86, 0x20, 0x08, 0x2d, 0x10, 0x19, 0x85, 0xe4, - 0x34, 0x60, 0xc4, 0xb6, 0x60, 0x00, 0x18, 0x06, 0x8c, 0xb8, - 0x45, 0x19, 0x13, 0x4a, 0x53, 0xc4, 0x40, 0xc9, 0x38, 0x71, - 0xd9, 0x48, 0x10, 0x59, 0x08, 0x02, 0x02, 0x10, 0x69, 0x53, - 0x28, 0x80, 0x22, 0x81, 0x4c, 0xc9, 0x16, 0x26, 0xa1, 0x48, - 0x64, 0x19, 0x21, 0x11, 0x1c, 0x37, 0x88, 0x4b, 0x94, 0x2c, - 0x48, 0xc8, 0x6c, 0x63, 0x88, 0x65, 0x81, 0x40, 0x61, 0xa1, - 0x44, 0x31, 0x82, 0x18, 0x08, 0x80, 0x00, 0x26, 0x50, 0x14, - 0x49, 0xa1, 0x32, 0x50, 0x02, 0xc8, 0x45, 0x0c, 0x07, 0x24, - 0x13, 0x01, 0x6d, 0x0a, 0xb3, 0x90, 0x64, 0x30, 0x85, 0x21, - 0x09, 0x61, 0x44, 0x44, 0x72, 0x08, 0x32, 0x06, 0xe1, 0xa2, - 0x21, 0xdb, 0xa4, 0x09, 0x5a, 0xb4, 0x71, 0x43, 0xb2, 0x09, - 0x82, 0xc4, 0x64, 0x88, 0xa0, 0x91, 0xca, 0x14, 0x90, 0xa4, - 0xa8, 0x41, 0xc1, 0x38, 0x85, 0x12, 0x32, 0x60, 0x1a, 0x11, - 0x72, 0x53, 0x32, 0x2c, 0xe3, 0x08, 0x4d, 0x24, 0xc6, 0x28, - 0x0a, 0x03, 0x8c, 0x88, 0x06, 0x05, 0xa0, 0xa8, 0x05, 0x84, - 0xa2, 0x4c, 0x80, 0x40, 0x62, 0xda, 0x24, 0x81, 0x9a, 0x16, - 0x91, 0x24, 0x81, 0x04, 0xa4, 0x46, 0x51, 0xc2, 0xa8, 0x25, - 0x20, 0x28, 0x42, 0x13, 0x46, 0x2c, 0x63, 0x42, 0x72, 0x03, - 0x88, 0x28, 0xa3, 0x22, 0x24, 0x1a, 0x02, 0x26, 0x42, 0xa2, - 0x11, 0x11, 0xb0, 0x51, 0x92, 0xb4, 0x6c, 0xe2, 0x32, 0x85, - 0x10, 0xc2, 0x41, 0xc1, 0x40, 0x46, 0x4c, 0x26, 0x01, 0x1c, - 0x35, 0x02, 0x0c, 0x14, 0x0c, 0x18, 0x81, 0x00, 0x10, 0x26, - 0x02, 0xc8, 0x32, 0x8c, 0xe4, 0x02, 0x68, 0xcc, 0x14, 0x2e, - 0x89, 0x38, 0x60, 0x10, 0x12, 0x24, 0x93, 0x42, 0x65, 0xe3, - 0x24, 0x29, 0x08, 0x80, 0x41, 0x09, 0x29, 0x46, 0x5b, 0x26, - 0x49, 0x5b, 0x30, 0x80, 0x03, 0xc1, 0x2c, 0x04, 0x09, 0x82, - 0x4c, 0x48, 0x2d, 0x1c, 0x36, 0x4d, 0xdb, 0x02, 0x86, 0x21, - 0xb5, 0x51, 0x81, 0x80, 0x2d, 0xcb, 0x20, 0x81, 0x5b, 0x34, - 0x41, 0x89, 0x36, 0x48, 0x44, 0xa0, 0x05, 0x59, 0xb6, 0x64, - 0x12, 0x45, 0x21, 0x20, 0x31, 0x51, 0x0a, 0xc3, 0x8c, 0x14, - 0x48, 0x71, 0x18, 0x35, 0x24, 0x20, 0x45, 0x05, 0x88, 0x20, - 0x09, 0x08, 0xb1, 0x29, 0x18, 0xa0, 0x09, 0x4a, 0x00, 0x8a, - 0xe2, 0xb8, 0x45, 0x02, 0x27, 0x89, 0xd8, 0x10, 0x25, 0x51, - 0x82, 0x8c, 0x13, 0x92, 0x30, 0x1c, 0x24, 0x8e, 0x1c, 0x93, - 0x4d, 0xa3, 0x48, 0x51, 0x93, 0xa8, 0x69, 0xe2, 0x04, 0x89, - 0x13, 0x13, 0x61, 0xcb, 0x98, 0x8c, 0x09, 0x21, 0x62, 0x4b, - 0x14, 0x4e, 0x11, 0xa3, 0x09, 0x98, 0x40, 0x42, 0x91, 0x12, - 0x08, 0x80, 0x84, 0x2d, 0xc0, 0x12, 0x60, 0x03, 0xa4, 0x29, - 0x18, 0x80, 0x01, 0x94, 0x44, 0x8a, 0x12, 0x11, 0x72, 0xc4, - 0x22, 0x32, 0x9a, 0x46, 0x88, 0x1b, 0x16, 0x4d, 0x4b, 0x08, - 0x11, 0x02, 0x48, 0x45, 0x81, 0xa4, 0x64, 0xe1, 0x88, 0x0c, - 0x63, 0x10, 0x70, 0x48, 0x98, 0x05, 0x9b, 0xb8, 0x84, 0x03, - 0x14, 0x05, 0x44, 0x86, 0x0c, 0x20, 0x11, 0x68, 0xbe, 0x71, - 0x83, 0xc2, 0x69, 0xde, 0x49, 0xad, 0xb4, 0xdb, 0x93, 0xcb, - 0x20, 0x2b, 0xbd, 0x95, 0x97, 0x57, 0x7e, 0xcb, 0xbc, 0x73, - 0xb6, 0x3d, 0x16, 0x4a, 0x0e, 0xe4, 0x9c, 0x81, 0xb1, 0x5d, - 0x27, 0x64, 0xa2, 0x14, 0x12, 0x1b, 0x8e, 0xd0, 0xd8, 0x38, - 0xf6, 0xc7, 0xbb, 0x9f, 0x77, 0x3c, 0x62, 0x04, 0x92, 0xe1, - 0x97, 0xaf, 0x24, 0xa7, 0xf9, 0xf0, 0x8d, 0x3a, 0xbf, 0x5d, - 0xab, 0x5c, 0x97, 0x0f, 0xfc, 0x35, 0xbc, 0x62, 0xd8, 0x42, - 0xfd, 0xc7, 0x8b, 0xf7, 0x80, 0xd1, 0x38, 0x68, 0x14, 0x5e, - 0x4f, 0x99, 0x31, 0xc7, 0xaf, 0xbd, 0x27, 0xce, 0x1c, 0x5b, - 0x09, 0x1b, 0xcf, 0xbb, 0xfb, 0xf9, 0xf4, 0x90, 0x4c, 0xc1, - 0xa2, 0x12, 0xf9, 0xd0, 0xa5, 0x2c, 0xfd, 0x7b, 0x55, 0xb0, - 0xb1, 0xc6, 0x42, 0xe6, 0xeb, 0x10, 0x5e, 0xe9, 0x00, 0xe8, - 0x46, 0xe4, 0xe0, 0x8b, 0x21, 0xbc, 0xb1, 0xa9, 0x9e, 0x75, - 0x66, 0xf0, 0xb8, 0x87, 0xb9, 0x11, 0x7e, 0x28, 0x6c, 0x4d, - 0x58, 0xcd, 0x54, 0x71, 0x0c, 0x6a, 0xcc, 0xfb, 0x52, 0xc2, - 0x5b, 0xcc, 0x19, 0x67, 0x4f, 0xc2, 0x2f, 0x09, 0x62, 0x51, - 0x82, 0xeb, 0x9b, 0x94, 0x11, 0xb4, 0x5a, 0x67, 0x7f, 0x58, - 0x18, 0xb2, 0x3f, 0x37, 0x1f, 0x94, 0x44, 0x73, 0x6a, 0x02, - 0xf5, 0xfb, 0x5b, 0x03, 0xac, 0x5d, 0xc6, 0xa9, 0x79, 0x8f, - 0x0f, 0x50, 0xa0, 0x57, 0x46, 0x05, 0x6d, 0x58, 0xde, 0x6e, - 0x8d, 0x9c, 0x0e, 0x6a, 0xb5, 0x9b, 0x1b, 0x22, 0x74, 0xad, - 0x00, 0x55, 0x27, 0x46, 0xce, 0xbb, 0x82, 0x77, 0x4e, 0x6e, - 0x59, 0x38, 0x26, 0xb3, 0xc7, 0xbc, 0x97, 0x54, 0x83, 0x69, - 0x1f, 0x3e, 0xbd, 0x0f, 0xff, 0x2f, 0xca, 0xb9, 0xea, 0x91, - 0x26, 0x8e, 0x0a, 0x78, 0x25, 0xf6, 0x6b, 0x11, 0x30, 0xd7, - 0xe2, 0xf4, 0x2b, 0xda, 0xcf, 0xe1, 0x4a, 0x47, 0xab, 0x5f, - 0x54, 0x34, 0x38, 0xac, 0xd1, 0xbf, 0x45, 0xad, 0x4b, 0x52, - 0x0f, 0x4c, 0xa2, 0xac, 0x22, 0x7c, 0xb6, 0xed, 0x7f, 0xd5, - 0x63, 0x3b, 0x1a, 0x3b, 0xf2, 0x3d, 0x9b, 0x96, 0x92, 0x08, - 0xb9, 0x95, 0x13, 0xaf, 0x20, 0x26, 0x8b, 0x15, 0x97, 0x89, - 0xa5, 0x88, 0x8f, 0x78, 0xb4, 0x57, 0x9d, 0x51, 0x96, 0x9c, - 0x98, 0x93, 0xd5, 0x83, 0xf9, 0xff, 0x94, 0x29, 0x1e, 0xa5, - 0x28, 0xa4, 0x0c, 0x22, 0xab, 0xbc, 0x70, 0x48, 0xa2, 0x16, - 0x1c, 0xa4, 0xba, 0x8b, 0xfe, 0xb2, 0xa9, 0x03, 0x96, 0x5f, - 0xb4, 0x84, 0x8e, 0xb4, 0xbb, 0x7b, 0x11, 0xc5, 0xc2, 0xdb, - 0xe3, 0x88, 0xb5, 0xd3, 0xac, 0x07, 0x33, 0x53, 0xe8, 0x10, - 0x9e, 0xc5, 0x81, 0xb0, 0x77, 0x2f, 0x4f, 0x6d, 0x0d, 0x89, - 0xb4, 0x04, 0x98, 0x05, 0xe6, 0xd3, 0x36, 0x97, 0xcd, 0x3e, - 0x4d, 0xc6, 0x21, 0xe4, 0x0b, 0xcf, 0xed, 0xa7, 0x4d, 0xd9, - 0xd3, 0x25, 0xec, 0xec, 0x47, 0xfd, 0x06, 0x92, 0x77, 0x25, - 0x3c, 0x44, 0xe6, 0x5d, 0xb4, 0x35, 0x2b, 0x5d, 0x05, 0x65, - 0x63, 0x0b, 0xd9, 0xb8, 0x28, 0xdf, 0xdd, 0xfd, 0x64, 0x18, - 0x42, 0x19, 0x7f, 0x12, 0x78, 0xdd, 0xf0, 0x64, 0xd6, 0x99, - 0xb8, 0x74, 0x81, 0xe2, 0xb9, 0xc8, 0x67, 0x6d, 0x31, 0x22, - 0xa5, 0x68, 0xa1, 0x8d, 0x3e, 0x49, 0xbe, 0x10, 0x68, 0xa8, - 0x74, 0x1d, 0x18, 0xcf, 0x00, 0xe1, 0x4f, 0x77, 0xd8, 0xc6, - 0xe3, 0x08, 0xbb, 0x4c, 0xed, 0xff, 0xd9, 0x9b, 0xb0, 0xd1, - 0x50, 0xbb, 0x8b, 0x91, 0xcd, 0x5f, 0x2a, 0xfb, 0x8f, 0x4d, - 0x3c, 0x98, 0xba, 0xd7, 0x98, 0x99, 0xa7, 0x22, 0x14, 0xd7, - 0x94, 0xb5, 0xb8, 0xa4, 0x52, 0x31, 0xa7, 0xa1, 0xa4, 0x28, - 0xee, 0x31, 0xb5, 0xd0, 0xc1, 0x07, 0x05, 0x16, 0x1d, 0x53, - 0x45, 0x62, 0x23, 0x05, 0x44, 0xb6, 0x4f, 0x92, 0x03, 0x53, - 0x9a, 0x71, 0x56, 0xae, 0x16, 0x81, 0xb4, 0xc9, 0x98, 0xf4, - 0x7f, 0x11, 0x37, 0xc2, 0xc8, 0xf2, 0xe4, 0x48, 0xe3, 0xcc, - 0xf1, 0xe3, 0x3d, 0x8e, 0x13, 0x5b, 0x25, 0xad, 0xce, 0x6f, - 0xed, 0x60, 0x4f, 0x7d, 0x51, 0xe1, 0xd0, 0x74, 0xf4, 0xed, - 0xf3, 0x84, 0xa6, 0x0e, 0xba, 0xb4, 0x8e, 0x5a, 0xb9, 0x12, - 0x70, 0x43, 0x4c, 0xb5, 0xa5, 0x1e, 0x86, 0xa5, 0xe3, 0x4d, - 0x76, 0x95, 0xce, 0x2c, 0x53, 0x3a, 0x4e, 0x3f, 0x47, 0x73, - 0x85, 0x88, 0xd9, 0x39, 0x21, 0x83, 0x24, 0x68, 0x6a, 0x1e, - 0x77, 0xdf, 0x59, 0xc5, 0x1b, 0xe2, 0xb1, 0x47, 0x9d, 0xee, - 0x45, 0x1e, 0xc6, 0xd4, 0x43, 0xe2, 0xc7, 0x1c, 0x98, 0x84, - 0xe0, 0x39, 0xe9, 0x9f, 0xa0, 0xa2, 0x24, 0x4a, 0x88, 0x46, - 0xf3, 0x50, 0x52, 0xb5, 0xae, 0x37, 0x5c, 0xa1, 0x7d, 0xad, - 0x7c, 0x30, 0x3e, 0xcd, 0x80, 0x1c, 0xac, 0xf4, 0xe6, 0xb5, - 0x9f, 0x22, 0xb6, 0xfb, 0x0e, 0x6d, 0x80, 0x10, 0xf7, 0x3f, - 0xdd, 0x5b, 0xd9, 0xd4, 0x03, 0x14, 0x41, 0x90, 0x88, 0xa8, - 0xcf, 0x50, 0xa2, 0xf2, 0x7e, 0xf0, 0x0a, 0x7f, 0xed, 0x77, - 0x09, 0x48, 0x32, 0x55, 0xe9, 0x93, 0xe7, 0x27, 0x18, 0x46, - 0x17, 0x03, 0x25, 0x8e, 0x17, 0x5d, 0xe8, 0x9e, 0xb1, 0xb4, - 0x9d, 0x1a, 0x5e, 0xbe, 0xa8, 0xb8, 0x45, 0x30, 0xc6, 0xa5, - 0xb4, 0xaf, 0xf3, 0x0d, 0x91, 0x9c, 0xa9, 0x5b, 0x4c, 0xbb, - 0x19, 0x19, 0x39, 0x51, 0x36, 0x80, 0xf7, 0x10, 0xf7, 0x73, - 0x49, 0x17, 0xec, 0xbc, 0x92, 0x08, 0x21, 0xb1, 0x0c, 0x23, - 0xc4, 0xd6, 0xd2, 0xb3, 0xfd, 0xae, 0xe7, 0x71, 0xf3, 0x50, - 0x11, 0x27, 0x1a, 0x85, 0xf0, 0xab, 0xd8, 0x16, 0x64, 0xcb, - 0xad, 0xbb, 0xae, 0x54, 0x37, 0xa3, 0xa8, 0xf4, 0x09, 0x67, - 0x54, 0x61, 0x86, 0x0f, 0x0e, 0x25, 0x0d, 0xda, 0x4a, 0xc7, - 0xe7, 0x02, 0x80, 0x6b, 0x59, 0xd2, 0xc8, 0x88, 0x4d, 0x7d, - 0xfd, 0x3d, 0x48, 0x04, 0x6d, 0x95, 0xdf, 0xc2, 0x8b, 0x23, - 0x70, 0x4a, 0xf5, 0xdc, 0xc9, 0x24, 0x8d, 0x7e, 0x52, 0x22, - 0x7e, 0x9c, 0x5c, 0x32, 0xa5, 0xd5, 0xf2, 0x11, 0x08, 0xa0, - 0xd4, 0xa2, 0xd8, 0xdb, 0x1d, 0x9f, 0x1b, 0x54, 0x8f, 0xb5, - 0xf6, 0x71, 0x71, 0x49, 0xbc, 0x38, 0x09, 0xb6, 0x24, 0x94, - 0x80, 0x1f, 0x2d, 0x0c, 0xc7, 0xe4, 0xd6, 0xcd, 0xab, 0x53, - 0x79, 0x28, 0xed, 0x48, 0x23, 0x14, 0x2f, 0x0b, 0x3a, 0xd0, - 0xa7, 0x08, 0xe1, 0xfd, 0x1e, 0xb6, 0xdd, 0x12, 0x93, 0x2d, - 0x95, 0x06, 0xba, 0x95, 0xcb, 0x1a, 0xed, 0xfb, 0x60, 0xe7, - 0xf1, 0x1c, 0xad, 0xc3, 0xea, 0x8d, 0x3c, 0x53, 0x32, 0xb5, - 0x38, 0x26, 0xdd, 0x39, 0xf0, 0x39, 0x4e, 0x6f, 0x3e, 0xa9, - 0xea, 0x25, 0x29, 0xb8, 0x6c, 0x7d, 0x0a, 0x91, 0xd4, 0xb9, - 0x7b, 0x67, 0xe4, 0xe5, 0x63, 0xd7, 0x6b, 0x03, 0xa5, 0xd7, - 0xe8, 0xd2, 0xc0, 0x34, 0x53, 0xa6, 0x16, 0x21, 0x2a, 0x2a, - 0x09, 0xd3, 0xad, 0xa1, 0x2c, 0x6a, 0x88, 0x2d, 0x90, 0x06, - 0xba, 0x0b, 0xaa, 0xd1, 0xdb, 0xa4, 0xd0, 0x49, 0x0f, 0x42, - 0xe1, 0xca, 0xf0, 0x69, 0x15, 0x63, 0xcb, 0x0b, 0x4c, 0x2e, - 0x99, 0x20, 0x44, 0xe3, 0x6e, 0x32, 0x8a, 0xa1, 0x5c, 0x5b, - 0x03, 0xeb, 0xb5, 0x05, 0xff, 0x1a, 0x76, 0x38, 0x1c, 0xb0, - 0x74, 0xf1, 0x5a, 0x0d, 0x8a, 0xd2, 0x4e, 0x38, 0x11, 0x86, - 0xb0, 0x2d, 0xd3, 0x88, 0xe2, 0x0f, 0x51, 0x68, 0xb9, 0x79, - 0x96, 0x50, 0x95, 0xdc, 0x69, 0xcb, 0xa6, 0x25, 0x4a, 0xdf, - 0xa1, 0x39, 0x13, 0x47, 0x0a, 0xf0, 0xeb, 0xcb, 0x14, 0x01, - 0x28, 0x9c, 0x0f, 0xe2, 0x62, 0xca, 0xb5, 0x40, 0x51, 0x45, - 0x8e, 0x18, 0x88, 0xc9, 0x58, 0xaf, 0xb3, 0x48, 0xd5, 0x20, - 0xe8, 0xd8, 0x5b, 0xa2, 0x98, 0x74, 0x25, 0xfa, 0x25, 0x19, - 0x82, 0x22, 0xfa, 0x82, 0x7c, 0x38, 0x8d, 0x62, 0x86, 0x01, - 0x63, 0x20, 0x36, 0x8e, 0xaf, 0x15, 0x8a, 0x74, 0x1e, 0xfd, - 0x7f, 0xbe, 0x60, 0xc3, 0x65, 0x31, 0xce, 0xdb, 0x92, 0xb9, - 0x13, 0x2a, 0x78, 0xa9, 0xfc, 0x6a, 0x7b, 0x18, 0xec, 0x0c, - 0x7b, 0x4c, 0x86, 0xaf, 0xea, 0x6d, 0x52, 0x09, 0x76, 0x52, - 0x87, 0x8a, 0x0b, 0x2a, 0xf3, 0x93, 0x35, 0x92, 0x8b, 0x60, - 0x42, 0x2e, 0x12, 0xa9, 0xf7, 0x7c, 0x61, 0x5c, 0x8f, 0xc0, - 0xaa, 0x6e, 0x6a, 0xf6, 0x48, 0x48, 0xc6, 0x3e, 0xe0, 0x1d, - 0xb4, 0xfb, 0xc4, 0xd8, 0x01, 0xb8, 0xf2, 0xf4, 0xdf, 0xc1, - 0xba, 0xb5, 0xf2, 0x27, 0x3f, 0xdb, 0x78, 0x62, 0x1c, 0x0a, - 0xbe, 0xdb, 0xdd, 0x3c, 0x0c, 0x29, 0x85, 0xf1, 0x44, 0x5f, - 0x2b, 0x43, 0x80, 0x57, 0xa7, 0x5a, 0x4d, 0x1b, 0xbe, 0x03, - 0xe7, 0x55, 0x7b, 0x91, 0x9d, 0x4c, 0x8b, 0xd7, 0xfd, 0xde, - 0x65, 0x7e, 0xa8, 0x48, 0xbb, 0xa9, 0x96, 0x06, 0x7f, 0xc0, - 0x6c, 0xed, 0x87, 0x53, 0x77, 0xb4, 0x5a, 0x7c, 0xbb, 0xce, - 0xcf, 0x01, 0x08, 0x45, 0x61, 0xc1, 0x28, 0xb6, 0xf2, 0xb4, - 0x5b, 0x6b, 0x84, 0xfe, 0x18, 0x09, 0x39, 0xc1, 0xc8, 0x96, - 0x36, 0x6e, 0xba, 0x7e, 0x48, 0x12, 0xe6, 0xdc, 0x22, 0x48, - 0x17, 0x0b, 0xbd, 0x92, 0x64, 0xfa, 0xc9, 0x9b, 0x07, 0xda, - 0xed, 0x04, 0x68, 0x42, 0x15, 0x8c, 0xf9, 0xd8, 0xc3, 0x0d, - 0x21, 0x9d, 0x96, 0xbc, 0xc3, 0x07, 0x1a, 0x2c, 0x59, 0x3f, - 0x1a, 0x83, 0x43, 0xf0, 0xe0, 0xde, 0xe3, 0x40, 0x8e, 0x04, - 0x66, 0x3c, 0x87, 0x1e, 0xfa, 0x7b, 0x8a, 0x7b, 0xd2, 0x9e, - 0x15, 0xf5, 0xec, 0x3c, 0x72, 0x7e, 0x2d, 0x19, 0xf8, 0xfd, - 0xf0, 0x28, 0x71, 0x8a, 0xf5, 0xcb, 0x4c, 0x61, 0x5f, 0x85, - 0xe0, 0x6f, 0xb8, 0xf3, 0x17, 0x10, 0xcb, 0x44, 0x45, 0x8c, - 0x96, 0x08, 0xa1, 0xf1, 0x48, 0xa4, 0x1d, 0xea, 0x35, 0x2f, - 0x82, 0x2b, 0xc2, 0x0b, 0xef, 0x73, 0xe1, 0xc2, 0x35, 0xdb, - 0xe7, 0x68, 0xfd, 0xb0, 0xe8, 0x7b, 0x2d, 0x0f, 0xfd, 0x53, - 0x1b, 0xb8, 0x36, 0x54, 0xd6, 0x43, 0x30, 0xcf, 0x83, 0xb0, - 0x18, 0xda, 0x9b, 0x86, 0x82, 0xfa, 0xe6, 0x37, 0x5b, 0x9e, - 0xa4, 0xdb, 0x7c, 0x59, 0x25, 0x59, 0xc6, 0x46, 0x36, 0x72, - 0xc5, 0x72, 0xd8, 0x2f, 0x26, 0xe2, 0xee, 0xe3, 0xcb, 0xe5, - 0x33, 0x1f, 0x18, 0x2e, 0x16, 0xce, 0xd2, 0x9c, 0x89, 0x6e, - 0xd5, 0x21, 0xfa, 0x58, 0x83, 0xa9, 0x4c, 0x69, 0x97, 0x7d, - 0xae, 0x1f, 0x65, 0xd5, 0xdb, 0xf0, 0xfe, 0xd5, 0x32, 0xb1, - 0x50, 0x72, 0xdf, 0x2b, 0xe2, 0xc1, 0xe6, 0x2e, 0x8b, 0x87, - 0xa8, 0x4e, 0x84, 0xbe, 0xc9, 0x27, 0xb5, 0x74, 0x7e, 0x13, - 0x17, 0x57, 0x9c, 0xc6, 0xd3, 0x9f, 0xcd, 0x86, 0x50, 0x4b, - 0x6c, 0x50, 0xa2, 0xba, 0xfe, 0xf6, 0xd5, 0x85, 0x68, 0x31, - 0x89, 0xfb, 0xeb, 0xfe, 0x92, 0xb0, 0xd0, 0x4c, 0xbc, 0x65, - 0x4b, 0x62, 0xe2, 0xdf, 0x88, 0x7e, 0x90, 0xe0, 0xb3, 0xec, - 0x13, 0x69, 0x33, 0xea, 0x53, 0x69, 0x9a, 0x0b, 0x27, 0xfb, - 0xca, 0x9f, 0x9e, 0x1f, 0xcf, 0xb1, 0xeb, 0xf4, 0x8f, 0xe2, - 0x53, 0xc8, 0xe6, 0x51, 0x75, 0xee, 0xb1, 0x34, 0x3e, 0x37, - 0xdd, 0x2d, 0x3a, 0x72, 0x76, 0x33, 0xc1, 0x27, 0xe7, 0xbd, - 0xc1, 0x7f, 0xcb, 0x53, 0x5d, 0xdf, 0xc4, 0x1f, 0x36, 0xdb, - 0x6a, 0x91, 0x1f, 0x6a, 0xa5, 0xc6, 0xe2, 0x37, 0x68, 0x1a, - 0x7d, 0xf7, 0xed, 0x2a, 0xc7, 0x99, 0x5e, 0xbd, 0x59, 0x57, - 0x09, 0x22, 0x7e, 0x9c, 0xbd, 0x8e, 0xad, 0xbe, 0xee, 0xa5, - 0x2a, 0xe3, 0x9f, 0xff, 0x14, 0xda, 0xba, 0x90, 0x37, 0xba, - 0x3a, 0x42, 0xcd, 0x4a, 0x28, 0x47, 0x27, 0x58, 0x7a, 0x33, - 0x93, 0x77, 0x83, 0x29, 0xab, 0x47, 0x19, 0x43, 0x00, 0x6f, - 0xe7, 0x77, 0xc1, 0xaa, 0xd6, 0xbc, 0xc0, 0x1b, 0xd0, 0xdf, - 0xf9, 0x40, 0x4d, 0xb2, 0x60, 0xce, 0x59, 0x17, 0x0a, 0xa9, - 0x14, 0x4e, 0x6a, 0x30, 0x1b, 0x26, 0x68, 0x55, 0x12, 0x19, - 0x62, 0x85, 0x5d, 0xa6, 0xb4, 0x48, 0x4a, 0xe9, 0xe1, 0x57, - 0xb1, 0x48, 0xf3, 0x86, 0xd1, 0x50, 0x2e, 0x1d, 0x57, 0xbe, - 0x09, 0xf8, 0x53, 0x40, 0xd9, 0x55, 0xd9, 0x71, 0x4c, 0xa7, - 0xdb, 0x61, 0x82, 0x4e, 0x00, 0x58, 0xe4, 0x89, 0xae, 0xa6, - 0x1a, 0x4b, 0xe3, 0x9d, 0xec, 0x65, 0xee, 0xe1, 0x7b, 0xdb, - 0x4f, 0x8d, 0xf3, 0xd9, 0x89, 0xaa, 0xd1, 0x31, 0x30, 0xde, - 0xc3, 0x5c, 0xbc, 0xb9, 0x60, 0x0a, 0xe0, 0x13, 0x14, 0x85, - 0x08, 0x60, 0xc5, 0x1c, 0xc2, 0x9d, 0x8b, 0x6e, 0xb8, 0x94, - 0x11, 0x6f, 0xd3, 0xee, 0xfb, 0xf8, 0x15, 0xd8, 0xa4, 0x0b, - 0x92, 0xdf, 0x7c, 0x9a, 0xa2, 0xec, 0xa3, 0x3d, 0xbc, 0xcd, - 0xe8, 0xb5, 0xb3, 0xf5, 0xe8, 0xee, 0x2a, 0x57, 0xf7, 0x58, - 0xc4, 0xaa, 0xeb, 0x33, 0x44, 0x5f, 0x62, 0xbe, 0x90, 0x48, - 0xe5, 0xcb, 0x6a, 0xcb, 0x55, 0x94, 0x6d, 0xe6, 0x22, 0x03, - 0xeb, 0xcb, 0x05, 0xb8, 0xb4, 0xa5, 0xbe, 0xec, 0x79, 0x21, - 0x0d, 0xb3, 0x5c, 0x74, 0x11, 0xcb, 0xb3, 0xa6, 0x06, 0x2f, - 0x73, 0xd1, 0x14, 0xd9, 0x70, 0x4e, 0xc5, 0xf5, 0xff, 0xfd, - 0x49, 0x3b, 0xa9, 0x22, 0x80, 0x2a, 0x5e, 0xf9, 0xae, 0xa5, - 0xd4, 0x3c, 0x74, 0xd7, 0x5a, 0x5d, 0x88, 0x6f, 0x99, 0xe2, - 0x4c, 0xa3, 0x9b, 0x15, 0xb8, 0xfd, 0x0b, 0x0d, 0x57, 0x03, - 0xe8, 0xda, 0x78, 0xc4, 0x63, 0x49, 0x48, 0x7a, 0x39, 0xcd, - 0xfa, 0xad, 0x92, 0x55, 0x4a, 0x0e, 0x68, 0x08, 0xb9, 0x34, - 0xe0, 0x14, 0x6e, 0x19, 0xed, 0x69, 0x14, 0x7f, 0xc1, 0x7d, - 0x12, 0xac, 0x5d, 0xf7, 0x62, 0x6f, 0x77, 0x65, 0xa3, 0xc2, - 0xf9, 0xda, 0x43, 0x9e, 0x6b, 0x82, 0xd9, 0x14, 0x57, 0x02, - 0x09, 0x9f, 0xa7, 0x15, 0x27, 0xe8, 0xad, 0xa1, 0x73, 0xc7, - 0xb6, 0x11, 0x4c, 0x5e, 0xf4, 0x1a, 0x0a, 0x97, 0x98, 0x5e, - 0x29, 0x8a, 0x8b, 0xa5, 0xbd, 0x86, 0x7f, 0x6d, 0x31, 0x72, - 0x6d, 0xe5, 0xcf, 0x13, 0xff, 0xb9, 0x4e, 0x69, 0x66, 0x37, - 0x1b, 0xfb, 0xe8, 0xb7, 0x60, 0xfe, 0xbf, 0xaa, 0x06, 0x88, - 0xa4, 0xa2, 0x0b, 0x33, 0x55, 0xac, 0x61, 0x77, 0x0a, 0x6f, - 0x1f, 0xaf, 0xd8, 0x9b, 0xc7, 0x26, 0x13, 0xf6, 0xc4, 0xef, - 0xce, 0x0f, 0x16, 0x86, 0x64, 0x1b, 0xc0, 0x71, 0x35, 0xf9, - 0x1f, 0xaf, 0xc4, 0x7a, 0xa3, 0x3b, 0x89, 0x40, 0xcb, 0x09, - 0x11, 0x7b, 0x01, 0x54, 0xd5, 0xd2, 0x2a, 0xc8, 0xfe, 0x0e, - 0xef, 0x8c, 0xfb, 0x2b, 0x08, 0x12, 0x6d, 0xbb, 0xa8, 0x2e, - 0x7a, 0x2b, 0xc2, 0x91, 0x2a, 0x76, 0x0b, 0x31, 0x30, 0x4a, - 0x5b, 0xca, 0x96, 0xc9, 0x89, 0xa0, 0x12, 0x40, 0x76, 0xbe, - 0xcd, 0x59, 0x5f, 0xc2, 0x7b, 0xaf, 0xf6, 0x29, 0xde, 0xe9, - 0x24, 0x61, 0x3f, 0x46, 0x78, 0xa7, 0xda, 0x65, 0xb0, 0xb3, - 0xae, 0xf3, 0x72, 0x6e, 0x37, 0x6e, 0xae, 0xb1, 0x3b, 0xf6, - 0x60, 0xa1, 0x92, 0x86, 0x9e, 0x97, 0x4f, 0x5e, 0x86, 0x88, - 0x32, 0x06, 0x7c, 0xe3, 0x37, 0x7e, 0xb1, 0x83, 0xf5, 0x83, - 0x05, 0x43, 0xb3, 0xe3, 0xa1, 0x68, 0xe5, 0x4c, 0x92, 0x9c, - 0x61, 0xa3, 0x5d, 0xcf, 0x23, 0xe7, 0xce, 0xf5, 0x7f, 0xbb, - 0xf7, 0x89, 0x5e, 0xa8, 0xf0, 0xa1, 0xff, 0x1a, 0xaf, 0x15, - 0xc8, 0x3d, 0x8b, 0xce, 0x06, 0xa4, 0x60, 0xd6, 0x40, 0x19, - 0x48, 0x33, 0x53, 0x34, 0x9e, 0xd8, 0x75, 0xfc, 0x45, 0x73, - 0x35, 0x8f, 0x70, 0x04, 0x80, 0xa1, 0xe5, 0xfc, 0x98, 0xb0, - 0x52, 0x63, 0x41, 0x84, 0x57, 0xa2, 0x85, 0x4e, 0x68, 0x13, - 0x2d, 0x3e, 0x4b, 0x68, 0x7f, 0x43, 0x04, 0x05, 0x02, 0x5a, - 0x16, 0x67, 0x5a, 0xc5, 0xea, 0xac, 0x25, 0x61, 0xd4, 0xa4, - 0xe7, 0xbe, 0x13, 0x95, 0xbd, 0x03, 0xb4, 0x26, 0xe3, 0xbf, - 0x7e, 0xe5, 0x0b, 0x34, 0xeb, 0x59, 0x5d, 0xd7, 0xdb, 0x1e, - 0x07, 0xfc, 0x63, 0xab, 0xbb, 0xc6, 0x7a, 0x51, 0x50, 0x59, - 0x13, 0x4b, 0x27, 0x88, 0x98, 0xdc, 0x01, 0x37, 0xeb, 0x58, - 0x75, 0xde, 0x5a, 0xa4, 0x6b, 0xdd, 0xba, 0x01, 0x40, 0xf7, - 0x1c, 0x0a, 0xf3, 0x02, 0x3d, 0x54, 0x64, 0xf2, 0x85, 0x43, - 0x90, 0xc0, 0x69, 0x18, 0x94, 0x95, 0x6e, 0x57, 0x14, 0xda, - 0x27, 0x0a, 0x42, 0xb2, 0x5a, 0x78, 0xe4, 0xf1, 0x45, 0x85, - 0x54, 0xec, 0x44, 0xa0, 0xcb, 0xf4, 0xd1, 0x3a, 0x85, 0x74, - 0x0f, 0x04, 0x67, 0xf4, 0x42, 0x01, 0xc4, 0x04, 0x66, 0x48, - 0x6c, 0xbe, 0x84, 0x38, 0x6e, 0xda, 0x23, 0xd0, 0xd1, 0x26, - 0x94, 0x11, 0x65, 0x2e, 0xc6, 0xd8, 0x6e, 0x25, 0x17, 0x43, - 0x9f, 0x55, 0x2d, 0x1d, 0x55, 0xa9, 0xdd, 0x3b, 0xc7, 0x09, - 0xde, 0x26, 0x64, 0xd4, 0x85, 0x21, 0x15, 0x0d, 0x4a, 0x45, - 0x4d, 0xba, 0x13, 0x9e, 0x3b, 0x5e, 0xc2, 0xf7, 0xc1, 0x34, - 0xc5, 0x74, 0xd4, 0x95, 0x19, 0x3d, 0x69, 0x9c, 0xae, 0xef, - 0x13, 0x95, 0x2c, 0x77, 0xdd, 0x64, 0x2c, 0x12, 0x31, 0x7d, - 0xb5, 0x55, 0xde, 0x69, 0x35, 0x3f, 0x77, 0x72, 0xc6, 0x21, - 0x22, 0x23, 0x7a, 0x05, 0xbf, 0x92, 0xae, 0x49, 0x7f, 0x74, - 0x17, 0x97, 0x5f, 0x5b, 0x4d, 0x7d, 0x86, 0x23, 0x04, 0xe0, - 0xff, 0x10, 0x06, 0xc3, 0xd3, 0x05, 0xde, 0xc4, 0xae, 0xaf, - 0x3d, 0x2d, 0xaf, 0x3c, 0xaf, 0xd3, 0xd5, 0xfd, 0x84, 0xd8, - 0x3b, 0x6c, 0x8e, 0x8b, 0x23, 0x8b, 0x16, 0xaa, 0x67, 0xf1, - 0xde, 0xa4, 0x4b, 0x5a, 0x39, 0x60, 0x73, 0xd2, 0x9f, 0x1f, - 0x8c, 0xcf, 0xbc, 0xaa, 0x74, 0x9e, 0x8d, 0xfd, 0xc3, 0xb7, - 0x86, 0xe5, 0xbb, 0x5a, 0x4d, 0x3d, 0xe2, 0xc3, 0x28, 0x78, - 0x26, 0xd4, 0xb3, 0x45, 0x94, 0xd3, 0x2d, 0xbf, 0x8c, 0x92, - 0x56, 0x3c, 0x6e, 0xea, 0x53, 0x38, 0x7f, 0x22, 0x67, 0xc9, - 0xa7, 0x14, 0x20, 0xb9, 0x13, 0xc4, 0xa0, 0x44, 0x83, 0xc4, - 0x19, 0xca, 0x98, 0x71, 0xc7, 0x13, 0x70, 0x3a, 0xa7, 0xfb, - 0x9e, 0xc4, 0x94, 0x8c, 0xfd, 0x21, 0x36, 0x88, 0xea, 0x23, - 0xc7, 0x43, 0x52, 0x9f, 0xf4, 0x9e, 0xb1, 0xb4, 0xd3, 0x20, - 0x65, 0xd8, 0x18, 0x25, 0x80, 0xb7, 0xe4, 0x5c, 0x96, 0x3a, - 0xa3, 0xb5, 0x40, 0x63, 0xac, 0x02, 0x34, 0x51, 0xf7, 0x12, - 0xea, 0x97, 0x9d, 0x3e, 0xe7, 0xcb, 0x88, 0x15, 0xaa, 0xe3, - 0xfe, 0xe5, 0x42, 0xe5, 0x48, 0xcf, 0xc6, 0x8e, 0x0e, 0xc6, - 0x48, 0xdb, 0xe5, 0x1e, 0x79, 0x99, 0xed, 0x78, 0xa6, 0x37, - 0xdd, 0xe3, 0x7b, 0x01, 0xdd, 0x20, 0x63, 0x45, 0x57, 0xd1, - 0x0f, 0x05, 0x5d, 0x29, 0xad, 0x99, 0x6c, 0x27, 0xa3, 0x0c, - 0x72, 0x81, 0xb1, 0x26, 0x16, 0xaf, 0x11, 0x65, 0xba, 0x79, - 0xbc, 0xb8, 0xfe, 0xe7, 0xc5, 0xe6, 0x4c, 0xfa, 0x37, 0xc5, - 0xe0, 0x2e, 0x4e, 0xef, 0x75, 0xe4, 0x04, 0xaf, 0xfa, 0x41, - 0x7f, 0x58, 0x2e, 0x8f, 0x95, 0x5f, 0x15, 0x5c, 0x15, 0x23, - 0x81, 0xb7, 0x2c, 0x81, 0x70, 0xf5, 0xcc, 0x60, 0x09, 0x7e, - 0xf1, 0x0d, 0x9c, 0x9d, 0xcc, 0xa0, 0x30, 0xa8, 0x82, 0x23, - 0x5f, 0x94, 0xcb, 0x18, 0xc4, 0x32, 0xe6, 0xab, 0xcd, 0x96, - 0x9e, 0xab, 0xcd, 0x68, 0x6f, 0x88, 0xb7, 0x72, 0x65, 0xbc, - 0x1e, 0x05, 0x60, 0xfe, 0x6b, 0x77, 0x2a, 0x11, 0x63, 0x59, - 0x29, 0xdb, 0xba, 0xe0, 0x50, 0xd5, 0x51, 0x77, 0x16, 0xb8, - 0xb7, 0xf4, 0xa9, 0xbe, 0xf0, 0xa5, 0xaa, 0x20, 0x50, 0x2e, - 0x73, 0x21, 0xee, 0x77, 0xa3, 0xc8, 0xbc, 0x0c, 0x16, 0x0f, - 0x83, 0x7b, 0xaf, 0xbb, 0x91, 0x95, 0xd3, 0x6e, 0xe7, 0x28, - 0x77, 0x00, 0xbc, 0x83, 0x46, 0xa5, 0x0a, 0x19, 0xe8, 0x10, - 0xfb, 0x24, 0xeb, 0x27, 0xc2, 0xa3, 0xdd, 0xb8, 0x5b, 0x27, - 0xb9, 0xbb, 0x49, 0xd9, 0xd0, 0x32, 0x94, 0x48, 0x1b, 0xb8, - 0xf8, 0xb2, 0x30, 0xf4, 0x1f, 0x3d, 0xbf, 0xe6, 0xf3, 0x34, - 0xd3, 0x32, 0x85, 0x67, 0x85, 0x13, 0x3e, 0x20, 0xb7, 0xfa, - 0x74, 0x27, 0x74, 0x8f, 0x55, 0x47, 0x15, 0x91, 0x0b, 0x3f, - 0xb1, 0x18, 0xe7, 0x11, 0x1e, 0x52, 0xd8, 0xd1, 0x3f, 0xb9, - 0x5d, 0x4f, 0x88, 0xb9, 0x1e, 0x5a, 0xb6, 0x90, 0x64, 0xad, - 0x6f, 0x8d, 0x33, 0xb3, 0x57, 0xde, 0x3e, 0x13, 0xb3, 0x9f, - 0x2d, 0x00, 0xb1, 0x79, 0x84, 0x60, 0x6d, 0x3c, 0x5f, 0xc0, - 0x34, 0x08, 0x4b, 0x58, 0x33, 0x59, 0xfe, 0xe5, 0xed, 0xd3, - 0x10, 0xd8, 0xd8, 0x85, 0xc3, 0xc9, 0x71, 0xcf, 0x40, 0x96, - 0xc0, 0xd5, 0x5e, 0x62, 0xe7, 0xcb, 0x33, 0xee, 0x72, 0xb5, - 0xb8, 0x6e, 0xea, 0x13, 0xde, 0xeb, 0x82, 0x03, 0x8e, 0x6c, - 0xb3, 0x67, 0xb1, 0x5f, 0xd4, 0xe1, 0xd9, 0xc2, 0x7a, 0x97, - 0xbb, 0xd4, 0x5e, 0x0b, 0xfe, 0xc1, 0xb3, 0x1f, 0x2b, 0x1a, - 0x37, 0x98, 0x26, 0x27, 0xb1, 0xaf, 0x4c, 0x55, 0xe1, 0xae, - 0x4c, 0x86, 0x80, 0x4b, 0xc5, 0xf2, 0x35, 0x48, 0x81, 0xf7, - 0x83, 0x75, 0x63, 0x08, 0x0d, 0x77, 0x41, 0x14, 0xbc, 0xf3, - 0x6e, 0x46, 0xbd, 0x9c, 0x5a, 0x4f, 0x5c, 0x89, 0x26, 0xb6, - 0x6c, 0xde, 0x0d, 0x15, 0x31, 0xec, 0x7e, 0x13, 0xf2, 0x99, - 0x74, 0x40, 0x3c, 0xe1, 0xea, 0xa0, 0xc9, 0x99, 0x0a, 0x4b, - 0x17, 0x74, 0xff, 0x47, 0x15, 0x76, 0x5e, 0x44, 0xa2, 0x1c, - 0x93, 0xd3, 0xe6, 0xa2, 0x82, 0x0f, 0x7f, 0x55, 0xa8, 0xf3, - 0x79, 0xc3, 0xa8, 0x9f, 0x37, 0x2b, 0x97, 0x7e, 0x90, 0x71, - 0xfc, 0xa7, 0xff, 0xc6, 0xc7, 0x93, 0x5c, 0xc9, 0xed, 0x20, - 0x60, 0xbd, 0x5c, 0x36, 0x05, 0x55, 0x51, 0x55, 0x51, 0x15, - 0x36, 0x01, 0x17, 0xa9, 0x56, 0x27, 0x44, 0x66, 0xc9, 0x3a, - 0xb9, 0xbb, 0xee, 0x04, 0xb6, 0x2a, 0xfd, 0x10, 0x9a, 0x46, - 0xdd, 0x5d, 0x6d, 0xad, 0x21, 0x86, 0x6d, 0x62, 0x8a, 0x4a, - 0xbc, 0x73, 0xf0, 0x9d, 0x93, 0x0d, 0xf1, 0x62, 0xfa, 0x58, - 0x64, 0x37, 0x4f, 0x0b, 0xa3, 0xa1, 0x52, 0xce, 0x03, 0xce, - 0x0f, 0x77, 0x29, 0xad, 0x47, 0x38, 0xca, 0xbc, 0x61, 0xe6, - 0xad, 0xe4, 0x8b, 0xf1, 0x82, 0xa8, 0xd5, 0xe3, 0x8c, 0xd3, - 0xa0, 0xc4, 0xc0, 0x5e, 0x3b, 0xa1, 0x66, 0x2a, 0x6e, 0x88, - 0x24, 0x56, 0xe4, 0x84, 0x0a, 0x36, 0x72, 0xf3, 0x5c, 0x11, - 0xd9, 0x66, 0xd8, 0x45, 0x5c, 0x83, 0x9e, 0x1c, 0x8c, 0xc6, - 0xf6, 0x6e, 0x6a, 0xb1, 0x52, 0xed, 0x6c, 0x6a, 0x6d, 0x23, - 0xb9, 0x0b, 0x66, 0x26, 0x5a, 0x16, 0x16, 0x90, 0x43, 0xb9, - 0xc3, 0x02, 0xc1, 0x43, 0x93, 0x13, 0x94, 0xfe, 0xc3, 0x59, - 0x49, 0xbe, 0x1e, 0x26, 0x1b, 0x9d, 0x8e, 0xba, 0xc4, 0x29, - 0x51, 0x05, 0x28, 0x1f, 0x55, 0x59, 0x1c, 0x3e, 0x25, 0x86, - 0xcc, 0xc7, 0xd9, 0xd3, 0xa8, 0xe7, 0x10, 0xa0, 0xb6, 0x23, - 0xb9, 0xaf, 0x00, 0x8b, 0x7d, 0xf1, 0x5b, 0xd6, 0xb7, 0x56, - 0x44, 0x9b, 0x0a, 0xec, 0xa6, 0x2b, 0xb4, 0x4e, 0x1d, 0x4f, - 0xc5, 0x0b, 0x45, 0xd2, 0x3a, 0xc5, 0xc0, 0xbf, 0xb9, 0xdd, - 0x59, 0x21, 0xf2, 0x67, 0x25, 0x88, 0x9b, 0xb6, 0x66, 0x83, - 0xbf, 0x62, 0xfe, 0x7c, 0xfa, 0x9e, 0x50, 0xed, 0x15, 0x93, - 0xb6, 0x7a, 0xb0, 0xc4, 0xbe, 0xcf, 0x2a, 0x70, 0x4e, 0x52, - 0x20, 0xc1, 0x24, 0x08, 0x49, 0xd9, 0x05, 0x04, 0x53, 0x73, - 0xf3, 0xcf, 0x14, 0x70, 0xac, 0x3c, 0x45, 0x0f, 0x08, 0xa3, - 0xae, 0x43, 0xe7, 0x7f, 0x1f, 0xe2, 0x14, 0xf1, 0xbb, 0x25, - 0x20, 0xfd, 0xe4, 0xaf, 0x44, 0x9e, 0x77, 0x88, 0x4d, 0x26, - 0x09, 0xb1, 0xb0, 0x12, 0xf5, 0xdf, 0x3c, 0x53, 0x48, 0x78, - 0xb9, 0x60, 0x41, 0xd3, 0x8f, 0x8d, 0x11, 0x63, 0x60, 0x28, - 0x30, 0x07, 0xa2, 0x14, 0x3b, 0x8c, 0x50, 0xe2, 0xee, 0x73, - 0x39, 0x66, 0xd1, 0x51, 0x87, 0xac, 0x90, 0x9b, 0x2c, 0x6d, - 0x8d, 0xd5, 0x75, 0x3f, 0xc6, 0xf1, 0x8f, 0xdf, 0xdb, 0x45, - 0x38, 0xf8, 0xd6, 0x7e, 0xc7, 0x7c, 0x44, 0x08, 0x4a, 0x14, - 0xa0, 0x84, 0x7c, 0x8b, 0x88, 0x40, 0x93, 0x89, 0xae, 0x2c, - 0x20, 0x07, 0x80, 0xec, 0xce, 0x4c, 0x2c, 0x4e, 0x49, 0x79, - 0x53, 0xe7, 0xde, 0xa2, 0x9e, 0x67, 0x21, 0x53, 0x7c, 0x85, - 0xe7, 0x6f, 0xbd, 0x93, 0xab, 0x63, 0xba, 0xf0, 0xbd, 0xea, - 0x39, 0x16, 0x47, 0xbf, 0xe6, 0x0c, 0xcb, 0x63, 0xc7, 0xc5, - 0xf1, 0xdc, 0x5a, 0x52, 0xcd, 0x4c, 0x53, 0x8b, 0x7e, 0xb1, - 0xc3, 0x4e, 0xe7, 0x61, 0x25, 0x01, 0xec, 0xae, 0x06, 0x74, - 0x9f, 0xbc, 0xbb, 0x2a, 0x47, 0x46, 0xe8, 0xae, 0xf2, 0xab, - 0x15, 0xed, 0xa6, 0x86, 0x8f, 0x2f, 0xe5, 0x67, 0x0f, 0xdd, - 0xbf, 0x70, 0x53, 0xaa, 0x9b, 0x74, +/* ./certs/mldsa/bench_mldsa_87_key.der */ +static const unsigned char bench_mldsa_87_key[] = +{ + 0xEF, 0x49, 0x79, 0x47, 0x15, 0xC4, 0x8A, 0xA9, 0x74, 0x2A, + 0xF0, 0x36, 0x94, 0x5C, 0x91, 0x1C, 0x5D, 0xFF, 0x2C, 0x83, + 0xF2, 0x8B, 0x04, 0xFC, 0x5D, 0x64, 0xBD, 0x49, 0x73, 0xCD, + 0xCC, 0x99, 0xFD, 0x0F, 0x8F, 0x6E, 0xAD, 0x75, 0x9B, 0xC9, + 0xB1, 0xB9, 0x90, 0x93, 0xBF, 0xCE, 0x02, 0x2D, 0x12, 0x0C, + 0x54, 0x2E, 0xE2, 0x3E, 0x52, 0xFF, 0xE0, 0x7A, 0xCA, 0x2D, + 0x81, 0x84, 0xEA, 0x16, 0x1F, 0x10, 0xC4, 0xC9, 0xDE, 0xCD, + 0xF6, 0xBD, 0x60, 0xC9, 0xB3, 0xD0, 0x0F, 0x57, 0xEB, 0x71, + 0x78, 0x9B, 0xB5, 0x72, 0x2A, 0x65, 0x11, 0x14, 0xFF, 0x63, + 0x8D, 0x38, 0xCF, 0xA4, 0xF4, 0xAD, 0xD0, 0x68, 0x84, 0x97, + 0xFE, 0xD3, 0x91, 0xA0, 0xE4, 0xC3, 0x74, 0xCF, 0x20, 0x87, + 0x89, 0x84, 0x1F, 0x75, 0x91, 0xE3, 0xB3, 0x47, 0x8B, 0xFE, + 0x76, 0xB7, 0x2D, 0x30, 0x89, 0x02, 0x04, 0xC9, 0x93, 0xA8, + 0x31, 0xD3, 0x84, 0x2D, 0xE4, 0x26, 0x12, 0xDB, 0x94, 0x08, + 0x12, 0x45, 0x45, 0xCA, 0x44, 0x89, 0x52, 0xC4, 0x28, 0x41, + 0x46, 0x01, 0x1C, 0x93, 0x20, 0x8B, 0x40, 0x6D, 0x09, 0x36, + 0x65, 0x4C, 0xA2, 0x40, 0x62, 0xB8, 0x2C, 0x1B, 0x00, 0x20, + 0x61, 0x42, 0x8C, 0x24, 0xA7, 0x10, 0x19, 0x27, 0x25, 0x22, + 0x14, 0x31, 0x13, 0x33, 0x46, 0x0C, 0x22, 0x22, 0x18, 0xA7, + 0x91, 0x0C, 0x24, 0x61, 0xD9, 0x32, 0x46, 0xC8, 0x96, 0x49, + 0x5C, 0x90, 0x89, 0x9B, 0x84, 0x01, 0x5C, 0x08, 0x42, 0x64, + 0x84, 0x85, 0x0C, 0x42, 0x21, 0x20, 0x48, 0x21, 0x92, 0x00, + 0x28, 0x83, 0x20, 0x4C, 0x08, 0xC7, 0x51, 0x99, 0x06, 0x66, + 0x01, 0x18, 0x51, 0x13, 0x48, 0x0A, 0x0B, 0x42, 0x90, 0x4C, + 0x14, 0x08, 0x83, 0x14, 0x6D, 0x10, 0x10, 0x91, 0xE2, 0xC4, + 0x8D, 0xE1, 0x12, 0x11, 0x10, 0x40, 0x29, 0x99, 0x92, 0x30, + 0x12, 0x39, 0x6C, 0x91, 0x86, 0x68, 0x08, 0x83, 0x0C, 0x54, + 0x80, 0x80, 0xA2, 0x08, 0x52, 0x09, 0x30, 0x71, 0x0C, 0x10, + 0x04, 0x53, 0x00, 0x65, 0x91, 0x12, 0x2D, 0x0C, 0xA2, 0x8C, + 0x18, 0x14, 0x45, 0xD8, 0x14, 0x06, 0xE4, 0x36, 0x72, 0x93, + 0x10, 0x68, 0x09, 0xC2, 0x08, 0x51, 0x14, 0x8C, 0x13, 0x39, + 0x11, 0xD8, 0x44, 0x02, 0x18, 0x39, 0x29, 0x98, 0x16, 0x71, + 0x82, 0x40, 0x70, 0x01, 0x10, 0x8C, 0x1A, 0x30, 0x08, 0x02, + 0x03, 0x41, 0x5A, 0x00, 0x40, 0xA4, 0x16, 0x90, 0x20, 0x26, + 0x32, 0x00, 0x49, 0x61, 0x20, 0x20, 0x0C, 0x1A, 0xB0, 0x10, + 0x63, 0x10, 0x11, 0x58, 0x30, 0x0D, 0x59, 0x80, 0x68, 0x90, + 0x46, 0x2A, 0x91, 0xA8, 0x71, 0x98, 0x20, 0x40, 0x21, 0x83, + 0x6C, 0xC0, 0x48, 0x0D, 0x8B, 0x90, 0x11, 0x08, 0x09, 0x31, + 0x8C, 0x00, 0x12, 0x10, 0x14, 0x6E, 0xC2, 0x06, 0x32, 0x1A, + 0x26, 0x10, 0x0A, 0x91, 0x44, 0x08, 0x99, 0x8D, 0x60, 0x86, + 0x28, 0x11, 0x20, 0x6D, 0xA3, 0x12, 0x81, 0x8B, 0xC6, 0x51, + 0xCB, 0xA0, 0x61, 0x09, 0x97, 0x61, 0x48, 0xB6, 0x0D, 0x21, + 0x49, 0x51, 0x08, 0x13, 0x0C, 0x0A, 0x34, 0x86, 0x49, 0x80, + 0x65, 0x14, 0x39, 0x04, 0x21, 0x01, 0x81, 0x9A, 0xB8, 0x4D, + 0x04, 0x41, 0x48, 0x03, 0x92, 0x81, 0x62, 0x14, 0x6C, 0x10, + 0x16, 0x11, 0xE2, 0xA2, 0x49, 0xE3, 0x30, 0x65, 0x04, 0x93, + 0x8D, 0x1C, 0x33, 0x70, 0x1B, 0x15, 0x50, 0xE4, 0x38, 0x80, + 0x21, 0x37, 0x06, 0x20, 0xC6, 0x24, 0xC8, 0x22, 0x88, 0x4A, + 0x44, 0x80, 0x14, 0x43, 0x88, 0x54, 0x44, 0x42, 0x11, 0x49, + 0x41, 0x19, 0xB9, 0x2D, 0xCC, 0x04, 0x0D, 0x19, 0xC1, 0x65, + 0x5B, 0xA0, 0x11, 0x94, 0x00, 0x84, 0xE4, 0xB6, 0x41, 0xC2, + 0x18, 0x72, 0x5C, 0x02, 0x69, 0x11, 0x85, 0x24, 0x13, 0x35, + 0x00, 0x62, 0x34, 0x04, 0x58, 0x40, 0x21, 0x00, 0xC4, 0x28, + 0x0C, 0x17, 0x30, 0x10, 0x47, 0x60, 0x4B, 0xC2, 0x61, 0x9C, + 0x80, 0x2C, 0x20, 0x94, 0x31, 0x58, 0x92, 0x09, 0xCC, 0x00, + 0x02, 0x42, 0x94, 0x69, 0x99, 0x28, 0x06, 0x98, 0x02, 0x52, + 0x90, 0x32, 0x6E, 0x8A, 0x18, 0x2E, 0x54, 0x94, 0x81, 0x03, + 0xC6, 0x89, 0x03, 0xA1, 0x84, 0x48, 0x82, 0x48, 0x52, 0xC4, + 0x00, 0x91, 0x30, 0x24, 0x20, 0x12, 0x0D, 0x83, 0x80, 0x05, + 0x92, 0x48, 0x61, 0x98, 0x46, 0x92, 0xE1, 0xA6, 0x25, 0x20, + 0x93, 0x4D, 0x1C, 0x37, 0x2C, 0x9B, 0x94, 0x8D, 0xC8, 0x88, + 0x80, 0xA2, 0x18, 0x72, 0x0C, 0x09, 0x70, 0x81, 0x36, 0x90, + 0x24, 0x45, 0x69, 0x53, 0x36, 0x6C, 0xD2, 0x20, 0x51, 0x23, + 0xC1, 0x8C, 0x62, 0xB0, 0x70, 0x11, 0xB2, 0x70, 0xCB, 0x84, + 0x69, 0x4B, 0x32, 0x89, 0x01, 0x21, 0x81, 0x02, 0x38, 0x66, + 0xA3, 0x26, 0x12, 0x24, 0xA3, 0x30, 0x22, 0x24, 0x84, 0x18, + 0xB9, 0x84, 0x40, 0x16, 0x50, 0x22, 0x44, 0x31, 0x1B, 0x13, + 0x8D, 0x53, 0x02, 0x89, 0x4A, 0x22, 0x10, 0x53, 0x18, 0x01, + 0x58, 0x30, 0x2D, 0x00, 0x05, 0x08, 0x13, 0x80, 0x84, 0xC2, + 0x22, 0x0E, 0x88, 0x26, 0x2A, 0x04, 0xC4, 0x4C, 0x19, 0x43, + 0x01, 0xC8, 0x38, 0x4C, 0xD1, 0xB2, 0x90, 0x13, 0x29, 0x10, + 0x12, 0x48, 0x22, 0x01, 0xA8, 0x51, 0xD1, 0x92, 0x40, 0x11, + 0x27, 0x62, 0x10, 0x01, 0x0C, 0x0C, 0xC6, 0x28, 0xE3, 0x46, + 0x60, 0x24, 0x01, 0x8D, 0x14, 0xB6, 0x10, 0x50, 0xB6, 0x25, + 0x44, 0x38, 0x40, 0x44, 0xC2, 0x0C, 0x19, 0xC0, 0x64, 0x9C, + 0x44, 0x02, 0x21, 0x25, 0x65, 0x02, 0x23, 0x86, 0x1A, 0x12, + 0x70, 0x51, 0x24, 0x91, 0x09, 0x08, 0x44, 0x09, 0x35, 0x66, + 0x91, 0x04, 0x12, 0x43, 0x42, 0x8D, 0x22, 0xA0, 0x70, 0x14, + 0x91, 0x25, 0xA0, 0x00, 0x80, 0xE4, 0x00, 0x90, 0x44, 0xB2, + 0x61, 0x14, 0x20, 0x6E, 0xCA, 0x14, 0x0D, 0x23, 0x85, 0x68, + 0xDA, 0x40, 0x92, 0x0B, 0xB1, 0x20, 0x92, 0x04, 0x46, 0xC0, + 0x08, 0x8A, 0x40, 0xC4, 0x4D, 0x0C, 0x17, 0x45, 0xD3, 0x18, + 0x52, 0x1B, 0x46, 0x24, 0xC2, 0x24, 0x71, 0x83, 0x10, 0x80, + 0xC8, 0x82, 0x68, 0xC2, 0x96, 0x81, 0x0A, 0x01, 0x92, 0x60, + 0xB4, 0x84, 0x09, 0xC6, 0x00, 0x04, 0x37, 0x90, 0x0B, 0xA0, + 0x28, 0x12, 0x27, 0x09, 0x94, 0x80, 0x50, 0xD8, 0x04, 0x86, + 0x08, 0x13, 0x8A, 0x4A, 0x06, 0x89, 0x9B, 0xC4, 0x60, 0xE3, + 0xA2, 0x20, 0xE0, 0x38, 0x21, 0x22, 0xB4, 0x68, 0x0A, 0xA1, + 0x0C, 0x01, 0x24, 0x32, 0x4C, 0x48, 0x30, 0xA2, 0x80, 0x8D, + 0x58, 0x44, 0x10, 0xC8, 0x94, 0x6D, 0x21, 0xC3, 0x61, 0xCB, + 0x98, 0x24, 0xDC, 0x38, 0x11, 0xC9, 0x18, 0x11, 0x20, 0x01, + 0x50, 0x1C, 0x34, 0x8D, 0x02, 0x03, 0x09, 0x0A, 0x40, 0x61, + 0xD4, 0xB8, 0x84, 0x9C, 0xC2, 0x09, 0x04, 0xB1, 0x89, 0x83, + 0x86, 0x84, 0x19, 0x83, 0x0C, 0x5A, 0x86, 0x89, 0x10, 0x21, + 0x0D, 0xD1, 0xC2, 0x80, 0x18, 0x29, 0x2A, 0x0C, 0x01, 0x50, + 0x89, 0x88, 0x48, 0x03, 0xA7, 0x85, 0x21, 0x92, 0x64, 0xC4, + 0x16, 0x81, 0x94, 0x06, 0x6C, 0x53, 0x26, 0x12, 0x90, 0xB6, + 0x21, 0x0B, 0xA8, 0x64, 0x43, 0x96, 0x84, 0x41, 0x88, 0x70, + 0xE3, 0xA6, 0x44, 0x12, 0xC0, 0x09, 0x01, 0xC7, 0x60, 0xC3, + 0x20, 0x42, 0xC3, 0x40, 0x68, 0x10, 0xA6, 0x51, 0xA4, 0xA0, + 0x71, 0x54, 0x98, 0x04, 0x88, 0xB2, 0x00, 0x54, 0x18, 0x6A, + 0x48, 0x98, 0x20, 0x21, 0xB2, 0x8D, 0x82, 0x20, 0x81, 0x99, + 0x16, 0x81, 0x0A, 0xC5, 0x88, 0x0A, 0x23, 0x11, 0x8A, 0x16, + 0x44, 0x24, 0xC9, 0x29, 0x59, 0x08, 0x91, 0x1C, 0x29, 0x05, + 0x14, 0xC9, 0x44, 0xE3, 0x20, 0x10, 0x1B, 0xA1, 0x64, 0x82, + 0xA2, 0x90, 0x00, 0x00, 0x82, 0x98, 0xB2, 0x85, 0xC8, 0x04, + 0x28, 0xC8, 0xB2, 0x65, 0xC9, 0xC6, 0x88, 0xCC, 0x08, 0x91, + 0x84, 0x08, 0x30, 0x94, 0x94, 0x8D, 0xC0, 0x18, 0x46, 0x82, + 0x36, 0x4C, 0x83, 0x10, 0x72, 0x23, 0xB1, 0x88, 0x81, 0x20, + 0x8E, 0x19, 0x03, 0x8A, 0x94, 0x46, 0x22, 0x21, 0x35, 0x8E, + 0x04, 0xC0, 0x88, 0x5B, 0xB6, 0x09, 0x0A, 0x18, 0x44, 0x21, + 0x90, 0x65, 0x03, 0xB2, 0x21, 0xC4, 0x10, 0x50, 0xC1, 0x80, + 0x0C, 0x09, 0x40, 0x49, 0xE4, 0xA8, 0x8C, 0xA4, 0x36, 0x61, + 0x59, 0x12, 0x86, 0x20, 0x08, 0x2D, 0x10, 0x19, 0x85, 0xE4, + 0x34, 0x60, 0xC4, 0xB6, 0x60, 0x00, 0x18, 0x06, 0x8C, 0xB8, + 0x45, 0x19, 0x13, 0x4A, 0x53, 0xC4, 0x40, 0xC9, 0x38, 0x71, + 0xD9, 0x48, 0x10, 0x59, 0x08, 0x02, 0x02, 0x10, 0x69, 0x53, + 0x28, 0x80, 0x22, 0x81, 0x4C, 0xC9, 0x16, 0x26, 0xA1, 0x48, + 0x64, 0x19, 0x21, 0x11, 0x1C, 0x37, 0x88, 0x4B, 0x94, 0x2C, + 0x48, 0xC8, 0x6C, 0x63, 0x88, 0x65, 0x81, 0x40, 0x61, 0xA1, + 0x44, 0x31, 0x82, 0x18, 0x08, 0x80, 0x00, 0x26, 0x50, 0x14, + 0x49, 0xA1, 0x32, 0x50, 0x02, 0xC8, 0x45, 0x0C, 0x07, 0x24, + 0x13, 0x01, 0x6D, 0x0A, 0xB3, 0x90, 0x64, 0x30, 0x85, 0x21, + 0x09, 0x61, 0x44, 0x44, 0x72, 0x08, 0x32, 0x06, 0xE1, 0xA2, + 0x21, 0xDB, 0xA4, 0x09, 0x5A, 0xB4, 0x71, 0x43, 0xB2, 0x09, + 0x82, 0xC4, 0x64, 0x88, 0xA0, 0x91, 0xCA, 0x14, 0x90, 0xA4, + 0xA8, 0x41, 0xC1, 0x38, 0x85, 0x12, 0x32, 0x60, 0x1A, 0x11, + 0x72, 0x53, 0x32, 0x2C, 0xE3, 0x08, 0x4D, 0x24, 0xC6, 0x28, + 0x0A, 0x03, 0x8C, 0x88, 0x06, 0x05, 0xA0, 0xA8, 0x05, 0x84, + 0xA2, 0x4C, 0x80, 0x40, 0x62, 0xDA, 0x24, 0x81, 0x9A, 0x16, + 0x91, 0x24, 0x81, 0x04, 0xA4, 0x46, 0x51, 0xC2, 0xA8, 0x25, + 0x20, 0x28, 0x42, 0x13, 0x46, 0x2C, 0x63, 0x42, 0x72, 0x03, + 0x88, 0x28, 0xA3, 0x22, 0x24, 0x1A, 0x02, 0x26, 0x42, 0xA2, + 0x11, 0x11, 0xB0, 0x51, 0x92, 0xB4, 0x6C, 0xE2, 0x32, 0x85, + 0x10, 0xC2, 0x41, 0xC1, 0x40, 0x46, 0x4C, 0x26, 0x01, 0x1C, + 0x35, 0x02, 0x0C, 0x14, 0x0C, 0x18, 0x81, 0x00, 0x10, 0x26, + 0x02, 0xC8, 0x32, 0x8C, 0xE4, 0x02, 0x68, 0xCC, 0x14, 0x2E, + 0x89, 0x38, 0x60, 0x10, 0x12, 0x24, 0x93, 0x42, 0x65, 0xE3, + 0x24, 0x29, 0x08, 0x80, 0x41, 0x09, 0x29, 0x46, 0x5B, 0x26, + 0x49, 0x5B, 0x30, 0x80, 0x03, 0xC1, 0x2C, 0x04, 0x09, 0x82, + 0x4C, 0x48, 0x2D, 0x1C, 0x36, 0x4D, 0xDB, 0x02, 0x86, 0x21, + 0xB5, 0x51, 0x81, 0x80, 0x2D, 0xCB, 0x20, 0x81, 0x5B, 0x34, + 0x41, 0x89, 0x36, 0x48, 0x44, 0xA0, 0x05, 0x59, 0xB6, 0x64, + 0x12, 0x45, 0x21, 0x20, 0x31, 0x51, 0x0A, 0xC3, 0x8C, 0x14, + 0x48, 0x71, 0x18, 0x35, 0x24, 0x20, 0x45, 0x05, 0x88, 0x20, + 0x09, 0x08, 0xB1, 0x29, 0x18, 0xA0, 0x09, 0x4A, 0x00, 0x8A, + 0xE2, 0xB8, 0x45, 0x02, 0x27, 0x89, 0xD8, 0x10, 0x25, 0x51, + 0x82, 0x8C, 0x13, 0x92, 0x30, 0x1C, 0x24, 0x8E, 0x1C, 0x93, + 0x4D, 0xA3, 0x48, 0x51, 0x93, 0xA8, 0x69, 0xE2, 0x04, 0x89, + 0x13, 0x13, 0x61, 0xCB, 0x98, 0x8C, 0x09, 0x21, 0x62, 0x4B, + 0x14, 0x4E, 0x11, 0xA3, 0x09, 0x98, 0x40, 0x42, 0x91, 0x12, + 0x08, 0x80, 0x84, 0x2D, 0xC0, 0x12, 0x60, 0x03, 0xA4, 0x29, + 0x18, 0x80, 0x01, 0x94, 0x44, 0x8A, 0x12, 0x11, 0x72, 0xC4, + 0x22, 0x32, 0x9A, 0x46, 0x88, 0x1B, 0x16, 0x4D, 0x4B, 0x08, + 0x11, 0x02, 0x48, 0x45, 0x81, 0xA4, 0x64, 0xE1, 0x88, 0x0C, + 0x63, 0x10, 0x70, 0x48, 0x98, 0x05, 0x9B, 0xB8, 0x84, 0x03, + 0x14, 0x05, 0x44, 0x86, 0x0C, 0x20, 0x11, 0x68, 0xBE, 0x71, + 0x83, 0xC2, 0x69, 0xDE, 0x49, 0xAD, 0xB4, 0xDB, 0x93, 0xCB, + 0x20, 0x2B, 0xBD, 0x95, 0x97, 0x57, 0x7E, 0xCB, 0xBC, 0x73, + 0xB6, 0x3D, 0x16, 0x4A, 0x0E, 0xE4, 0x9C, 0x81, 0xB1, 0x5D, + 0x27, 0x64, 0xA2, 0x14, 0x12, 0x1B, 0x8E, 0xD0, 0xD8, 0x38, + 0xF6, 0xC7, 0xBB, 0x9F, 0x77, 0x3C, 0x62, 0x04, 0x92, 0xE1, + 0x97, 0xAF, 0x24, 0xA7, 0xF9, 0xF0, 0x8D, 0x3A, 0xBF, 0x5D, + 0xAB, 0x5C, 0x97, 0x0F, 0xFC, 0x35, 0xBC, 0x62, 0xD8, 0x42, + 0xFD, 0xC7, 0x8B, 0xF7, 0x80, 0xD1, 0x38, 0x68, 0x14, 0x5E, + 0x4F, 0x99, 0x31, 0xC7, 0xAF, 0xBD, 0x27, 0xCE, 0x1C, 0x5B, + 0x09, 0x1B, 0xCF, 0xBB, 0xFB, 0xF9, 0xF4, 0x90, 0x4C, 0xC1, + 0xA2, 0x12, 0xF9, 0xD0, 0xA5, 0x2C, 0xFD, 0x7B, 0x55, 0xB0, + 0xB1, 0xC6, 0x42, 0xE6, 0xEB, 0x10, 0x5E, 0xE9, 0x00, 0xE8, + 0x46, 0xE4, 0xE0, 0x8B, 0x21, 0xBC, 0xB1, 0xA9, 0x9E, 0x75, + 0x66, 0xF0, 0xB8, 0x87, 0xB9, 0x11, 0x7E, 0x28, 0x6C, 0x4D, + 0x58, 0xCD, 0x54, 0x71, 0x0C, 0x6A, 0xCC, 0xFB, 0x52, 0xC2, + 0x5B, 0xCC, 0x19, 0x67, 0x4F, 0xC2, 0x2F, 0x09, 0x62, 0x51, + 0x82, 0xEB, 0x9B, 0x94, 0x11, 0xB4, 0x5A, 0x67, 0x7F, 0x58, + 0x18, 0xB2, 0x3F, 0x37, 0x1F, 0x94, 0x44, 0x73, 0x6A, 0x02, + 0xF5, 0xFB, 0x5B, 0x03, 0xAC, 0x5D, 0xC6, 0xA9, 0x79, 0x8F, + 0x0F, 0x50, 0xA0, 0x57, 0x46, 0x05, 0x6D, 0x58, 0xDE, 0x6E, + 0x8D, 0x9C, 0x0E, 0x6A, 0xB5, 0x9B, 0x1B, 0x22, 0x74, 0xAD, + 0x00, 0x55, 0x27, 0x46, 0xCE, 0xBB, 0x82, 0x77, 0x4E, 0x6E, + 0x59, 0x38, 0x26, 0xB3, 0xC7, 0xBC, 0x97, 0x54, 0x83, 0x69, + 0x1F, 0x3E, 0xBD, 0x0F, 0xFF, 0x2F, 0xCA, 0xB9, 0xEA, 0x91, + 0x26, 0x8E, 0x0A, 0x78, 0x25, 0xF6, 0x6B, 0x11, 0x30, 0xD7, + 0xE2, 0xF4, 0x2B, 0xDA, 0xCF, 0xE1, 0x4A, 0x47, 0xAB, 0x5F, + 0x54, 0x34, 0x38, 0xAC, 0xD1, 0xBF, 0x45, 0xAD, 0x4B, 0x52, + 0x0F, 0x4C, 0xA2, 0xAC, 0x22, 0x7C, 0xB6, 0xED, 0x7F, 0xD5, + 0x63, 0x3B, 0x1A, 0x3B, 0xF2, 0x3D, 0x9B, 0x96, 0x92, 0x08, + 0xB9, 0x95, 0x13, 0xAF, 0x20, 0x26, 0x8B, 0x15, 0x97, 0x89, + 0xA5, 0x88, 0x8F, 0x78, 0xB4, 0x57, 0x9D, 0x51, 0x96, 0x9C, + 0x98, 0x93, 0xD5, 0x83, 0xF9, 0xFF, 0x94, 0x29, 0x1E, 0xA5, + 0x28, 0xA4, 0x0C, 0x22, 0xAB, 0xBC, 0x70, 0x48, 0xA2, 0x16, + 0x1C, 0xA4, 0xBA, 0x8B, 0xFE, 0xB2, 0xA9, 0x03, 0x96, 0x5F, + 0xB4, 0x84, 0x8E, 0xB4, 0xBB, 0x7B, 0x11, 0xC5, 0xC2, 0xDB, + 0xE3, 0x88, 0xB5, 0xD3, 0xAC, 0x07, 0x33, 0x53, 0xE8, 0x10, + 0x9E, 0xC5, 0x81, 0xB0, 0x77, 0x2F, 0x4F, 0x6D, 0x0D, 0x89, + 0xB4, 0x04, 0x98, 0x05, 0xE6, 0xD3, 0x36, 0x97, 0xCD, 0x3E, + 0x4D, 0xC6, 0x21, 0xE4, 0x0B, 0xCF, 0xED, 0xA7, 0x4D, 0xD9, + 0xD3, 0x25, 0xEC, 0xEC, 0x47, 0xFD, 0x06, 0x92, 0x77, 0x25, + 0x3C, 0x44, 0xE6, 0x5D, 0xB4, 0x35, 0x2B, 0x5D, 0x05, 0x65, + 0x63, 0x0B, 0xD9, 0xB8, 0x28, 0xDF, 0xDD, 0xFD, 0x64, 0x18, + 0x42, 0x19, 0x7F, 0x12, 0x78, 0xDD, 0xF0, 0x64, 0xD6, 0x99, + 0xB8, 0x74, 0x81, 0xE2, 0xB9, 0xC8, 0x67, 0x6D, 0x31, 0x22, + 0xA5, 0x68, 0xA1, 0x8D, 0x3E, 0x49, 0xBE, 0x10, 0x68, 0xA8, + 0x74, 0x1D, 0x18, 0xCF, 0x00, 0xE1, 0x4F, 0x77, 0xD8, 0xC6, + 0xE3, 0x08, 0xBB, 0x4C, 0xED, 0xFF, 0xD9, 0x9B, 0xB0, 0xD1, + 0x50, 0xBB, 0x8B, 0x91, 0xCD, 0x5F, 0x2A, 0xFB, 0x8F, 0x4D, + 0x3C, 0x98, 0xBA, 0xD7, 0x98, 0x99, 0xA7, 0x22, 0x14, 0xD7, + 0x94, 0xB5, 0xB8, 0xA4, 0x52, 0x31, 0xA7, 0xA1, 0xA4, 0x28, + 0xEE, 0x31, 0xB5, 0xD0, 0xC1, 0x07, 0x05, 0x16, 0x1D, 0x53, + 0x45, 0x62, 0x23, 0x05, 0x44, 0xB6, 0x4F, 0x92, 0x03, 0x53, + 0x9A, 0x71, 0x56, 0xAE, 0x16, 0x81, 0xB4, 0xC9, 0x98, 0xF4, + 0x7F, 0x11, 0x37, 0xC2, 0xC8, 0xF2, 0xE4, 0x48, 0xE3, 0xCC, + 0xF1, 0xE3, 0x3D, 0x8E, 0x13, 0x5B, 0x25, 0xAD, 0xCE, 0x6F, + 0xED, 0x60, 0x4F, 0x7D, 0x51, 0xE1, 0xD0, 0x74, 0xF4, 0xED, + 0xF3, 0x84, 0xA6, 0x0E, 0xBA, 0xB4, 0x8E, 0x5A, 0xB9, 0x12, + 0x70, 0x43, 0x4C, 0xB5, 0xA5, 0x1E, 0x86, 0xA5, 0xE3, 0x4D, + 0x76, 0x95, 0xCE, 0x2C, 0x53, 0x3A, 0x4E, 0x3F, 0x47, 0x73, + 0x85, 0x88, 0xD9, 0x39, 0x21, 0x83, 0x24, 0x68, 0x6A, 0x1E, + 0x77, 0xDF, 0x59, 0xC5, 0x1B, 0xE2, 0xB1, 0x47, 0x9D, 0xEE, + 0x45, 0x1E, 0xC6, 0xD4, 0x43, 0xE2, 0xC7, 0x1C, 0x98, 0x84, + 0xE0, 0x39, 0xE9, 0x9F, 0xA0, 0xA2, 0x24, 0x4A, 0x88, 0x46, + 0xF3, 0x50, 0x52, 0xB5, 0xAE, 0x37, 0x5C, 0xA1, 0x7D, 0xAD, + 0x7C, 0x30, 0x3E, 0xCD, 0x80, 0x1C, 0xAC, 0xF4, 0xE6, 0xB5, + 0x9F, 0x22, 0xB6, 0xFB, 0x0E, 0x6D, 0x80, 0x10, 0xF7, 0x3F, + 0xDD, 0x5B, 0xD9, 0xD4, 0x03, 0x14, 0x41, 0x90, 0x88, 0xA8, + 0xCF, 0x50, 0xA2, 0xF2, 0x7E, 0xF0, 0x0A, 0x7F, 0xED, 0x77, + 0x09, 0x48, 0x32, 0x55, 0xE9, 0x93, 0xE7, 0x27, 0x18, 0x46, + 0x17, 0x03, 0x25, 0x8E, 0x17, 0x5D, 0xE8, 0x9E, 0xB1, 0xB4, + 0x9D, 0x1A, 0x5E, 0xBE, 0xA8, 0xB8, 0x45, 0x30, 0xC6, 0xA5, + 0xB4, 0xAF, 0xF3, 0x0D, 0x91, 0x9C, 0xA9, 0x5B, 0x4C, 0xBB, + 0x19, 0x19, 0x39, 0x51, 0x36, 0x80, 0xF7, 0x10, 0xF7, 0x73, + 0x49, 0x17, 0xEC, 0xBC, 0x92, 0x08, 0x21, 0xB1, 0x0C, 0x23, + 0xC4, 0xD6, 0xD2, 0xB3, 0xFD, 0xAE, 0xE7, 0x71, 0xF3, 0x50, + 0x11, 0x27, 0x1A, 0x85, 0xF0, 0xAB, 0xD8, 0x16, 0x64, 0xCB, + 0xAD, 0xBB, 0xAE, 0x54, 0x37, 0xA3, 0xA8, 0xF4, 0x09, 0x67, + 0x54, 0x61, 0x86, 0x0F, 0x0E, 0x25, 0x0D, 0xDA, 0x4A, 0xC7, + 0xE7, 0x02, 0x80, 0x6B, 0x59, 0xD2, 0xC8, 0x88, 0x4D, 0x7D, + 0xFD, 0x3D, 0x48, 0x04, 0x6D, 0x95, 0xDF, 0xC2, 0x8B, 0x23, + 0x70, 0x4A, 0xF5, 0xDC, 0xC9, 0x24, 0x8D, 0x7E, 0x52, 0x22, + 0x7E, 0x9C, 0x5C, 0x32, 0xA5, 0xD5, 0xF2, 0x11, 0x08, 0xA0, + 0xD4, 0xA2, 0xD8, 0xDB, 0x1D, 0x9F, 0x1B, 0x54, 0x8F, 0xB5, + 0xF6, 0x71, 0x71, 0x49, 0xBC, 0x38, 0x09, 0xB6, 0x24, 0x94, + 0x80, 0x1F, 0x2D, 0x0C, 0xC7, 0xE4, 0xD6, 0xCD, 0xAB, 0x53, + 0x79, 0x28, 0xED, 0x48, 0x23, 0x14, 0x2F, 0x0B, 0x3A, 0xD0, + 0xA7, 0x08, 0xE1, 0xFD, 0x1E, 0xB6, 0xDD, 0x12, 0x93, 0x2D, + 0x95, 0x06, 0xBA, 0x95, 0xCB, 0x1A, 0xED, 0xFB, 0x60, 0xE7, + 0xF1, 0x1C, 0xAD, 0xC3, 0xEA, 0x8D, 0x3C, 0x53, 0x32, 0xB5, + 0x38, 0x26, 0xDD, 0x39, 0xF0, 0x39, 0x4E, 0x6F, 0x3E, 0xA9, + 0xEA, 0x25, 0x29, 0xB8, 0x6C, 0x7D, 0x0A, 0x91, 0xD4, 0xB9, + 0x7B, 0x67, 0xE4, 0xE5, 0x63, 0xD7, 0x6B, 0x03, 0xA5, 0xD7, + 0xE8, 0xD2, 0xC0, 0x34, 0x53, 0xA6, 0x16, 0x21, 0x2A, 0x2A, + 0x09, 0xD3, 0xAD, 0xA1, 0x2C, 0x6A, 0x88, 0x2D, 0x90, 0x06, + 0xBA, 0x0B, 0xAA, 0xD1, 0xDB, 0xA4, 0xD0, 0x49, 0x0F, 0x42, + 0xE1, 0xCA, 0xF0, 0x69, 0x15, 0x63, 0xCB, 0x0B, 0x4C, 0x2E, + 0x99, 0x20, 0x44, 0xE3, 0x6E, 0x32, 0x8A, 0xA1, 0x5C, 0x5B, + 0x03, 0xEB, 0xB5, 0x05, 0xFF, 0x1A, 0x76, 0x38, 0x1C, 0xB0, + 0x74, 0xF1, 0x5A, 0x0D, 0x8A, 0xD2, 0x4E, 0x38, 0x11, 0x86, + 0xB0, 0x2D, 0xD3, 0x88, 0xE2, 0x0F, 0x51, 0x68, 0xB9, 0x79, + 0x96, 0x50, 0x95, 0xDC, 0x69, 0xCB, 0xA6, 0x25, 0x4A, 0xDF, + 0xA1, 0x39, 0x13, 0x47, 0x0A, 0xF0, 0xEB, 0xCB, 0x14, 0x01, + 0x28, 0x9C, 0x0F, 0xE2, 0x62, 0xCA, 0xB5, 0x40, 0x51, 0x45, + 0x8E, 0x18, 0x88, 0xC9, 0x58, 0xAF, 0xB3, 0x48, 0xD5, 0x20, + 0xE8, 0xD8, 0x5B, 0xA2, 0x98, 0x74, 0x25, 0xFA, 0x25, 0x19, + 0x82, 0x22, 0xFA, 0x82, 0x7C, 0x38, 0x8D, 0x62, 0x86, 0x01, + 0x63, 0x20, 0x36, 0x8E, 0xAF, 0x15, 0x8A, 0x74, 0x1E, 0xFD, + 0x7F, 0xBE, 0x60, 0xC3, 0x65, 0x31, 0xCE, 0xDB, 0x92, 0xB9, + 0x13, 0x2A, 0x78, 0xA9, 0xFC, 0x6A, 0x7B, 0x18, 0xEC, 0x0C, + 0x7B, 0x4C, 0x86, 0xAF, 0xEA, 0x6D, 0x52, 0x09, 0x76, 0x52, + 0x87, 0x8A, 0x0B, 0x2A, 0xF3, 0x93, 0x35, 0x92, 0x8B, 0x60, + 0x42, 0x2E, 0x12, 0xA9, 0xF7, 0x7C, 0x61, 0x5C, 0x8F, 0xC0, + 0xAA, 0x6E, 0x6A, 0xF6, 0x48, 0x48, 0xC6, 0x3E, 0xE0, 0x1D, + 0xB4, 0xFB, 0xC4, 0xD8, 0x01, 0xB8, 0xF2, 0xF4, 0xDF, 0xC1, + 0xBA, 0xB5, 0xF2, 0x27, 0x3F, 0xDB, 0x78, 0x62, 0x1C, 0x0A, + 0xBE, 0xDB, 0xDD, 0x3C, 0x0C, 0x29, 0x85, 0xF1, 0x44, 0x5F, + 0x2B, 0x43, 0x80, 0x57, 0xA7, 0x5A, 0x4D, 0x1B, 0xBE, 0x03, + 0xE7, 0x55, 0x7B, 0x91, 0x9D, 0x4C, 0x8B, 0xD7, 0xFD, 0xDE, + 0x65, 0x7E, 0xA8, 0x48, 0xBB, 0xA9, 0x96, 0x06, 0x7F, 0xC0, + 0x6C, 0xED, 0x87, 0x53, 0x77, 0xB4, 0x5A, 0x7C, 0xBB, 0xCE, + 0xCF, 0x01, 0x08, 0x45, 0x61, 0xC1, 0x28, 0xB6, 0xF2, 0xB4, + 0x5B, 0x6B, 0x84, 0xFE, 0x18, 0x09, 0x39, 0xC1, 0xC8, 0x96, + 0x36, 0x6E, 0xBA, 0x7E, 0x48, 0x12, 0xE6, 0xDC, 0x22, 0x48, + 0x17, 0x0B, 0xBD, 0x92, 0x64, 0xFA, 0xC9, 0x9B, 0x07, 0xDA, + 0xED, 0x04, 0x68, 0x42, 0x15, 0x8C, 0xF9, 0xD8, 0xC3, 0x0D, + 0x21, 0x9D, 0x96, 0xBC, 0xC3, 0x07, 0x1A, 0x2C, 0x59, 0x3F, + 0x1A, 0x83, 0x43, 0xF0, 0xE0, 0xDE, 0xE3, 0x40, 0x8E, 0x04, + 0x66, 0x3C, 0x87, 0x1E, 0xFA, 0x7B, 0x8A, 0x7B, 0xD2, 0x9E, + 0x15, 0xF5, 0xEC, 0x3C, 0x72, 0x7E, 0x2D, 0x19, 0xF8, 0xFD, + 0xF0, 0x28, 0x71, 0x8A, 0xF5, 0xCB, 0x4C, 0x61, 0x5F, 0x85, + 0xE0, 0x6F, 0xB8, 0xF3, 0x17, 0x10, 0xCB, 0x44, 0x45, 0x8C, + 0x96, 0x08, 0xA1, 0xF1, 0x48, 0xA4, 0x1D, 0xEA, 0x35, 0x2F, + 0x82, 0x2B, 0xC2, 0x0B, 0xEF, 0x73, 0xE1, 0xC2, 0x35, 0xDB, + 0xE7, 0x68, 0xFD, 0xB0, 0xE8, 0x7B, 0x2D, 0x0F, 0xFD, 0x53, + 0x1B, 0xB8, 0x36, 0x54, 0xD6, 0x43, 0x30, 0xCF, 0x83, 0xB0, + 0x18, 0xDA, 0x9B, 0x86, 0x82, 0xFA, 0xE6, 0x37, 0x5B, 0x9E, + 0xA4, 0xDB, 0x7C, 0x59, 0x25, 0x59, 0xC6, 0x46, 0x36, 0x72, + 0xC5, 0x72, 0xD8, 0x2F, 0x26, 0xE2, 0xEE, 0xE3, 0xCB, 0xE5, + 0x33, 0x1F, 0x18, 0x2E, 0x16, 0xCE, 0xD2, 0x9C, 0x89, 0x6E, + 0xD5, 0x21, 0xFA, 0x58, 0x83, 0xA9, 0x4C, 0x69, 0x97, 0x7D, + 0xAE, 0x1F, 0x65, 0xD5, 0xDB, 0xF0, 0xFE, 0xD5, 0x32, 0xB1, + 0x50, 0x72, 0xDF, 0x2B, 0xE2, 0xC1, 0xE6, 0x2E, 0x8B, 0x87, + 0xA8, 0x4E, 0x84, 0xBE, 0xC9, 0x27, 0xB5, 0x74, 0x7E, 0x13, + 0x17, 0x57, 0x9C, 0xC6, 0xD3, 0x9F, 0xCD, 0x86, 0x50, 0x4B, + 0x6C, 0x50, 0xA2, 0xBA, 0xFE, 0xF6, 0xD5, 0x85, 0x68, 0x31, + 0x89, 0xFB, 0xEB, 0xFE, 0x92, 0xB0, 0xD0, 0x4C, 0xBC, 0x65, + 0x4B, 0x62, 0xE2, 0xDF, 0x88, 0x7E, 0x90, 0xE0, 0xB3, 0xEC, + 0x13, 0x69, 0x33, 0xEA, 0x53, 0x69, 0x9A, 0x0B, 0x27, 0xFB, + 0xCA, 0x9F, 0x9E, 0x1F, 0xCF, 0xB1, 0xEB, 0xF4, 0x8F, 0xE2, + 0x53, 0xC8, 0xE6, 0x51, 0x75, 0xEE, 0xB1, 0x34, 0x3E, 0x37, + 0xDD, 0x2D, 0x3A, 0x72, 0x76, 0x33, 0xC1, 0x27, 0xE7, 0xBD, + 0xC1, 0x7F, 0xCB, 0x53, 0x5D, 0xDF, 0xC4, 0x1F, 0x36, 0xDB, + 0x6A, 0x91, 0x1F, 0x6A, 0xA5, 0xC6, 0xE2, 0x37, 0x68, 0x1A, + 0x7D, 0xF7, 0xED, 0x2A, 0xC7, 0x99, 0x5E, 0xBD, 0x59, 0x57, + 0x09, 0x22, 0x7E, 0x9C, 0xBD, 0x8E, 0xAD, 0xBE, 0xEE, 0xA5, + 0x2A, 0xE3, 0x9F, 0xFF, 0x14, 0xDA, 0xBA, 0x90, 0x37, 0xBA, + 0x3A, 0x42, 0xCD, 0x4A, 0x28, 0x47, 0x27, 0x58, 0x7A, 0x33, + 0x93, 0x77, 0x83, 0x29, 0xAB, 0x47, 0x19, 0x43, 0x00, 0x6F, + 0xE7, 0x77, 0xC1, 0xAA, 0xD6, 0xBC, 0xC0, 0x1B, 0xD0, 0xDF, + 0xF9, 0x40, 0x4D, 0xB2, 0x60, 0xCE, 0x59, 0x17, 0x0A, 0xA9, + 0x14, 0x4E, 0x6A, 0x30, 0x1B, 0x26, 0x68, 0x55, 0x12, 0x19, + 0x62, 0x85, 0x5D, 0xA6, 0xB4, 0x48, 0x4A, 0xE9, 0xE1, 0x57, + 0xB1, 0x48, 0xF3, 0x86, 0xD1, 0x50, 0x2E, 0x1D, 0x57, 0xBE, + 0x09, 0xF8, 0x53, 0x40, 0xD9, 0x55, 0xD9, 0x71, 0x4C, 0xA7, + 0xDB, 0x61, 0x82, 0x4E, 0x00, 0x58, 0xE4, 0x89, 0xAE, 0xA6, + 0x1A, 0x4B, 0xE3, 0x9D, 0xEC, 0x65, 0xEE, 0xE1, 0x7B, 0xDB, + 0x4F, 0x8D, 0xF3, 0xD9, 0x89, 0xAA, 0xD1, 0x31, 0x30, 0xDE, + 0xC3, 0x5C, 0xBC, 0xB9, 0x60, 0x0A, 0xE0, 0x13, 0x14, 0x85, + 0x08, 0x60, 0xC5, 0x1C, 0xC2, 0x9D, 0x8B, 0x6E, 0xB8, 0x94, + 0x11, 0x6F, 0xD3, 0xEE, 0xFB, 0xF8, 0x15, 0xD8, 0xA4, 0x0B, + 0x92, 0xDF, 0x7C, 0x9A, 0xA2, 0xEC, 0xA3, 0x3D, 0xBC, 0xCD, + 0xE8, 0xB5, 0xB3, 0xF5, 0xE8, 0xEE, 0x2A, 0x57, 0xF7, 0x58, + 0xC4, 0xAA, 0xEB, 0x33, 0x44, 0x5F, 0x62, 0xBE, 0x90, 0x48, + 0xE5, 0xCB, 0x6A, 0xCB, 0x55, 0x94, 0x6D, 0xE6, 0x22, 0x03, + 0xEB, 0xCB, 0x05, 0xB8, 0xB4, 0xA5, 0xBE, 0xEC, 0x79, 0x21, + 0x0D, 0xB3, 0x5C, 0x74, 0x11, 0xCB, 0xB3, 0xA6, 0x06, 0x2F, + 0x73, 0xD1, 0x14, 0xD9, 0x70, 0x4E, 0xC5, 0xF5, 0xFF, 0xFD, + 0x49, 0x3B, 0xA9, 0x22, 0x80, 0x2A, 0x5E, 0xF9, 0xAE, 0xA5, + 0xD4, 0x3C, 0x74, 0xD7, 0x5A, 0x5D, 0x88, 0x6F, 0x99, 0xE2, + 0x4C, 0xA3, 0x9B, 0x15, 0xB8, 0xFD, 0x0B, 0x0D, 0x57, 0x03, + 0xE8, 0xDA, 0x78, 0xC4, 0x63, 0x49, 0x48, 0x7A, 0x39, 0xCD, + 0xFA, 0xAD, 0x92, 0x55, 0x4A, 0x0E, 0x68, 0x08, 0xB9, 0x34, + 0xE0, 0x14, 0x6E, 0x19, 0xED, 0x69, 0x14, 0x7F, 0xC1, 0x7D, + 0x12, 0xAC, 0x5D, 0xF7, 0x62, 0x6F, 0x77, 0x65, 0xA3, 0xC2, + 0xF9, 0xDA, 0x43, 0x9E, 0x6B, 0x82, 0xD9, 0x14, 0x57, 0x02, + 0x09, 0x9F, 0xA7, 0x15, 0x27, 0xE8, 0xAD, 0xA1, 0x73, 0xC7, + 0xB6, 0x11, 0x4C, 0x5E, 0xF4, 0x1A, 0x0A, 0x97, 0x98, 0x5E, + 0x29, 0x8A, 0x8B, 0xA5, 0xBD, 0x86, 0x7F, 0x6D, 0x31, 0x72, + 0x6D, 0xE5, 0xCF, 0x13, 0xFF, 0xB9, 0x4E, 0x69, 0x66, 0x37, + 0x1B, 0xFB, 0xE8, 0xB7, 0x60, 0xFE, 0xBF, 0xAA, 0x06, 0x88, + 0xA4, 0xA2, 0x0B, 0x33, 0x55, 0xAC, 0x61, 0x77, 0x0A, 0x6F, + 0x1F, 0xAF, 0xD8, 0x9B, 0xC7, 0x26, 0x13, 0xF6, 0xC4, 0xEF, + 0xCE, 0x0F, 0x16, 0x86, 0x64, 0x1B, 0xC0, 0x71, 0x35, 0xF9, + 0x1F, 0xAF, 0xC4, 0x7A, 0xA3, 0x3B, 0x89, 0x40, 0xCB, 0x09, + 0x11, 0x7B, 0x01, 0x54, 0xD5, 0xD2, 0x2A, 0xC8, 0xFE, 0x0E, + 0xEF, 0x8C, 0xFB, 0x2B, 0x08, 0x12, 0x6D, 0xBB, 0xA8, 0x2E, + 0x7A, 0x2B, 0xC2, 0x91, 0x2A, 0x76, 0x0B, 0x31, 0x30, 0x4A, + 0x5B, 0xCA, 0x96, 0xC9, 0x89, 0xA0, 0x12, 0x40, 0x76, 0xBE, + 0xCD, 0x59, 0x5F, 0xC2, 0x7B, 0xAF, 0xF6, 0x29, 0xDE, 0xE9, + 0x24, 0x61, 0x3F, 0x46, 0x78, 0xA7, 0xDA, 0x65, 0xB0, 0xB3, + 0xAE, 0xF3, 0x72, 0x6E, 0x37, 0x6E, 0xAE, 0xB1, 0x3B, 0xF6, + 0x60, 0xA1, 0x92, 0x86, 0x9E, 0x97, 0x4F, 0x5E, 0x86, 0x88, + 0x32, 0x06, 0x7C, 0xE3, 0x37, 0x7E, 0xB1, 0x83, 0xF5, 0x83, + 0x05, 0x43, 0xB3, 0xE3, 0xA1, 0x68, 0xE5, 0x4C, 0x92, 0x9C, + 0x61, 0xA3, 0x5D, 0xCF, 0x23, 0xE7, 0xCE, 0xF5, 0x7F, 0xBB, + 0xF7, 0x89, 0x5E, 0xA8, 0xF0, 0xA1, 0xFF, 0x1A, 0xAF, 0x15, + 0xC8, 0x3D, 0x8B, 0xCE, 0x06, 0xA4, 0x60, 0xD6, 0x40, 0x19, + 0x48, 0x33, 0x53, 0x34, 0x9E, 0xD8, 0x75, 0xFC, 0x45, 0x73, + 0x35, 0x8F, 0x70, 0x04, 0x80, 0xA1, 0xE5, 0xFC, 0x98, 0xB0, + 0x52, 0x63, 0x41, 0x84, 0x57, 0xA2, 0x85, 0x4E, 0x68, 0x13, + 0x2D, 0x3E, 0x4B, 0x68, 0x7F, 0x43, 0x04, 0x05, 0x02, 0x5A, + 0x16, 0x67, 0x5A, 0xC5, 0xEA, 0xAC, 0x25, 0x61, 0xD4, 0xA4, + 0xE7, 0xBE, 0x13, 0x95, 0xBD, 0x03, 0xB4, 0x26, 0xE3, 0xBF, + 0x7E, 0xE5, 0x0B, 0x34, 0xEB, 0x59, 0x5D, 0xD7, 0xDB, 0x1E, + 0x07, 0xFC, 0x63, 0xAB, 0xBB, 0xC6, 0x7A, 0x51, 0x50, 0x59, + 0x13, 0x4B, 0x27, 0x88, 0x98, 0xDC, 0x01, 0x37, 0xEB, 0x58, + 0x75, 0xDE, 0x5A, 0xA4, 0x6B, 0xDD, 0xBA, 0x01, 0x40, 0xF7, + 0x1C, 0x0A, 0xF3, 0x02, 0x3D, 0x54, 0x64, 0xF2, 0x85, 0x43, + 0x90, 0xC0, 0x69, 0x18, 0x94, 0x95, 0x6E, 0x57, 0x14, 0xDA, + 0x27, 0x0A, 0x42, 0xB2, 0x5A, 0x78, 0xE4, 0xF1, 0x45, 0x85, + 0x54, 0xEC, 0x44, 0xA0, 0xCB, 0xF4, 0xD1, 0x3A, 0x85, 0x74, + 0x0F, 0x04, 0x67, 0xF4, 0x42, 0x01, 0xC4, 0x04, 0x66, 0x48, + 0x6C, 0xBE, 0x84, 0x38, 0x6E, 0xDA, 0x23, 0xD0, 0xD1, 0x26, + 0x94, 0x11, 0x65, 0x2E, 0xC6, 0xD8, 0x6E, 0x25, 0x17, 0x43, + 0x9F, 0x55, 0x2D, 0x1D, 0x55, 0xA9, 0xDD, 0x3B, 0xC7, 0x09, + 0xDE, 0x26, 0x64, 0xD4, 0x85, 0x21, 0x15, 0x0D, 0x4A, 0x45, + 0x4D, 0xBA, 0x13, 0x9E, 0x3B, 0x5E, 0xC2, 0xF7, 0xC1, 0x34, + 0xC5, 0x74, 0xD4, 0x95, 0x19, 0x3D, 0x69, 0x9C, 0xAE, 0xEF, + 0x13, 0x95, 0x2C, 0x77, 0xDD, 0x64, 0x2C, 0x12, 0x31, 0x7D, + 0xB5, 0x55, 0xDE, 0x69, 0x35, 0x3F, 0x77, 0x72, 0xC6, 0x21, + 0x22, 0x23, 0x7A, 0x05, 0xBF, 0x92, 0xAE, 0x49, 0x7F, 0x74, + 0x17, 0x97, 0x5F, 0x5B, 0x4D, 0x7D, 0x86, 0x23, 0x04, 0xE0, + 0xFF, 0x10, 0x06, 0xC3, 0xD3, 0x05, 0xDE, 0xC4, 0xAE, 0xAF, + 0x3D, 0x2D, 0xAF, 0x3C, 0xAF, 0xD3, 0xD5, 0xFD, 0x84, 0xD8, + 0x3B, 0x6C, 0x8E, 0x8B, 0x23, 0x8B, 0x16, 0xAA, 0x67, 0xF1, + 0xDE, 0xA4, 0x4B, 0x5A, 0x39, 0x60, 0x73, 0xD2, 0x9F, 0x1F, + 0x8C, 0xCF, 0xBC, 0xAA, 0x74, 0x9E, 0x8D, 0xFD, 0xC3, 0xB7, + 0x86, 0xE5, 0xBB, 0x5A, 0x4D, 0x3D, 0xE2, 0xC3, 0x28, 0x78, + 0x26, 0xD4, 0xB3, 0x45, 0x94, 0xD3, 0x2D, 0xBF, 0x8C, 0x92, + 0x56, 0x3C, 0x6E, 0xEA, 0x53, 0x38, 0x7F, 0x22, 0x67, 0xC9, + 0xA7, 0x14, 0x20, 0xB9, 0x13, 0xC4, 0xA0, 0x44, 0x83, 0xC4, + 0x19, 0xCA, 0x98, 0x71, 0xC7, 0x13, 0x70, 0x3A, 0xA7, 0xFB, + 0x9E, 0xC4, 0x94, 0x8C, 0xFD, 0x21, 0x36, 0x88, 0xEA, 0x23, + 0xC7, 0x43, 0x52, 0x9F, 0xF4, 0x9E, 0xB1, 0xB4, 0xD3, 0x20, + 0x65, 0xD8, 0x18, 0x25, 0x80, 0xB7, 0xE4, 0x5C, 0x96, 0x3A, + 0xA3, 0xB5, 0x40, 0x63, 0xAC, 0x02, 0x34, 0x51, 0xF7, 0x12, + 0xEA, 0x97, 0x9D, 0x3E, 0xE7, 0xCB, 0x88, 0x15, 0xAA, 0xE3, + 0xFE, 0xE5, 0x42, 0xE5, 0x48, 0xCF, 0xC6, 0x8E, 0x0E, 0xC6, + 0x48, 0xDB, 0xE5, 0x1E, 0x79, 0x99, 0xED, 0x78, 0xA6, 0x37, + 0xDD, 0xE3, 0x7B, 0x01, 0xDD, 0x20, 0x63, 0x45, 0x57, 0xD1, + 0x0F, 0x05, 0x5D, 0x29, 0xAD, 0x99, 0x6C, 0x27, 0xA3, 0x0C, + 0x72, 0x81, 0xB1, 0x26, 0x16, 0xAF, 0x11, 0x65, 0xBA, 0x79, + 0xBC, 0xB8, 0xFE, 0xE7, 0xC5, 0xE6, 0x4C, 0xFA, 0x37, 0xC5, + 0xE0, 0x2E, 0x4E, 0xEF, 0x75, 0xE4, 0x04, 0xAF, 0xFA, 0x41, + 0x7F, 0x58, 0x2E, 0x8F, 0x95, 0x5F, 0x15, 0x5C, 0x15, 0x23, + 0x81, 0xB7, 0x2C, 0x81, 0x70, 0xF5, 0xCC, 0x60, 0x09, 0x7E, + 0xF1, 0x0D, 0x9C, 0x9D, 0xCC, 0xA0, 0x30, 0xA8, 0x82, 0x23, + 0x5F, 0x94, 0xCB, 0x18, 0xC4, 0x32, 0xE6, 0xAB, 0xCD, 0x96, + 0x9E, 0xAB, 0xCD, 0x68, 0x6F, 0x88, 0xB7, 0x72, 0x65, 0xBC, + 0x1E, 0x05, 0x60, 0xFE, 0x6B, 0x77, 0x2A, 0x11, 0x63, 0x59, + 0x29, 0xDB, 0xBA, 0xE0, 0x50, 0xD5, 0x51, 0x77, 0x16, 0xB8, + 0xB7, 0xF4, 0xA9, 0xBE, 0xF0, 0xA5, 0xAA, 0x20, 0x50, 0x2E, + 0x73, 0x21, 0xEE, 0x77, 0xA3, 0xC8, 0xBC, 0x0C, 0x16, 0x0F, + 0x83, 0x7B, 0xAF, 0xBB, 0x91, 0x95, 0xD3, 0x6E, 0xE7, 0x28, + 0x77, 0x00, 0xBC, 0x83, 0x46, 0xA5, 0x0A, 0x19, 0xE8, 0x10, + 0xFB, 0x24, 0xEB, 0x27, 0xC2, 0xA3, 0xDD, 0xB8, 0x5B, 0x27, + 0xB9, 0xBB, 0x49, 0xD9, 0xD0, 0x32, 0x94, 0x48, 0x1B, 0xB8, + 0xF8, 0xB2, 0x30, 0xF4, 0x1F, 0x3D, 0xBF, 0xE6, 0xF3, 0x34, + 0xD3, 0x32, 0x85, 0x67, 0x85, 0x13, 0x3E, 0x20, 0xB7, 0xFA, + 0x74, 0x27, 0x74, 0x8F, 0x55, 0x47, 0x15, 0x91, 0x0B, 0x3F, + 0xB1, 0x18, 0xE7, 0x11, 0x1E, 0x52, 0xD8, 0xD1, 0x3F, 0xB9, + 0x5D, 0x4F, 0x88, 0xB9, 0x1E, 0x5A, 0xB6, 0x90, 0x64, 0xAD, + 0x6F, 0x8D, 0x33, 0xB3, 0x57, 0xDE, 0x3E, 0x13, 0xB3, 0x9F, + 0x2D, 0x00, 0xB1, 0x79, 0x84, 0x60, 0x6D, 0x3C, 0x5F, 0xC0, + 0x34, 0x08, 0x4B, 0x58, 0x33, 0x59, 0xFE, 0xE5, 0xED, 0xD3, + 0x10, 0xD8, 0xD8, 0x85, 0xC3, 0xC9, 0x71, 0xCF, 0x40, 0x96, + 0xC0, 0xD5, 0x5E, 0x62, 0xE7, 0xCB, 0x33, 0xEE, 0x72, 0xB5, + 0xB8, 0x6E, 0xEA, 0x13, 0xDE, 0xEB, 0x82, 0x03, 0x8E, 0x6C, + 0xB3, 0x67, 0xB1, 0x5F, 0xD4, 0xE1, 0xD9, 0xC2, 0x7A, 0x97, + 0xBB, 0xD4, 0x5E, 0x0B, 0xFE, 0xC1, 0xB3, 0x1F, 0x2B, 0x1A, + 0x37, 0x98, 0x26, 0x27, 0xB1, 0xAF, 0x4C, 0x55, 0xE1, 0xAE, + 0x4C, 0x86, 0x80, 0x4B, 0xC5, 0xF2, 0x35, 0x48, 0x81, 0xF7, + 0x83, 0x75, 0x63, 0x08, 0x0D, 0x77, 0x41, 0x14, 0xBC, 0xF3, + 0x6E, 0x46, 0xBD, 0x9C, 0x5A, 0x4F, 0x5C, 0x89, 0x26, 0xB6, + 0x6C, 0xDE, 0x0D, 0x15, 0x31, 0xEC, 0x7E, 0x13, 0xF2, 0x99, + 0x74, 0x40, 0x3C, 0xE1, 0xEA, 0xA0, 0xC9, 0x99, 0x0A, 0x4B, + 0x17, 0x74, 0xFF, 0x47, 0x15, 0x76, 0x5E, 0x44, 0xA2, 0x1C, + 0x93, 0xD3, 0xE6, 0xA2, 0x82, 0x0F, 0x7F, 0x55, 0xA8, 0xF3, + 0x79, 0xC3, 0xA8, 0x9F, 0x37, 0x2B, 0x97, 0x7E, 0x90, 0x71, + 0xFC, 0xA7, 0xFF, 0xC6, 0xC7, 0x93, 0x5C, 0xC9, 0xED, 0x20, + 0x60, 0xBD, 0x5C, 0x36, 0x05, 0x55, 0x51, 0x55, 0x51, 0x15, + 0x36, 0x01, 0x17, 0xA9, 0x56, 0x27, 0x44, 0x66, 0xC9, 0x3A, + 0xB9, 0xBB, 0xEE, 0x04, 0xB6, 0x2A, 0xFD, 0x10, 0x9A, 0x46, + 0xDD, 0x5D, 0x6D, 0xAD, 0x21, 0x86, 0x6D, 0x62, 0x8A, 0x4A, + 0xBC, 0x73, 0xF0, 0x9D, 0x93, 0x0D, 0xF1, 0x62, 0xFA, 0x58, + 0x64, 0x37, 0x4F, 0x0B, 0xA3, 0xA1, 0x52, 0xCE, 0x03, 0xCE, + 0x0F, 0x77, 0x29, 0xAD, 0x47, 0x38, 0xCA, 0xBC, 0x61, 0xE6, + 0xAD, 0xE4, 0x8B, 0xF1, 0x82, 0xA8, 0xD5, 0xE3, 0x8C, 0xD3, + 0xA0, 0xC4, 0xC0, 0x5E, 0x3B, 0xA1, 0x66, 0x2A, 0x6E, 0x88, + 0x24, 0x56, 0xE4, 0x84, 0x0A, 0x36, 0x72, 0xF3, 0x5C, 0x11, + 0xD9, 0x66, 0xD8, 0x45, 0x5C, 0x83, 0x9E, 0x1C, 0x8C, 0xC6, + 0xF6, 0x6E, 0x6A, 0xB1, 0x52, 0xED, 0x6C, 0x6A, 0x6D, 0x23, + 0xB9, 0x0B, 0x66, 0x26, 0x5A, 0x16, 0x16, 0x90, 0x43, 0xB9, + 0xC3, 0x02, 0xC1, 0x43, 0x93, 0x13, 0x94, 0xFE, 0xC3, 0x59, + 0x49, 0xBE, 0x1E, 0x26, 0x1B, 0x9D, 0x8E, 0xBA, 0xC4, 0x29, + 0x51, 0x05, 0x28, 0x1F, 0x55, 0x59, 0x1C, 0x3E, 0x25, 0x86, + 0xCC, 0xC7, 0xD9, 0xD3, 0xA8, 0xE7, 0x10, 0xA0, 0xB6, 0x23, + 0xB9, 0xAF, 0x00, 0x8B, 0x7D, 0xF1, 0x5B, 0xD6, 0xB7, 0x56, + 0x44, 0x9B, 0x0A, 0xEC, 0xA6, 0x2B, 0xB4, 0x4E, 0x1D, 0x4F, + 0xC5, 0x0B, 0x45, 0xD2, 0x3A, 0xC5, 0xC0, 0xBF, 0xB9, 0xDD, + 0x59, 0x21, 0xF2, 0x67, 0x25, 0x88, 0x9B, 0xB6, 0x66, 0x83, + 0xBF, 0x62, 0xFE, 0x7C, 0xFA, 0x9E, 0x50, 0xED, 0x15, 0x93, + 0xB6, 0x7A, 0xB0, 0xC4, 0xBE, 0xCF, 0x2A, 0x70, 0x4E, 0x52, + 0x20, 0xC1, 0x24, 0x08, 0x49, 0xD9, 0x05, 0x04, 0x53, 0x73, + 0xF3, 0xCF, 0x14, 0x70, 0xAC, 0x3C, 0x45, 0x0F, 0x08, 0xA3, + 0xAE, 0x43, 0xE7, 0x7F, 0x1F, 0xE2, 0x14, 0xF1, 0xBB, 0x25, + 0x20, 0xFD, 0xE4, 0xAF, 0x44, 0x9E, 0x77, 0x88, 0x4D, 0x26, + 0x09, 0xB1, 0xB0, 0x12, 0xF5, 0xDF, 0x3C, 0x53, 0x48, 0x78, + 0xB9, 0x60, 0x41, 0xD3, 0x8F, 0x8D, 0x11, 0x63, 0x60, 0x28, + 0x30, 0x07, 0xA2, 0x14, 0x3B, 0x8C, 0x50, 0xE2, 0xEE, 0x73, + 0x39, 0x66, 0xD1, 0x51, 0x87, 0xAC, 0x90, 0x9B, 0x2C, 0x6D, + 0x8D, 0xD5, 0x75, 0x3F, 0xC6, 0xF1, 0x8F, 0xDF, 0xDB, 0x45, + 0x38, 0xF8, 0xD6, 0x7E, 0xC7, 0x7C, 0x44, 0x08, 0x4A, 0x14, + 0xA0, 0x84, 0x7C, 0x8B, 0x88, 0x40, 0x93, 0x89, 0xAE, 0x2C, + 0x20, 0x07, 0x80, 0xEC, 0xCE, 0x4C, 0x2C, 0x4E, 0x49, 0x79, + 0x53, 0xE7, 0xDE, 0xA2, 0x9E, 0x67, 0x21, 0x53, 0x7C, 0x85, + 0xE7, 0x6F, 0xBD, 0x93, 0xAB, 0x63, 0xBA, 0xF0, 0xBD, 0xEA, + 0x39, 0x16, 0x47, 0xBF, 0xE6, 0x0C, 0xCB, 0x63, 0xC7, 0xC5, + 0xF1, 0xDC, 0x5A, 0x52, 0xCD, 0x4C, 0x53, 0x8B, 0x7E, 0xB1, + 0xC3, 0x4E, 0xE7, 0x61, 0x25, 0x01, 0xEC, 0xAE, 0x06, 0x74, + 0x9F, 0xBC, 0xBB, 0x2A, 0x47, 0x46, 0xE8, 0xAE, 0xF2, 0xAB, + 0x15, 0xED, 0xA6, 0x86, 0x8F, 0x2F, 0xE5, 0x67, 0x0F, 0xDD, + 0xBF, 0x70, 0x53, 0xAA, 0x9B, 0x74 }; -#define sizeof_bench_dilithium_level5_key (sizeof(bench_dilithium_level5_key)) - +#define sizeof_bench_mldsa_87_key (sizeof(bench_mldsa_87_key)) #endif /* !WOLFSSL_MLDSA_NO_SIGN */ #ifndef WOLFSSL_MLDSA_NO_VERIFY - -/* raw public key without ASN1 syntax from - * ./certs/dilithium/bench_dilithium_level5_key.der */ -static const unsigned char bench_dilithium_level5_pubkey[] = { - 0xef, 0x49, 0x79, 0x47, 0x15, 0xc4, 0x8a, 0xa9, 0x74, 0x2a, - 0xf0, 0x36, 0x94, 0x5c, 0x91, 0x1c, 0x5d, 0xff, 0x2c, 0x83, - 0xf2, 0x8b, 0x04, 0xfc, 0x5d, 0x64, 0xbd, 0x49, 0x73, 0xcd, - 0xcc, 0x99, 0x50, 0x5f, 0x2b, 0x16, 0x3a, 0xbb, 0x98, 0xc0, - 0xa7, 0x69, 0x0e, 0x95, 0x99, 0x0b, 0xa2, 0x6c, 0xfe, 0x6c, - 0xdb, 0xc8, 0xa7, 0x09, 0x46, 0x6c, 0x90, 0x50, 0xa4, 0x75, - 0x30, 0xf7, 0x90, 0xac, 0x31, 0xb6, 0xdd, 0x21, 0xaf, 0xc6, - 0xf9, 0xfe, 0xee, 0xc6, 0x5b, 0xa8, 0x8f, 0x0a, 0x2e, 0xd0, - 0x42, 0xab, 0xa8, 0x3c, 0x8d, 0xbf, 0xf7, 0x44, 0xbd, 0x0d, - 0xcf, 0xf4, 0x68, 0xfc, 0x16, 0x67, 0xf7, 0x39, 0x48, 0x5f, - 0x56, 0xd1, 0xe7, 0x1f, 0x49, 0x80, 0x50, 0xbe, 0x54, 0xd1, - 0xb7, 0xc9, 0xd2, 0x32, 0xc7, 0x08, 0x8c, 0xde, 0x2c, 0x31, - 0xf6, 0x1d, 0xc7, 0xac, 0xb3, 0x79, 0xd7, 0x4b, 0x1b, 0x23, - 0x89, 0x0a, 0xdc, 0x8e, 0x44, 0x41, 0x14, 0x28, 0x99, 0x13, - 0xb3, 0x26, 0xa6, 0x0e, 0x83, 0x60, 0xaa, 0x8d, 0x7c, 0x23, - 0x13, 0xba, 0x6c, 0x28, 0x90, 0x56, 0x84, 0xa1, 0x23, 0x8b, - 0x81, 0x20, 0x97, 0x7c, 0x66, 0x3f, 0xed, 0x5d, 0xd0, 0xe4, - 0x5d, 0xee, 0x46, 0xbc, 0x4b, 0x3c, 0x03, 0xb5, 0xbc, 0x4d, - 0x8d, 0x37, 0xa3, 0x56, 0x4b, 0x33, 0xad, 0xef, 0xd4, 0xb6, - 0xec, 0xdb, 0x04, 0x9a, 0x19, 0x58, 0x57, 0xd8, 0x00, 0x3a, - 0x92, 0x61, 0x0c, 0x0b, 0xc8, 0x52, 0xe5, 0x04, 0x02, 0x9a, - 0x00, 0x7e, 0xec, 0x7e, 0x94, 0xaa, 0xef, 0x2d, 0x7f, 0xb6, - 0x2e, 0x7c, 0xb0, 0x73, 0xa2, 0x20, 0xc0, 0x07, 0x30, 0x41, - 0x50, 0x20, 0x14, 0x18, 0x21, 0x5e, 0x2a, 0x6f, 0x70, 0x21, - 0xd6, 0x97, 0x13, 0xb9, 0xc1, 0x9e, 0x90, 0x67, 0xcc, 0x55, - 0x8a, 0xec, 0xec, 0x0a, 0x1e, 0x90, 0xdc, 0x3f, 0xb0, 0x4d, - 0xd1, 0x18, 0xea, 0x4f, 0xcb, 0x5d, 0x15, 0x4c, 0xb8, 0x35, - 0x9b, 0x34, 0x24, 0x30, 0x06, 0x53, 0x17, 0xf0, 0xbe, 0x27, - 0x36, 0xb3, 0x04, 0x6a, 0xbd, 0xbf, 0xa7, 0x39, 0xee, 0xa9, - 0x8f, 0x0e, 0x98, 0xc5, 0xf5, 0x9f, 0x46, 0x25, 0x93, 0xc9, - 0xf2, 0xf6, 0x2b, 0x8e, 0x92, 0x06, 0x01, 0x3d, 0x81, 0x18, - 0xf2, 0xec, 0xf1, 0x05, 0x4c, 0xad, 0x4b, 0xcb, 0x98, 0xa4, - 0xb5, 0x61, 0x20, 0xda, 0x81, 0xa1, 0xfb, 0x92, 0x4c, 0xaf, - 0x87, 0x6f, 0x6e, 0xd2, 0x57, 0xec, 0xcd, 0x94, 0xb3, 0x79, - 0xbf, 0x59, 0x88, 0x17, 0x81, 0xce, 0x8a, 0x57, 0xce, 0x57, - 0xae, 0x3e, 0x82, 0x81, 0x2f, 0x83, 0x61, 0xd8, 0xf9, 0x68, - 0x21, 0xe7, 0x72, 0x5b, 0xd6, 0x80, 0x55, 0x68, 0x5d, 0x67, - 0x15, 0x0c, 0x8b, 0xdc, 0x4f, 0xc3, 0x89, 0x36, 0x3c, 0xac, - 0xaf, 0x16, 0x5e, 0x1c, 0xfa, 0x68, 0x74, 0x6a, 0xab, 0x68, - 0xd8, 0x59, 0x96, 0x2d, 0x33, 0x62, 0xe4, 0xbd, 0xb3, 0xb7, - 0x4d, 0x88, 0x35, 0xb8, 0xed, 0xb2, 0x16, 0x85, 0x97, 0x08, - 0x71, 0x71, 0x39, 0x7e, 0x0c, 0x53, 0x16, 0xda, 0x38, 0xe5, - 0x28, 0x09, 0x9c, 0xd9, 0x46, 0xec, 0x68, 0xda, 0x8d, 0xd0, - 0xad, 0xb2, 0x79, 0x28, 0x3b, 0x1e, 0x12, 0xc9, 0xdf, 0xa9, - 0x6d, 0x3d, 0x29, 0x99, 0x2f, 0x53, 0xc2, 0xd0, 0xf9, 0x88, - 0x26, 0x94, 0x47, 0xaf, 0xf6, 0x96, 0xf3, 0xe1, 0x11, 0xa6, - 0x82, 0x3d, 0x43, 0x3f, 0x1f, 0xbc, 0xf6, 0x98, 0xbe, 0xff, - 0x06, 0x86, 0x61, 0x27, 0xdc, 0x91, 0x54, 0xd4, 0xfc, 0x68, - 0x83, 0xe8, 0x35, 0x3e, 0xee, 0x94, 0x59, 0x28, 0x2f, 0xde, - 0xdd, 0x03, 0x60, 0x66, 0xc1, 0x49, 0x57, 0xdd, 0xbc, 0xd5, - 0x0a, 0x67, 0x34, 0xf1, 0xa6, 0x0a, 0x57, 0x94, 0x65, 0x02, - 0x2c, 0x52, 0x43, 0x70, 0x3b, 0xc1, 0x9a, 0xff, 0xda, 0x6f, - 0xb9, 0x54, 0x47, 0x01, 0xda, 0x27, 0xe4, 0x48, 0x4a, 0x90, - 0x9f, 0xb5, 0xc3, 0xee, 0x0e, 0x09, 0x57, 0xfe, 0x48, 0x51, - 0x08, 0x34, 0x5e, 0x8f, 0x16, 0xc9, 0x0b, 0x74, 0xd9, 0x7d, - 0x22, 0x3f, 0xd6, 0xb7, 0x5d, 0xd6, 0x76, 0x00, 0x8d, 0x4e, - 0x78, 0x73, 0x86, 0xd6, 0xdb, 0x2a, 0x65, 0xab, 0xdf, 0xb0, - 0xea, 0x11, 0xad, 0xdf, 0xba, 0x43, 0xdb, 0xa8, 0x0a, 0xfb, - 0x04, 0x38, 0x81, 0x2b, 0xa3, 0x29, 0xfc, 0x95, 0x73, 0x9a, - 0x0c, 0x6c, 0x9e, 0xcd, 0xdc, 0xcf, 0x0a, 0x0c, 0x18, 0x41, - 0x6f, 0x1d, 0xa3, 0xf6, 0x12, 0x4c, 0x13, 0xf2, 0x02, 0xc6, - 0x50, 0x99, 0x86, 0x73, 0xa7, 0xf9, 0x7e, 0x84, 0x7f, 0x4c, - 0x00, 0xce, 0x2e, 0x21, 0x76, 0x8e, 0x17, 0x7a, 0x87, 0x6f, - 0x81, 0xe6, 0xc0, 0x52, 0xa5, 0xa0, 0x3c, 0x54, 0x3c, 0xec, - 0xb0, 0x9d, 0x1c, 0x3b, 0xec, 0xe5, 0x4e, 0x4a, 0x37, 0xe7, - 0xd5, 0xa9, 0x07, 0x87, 0x23, 0x28, 0x5d, 0x3d, 0x22, 0x02, - 0x79, 0x40, 0x3f, 0x2d, 0x40, 0xc9, 0xe5, 0xa6, 0x9b, 0xa8, - 0xb8, 0x76, 0xf6, 0x77, 0x5b, 0x8d, 0x72, 0x96, 0x3e, 0x13, - 0xbf, 0x76, 0xfa, 0x7b, 0xb7, 0x82, 0x5f, 0xe7, 0x9d, 0x54, - 0x0e, 0x05, 0x1a, 0x9f, 0xa4, 0x42, 0xa5, 0xb4, 0x93, 0x23, - 0x06, 0x59, 0x43, 0xa8, 0xe8, 0x5c, 0xfc, 0x18, 0x97, 0xdb, - 0xad, 0x9a, 0x80, 0x0a, 0xf2, 0x20, 0x50, 0xac, 0xc1, 0x13, - 0x3e, 0x98, 0x09, 0xde, 0xf2, 0x70, 0x9e, 0x14, 0xc2, 0x5c, - 0xec, 0x65, 0x07, 0x0b, 0xfa, 0x02, 0x5c, 0xf8, 0x71, 0xaa, - 0x9b, 0x45, 0x62, 0xe2, 0x27, 0xaf, 0x77, 0xf8, 0xe3, 0xeb, - 0x7b, 0x24, 0x7b, 0x3c, 0x67, 0xc2, 0x6d, 0x6e, 0x17, 0xae, - 0x6e, 0x86, 0x6f, 0x98, 0xc9, 0xac, 0x13, 0x9f, 0x87, 0x64, - 0x3d, 0x4d, 0x6f, 0xa0, 0xb3, 0x39, 0xc6, 0x68, 0x1b, 0xa7, - 0xeb, 0x3e, 0x0f, 0x6b, 0xc7, 0xa4, 0xe2, 0x20, 0x27, 0x75, - 0x3f, 0x09, 0x16, 0xff, 0x1a, 0xcc, 0xa7, 0xc4, 0x6d, 0xc2, - 0xfc, 0xc3, 0x0b, 0x37, 0x63, 0xff, 0x9b, 0x10, 0xe6, 0x00, - 0xf7, 0x18, 0x43, 0x9f, 0x07, 0x50, 0x31, 0x51, 0xd4, 0xfd, - 0xad, 0xa2, 0x0f, 0x77, 0xda, 0x41, 0xc1, 0x0a, 0x6f, 0x86, - 0xd7, 0xdc, 0x8a, 0x52, 0xd6, 0xa1, 0x27, 0xdb, 0x14, 0x67, - 0x26, 0x91, 0xb3, 0xcd, 0x01, 0x5f, 0x60, 0xa1, 0x7f, 0x43, - 0x15, 0x1a, 0x82, 0x0f, 0xd3, 0x66, 0x5f, 0x60, 0x57, 0x2f, - 0xb2, 0x8c, 0x27, 0x2a, 0x9d, 0x1b, 0xf9, 0xf2, 0x59, 0x20, - 0x39, 0xd9, 0xc5, 0xaf, 0xf2, 0x36, 0x8c, 0x58, 0x00, 0x1b, - 0xd0, 0xc5, 0x8e, 0x1a, 0x49, 0xa8, 0x60, 0xbe, 0xd1, 0xd7, - 0x2a, 0xb0, 0xc2, 0xab, 0x58, 0x8a, 0x7a, 0xa9, 0x41, 0x68, - 0x70, 0xbd, 0xea, 0x73, 0xa5, 0x03, 0x11, 0xb2, 0x27, 0xd9, - 0xcd, 0xf5, 0x09, 0xe8, 0x1c, 0xe2, 0x4f, 0x50, 0x6a, 0x84, - 0x34, 0x62, 0x2e, 0x36, 0xaa, 0x4c, 0xc1, 0x83, 0x78, 0x98, - 0x35, 0x7a, 0x27, 0x7e, 0xfe, 0xf1, 0x6f, 0x59, 0x27, 0x35, - 0x73, 0xce, 0x74, 0xaa, 0xb4, 0x72, 0x82, 0xa8, 0xe2, 0x81, - 0x7a, 0x6b, 0xca, 0x33, 0xa5, 0xda, 0xa2, 0x63, 0xca, 0x2e, - 0x90, 0x03, 0x32, 0xec, 0x63, 0xdb, 0x52, 0x7b, 0x16, 0xfc, - 0x01, 0x2d, 0x30, 0x12, 0x1e, 0xf9, 0xa3, 0x72, 0x21, 0x3c, - 0x75, 0x0c, 0x61, 0x9c, 0x7e, 0x73, 0x04, 0x71, 0x41, 0x45, - 0x5d, 0x7f, 0x49, 0x1c, 0x09, 0x08, 0xa4, 0xec, 0x2f, 0xfd, - 0xc4, 0xfb, 0x59, 0x6a, 0x27, 0x7a, 0xd4, 0xfc, 0x5f, 0x20, - 0x04, 0x34, 0x7d, 0x08, 0xed, 0x82, 0x5a, 0x90, 0xe1, 0xab, - 0xfd, 0x35, 0x3a, 0x8d, 0xbb, 0x0a, 0x9d, 0x73, 0xff, 0x69, - 0xe5, 0xe9, 0x09, 0x55, 0x14, 0xd9, 0x7b, 0x6f, 0x0d, 0x99, - 0xd2, 0x7e, 0x71, 0xf8, 0x4f, 0x72, 0x2f, 0xbb, 0xc6, 0xc4, - 0x36, 0xc9, 0x01, 0xd3, 0x9b, 0x94, 0xab, 0x41, 0x0f, 0x4a, - 0x61, 0x5c, 0x68, 0xe5, 0xd7, 0x0d, 0x94, 0xaa, 0xee, 0xba, - 0x95, 0xcb, 0x8c, 0x0e, 0x85, 0x3a, 0x02, 0x6b, 0x95, 0x50, - 0xfd, 0x02, 0xfd, 0xa4, 0x58, 0x29, 0x78, 0x4f, 0xd0, 0xae, - 0x66, 0xd6, 0x5c, 0xe7, 0x45, 0xfe, 0x98, 0xb0, 0xa3, 0xe2, - 0x87, 0xc0, 0xd2, 0x81, 0x08, 0xf1, 0xf1, 0xe7, 0xda, 0x62, - 0x9e, 0xa0, 0x34, 0x86, 0xeb, 0xa1, 0x6e, 0x4a, 0x26, 0x8e, - 0x39, 0x0c, 0x51, 0x10, 0x33, 0x11, 0x87, 0xf8, 0x79, 0x3c, - 0x49, 0x7a, 0x8b, 0xce, 0xc1, 0x0a, 0x0e, 0xe1, 0xd5, 0x2a, - 0xac, 0xf0, 0x3a, 0x1d, 0x6a, 0x6a, 0xe5, 0xe1, 0x81, 0x70, - 0xad, 0xaf, 0x15, 0x4c, 0x2a, 0x70, 0x2a, 0x6b, 0x22, 0x0d, - 0x30, 0xe7, 0x56, 0xed, 0x2d, 0x4b, 0x85, 0x17, 0x49, 0x72, - 0x3a, 0x1b, 0x6f, 0x57, 0x1c, 0xf7, 0x72, 0x9e, 0x20, 0xdb, - 0x57, 0x1c, 0xfb, 0x36, 0x50, 0x52, 0xec, 0x5b, 0xd6, 0x6a, - 0x1b, 0xf8, 0x74, 0xad, 0xe6, 0x00, 0x74, 0x04, 0xc5, 0x99, - 0x83, 0xe4, 0x5a, 0x0c, 0xc3, 0xe8, 0x6d, 0x3a, 0xd7, 0x3c, - 0x3c, 0xc0, 0x1a, 0x28, 0xb3, 0x29, 0x7a, 0x10, 0x9e, 0x39, - 0x66, 0x5b, 0xc1, 0x38, 0xac, 0x21, 0x4e, 0xcd, 0x01, 0xf2, - 0xf6, 0x30, 0x2c, 0x2b, 0xb6, 0xbf, 0xf5, 0xea, 0x61, 0xaf, - 0x0c, 0xa6, 0x01, 0x11, 0x15, 0x19, 0x09, 0x8c, 0x7e, 0x69, - 0xdf, 0x3b, 0xea, 0xd3, 0x0a, 0x3a, 0xd7, 0xbd, 0xe1, 0x17, - 0xaf, 0x92, 0x3c, 0xf5, 0xfe, 0x35, 0xd6, 0xcf, 0x07, 0xa6, - 0xf7, 0xe9, 0xc1, 0x99, 0xed, 0x80, 0xe3, 0x12, 0xd5, 0x4b, - 0xb9, 0xdf, 0xaf, 0x4e, 0x52, 0xad, 0x8e, 0x66, 0x87, 0xe5, - 0x2c, 0xd0, 0x45, 0x70, 0xd9, 0x78, 0x8f, 0x4b, 0xf4, 0xe1, - 0xf1, 0x22, 0xf2, 0xe3, 0xed, 0x1f, 0xeb, 0xe9, 0x70, 0x31, - 0x4c, 0x65, 0x5f, 0x55, 0xee, 0x5d, 0xaa, 0x83, 0x87, 0x76, - 0xbe, 0x11, 0xae, 0xd7, 0xf2, 0xfb, 0x43, 0xe7, 0x17, 0x81, - 0x33, 0x15, 0x47, 0xa0, 0xf3, 0x8e, 0x84, 0x57, 0xff, 0x35, - 0x9e, 0x4a, 0x8a, 0xab, 0x50, 0x3a, 0x45, 0xe0, 0xc3, 0x73, - 0xca, 0x77, 0x61, 0x68, 0x38, 0xd0, 0xa3, 0x5f, 0x03, 0x8d, - 0x41, 0xc2, 0xd3, 0x4a, 0x17, 0xe0, 0xa8, 0xaa, 0x00, 0xf3, - 0xf2, 0x5b, 0xa8, 0xe1, 0x06, 0xa6, 0x2b, 0xdb, 0xe1, 0x74, - 0xbd, 0xc4, 0xd2, 0x2b, 0x55, 0x9a, 0xb0, 0xf8, 0x35, 0xd8, - 0x6b, 0xec, 0xdb, 0xc5, 0xf4, 0x6c, 0x40, 0x90, 0x6a, 0x68, - 0xc9, 0xb5, 0xcb, 0xbb, 0xd0, 0xb0, 0xbc, 0x9f, 0xb9, 0xaa, - 0x50, 0x14, 0x93, 0x3b, 0x9f, 0x25, 0xcb, 0x40, 0xb8, 0x08, - 0xcc, 0x13, 0xe5, 0xdc, 0x3f, 0x84, 0x96, 0xe0, 0x73, 0x7b, - 0x7d, 0x9e, 0x41, 0x92, 0x5d, 0xcc, 0xa4, 0xea, 0x4f, 0x93, - 0x0c, 0x40, 0x2e, 0x42, 0x8a, 0xe9, 0xb9, 0x12, 0x74, 0xbb, - 0x79, 0x7c, 0xb0, 0x37, 0x20, 0xb6, 0xaf, 0x43, 0x3a, 0x88, - 0x59, 0x7c, 0x68, 0x28, 0x5f, 0x98, 0xc2, 0xf0, 0x2a, 0xbc, - 0xa1, 0x61, 0x88, 0x1f, 0x43, 0xbc, 0x42, 0x8f, 0x43, 0xf3, - 0x7e, 0x16, 0x96, 0xfa, 0x92, 0x70, 0xaf, 0x3c, 0x9f, 0x4b, - 0xd9, 0x60, 0xe9, 0xf6, 0x2e, 0x84, 0xda, 0x88, 0x31, 0x34, - 0xa6, 0x85, 0x10, 0x05, 0xef, 0x40, 0xa8, 0xa5, 0x4f, 0x92, - 0x59, 0xf7, 0xe0, 0xc4, 0x2b, 0x12, 0x17, 0x71, 0xbe, 0x8c, - 0x4a, 0x02, 0xfe, 0x12, 0xb6, 0x3b, 0x85, 0x75, 0x37, 0xf3, - 0x73, 0x2d, 0x9c, 0x00, 0x5d, 0x80, 0xad, 0x20, 0x2f, 0x5a, - 0x0b, 0x17, 0x7e, 0x67, 0x72, 0x24, 0x5a, 0xb9, 0xf3, 0xb1, - 0x33, 0xa4, 0x57, 0x1d, 0x49, 0x72, 0x2c, 0x7f, 0x47, 0x15, - 0x07, 0xe0, 0x45, 0x14, 0xdd, 0x77, 0x86, 0x6d, 0x03, 0xbe, - 0x57, 0xd0, 0xaa, 0x18, 0xa6, 0xdd, 0x94, 0x18, 0x3f, 0x8a, - 0xf3, 0xb5, 0xd7, 0x5a, 0xec, 0xc8, 0x79, 0x7f, 0x51, 0x61, - 0x3c, 0x9b, 0xb2, 0x9b, 0xf3, 0xb4, 0x35, 0xd1, 0x38, 0xbf, - 0x37, 0xce, 0x54, 0xd1, 0xf8, 0xb6, 0x45, 0xeb, 0x52, 0x0d, - 0x9a, 0x09, 0x58, 0x0d, 0x2c, 0x0b, 0xb1, 0xf2, 0x30, 0x3a, - 0x95, 0xc1, 0x13, 0x91, 0xd2, 0x9f, 0x8d, 0x8d, 0xd0, 0x38, - 0x3e, 0x4c, 0xae, 0x4a, 0x55, 0xa7, 0x42, 0x11, 0x83, 0xc4, - 0x70, 0xf0, 0x2b, 0x68, 0x9e, 0x07, 0xad, 0xb7, 0x83, 0xc6, - 0x53, 0x3c, 0xfb, 0x0a, 0x5d, 0x24, 0xdc, 0xe1, 0x55, 0x72, - 0xcf, 0xce, 0x3e, 0xc8, 0xd0, 0x57, 0x8a, 0x82, 0x5e, 0x78, - 0x2b, 0x80, 0xc5, 0xb9, 0x09, 0x46, 0xf8, 0x90, 0x39, 0x52, - 0xa9, 0xce, 0x3f, 0x3d, 0x41, 0x3b, 0x28, 0x45, 0xa3, 0xb3, - 0x21, 0xc2, 0xcd, 0x14, 0x49, 0x41, 0x6c, 0x38, 0xda, 0x1b, - 0x5f, 0x16, 0x49, 0xf9, 0x65, 0x00, 0x4e, 0xb4, 0x20, 0x55, - 0x70, 0xe8, 0x58, 0x1a, 0x18, 0xbf, 0x41, 0xef, 0x31, 0xb1, - 0xe7, 0x8d, 0x89, 0xc1, 0x48, 0xe8, 0xf5, 0x57, 0x35, 0xfa, - 0xc1, 0x79, 0xee, 0x2c, 0xe8, 0x7d, 0xb6, 0x03, 0xcc, 0x66, - 0x09, 0x6f, 0x52, 0x84, 0x0a, 0x34, 0x18, 0x2c, 0x01, 0x45, - 0x81, 0x00, 0xe5, 0x5e, 0x8d, 0xae, 0x1c, 0x96, 0x8b, 0x45, - 0x73, 0x00, 0x0a, 0xb5, 0xcf, 0x8d, 0x0e, 0x35, 0x5d, 0x1a, - 0x0e, 0xbf, 0x64, 0x9a, 0x52, 0x20, 0x48, 0xc6, 0xb9, 0x40, - 0xd3, 0x2c, 0x52, 0xca, 0x93, 0xcf, 0xbb, 0x94, 0x06, 0xf3, - 0x97, 0xee, 0xcc, 0x5d, 0xa3, 0xea, 0xf8, 0x5a, 0x39, 0x77, - 0x34, 0xd7, 0xf6, 0x4e, 0xbe, 0x8a, 0x07, 0x5f, 0x51, 0x53, - 0xc5, 0x1b, 0x8c, 0x47, 0x8f, 0x34, 0x0e, 0x60, 0x0a, 0x90, - 0xe2, 0xda, 0x7b, 0xef, 0xd6, 0xf5, 0x5d, 0xe5, 0x32, 0x37, - 0x75, 0x99, 0x81, 0x4a, 0x2a, 0x78, 0x71, 0xdc, 0xf4, 0xe5, - 0xca, 0xd8, 0x6b, 0x3b, 0x90, 0x68, 0x2e, 0x93, 0xc5, 0x10, - 0x42, 0x5d, 0x38, 0x90, 0x32, 0x46, 0xea, 0x87, 0xe0, 0xbc, - 0xb8, 0x9a, 0x18, 0x20, 0x68, 0x85, 0x6d, 0x9b, 0xc9, 0x8f, - 0x9b, 0xd2, 0xbe, 0x15, 0x12, 0x68, 0xd0, 0xb0, 0x16, 0x5f, - 0xe2, 0x69, 0x1d, 0x04, 0x00, 0xfc, 0x63, 0x33, 0xcd, 0x1f, - 0x89, 0xcd, 0x52, 0xff, 0xec, 0x19, 0x69, 0x74, 0xa3, 0xce, - 0x4d, 0xab, 0x93, 0xe4, 0xc6, 0x13, 0x56, 0x27, 0xc9, 0x25, - 0x5a, 0x01, 0xb2, 0x36, 0x8b, 0x61, 0xe5, 0x8b, 0x98, 0xac, - 0xe4, 0x2a, 0xb6, 0x40, 0x9f, 0x42, 0xe4, 0x1b, 0x52, 0xf7, - 0xfd, 0xd8, 0x30, 0x07, 0x33, 0xf9, 0x47, 0xcb, 0x3c, 0xad, - 0x12, 0xc1, 0xcc, 0x29, 0x62, 0x49, 0x04, 0x0c, 0x23, 0x97, - 0x5a, 0xa4, 0x84, 0x67, 0xde, 0x5a, 0xe5, 0x36, 0xd2, 0x88, - 0xf1, 0xd4, 0xeb, 0x13, 0x81, 0x54, 0x51, 0x11, 0xe3, 0xba, - 0xbc, 0xee, 0xdd, 0x6c, 0xcd, 0xe6, 0xb4, 0xa1, 0x8b, 0x0b, - 0x66, 0xfb, 0x8e, 0x50, 0xa0, 0xda, 0x69, 0x8d, 0xcc, 0x2d, - 0xe4, 0x2c, 0xc4, 0x37, 0xdf, 0x61, 0xc0, 0x03, 0xbd, 0x8b, - 0x28, 0xca, 0xd2, 0x8c, 0x1c, 0xf1, 0xa4, 0x26, 0x69, 0xe5, - 0xcf, 0x45, 0xdb, 0x5a, 0x47, 0x79, 0xed, 0x9f, 0xf7, 0xd2, - 0xdb, 0xba, 0x46, 0x53, 0x4f, 0xce, 0xa8, 0xbe, 0x8f, 0x4a, - 0xd6, 0xdf, 0x2e, 0x06, 0xe6, 0x4c, 0x9a, 0xc1, 0xb6, 0x49, - 0xed, 0xc4, 0xeb, 0xaa, 0xa4, 0x29, 0x6d, 0xd4, 0xcc, 0x8c, - 0xb6, 0x40, 0x11, 0x39, 0x69, 0xf7, 0x75, 0xcd, 0xb1, 0x99, - 0x46, 0x4e, 0xde, 0xcb, 0xf6, 0x9d, 0x32, 0xf3, 0xc9, 0x47, - 0x47, 0x7a, 0xcb, 0xfb, 0xa3, 0x0c, 0x3b, 0xdf, 0xb7, 0xde, - 0xec, 0x99, 0xde, 0xb0, 0x26, 0x04, 0x34, 0xae, 0x6b, 0xfc, - 0x99, 0xbc, 0xde, 0xd5, 0xbe, 0xe7, 0xeb, 0xf9, 0xe7, 0xa6, - 0x01, 0x9a, 0x0c, 0x5e, 0x66, 0xe6, 0x53, 0xe4, 0xd1, 0x58, - 0xac, 0xda, 0x69, 0x77, 0x7b, 0x68, 0xd6, 0x30, 0x2a, 0x9c, - 0x6b, 0xbe, 0x9f, 0x3d, 0x71, 0xd6, 0x54, 0xcd, 0x59, 0x4e, - 0x1f, 0xe3, 0x83, 0x4e, 0xd1, 0x8e, 0xaf, 0x97, 0xa8, 0xe5, - 0xb6, 0x59, 0x77, 0xa8, 0x02, 0x20, 0xe4, 0xeb, 0x44, 0x71, - 0xbc, 0x07, 0x14, 0x79, 0x4f, 0x0c, 0x27, 0x06, 0x39, 0xcf, - 0x7c, 0xef, 0x2b, 0x9b, 0x5e, 0xc4, 0x6d, 0x79, 0x13, 0x00, - 0x43, 0x6f, 0x51, 0x77, 0xb5, 0xc3, 0x72, 0xad, 0x13, 0xa9, - 0xe5, 0x9a, 0x5b, 0x1a, 0x99, 0x74, 0xc0, 0x7a, 0xf9, 0xc5, - 0xb0, 0x58, 0x35, 0x1c, 0xa5, 0x51, 0xdb, 0xa1, 0x14, 0xcd, - 0x26, 0x71, 0xb1, 0xe7, 0xaa, 0x14, 0xa7, 0x46, 0x93, 0xd3, - 0x5c, 0x8c, 0x1a, 0x91, 0x77, 0x46, 0x2e, 0x15, 0xaa, 0x9e, - 0xf7, 0x2b, 0x79, 0x41, 0x76, 0xf7, 0x22, 0x53, 0x7d, 0x51, - 0xdb, 0x98, 0x3d, 0x5b, 0x78, 0x5f, 0xc3, 0xc9, 0x29, 0xa3, - 0xff, 0x75, 0x82, 0x06, 0x9a, 0x16, 0x5e, 0xa4, 0x79, 0x0d, - 0xd1, 0x6d, 0x08, 0xff, 0x43, 0xef, 0x9c, 0xf3, 0x1b, 0x7a, - 0x3f, 0x34, 0xbe, 0x19, 0x15, 0x06, 0x33, 0xdb, 0xa5, 0x71, - 0xcb, 0x5f, 0x6b, 0x8d, 0xbd, 0x5b, 0x32, 0x91, 0xb2, 0x37, - 0x3d, 0xb4, 0x40, 0x9e, 0x02, 0x9b, 0xb7, 0x68, 0x20, 0x58, - 0x5c, 0xab, 0xcb, 0xc8, 0x23, 0x2d, 0x77, 0xcc, 0x0b, 0xf6, - 0x78, 0x6b, 0x80, 0x06, 0x91, 0xa9, 0xfd, 0x7e, 0xfa, 0x25, - 0x98, 0x9f, 0xcc, 0x79, 0x0a, 0x1a, 0x54, 0x83, 0xac, 0x64, - 0x16, 0x90, 0xe5, 0xd9, 0xa7, 0xd7, 0x1b, 0x86, 0x0d, 0xe6, - 0xe6, 0x22, 0x2b, 0x1f, 0x44, 0x49, 0x98, 0x9c, 0x51, 0x6f, - 0xcf, 0x58, 0x4a, 0xfa, 0xfa, 0x84, 0x12, 0xa5, 0x10, 0xf4, - 0xca, 0xf0, 0x98, 0x2b, 0xc9, 0x03, 0x71, 0x37, 0xe7, 0xdc, - 0xc2, 0xb1, 0x4e, 0x64, 0xde, 0x4f, 0x46, 0x0d, 0x6b, 0x25, - 0x88, 0x5d, 0xd6, 0xff, 0x23, 0x46, 0x57, 0x36, 0x14, 0x18, - 0xa7, 0xcb, 0xb8, 0xbd, 0xf0, 0xc5, 0x37, 0x36, 0xee, 0xe1, - 0xed, 0x9f, 0x4d, 0xd4, 0x39, 0xe5, 0x92, 0xcf, 0x95, 0x4d, - 0x66, 0x36, 0x5d, 0xd0, 0xcc, 0x07, 0xcf, 0x15, 0x5a, 0xce, - 0x14, 0xb8, 0xda, 0x0d, 0x3d, 0x1b, 0x45, 0xc5, 0x2e, 0x34, - 0x43, 0x25, 0x02, 0x3a, 0xcd, 0x14, 0x45, 0xfb, 0x3e, 0xf9, - 0x88, 0x5d, 0x0d, 0x29, 0x31, 0xb9, 0xa1, 0xe6, 0x31, 0x18, - 0x52, 0x46, 0x3f, 0x22, 0x4f, 0x9f, 0x7a, 0x65, 0x36, 0x88, - 0xa3, 0x1c, 0x3e, 0x6f, 0x50, 0x7a, 0x36, 0xbe, 0x56, 0x7e, - 0x50, 0xcb, 0x7a, 0x10, 0xa0, 0xec, 0xf6, 0x82, 0xd6, 0x30, - 0x1c, 0xe8, 0x4c, 0x50, 0xf9, 0x3e, 0xdb, 0xac, 0xbe, 0x4f, - 0x90, 0xb1, 0xd5, 0x1b, 0x12, 0x95, 0xfb, 0xe8, 0x08, 0x64, - 0x56, 0x7c, 0x96, 0xcc, 0x90, 0xb1, 0xbc, 0xa0, 0xf5, 0x32, - 0x69, 0xb3, 0x5f, 0x27, 0x0f, 0xbe, 0xc9, 0xbd, 0xeb, 0xfa, - 0x4b, 0x5c, 0xc5, 0x99, 0x9e, 0x5a, 0x04, 0xcc, 0xd0, 0x4d, - 0x29, 0xe8, 0x84, 0x55, 0x8c, 0xd7, 0xc4, 0x06, 0x13, 0x4d, - 0x92, 0xe5, 0x98, 0x9c, 0x4c, 0xc1, 0xf7, 0xaf, 0x7b, 0xd5, - 0x2b, 0x92, 0x68, 0x68, 0x19, 0x70, 0x4c, 0x9e, 0x46, 0xb8, - 0x34, 0xeb, 0x01, 0x47, 0xbe, 0x59, 0xab, 0x0b, 0x22, 0x25, - 0xe7, 0x56, 0xa8, 0xb4, 0x93, 0x3c, 0xd5, 0x98, 0x9f, 0x61, - 0x2e, 0xfa, 0xcb, 0x5f, 0x5b, 0xd8, 0x09, 0x83, 0xe9, 0x40, - 0xe9, 0x0e, 0x42, 0xdd, 0x17, 0xd7, 0x6e, 0x19, 0x8d, 0x95, - 0x0a, 0x93, +/* ./certs/mldsa/bench_mldsa_87_pubkey.der */ +static const unsigned char bench_mldsa_87_pubkey[] = +{ + 0xEF, 0x49, 0x79, 0x47, 0x15, 0xC4, 0x8A, 0xA9, 0x74, 0x2A, + 0xF0, 0x36, 0x94, 0x5C, 0x91, 0x1C, 0x5D, 0xFF, 0x2C, 0x83, + 0xF2, 0x8B, 0x04, 0xFC, 0x5D, 0x64, 0xBD, 0x49, 0x73, 0xCD, + 0xCC, 0x99, 0x50, 0x5F, 0x2B, 0x16, 0x3A, 0xBB, 0x98, 0xC0, + 0xA7, 0x69, 0x0E, 0x95, 0x99, 0x0B, 0xA2, 0x6C, 0xFE, 0x6C, + 0xDB, 0xC8, 0xA7, 0x09, 0x46, 0x6C, 0x90, 0x50, 0xA4, 0x75, + 0x30, 0xF7, 0x90, 0xAC, 0x31, 0xB6, 0xDD, 0x21, 0xAF, 0xC6, + 0xF9, 0xFE, 0xEE, 0xC6, 0x5B, 0xA8, 0x8F, 0x0A, 0x2E, 0xD0, + 0x42, 0xAB, 0xA8, 0x3C, 0x8D, 0xBF, 0xF7, 0x44, 0xBD, 0x0D, + 0xCF, 0xF4, 0x68, 0xFC, 0x16, 0x67, 0xF7, 0x39, 0x48, 0x5F, + 0x56, 0xD1, 0xE7, 0x1F, 0x49, 0x80, 0x50, 0xBE, 0x54, 0xD1, + 0xB7, 0xC9, 0xD2, 0x32, 0xC7, 0x08, 0x8C, 0xDE, 0x2C, 0x31, + 0xF6, 0x1D, 0xC7, 0xAC, 0xB3, 0x79, 0xD7, 0x4B, 0x1B, 0x23, + 0x89, 0x0A, 0xDC, 0x8E, 0x44, 0x41, 0x14, 0x28, 0x99, 0x13, + 0xB3, 0x26, 0xA6, 0x0E, 0x83, 0x60, 0xAA, 0x8D, 0x7C, 0x23, + 0x13, 0xBA, 0x6C, 0x28, 0x90, 0x56, 0x84, 0xA1, 0x23, 0x8B, + 0x81, 0x20, 0x97, 0x7C, 0x66, 0x3F, 0xED, 0x5D, 0xD0, 0xE4, + 0x5D, 0xEE, 0x46, 0xBC, 0x4B, 0x3C, 0x03, 0xB5, 0xBC, 0x4D, + 0x8D, 0x37, 0xA3, 0x56, 0x4B, 0x33, 0xAD, 0xEF, 0xD4, 0xB6, + 0xEC, 0xDB, 0x04, 0x9A, 0x19, 0x58, 0x57, 0xD8, 0x00, 0x3A, + 0x92, 0x61, 0x0C, 0x0B, 0xC8, 0x52, 0xE5, 0x04, 0x02, 0x9A, + 0x00, 0x7E, 0xEC, 0x7E, 0x94, 0xAA, 0xEF, 0x2D, 0x7F, 0xB6, + 0x2E, 0x7C, 0xB0, 0x73, 0xA2, 0x20, 0xC0, 0x07, 0x30, 0x41, + 0x50, 0x20, 0x14, 0x18, 0x21, 0x5E, 0x2A, 0x6F, 0x70, 0x21, + 0xD6, 0x97, 0x13, 0xB9, 0xC1, 0x9E, 0x90, 0x67, 0xCC, 0x55, + 0x8A, 0xEC, 0xEC, 0x0A, 0x1E, 0x90, 0xDC, 0x3F, 0xB0, 0x4D, + 0xD1, 0x18, 0xEA, 0x4F, 0xCB, 0x5D, 0x15, 0x4C, 0xB8, 0x35, + 0x9B, 0x34, 0x24, 0x30, 0x06, 0x53, 0x17, 0xF0, 0xBE, 0x27, + 0x36, 0xB3, 0x04, 0x6A, 0xBD, 0xBF, 0xA7, 0x39, 0xEE, 0xA9, + 0x8F, 0x0E, 0x98, 0xC5, 0xF5, 0x9F, 0x46, 0x25, 0x93, 0xC9, + 0xF2, 0xF6, 0x2B, 0x8E, 0x92, 0x06, 0x01, 0x3D, 0x81, 0x18, + 0xF2, 0xEC, 0xF1, 0x05, 0x4C, 0xAD, 0x4B, 0xCB, 0x98, 0xA4, + 0xB5, 0x61, 0x20, 0xDA, 0x81, 0xA1, 0xFB, 0x92, 0x4C, 0xAF, + 0x87, 0x6F, 0x6E, 0xD2, 0x57, 0xEC, 0xCD, 0x94, 0xB3, 0x79, + 0xBF, 0x59, 0x88, 0x17, 0x81, 0xCE, 0x8A, 0x57, 0xCE, 0x57, + 0xAE, 0x3E, 0x82, 0x81, 0x2F, 0x83, 0x61, 0xD8, 0xF9, 0x68, + 0x21, 0xE7, 0x72, 0x5B, 0xD6, 0x80, 0x55, 0x68, 0x5D, 0x67, + 0x15, 0x0C, 0x8B, 0xDC, 0x4F, 0xC3, 0x89, 0x36, 0x3C, 0xAC, + 0xAF, 0x16, 0x5E, 0x1C, 0xFA, 0x68, 0x74, 0x6A, 0xAB, 0x68, + 0xD8, 0x59, 0x96, 0x2D, 0x33, 0x62, 0xE4, 0xBD, 0xB3, 0xB7, + 0x4D, 0x88, 0x35, 0xB8, 0xED, 0xB2, 0x16, 0x85, 0x97, 0x08, + 0x71, 0x71, 0x39, 0x7E, 0x0C, 0x53, 0x16, 0xDA, 0x38, 0xE5, + 0x28, 0x09, 0x9C, 0xD9, 0x46, 0xEC, 0x68, 0xDA, 0x8D, 0xD0, + 0xAD, 0xB2, 0x79, 0x28, 0x3B, 0x1E, 0x12, 0xC9, 0xDF, 0xA9, + 0x6D, 0x3D, 0x29, 0x99, 0x2F, 0x53, 0xC2, 0xD0, 0xF9, 0x88, + 0x26, 0x94, 0x47, 0xAF, 0xF6, 0x96, 0xF3, 0xE1, 0x11, 0xA6, + 0x82, 0x3D, 0x43, 0x3F, 0x1F, 0xBC, 0xF6, 0x98, 0xBE, 0xFF, + 0x06, 0x86, 0x61, 0x27, 0xDC, 0x91, 0x54, 0xD4, 0xFC, 0x68, + 0x83, 0xE8, 0x35, 0x3E, 0xEE, 0x94, 0x59, 0x28, 0x2F, 0xDE, + 0xDD, 0x03, 0x60, 0x66, 0xC1, 0x49, 0x57, 0xDD, 0xBC, 0xD5, + 0x0A, 0x67, 0x34, 0xF1, 0xA6, 0x0A, 0x57, 0x94, 0x65, 0x02, + 0x2C, 0x52, 0x43, 0x70, 0x3B, 0xC1, 0x9A, 0xFF, 0xDA, 0x6F, + 0xB9, 0x54, 0x47, 0x01, 0xDA, 0x27, 0xE4, 0x48, 0x4A, 0x90, + 0x9F, 0xB5, 0xC3, 0xEE, 0x0E, 0x09, 0x57, 0xFE, 0x48, 0x51, + 0x08, 0x34, 0x5E, 0x8F, 0x16, 0xC9, 0x0B, 0x74, 0xD9, 0x7D, + 0x22, 0x3F, 0xD6, 0xB7, 0x5D, 0xD6, 0x76, 0x00, 0x8D, 0x4E, + 0x78, 0x73, 0x86, 0xD6, 0xDB, 0x2A, 0x65, 0xAB, 0xDF, 0xB0, + 0xEA, 0x11, 0xAD, 0xDF, 0xBA, 0x43, 0xDB, 0xA8, 0x0A, 0xFB, + 0x04, 0x38, 0x81, 0x2B, 0xA3, 0x29, 0xFC, 0x95, 0x73, 0x9A, + 0x0C, 0x6C, 0x9E, 0xCD, 0xDC, 0xCF, 0x0A, 0x0C, 0x18, 0x41, + 0x6F, 0x1D, 0xA3, 0xF6, 0x12, 0x4C, 0x13, 0xF2, 0x02, 0xC6, + 0x50, 0x99, 0x86, 0x73, 0xA7, 0xF9, 0x7E, 0x84, 0x7F, 0x4C, + 0x00, 0xCE, 0x2E, 0x21, 0x76, 0x8E, 0x17, 0x7A, 0x87, 0x6F, + 0x81, 0xE6, 0xC0, 0x52, 0xA5, 0xA0, 0x3C, 0x54, 0x3C, 0xEC, + 0xB0, 0x9D, 0x1C, 0x3B, 0xEC, 0xE5, 0x4E, 0x4A, 0x37, 0xE7, + 0xD5, 0xA9, 0x07, 0x87, 0x23, 0x28, 0x5D, 0x3D, 0x22, 0x02, + 0x79, 0x40, 0x3F, 0x2D, 0x40, 0xC9, 0xE5, 0xA6, 0x9B, 0xA8, + 0xB8, 0x76, 0xF6, 0x77, 0x5B, 0x8D, 0x72, 0x96, 0x3E, 0x13, + 0xBF, 0x76, 0xFA, 0x7B, 0xB7, 0x82, 0x5F, 0xE7, 0x9D, 0x54, + 0x0E, 0x05, 0x1A, 0x9F, 0xA4, 0x42, 0xA5, 0xB4, 0x93, 0x23, + 0x06, 0x59, 0x43, 0xA8, 0xE8, 0x5C, 0xFC, 0x18, 0x97, 0xDB, + 0xAD, 0x9A, 0x80, 0x0A, 0xF2, 0x20, 0x50, 0xAC, 0xC1, 0x13, + 0x3E, 0x98, 0x09, 0xDE, 0xF2, 0x70, 0x9E, 0x14, 0xC2, 0x5C, + 0xEC, 0x65, 0x07, 0x0B, 0xFA, 0x02, 0x5C, 0xF8, 0x71, 0xAA, + 0x9B, 0x45, 0x62, 0xE2, 0x27, 0xAF, 0x77, 0xF8, 0xE3, 0xEB, + 0x7B, 0x24, 0x7B, 0x3C, 0x67, 0xC2, 0x6D, 0x6E, 0x17, 0xAE, + 0x6E, 0x86, 0x6F, 0x98, 0xC9, 0xAC, 0x13, 0x9F, 0x87, 0x64, + 0x3D, 0x4D, 0x6F, 0xA0, 0xB3, 0x39, 0xC6, 0x68, 0x1B, 0xA7, + 0xEB, 0x3E, 0x0F, 0x6B, 0xC7, 0xA4, 0xE2, 0x20, 0x27, 0x75, + 0x3F, 0x09, 0x16, 0xFF, 0x1A, 0xCC, 0xA7, 0xC4, 0x6D, 0xC2, + 0xFC, 0xC3, 0x0B, 0x37, 0x63, 0xFF, 0x9B, 0x10, 0xE6, 0x00, + 0xF7, 0x18, 0x43, 0x9F, 0x07, 0x50, 0x31, 0x51, 0xD4, 0xFD, + 0xAD, 0xA2, 0x0F, 0x77, 0xDA, 0x41, 0xC1, 0x0A, 0x6F, 0x86, + 0xD7, 0xDC, 0x8A, 0x52, 0xD6, 0xA1, 0x27, 0xDB, 0x14, 0x67, + 0x26, 0x91, 0xB3, 0xCD, 0x01, 0x5F, 0x60, 0xA1, 0x7F, 0x43, + 0x15, 0x1A, 0x82, 0x0F, 0xD3, 0x66, 0x5F, 0x60, 0x57, 0x2F, + 0xB2, 0x8C, 0x27, 0x2A, 0x9D, 0x1B, 0xF9, 0xF2, 0x59, 0x20, + 0x39, 0xD9, 0xC5, 0xAF, 0xF2, 0x36, 0x8C, 0x58, 0x00, 0x1B, + 0xD0, 0xC5, 0x8E, 0x1A, 0x49, 0xA8, 0x60, 0xBE, 0xD1, 0xD7, + 0x2A, 0xB0, 0xC2, 0xAB, 0x58, 0x8A, 0x7A, 0xA9, 0x41, 0x68, + 0x70, 0xBD, 0xEA, 0x73, 0xA5, 0x03, 0x11, 0xB2, 0x27, 0xD9, + 0xCD, 0xF5, 0x09, 0xE8, 0x1C, 0xE2, 0x4F, 0x50, 0x6A, 0x84, + 0x34, 0x62, 0x2E, 0x36, 0xAA, 0x4C, 0xC1, 0x83, 0x78, 0x98, + 0x35, 0x7A, 0x27, 0x7E, 0xFE, 0xF1, 0x6F, 0x59, 0x27, 0x35, + 0x73, 0xCE, 0x74, 0xAA, 0xB4, 0x72, 0x82, 0xA8, 0xE2, 0x81, + 0x7A, 0x6B, 0xCA, 0x33, 0xA5, 0xDA, 0xA2, 0x63, 0xCA, 0x2E, + 0x90, 0x03, 0x32, 0xEC, 0x63, 0xDB, 0x52, 0x7B, 0x16, 0xFC, + 0x01, 0x2D, 0x30, 0x12, 0x1E, 0xF9, 0xA3, 0x72, 0x21, 0x3C, + 0x75, 0x0C, 0x61, 0x9C, 0x7E, 0x73, 0x04, 0x71, 0x41, 0x45, + 0x5D, 0x7F, 0x49, 0x1C, 0x09, 0x08, 0xA4, 0xEC, 0x2F, 0xFD, + 0xC4, 0xFB, 0x59, 0x6A, 0x27, 0x7A, 0xD4, 0xFC, 0x5F, 0x20, + 0x04, 0x34, 0x7D, 0x08, 0xED, 0x82, 0x5A, 0x90, 0xE1, 0xAB, + 0xFD, 0x35, 0x3A, 0x8D, 0xBB, 0x0A, 0x9D, 0x73, 0xFF, 0x69, + 0xE5, 0xE9, 0x09, 0x55, 0x14, 0xD9, 0x7B, 0x6F, 0x0D, 0x99, + 0xD2, 0x7E, 0x71, 0xF8, 0x4F, 0x72, 0x2F, 0xBB, 0xC6, 0xC4, + 0x36, 0xC9, 0x01, 0xD3, 0x9B, 0x94, 0xAB, 0x41, 0x0F, 0x4A, + 0x61, 0x5C, 0x68, 0xE5, 0xD7, 0x0D, 0x94, 0xAA, 0xEE, 0xBA, + 0x95, 0xCB, 0x8C, 0x0E, 0x85, 0x3A, 0x02, 0x6B, 0x95, 0x50, + 0xFD, 0x02, 0xFD, 0xA4, 0x58, 0x29, 0x78, 0x4F, 0xD0, 0xAE, + 0x66, 0xD6, 0x5C, 0xE7, 0x45, 0xFE, 0x98, 0xB0, 0xA3, 0xE2, + 0x87, 0xC0, 0xD2, 0x81, 0x08, 0xF1, 0xF1, 0xE7, 0xDA, 0x62, + 0x9E, 0xA0, 0x34, 0x86, 0xEB, 0xA1, 0x6E, 0x4A, 0x26, 0x8E, + 0x39, 0x0C, 0x51, 0x10, 0x33, 0x11, 0x87, 0xF8, 0x79, 0x3C, + 0x49, 0x7A, 0x8B, 0xCE, 0xC1, 0x0A, 0x0E, 0xE1, 0xD5, 0x2A, + 0xAC, 0xF0, 0x3A, 0x1D, 0x6A, 0x6A, 0xE5, 0xE1, 0x81, 0x70, + 0xAD, 0xAF, 0x15, 0x4C, 0x2A, 0x70, 0x2A, 0x6B, 0x22, 0x0D, + 0x30, 0xE7, 0x56, 0xED, 0x2D, 0x4B, 0x85, 0x17, 0x49, 0x72, + 0x3A, 0x1B, 0x6F, 0x57, 0x1C, 0xF7, 0x72, 0x9E, 0x20, 0xDB, + 0x57, 0x1C, 0xFB, 0x36, 0x50, 0x52, 0xEC, 0x5B, 0xD6, 0x6A, + 0x1B, 0xF8, 0x74, 0xAD, 0xE6, 0x00, 0x74, 0x04, 0xC5, 0x99, + 0x83, 0xE4, 0x5A, 0x0C, 0xC3, 0xE8, 0x6D, 0x3A, 0xD7, 0x3C, + 0x3C, 0xC0, 0x1A, 0x28, 0xB3, 0x29, 0x7A, 0x10, 0x9E, 0x39, + 0x66, 0x5B, 0xC1, 0x38, 0xAC, 0x21, 0x4E, 0xCD, 0x01, 0xF2, + 0xF6, 0x30, 0x2C, 0x2B, 0xB6, 0xBF, 0xF5, 0xEA, 0x61, 0xAF, + 0x0C, 0xA6, 0x01, 0x11, 0x15, 0x19, 0x09, 0x8C, 0x7E, 0x69, + 0xDF, 0x3B, 0xEA, 0xD3, 0x0A, 0x3A, 0xD7, 0xBD, 0xE1, 0x17, + 0xAF, 0x92, 0x3C, 0xF5, 0xFE, 0x35, 0xD6, 0xCF, 0x07, 0xA6, + 0xF7, 0xE9, 0xC1, 0x99, 0xED, 0x80, 0xE3, 0x12, 0xD5, 0x4B, + 0xB9, 0xDF, 0xAF, 0x4E, 0x52, 0xAD, 0x8E, 0x66, 0x87, 0xE5, + 0x2C, 0xD0, 0x45, 0x70, 0xD9, 0x78, 0x8F, 0x4B, 0xF4, 0xE1, + 0xF1, 0x22, 0xF2, 0xE3, 0xED, 0x1F, 0xEB, 0xE9, 0x70, 0x31, + 0x4C, 0x65, 0x5F, 0x55, 0xEE, 0x5D, 0xAA, 0x83, 0x87, 0x76, + 0xBE, 0x11, 0xAE, 0xD7, 0xF2, 0xFB, 0x43, 0xE7, 0x17, 0x81, + 0x33, 0x15, 0x47, 0xA0, 0xF3, 0x8E, 0x84, 0x57, 0xFF, 0x35, + 0x9E, 0x4A, 0x8A, 0xAB, 0x50, 0x3A, 0x45, 0xE0, 0xC3, 0x73, + 0xCA, 0x77, 0x61, 0x68, 0x38, 0xD0, 0xA3, 0x5F, 0x03, 0x8D, + 0x41, 0xC2, 0xD3, 0x4A, 0x17, 0xE0, 0xA8, 0xAA, 0x00, 0xF3, + 0xF2, 0x5B, 0xA8, 0xE1, 0x06, 0xA6, 0x2B, 0xDB, 0xE1, 0x74, + 0xBD, 0xC4, 0xD2, 0x2B, 0x55, 0x9A, 0xB0, 0xF8, 0x35, 0xD8, + 0x6B, 0xEC, 0xDB, 0xC5, 0xF4, 0x6C, 0x40, 0x90, 0x6A, 0x68, + 0xC9, 0xB5, 0xCB, 0xBB, 0xD0, 0xB0, 0xBC, 0x9F, 0xB9, 0xAA, + 0x50, 0x14, 0x93, 0x3B, 0x9F, 0x25, 0xCB, 0x40, 0xB8, 0x08, + 0xCC, 0x13, 0xE5, 0xDC, 0x3F, 0x84, 0x96, 0xE0, 0x73, 0x7B, + 0x7D, 0x9E, 0x41, 0x92, 0x5D, 0xCC, 0xA4, 0xEA, 0x4F, 0x93, + 0x0C, 0x40, 0x2E, 0x42, 0x8A, 0xE9, 0xB9, 0x12, 0x74, 0xBB, + 0x79, 0x7C, 0xB0, 0x37, 0x20, 0xB6, 0xAF, 0x43, 0x3A, 0x88, + 0x59, 0x7C, 0x68, 0x28, 0x5F, 0x98, 0xC2, 0xF0, 0x2A, 0xBC, + 0xA1, 0x61, 0x88, 0x1F, 0x43, 0xBC, 0x42, 0x8F, 0x43, 0xF3, + 0x7E, 0x16, 0x96, 0xFA, 0x92, 0x70, 0xAF, 0x3C, 0x9F, 0x4B, + 0xD9, 0x60, 0xE9, 0xF6, 0x2E, 0x84, 0xDA, 0x88, 0x31, 0x34, + 0xA6, 0x85, 0x10, 0x05, 0xEF, 0x40, 0xA8, 0xA5, 0x4F, 0x92, + 0x59, 0xF7, 0xE0, 0xC4, 0x2B, 0x12, 0x17, 0x71, 0xBE, 0x8C, + 0x4A, 0x02, 0xFE, 0x12, 0xB6, 0x3B, 0x85, 0x75, 0x37, 0xF3, + 0x73, 0x2D, 0x9C, 0x00, 0x5D, 0x80, 0xAD, 0x20, 0x2F, 0x5A, + 0x0B, 0x17, 0x7E, 0x67, 0x72, 0x24, 0x5A, 0xB9, 0xF3, 0xB1, + 0x33, 0xA4, 0x57, 0x1D, 0x49, 0x72, 0x2C, 0x7F, 0x47, 0x15, + 0x07, 0xE0, 0x45, 0x14, 0xDD, 0x77, 0x86, 0x6D, 0x03, 0xBE, + 0x57, 0xD0, 0xAA, 0x18, 0xA6, 0xDD, 0x94, 0x18, 0x3F, 0x8A, + 0xF3, 0xB5, 0xD7, 0x5A, 0xEC, 0xC8, 0x79, 0x7F, 0x51, 0x61, + 0x3C, 0x9B, 0xB2, 0x9B, 0xF3, 0xB4, 0x35, 0xD1, 0x38, 0xBF, + 0x37, 0xCE, 0x54, 0xD1, 0xF8, 0xB6, 0x45, 0xEB, 0x52, 0x0D, + 0x9A, 0x09, 0x58, 0x0D, 0x2C, 0x0B, 0xB1, 0xF2, 0x30, 0x3A, + 0x95, 0xC1, 0x13, 0x91, 0xD2, 0x9F, 0x8D, 0x8D, 0xD0, 0x38, + 0x3E, 0x4C, 0xAE, 0x4A, 0x55, 0xA7, 0x42, 0x11, 0x83, 0xC4, + 0x70, 0xF0, 0x2B, 0x68, 0x9E, 0x07, 0xAD, 0xB7, 0x83, 0xC6, + 0x53, 0x3C, 0xFB, 0x0A, 0x5D, 0x24, 0xDC, 0xE1, 0x55, 0x72, + 0xCF, 0xCE, 0x3E, 0xC8, 0xD0, 0x57, 0x8A, 0x82, 0x5E, 0x78, + 0x2B, 0x80, 0xC5, 0xB9, 0x09, 0x46, 0xF8, 0x90, 0x39, 0x52, + 0xA9, 0xCE, 0x3F, 0x3D, 0x41, 0x3B, 0x28, 0x45, 0xA3, 0xB3, + 0x21, 0xC2, 0xCD, 0x14, 0x49, 0x41, 0x6C, 0x38, 0xDA, 0x1B, + 0x5F, 0x16, 0x49, 0xF9, 0x65, 0x00, 0x4E, 0xB4, 0x20, 0x55, + 0x70, 0xE8, 0x58, 0x1A, 0x18, 0xBF, 0x41, 0xEF, 0x31, 0xB1, + 0xE7, 0x8D, 0x89, 0xC1, 0x48, 0xE8, 0xF5, 0x57, 0x35, 0xFA, + 0xC1, 0x79, 0xEE, 0x2C, 0xE8, 0x7D, 0xB6, 0x03, 0xCC, 0x66, + 0x09, 0x6F, 0x52, 0x84, 0x0A, 0x34, 0x18, 0x2C, 0x01, 0x45, + 0x81, 0x00, 0xE5, 0x5E, 0x8D, 0xAE, 0x1C, 0x96, 0x8B, 0x45, + 0x73, 0x00, 0x0A, 0xB5, 0xCF, 0x8D, 0x0E, 0x35, 0x5D, 0x1A, + 0x0E, 0xBF, 0x64, 0x9A, 0x52, 0x20, 0x48, 0xC6, 0xB9, 0x40, + 0xD3, 0x2C, 0x52, 0xCA, 0x93, 0xCF, 0xBB, 0x94, 0x06, 0xF3, + 0x97, 0xEE, 0xCC, 0x5D, 0xA3, 0xEA, 0xF8, 0x5A, 0x39, 0x77, + 0x34, 0xD7, 0xF6, 0x4E, 0xBE, 0x8A, 0x07, 0x5F, 0x51, 0x53, + 0xC5, 0x1B, 0x8C, 0x47, 0x8F, 0x34, 0x0E, 0x60, 0x0A, 0x90, + 0xE2, 0xDA, 0x7B, 0xEF, 0xD6, 0xF5, 0x5D, 0xE5, 0x32, 0x37, + 0x75, 0x99, 0x81, 0x4A, 0x2A, 0x78, 0x71, 0xDC, 0xF4, 0xE5, + 0xCA, 0xD8, 0x6B, 0x3B, 0x90, 0x68, 0x2E, 0x93, 0xC5, 0x10, + 0x42, 0x5D, 0x38, 0x90, 0x32, 0x46, 0xEA, 0x87, 0xE0, 0xBC, + 0xB8, 0x9A, 0x18, 0x20, 0x68, 0x85, 0x6D, 0x9B, 0xC9, 0x8F, + 0x9B, 0xD2, 0xBE, 0x15, 0x12, 0x68, 0xD0, 0xB0, 0x16, 0x5F, + 0xE2, 0x69, 0x1D, 0x04, 0x00, 0xFC, 0x63, 0x33, 0xCD, 0x1F, + 0x89, 0xCD, 0x52, 0xFF, 0xEC, 0x19, 0x69, 0x74, 0xA3, 0xCE, + 0x4D, 0xAB, 0x93, 0xE4, 0xC6, 0x13, 0x56, 0x27, 0xC9, 0x25, + 0x5A, 0x01, 0xB2, 0x36, 0x8B, 0x61, 0xE5, 0x8B, 0x98, 0xAC, + 0xE4, 0x2A, 0xB6, 0x40, 0x9F, 0x42, 0xE4, 0x1B, 0x52, 0xF7, + 0xFD, 0xD8, 0x30, 0x07, 0x33, 0xF9, 0x47, 0xCB, 0x3C, 0xAD, + 0x12, 0xC1, 0xCC, 0x29, 0x62, 0x49, 0x04, 0x0C, 0x23, 0x97, + 0x5A, 0xA4, 0x84, 0x67, 0xDE, 0x5A, 0xE5, 0x36, 0xD2, 0x88, + 0xF1, 0xD4, 0xEB, 0x13, 0x81, 0x54, 0x51, 0x11, 0xE3, 0xBA, + 0xBC, 0xEE, 0xDD, 0x6C, 0xCD, 0xE6, 0xB4, 0xA1, 0x8B, 0x0B, + 0x66, 0xFB, 0x8E, 0x50, 0xA0, 0xDA, 0x69, 0x8D, 0xCC, 0x2D, + 0xE4, 0x2C, 0xC4, 0x37, 0xDF, 0x61, 0xC0, 0x03, 0xBD, 0x8B, + 0x28, 0xCA, 0xD2, 0x8C, 0x1C, 0xF1, 0xA4, 0x26, 0x69, 0xE5, + 0xCF, 0x45, 0xDB, 0x5A, 0x47, 0x79, 0xED, 0x9F, 0xF7, 0xD2, + 0xDB, 0xBA, 0x46, 0x53, 0x4F, 0xCE, 0xA8, 0xBE, 0x8F, 0x4A, + 0xD6, 0xDF, 0x2E, 0x06, 0xE6, 0x4C, 0x9A, 0xC1, 0xB6, 0x49, + 0xED, 0xC4, 0xEB, 0xAA, 0xA4, 0x29, 0x6D, 0xD4, 0xCC, 0x8C, + 0xB6, 0x40, 0x11, 0x39, 0x69, 0xF7, 0x75, 0xCD, 0xB1, 0x99, + 0x46, 0x4E, 0xDE, 0xCB, 0xF6, 0x9D, 0x32, 0xF3, 0xC9, 0x47, + 0x47, 0x7A, 0xCB, 0xFB, 0xA3, 0x0C, 0x3B, 0xDF, 0xB7, 0xDE, + 0xEC, 0x99, 0xDE, 0xB0, 0x26, 0x04, 0x34, 0xAE, 0x6B, 0xFC, + 0x99, 0xBC, 0xDE, 0xD5, 0xBE, 0xE7, 0xEB, 0xF9, 0xE7, 0xA6, + 0x01, 0x9A, 0x0C, 0x5E, 0x66, 0xE6, 0x53, 0xE4, 0xD1, 0x58, + 0xAC, 0xDA, 0x69, 0x77, 0x7B, 0x68, 0xD6, 0x30, 0x2A, 0x9C, + 0x6B, 0xBE, 0x9F, 0x3D, 0x71, 0xD6, 0x54, 0xCD, 0x59, 0x4E, + 0x1F, 0xE3, 0x83, 0x4E, 0xD1, 0x8E, 0xAF, 0x97, 0xA8, 0xE5, + 0xB6, 0x59, 0x77, 0xA8, 0x02, 0x20, 0xE4, 0xEB, 0x44, 0x71, + 0xBC, 0x07, 0x14, 0x79, 0x4F, 0x0C, 0x27, 0x06, 0x39, 0xCF, + 0x7C, 0xEF, 0x2B, 0x9B, 0x5E, 0xC4, 0x6D, 0x79, 0x13, 0x00, + 0x43, 0x6F, 0x51, 0x77, 0xB5, 0xC3, 0x72, 0xAD, 0x13, 0xA9, + 0xE5, 0x9A, 0x5B, 0x1A, 0x99, 0x74, 0xC0, 0x7A, 0xF9, 0xC5, + 0xB0, 0x58, 0x35, 0x1C, 0xA5, 0x51, 0xDB, 0xA1, 0x14, 0xCD, + 0x26, 0x71, 0xB1, 0xE7, 0xAA, 0x14, 0xA7, 0x46, 0x93, 0xD3, + 0x5C, 0x8C, 0x1A, 0x91, 0x77, 0x46, 0x2E, 0x15, 0xAA, 0x9E, + 0xF7, 0x2B, 0x79, 0x41, 0x76, 0xF7, 0x22, 0x53, 0x7D, 0x51, + 0xDB, 0x98, 0x3D, 0x5B, 0x78, 0x5F, 0xC3, 0xC9, 0x29, 0xA3, + 0xFF, 0x75, 0x82, 0x06, 0x9A, 0x16, 0x5E, 0xA4, 0x79, 0x0D, + 0xD1, 0x6D, 0x08, 0xFF, 0x43, 0xEF, 0x9C, 0xF3, 0x1B, 0x7A, + 0x3F, 0x34, 0xBE, 0x19, 0x15, 0x06, 0x33, 0xDB, 0xA5, 0x71, + 0xCB, 0x5F, 0x6B, 0x8D, 0xBD, 0x5B, 0x32, 0x91, 0xB2, 0x37, + 0x3D, 0xB4, 0x40, 0x9E, 0x02, 0x9B, 0xB7, 0x68, 0x20, 0x58, + 0x5C, 0xAB, 0xCB, 0xC8, 0x23, 0x2D, 0x77, 0xCC, 0x0B, 0xF6, + 0x78, 0x6B, 0x80, 0x06, 0x91, 0xA9, 0xFD, 0x7E, 0xFA, 0x25, + 0x98, 0x9F, 0xCC, 0x79, 0x0A, 0x1A, 0x54, 0x83, 0xAC, 0x64, + 0x16, 0x90, 0xE5, 0xD9, 0xA7, 0xD7, 0x1B, 0x86, 0x0D, 0xE6, + 0xE6, 0x22, 0x2B, 0x1F, 0x44, 0x49, 0x98, 0x9C, 0x51, 0x6F, + 0xCF, 0x58, 0x4A, 0xFA, 0xFA, 0x84, 0x12, 0xA5, 0x10, 0xF4, + 0xCA, 0xF0, 0x98, 0x2B, 0xC9, 0x03, 0x71, 0x37, 0xE7, 0xDC, + 0xC2, 0xB1, 0x4E, 0x64, 0xDE, 0x4F, 0x46, 0x0D, 0x6B, 0x25, + 0x88, 0x5D, 0xD6, 0xFF, 0x23, 0x46, 0x57, 0x36, 0x14, 0x18, + 0xA7, 0xCB, 0xB8, 0xBD, 0xF0, 0xC5, 0x37, 0x36, 0xEE, 0xE1, + 0xED, 0x9F, 0x4D, 0xD4, 0x39, 0xE5, 0x92, 0xCF, 0x95, 0x4D, + 0x66, 0x36, 0x5D, 0xD0, 0xCC, 0x07, 0xCF, 0x15, 0x5A, 0xCE, + 0x14, 0xB8, 0xDA, 0x0D, 0x3D, 0x1B, 0x45, 0xC5, 0x2E, 0x34, + 0x43, 0x25, 0x02, 0x3A, 0xCD, 0x14, 0x45, 0xFB, 0x3E, 0xF9, + 0x88, 0x5D, 0x0D, 0x29, 0x31, 0xB9, 0xA1, 0xE6, 0x31, 0x18, + 0x52, 0x46, 0x3F, 0x22, 0x4F, 0x9F, 0x7A, 0x65, 0x36, 0x88, + 0xA3, 0x1C, 0x3E, 0x6F, 0x50, 0x7A, 0x36, 0xBE, 0x56, 0x7E, + 0x50, 0xCB, 0x7A, 0x10, 0xA0, 0xEC, 0xF6, 0x82, 0xD6, 0x30, + 0x1C, 0xE8, 0x4C, 0x50, 0xF9, 0x3E, 0xDB, 0xAC, 0xBE, 0x4F, + 0x90, 0xB1, 0xD5, 0x1B, 0x12, 0x95, 0xFB, 0xE8, 0x08, 0x64, + 0x56, 0x7C, 0x96, 0xCC, 0x90, 0xB1, 0xBC, 0xA0, 0xF5, 0x32, + 0x69, 0xB3, 0x5F, 0x27, 0x0F, 0xBE, 0xC9, 0xBD, 0xEB, 0xFA, + 0x4B, 0x5C, 0xC5, 0x99, 0x9E, 0x5A, 0x04, 0xCC, 0xD0, 0x4D, + 0x29, 0xE8, 0x84, 0x55, 0x8C, 0xD7, 0xC4, 0x06, 0x13, 0x4D, + 0x92, 0xE5, 0x98, 0x9C, 0x4C, 0xC1, 0xF7, 0xAF, 0x7B, 0xD5, + 0x2B, 0x92, 0x68, 0x68, 0x19, 0x70, 0x4C, 0x9E, 0x46, 0xB8, + 0x34, 0xEB, 0x01, 0x47, 0xBE, 0x59, 0xAB, 0x0B, 0x22, 0x25, + 0xE7, 0x56, 0xA8, 0xB4, 0x93, 0x3C, 0xD5, 0x98, 0x9F, 0x61, + 0x2E, 0xFA, 0xCB, 0x5F, 0x5B, 0xD8, 0x09, 0x83, 0xE9, 0x40, + 0xE9, 0x0E, 0x42, 0xDD, 0x17, 0xD7, 0x6E, 0x19, 0x8D, 0x95, + 0x0A, 0x93 }; -#define sizeof_bench_dilithium_level5_pubkey \ - (sizeof(bench_dilithium_level5_pubkey)) - +#define sizeof_bench_mldsa_87_pubkey (sizeof(bench_mldsa_87_pubkey)) #endif /* !WOLFSSL_MLDSA_NO_VERIFY */ #endif /* WOLFSSL_HAVE_MLDSA */ diff --git a/wolfssl/certs_test_sm.h b/wolfssl/certs_test_sm.h index b11c222abc..03788a660a 100644 --- a/wolfssl/certs_test_sm.h +++ b/wolfssl/certs_test_sm.h @@ -11,7 +11,7 @@ /* ./certs/sm2/ca-sm2.der */ static const unsigned char ca_sm2_der[] = { - 0x30, 0x82, 0x02, 0x96, 0x30, 0x82, 0x02, 0x3C, 0xA0, 0x03, + 0x30, 0x82, 0x02, 0x97, 0x30, 0x82, 0x02, 0x3C, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x30, 0x81, 0x95, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, @@ -29,9 +29,9 @@ static const unsigned char ca_sm2_der[] = 0x1D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x01, 0x16, 0x10, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, - 0x30, 0x1E, 0x17, 0x0D, 0x32, 0x33, 0x30, 0x32, 0x31, 0x35, - 0x30, 0x36, 0x32, 0x33, 0x30, 0x37, 0x5A, 0x17, 0x0D, 0x32, - 0x35, 0x31, 0x31, 0x31, 0x31, 0x30, 0x36, 0x32, 0x33, 0x30, + 0x30, 0x1E, 0x17, 0x0D, 0x32, 0x36, 0x30, 0x32, 0x31, 0x38, + 0x31, 0x37, 0x35, 0x36, 0x35, 0x37, 0x5A, 0x17, 0x0D, 0x32, + 0x38, 0x31, 0x31, 0x31, 0x34, 0x31, 0x37, 0x35, 0x36, 0x35, 0x37, 0x5A, 0x30, 0x81, 0xAC, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x07, 0x4D, @@ -70,14 +70,14 @@ static const unsigned char ca_sm2_der[] = 0x03, 0x01, 0x01, 0xFF, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, - 0x83, 0x75, 0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x47, - 0x4E, 0x00, 0x03, 0xAB, 0x34, 0xA1, 0xAF, 0x59, 0x39, 0x8F, - 0x60, 0x36, 0xBF, 0x89, 0x88, 0x42, 0x41, 0x27, 0xC1, 0xDD, - 0x57, 0xC9, 0x79, 0xCB, 0x1F, 0x56, 0x5C, 0x16, 0xB5, 0x28, - 0xBD, 0x02, 0x21, 0x00, 0x8B, 0x2E, 0x25, 0xEB, 0x21, 0x9B, - 0xA9, 0x2B, 0xA6, 0x6A, 0x5B, 0xDB, 0xA7, 0xC7, 0x2B, 0x11, - 0xDF, 0x73, 0x15, 0xAD, 0xE4, 0xC5, 0xC3, 0xC2, 0xF3, 0xB4, - 0xB4, 0x67, 0xAF, 0xD7, 0x51, 0x1C + 0x83, 0x75, 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, + 0xB2, 0xB9, 0x5B, 0x02, 0xAD, 0x78, 0xF8, 0x52, 0xBA, 0x67, + 0xCF, 0xCB, 0x25, 0x9B, 0xBA, 0xD9, 0x56, 0xF5, 0xA7, 0xFF, + 0xAF, 0x25, 0x26, 0xD5, 0xF6, 0xF3, 0xF3, 0xA6, 0xF5, 0x9A, + 0x2F, 0x9B, 0x02, 0x21, 0x00, 0xBC, 0x96, 0xF3, 0x39, 0x13, + 0x76, 0xDC, 0x02, 0x35, 0x39, 0x0E, 0xDC, 0x0A, 0x69, 0xBF, + 0x02, 0x18, 0xB6, 0x01, 0xBE, 0xFF, 0x05, 0xD7, 0x2E, 0xF2, + 0x7B, 0x67, 0xEB, 0x16, 0xE9, 0x8E, 0xC5 }; #define sizeof_ca_sm2_der (sizeof(ca_sm2_der)) @@ -120,9 +120,9 @@ static const unsigned char ca_sm2_priv_der[] = static const unsigned char client_sm2_der[] = { 0x30, 0x82, 0x03, 0xC9, 0x30, 0x82, 0x03, 0x6E, 0xA0, 0x03, - 0x02, 0x01, 0x02, 0x02, 0x14, 0x60, 0xA0, 0x4A, 0x0B, 0x36, - 0xEB, 0x7D, 0xE1, 0x3F, 0x74, 0x29, 0xA9, 0x29, 0xB4, 0x05, - 0x6C, 0x17, 0xF7, 0xA6, 0xD4, 0x30, 0x0A, 0x06, 0x08, 0x2A, + 0x02, 0x01, 0x02, 0x02, 0x14, 0x63, 0xDD, 0x75, 0x63, 0x8A, + 0xB0, 0x51, 0x4F, 0x9C, 0x4E, 0xFF, 0x6D, 0x55, 0x4E, 0xCD, + 0xEE, 0x8F, 0x26, 0xD3, 0x80, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x30, 0x81, 0xB0, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, @@ -142,9 +142,9 @@ static const unsigned char client_sm2_der[] = 0x6D, 0x31, 0x17, 0x30, 0x15, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x01, 0x0C, 0x07, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x30, 0x1E, 0x17, 0x0D, - 0x32, 0x33, 0x30, 0x32, 0x31, 0x35, 0x30, 0x36, 0x32, 0x33, - 0x30, 0x37, 0x5A, 0x17, 0x0D, 0x32, 0x35, 0x31, 0x31, 0x31, - 0x31, 0x30, 0x36, 0x32, 0x33, 0x30, 0x37, 0x5A, 0x30, 0x81, + 0x32, 0x36, 0x30, 0x32, 0x31, 0x38, 0x31, 0x37, 0x35, 0x36, + 0x35, 0x37, 0x5A, 0x17, 0x0D, 0x32, 0x38, 0x31, 0x31, 0x31, + 0x34, 0x31, 0x37, 0x35, 0x36, 0x35, 0x37, 0x5A, 0x30, 0x81, 0xB0, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x07, 0x4D, 0x6F, 0x6E, 0x74, 0x61, @@ -198,9 +198,9 @@ static const unsigned char client_sm2_der[] = 0x2E, 0x63, 0x6F, 0x6D, 0x31, 0x17, 0x30, 0x15, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x01, 0x0C, 0x07, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x82, - 0x14, 0x60, 0xA0, 0x4A, 0x0B, 0x36, 0xEB, 0x7D, 0xE1, 0x3F, - 0x74, 0x29, 0xA9, 0x29, 0xB4, 0x05, 0x6C, 0x17, 0xF7, 0xA6, - 0xD4, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x04, 0x05, + 0x14, 0x63, 0xDD, 0x75, 0x63, 0x8A, 0xB0, 0x51, 0x4F, 0x9C, + 0x4E, 0xFF, 0x6D, 0x55, 0x4E, 0xCD, 0xEE, 0x8F, 0x26, 0xD3, + 0x80, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x1D, 0x11, 0x04, 0x15, 0x30, 0x13, 0x82, 0x0B, 0x65, 0x78, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x87, @@ -209,14 +209,14 @@ static const unsigned char client_sm2_der[] = 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x02, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x03, 0x49, - 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8F, 0xB2, 0xB5, 0x95, - 0x8F, 0x79, 0xF6, 0x5E, 0x75, 0xE5, 0xC5, 0xE9, 0x9A, 0x12, - 0xD2, 0x0F, 0x78, 0x9F, 0xC0, 0x1D, 0x8D, 0x1C, 0xBE, 0x6B, - 0x0C, 0xF1, 0xF5, 0x57, 0x60, 0xDB, 0x91, 0x4F, 0x02, 0x21, - 0x00, 0x87, 0x5E, 0x7D, 0xE4, 0xD6, 0x3A, 0xBB, 0x7B, 0x98, - 0x27, 0x85, 0xDE, 0x7A, 0xF0, 0x21, 0xE2, 0x66, 0xA1, 0x9F, - 0x26, 0xE0, 0xDD, 0x86, 0x23, 0xB4, 0xC8, 0xC0, 0x46, 0x5A, - 0xF2, 0x49, 0x8D + 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0xDD, 0x98, 0x90, 0x68, + 0x35, 0x95, 0x61, 0x2F, 0x11, 0x90, 0xA5, 0xE9, 0x30, 0x8B, + 0x9A, 0xAA, 0x33, 0xCC, 0x73, 0x8A, 0x76, 0x96, 0x8B, 0x97, + 0x8C, 0x4C, 0xC3, 0x10, 0xFC, 0x14, 0x56, 0x9B, 0x02, 0x21, + 0x00, 0xF8, 0xDE, 0xDB, 0x67, 0x54, 0x59, 0xCA, 0x98, 0x27, + 0x3D, 0x3F, 0xF6, 0x6F, 0x30, 0x0C, 0x65, 0xE1, 0xFB, 0xA0, + 0x9F, 0x11, 0xAB, 0xEA, 0x76, 0x30, 0x31, 0xC4, 0x66, 0x11, + 0xD7, 0xB9, 0xF2 }; #define sizeof_client_sm2_der (sizeof(client_sm2_der)) @@ -258,10 +258,10 @@ static const unsigned char client_sm2_priv_der[] = /* ./certs/sm2/root-sm2.der */ static const unsigned char root_sm2_der[] = { - 0x30, 0x82, 0x02, 0x91, 0x30, 0x82, 0x02, 0x38, 0xA0, 0x03, - 0x02, 0x01, 0x02, 0x02, 0x14, 0x74, 0x9C, 0xDD, 0xA4, 0xB2, - 0x67, 0x26, 0x57, 0x29, 0xFB, 0xE9, 0x13, 0x54, 0xE0, 0x34, - 0x08, 0x03, 0x2B, 0x70, 0xA9, 0x30, 0x0A, 0x06, 0x08, 0x2A, + 0x30, 0x82, 0x02, 0x93, 0x30, 0x82, 0x02, 0x38, 0xA0, 0x03, + 0x02, 0x01, 0x02, 0x02, 0x14, 0x61, 0x2A, 0x93, 0x12, 0xB3, + 0x6E, 0xFF, 0xD6, 0x9A, 0xA7, 0x98, 0xC4, 0x49, 0x4D, 0xC6, + 0x2C, 0x3E, 0xEA, 0x5A, 0xF9, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x30, 0x81, 0x95, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, @@ -278,9 +278,9 @@ static const unsigned char root_sm2_der[] = 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x01, 0x16, 0x10, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x30, - 0x1E, 0x17, 0x0D, 0x32, 0x33, 0x30, 0x32, 0x31, 0x35, 0x30, - 0x36, 0x32, 0x33, 0x30, 0x37, 0x5A, 0x17, 0x0D, 0x32, 0x35, - 0x31, 0x31, 0x31, 0x31, 0x30, 0x36, 0x32, 0x33, 0x30, 0x37, + 0x1E, 0x17, 0x0D, 0x32, 0x36, 0x30, 0x32, 0x31, 0x38, 0x31, + 0x37, 0x35, 0x36, 0x35, 0x37, 0x5A, 0x17, 0x0D, 0x32, 0x38, + 0x31, 0x31, 0x31, 0x34, 0x31, 0x37, 0x35, 0x36, 0x35, 0x37, 0x5A, 0x30, 0x81, 0x95, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x07, 0x4D, 0x6F, @@ -316,15 +316,15 @@ static const unsigned char root_sm2_der[] = 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0A, 0x06, 0x08, - 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x03, 0x47, - 0x00, 0x30, 0x44, 0x02, 0x20, 0x03, 0x27, 0x29, 0xF0, 0xEF, - 0x78, 0x26, 0xA1, 0x1A, 0x6A, 0x1E, 0x88, 0x81, 0xE7, 0x83, - 0x72, 0x5F, 0x3E, 0xE6, 0x08, 0xE8, 0x14, 0x68, 0xBF, 0x4B, - 0x0F, 0x68, 0x52, 0x92, 0xAA, 0x8F, 0xA1, 0x02, 0x20, 0x0B, - 0xFE, 0x1B, 0x14, 0xBA, 0x51, 0x82, 0x65, 0x06, 0xBB, 0x22, - 0xD8, 0x1A, 0xA7, 0x9F, 0x54, 0x62, 0xEB, 0x8D, 0xB2, 0xD5, - 0x13, 0xB3, 0xB8, 0xA2, 0xF3, 0x14, 0x44, 0xB2, 0xA0, 0x21, - 0xD0 + 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x03, 0x49, + 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0xFE, 0x8D, 0x2F, 0xB9, + 0xC9, 0x55, 0xDB, 0x2C, 0xD4, 0x89, 0xFF, 0xA1, 0x92, 0x03, + 0xCE, 0x4A, 0x09, 0x00, 0x7F, 0xC4, 0xB3, 0xB6, 0x55, 0xAE, + 0xA1, 0xF6, 0x7B, 0x3E, 0xED, 0xC4, 0xDD, 0x7C, 0x02, 0x21, + 0x00, 0xD0, 0xBE, 0x9B, 0x4A, 0xA9, 0xCF, 0x52, 0xC1, 0xCD, + 0x0D, 0xBC, 0x86, 0x29, 0x9E, 0xC4, 0xE2, 0xF1, 0xFA, 0x86, + 0xF3, 0x73, 0x01, 0xE2, 0x3B, 0xC5, 0xCC, 0x99, 0x0A, 0xBB, + 0xC3, 0xA8, 0xEE }; #define sizeof_root_sm2_der (sizeof(root_sm2_der)) @@ -446,7 +446,7 @@ static const unsigned char server_sm2_der[] = /* ./certs/sm2/server-sm2-cert.der */ static const unsigned char server_sm2_cert_der[] = { - 0x30, 0x82, 0x02, 0xD8, 0x30, 0x82, 0x02, 0x7E, 0xA0, 0x03, + 0x30, 0x82, 0x02, 0xD9, 0x30, 0x82, 0x02, 0x7E, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x30, 0x81, 0xAC, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, @@ -466,10 +466,10 @@ static const unsigned char server_sm2_cert_der[] = 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x31, 0x17, 0x30, 0x15, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x01, 0x0C, 0x07, 0x77, 0x6F, 0x6C, 0x66, - 0x53, 0x53, 0x4C, 0x30, 0x1E, 0x17, 0x0D, 0x32, 0x33, 0x30, - 0x32, 0x31, 0x35, 0x30, 0x36, 0x32, 0x33, 0x30, 0x37, 0x5A, - 0x17, 0x0D, 0x32, 0x35, 0x31, 0x31, 0x31, 0x31, 0x30, 0x36, - 0x32, 0x33, 0x30, 0x37, 0x5A, 0x30, 0x81, 0xB0, 0x31, 0x0B, + 0x53, 0x53, 0x4C, 0x30, 0x1E, 0x17, 0x0D, 0x32, 0x36, 0x30, + 0x32, 0x31, 0x38, 0x31, 0x37, 0x35, 0x36, 0x35, 0x37, 0x5A, + 0x17, 0x0D, 0x32, 0x38, 0x31, 0x31, 0x31, 0x34, 0x31, 0x37, + 0x35, 0x36, 0x35, 0x37, 0x5A, 0x30, 0x81, 0xB0, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x07, 0x4D, 0x6F, 0x6E, 0x74, 0x61, 0x6E, 0x61, 0x31, @@ -511,15 +511,15 @@ static const unsigned char server_sm2_cert_der[] = 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x11, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x86, 0xF8, 0x42, 0x01, 0x01, 0x04, 0x04, 0x03, 0x02, 0x06, 0x40, 0x30, 0x0A, 0x06, 0x08, - 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x03, 0x48, - 0x00, 0x30, 0x45, 0x02, 0x20, 0x1B, 0xCA, 0x94, 0x28, 0x7F, - 0xF6, 0xB2, 0x0D, 0x31, 0x43, 0x50, 0xE1, 0xD5, 0x34, 0x17, - 0xDD, 0xAF, 0x3A, 0xDE, 0x81, 0x06, 0x67, 0x9A, 0xB3, 0x06, - 0x22, 0x7E, 0x64, 0xEC, 0xFD, 0x0E, 0xB9, 0x02, 0x21, 0x00, - 0xA1, 0x48, 0xA8, 0x32, 0xD1, 0x05, 0x09, 0x6B, 0x1C, 0xEB, - 0x89, 0x12, 0x66, 0xD8, 0x38, 0xA1, 0xC4, 0x5C, 0x89, 0x09, - 0x0F, 0xFD, 0xE9, 0xC0, 0x3B, 0x1D, 0xFB, 0xCD, 0xB5, 0x4C, - 0x31, 0x68 + 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, 0x83, 0x75, 0x03, 0x49, + 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x96, 0x50, 0x5F, 0x3E, + 0x3F, 0xBF, 0x1E, 0x50, 0x6C, 0x9A, 0x5D, 0x4E, 0x8E, 0xEF, + 0x27, 0xA1, 0x4D, 0xFA, 0xB9, 0x75, 0xA6, 0x58, 0x0E, 0xF6, + 0xDB, 0x60, 0x32, 0x20, 0xE4, 0x31, 0x1D, 0x36, 0x02, 0x21, + 0x00, 0xE7, 0xCB, 0x5C, 0x9F, 0x85, 0x7D, 0x4C, 0xB5, 0x54, + 0x74, 0xE4, 0x45, 0xC4, 0xF0, 0x01, 0x53, 0x51, 0x33, 0x07, + 0xDD, 0x28, 0xC6, 0xC7, 0x47, 0xFF, 0xD6, 0xDC, 0xB0, 0xE1, + 0x36, 0xCC, 0x3B }; #define sizeof_server_sm2_cert_der (sizeof(server_sm2_cert_der)) @@ -582,45 +582,42 @@ static const unsigned char ca_sm2[] = 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, - 0x73, 0x73, 0x75, 0x65, 0x72, 0x3A, 0x20, 0x43, 0x20, 0x3D, - 0x20, 0x55, 0x53, 0x2C, 0x20, 0x53, 0x54, 0x20, 0x3D, 0x20, - 0x4D, 0x6F, 0x6E, 0x74, 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, - 0x20, 0x3D, 0x20, 0x42, 0x6F, 0x7A, 0x65, 0x6D, 0x61, 0x6E, - 0x2C, 0x20, 0x4F, 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, - 0x53, 0x53, 0x4C, 0x5F, 0x53, 0x4D, 0x32, 0x2C, 0x20, 0x4F, - 0x55, 0x20, 0x3D, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x53, - 0x4D, 0x32, 0x2C, 0x20, 0x43, 0x4E, 0x20, 0x3D, 0x20, 0x77, - 0x77, 0x77, 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, - 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, - 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3D, - 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, - 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x56, 0x61, 0x6C, 0x69, - 0x64, 0x69, 0x74, 0x79, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, - 0x20, 0x42, 0x65, 0x66, 0x6F, 0x72, 0x65, 0x3A, 0x20, 0x46, - 0x65, 0x62, 0x20, 0x31, 0x35, 0x20, 0x30, 0x36, 0x3A, 0x32, - 0x33, 0x3A, 0x30, 0x37, 0x20, 0x32, 0x30, 0x32, 0x33, 0x20, - 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, - 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x3A, 0x20, 0x4E, 0x6F, - 0x76, 0x20, 0x31, 0x31, 0x20, 0x30, 0x36, 0x3A, 0x32, 0x33, - 0x3A, 0x30, 0x37, 0x20, 0x32, 0x30, 0x32, 0x35, 0x20, 0x47, - 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x3A, 0x20, - 0x43, 0x20, 0x3D, 0x20, 0x55, 0x53, 0x2C, 0x20, 0x53, 0x54, - 0x20, 0x3D, 0x20, 0x4D, 0x6F, 0x6E, 0x74, 0x61, 0x6E, 0x61, - 0x2C, 0x20, 0x4C, 0x20, 0x3D, 0x20, 0x42, 0x6F, 0x7A, 0x65, - 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x20, 0x3D, 0x20, 0x77, - 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, 0x32, - 0x2C, 0x20, 0x4F, 0x55, 0x20, 0x3D, 0x20, 0x43, 0x41, 0x2D, - 0x73, 0x6D, 0x32, 0x2C, 0x20, 0x43, 0x4E, 0x20, 0x3D, 0x20, - 0x77, 0x77, 0x77, 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, - 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, - 0x69, 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, - 0x3D, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, - 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, - 0x55, 0x49, 0x44, 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, + 0x73, 0x73, 0x75, 0x65, 0x72, 0x3A, 0x20, 0x43, 0x3D, 0x55, + 0x53, 0x2C, 0x20, 0x53, 0x54, 0x3D, 0x4D, 0x6F, 0x6E, 0x74, + 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x3D, 0x42, 0x6F, 0x7A, + 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x3D, 0x77, 0x6F, + 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x53, 0x4D, 0x32, 0x2C, + 0x20, 0x4F, 0x55, 0x3D, 0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x53, + 0x4D, 0x32, 0x2C, 0x20, 0x43, 0x4E, 0x3D, 0x77, 0x77, 0x77, + 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, + 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3D, 0x69, 0x6E, 0x66, + 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, + 0x63, 0x6F, 0x6D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, 0x79, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x42, 0x65, 0x66, + 0x6F, 0x72, 0x65, 0x3A, 0x20, 0x46, 0x65, 0x62, 0x20, 0x31, + 0x38, 0x20, 0x31, 0x37, 0x3A, 0x35, 0x36, 0x3A, 0x35, 0x37, + 0x20, 0x32, 0x30, 0x32, 0x36, 0x20, 0x47, 0x4D, 0x54, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x41, 0x66, 0x74, 0x65, + 0x72, 0x20, 0x3A, 0x20, 0x4E, 0x6F, 0x76, 0x20, 0x31, 0x34, + 0x20, 0x31, 0x37, 0x3A, 0x35, 0x36, 0x3A, 0x35, 0x37, 0x20, + 0x32, 0x30, 0x32, 0x38, 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, + 0x6A, 0x65, 0x63, 0x74, 0x3A, 0x20, 0x43, 0x3D, 0x55, 0x53, + 0x2C, 0x20, 0x53, 0x54, 0x3D, 0x4D, 0x6F, 0x6E, 0x74, 0x61, + 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x3D, 0x42, 0x6F, 0x7A, 0x65, + 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x3D, 0x77, 0x6F, 0x6C, + 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, 0x32, 0x2C, 0x20, + 0x4F, 0x55, 0x3D, 0x43, 0x41, 0x2D, 0x73, 0x6D, 0x32, 0x2C, + 0x20, 0x43, 0x4E, 0x3D, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x6F, + 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, + 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, + 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, + 0x2C, 0x20, 0x55, 0x49, 0x44, 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x20, 0x4B, 0x65, 0x79, @@ -718,126 +715,127 @@ static const unsigned char ca_sm2[] = 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x33, 0x30, 0x3A, 0x34, 0x35, 0x3A, 0x30, 0x32, 0x3A, - 0x32, 0x30, 0x3A, 0x34, 0x37, 0x3A, 0x34, 0x65, 0x3A, 0x30, - 0x30, 0x3A, 0x30, 0x33, 0x3A, 0x61, 0x62, 0x3A, 0x33, 0x34, - 0x3A, 0x61, 0x31, 0x3A, 0x61, 0x66, 0x3A, 0x35, 0x39, 0x3A, - 0x33, 0x39, 0x3A, 0x38, 0x66, 0x3A, 0x36, 0x30, 0x3A, 0x33, - 0x36, 0x3A, 0x62, 0x66, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x38, 0x39, 0x3A, 0x38, 0x38, 0x3A, - 0x34, 0x32, 0x3A, 0x34, 0x31, 0x3A, 0x32, 0x37, 0x3A, 0x63, - 0x31, 0x3A, 0x64, 0x64, 0x3A, 0x35, 0x37, 0x3A, 0x63, 0x39, - 0x3A, 0x37, 0x39, 0x3A, 0x63, 0x62, 0x3A, 0x31, 0x66, 0x3A, - 0x35, 0x36, 0x3A, 0x35, 0x63, 0x3A, 0x31, 0x36, 0x3A, 0x62, - 0x35, 0x3A, 0x32, 0x38, 0x3A, 0x62, 0x64, 0x3A, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x32, 0x3A, - 0x32, 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x38, 0x62, 0x3A, 0x32, - 0x65, 0x3A, 0x32, 0x35, 0x3A, 0x65, 0x62, 0x3A, 0x32, 0x31, - 0x3A, 0x39, 0x62, 0x3A, 0x61, 0x39, 0x3A, 0x32, 0x62, 0x3A, - 0x61, 0x36, 0x3A, 0x36, 0x61, 0x3A, 0x35, 0x62, 0x3A, 0x64, - 0x62, 0x3A, 0x61, 0x37, 0x3A, 0x63, 0x37, 0x3A, 0x32, 0x62, + 0x20, 0x33, 0x30, 0x3A, 0x34, 0x36, 0x3A, 0x30, 0x32, 0x3A, + 0x32, 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x62, 0x32, 0x3A, 0x62, + 0x39, 0x3A, 0x35, 0x62, 0x3A, 0x30, 0x32, 0x3A, 0x61, 0x64, + 0x3A, 0x37, 0x38, 0x3A, 0x66, 0x38, 0x3A, 0x35, 0x32, 0x3A, + 0x62, 0x61, 0x3A, 0x36, 0x37, 0x3A, 0x63, 0x66, 0x3A, 0x63, + 0x62, 0x3A, 0x32, 0x35, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x39, 0x62, 0x3A, 0x62, 0x61, 0x3A, + 0x64, 0x39, 0x3A, 0x35, 0x36, 0x3A, 0x66, 0x35, 0x3A, 0x61, + 0x37, 0x3A, 0x66, 0x66, 0x3A, 0x61, 0x66, 0x3A, 0x32, 0x35, + 0x3A, 0x32, 0x36, 0x3A, 0x64, 0x35, 0x3A, 0x66, 0x36, 0x3A, + 0x66, 0x33, 0x3A, 0x66, 0x33, 0x3A, 0x61, 0x36, 0x3A, 0x66, + 0x35, 0x3A, 0x39, 0x61, 0x3A, 0x32, 0x66, 0x3A, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x62, 0x3A, + 0x30, 0x32, 0x3A, 0x32, 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x62, + 0x63, 0x3A, 0x39, 0x36, 0x3A, 0x66, 0x33, 0x3A, 0x33, 0x39, + 0x3A, 0x31, 0x33, 0x3A, 0x37, 0x36, 0x3A, 0x64, 0x63, 0x3A, + 0x30, 0x32, 0x3A, 0x33, 0x35, 0x3A, 0x33, 0x39, 0x3A, 0x30, + 0x65, 0x3A, 0x64, 0x63, 0x3A, 0x30, 0x61, 0x3A, 0x36, 0x39, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x31, 0x31, 0x3A, 0x64, 0x66, 0x3A, 0x37, 0x33, 0x3A, 0x31, - 0x35, 0x3A, 0x61, 0x64, 0x3A, 0x65, 0x34, 0x3A, 0x63, 0x35, - 0x3A, 0x63, 0x33, 0x3A, 0x63, 0x32, 0x3A, 0x66, 0x33, 0x3A, - 0x62, 0x34, 0x3A, 0x62, 0x34, 0x3A, 0x36, 0x37, 0x3A, 0x61, - 0x66, 0x3A, 0x64, 0x37, 0x3A, 0x35, 0x31, 0x3A, 0x31, 0x63, - 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, - 0x4E, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, - 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, - 0x49, 0x49, 0x43, 0x6C, 0x6A, 0x43, 0x43, 0x41, 0x6A, 0x79, - 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x42, 0x41, - 0x54, 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, - 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, 0x54, 0x43, 0x42, 0x6C, - 0x54, 0x45, 0x4C, 0x4D, 0x41, 0x6B, 0x47, 0x41, 0x31, 0x55, - 0x45, 0x42, 0x68, 0x4D, 0x43, 0x56, 0x56, 0x4D, 0x78, 0x45, - 0x44, 0x41, 0x4F, 0x0A, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, - 0x67, 0x4D, 0x42, 0x30, 0x31, 0x76, 0x62, 0x6E, 0x52, 0x68, - 0x62, 0x6D, 0x45, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, - 0x4E, 0x56, 0x42, 0x41, 0x63, 0x4D, 0x42, 0x30, 0x4A, 0x76, - 0x65, 0x6D, 0x56, 0x74, 0x59, 0x57, 0x34, 0x78, 0x46, 0x44, - 0x41, 0x53, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x6F, 0x4D, - 0x43, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, 0x0A, 0x55, - 0x30, 0x78, 0x66, 0x55, 0x30, 0x30, 0x79, 0x4D, 0x52, 0x45, - 0x77, 0x44, 0x77, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4C, 0x44, - 0x41, 0x68, 0x53, 0x62, 0x32, 0x39, 0x30, 0x4C, 0x56, 0x4E, - 0x4E, 0x4D, 0x6A, 0x45, 0x59, 0x4D, 0x42, 0x59, 0x47, 0x41, - 0x31, 0x55, 0x45, 0x41, 0x77, 0x77, 0x50, 0x64, 0x33, 0x64, - 0x33, 0x4C, 0x6E, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x7A, 0x63, - 0x32, 0x77, 0x75, 0x0A, 0x59, 0x32, 0x39, 0x74, 0x4D, 0x52, - 0x38, 0x77, 0x48, 0x51, 0x59, 0x4A, 0x4B, 0x6F, 0x5A, 0x49, - 0x68, 0x76, 0x63, 0x4E, 0x41, 0x51, 0x6B, 0x42, 0x46, 0x68, - 0x42, 0x70, 0x62, 0x6D, 0x5A, 0x76, 0x51, 0x48, 0x64, 0x76, - 0x62, 0x47, 0x5A, 0x7A, 0x63, 0x32, 0x77, 0x75, 0x59, 0x32, - 0x39, 0x74, 0x4D, 0x42, 0x34, 0x58, 0x44, 0x54, 0x49, 0x7A, - 0x4D, 0x44, 0x49, 0x78, 0x4E, 0x54, 0x41, 0x32, 0x0A, 0x4D, - 0x6A, 0x4D, 0x77, 0x4E, 0x31, 0x6F, 0x58, 0x44, 0x54, 0x49, - 0x31, 0x4D, 0x54, 0x45, 0x78, 0x4D, 0x54, 0x41, 0x32, 0x4D, - 0x6A, 0x4D, 0x77, 0x4E, 0x31, 0x6F, 0x77, 0x67, 0x61, 0x77, - 0x78, 0x43, 0x7A, 0x41, 0x4A, 0x42, 0x67, 0x4E, 0x56, 0x42, - 0x41, 0x59, 0x54, 0x41, 0x6C, 0x56, 0x54, 0x4D, 0x52, 0x41, - 0x77, 0x44, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x49, 0x44, - 0x41, 0x64, 0x4E, 0x0A, 0x62, 0x32, 0x35, 0x30, 0x59, 0x57, - 0x35, 0x68, 0x4D, 0x52, 0x41, 0x77, 0x44, 0x67, 0x59, 0x44, - 0x56, 0x51, 0x51, 0x48, 0x44, 0x41, 0x64, 0x43, 0x62, 0x33, - 0x70, 0x6C, 0x62, 0x57, 0x46, 0x75, 0x4D, 0x52, 0x51, 0x77, - 0x45, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4B, 0x44, 0x41, - 0x74, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x55, 0x31, 0x4E, 0x4D, - 0x58, 0x33, 0x4E, 0x74, 0x4D, 0x6A, 0x45, 0x50, 0x0A, 0x4D, - 0x41, 0x30, 0x47, 0x41, 0x31, 0x55, 0x45, 0x43, 0x77, 0x77, - 0x47, 0x51, 0x30, 0x45, 0x74, 0x63, 0x32, 0x30, 0x79, 0x4D, - 0x52, 0x67, 0x77, 0x46, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, - 0x44, 0x44, 0x41, 0x39, 0x33, 0x64, 0x33, 0x63, 0x75, 0x64, - 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x35, - 0x6A, 0x62, 0x32, 0x30, 0x78, 0x48, 0x7A, 0x41, 0x64, 0x42, - 0x67, 0x6B, 0x71, 0x0A, 0x68, 0x6B, 0x69, 0x47, 0x39, 0x77, - 0x30, 0x42, 0x43, 0x51, 0x45, 0x57, 0x45, 0x47, 0x6C, 0x75, - 0x5A, 0x6D, 0x39, 0x41, 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6E, - 0x4E, 0x7A, 0x62, 0x43, 0x35, 0x6A, 0x62, 0x32, 0x30, 0x78, - 0x46, 0x7A, 0x41, 0x56, 0x42, 0x67, 0x6F, 0x4A, 0x6B, 0x69, - 0x61, 0x4A, 0x6B, 0x2F, 0x49, 0x73, 0x5A, 0x41, 0x45, 0x42, - 0x44, 0x41, 0x64, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x0A, 0x55, - 0x31, 0x4E, 0x4D, 0x4D, 0x46, 0x6F, 0x77, 0x46, 0x41, 0x59, - 0x49, 0x4B, 0x6F, 0x45, 0x63, 0x7A, 0x31, 0x55, 0x42, 0x67, - 0x69, 0x30, 0x47, 0x43, 0x43, 0x71, 0x42, 0x48, 0x4D, 0x39, - 0x56, 0x41, 0x59, 0x49, 0x74, 0x41, 0x30, 0x49, 0x41, 0x42, - 0x43, 0x47, 0x53, 0x39, 0x38, 0x73, 0x6B, 0x33, 0x32, 0x52, - 0x4E, 0x75, 0x71, 0x74, 0x6D, 0x65, 0x34, 0x4E, 0x31, 0x71, - 0x53, 0x6E, 0x6E, 0x0A, 0x2F, 0x32, 0x52, 0x6A, 0x74, 0x74, - 0x56, 0x43, 0x67, 0x43, 0x43, 0x39, 0x34, 0x75, 0x49, 0x43, - 0x45, 0x6A, 0x75, 0x4F, 0x74, 0x41, 0x43, 0x56, 0x43, 0x59, - 0x44, 0x4C, 0x56, 0x75, 0x31, 0x4C, 0x79, 0x6F, 0x31, 0x58, - 0x35, 0x71, 0x34, 0x46, 0x30, 0x33, 0x59, 0x6E, 0x59, 0x33, - 0x45, 0x35, 0x69, 0x62, 0x64, 0x70, 0x35, 0x6B, 0x69, 0x41, - 0x72, 0x74, 0x47, 0x70, 0x53, 0x42, 0x4B, 0x6A, 0x0A, 0x59, - 0x7A, 0x42, 0x68, 0x4D, 0x42, 0x30, 0x47, 0x41, 0x31, 0x55, - 0x64, 0x44, 0x67, 0x51, 0x57, 0x42, 0x42, 0x52, 0x48, 0x43, - 0x6B, 0x68, 0x2B, 0x75, 0x77, 0x4B, 0x6F, 0x57, 0x69, 0x5A, - 0x58, 0x4B, 0x78, 0x6D, 0x70, 0x65, 0x32, 0x47, 0x4C, 0x66, - 0x31, 0x32, 0x5A, 0x62, 0x6A, 0x41, 0x66, 0x42, 0x67, 0x4E, - 0x56, 0x48, 0x53, 0x4D, 0x45, 0x47, 0x44, 0x41, 0x57, 0x67, - 0x42, 0x51, 0x30, 0x0A, 0x48, 0x58, 0x6C, 0x45, 0x46, 0x58, - 0x6D, 0x68, 0x73, 0x57, 0x4F, 0x5A, 0x34, 0x2B, 0x31, 0x6C, - 0x66, 0x47, 0x53, 0x4A, 0x67, 0x50, 0x2B, 0x34, 0x37, 0x44, - 0x41, 0x50, 0x42, 0x67, 0x4E, 0x56, 0x48, 0x52, 0x4D, 0x42, - 0x41, 0x66, 0x38, 0x45, 0x42, 0x54, 0x41, 0x44, 0x41, 0x51, - 0x48, 0x2F, 0x4D, 0x41, 0x34, 0x47, 0x41, 0x31, 0x55, 0x64, - 0x44, 0x77, 0x45, 0x42, 0x2F, 0x77, 0x51, 0x45, 0x0A, 0x41, - 0x77, 0x49, 0x42, 0x68, 0x6A, 0x41, 0x4B, 0x42, 0x67, 0x67, - 0x71, 0x67, 0x52, 0x7A, 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, - 0x51, 0x4E, 0x49, 0x41, 0x44, 0x42, 0x46, 0x41, 0x69, 0x42, - 0x48, 0x54, 0x67, 0x41, 0x44, 0x71, 0x7A, 0x53, 0x68, 0x72, - 0x31, 0x6B, 0x35, 0x6A, 0x32, 0x41, 0x32, 0x76, 0x34, 0x6D, - 0x49, 0x51, 0x6B, 0x45, 0x6E, 0x77, 0x64, 0x31, 0x58, 0x79, - 0x58, 0x6E, 0x4C, 0x0A, 0x48, 0x31, 0x5A, 0x63, 0x46, 0x72, - 0x55, 0x6F, 0x76, 0x51, 0x49, 0x68, 0x41, 0x49, 0x73, 0x75, - 0x4A, 0x65, 0x73, 0x68, 0x6D, 0x36, 0x6B, 0x72, 0x70, 0x6D, - 0x70, 0x62, 0x32, 0x36, 0x66, 0x48, 0x4B, 0x78, 0x48, 0x66, - 0x63, 0x78, 0x57, 0x74, 0x35, 0x4D, 0x58, 0x44, 0x77, 0x76, - 0x4F, 0x30, 0x74, 0x47, 0x65, 0x76, 0x31, 0x31, 0x45, 0x63, - 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, - 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, - 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A + 0x62, 0x66, 0x3A, 0x30, 0x32, 0x3A, 0x31, 0x38, 0x3A, 0x62, + 0x36, 0x3A, 0x30, 0x31, 0x3A, 0x62, 0x65, 0x3A, 0x66, 0x66, + 0x3A, 0x30, 0x35, 0x3A, 0x64, 0x37, 0x3A, 0x32, 0x65, 0x3A, + 0x66, 0x32, 0x3A, 0x37, 0x62, 0x3A, 0x36, 0x37, 0x3A, 0x65, + 0x62, 0x3A, 0x31, 0x36, 0x3A, 0x65, 0x39, 0x3A, 0x38, 0x65, + 0x3A, 0x63, 0x35, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, + 0x45, 0x47, 0x49, 0x4E, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, + 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, + 0x2D, 0x0A, 0x4D, 0x49, 0x49, 0x43, 0x6C, 0x7A, 0x43, 0x43, + 0x41, 0x6A, 0x79, 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, + 0x49, 0x42, 0x41, 0x54, 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, + 0x67, 0x52, 0x7A, 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, 0x54, + 0x43, 0x42, 0x6C, 0x54, 0x45, 0x4C, 0x4D, 0x41, 0x6B, 0x47, + 0x41, 0x31, 0x55, 0x45, 0x42, 0x68, 0x4D, 0x43, 0x56, 0x56, + 0x4D, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x0A, 0x42, 0x67, 0x4E, + 0x56, 0x42, 0x41, 0x67, 0x4D, 0x42, 0x30, 0x31, 0x76, 0x62, + 0x6E, 0x52, 0x68, 0x62, 0x6D, 0x45, 0x78, 0x45, 0x44, 0x41, + 0x4F, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x63, 0x4D, 0x42, + 0x30, 0x4A, 0x76, 0x65, 0x6D, 0x56, 0x74, 0x59, 0x57, 0x34, + 0x78, 0x46, 0x44, 0x41, 0x53, 0x42, 0x67, 0x4E, 0x56, 0x42, + 0x41, 0x6F, 0x4D, 0x43, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, + 0x54, 0x0A, 0x55, 0x30, 0x78, 0x66, 0x55, 0x30, 0x30, 0x79, + 0x4D, 0x52, 0x45, 0x77, 0x44, 0x77, 0x59, 0x44, 0x56, 0x51, + 0x51, 0x4C, 0x44, 0x41, 0x68, 0x53, 0x62, 0x32, 0x39, 0x30, + 0x4C, 0x56, 0x4E, 0x4E, 0x4D, 0x6A, 0x45, 0x59, 0x4D, 0x42, + 0x59, 0x47, 0x41, 0x31, 0x55, 0x45, 0x41, 0x77, 0x77, 0x50, + 0x64, 0x33, 0x64, 0x33, 0x4C, 0x6E, 0x64, 0x76, 0x62, 0x47, + 0x5A, 0x7A, 0x63, 0x32, 0x77, 0x75, 0x0A, 0x59, 0x32, 0x39, + 0x74, 0x4D, 0x52, 0x38, 0x77, 0x48, 0x51, 0x59, 0x4A, 0x4B, + 0x6F, 0x5A, 0x49, 0x68, 0x76, 0x63, 0x4E, 0x41, 0x51, 0x6B, + 0x42, 0x46, 0x68, 0x42, 0x70, 0x62, 0x6D, 0x5A, 0x76, 0x51, + 0x48, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x7A, 0x63, 0x32, 0x77, + 0x75, 0x59, 0x32, 0x39, 0x74, 0x4D, 0x42, 0x34, 0x58, 0x44, + 0x54, 0x49, 0x32, 0x4D, 0x44, 0x49, 0x78, 0x4F, 0x44, 0x45, + 0x33, 0x0A, 0x4E, 0x54, 0x59, 0x31, 0x4E, 0x31, 0x6F, 0x58, + 0x44, 0x54, 0x49, 0x34, 0x4D, 0x54, 0x45, 0x78, 0x4E, 0x44, + 0x45, 0x33, 0x4E, 0x54, 0x59, 0x31, 0x4E, 0x31, 0x6F, 0x77, + 0x67, 0x61, 0x77, 0x78, 0x43, 0x7A, 0x41, 0x4A, 0x42, 0x67, + 0x4E, 0x56, 0x42, 0x41, 0x59, 0x54, 0x41, 0x6C, 0x56, 0x54, + 0x4D, 0x52, 0x41, 0x77, 0x44, 0x67, 0x59, 0x44, 0x56, 0x51, + 0x51, 0x49, 0x44, 0x41, 0x64, 0x4E, 0x0A, 0x62, 0x32, 0x35, + 0x30, 0x59, 0x57, 0x35, 0x68, 0x4D, 0x52, 0x41, 0x77, 0x44, + 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x48, 0x44, 0x41, 0x64, + 0x43, 0x62, 0x33, 0x70, 0x6C, 0x62, 0x57, 0x46, 0x75, 0x4D, + 0x52, 0x51, 0x77, 0x45, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, + 0x4B, 0x44, 0x41, 0x74, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x55, + 0x31, 0x4E, 0x4D, 0x58, 0x33, 0x4E, 0x74, 0x4D, 0x6A, 0x45, + 0x50, 0x0A, 0x4D, 0x41, 0x30, 0x47, 0x41, 0x31, 0x55, 0x45, + 0x43, 0x77, 0x77, 0x47, 0x51, 0x30, 0x45, 0x74, 0x63, 0x32, + 0x30, 0x79, 0x4D, 0x52, 0x67, 0x77, 0x46, 0x67, 0x59, 0x44, + 0x56, 0x51, 0x51, 0x44, 0x44, 0x41, 0x39, 0x33, 0x64, 0x33, + 0x63, 0x75, 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, + 0x62, 0x43, 0x35, 0x6A, 0x62, 0x32, 0x30, 0x78, 0x48, 0x7A, + 0x41, 0x64, 0x42, 0x67, 0x6B, 0x71, 0x0A, 0x68, 0x6B, 0x69, + 0x47, 0x39, 0x77, 0x30, 0x42, 0x43, 0x51, 0x45, 0x57, 0x45, + 0x47, 0x6C, 0x75, 0x5A, 0x6D, 0x39, 0x41, 0x64, 0x32, 0x39, + 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x35, 0x6A, 0x62, + 0x32, 0x30, 0x78, 0x46, 0x7A, 0x41, 0x56, 0x42, 0x67, 0x6F, + 0x4A, 0x6B, 0x69, 0x61, 0x4A, 0x6B, 0x2F, 0x49, 0x73, 0x5A, + 0x41, 0x45, 0x42, 0x44, 0x41, 0x64, 0x33, 0x62, 0x32, 0x78, + 0x6D, 0x0A, 0x55, 0x31, 0x4E, 0x4D, 0x4D, 0x46, 0x6F, 0x77, + 0x46, 0x41, 0x59, 0x49, 0x4B, 0x6F, 0x45, 0x63, 0x7A, 0x31, + 0x55, 0x42, 0x67, 0x69, 0x30, 0x47, 0x43, 0x43, 0x71, 0x42, + 0x48, 0x4D, 0x39, 0x56, 0x41, 0x59, 0x49, 0x74, 0x41, 0x30, + 0x49, 0x41, 0x42, 0x43, 0x47, 0x53, 0x39, 0x38, 0x73, 0x6B, + 0x33, 0x32, 0x52, 0x4E, 0x75, 0x71, 0x74, 0x6D, 0x65, 0x34, + 0x4E, 0x31, 0x71, 0x53, 0x6E, 0x6E, 0x0A, 0x2F, 0x32, 0x52, + 0x6A, 0x74, 0x74, 0x56, 0x43, 0x67, 0x43, 0x43, 0x39, 0x34, + 0x75, 0x49, 0x43, 0x45, 0x6A, 0x75, 0x4F, 0x74, 0x41, 0x43, + 0x56, 0x43, 0x59, 0x44, 0x4C, 0x56, 0x75, 0x31, 0x4C, 0x79, + 0x6F, 0x31, 0x58, 0x35, 0x71, 0x34, 0x46, 0x30, 0x33, 0x59, + 0x6E, 0x59, 0x33, 0x45, 0x35, 0x69, 0x62, 0x64, 0x70, 0x35, + 0x6B, 0x69, 0x41, 0x72, 0x74, 0x47, 0x70, 0x53, 0x42, 0x4B, + 0x6A, 0x0A, 0x59, 0x7A, 0x42, 0x68, 0x4D, 0x42, 0x30, 0x47, + 0x41, 0x31, 0x55, 0x64, 0x44, 0x67, 0x51, 0x57, 0x42, 0x42, + 0x52, 0x48, 0x43, 0x6B, 0x68, 0x2B, 0x75, 0x77, 0x4B, 0x6F, + 0x57, 0x69, 0x5A, 0x58, 0x4B, 0x78, 0x6D, 0x70, 0x65, 0x32, + 0x47, 0x4C, 0x66, 0x31, 0x32, 0x5A, 0x62, 0x6A, 0x41, 0x66, + 0x42, 0x67, 0x4E, 0x56, 0x48, 0x53, 0x4D, 0x45, 0x47, 0x44, + 0x41, 0x57, 0x67, 0x42, 0x51, 0x30, 0x0A, 0x48, 0x58, 0x6C, + 0x45, 0x46, 0x58, 0x6D, 0x68, 0x73, 0x57, 0x4F, 0x5A, 0x34, + 0x2B, 0x31, 0x6C, 0x66, 0x47, 0x53, 0x4A, 0x67, 0x50, 0x2B, + 0x34, 0x37, 0x44, 0x41, 0x50, 0x42, 0x67, 0x4E, 0x56, 0x48, + 0x52, 0x4D, 0x42, 0x41, 0x66, 0x38, 0x45, 0x42, 0x54, 0x41, + 0x44, 0x41, 0x51, 0x48, 0x2F, 0x4D, 0x41, 0x34, 0x47, 0x41, + 0x31, 0x55, 0x64, 0x44, 0x77, 0x45, 0x42, 0x2F, 0x77, 0x51, + 0x45, 0x0A, 0x41, 0x77, 0x49, 0x42, 0x68, 0x6A, 0x41, 0x4B, + 0x42, 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, 0x50, 0x56, 0x51, + 0x47, 0x44, 0x64, 0x51, 0x4E, 0x4A, 0x41, 0x44, 0x42, 0x47, + 0x41, 0x69, 0x45, 0x41, 0x73, 0x72, 0x6C, 0x62, 0x41, 0x71, + 0x31, 0x34, 0x2B, 0x46, 0x4B, 0x36, 0x5A, 0x38, 0x2F, 0x4C, + 0x4A, 0x5A, 0x75, 0x36, 0x32, 0x56, 0x62, 0x31, 0x70, 0x2F, + 0x2B, 0x76, 0x4A, 0x53, 0x62, 0x56, 0x0A, 0x39, 0x76, 0x50, + 0x7A, 0x70, 0x76, 0x57, 0x61, 0x4C, 0x35, 0x73, 0x43, 0x49, + 0x51, 0x43, 0x38, 0x6C, 0x76, 0x4D, 0x35, 0x45, 0x33, 0x62, + 0x63, 0x41, 0x6A, 0x55, 0x35, 0x44, 0x74, 0x77, 0x4B, 0x61, + 0x62, 0x38, 0x43, 0x47, 0x4C, 0x59, 0x42, 0x76, 0x76, 0x38, + 0x46, 0x31, 0x79, 0x37, 0x79, 0x65, 0x32, 0x66, 0x72, 0x46, + 0x75, 0x6D, 0x4F, 0x78, 0x51, 0x3D, 0x3D, 0x0A, 0x2D, 0x2D, + 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x43, 0x45, 0x52, + 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, 0x2D, + 0x2D, 0x2D, 0x2D, 0x0A }; #define sizeof_ca_sm2 (sizeof(ca_sm2)) @@ -907,352 +905,348 @@ static const unsigned char client_sm2[] = 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6C, 0x20, 0x4E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x36, 0x30, 0x3A, 0x61, 0x30, 0x3A, 0x34, - 0x61, 0x3A, 0x30, 0x62, 0x3A, 0x33, 0x36, 0x3A, 0x65, 0x62, - 0x3A, 0x37, 0x64, 0x3A, 0x65, 0x31, 0x3A, 0x33, 0x66, 0x3A, - 0x37, 0x34, 0x3A, 0x32, 0x39, 0x3A, 0x61, 0x39, 0x3A, 0x32, - 0x39, 0x3A, 0x62, 0x34, 0x3A, 0x30, 0x35, 0x3A, 0x36, 0x63, - 0x3A, 0x31, 0x37, 0x3A, 0x66, 0x37, 0x3A, 0x61, 0x36, 0x3A, - 0x64, 0x34, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x36, 0x33, 0x3A, 0x64, 0x64, 0x3A, 0x37, + 0x35, 0x3A, 0x36, 0x33, 0x3A, 0x38, 0x61, 0x3A, 0x62, 0x30, + 0x3A, 0x35, 0x31, 0x3A, 0x34, 0x66, 0x3A, 0x39, 0x63, 0x3A, + 0x34, 0x65, 0x3A, 0x66, 0x66, 0x3A, 0x36, 0x64, 0x3A, 0x35, + 0x35, 0x3A, 0x34, 0x65, 0x3A, 0x63, 0x64, 0x3A, 0x65, 0x65, + 0x3A, 0x38, 0x66, 0x3A, 0x32, 0x36, 0x3A, 0x64, 0x33, 0x3A, + 0x38, 0x30, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x3A, - 0x20, 0x43, 0x20, 0x3D, 0x20, 0x55, 0x53, 0x2C, 0x20, 0x53, - 0x54, 0x20, 0x3D, 0x20, 0x4D, 0x6F, 0x6E, 0x74, 0x61, 0x6E, - 0x61, 0x2C, 0x20, 0x4C, 0x20, 0x3D, 0x20, 0x42, 0x6F, 0x7A, - 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x20, 0x3D, 0x20, - 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, - 0x32, 0x2C, 0x20, 0x4F, 0x55, 0x20, 0x3D, 0x20, 0x43, 0x6C, - 0x69, 0x65, 0x6E, 0x74, 0x2D, 0x73, 0x6D, 0x32, 0x2C, 0x20, - 0x43, 0x4E, 0x20, 0x3D, 0x20, 0x77, 0x77, 0x77, 0x2E, 0x77, - 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, - 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x20, 0x3D, 0x20, 0x69, 0x6E, 0x66, - 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, - 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x55, 0x49, 0x44, 0x20, 0x3D, - 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x56, 0x61, 0x6C, - 0x69, 0x64, 0x69, 0x74, 0x79, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, 0x6F, - 0x74, 0x20, 0x42, 0x65, 0x66, 0x6F, 0x72, 0x65, 0x3A, 0x20, - 0x46, 0x65, 0x62, 0x20, 0x31, 0x35, 0x20, 0x30, 0x36, 0x3A, - 0x32, 0x33, 0x3A, 0x30, 0x37, 0x20, 0x32, 0x30, 0x32, 0x33, - 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, - 0x20, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x3A, 0x20, 0x4E, - 0x6F, 0x76, 0x20, 0x31, 0x31, 0x20, 0x30, 0x36, 0x3A, 0x32, - 0x33, 0x3A, 0x30, 0x37, 0x20, 0x32, 0x30, 0x32, 0x35, 0x20, - 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x3A, - 0x20, 0x43, 0x20, 0x3D, 0x20, 0x55, 0x53, 0x2C, 0x20, 0x53, - 0x54, 0x20, 0x3D, 0x20, 0x4D, 0x6F, 0x6E, 0x74, 0x61, 0x6E, - 0x61, 0x2C, 0x20, 0x4C, 0x20, 0x3D, 0x20, 0x42, 0x6F, 0x7A, - 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x20, 0x3D, 0x20, - 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, - 0x32, 0x2C, 0x20, 0x4F, 0x55, 0x20, 0x3D, 0x20, 0x43, 0x6C, + 0x20, 0x43, 0x3D, 0x55, 0x53, 0x2C, 0x20, 0x53, 0x54, 0x3D, + 0x4D, 0x6F, 0x6E, 0x74, 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, + 0x3D, 0x42, 0x6F, 0x7A, 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, + 0x4F, 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, + 0x73, 0x6D, 0x32, 0x2C, 0x20, 0x4F, 0x55, 0x3D, 0x43, 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x2D, 0x73, 0x6D, 0x32, 0x2C, 0x20, - 0x43, 0x4E, 0x20, 0x3D, 0x20, 0x77, 0x77, 0x77, 0x2E, 0x77, - 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, - 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x20, 0x3D, 0x20, 0x69, 0x6E, 0x66, + 0x43, 0x4E, 0x3D, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x6F, 0x6C, + 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, + 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, + 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, + 0x20, 0x55, 0x49, 0x44, 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x53, + 0x53, 0x4C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, 0x79, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x42, 0x65, 0x66, 0x6F, + 0x72, 0x65, 0x3A, 0x20, 0x46, 0x65, 0x62, 0x20, 0x31, 0x38, + 0x20, 0x31, 0x37, 0x3A, 0x35, 0x36, 0x3A, 0x35, 0x37, 0x20, + 0x32, 0x30, 0x32, 0x36, 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x41, 0x66, 0x74, 0x65, 0x72, + 0x20, 0x3A, 0x20, 0x4E, 0x6F, 0x76, 0x20, 0x31, 0x34, 0x20, + 0x31, 0x37, 0x3A, 0x35, 0x36, 0x3A, 0x35, 0x37, 0x20, 0x32, + 0x30, 0x32, 0x38, 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, 0x6A, + 0x65, 0x63, 0x74, 0x3A, 0x20, 0x43, 0x3D, 0x55, 0x53, 0x2C, + 0x20, 0x53, 0x54, 0x3D, 0x4D, 0x6F, 0x6E, 0x74, 0x61, 0x6E, + 0x61, 0x2C, 0x20, 0x4C, 0x3D, 0x42, 0x6F, 0x7A, 0x65, 0x6D, + 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x3D, 0x77, 0x6F, 0x6C, 0x66, + 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, 0x32, 0x2C, 0x20, 0x4F, + 0x55, 0x3D, 0x43, 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x2D, 0x73, + 0x6D, 0x32, 0x2C, 0x20, 0x43, 0x4E, 0x3D, 0x77, 0x77, 0x77, + 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, + 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, - 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x55, 0x49, 0x44, 0x20, 0x3D, - 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, - 0x6A, 0x65, 0x63, 0x74, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, - 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x6E, 0x66, 0x6F, - 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, - 0x20, 0x4B, 0x65, 0x79, 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, - 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x73, 0x6D, 0x32, 0x0A, + 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x55, 0x49, 0x44, 0x3D, 0x77, + 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, + 0x63, 0x74, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x20, + 0x4B, 0x65, 0x79, 0x20, 0x49, 0x6E, 0x66, 0x6F, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, - 0x69, 0x63, 0x2D, 0x4B, 0x65, 0x79, 0x3A, 0x20, 0x28, 0x32, - 0x35, 0x36, 0x20, 0x62, 0x69, 0x74, 0x29, 0x0A, 0x20, 0x20, + 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x20, 0x4B, + 0x65, 0x79, 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, + 0x68, 0x6D, 0x3A, 0x20, 0x73, 0x6D, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x70, 0x75, 0x62, 0x3A, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, + 0x2D, 0x4B, 0x65, 0x79, 0x3A, 0x20, 0x28, 0x32, 0x35, 0x36, + 0x20, 0x62, 0x69, 0x74, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, - 0x34, 0x3A, 0x33, 0x61, 0x3A, 0x31, 0x64, 0x3A, 0x65, 0x38, - 0x3A, 0x63, 0x62, 0x3A, 0x34, 0x62, 0x3A, 0x64, 0x33, 0x3A, - 0x32, 0x65, 0x3A, 0x33, 0x66, 0x3A, 0x34, 0x62, 0x3A, 0x30, - 0x37, 0x3A, 0x33, 0x66, 0x3A, 0x62, 0x30, 0x3A, 0x32, 0x31, - 0x3A, 0x66, 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x35, 0x3A, 0x39, 0x65, - 0x3A, 0x64, 0x39, 0x3A, 0x63, 0x61, 0x3A, 0x33, 0x61, 0x3A, - 0x39, 0x33, 0x3A, 0x39, 0x33, 0x3A, 0x39, 0x35, 0x3A, 0x37, - 0x36, 0x3A, 0x31, 0x64, 0x3A, 0x33, 0x30, 0x3A, 0x64, 0x39, - 0x3A, 0x30, 0x62, 0x3A, 0x66, 0x35, 0x3A, 0x35, 0x36, 0x3A, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x70, 0x75, 0x62, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x65, 0x64, 0x3A, 0x31, 0x39, 0x3A, 0x36, 0x30, 0x3A, - 0x65, 0x64, 0x3A, 0x30, 0x31, 0x3A, 0x34, 0x63, 0x3A, 0x66, - 0x36, 0x3A, 0x36, 0x37, 0x3A, 0x31, 0x64, 0x3A, 0x66, 0x31, - 0x3A, 0x61, 0x63, 0x3A, 0x61, 0x38, 0x3A, 0x37, 0x34, 0x3A, - 0x30, 0x64, 0x3A, 0x62, 0x32, 0x3A, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x34, 0x3A, + 0x33, 0x61, 0x3A, 0x31, 0x64, 0x3A, 0x65, 0x38, 0x3A, 0x63, + 0x62, 0x3A, 0x34, 0x62, 0x3A, 0x64, 0x33, 0x3A, 0x32, 0x65, + 0x3A, 0x33, 0x66, 0x3A, 0x34, 0x62, 0x3A, 0x30, 0x37, 0x3A, + 0x33, 0x66, 0x3A, 0x62, 0x30, 0x3A, 0x32, 0x31, 0x3A, 0x66, + 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x37, 0x37, 0x3A, - 0x63, 0x38, 0x3A, 0x34, 0x39, 0x3A, 0x33, 0x38, 0x3A, 0x65, - 0x34, 0x3A, 0x66, 0x66, 0x3A, 0x34, 0x63, 0x3A, 0x65, 0x66, - 0x3A, 0x38, 0x64, 0x3A, 0x36, 0x64, 0x3A, 0x38, 0x37, 0x3A, - 0x66, 0x36, 0x3A, 0x34, 0x65, 0x3A, 0x63, 0x37, 0x3A, 0x66, - 0x38, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x63, 0x35, 0x3A, 0x39, 0x65, 0x3A, 0x64, + 0x39, 0x3A, 0x63, 0x61, 0x3A, 0x33, 0x61, 0x3A, 0x39, 0x33, + 0x3A, 0x39, 0x33, 0x3A, 0x39, 0x35, 0x3A, 0x37, 0x36, 0x3A, + 0x31, 0x64, 0x3A, 0x33, 0x30, 0x3A, 0x64, 0x39, 0x3A, 0x30, + 0x62, 0x3A, 0x66, 0x35, 0x3A, 0x35, 0x36, 0x3A, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, + 0x64, 0x3A, 0x31, 0x39, 0x3A, 0x36, 0x30, 0x3A, 0x65, 0x64, + 0x3A, 0x30, 0x31, 0x3A, 0x34, 0x63, 0x3A, 0x66, 0x36, 0x3A, + 0x36, 0x37, 0x3A, 0x31, 0x64, 0x3A, 0x66, 0x31, 0x3A, 0x61, + 0x63, 0x3A, 0x61, 0x38, 0x3A, 0x37, 0x34, 0x3A, 0x30, 0x64, + 0x3A, 0x62, 0x32, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x37, 0x37, 0x3A, 0x63, 0x38, + 0x3A, 0x34, 0x39, 0x3A, 0x33, 0x38, 0x3A, 0x65, 0x34, 0x3A, + 0x66, 0x66, 0x3A, 0x34, 0x63, 0x3A, 0x65, 0x66, 0x3A, 0x38, + 0x64, 0x3A, 0x36, 0x64, 0x3A, 0x38, 0x37, 0x3A, 0x66, 0x36, + 0x3A, 0x34, 0x65, 0x3A, 0x63, 0x37, 0x3A, 0x66, 0x38, 0x3A, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x33, 0x39, 0x3A, 0x37, 0x34, 0x3A, 0x37, - 0x30, 0x3A, 0x37, 0x30, 0x3A, 0x62, 0x35, 0x0A, 0x20, 0x20, + 0x20, 0x33, 0x39, 0x3A, 0x37, 0x34, 0x3A, 0x37, 0x30, 0x3A, + 0x37, 0x30, 0x3A, 0x62, 0x35, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x41, 0x53, 0x4E, 0x31, 0x20, 0x4F, - 0x49, 0x44, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, - 0x76, 0x33, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6E, 0x73, 0x69, - 0x6F, 0x6E, 0x73, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, - 0x39, 0x76, 0x33, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, - 0x74, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, + 0x20, 0x20, 0x41, 0x53, 0x4E, 0x31, 0x20, 0x4F, 0x49, 0x44, + 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, + 0x20, 0x65, 0x78, 0x74, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, + 0x73, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, + 0x33, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, + 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x45, 0x34, 0x3A, 0x32, 0x31, - 0x3A, 0x42, 0x32, 0x3A, 0x43, 0x35, 0x3A, 0x45, 0x35, 0x3A, - 0x44, 0x34, 0x3A, 0x39, 0x45, 0x3A, 0x38, 0x32, 0x3A, 0x43, - 0x41, 0x3A, 0x46, 0x38, 0x3A, 0x36, 0x37, 0x3A, 0x46, 0x32, - 0x3A, 0x32, 0x38, 0x3A, 0x39, 0x39, 0x3A, 0x46, 0x36, 0x3A, - 0x38, 0x35, 0x3A, 0x45, 0x38, 0x3A, 0x46, 0x31, 0x3A, 0x35, - 0x35, 0x3A, 0x45, 0x46, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, - 0x39, 0x76, 0x33, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, - 0x69, 0x74, 0x79, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, - 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3A, 0x20, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6B, 0x65, 0x79, - 0x69, 0x64, 0x3A, 0x45, 0x34, 0x3A, 0x32, 0x31, 0x3A, 0x42, + 0x20, 0x20, 0x20, 0x45, 0x34, 0x3A, 0x32, 0x31, 0x3A, 0x42, 0x32, 0x3A, 0x43, 0x35, 0x3A, 0x45, 0x35, 0x3A, 0x44, 0x34, 0x3A, 0x39, 0x45, 0x3A, 0x38, 0x32, 0x3A, 0x43, 0x41, 0x3A, 0x46, 0x38, 0x3A, 0x36, 0x37, 0x3A, 0x46, 0x32, 0x3A, 0x32, 0x38, 0x3A, 0x39, 0x39, 0x3A, 0x46, 0x36, 0x3A, 0x38, 0x35, 0x3A, 0x45, 0x38, 0x3A, 0x46, 0x31, 0x3A, 0x35, 0x35, 0x3A, 0x45, 0x46, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, - 0x69, 0x72, 0x4E, 0x61, 0x6D, 0x65, 0x3A, 0x2F, 0x43, 0x3D, - 0x55, 0x53, 0x2F, 0x53, 0x54, 0x3D, 0x4D, 0x6F, 0x6E, 0x74, - 0x61, 0x6E, 0x61, 0x2F, 0x4C, 0x3D, 0x42, 0x6F, 0x7A, 0x65, - 0x6D, 0x61, 0x6E, 0x2F, 0x4F, 0x3D, 0x77, 0x6F, 0x6C, 0x66, - 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, 0x32, 0x2F, 0x4F, 0x55, - 0x3D, 0x43, 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x2D, 0x73, 0x6D, - 0x32, 0x2F, 0x43, 0x4E, 0x3D, 0x77, 0x77, 0x77, 0x2E, 0x77, - 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, - 0x2F, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, - 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, - 0x2F, 0x55, 0x49, 0x44, 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x53, - 0x53, 0x4C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, - 0x65, 0x72, 0x69, 0x61, 0x6C, 0x3A, 0x36, 0x30, 0x3A, 0x41, - 0x30, 0x3A, 0x34, 0x41, 0x3A, 0x30, 0x42, 0x3A, 0x33, 0x36, - 0x3A, 0x45, 0x42, 0x3A, 0x37, 0x44, 0x3A, 0x45, 0x31, 0x3A, - 0x33, 0x46, 0x3A, 0x37, 0x34, 0x3A, 0x32, 0x39, 0x3A, 0x41, - 0x39, 0x3A, 0x32, 0x39, 0x3A, 0x42, 0x34, 0x3A, 0x30, 0x35, - 0x3A, 0x36, 0x43, 0x3A, 0x31, 0x37, 0x3A, 0x46, 0x37, 0x3A, - 0x41, 0x36, 0x3A, 0x44, 0x34, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, - 0x30, 0x39, 0x76, 0x33, 0x20, 0x42, 0x61, 0x73, 0x69, 0x63, - 0x20, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6E, - 0x74, 0x73, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, + 0x33, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, + 0x79, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x43, 0x41, 0x3A, 0x54, 0x52, 0x55, 0x45, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x6B, 0x65, 0x79, 0x69, 0x64, + 0x3A, 0x45, 0x34, 0x3A, 0x32, 0x31, 0x3A, 0x42, 0x32, 0x3A, + 0x43, 0x35, 0x3A, 0x45, 0x35, 0x3A, 0x44, 0x34, 0x3A, 0x39, + 0x45, 0x3A, 0x38, 0x32, 0x3A, 0x43, 0x41, 0x3A, 0x46, 0x38, + 0x3A, 0x36, 0x37, 0x3A, 0x46, 0x32, 0x3A, 0x32, 0x38, 0x3A, + 0x39, 0x39, 0x3A, 0x46, 0x36, 0x3A, 0x38, 0x35, 0x3A, 0x45, + 0x38, 0x3A, 0x46, 0x31, 0x3A, 0x35, 0x35, 0x3A, 0x45, 0x46, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x69, 0x72, + 0x4E, 0x61, 0x6D, 0x65, 0x3A, 0x2F, 0x43, 0x3D, 0x55, 0x53, + 0x2F, 0x53, 0x54, 0x3D, 0x4D, 0x6F, 0x6E, 0x74, 0x61, 0x6E, + 0x61, 0x2F, 0x4C, 0x3D, 0x42, 0x6F, 0x7A, 0x65, 0x6D, 0x61, + 0x6E, 0x2F, 0x4F, 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, + 0x4C, 0x5F, 0x73, 0x6D, 0x32, 0x2F, 0x4F, 0x55, 0x3D, 0x43, + 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x2D, 0x73, 0x6D, 0x32, 0x2F, + 0x43, 0x4E, 0x3D, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x6F, 0x6C, + 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x65, + 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, + 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x55, + 0x49, 0x44, 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x72, + 0x69, 0x61, 0x6C, 0x3A, 0x36, 0x33, 0x3A, 0x44, 0x44, 0x3A, + 0x37, 0x35, 0x3A, 0x36, 0x33, 0x3A, 0x38, 0x41, 0x3A, 0x42, + 0x30, 0x3A, 0x35, 0x31, 0x3A, 0x34, 0x46, 0x3A, 0x39, 0x43, + 0x3A, 0x34, 0x45, 0x3A, 0x46, 0x46, 0x3A, 0x36, 0x44, 0x3A, + 0x35, 0x35, 0x3A, 0x34, 0x45, 0x3A, 0x43, 0x44, 0x3A, 0x45, + 0x45, 0x3A, 0x38, 0x46, 0x3A, 0x32, 0x36, 0x3A, 0x44, 0x33, + 0x3A, 0x38, 0x30, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, + 0x76, 0x33, 0x20, 0x42, 0x61, 0x73, 0x69, 0x63, 0x20, 0x43, + 0x6F, 0x6E, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6E, 0x74, 0x73, + 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, + 0x41, 0x3A, 0x54, 0x52, 0x55, 0x45, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, + 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x53, 0x75, 0x62, 0x6A, + 0x65, 0x63, 0x74, 0x20, 0x41, 0x6C, 0x74, 0x65, 0x72, 0x6E, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x4E, 0x61, 0x6D, 0x65, + 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, + 0x4E, 0x53, 0x3A, 0x65, 0x78, 0x61, 0x6D, 0x70, 0x6C, 0x65, + 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x49, 0x50, 0x20, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3A, 0x31, 0x32, 0x37, + 0x2E, 0x30, 0x2E, 0x30, 0x2E, 0x31, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, + 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x45, 0x78, 0x74, 0x65, + 0x6E, 0x64, 0x65, 0x64, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x55, + 0x73, 0x61, 0x67, 0x65, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x53, 0x75, - 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x41, 0x6C, 0x74, 0x65, - 0x72, 0x6E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x4E, 0x61, - 0x6D, 0x65, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x44, 0x4E, 0x53, 0x3A, 0x65, 0x78, 0x61, 0x6D, 0x70, - 0x6C, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x49, 0x50, - 0x20, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3A, 0x31, - 0x32, 0x37, 0x2E, 0x30, 0x2E, 0x30, 0x2E, 0x31, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x45, 0x78, - 0x74, 0x65, 0x6E, 0x64, 0x65, 0x64, 0x20, 0x4B, 0x65, 0x79, - 0x20, 0x55, 0x73, 0x61, 0x67, 0x65, 0x3A, 0x20, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x4C, 0x53, 0x20, 0x57, - 0x65, 0x62, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, - 0x41, 0x75, 0x74, 0x68, 0x65, 0x6E, 0x74, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x54, 0x4C, 0x53, 0x20, - 0x57, 0x65, 0x62, 0x20, 0x43, 0x6C, 0x69, 0x65, 0x6E, 0x74, - 0x20, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6E, 0x74, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, - 0x41, 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, - 0x20, 0x53, 0x4D, 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, - 0x53, 0x4D, 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, - 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x56, 0x61, - 0x6C, 0x75, 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x33, 0x30, 0x3A, 0x34, 0x36, 0x3A, 0x30, - 0x32, 0x3A, 0x32, 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x38, 0x66, - 0x3A, 0x62, 0x32, 0x3A, 0x62, 0x35, 0x3A, 0x39, 0x35, 0x3A, - 0x38, 0x66, 0x3A, 0x37, 0x39, 0x3A, 0x66, 0x36, 0x3A, 0x35, - 0x65, 0x3A, 0x37, 0x35, 0x3A, 0x65, 0x35, 0x3A, 0x63, 0x35, - 0x3A, 0x65, 0x39, 0x3A, 0x39, 0x61, 0x3A, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x31, 0x32, 0x3A, 0x64, - 0x32, 0x3A, 0x30, 0x66, 0x3A, 0x37, 0x38, 0x3A, 0x39, 0x66, - 0x3A, 0x63, 0x30, 0x3A, 0x31, 0x64, 0x3A, 0x38, 0x64, 0x3A, - 0x31, 0x63, 0x3A, 0x62, 0x65, 0x3A, 0x36, 0x62, 0x3A, 0x30, - 0x63, 0x3A, 0x66, 0x31, 0x3A, 0x66, 0x35, 0x3A, 0x35, 0x37, - 0x3A, 0x36, 0x30, 0x3A, 0x64, 0x62, 0x3A, 0x39, 0x31, 0x3A, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, - 0x66, 0x3A, 0x30, 0x32, 0x3A, 0x32, 0x31, 0x3A, 0x30, 0x30, - 0x3A, 0x38, 0x37, 0x3A, 0x35, 0x65, 0x3A, 0x37, 0x64, 0x3A, - 0x65, 0x34, 0x3A, 0x64, 0x36, 0x3A, 0x33, 0x61, 0x3A, 0x62, - 0x62, 0x3A, 0x37, 0x62, 0x3A, 0x39, 0x38, 0x3A, 0x32, 0x37, - 0x3A, 0x38, 0x35, 0x3A, 0x64, 0x65, 0x3A, 0x37, 0x61, 0x3A, - 0x66, 0x30, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x32, 0x31, 0x3A, 0x65, 0x32, 0x3A, 0x36, 0x36, - 0x3A, 0x61, 0x31, 0x3A, 0x39, 0x66, 0x3A, 0x32, 0x36, 0x3A, - 0x65, 0x30, 0x3A, 0x64, 0x64, 0x3A, 0x38, 0x36, 0x3A, 0x32, - 0x33, 0x3A, 0x62, 0x34, 0x3A, 0x63, 0x38, 0x3A, 0x63, 0x30, - 0x3A, 0x34, 0x36, 0x3A, 0x35, 0x61, 0x3A, 0x66, 0x32, 0x3A, - 0x34, 0x39, 0x3A, 0x38, 0x64, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, - 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x43, 0x45, 0x52, - 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, 0x2D, - 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x49, 0x49, 0x44, 0x79, 0x54, - 0x43, 0x43, 0x41, 0x32, 0x36, 0x67, 0x41, 0x77, 0x49, 0x42, - 0x41, 0x67, 0x49, 0x55, 0x59, 0x4B, 0x42, 0x4B, 0x43, 0x7A, - 0x62, 0x72, 0x66, 0x65, 0x45, 0x2F, 0x64, 0x43, 0x6D, 0x70, - 0x4B, 0x62, 0x51, 0x46, 0x62, 0x42, 0x66, 0x33, 0x70, 0x74, - 0x51, 0x77, 0x43, 0x67, 0x59, 0x49, 0x4B, 0x6F, 0x45, 0x63, - 0x7A, 0x31, 0x55, 0x42, 0x67, 0x33, 0x55, 0x77, 0x0A, 0x67, - 0x62, 0x41, 0x78, 0x43, 0x7A, 0x41, 0x4A, 0x42, 0x67, 0x4E, - 0x56, 0x42, 0x41, 0x59, 0x54, 0x41, 0x6C, 0x56, 0x54, 0x4D, - 0x52, 0x41, 0x77, 0x44, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, - 0x49, 0x44, 0x41, 0x64, 0x4E, 0x62, 0x32, 0x35, 0x30, 0x59, - 0x57, 0x35, 0x68, 0x4D, 0x52, 0x41, 0x77, 0x44, 0x67, 0x59, - 0x44, 0x56, 0x51, 0x51, 0x48, 0x44, 0x41, 0x64, 0x43, 0x62, - 0x33, 0x70, 0x6C, 0x0A, 0x62, 0x57, 0x46, 0x75, 0x4D, 0x52, - 0x51, 0x77, 0x45, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4B, - 0x44, 0x41, 0x74, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x55, 0x31, - 0x4E, 0x4D, 0x58, 0x33, 0x4E, 0x74, 0x4D, 0x6A, 0x45, 0x54, - 0x4D, 0x42, 0x45, 0x47, 0x41, 0x31, 0x55, 0x45, 0x43, 0x77, - 0x77, 0x4B, 0x51, 0x32, 0x78, 0x70, 0x5A, 0x57, 0x35, 0x30, - 0x4C, 0x58, 0x4E, 0x74, 0x4D, 0x6A, 0x45, 0x59, 0x0A, 0x4D, - 0x42, 0x59, 0x47, 0x41, 0x31, 0x55, 0x45, 0x41, 0x77, 0x77, - 0x50, 0x64, 0x33, 0x64, 0x33, 0x4C, 0x6E, 0x64, 0x76, 0x62, - 0x47, 0x5A, 0x7A, 0x63, 0x32, 0x77, 0x75, 0x59, 0x32, 0x39, - 0x74, 0x4D, 0x52, 0x38, 0x77, 0x48, 0x51, 0x59, 0x4A, 0x4B, - 0x6F, 0x5A, 0x49, 0x68, 0x76, 0x63, 0x4E, 0x41, 0x51, 0x6B, - 0x42, 0x46, 0x68, 0x42, 0x70, 0x62, 0x6D, 0x5A, 0x76, 0x51, - 0x48, 0x64, 0x76, 0x0A, 0x62, 0x47, 0x5A, 0x7A, 0x63, 0x32, - 0x77, 0x75, 0x59, 0x32, 0x39, 0x74, 0x4D, 0x52, 0x63, 0x77, - 0x46, 0x51, 0x59, 0x4B, 0x43, 0x5A, 0x49, 0x6D, 0x69, 0x5A, - 0x50, 0x79, 0x4C, 0x47, 0x51, 0x42, 0x41, 0x51, 0x77, 0x48, - 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6C, 0x4E, 0x54, 0x54, 0x44, - 0x41, 0x65, 0x46, 0x77, 0x30, 0x79, 0x4D, 0x7A, 0x41, 0x79, - 0x4D, 0x54, 0x55, 0x77, 0x4E, 0x6A, 0x49, 0x7A, 0x0A, 0x4D, - 0x44, 0x64, 0x61, 0x46, 0x77, 0x30, 0x79, 0x4E, 0x54, 0x45, - 0x78, 0x4D, 0x54, 0x45, 0x77, 0x4E, 0x6A, 0x49, 0x7A, 0x4D, - 0x44, 0x64, 0x61, 0x4D, 0x49, 0x47, 0x77, 0x4D, 0x51, 0x73, - 0x77, 0x43, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x47, 0x45, - 0x77, 0x4A, 0x56, 0x55, 0x7A, 0x45, 0x51, 0x4D, 0x41, 0x34, - 0x47, 0x41, 0x31, 0x55, 0x45, 0x43, 0x41, 0x77, 0x48, 0x54, - 0x57, 0x39, 0x75, 0x0A, 0x64, 0x47, 0x46, 0x75, 0x59, 0x54, - 0x45, 0x51, 0x4D, 0x41, 0x34, 0x47, 0x41, 0x31, 0x55, 0x45, - 0x42, 0x77, 0x77, 0x48, 0x51, 0x6D, 0x39, 0x36, 0x5A, 0x57, - 0x31, 0x68, 0x62, 0x6A, 0x45, 0x55, 0x4D, 0x42, 0x49, 0x47, - 0x41, 0x31, 0x55, 0x45, 0x43, 0x67, 0x77, 0x4C, 0x64, 0x32, - 0x39, 0x73, 0x5A, 0x6C, 0x4E, 0x54, 0x54, 0x46, 0x39, 0x7A, - 0x62, 0x54, 0x49, 0x78, 0x45, 0x7A, 0x41, 0x52, 0x0A, 0x42, - 0x67, 0x4E, 0x56, 0x42, 0x41, 0x73, 0x4D, 0x43, 0x6B, 0x4E, - 0x73, 0x61, 0x57, 0x56, 0x75, 0x64, 0x43, 0x31, 0x7A, 0x62, - 0x54, 0x49, 0x78, 0x47, 0x44, 0x41, 0x57, 0x42, 0x67, 0x4E, - 0x56, 0x42, 0x41, 0x4D, 0x4D, 0x44, 0x33, 0x64, 0x33, 0x64, - 0x79, 0x35, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x63, 0x33, 0x4E, - 0x73, 0x4C, 0x6D, 0x4E, 0x76, 0x62, 0x54, 0x45, 0x66, 0x4D, - 0x42, 0x30, 0x47, 0x0A, 0x43, 0x53, 0x71, 0x47, 0x53, 0x49, - 0x62, 0x33, 0x44, 0x51, 0x45, 0x4A, 0x41, 0x52, 0x59, 0x51, - 0x61, 0x57, 0x35, 0x6D, 0x62, 0x30, 0x42, 0x33, 0x62, 0x32, - 0x78, 0x6D, 0x63, 0x33, 0x4E, 0x73, 0x4C, 0x6D, 0x4E, 0x76, - 0x62, 0x54, 0x45, 0x58, 0x4D, 0x42, 0x55, 0x47, 0x43, 0x67, - 0x6D, 0x53, 0x4A, 0x6F, 0x6D, 0x54, 0x38, 0x69, 0x78, 0x6B, - 0x41, 0x51, 0x45, 0x4D, 0x42, 0x33, 0x64, 0x76, 0x0A, 0x62, - 0x47, 0x5A, 0x54, 0x55, 0x30, 0x77, 0x77, 0x57, 0x6A, 0x41, - 0x55, 0x42, 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, 0x50, 0x56, - 0x51, 0x47, 0x43, 0x4C, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x45, - 0x63, 0x7A, 0x31, 0x55, 0x42, 0x67, 0x69, 0x30, 0x44, 0x51, - 0x67, 0x41, 0x45, 0x4F, 0x68, 0x33, 0x6F, 0x79, 0x30, 0x76, - 0x54, 0x4C, 0x6A, 0x39, 0x4C, 0x42, 0x7A, 0x2B, 0x77, 0x49, - 0x66, 0x37, 0x46, 0x0A, 0x6E, 0x74, 0x6E, 0x4B, 0x4F, 0x70, - 0x4F, 0x54, 0x6C, 0x58, 0x59, 0x64, 0x4D, 0x4E, 0x6B, 0x4C, - 0x39, 0x56, 0x62, 0x74, 0x47, 0x57, 0x44, 0x74, 0x41, 0x55, - 0x7A, 0x32, 0x5A, 0x78, 0x33, 0x78, 0x72, 0x4B, 0x68, 0x30, - 0x44, 0x62, 0x4A, 0x33, 0x79, 0x45, 0x6B, 0x34, 0x35, 0x50, - 0x39, 0x4D, 0x37, 0x34, 0x31, 0x74, 0x68, 0x2F, 0x5A, 0x4F, - 0x78, 0x2F, 0x67, 0x35, 0x64, 0x48, 0x42, 0x77, 0x0A, 0x74, - 0x61, 0x4F, 0x43, 0x41, 0x57, 0x45, 0x77, 0x67, 0x67, 0x46, - 0x64, 0x4D, 0x42, 0x30, 0x47, 0x41, 0x31, 0x55, 0x64, 0x44, - 0x67, 0x51, 0x57, 0x42, 0x42, 0x54, 0x6B, 0x49, 0x62, 0x4C, - 0x46, 0x35, 0x64, 0x53, 0x65, 0x67, 0x73, 0x72, 0x34, 0x5A, - 0x2F, 0x49, 0x6F, 0x6D, 0x66, 0x61, 0x46, 0x36, 0x50, 0x46, - 0x56, 0x37, 0x7A, 0x43, 0x42, 0x38, 0x41, 0x59, 0x44, 0x56, - 0x52, 0x30, 0x6A, 0x0A, 0x42, 0x49, 0x48, 0x6F, 0x4D, 0x49, - 0x48, 0x6C, 0x67, 0x42, 0x54, 0x6B, 0x49, 0x62, 0x4C, 0x46, - 0x35, 0x64, 0x53, 0x65, 0x67, 0x73, 0x72, 0x34, 0x5A, 0x2F, - 0x49, 0x6F, 0x6D, 0x66, 0x61, 0x46, 0x36, 0x50, 0x46, 0x56, - 0x37, 0x36, 0x47, 0x42, 0x74, 0x71, 0x53, 0x42, 0x73, 0x7A, - 0x43, 0x42, 0x73, 0x44, 0x45, 0x4C, 0x4D, 0x41, 0x6B, 0x47, - 0x41, 0x31, 0x55, 0x45, 0x42, 0x68, 0x4D, 0x43, 0x0A, 0x56, - 0x56, 0x4D, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, - 0x56, 0x42, 0x41, 0x67, 0x4D, 0x42, 0x30, 0x31, 0x76, 0x62, - 0x6E, 0x52, 0x68, 0x62, 0x6D, 0x45, 0x78, 0x45, 0x44, 0x41, - 0x4F, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x63, 0x4D, 0x42, - 0x30, 0x4A, 0x76, 0x65, 0x6D, 0x56, 0x74, 0x59, 0x57, 0x34, - 0x78, 0x46, 0x44, 0x41, 0x53, 0x42, 0x67, 0x4E, 0x56, 0x42, - 0x41, 0x6F, 0x4D, 0x0A, 0x43, 0x33, 0x64, 0x76, 0x62, 0x47, - 0x5A, 0x54, 0x55, 0x30, 0x78, 0x66, 0x63, 0x32, 0x30, 0x79, - 0x4D, 0x52, 0x4D, 0x77, 0x45, 0x51, 0x59, 0x44, 0x56, 0x51, - 0x51, 0x4C, 0x44, 0x41, 0x70, 0x44, 0x62, 0x47, 0x6C, 0x6C, - 0x62, 0x6E, 0x51, 0x74, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, - 0x67, 0x77, 0x46, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x44, - 0x44, 0x41, 0x39, 0x33, 0x64, 0x33, 0x63, 0x75, 0x0A, 0x64, - 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x35, - 0x6A, 0x62, 0x32, 0x30, 0x78, 0x48, 0x7A, 0x41, 0x64, 0x42, - 0x67, 0x6B, 0x71, 0x68, 0x6B, 0x69, 0x47, 0x39, 0x77, 0x30, - 0x42, 0x43, 0x51, 0x45, 0x57, 0x45, 0x47, 0x6C, 0x75, 0x5A, - 0x6D, 0x39, 0x41, 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, - 0x7A, 0x62, 0x43, 0x35, 0x6A, 0x62, 0x32, 0x30, 0x78, 0x46, - 0x7A, 0x41, 0x56, 0x0A, 0x42, 0x67, 0x6F, 0x4A, 0x6B, 0x69, - 0x61, 0x4A, 0x6B, 0x2F, 0x49, 0x73, 0x5A, 0x41, 0x45, 0x42, - 0x44, 0x41, 0x64, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x55, 0x31, - 0x4E, 0x4D, 0x67, 0x68, 0x52, 0x67, 0x6F, 0x45, 0x6F, 0x4C, - 0x4E, 0x75, 0x74, 0x39, 0x34, 0x54, 0x39, 0x30, 0x4B, 0x61, - 0x6B, 0x70, 0x74, 0x41, 0x56, 0x73, 0x46, 0x2F, 0x65, 0x6D, - 0x31, 0x44, 0x41, 0x4D, 0x42, 0x67, 0x4E, 0x56, 0x0A, 0x48, - 0x52, 0x4D, 0x45, 0x42, 0x54, 0x41, 0x44, 0x41, 0x51, 0x48, - 0x2F, 0x4D, 0x42, 0x77, 0x47, 0x41, 0x31, 0x55, 0x64, 0x45, - 0x51, 0x51, 0x56, 0x4D, 0x42, 0x4F, 0x43, 0x43, 0x32, 0x56, - 0x34, 0x59, 0x57, 0x31, 0x77, 0x62, 0x47, 0x55, 0x75, 0x59, - 0x32, 0x39, 0x74, 0x68, 0x77, 0x52, 0x2F, 0x41, 0x41, 0x41, - 0x42, 0x4D, 0x42, 0x30, 0x47, 0x41, 0x31, 0x55, 0x64, 0x4A, - 0x51, 0x51, 0x57, 0x0A, 0x4D, 0x42, 0x51, 0x47, 0x43, 0x43, - 0x73, 0x47, 0x41, 0x51, 0x55, 0x46, 0x42, 0x77, 0x4D, 0x42, - 0x42, 0x67, 0x67, 0x72, 0x42, 0x67, 0x45, 0x46, 0x42, 0x51, - 0x63, 0x44, 0x41, 0x6A, 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, - 0x67, 0x52, 0x7A, 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, 0x51, - 0x4E, 0x4A, 0x41, 0x44, 0x42, 0x47, 0x41, 0x69, 0x45, 0x41, - 0x6A, 0x37, 0x4B, 0x31, 0x6C, 0x59, 0x39, 0x35, 0x0A, 0x39, - 0x6C, 0x35, 0x31, 0x35, 0x63, 0x58, 0x70, 0x6D, 0x68, 0x4C, - 0x53, 0x44, 0x33, 0x69, 0x66, 0x77, 0x42, 0x32, 0x4E, 0x48, - 0x4C, 0x35, 0x72, 0x44, 0x50, 0x48, 0x31, 0x56, 0x32, 0x44, - 0x62, 0x6B, 0x55, 0x38, 0x43, 0x49, 0x51, 0x43, 0x48, 0x58, - 0x6E, 0x33, 0x6B, 0x31, 0x6A, 0x71, 0x37, 0x65, 0x35, 0x67, - 0x6E, 0x68, 0x64, 0x35, 0x36, 0x38, 0x43, 0x48, 0x69, 0x5A, - 0x71, 0x47, 0x66, 0x0A, 0x4A, 0x75, 0x44, 0x64, 0x68, 0x69, - 0x4F, 0x30, 0x79, 0x4D, 0x42, 0x47, 0x57, 0x76, 0x4A, 0x4A, - 0x6A, 0x51, 0x3D, 0x3D, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, - 0x45, 0x4E, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, - 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, - 0x0A + 0x20, 0x20, 0x20, 0x54, 0x4C, 0x53, 0x20, 0x57, 0x65, 0x62, + 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x41, 0x75, + 0x74, 0x68, 0x65, 0x6E, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6F, 0x6E, 0x2C, 0x20, 0x54, 0x4C, 0x53, 0x20, 0x57, 0x65, + 0x62, 0x20, 0x43, 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x20, 0x41, + 0x75, 0x74, 0x68, 0x65, 0x6E, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6F, 0x6E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, + 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, 0x6C, + 0x67, 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, + 0x4D, 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, + 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x56, 0x61, 0x6C, 0x75, + 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x33, 0x30, 0x3A, 0x34, 0x36, 0x3A, 0x30, 0x32, 0x3A, + 0x32, 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x64, 0x64, 0x3A, 0x39, + 0x38, 0x3A, 0x39, 0x30, 0x3A, 0x36, 0x38, 0x3A, 0x33, 0x35, + 0x3A, 0x39, 0x35, 0x3A, 0x36, 0x31, 0x3A, 0x32, 0x66, 0x3A, + 0x31, 0x31, 0x3A, 0x39, 0x30, 0x3A, 0x61, 0x35, 0x3A, 0x65, + 0x39, 0x3A, 0x33, 0x30, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x38, 0x62, 0x3A, 0x39, 0x61, 0x3A, + 0x61, 0x61, 0x3A, 0x33, 0x33, 0x3A, 0x63, 0x63, 0x3A, 0x37, + 0x33, 0x3A, 0x38, 0x61, 0x3A, 0x37, 0x36, 0x3A, 0x39, 0x36, + 0x3A, 0x38, 0x62, 0x3A, 0x39, 0x37, 0x3A, 0x38, 0x63, 0x3A, + 0x34, 0x63, 0x3A, 0x63, 0x33, 0x3A, 0x31, 0x30, 0x3A, 0x66, + 0x63, 0x3A, 0x31, 0x34, 0x3A, 0x35, 0x36, 0x3A, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x62, 0x3A, + 0x30, 0x32, 0x3A, 0x32, 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x66, + 0x38, 0x3A, 0x64, 0x65, 0x3A, 0x64, 0x62, 0x3A, 0x36, 0x37, + 0x3A, 0x35, 0x34, 0x3A, 0x35, 0x39, 0x3A, 0x63, 0x61, 0x3A, + 0x39, 0x38, 0x3A, 0x32, 0x37, 0x3A, 0x33, 0x64, 0x3A, 0x33, + 0x66, 0x3A, 0x66, 0x36, 0x3A, 0x36, 0x66, 0x3A, 0x33, 0x30, + 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x30, 0x63, 0x3A, 0x36, 0x35, 0x3A, 0x65, 0x31, 0x3A, 0x66, + 0x62, 0x3A, 0x61, 0x30, 0x3A, 0x39, 0x66, 0x3A, 0x31, 0x31, + 0x3A, 0x61, 0x62, 0x3A, 0x65, 0x61, 0x3A, 0x37, 0x36, 0x3A, + 0x33, 0x30, 0x3A, 0x33, 0x31, 0x3A, 0x63, 0x34, 0x3A, 0x36, + 0x36, 0x3A, 0x31, 0x31, 0x3A, 0x64, 0x37, 0x3A, 0x62, 0x39, + 0x3A, 0x66, 0x32, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, + 0x45, 0x47, 0x49, 0x4E, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, + 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, + 0x2D, 0x0A, 0x4D, 0x49, 0x49, 0x44, 0x79, 0x54, 0x43, 0x43, + 0x41, 0x32, 0x36, 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, + 0x49, 0x55, 0x59, 0x39, 0x31, 0x31, 0x59, 0x34, 0x71, 0x77, + 0x55, 0x55, 0x2B, 0x63, 0x54, 0x76, 0x39, 0x74, 0x56, 0x55, + 0x37, 0x4E, 0x37, 0x6F, 0x38, 0x6D, 0x30, 0x34, 0x41, 0x77, + 0x43, 0x67, 0x59, 0x49, 0x4B, 0x6F, 0x45, 0x63, 0x7A, 0x31, + 0x55, 0x42, 0x67, 0x33, 0x55, 0x77, 0x0A, 0x67, 0x62, 0x41, + 0x78, 0x43, 0x7A, 0x41, 0x4A, 0x42, 0x67, 0x4E, 0x56, 0x42, + 0x41, 0x59, 0x54, 0x41, 0x6C, 0x56, 0x54, 0x4D, 0x52, 0x41, + 0x77, 0x44, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x49, 0x44, + 0x41, 0x64, 0x4E, 0x62, 0x32, 0x35, 0x30, 0x59, 0x57, 0x35, + 0x68, 0x4D, 0x52, 0x41, 0x77, 0x44, 0x67, 0x59, 0x44, 0x56, + 0x51, 0x51, 0x48, 0x44, 0x41, 0x64, 0x43, 0x62, 0x33, 0x70, + 0x6C, 0x0A, 0x62, 0x57, 0x46, 0x75, 0x4D, 0x52, 0x51, 0x77, + 0x45, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4B, 0x44, 0x41, + 0x74, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x55, 0x31, 0x4E, 0x4D, + 0x58, 0x33, 0x4E, 0x74, 0x4D, 0x6A, 0x45, 0x54, 0x4D, 0x42, + 0x45, 0x47, 0x41, 0x31, 0x55, 0x45, 0x43, 0x77, 0x77, 0x4B, + 0x51, 0x32, 0x78, 0x70, 0x5A, 0x57, 0x35, 0x30, 0x4C, 0x58, + 0x4E, 0x74, 0x4D, 0x6A, 0x45, 0x59, 0x0A, 0x4D, 0x42, 0x59, + 0x47, 0x41, 0x31, 0x55, 0x45, 0x41, 0x77, 0x77, 0x50, 0x64, + 0x33, 0x64, 0x33, 0x4C, 0x6E, 0x64, 0x76, 0x62, 0x47, 0x5A, + 0x7A, 0x63, 0x32, 0x77, 0x75, 0x59, 0x32, 0x39, 0x74, 0x4D, + 0x52, 0x38, 0x77, 0x48, 0x51, 0x59, 0x4A, 0x4B, 0x6F, 0x5A, + 0x49, 0x68, 0x76, 0x63, 0x4E, 0x41, 0x51, 0x6B, 0x42, 0x46, + 0x68, 0x42, 0x70, 0x62, 0x6D, 0x5A, 0x76, 0x51, 0x48, 0x64, + 0x76, 0x0A, 0x62, 0x47, 0x5A, 0x7A, 0x63, 0x32, 0x77, 0x75, + 0x59, 0x32, 0x39, 0x74, 0x4D, 0x52, 0x63, 0x77, 0x46, 0x51, + 0x59, 0x4B, 0x43, 0x5A, 0x49, 0x6D, 0x69, 0x5A, 0x50, 0x79, + 0x4C, 0x47, 0x51, 0x42, 0x41, 0x51, 0x77, 0x48, 0x64, 0x32, + 0x39, 0x73, 0x5A, 0x6C, 0x4E, 0x54, 0x54, 0x44, 0x41, 0x65, + 0x46, 0x77, 0x30, 0x79, 0x4E, 0x6A, 0x41, 0x79, 0x4D, 0x54, + 0x67, 0x78, 0x4E, 0x7A, 0x55, 0x32, 0x0A, 0x4E, 0x54, 0x64, + 0x61, 0x46, 0x77, 0x30, 0x79, 0x4F, 0x44, 0x45, 0x78, 0x4D, + 0x54, 0x51, 0x78, 0x4E, 0x7A, 0x55, 0x32, 0x4E, 0x54, 0x64, + 0x61, 0x4D, 0x49, 0x47, 0x77, 0x4D, 0x51, 0x73, 0x77, 0x43, + 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x47, 0x45, 0x77, 0x4A, + 0x56, 0x55, 0x7A, 0x45, 0x51, 0x4D, 0x41, 0x34, 0x47, 0x41, + 0x31, 0x55, 0x45, 0x43, 0x41, 0x77, 0x48, 0x54, 0x57, 0x39, + 0x75, 0x0A, 0x64, 0x47, 0x46, 0x75, 0x59, 0x54, 0x45, 0x51, + 0x4D, 0x41, 0x34, 0x47, 0x41, 0x31, 0x55, 0x45, 0x42, 0x77, + 0x77, 0x48, 0x51, 0x6D, 0x39, 0x36, 0x5A, 0x57, 0x31, 0x68, + 0x62, 0x6A, 0x45, 0x55, 0x4D, 0x42, 0x49, 0x47, 0x41, 0x31, + 0x55, 0x45, 0x43, 0x67, 0x77, 0x4C, 0x64, 0x32, 0x39, 0x73, + 0x5A, 0x6C, 0x4E, 0x54, 0x54, 0x46, 0x39, 0x7A, 0x62, 0x54, + 0x49, 0x78, 0x45, 0x7A, 0x41, 0x52, 0x0A, 0x42, 0x67, 0x4E, + 0x56, 0x42, 0x41, 0x73, 0x4D, 0x43, 0x6B, 0x4E, 0x73, 0x61, + 0x57, 0x56, 0x75, 0x64, 0x43, 0x31, 0x7A, 0x62, 0x54, 0x49, + 0x78, 0x47, 0x44, 0x41, 0x57, 0x42, 0x67, 0x4E, 0x56, 0x42, + 0x41, 0x4D, 0x4D, 0x44, 0x33, 0x64, 0x33, 0x64, 0x79, 0x35, + 0x33, 0x62, 0x32, 0x78, 0x6D, 0x63, 0x33, 0x4E, 0x73, 0x4C, + 0x6D, 0x4E, 0x76, 0x62, 0x54, 0x45, 0x66, 0x4D, 0x42, 0x30, + 0x47, 0x0A, 0x43, 0x53, 0x71, 0x47, 0x53, 0x49, 0x62, 0x33, + 0x44, 0x51, 0x45, 0x4A, 0x41, 0x52, 0x59, 0x51, 0x61, 0x57, + 0x35, 0x6D, 0x62, 0x30, 0x42, 0x33, 0x62, 0x32, 0x78, 0x6D, + 0x63, 0x33, 0x4E, 0x73, 0x4C, 0x6D, 0x4E, 0x76, 0x62, 0x54, + 0x45, 0x58, 0x4D, 0x42, 0x55, 0x47, 0x43, 0x67, 0x6D, 0x53, + 0x4A, 0x6F, 0x6D, 0x54, 0x38, 0x69, 0x78, 0x6B, 0x41, 0x51, + 0x45, 0x4D, 0x42, 0x33, 0x64, 0x76, 0x0A, 0x62, 0x47, 0x5A, + 0x54, 0x55, 0x30, 0x77, 0x77, 0x57, 0x6A, 0x41, 0x55, 0x42, + 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, 0x50, 0x56, 0x51, 0x47, + 0x43, 0x4C, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x45, 0x63, 0x7A, + 0x31, 0x55, 0x42, 0x67, 0x69, 0x30, 0x44, 0x51, 0x67, 0x41, + 0x45, 0x4F, 0x68, 0x33, 0x6F, 0x79, 0x30, 0x76, 0x54, 0x4C, + 0x6A, 0x39, 0x4C, 0x42, 0x7A, 0x2B, 0x77, 0x49, 0x66, 0x37, + 0x46, 0x0A, 0x6E, 0x74, 0x6E, 0x4B, 0x4F, 0x70, 0x4F, 0x54, + 0x6C, 0x58, 0x59, 0x64, 0x4D, 0x4E, 0x6B, 0x4C, 0x39, 0x56, + 0x62, 0x74, 0x47, 0x57, 0x44, 0x74, 0x41, 0x55, 0x7A, 0x32, + 0x5A, 0x78, 0x33, 0x78, 0x72, 0x4B, 0x68, 0x30, 0x44, 0x62, + 0x4A, 0x33, 0x79, 0x45, 0x6B, 0x34, 0x35, 0x50, 0x39, 0x4D, + 0x37, 0x34, 0x31, 0x74, 0x68, 0x2F, 0x5A, 0x4F, 0x78, 0x2F, + 0x67, 0x35, 0x64, 0x48, 0x42, 0x77, 0x0A, 0x74, 0x61, 0x4F, + 0x43, 0x41, 0x57, 0x45, 0x77, 0x67, 0x67, 0x46, 0x64, 0x4D, + 0x42, 0x30, 0x47, 0x41, 0x31, 0x55, 0x64, 0x44, 0x67, 0x51, + 0x57, 0x42, 0x42, 0x54, 0x6B, 0x49, 0x62, 0x4C, 0x46, 0x35, + 0x64, 0x53, 0x65, 0x67, 0x73, 0x72, 0x34, 0x5A, 0x2F, 0x49, + 0x6F, 0x6D, 0x66, 0x61, 0x46, 0x36, 0x50, 0x46, 0x56, 0x37, + 0x7A, 0x43, 0x42, 0x38, 0x41, 0x59, 0x44, 0x56, 0x52, 0x30, + 0x6A, 0x0A, 0x42, 0x49, 0x48, 0x6F, 0x4D, 0x49, 0x48, 0x6C, + 0x67, 0x42, 0x54, 0x6B, 0x49, 0x62, 0x4C, 0x46, 0x35, 0x64, + 0x53, 0x65, 0x67, 0x73, 0x72, 0x34, 0x5A, 0x2F, 0x49, 0x6F, + 0x6D, 0x66, 0x61, 0x46, 0x36, 0x50, 0x46, 0x56, 0x37, 0x36, + 0x47, 0x42, 0x74, 0x71, 0x53, 0x42, 0x73, 0x7A, 0x43, 0x42, + 0x73, 0x44, 0x45, 0x4C, 0x4D, 0x41, 0x6B, 0x47, 0x41, 0x31, + 0x55, 0x45, 0x42, 0x68, 0x4D, 0x43, 0x0A, 0x56, 0x56, 0x4D, + 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, 0x56, 0x42, + 0x41, 0x67, 0x4D, 0x42, 0x30, 0x31, 0x76, 0x62, 0x6E, 0x52, + 0x68, 0x62, 0x6D, 0x45, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, + 0x67, 0x4E, 0x56, 0x42, 0x41, 0x63, 0x4D, 0x42, 0x30, 0x4A, + 0x76, 0x65, 0x6D, 0x56, 0x74, 0x59, 0x57, 0x34, 0x78, 0x46, + 0x44, 0x41, 0x53, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x6F, + 0x4D, 0x0A, 0x43, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, + 0x55, 0x30, 0x78, 0x66, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, + 0x4D, 0x77, 0x45, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4C, + 0x44, 0x41, 0x70, 0x44, 0x62, 0x47, 0x6C, 0x6C, 0x62, 0x6E, + 0x51, 0x74, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, 0x67, 0x77, + 0x46, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x44, 0x44, 0x41, + 0x39, 0x33, 0x64, 0x33, 0x63, 0x75, 0x0A, 0x64, 0x32, 0x39, + 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x35, 0x6A, 0x62, + 0x32, 0x30, 0x78, 0x48, 0x7A, 0x41, 0x64, 0x42, 0x67, 0x6B, + 0x71, 0x68, 0x6B, 0x69, 0x47, 0x39, 0x77, 0x30, 0x42, 0x43, + 0x51, 0x45, 0x57, 0x45, 0x47, 0x6C, 0x75, 0x5A, 0x6D, 0x39, + 0x41, 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x62, + 0x43, 0x35, 0x6A, 0x62, 0x32, 0x30, 0x78, 0x46, 0x7A, 0x41, + 0x56, 0x0A, 0x42, 0x67, 0x6F, 0x4A, 0x6B, 0x69, 0x61, 0x4A, + 0x6B, 0x2F, 0x49, 0x73, 0x5A, 0x41, 0x45, 0x42, 0x44, 0x41, + 0x64, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x55, 0x31, 0x4E, 0x4D, + 0x67, 0x68, 0x52, 0x6A, 0x33, 0x58, 0x56, 0x6A, 0x69, 0x72, + 0x42, 0x52, 0x54, 0x35, 0x78, 0x4F, 0x2F, 0x32, 0x31, 0x56, + 0x54, 0x73, 0x33, 0x75, 0x6A, 0x79, 0x62, 0x54, 0x67, 0x44, + 0x41, 0x4D, 0x42, 0x67, 0x4E, 0x56, 0x0A, 0x48, 0x52, 0x4D, + 0x45, 0x42, 0x54, 0x41, 0x44, 0x41, 0x51, 0x48, 0x2F, 0x4D, + 0x42, 0x77, 0x47, 0x41, 0x31, 0x55, 0x64, 0x45, 0x51, 0x51, + 0x56, 0x4D, 0x42, 0x4F, 0x43, 0x43, 0x32, 0x56, 0x34, 0x59, + 0x57, 0x31, 0x77, 0x62, 0x47, 0x55, 0x75, 0x59, 0x32, 0x39, + 0x74, 0x68, 0x77, 0x52, 0x2F, 0x41, 0x41, 0x41, 0x42, 0x4D, + 0x42, 0x30, 0x47, 0x41, 0x31, 0x55, 0x64, 0x4A, 0x51, 0x51, + 0x57, 0x0A, 0x4D, 0x42, 0x51, 0x47, 0x43, 0x43, 0x73, 0x47, + 0x41, 0x51, 0x55, 0x46, 0x42, 0x77, 0x4D, 0x42, 0x42, 0x67, + 0x67, 0x72, 0x42, 0x67, 0x45, 0x46, 0x42, 0x51, 0x63, 0x44, + 0x41, 0x6A, 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, 0x67, 0x52, + 0x7A, 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, 0x51, 0x4E, 0x4A, + 0x41, 0x44, 0x42, 0x47, 0x41, 0x69, 0x45, 0x41, 0x33, 0x5A, + 0x69, 0x51, 0x61, 0x44, 0x57, 0x56, 0x0A, 0x59, 0x53, 0x38, + 0x52, 0x6B, 0x4B, 0x58, 0x70, 0x4D, 0x49, 0x75, 0x61, 0x71, + 0x6A, 0x50, 0x4D, 0x63, 0x34, 0x70, 0x32, 0x6C, 0x6F, 0x75, + 0x58, 0x6A, 0x45, 0x7A, 0x44, 0x45, 0x50, 0x77, 0x55, 0x56, + 0x70, 0x73, 0x43, 0x49, 0x51, 0x44, 0x34, 0x33, 0x74, 0x74, + 0x6E, 0x56, 0x46, 0x6E, 0x4B, 0x6D, 0x43, 0x63, 0x39, 0x50, + 0x2F, 0x5A, 0x76, 0x4D, 0x41, 0x78, 0x6C, 0x34, 0x66, 0x75, + 0x67, 0x0A, 0x6E, 0x78, 0x47, 0x72, 0x36, 0x6E, 0x59, 0x77, + 0x4D, 0x63, 0x52, 0x6D, 0x45, 0x64, 0x65, 0x35, 0x38, 0x67, + 0x3D, 0x3D, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, + 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, + 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A }; #define sizeof_client_sm2 (sizeof(client_sm2)) @@ -1322,119 +1316,104 @@ static const unsigned char root_sm2[] = 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6C, 0x20, 0x4E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x37, 0x34, 0x3A, 0x39, 0x63, 0x3A, 0x64, - 0x64, 0x3A, 0x61, 0x34, 0x3A, 0x62, 0x32, 0x3A, 0x36, 0x37, - 0x3A, 0x32, 0x36, 0x3A, 0x35, 0x37, 0x3A, 0x32, 0x39, 0x3A, - 0x66, 0x62, 0x3A, 0x65, 0x39, 0x3A, 0x31, 0x33, 0x3A, 0x35, - 0x34, 0x3A, 0x65, 0x30, 0x3A, 0x33, 0x34, 0x3A, 0x30, 0x38, - 0x3A, 0x30, 0x33, 0x3A, 0x32, 0x62, 0x3A, 0x37, 0x30, 0x3A, - 0x61, 0x39, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x36, 0x31, 0x3A, 0x32, 0x61, 0x3A, 0x39, + 0x33, 0x3A, 0x31, 0x32, 0x3A, 0x62, 0x33, 0x3A, 0x36, 0x65, + 0x3A, 0x66, 0x66, 0x3A, 0x64, 0x36, 0x3A, 0x39, 0x61, 0x3A, + 0x61, 0x37, 0x3A, 0x39, 0x38, 0x3A, 0x63, 0x34, 0x3A, 0x34, + 0x39, 0x3A, 0x34, 0x64, 0x3A, 0x63, 0x36, 0x3A, 0x32, 0x63, + 0x3A, 0x33, 0x65, 0x3A, 0x65, 0x61, 0x3A, 0x35, 0x61, 0x3A, + 0x66, 0x39, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x3A, - 0x20, 0x43, 0x20, 0x3D, 0x20, 0x55, 0x53, 0x2C, 0x20, 0x53, - 0x54, 0x20, 0x3D, 0x20, 0x4D, 0x6F, 0x6E, 0x74, 0x61, 0x6E, - 0x61, 0x2C, 0x20, 0x4C, 0x20, 0x3D, 0x20, 0x42, 0x6F, 0x7A, - 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x20, 0x3D, 0x20, - 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x53, 0x4D, - 0x32, 0x2C, 0x20, 0x4F, 0x55, 0x20, 0x3D, 0x20, 0x52, 0x6F, + 0x20, 0x43, 0x3D, 0x55, 0x53, 0x2C, 0x20, 0x53, 0x54, 0x3D, + 0x4D, 0x6F, 0x6E, 0x74, 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, + 0x3D, 0x42, 0x6F, 0x7A, 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, + 0x4F, 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, + 0x53, 0x4D, 0x32, 0x2C, 0x20, 0x4F, 0x55, 0x3D, 0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x53, 0x4D, 0x32, 0x2C, 0x20, 0x43, 0x4E, - 0x20, 0x3D, 0x20, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x6F, 0x6C, - 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, - 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x20, 0x3D, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x40, - 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, - 0x6D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x56, 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, 0x79, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x42, 0x65, 0x66, 0x6F, 0x72, - 0x65, 0x3A, 0x20, 0x46, 0x65, 0x62, 0x20, 0x31, 0x35, 0x20, - 0x30, 0x36, 0x3A, 0x32, 0x33, 0x3A, 0x30, 0x37, 0x20, 0x32, - 0x30, 0x32, 0x33, 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x4E, 0x6F, 0x74, 0x20, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, - 0x3A, 0x20, 0x4E, 0x6F, 0x76, 0x20, 0x31, 0x31, 0x20, 0x30, - 0x36, 0x3A, 0x32, 0x33, 0x3A, 0x30, 0x37, 0x20, 0x32, 0x30, - 0x32, 0x35, 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, - 0x63, 0x74, 0x3A, 0x20, 0x43, 0x20, 0x3D, 0x20, 0x55, 0x53, - 0x2C, 0x20, 0x53, 0x54, 0x20, 0x3D, 0x20, 0x4D, 0x6F, 0x6E, - 0x74, 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x20, 0x3D, 0x20, + 0x3D, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, + 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, + 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, + 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x0A, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x56, 0x61, 0x6C, 0x69, + 0x64, 0x69, 0x74, 0x79, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, + 0x20, 0x42, 0x65, 0x66, 0x6F, 0x72, 0x65, 0x3A, 0x20, 0x46, + 0x65, 0x62, 0x20, 0x31, 0x38, 0x20, 0x31, 0x37, 0x3A, 0x35, + 0x36, 0x3A, 0x35, 0x37, 0x20, 0x32, 0x30, 0x32, 0x36, 0x20, + 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, + 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x3A, 0x20, 0x4E, 0x6F, + 0x76, 0x20, 0x31, 0x34, 0x20, 0x31, 0x37, 0x3A, 0x35, 0x36, + 0x3A, 0x35, 0x37, 0x20, 0x32, 0x30, 0x32, 0x38, 0x20, 0x47, + 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x3A, 0x20, + 0x43, 0x3D, 0x55, 0x53, 0x2C, 0x20, 0x53, 0x54, 0x3D, 0x4D, + 0x6F, 0x6E, 0x74, 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x3D, 0x42, 0x6F, 0x7A, 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, - 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, - 0x5F, 0x53, 0x4D, 0x32, 0x2C, 0x20, 0x4F, 0x55, 0x20, 0x3D, - 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x53, 0x4D, 0x32, 0x2C, - 0x20, 0x43, 0x4E, 0x20, 0x3D, 0x20, 0x77, 0x77, 0x77, 0x2E, - 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, - 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3D, 0x20, 0x69, 0x6E, - 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, - 0x2E, 0x63, 0x6F, 0x6D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, - 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x20, 0x4B, 0x65, - 0x79, 0x20, 0x49, 0x6E, 0x66, 0x6F, 0x3A, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x20, 0x4B, 0x65, 0x79, - 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, - 0x3A, 0x20, 0x73, 0x6D, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x53, + 0x4D, 0x32, 0x2C, 0x20, 0x4F, 0x55, 0x3D, 0x52, 0x6F, 0x6F, + 0x74, 0x2D, 0x53, 0x4D, 0x32, 0x2C, 0x20, 0x43, 0x4E, 0x3D, + 0x77, 0x77, 0x77, 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, + 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, + 0x69, 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3D, + 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, + 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, + 0x63, 0x74, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x20, + 0x4B, 0x65, 0x79, 0x20, 0x49, 0x6E, 0x66, 0x6F, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x2D, 0x4B, - 0x65, 0x79, 0x3A, 0x20, 0x28, 0x32, 0x35, 0x36, 0x20, 0x62, - 0x69, 0x74, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x20, 0x4B, + 0x65, 0x79, 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, + 0x68, 0x6D, 0x3A, 0x20, 0x73, 0x6D, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x70, 0x75, 0x62, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, + 0x2D, 0x4B, 0x65, 0x79, 0x3A, 0x20, 0x28, 0x32, 0x35, 0x36, + 0x20, 0x62, 0x69, 0x74, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x34, 0x3A, 0x62, 0x62, - 0x3A, 0x39, 0x63, 0x3A, 0x37, 0x35, 0x3A, 0x38, 0x63, 0x3A, - 0x66, 0x37, 0x3A, 0x31, 0x37, 0x3A, 0x66, 0x38, 0x3A, 0x34, - 0x38, 0x3A, 0x61, 0x62, 0x3A, 0x66, 0x37, 0x3A, 0x66, 0x36, - 0x3A, 0x64, 0x62, 0x3A, 0x30, 0x64, 0x3A, 0x39, 0x61, 0x3A, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x70, 0x75, 0x62, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x38, 0x64, 0x3A, 0x39, 0x66, 0x3A, 0x63, 0x32, 0x3A, - 0x64, 0x31, 0x3A, 0x34, 0x37, 0x3A, 0x39, 0x37, 0x3A, 0x39, - 0x35, 0x3A, 0x30, 0x62, 0x3A, 0x34, 0x65, 0x3A, 0x65, 0x36, - 0x3A, 0x35, 0x37, 0x3A, 0x65, 0x63, 0x3A, 0x63, 0x35, 0x3A, - 0x66, 0x38, 0x3A, 0x35, 0x37, 0x3A, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x35, 0x34, 0x3A, - 0x37, 0x31, 0x3A, 0x33, 0x39, 0x3A, 0x33, 0x63, 0x3A, 0x37, - 0x39, 0x3A, 0x65, 0x31, 0x3A, 0x34, 0x30, 0x3A, 0x33, 0x66, - 0x3A, 0x62, 0x36, 0x3A, 0x35, 0x31, 0x3A, 0x65, 0x39, 0x3A, - 0x37, 0x63, 0x3A, 0x63, 0x37, 0x3A, 0x64, 0x61, 0x3A, 0x32, - 0x64, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x65, 0x66, 0x3A, 0x64, 0x32, 0x3A, 0x65, - 0x38, 0x3A, 0x37, 0x39, 0x3A, 0x38, 0x31, 0x3A, 0x37, 0x62, - 0x3A, 0x61, 0x62, 0x3A, 0x61, 0x33, 0x3A, 0x35, 0x66, 0x3A, - 0x36, 0x62, 0x3A, 0x32, 0x61, 0x3A, 0x36, 0x63, 0x3A, 0x39, - 0x37, 0x3A, 0x31, 0x61, 0x3A, 0x35, 0x65, 0x3A, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38, - 0x65, 0x3A, 0x64, 0x39, 0x3A, 0x64, 0x30, 0x3A, 0x63, 0x63, - 0x3A, 0x30, 0x34, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x34, 0x3A, + 0x62, 0x62, 0x3A, 0x39, 0x63, 0x3A, 0x37, 0x35, 0x3A, 0x38, + 0x63, 0x3A, 0x66, 0x37, 0x3A, 0x31, 0x37, 0x3A, 0x66, 0x38, + 0x3A, 0x34, 0x38, 0x3A, 0x61, 0x62, 0x3A, 0x66, 0x37, 0x3A, + 0x66, 0x36, 0x3A, 0x64, 0x62, 0x3A, 0x30, 0x64, 0x3A, 0x39, + 0x61, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x41, 0x53, 0x4E, 0x31, 0x20, 0x4F, 0x49, 0x44, 0x3A, 0x20, - 0x53, 0x4D, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x65, - 0x78, 0x74, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x3A, + 0x20, 0x20, 0x20, 0x38, 0x64, 0x3A, 0x39, 0x66, 0x3A, 0x63, + 0x32, 0x3A, 0x64, 0x31, 0x3A, 0x34, 0x37, 0x3A, 0x39, 0x37, + 0x3A, 0x39, 0x35, 0x3A, 0x30, 0x62, 0x3A, 0x34, 0x65, 0x3A, + 0x65, 0x36, 0x3A, 0x35, 0x37, 0x3A, 0x65, 0x63, 0x3A, 0x63, + 0x35, 0x3A, 0x66, 0x38, 0x3A, 0x35, 0x37, 0x3A, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x35, + 0x34, 0x3A, 0x37, 0x31, 0x3A, 0x33, 0x39, 0x3A, 0x33, 0x63, + 0x3A, 0x37, 0x39, 0x3A, 0x65, 0x31, 0x3A, 0x34, 0x30, 0x3A, + 0x33, 0x66, 0x3A, 0x62, 0x36, 0x3A, 0x35, 0x31, 0x3A, 0x65, + 0x39, 0x3A, 0x37, 0x63, 0x3A, 0x63, 0x37, 0x3A, 0x64, 0x61, + 0x3A, 0x32, 0x64, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x66, 0x3A, 0x64, 0x32, + 0x3A, 0x65, 0x38, 0x3A, 0x37, 0x39, 0x3A, 0x38, 0x31, 0x3A, + 0x37, 0x62, 0x3A, 0x61, 0x62, 0x3A, 0x61, 0x33, 0x3A, 0x35, + 0x66, 0x3A, 0x36, 0x62, 0x3A, 0x32, 0x61, 0x3A, 0x36, 0x63, + 0x3A, 0x39, 0x37, 0x3A, 0x31, 0x61, 0x3A, 0x35, 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, - 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x4B, 0x65, - 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x33, 0x34, 0x3A, 0x31, 0x44, 0x3A, 0x37, 0x39, 0x3A, - 0x34, 0x34, 0x3A, 0x31, 0x35, 0x3A, 0x37, 0x39, 0x3A, 0x41, - 0x31, 0x3A, 0x42, 0x31, 0x3A, 0x36, 0x33, 0x3A, 0x39, 0x39, - 0x3A, 0x45, 0x33, 0x3A, 0x45, 0x44, 0x3A, 0x36, 0x35, 0x3A, - 0x37, 0x43, 0x3A, 0x36, 0x34, 0x3A, 0x38, 0x39, 0x3A, 0x38, - 0x30, 0x3A, 0x46, 0x46, 0x3A, 0x42, 0x38, 0x3A, 0x45, 0x43, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, - 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x20, + 0x20, 0x38, 0x65, 0x3A, 0x64, 0x39, 0x3A, 0x64, 0x30, 0x3A, + 0x63, 0x63, 0x3A, 0x30, 0x34, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x41, 0x53, 0x4E, 0x31, 0x20, 0x4F, 0x49, 0x44, + 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, + 0x20, 0x65, 0x78, 0x74, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, + 0x73, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, + 0x33, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, @@ -1446,148 +1425,160 @@ static const unsigned char root_sm2[] = 0x3A, 0x38, 0x30, 0x3A, 0x46, 0x46, 0x3A, 0x42, 0x38, 0x3A, 0x45, 0x43, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, - 0x33, 0x20, 0x42, 0x61, 0x73, 0x69, 0x63, 0x20, 0x43, 0x6F, - 0x6E, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6E, 0x74, 0x73, 0x3A, - 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x0A, + 0x33, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, + 0x79, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x41, 0x3A, 0x54, - 0x52, 0x55, 0x45, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, - 0x76, 0x33, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x55, 0x73, 0x61, - 0x67, 0x65, 0x3A, 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, - 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, - 0x69, 0x67, 0x69, 0x74, 0x61, 0x6C, 0x20, 0x53, 0x69, 0x67, - 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2C, 0x20, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, - 0x53, 0x69, 0x67, 0x6E, 0x2C, 0x20, 0x43, 0x52, 0x4C, 0x20, - 0x53, 0x69, 0x67, 0x6E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, - 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, - 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, - 0x53, 0x4D, 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, - 0x4D, 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, - 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x56, 0x61, 0x6C, - 0x75, 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x33, 0x30, 0x3A, 0x34, 0x34, 0x3A, 0x30, 0x32, - 0x3A, 0x32, 0x30, 0x3A, 0x30, 0x33, 0x3A, 0x32, 0x37, 0x3A, - 0x32, 0x39, 0x3A, 0x66, 0x30, 0x3A, 0x65, 0x66, 0x3A, 0x37, - 0x38, 0x3A, 0x32, 0x36, 0x3A, 0x61, 0x31, 0x3A, 0x31, 0x61, - 0x3A, 0x36, 0x61, 0x3A, 0x31, 0x65, 0x3A, 0x38, 0x38, 0x3A, - 0x38, 0x31, 0x3A, 0x65, 0x37, 0x3A, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x38, 0x33, 0x3A, 0x37, 0x32, - 0x3A, 0x35, 0x66, 0x3A, 0x33, 0x65, 0x3A, 0x65, 0x36, 0x3A, - 0x30, 0x38, 0x3A, 0x65, 0x38, 0x3A, 0x31, 0x34, 0x3A, 0x36, - 0x38, 0x3A, 0x62, 0x66, 0x3A, 0x34, 0x62, 0x3A, 0x30, 0x66, - 0x3A, 0x36, 0x38, 0x3A, 0x35, 0x32, 0x3A, 0x39, 0x32, 0x3A, - 0x61, 0x61, 0x3A, 0x38, 0x66, 0x3A, 0x61, 0x31, 0x3A, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x32, - 0x3A, 0x32, 0x30, 0x3A, 0x30, 0x62, 0x3A, 0x66, 0x65, 0x3A, - 0x31, 0x62, 0x3A, 0x31, 0x34, 0x3A, 0x62, 0x61, 0x3A, 0x35, - 0x31, 0x3A, 0x38, 0x32, 0x3A, 0x36, 0x35, 0x3A, 0x30, 0x36, - 0x3A, 0x62, 0x62, 0x3A, 0x32, 0x32, 0x3A, 0x64, 0x38, 0x3A, - 0x31, 0x61, 0x3A, 0x61, 0x37, 0x3A, 0x39, 0x66, 0x3A, 0x35, - 0x34, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x36, 0x32, 0x3A, 0x65, 0x62, 0x3A, 0x38, 0x64, 0x3A, - 0x62, 0x32, 0x3A, 0x64, 0x35, 0x3A, 0x31, 0x33, 0x3A, 0x62, - 0x33, 0x3A, 0x62, 0x38, 0x3A, 0x61, 0x32, 0x3A, 0x66, 0x33, - 0x3A, 0x31, 0x34, 0x3A, 0x34, 0x34, 0x3A, 0x62, 0x32, 0x3A, - 0x61, 0x30, 0x3A, 0x32, 0x31, 0x3A, 0x64, 0x30, 0x0A, 0x2D, - 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, - 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, - 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x49, 0x49, - 0x43, 0x6B, 0x54, 0x43, 0x43, 0x41, 0x6A, 0x69, 0x67, 0x41, - 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x55, 0x64, 0x4A, 0x7A, - 0x64, 0x70, 0x4C, 0x4A, 0x6E, 0x4A, 0x6C, 0x63, 0x70, 0x2B, - 0x2B, 0x6B, 0x54, 0x56, 0x4F, 0x41, 0x30, 0x43, 0x41, 0x4D, - 0x72, 0x63, 0x4B, 0x6B, 0x77, 0x43, 0x67, 0x59, 0x49, 0x4B, - 0x6F, 0x45, 0x63, 0x7A, 0x31, 0x55, 0x42, 0x67, 0x33, 0x55, - 0x77, 0x0A, 0x67, 0x5A, 0x55, 0x78, 0x43, 0x7A, 0x41, 0x4A, - 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x59, 0x54, 0x41, 0x6C, - 0x56, 0x54, 0x4D, 0x52, 0x41, 0x77, 0x44, 0x67, 0x59, 0x44, - 0x56, 0x51, 0x51, 0x49, 0x44, 0x41, 0x64, 0x4E, 0x62, 0x32, - 0x35, 0x30, 0x59, 0x57, 0x35, 0x68, 0x4D, 0x52, 0x41, 0x77, - 0x44, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x48, 0x44, 0x41, - 0x64, 0x43, 0x62, 0x33, 0x70, 0x6C, 0x0A, 0x62, 0x57, 0x46, - 0x75, 0x4D, 0x52, 0x51, 0x77, 0x45, 0x67, 0x59, 0x44, 0x56, - 0x51, 0x51, 0x4B, 0x44, 0x41, 0x74, 0x33, 0x62, 0x32, 0x78, - 0x6D, 0x55, 0x31, 0x4E, 0x4D, 0x58, 0x31, 0x4E, 0x4E, 0x4D, - 0x6A, 0x45, 0x52, 0x4D, 0x41, 0x38, 0x47, 0x41, 0x31, 0x55, - 0x45, 0x43, 0x77, 0x77, 0x49, 0x55, 0x6D, 0x39, 0x76, 0x64, - 0x43, 0x31, 0x54, 0x54, 0x54, 0x49, 0x78, 0x47, 0x44, 0x41, - 0x57, 0x0A, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x4D, 0x4D, - 0x44, 0x33, 0x64, 0x33, 0x64, 0x79, 0x35, 0x33, 0x62, 0x32, - 0x78, 0x6D, 0x63, 0x33, 0x4E, 0x73, 0x4C, 0x6D, 0x4E, 0x76, - 0x62, 0x54, 0x45, 0x66, 0x4D, 0x42, 0x30, 0x47, 0x43, 0x53, - 0x71, 0x47, 0x53, 0x49, 0x62, 0x33, 0x44, 0x51, 0x45, 0x4A, - 0x41, 0x52, 0x59, 0x51, 0x61, 0x57, 0x35, 0x6D, 0x62, 0x30, - 0x42, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x0A, 0x63, 0x33, 0x4E, - 0x73, 0x4C, 0x6D, 0x4E, 0x76, 0x62, 0x54, 0x41, 0x65, 0x46, - 0x77, 0x30, 0x79, 0x4D, 0x7A, 0x41, 0x79, 0x4D, 0x54, 0x55, - 0x77, 0x4E, 0x6A, 0x49, 0x7A, 0x4D, 0x44, 0x64, 0x61, 0x46, - 0x77, 0x30, 0x79, 0x4E, 0x54, 0x45, 0x78, 0x4D, 0x54, 0x45, - 0x77, 0x4E, 0x6A, 0x49, 0x7A, 0x4D, 0x44, 0x64, 0x61, 0x4D, - 0x49, 0x47, 0x56, 0x4D, 0x51, 0x73, 0x77, 0x43, 0x51, 0x59, - 0x44, 0x0A, 0x56, 0x51, 0x51, 0x47, 0x45, 0x77, 0x4A, 0x56, - 0x55, 0x7A, 0x45, 0x51, 0x4D, 0x41, 0x34, 0x47, 0x41, 0x31, - 0x55, 0x45, 0x43, 0x41, 0x77, 0x48, 0x54, 0x57, 0x39, 0x75, - 0x64, 0x47, 0x46, 0x75, 0x59, 0x54, 0x45, 0x51, 0x4D, 0x41, - 0x34, 0x47, 0x41, 0x31, 0x55, 0x45, 0x42, 0x77, 0x77, 0x48, - 0x51, 0x6D, 0x39, 0x36, 0x5A, 0x57, 0x31, 0x68, 0x62, 0x6A, - 0x45, 0x55, 0x4D, 0x42, 0x49, 0x47, 0x0A, 0x41, 0x31, 0x55, - 0x45, 0x43, 0x67, 0x77, 0x4C, 0x64, 0x32, 0x39, 0x73, 0x5A, - 0x6C, 0x4E, 0x54, 0x54, 0x46, 0x39, 0x54, 0x54, 0x54, 0x49, - 0x78, 0x45, 0x54, 0x41, 0x50, 0x42, 0x67, 0x4E, 0x56, 0x42, - 0x41, 0x73, 0x4D, 0x43, 0x46, 0x4A, 0x76, 0x62, 0x33, 0x51, - 0x74, 0x55, 0x30, 0x30, 0x79, 0x4D, 0x52, 0x67, 0x77, 0x46, - 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x44, 0x44, 0x41, 0x39, - 0x33, 0x0A, 0x64, 0x33, 0x63, 0x75, 0x64, 0x32, 0x39, 0x73, - 0x5A, 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x35, 0x6A, 0x62, 0x32, - 0x30, 0x78, 0x48, 0x7A, 0x41, 0x64, 0x42, 0x67, 0x6B, 0x71, - 0x68, 0x6B, 0x69, 0x47, 0x39, 0x77, 0x30, 0x42, 0x43, 0x51, - 0x45, 0x57, 0x45, 0x47, 0x6C, 0x75, 0x5A, 0x6D, 0x39, 0x41, - 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x62, 0x43, - 0x35, 0x6A, 0x62, 0x32, 0x30, 0x77, 0x0A, 0x57, 0x6A, 0x41, - 0x55, 0x42, 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, 0x50, 0x56, - 0x51, 0x47, 0x43, 0x4C, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x45, - 0x63, 0x7A, 0x31, 0x55, 0x42, 0x67, 0x69, 0x30, 0x44, 0x51, - 0x67, 0x41, 0x45, 0x75, 0x35, 0x78, 0x31, 0x6A, 0x50, 0x63, - 0x58, 0x2B, 0x45, 0x69, 0x72, 0x39, 0x2F, 0x62, 0x62, 0x44, - 0x5A, 0x71, 0x4E, 0x6E, 0x38, 0x4C, 0x52, 0x52, 0x35, 0x65, - 0x56, 0x0A, 0x43, 0x30, 0x37, 0x6D, 0x56, 0x2B, 0x7A, 0x46, - 0x2B, 0x46, 0x64, 0x55, 0x63, 0x54, 0x6B, 0x38, 0x65, 0x65, - 0x46, 0x41, 0x50, 0x37, 0x5A, 0x52, 0x36, 0x58, 0x7A, 0x48, - 0x32, 0x69, 0x33, 0x76, 0x30, 0x75, 0x68, 0x35, 0x67, 0x58, - 0x75, 0x72, 0x6F, 0x31, 0x39, 0x72, 0x4B, 0x6D, 0x79, 0x58, - 0x47, 0x6C, 0x36, 0x4F, 0x32, 0x64, 0x44, 0x4D, 0x42, 0x4B, - 0x4E, 0x6A, 0x4D, 0x47, 0x45, 0x77, 0x0A, 0x48, 0x51, 0x59, - 0x44, 0x56, 0x52, 0x30, 0x4F, 0x42, 0x42, 0x59, 0x45, 0x46, - 0x44, 0x51, 0x64, 0x65, 0x55, 0x51, 0x56, 0x65, 0x61, 0x47, - 0x78, 0x59, 0x35, 0x6E, 0x6A, 0x37, 0x57, 0x56, 0x38, 0x5A, - 0x49, 0x6D, 0x41, 0x2F, 0x37, 0x6A, 0x73, 0x4D, 0x42, 0x38, - 0x47, 0x41, 0x31, 0x55, 0x64, 0x49, 0x77, 0x51, 0x59, 0x4D, - 0x42, 0x61, 0x41, 0x46, 0x44, 0x51, 0x64, 0x65, 0x55, 0x51, - 0x56, 0x0A, 0x65, 0x61, 0x47, 0x78, 0x59, 0x35, 0x6E, 0x6A, - 0x37, 0x57, 0x56, 0x38, 0x5A, 0x49, 0x6D, 0x41, 0x2F, 0x37, - 0x6A, 0x73, 0x4D, 0x41, 0x38, 0x47, 0x41, 0x31, 0x55, 0x64, - 0x45, 0x77, 0x45, 0x42, 0x2F, 0x77, 0x51, 0x46, 0x4D, 0x41, - 0x4D, 0x42, 0x41, 0x66, 0x38, 0x77, 0x44, 0x67, 0x59, 0x44, - 0x56, 0x52, 0x30, 0x50, 0x41, 0x51, 0x48, 0x2F, 0x42, 0x41, - 0x51, 0x44, 0x41, 0x67, 0x47, 0x47, 0x0A, 0x4D, 0x41, 0x6F, - 0x47, 0x43, 0x43, 0x71, 0x42, 0x48, 0x4D, 0x39, 0x56, 0x41, - 0x59, 0x4E, 0x31, 0x41, 0x30, 0x63, 0x41, 0x4D, 0x45, 0x51, - 0x43, 0x49, 0x41, 0x4D, 0x6E, 0x4B, 0x66, 0x44, 0x76, 0x65, - 0x43, 0x61, 0x68, 0x47, 0x6D, 0x6F, 0x65, 0x69, 0x49, 0x48, - 0x6E, 0x67, 0x33, 0x4A, 0x66, 0x50, 0x75, 0x59, 0x49, 0x36, - 0x42, 0x52, 0x6F, 0x76, 0x30, 0x73, 0x50, 0x61, 0x46, 0x4B, - 0x53, 0x0A, 0x71, 0x6F, 0x2B, 0x68, 0x41, 0x69, 0x41, 0x4C, - 0x2F, 0x68, 0x73, 0x55, 0x75, 0x6C, 0x47, 0x43, 0x5A, 0x51, - 0x61, 0x37, 0x49, 0x74, 0x67, 0x61, 0x70, 0x35, 0x39, 0x55, - 0x59, 0x75, 0x75, 0x4E, 0x73, 0x74, 0x55, 0x54, 0x73, 0x37, - 0x69, 0x69, 0x38, 0x78, 0x52, 0x45, 0x73, 0x71, 0x41, 0x68, - 0x30, 0x41, 0x3D, 0x3D, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, - 0x45, 0x4E, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, - 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, - 0x0A + 0x20, 0x20, 0x20, 0x20, 0x20, 0x33, 0x34, 0x3A, 0x31, 0x44, + 0x3A, 0x37, 0x39, 0x3A, 0x34, 0x34, 0x3A, 0x31, 0x35, 0x3A, + 0x37, 0x39, 0x3A, 0x41, 0x31, 0x3A, 0x42, 0x31, 0x3A, 0x36, + 0x33, 0x3A, 0x39, 0x39, 0x3A, 0x45, 0x33, 0x3A, 0x45, 0x44, + 0x3A, 0x36, 0x35, 0x3A, 0x37, 0x43, 0x3A, 0x36, 0x34, 0x3A, + 0x38, 0x39, 0x3A, 0x38, 0x30, 0x3A, 0x46, 0x46, 0x3A, 0x42, + 0x38, 0x3A, 0x45, 0x43, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, + 0x39, 0x76, 0x33, 0x20, 0x42, 0x61, 0x73, 0x69, 0x63, 0x20, + 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6E, 0x74, + 0x73, 0x3A, 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, + 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x41, + 0x3A, 0x54, 0x52, 0x55, 0x45, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, + 0x30, 0x39, 0x76, 0x33, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x55, + 0x73, 0x61, 0x67, 0x65, 0x3A, 0x20, 0x63, 0x72, 0x69, 0x74, + 0x69, 0x63, 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x44, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6C, 0x20, 0x53, + 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2C, 0x20, + 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x2C, 0x20, 0x43, 0x52, + 0x4C, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, + 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, + 0x2D, 0x53, 0x4D, 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, + 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x56, + 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x33, 0x30, 0x3A, 0x34, 0x36, 0x3A, + 0x30, 0x32, 0x3A, 0x32, 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x66, + 0x65, 0x3A, 0x38, 0x64, 0x3A, 0x32, 0x66, 0x3A, 0x62, 0x39, + 0x3A, 0x63, 0x39, 0x3A, 0x35, 0x35, 0x3A, 0x64, 0x62, 0x3A, + 0x32, 0x63, 0x3A, 0x64, 0x34, 0x3A, 0x38, 0x39, 0x3A, 0x66, + 0x66, 0x3A, 0x61, 0x31, 0x3A, 0x39, 0x32, 0x3A, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x33, 0x3A, + 0x63, 0x65, 0x3A, 0x34, 0x61, 0x3A, 0x30, 0x39, 0x3A, 0x30, + 0x30, 0x3A, 0x37, 0x66, 0x3A, 0x63, 0x34, 0x3A, 0x62, 0x33, + 0x3A, 0x62, 0x36, 0x3A, 0x35, 0x35, 0x3A, 0x61, 0x65, 0x3A, + 0x61, 0x31, 0x3A, 0x66, 0x36, 0x3A, 0x37, 0x62, 0x3A, 0x33, + 0x65, 0x3A, 0x65, 0x64, 0x3A, 0x63, 0x34, 0x3A, 0x64, 0x64, + 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x37, 0x63, 0x3A, 0x30, 0x32, 0x3A, 0x32, 0x31, 0x3A, 0x30, + 0x30, 0x3A, 0x64, 0x30, 0x3A, 0x62, 0x65, 0x3A, 0x39, 0x62, + 0x3A, 0x34, 0x61, 0x3A, 0x61, 0x39, 0x3A, 0x63, 0x66, 0x3A, + 0x35, 0x32, 0x3A, 0x63, 0x31, 0x3A, 0x63, 0x64, 0x3A, 0x30, + 0x64, 0x3A, 0x62, 0x63, 0x3A, 0x38, 0x36, 0x3A, 0x32, 0x39, + 0x3A, 0x39, 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x63, 0x34, 0x3A, 0x65, 0x32, 0x3A, 0x66, + 0x31, 0x3A, 0x66, 0x61, 0x3A, 0x38, 0x36, 0x3A, 0x66, 0x33, + 0x3A, 0x37, 0x33, 0x3A, 0x30, 0x31, 0x3A, 0x65, 0x32, 0x3A, + 0x33, 0x62, 0x3A, 0x63, 0x35, 0x3A, 0x63, 0x63, 0x3A, 0x39, + 0x39, 0x3A, 0x30, 0x61, 0x3A, 0x62, 0x62, 0x3A, 0x63, 0x33, + 0x3A, 0x61, 0x38, 0x3A, 0x65, 0x65, 0x0A, 0x2D, 0x2D, 0x2D, + 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x43, 0x45, + 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, + 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x49, 0x49, 0x43, 0x6B, + 0x7A, 0x43, 0x43, 0x41, 0x6A, 0x69, 0x67, 0x41, 0x77, 0x49, + 0x42, 0x41, 0x67, 0x49, 0x55, 0x59, 0x53, 0x71, 0x54, 0x45, + 0x72, 0x4E, 0x75, 0x2F, 0x39, 0x61, 0x61, 0x70, 0x35, 0x6A, + 0x45, 0x53, 0x55, 0x33, 0x47, 0x4C, 0x44, 0x37, 0x71, 0x57, + 0x76, 0x6B, 0x77, 0x43, 0x67, 0x59, 0x49, 0x4B, 0x6F, 0x45, + 0x63, 0x7A, 0x31, 0x55, 0x42, 0x67, 0x33, 0x55, 0x77, 0x0A, + 0x67, 0x5A, 0x55, 0x78, 0x43, 0x7A, 0x41, 0x4A, 0x42, 0x67, + 0x4E, 0x56, 0x42, 0x41, 0x59, 0x54, 0x41, 0x6C, 0x56, 0x54, + 0x4D, 0x52, 0x41, 0x77, 0x44, 0x67, 0x59, 0x44, 0x56, 0x51, + 0x51, 0x49, 0x44, 0x41, 0x64, 0x4E, 0x62, 0x32, 0x35, 0x30, + 0x59, 0x57, 0x35, 0x68, 0x4D, 0x52, 0x41, 0x77, 0x44, 0x67, + 0x59, 0x44, 0x56, 0x51, 0x51, 0x48, 0x44, 0x41, 0x64, 0x43, + 0x62, 0x33, 0x70, 0x6C, 0x0A, 0x62, 0x57, 0x46, 0x75, 0x4D, + 0x52, 0x51, 0x77, 0x45, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, + 0x4B, 0x44, 0x41, 0x74, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x55, + 0x31, 0x4E, 0x4D, 0x58, 0x31, 0x4E, 0x4E, 0x4D, 0x6A, 0x45, + 0x52, 0x4D, 0x41, 0x38, 0x47, 0x41, 0x31, 0x55, 0x45, 0x43, + 0x77, 0x77, 0x49, 0x55, 0x6D, 0x39, 0x76, 0x64, 0x43, 0x31, + 0x54, 0x54, 0x54, 0x49, 0x78, 0x47, 0x44, 0x41, 0x57, 0x0A, + 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x4D, 0x4D, 0x44, 0x33, + 0x64, 0x33, 0x64, 0x79, 0x35, 0x33, 0x62, 0x32, 0x78, 0x6D, + 0x63, 0x33, 0x4E, 0x73, 0x4C, 0x6D, 0x4E, 0x76, 0x62, 0x54, + 0x45, 0x66, 0x4D, 0x42, 0x30, 0x47, 0x43, 0x53, 0x71, 0x47, + 0x53, 0x49, 0x62, 0x33, 0x44, 0x51, 0x45, 0x4A, 0x41, 0x52, + 0x59, 0x51, 0x61, 0x57, 0x35, 0x6D, 0x62, 0x30, 0x42, 0x33, + 0x62, 0x32, 0x78, 0x6D, 0x0A, 0x63, 0x33, 0x4E, 0x73, 0x4C, + 0x6D, 0x4E, 0x76, 0x62, 0x54, 0x41, 0x65, 0x46, 0x77, 0x30, + 0x79, 0x4E, 0x6A, 0x41, 0x79, 0x4D, 0x54, 0x67, 0x78, 0x4E, + 0x7A, 0x55, 0x32, 0x4E, 0x54, 0x64, 0x61, 0x46, 0x77, 0x30, + 0x79, 0x4F, 0x44, 0x45, 0x78, 0x4D, 0x54, 0x51, 0x78, 0x4E, + 0x7A, 0x55, 0x32, 0x4E, 0x54, 0x64, 0x61, 0x4D, 0x49, 0x47, + 0x56, 0x4D, 0x51, 0x73, 0x77, 0x43, 0x51, 0x59, 0x44, 0x0A, + 0x56, 0x51, 0x51, 0x47, 0x45, 0x77, 0x4A, 0x56, 0x55, 0x7A, + 0x45, 0x51, 0x4D, 0x41, 0x34, 0x47, 0x41, 0x31, 0x55, 0x45, + 0x43, 0x41, 0x77, 0x48, 0x54, 0x57, 0x39, 0x75, 0x64, 0x47, + 0x46, 0x75, 0x59, 0x54, 0x45, 0x51, 0x4D, 0x41, 0x34, 0x47, + 0x41, 0x31, 0x55, 0x45, 0x42, 0x77, 0x77, 0x48, 0x51, 0x6D, + 0x39, 0x36, 0x5A, 0x57, 0x31, 0x68, 0x62, 0x6A, 0x45, 0x55, + 0x4D, 0x42, 0x49, 0x47, 0x0A, 0x41, 0x31, 0x55, 0x45, 0x43, + 0x67, 0x77, 0x4C, 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6C, 0x4E, + 0x54, 0x54, 0x46, 0x39, 0x54, 0x54, 0x54, 0x49, 0x78, 0x45, + 0x54, 0x41, 0x50, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x73, + 0x4D, 0x43, 0x46, 0x4A, 0x76, 0x62, 0x33, 0x51, 0x74, 0x55, + 0x30, 0x30, 0x79, 0x4D, 0x52, 0x67, 0x77, 0x46, 0x67, 0x59, + 0x44, 0x56, 0x51, 0x51, 0x44, 0x44, 0x41, 0x39, 0x33, 0x0A, + 0x64, 0x33, 0x63, 0x75, 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6E, + 0x4E, 0x7A, 0x62, 0x43, 0x35, 0x6A, 0x62, 0x32, 0x30, 0x78, + 0x48, 0x7A, 0x41, 0x64, 0x42, 0x67, 0x6B, 0x71, 0x68, 0x6B, + 0x69, 0x47, 0x39, 0x77, 0x30, 0x42, 0x43, 0x51, 0x45, 0x57, + 0x45, 0x47, 0x6C, 0x75, 0x5A, 0x6D, 0x39, 0x41, 0x64, 0x32, + 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x35, 0x6A, + 0x62, 0x32, 0x30, 0x77, 0x0A, 0x57, 0x6A, 0x41, 0x55, 0x42, + 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, 0x50, 0x56, 0x51, 0x47, + 0x43, 0x4C, 0x51, 0x59, 0x49, 0x4B, 0x6F, 0x45, 0x63, 0x7A, + 0x31, 0x55, 0x42, 0x67, 0x69, 0x30, 0x44, 0x51, 0x67, 0x41, + 0x45, 0x75, 0x35, 0x78, 0x31, 0x6A, 0x50, 0x63, 0x58, 0x2B, + 0x45, 0x69, 0x72, 0x39, 0x2F, 0x62, 0x62, 0x44, 0x5A, 0x71, + 0x4E, 0x6E, 0x38, 0x4C, 0x52, 0x52, 0x35, 0x65, 0x56, 0x0A, + 0x43, 0x30, 0x37, 0x6D, 0x56, 0x2B, 0x7A, 0x46, 0x2B, 0x46, + 0x64, 0x55, 0x63, 0x54, 0x6B, 0x38, 0x65, 0x65, 0x46, 0x41, + 0x50, 0x37, 0x5A, 0x52, 0x36, 0x58, 0x7A, 0x48, 0x32, 0x69, + 0x33, 0x76, 0x30, 0x75, 0x68, 0x35, 0x67, 0x58, 0x75, 0x72, + 0x6F, 0x31, 0x39, 0x72, 0x4B, 0x6D, 0x79, 0x58, 0x47, 0x6C, + 0x36, 0x4F, 0x32, 0x64, 0x44, 0x4D, 0x42, 0x4B, 0x4E, 0x6A, + 0x4D, 0x47, 0x45, 0x77, 0x0A, 0x48, 0x51, 0x59, 0x44, 0x56, + 0x52, 0x30, 0x4F, 0x42, 0x42, 0x59, 0x45, 0x46, 0x44, 0x51, + 0x64, 0x65, 0x55, 0x51, 0x56, 0x65, 0x61, 0x47, 0x78, 0x59, + 0x35, 0x6E, 0x6A, 0x37, 0x57, 0x56, 0x38, 0x5A, 0x49, 0x6D, + 0x41, 0x2F, 0x37, 0x6A, 0x73, 0x4D, 0x42, 0x38, 0x47, 0x41, + 0x31, 0x55, 0x64, 0x49, 0x77, 0x51, 0x59, 0x4D, 0x42, 0x61, + 0x41, 0x46, 0x44, 0x51, 0x64, 0x65, 0x55, 0x51, 0x56, 0x0A, + 0x65, 0x61, 0x47, 0x78, 0x59, 0x35, 0x6E, 0x6A, 0x37, 0x57, + 0x56, 0x38, 0x5A, 0x49, 0x6D, 0x41, 0x2F, 0x37, 0x6A, 0x73, + 0x4D, 0x41, 0x38, 0x47, 0x41, 0x31, 0x55, 0x64, 0x45, 0x77, + 0x45, 0x42, 0x2F, 0x77, 0x51, 0x46, 0x4D, 0x41, 0x4D, 0x42, + 0x41, 0x66, 0x38, 0x77, 0x44, 0x67, 0x59, 0x44, 0x56, 0x52, + 0x30, 0x50, 0x41, 0x51, 0x48, 0x2F, 0x42, 0x41, 0x51, 0x44, + 0x41, 0x67, 0x47, 0x47, 0x0A, 0x4D, 0x41, 0x6F, 0x47, 0x43, + 0x43, 0x71, 0x42, 0x48, 0x4D, 0x39, 0x56, 0x41, 0x59, 0x4E, + 0x31, 0x41, 0x30, 0x6B, 0x41, 0x4D, 0x45, 0x59, 0x43, 0x49, + 0x51, 0x44, 0x2B, 0x6A, 0x53, 0x2B, 0x35, 0x79, 0x56, 0x58, + 0x62, 0x4C, 0x4E, 0x53, 0x4A, 0x2F, 0x36, 0x47, 0x53, 0x41, + 0x38, 0x35, 0x4B, 0x43, 0x51, 0x42, 0x2F, 0x78, 0x4C, 0x4F, + 0x32, 0x56, 0x61, 0x36, 0x68, 0x39, 0x6E, 0x73, 0x2B, 0x0A, + 0x37, 0x63, 0x54, 0x64, 0x66, 0x41, 0x49, 0x68, 0x41, 0x4E, + 0x43, 0x2B, 0x6D, 0x30, 0x71, 0x70, 0x7A, 0x31, 0x4C, 0x42, + 0x7A, 0x51, 0x32, 0x38, 0x68, 0x69, 0x6D, 0x65, 0x78, 0x4F, + 0x4C, 0x78, 0x2B, 0x6F, 0x62, 0x7A, 0x63, 0x77, 0x48, 0x69, + 0x4F, 0x38, 0x58, 0x4D, 0x6D, 0x51, 0x71, 0x37, 0x77, 0x36, + 0x6A, 0x75, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, + 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, + 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A }; #define sizeof_root_sm2 (sizeof(root_sm2)) @@ -1657,271 +1648,267 @@ static const unsigned char self_sm2_cert[] = 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6C, 0x20, 0x4E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x30, 0x36, 0x3A, 0x37, 0x62, 0x3A, 0x33, - 0x61, 0x3A, 0x35, 0x64, 0x3A, 0x63, 0x66, 0x3A, 0x32, 0x32, - 0x3A, 0x61, 0x39, 0x3A, 0x36, 0x64, 0x3A, 0x36, 0x64, 0x3A, - 0x37, 0x38, 0x3A, 0x32, 0x62, 0x3A, 0x31, 0x30, 0x3A, 0x30, - 0x31, 0x3A, 0x35, 0x31, 0x3A, 0x62, 0x36, 0x3A, 0x34, 0x63, - 0x3A, 0x64, 0x34, 0x3A, 0x38, 0x32, 0x3A, 0x61, 0x32, 0x3A, - 0x61, 0x31, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x32, 0x36, 0x3A, 0x32, 0x64, 0x3A, 0x34, + 0x62, 0x3A, 0x66, 0x65, 0x3A, 0x36, 0x34, 0x3A, 0x37, 0x64, + 0x3A, 0x39, 0x37, 0x3A, 0x34, 0x34, 0x3A, 0x63, 0x38, 0x3A, + 0x38, 0x35, 0x3A, 0x32, 0x32, 0x3A, 0x30, 0x31, 0x3A, 0x39, + 0x36, 0x3A, 0x62, 0x33, 0x3A, 0x61, 0x35, 0x3A, 0x64, 0x62, + 0x3A, 0x31, 0x63, 0x3A, 0x36, 0x34, 0x3A, 0x31, 0x32, 0x3A, + 0x31, 0x62, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x3A, - 0x20, 0x43, 0x20, 0x3D, 0x20, 0x41, 0x55, 0x2C, 0x20, 0x53, - 0x54, 0x20, 0x3D, 0x20, 0x51, 0x4C, 0x44, 0x2C, 0x20, 0x4F, - 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, - 0x2C, 0x20, 0x4F, 0x55, 0x20, 0x3D, 0x20, 0x54, 0x65, 0x73, - 0x74, 0x69, 0x6E, 0x67, 0x2C, 0x20, 0x43, 0x4E, 0x20, 0x3D, - 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2D, 0x64, + 0x20, 0x43, 0x3D, 0x41, 0x55, 0x2C, 0x20, 0x53, 0x54, 0x3D, + 0x51, 0x4C, 0x44, 0x2C, 0x20, 0x4F, 0x3D, 0x77, 0x6F, 0x6C, + 0x66, 0x53, 0x53, 0x4C, 0x2C, 0x20, 0x4F, 0x55, 0x3D, 0x54, + 0x65, 0x73, 0x74, 0x69, 0x6E, 0x67, 0x2C, 0x20, 0x43, 0x4E, + 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2D, 0x64, 0x65, 0x76, 0x2D, 0x73, 0x6D, 0x32, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x20, 0x3D, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, - 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, - 0x20, 0x55, 0x49, 0x44, 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, - 0x66, 0x53, 0x53, 0x4C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, - 0x79, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x42, 0x65, - 0x66, 0x6F, 0x72, 0x65, 0x3A, 0x20, 0x4E, 0x6F, 0x76, 0x20, - 0x32, 0x32, 0x20, 0x32, 0x31, 0x3A, 0x32, 0x38, 0x3A, 0x33, - 0x37, 0x20, 0x32, 0x30, 0x32, 0x33, 0x20, 0x47, 0x4D, 0x54, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x41, 0x66, 0x74, - 0x65, 0x72, 0x20, 0x3A, 0x20, 0x41, 0x75, 0x67, 0x20, 0x31, - 0x38, 0x20, 0x32, 0x31, 0x3A, 0x32, 0x38, 0x3A, 0x33, 0x37, - 0x20, 0x32, 0x30, 0x32, 0x36, 0x20, 0x47, 0x4D, 0x54, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, - 0x62, 0x6A, 0x65, 0x63, 0x74, 0x3A, 0x20, 0x43, 0x20, 0x3D, - 0x20, 0x41, 0x55, 0x2C, 0x20, 0x53, 0x54, 0x20, 0x3D, 0x20, - 0x51, 0x4C, 0x44, 0x2C, 0x20, 0x4F, 0x20, 0x3D, 0x20, 0x77, - 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x2C, 0x20, 0x4F, 0x55, - 0x20, 0x3D, 0x20, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6E, 0x67, - 0x2C, 0x20, 0x43, 0x4E, 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, - 0x66, 0x73, 0x73, 0x6C, 0x2D, 0x64, 0x65, 0x76, 0x2D, 0x73, - 0x6D, 0x32, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3D, 0x20, 0x69, - 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, - 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x55, 0x49, 0x44, - 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, - 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x50, 0x75, 0x62, - 0x6C, 0x69, 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x6E, - 0x66, 0x6F, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, - 0x69, 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x41, 0x6C, 0x67, - 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x69, 0x64, - 0x2D, 0x65, 0x63, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x4B, - 0x65, 0x79, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, - 0x75, 0x62, 0x6C, 0x69, 0x63, 0x2D, 0x4B, 0x65, 0x79, 0x3A, - 0x20, 0x28, 0x32, 0x35, 0x36, 0x20, 0x62, 0x69, 0x74, 0x29, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x75, 0x62, - 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, + 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x55, + 0x49, 0x44, 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x56, + 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, 0x79, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x30, 0x34, 0x3A, 0x64, 0x38, 0x3A, 0x63, 0x34, - 0x3A, 0x61, 0x31, 0x3A, 0x66, 0x31, 0x3A, 0x30, 0x62, 0x3A, - 0x38, 0x62, 0x3A, 0x38, 0x64, 0x3A, 0x63, 0x34, 0x3A, 0x37, - 0x64, 0x3A, 0x64, 0x63, 0x3A, 0x64, 0x34, 0x3A, 0x36, 0x35, - 0x3A, 0x62, 0x39, 0x3A, 0x61, 0x35, 0x3A, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x35, 0x35, - 0x3A, 0x34, 0x65, 0x3A, 0x66, 0x62, 0x3A, 0x61, 0x63, 0x3A, - 0x33, 0x33, 0x3A, 0x61, 0x62, 0x3A, 0x39, 0x62, 0x3A, 0x34, - 0x33, 0x3A, 0x39, 0x34, 0x3A, 0x34, 0x63, 0x3A, 0x34, 0x38, - 0x3A, 0x34, 0x30, 0x3A, 0x31, 0x62, 0x3A, 0x33, 0x33, 0x3A, - 0x64, 0x39, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x31, 0x62, 0x3A, 0x63, 0x63, 0x3A, - 0x33, 0x31, 0x3A, 0x63, 0x31, 0x3A, 0x38, 0x32, 0x3A, 0x35, - 0x36, 0x3A, 0x33, 0x66, 0x3A, 0x62, 0x30, 0x3A, 0x63, 0x30, - 0x3A, 0x36, 0x62, 0x3A, 0x39, 0x35, 0x3A, 0x34, 0x30, 0x3A, - 0x35, 0x31, 0x3A, 0x66, 0x64, 0x3A, 0x38, 0x38, 0x3A, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x30, 0x32, 0x3A, 0x30, 0x31, 0x3A, 0x62, 0x31, 0x3A, 0x62, - 0x30, 0x3A, 0x39, 0x34, 0x3A, 0x36, 0x63, 0x3A, 0x30, 0x36, - 0x3A, 0x65, 0x62, 0x3A, 0x61, 0x37, 0x3A, 0x64, 0x61, 0x3A, - 0x38, 0x65, 0x3A, 0x65, 0x65, 0x3A, 0x37, 0x30, 0x3A, 0x62, - 0x36, 0x3A, 0x65, 0x35, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x62, 0x3A, 0x62, - 0x34, 0x3A, 0x31, 0x65, 0x3A, 0x65, 0x37, 0x3A, 0x62, 0x34, + 0x4E, 0x6F, 0x74, 0x20, 0x42, 0x65, 0x66, 0x6F, 0x72, 0x65, + 0x3A, 0x20, 0x46, 0x65, 0x62, 0x20, 0x31, 0x38, 0x20, 0x31, + 0x37, 0x3A, 0x35, 0x36, 0x3A, 0x35, 0x37, 0x20, 0x32, 0x30, + 0x32, 0x36, 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, + 0x6F, 0x74, 0x20, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x3A, + 0x20, 0x4E, 0x6F, 0x76, 0x20, 0x31, 0x34, 0x20, 0x31, 0x37, + 0x3A, 0x35, 0x36, 0x3A, 0x35, 0x37, 0x20, 0x32, 0x30, 0x32, + 0x38, 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, + 0x74, 0x3A, 0x20, 0x43, 0x3D, 0x41, 0x55, 0x2C, 0x20, 0x53, + 0x54, 0x3D, 0x51, 0x4C, 0x44, 0x2C, 0x20, 0x4F, 0x3D, 0x77, + 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x2C, 0x20, 0x4F, 0x55, + 0x3D, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6E, 0x67, 0x2C, 0x20, + 0x43, 0x4E, 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, + 0x2D, 0x64, 0x65, 0x76, 0x2D, 0x73, 0x6D, 0x32, 0x2C, 0x20, + 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, + 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, + 0x20, 0x55, 0x49, 0x44, 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x53, + 0x53, 0x4C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x50, + 0x75, 0x62, 0x6C, 0x69, 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, + 0x49, 0x6E, 0x66, 0x6F, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, + 0x62, 0x6C, 0x69, 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x41, + 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, + 0x73, 0x6D, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x2D, 0x4B, 0x65, 0x79, + 0x3A, 0x20, 0x28, 0x32, 0x35, 0x36, 0x20, 0x62, 0x69, 0x74, + 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x75, + 0x62, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x30, 0x34, 0x3A, 0x64, 0x38, 0x3A, 0x63, + 0x34, 0x3A, 0x61, 0x31, 0x3A, 0x66, 0x31, 0x3A, 0x30, 0x62, + 0x3A, 0x38, 0x62, 0x3A, 0x38, 0x64, 0x3A, 0x63, 0x34, 0x3A, + 0x37, 0x64, 0x3A, 0x64, 0x63, 0x3A, 0x64, 0x34, 0x3A, 0x36, + 0x35, 0x3A, 0x62, 0x39, 0x3A, 0x61, 0x35, 0x3A, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x35, + 0x35, 0x3A, 0x34, 0x65, 0x3A, 0x66, 0x62, 0x3A, 0x61, 0x63, + 0x3A, 0x33, 0x33, 0x3A, 0x61, 0x62, 0x3A, 0x39, 0x62, 0x3A, + 0x34, 0x33, 0x3A, 0x39, 0x34, 0x3A, 0x34, 0x63, 0x3A, 0x34, + 0x38, 0x3A, 0x34, 0x30, 0x3A, 0x31, 0x62, 0x3A, 0x33, 0x33, + 0x3A, 0x64, 0x39, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x31, 0x62, 0x3A, 0x63, 0x63, + 0x3A, 0x33, 0x31, 0x3A, 0x63, 0x31, 0x3A, 0x38, 0x32, 0x3A, + 0x35, 0x36, 0x3A, 0x33, 0x66, 0x3A, 0x62, 0x30, 0x3A, 0x63, + 0x30, 0x3A, 0x36, 0x62, 0x3A, 0x39, 0x35, 0x3A, 0x34, 0x30, + 0x3A, 0x35, 0x31, 0x3A, 0x66, 0x64, 0x3A, 0x38, 0x38, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x53, 0x4E, - 0x31, 0x20, 0x4F, 0x49, 0x44, 0x3A, 0x20, 0x53, 0x4D, 0x32, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, - 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x65, 0x78, 0x74, 0x65, - 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x3A, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x53, 0x75, 0x62, - 0x6A, 0x65, 0x63, 0x74, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, - 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3A, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x36, 0x45, - 0x3A, 0x39, 0x37, 0x3A, 0x45, 0x38, 0x3A, 0x39, 0x38, 0x3A, - 0x42, 0x36, 0x3A, 0x35, 0x42, 0x3A, 0x42, 0x36, 0x3A, 0x41, - 0x45, 0x3A, 0x38, 0x37, 0x3A, 0x30, 0x34, 0x3A, 0x44, 0x42, - 0x3A, 0x31, 0x34, 0x3A, 0x35, 0x36, 0x3A, 0x36, 0x36, 0x3A, - 0x31, 0x36, 0x3A, 0x46, 0x34, 0x3A, 0x42, 0x38, 0x3A, 0x32, - 0x44, 0x3A, 0x38, 0x43, 0x3A, 0x46, 0x32, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x41, 0x75, 0x74, - 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x20, 0x4B, 0x65, 0x79, - 0x20, 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x36, 0x45, 0x3A, 0x39, 0x37, 0x3A, 0x45, 0x38, 0x3A, 0x39, - 0x38, 0x3A, 0x42, 0x36, 0x3A, 0x35, 0x42, 0x3A, 0x42, 0x36, - 0x3A, 0x41, 0x45, 0x3A, 0x38, 0x37, 0x3A, 0x30, 0x34, 0x3A, - 0x44, 0x42, 0x3A, 0x31, 0x34, 0x3A, 0x35, 0x36, 0x3A, 0x36, - 0x36, 0x3A, 0x31, 0x36, 0x3A, 0x46, 0x34, 0x3A, 0x42, 0x38, - 0x3A, 0x32, 0x44, 0x3A, 0x38, 0x43, 0x3A, 0x46, 0x32, 0x0A, + 0x20, 0x30, 0x32, 0x3A, 0x30, 0x31, 0x3A, 0x62, 0x31, 0x3A, + 0x62, 0x30, 0x3A, 0x39, 0x34, 0x3A, 0x36, 0x63, 0x3A, 0x30, + 0x36, 0x3A, 0x65, 0x62, 0x3A, 0x61, 0x37, 0x3A, 0x64, 0x61, + 0x3A, 0x38, 0x65, 0x3A, 0x65, 0x65, 0x3A, 0x37, 0x30, 0x3A, + 0x62, 0x36, 0x3A, 0x65, 0x35, 0x3A, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x62, 0x3A, + 0x62, 0x34, 0x3A, 0x31, 0x65, 0x3A, 0x65, 0x37, 0x3A, 0x62, + 0x34, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x53, + 0x4E, 0x31, 0x20, 0x4F, 0x49, 0x44, 0x3A, 0x20, 0x53, 0x4D, + 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x65, 0x78, 0x74, + 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x42, - 0x61, 0x73, 0x69, 0x63, 0x20, 0x43, 0x6F, 0x6E, 0x73, 0x74, - 0x72, 0x61, 0x69, 0x6E, 0x74, 0x73, 0x3A, 0x20, 0x63, 0x72, - 0x69, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x53, 0x75, + 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x4B, 0x65, 0x79, 0x20, + 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x36, + 0x45, 0x3A, 0x39, 0x37, 0x3A, 0x45, 0x38, 0x3A, 0x39, 0x38, + 0x3A, 0x42, 0x36, 0x3A, 0x35, 0x42, 0x3A, 0x42, 0x36, 0x3A, + 0x41, 0x45, 0x3A, 0x38, 0x37, 0x3A, 0x30, 0x34, 0x3A, 0x44, + 0x42, 0x3A, 0x31, 0x34, 0x3A, 0x35, 0x36, 0x3A, 0x36, 0x36, + 0x3A, 0x31, 0x36, 0x3A, 0x46, 0x34, 0x3A, 0x42, 0x38, 0x3A, + 0x32, 0x44, 0x3A, 0x38, 0x43, 0x3A, 0x46, 0x32, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x41, 0x75, + 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x20, 0x4B, 0x65, + 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x43, 0x41, 0x3A, 0x54, 0x52, 0x55, 0x45, + 0x20, 0x36, 0x45, 0x3A, 0x39, 0x37, 0x3A, 0x45, 0x38, 0x3A, + 0x39, 0x38, 0x3A, 0x42, 0x36, 0x3A, 0x35, 0x42, 0x3A, 0x42, + 0x36, 0x3A, 0x41, 0x45, 0x3A, 0x38, 0x37, 0x3A, 0x30, 0x34, + 0x3A, 0x44, 0x42, 0x3A, 0x31, 0x34, 0x3A, 0x35, 0x36, 0x3A, + 0x36, 0x36, 0x3A, 0x31, 0x36, 0x3A, 0x46, 0x34, 0x3A, 0x42, + 0x38, 0x3A, 0x32, 0x44, 0x3A, 0x38, 0x43, 0x3A, 0x46, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, - 0x4B, 0x65, 0x79, 0x20, 0x55, 0x73, 0x61, 0x67, 0x65, 0x3A, - 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x0A, + 0x42, 0x61, 0x73, 0x69, 0x63, 0x20, 0x43, 0x6F, 0x6E, 0x73, + 0x74, 0x72, 0x61, 0x69, 0x6E, 0x74, 0x73, 0x3A, 0x20, 0x63, + 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x69, 0x67, 0x69, - 0x74, 0x61, 0x6C, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2C, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x53, 0x69, 0x67, - 0x6E, 0x2C, 0x20, 0x43, 0x52, 0x4C, 0x20, 0x53, 0x69, 0x67, - 0x6E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, 0x6C, 0x67, 0x6F, - 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, 0x32, - 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3A, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x33, - 0x30, 0x3A, 0x34, 0x34, 0x3A, 0x30, 0x32, 0x3A, 0x32, 0x30, - 0x3A, 0x30, 0x66, 0x3A, 0x63, 0x33, 0x3A, 0x32, 0x63, 0x3A, - 0x33, 0x36, 0x3A, 0x65, 0x33, 0x3A, 0x39, 0x66, 0x3A, 0x31, - 0x63, 0x3A, 0x65, 0x39, 0x3A, 0x36, 0x38, 0x3A, 0x31, 0x63, - 0x3A, 0x33, 0x62, 0x3A, 0x34, 0x33, 0x3A, 0x31, 0x38, 0x3A, - 0x35, 0x62, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x63, 0x39, 0x3A, 0x38, 0x66, 0x3A, 0x65, 0x34, - 0x3A, 0x66, 0x61, 0x3A, 0x64, 0x64, 0x3A, 0x33, 0x33, 0x3A, - 0x63, 0x31, 0x3A, 0x62, 0x38, 0x3A, 0x31, 0x63, 0x3A, 0x64, - 0x33, 0x3A, 0x64, 0x34, 0x3A, 0x36, 0x31, 0x3A, 0x33, 0x33, - 0x3A, 0x66, 0x38, 0x3A, 0x33, 0x37, 0x3A, 0x39, 0x64, 0x3A, - 0x35, 0x61, 0x3A, 0x66, 0x34, 0x3A, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x32, 0x3A, 0x32, 0x30, - 0x3A, 0x33, 0x61, 0x3A, 0x62, 0x39, 0x3A, 0x61, 0x38, 0x3A, - 0x34, 0x33, 0x3A, 0x38, 0x30, 0x3A, 0x63, 0x66, 0x3A, 0x33, - 0x38, 0x3A, 0x32, 0x35, 0x3A, 0x65, 0x39, 0x3A, 0x36, 0x34, - 0x3A, 0x64, 0x38, 0x3A, 0x32, 0x36, 0x3A, 0x34, 0x37, 0x3A, - 0x39, 0x64, 0x3A, 0x35, 0x30, 0x3A, 0x30, 0x34, 0x3A, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x63, - 0x3A, 0x38, 0x61, 0x3A, 0x65, 0x38, 0x3A, 0x61, 0x32, 0x3A, - 0x34, 0x32, 0x3A, 0x65, 0x38, 0x3A, 0x36, 0x33, 0x3A, 0x64, - 0x64, 0x3A, 0x35, 0x33, 0x3A, 0x39, 0x34, 0x3A, 0x37, 0x64, - 0x3A, 0x33, 0x38, 0x3A, 0x36, 0x64, 0x3A, 0x35, 0x32, 0x3A, - 0x37, 0x30, 0x3A, 0x66, 0x64, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, - 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x43, 0x45, 0x52, - 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, 0x2D, - 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x49, 0x49, 0x43, 0x6A, 0x44, - 0x43, 0x43, 0x41, 0x6A, 0x4F, 0x67, 0x41, 0x77, 0x49, 0x42, - 0x41, 0x67, 0x49, 0x55, 0x42, 0x6E, 0x73, 0x36, 0x58, 0x63, - 0x38, 0x69, 0x71, 0x57, 0x31, 0x74, 0x65, 0x43, 0x73, 0x51, - 0x41, 0x56, 0x47, 0x32, 0x54, 0x4E, 0x53, 0x43, 0x6F, 0x71, - 0x45, 0x77, 0x43, 0x67, 0x59, 0x49, 0x4B, 0x6F, 0x45, 0x63, - 0x7A, 0x31, 0x55, 0x42, 0x67, 0x33, 0x55, 0x77, 0x0A, 0x67, - 0x5A, 0x4D, 0x78, 0x43, 0x7A, 0x41, 0x4A, 0x42, 0x67, 0x4E, - 0x56, 0x42, 0x41, 0x59, 0x54, 0x41, 0x6B, 0x46, 0x56, 0x4D, - 0x51, 0x77, 0x77, 0x43, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, - 0x49, 0x44, 0x41, 0x4E, 0x52, 0x54, 0x45, 0x51, 0x78, 0x45, - 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x6F, - 0x4D, 0x42, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, 0x55, - 0x30, 0x77, 0x78, 0x0A, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, - 0x4E, 0x56, 0x42, 0x41, 0x73, 0x4D, 0x42, 0x31, 0x52, 0x6C, - 0x63, 0x33, 0x52, 0x70, 0x62, 0x6D, 0x63, 0x78, 0x47, 0x44, - 0x41, 0x57, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x4D, 0x4D, - 0x44, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x7A, 0x63, 0x32, - 0x77, 0x74, 0x5A, 0x47, 0x56, 0x32, 0x4C, 0x58, 0x4E, 0x74, - 0x4D, 0x6A, 0x45, 0x66, 0x4D, 0x42, 0x30, 0x47, 0x0A, 0x43, - 0x53, 0x71, 0x47, 0x53, 0x49, 0x62, 0x33, 0x44, 0x51, 0x45, - 0x4A, 0x41, 0x52, 0x59, 0x51, 0x61, 0x57, 0x35, 0x6D, 0x62, - 0x30, 0x42, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x63, 0x33, 0x4E, - 0x73, 0x4C, 0x6D, 0x4E, 0x76, 0x62, 0x54, 0x45, 0x58, 0x4D, - 0x42, 0x55, 0x47, 0x43, 0x67, 0x6D, 0x53, 0x4A, 0x6F, 0x6D, - 0x54, 0x38, 0x69, 0x78, 0x6B, 0x41, 0x51, 0x45, 0x4D, 0x42, - 0x33, 0x64, 0x76, 0x0A, 0x62, 0x47, 0x5A, 0x54, 0x55, 0x30, - 0x77, 0x77, 0x48, 0x68, 0x63, 0x4E, 0x4D, 0x6A, 0x4D, 0x78, - 0x4D, 0x54, 0x49, 0x79, 0x4D, 0x6A, 0x45, 0x79, 0x4F, 0x44, - 0x4D, 0x33, 0x57, 0x68, 0x63, 0x4E, 0x4D, 0x6A, 0x59, 0x77, - 0x4F, 0x44, 0x45, 0x34, 0x4D, 0x6A, 0x45, 0x79, 0x4F, 0x44, - 0x4D, 0x33, 0x57, 0x6A, 0x43, 0x42, 0x6B, 0x7A, 0x45, 0x4C, - 0x4D, 0x41, 0x6B, 0x47, 0x41, 0x31, 0x55, 0x45, 0x0A, 0x42, - 0x68, 0x4D, 0x43, 0x51, 0x56, 0x55, 0x78, 0x44, 0x44, 0x41, - 0x4B, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x67, 0x4D, 0x41, - 0x31, 0x46, 0x4D, 0x52, 0x44, 0x45, 0x51, 0x4D, 0x41, 0x34, - 0x47, 0x41, 0x31, 0x55, 0x45, 0x43, 0x67, 0x77, 0x48, 0x64, - 0x32, 0x39, 0x73, 0x5A, 0x6C, 0x4E, 0x54, 0x54, 0x44, 0x45, + 0x20, 0x20, 0x20, 0x20, 0x43, 0x41, 0x3A, 0x54, 0x52, 0x55, + 0x45, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, + 0x20, 0x4B, 0x65, 0x79, 0x20, 0x55, 0x73, 0x61, 0x67, 0x65, + 0x3A, 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6C, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x69, 0x67, + 0x69, 0x74, 0x61, 0x6C, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x2C, 0x20, 0x43, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x53, 0x69, + 0x67, 0x6E, 0x2C, 0x20, 0x43, 0x52, 0x4C, 0x20, 0x53, 0x69, + 0x67, 0x6E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, + 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, 0x6C, 0x67, + 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, + 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, + 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x33, 0x30, 0x3A, 0x34, 0x35, 0x3A, 0x30, 0x32, 0x3A, 0x32, + 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x63, 0x62, 0x3A, 0x31, 0x61, + 0x3A, 0x66, 0x36, 0x3A, 0x33, 0x64, 0x3A, 0x63, 0x35, 0x3A, + 0x36, 0x33, 0x3A, 0x34, 0x66, 0x3A, 0x66, 0x62, 0x3A, 0x32, + 0x33, 0x3A, 0x63, 0x39, 0x3A, 0x32, 0x32, 0x3A, 0x65, 0x35, + 0x3A, 0x63, 0x36, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x35, 0x33, 0x3A, 0x31, 0x32, 0x3A, 0x65, + 0x30, 0x3A, 0x39, 0x30, 0x3A, 0x38, 0x31, 0x3A, 0x34, 0x32, + 0x3A, 0x65, 0x66, 0x3A, 0x36, 0x31, 0x3A, 0x39, 0x38, 0x3A, + 0x30, 0x62, 0x3A, 0x63, 0x39, 0x3A, 0x39, 0x33, 0x3A, 0x66, + 0x66, 0x3A, 0x32, 0x37, 0x3A, 0x35, 0x39, 0x3A, 0x65, 0x36, + 0x3A, 0x38, 0x31, 0x3A, 0x35, 0x37, 0x3A, 0x0A, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x35, 0x3A, 0x30, + 0x32, 0x3A, 0x32, 0x30, 0x3A, 0x34, 0x35, 0x3A, 0x37, 0x61, + 0x3A, 0x36, 0x65, 0x3A, 0x64, 0x62, 0x3A, 0x30, 0x66, 0x3A, + 0x31, 0x35, 0x3A, 0x63, 0x37, 0x3A, 0x39, 0x30, 0x3A, 0x66, + 0x30, 0x3A, 0x61, 0x64, 0x3A, 0x66, 0x65, 0x3A, 0x61, 0x36, + 0x3A, 0x38, 0x35, 0x3A, 0x34, 0x32, 0x3A, 0x64, 0x33, 0x3A, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, + 0x63, 0x3A, 0x65, 0x64, 0x3A, 0x37, 0x62, 0x3A, 0x35, 0x36, + 0x3A, 0x65, 0x36, 0x3A, 0x31, 0x32, 0x3A, 0x36, 0x65, 0x3A, + 0x37, 0x33, 0x3A, 0x31, 0x32, 0x3A, 0x35, 0x35, 0x3A, 0x36, + 0x39, 0x3A, 0x33, 0x32, 0x3A, 0x63, 0x35, 0x3A, 0x31, 0x36, + 0x3A, 0x32, 0x32, 0x3A, 0x66, 0x30, 0x3A, 0x63, 0x64, 0x0A, + 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, + 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, + 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x49, + 0x49, 0x43, 0x6A, 0x6A, 0x43, 0x43, 0x41, 0x6A, 0x53, 0x67, + 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x55, 0x4A, 0x69, + 0x31, 0x4C, 0x2F, 0x6D, 0x52, 0x39, 0x6C, 0x30, 0x54, 0x49, + 0x68, 0x53, 0x49, 0x42, 0x6C, 0x72, 0x4F, 0x6C, 0x32, 0x78, + 0x78, 0x6B, 0x45, 0x68, 0x73, 0x77, 0x43, 0x67, 0x59, 0x49, + 0x4B, 0x6F, 0x45, 0x63, 0x7A, 0x31, 0x55, 0x42, 0x67, 0x33, + 0x55, 0x77, 0x0A, 0x67, 0x5A, 0x4D, 0x78, 0x43, 0x7A, 0x41, + 0x4A, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x59, 0x54, 0x41, + 0x6B, 0x46, 0x56, 0x4D, 0x51, 0x77, 0x77, 0x43, 0x67, 0x59, + 0x44, 0x56, 0x51, 0x51, 0x49, 0x44, 0x41, 0x4E, 0x52, 0x54, + 0x45, 0x51, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, + 0x56, 0x42, 0x41, 0x6F, 0x4D, 0x42, 0x33, 0x64, 0x76, 0x62, + 0x47, 0x5A, 0x54, 0x55, 0x30, 0x77, 0x78, 0x0A, 0x45, 0x44, + 0x41, 0x4F, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x73, 0x4D, + 0x42, 0x31, 0x52, 0x6C, 0x63, 0x33, 0x52, 0x70, 0x62, 0x6D, + 0x63, 0x78, 0x47, 0x44, 0x41, 0x57, 0x42, 0x67, 0x4E, 0x56, + 0x42, 0x41, 0x4D, 0x4D, 0x44, 0x33, 0x64, 0x76, 0x62, 0x47, + 0x5A, 0x7A, 0x63, 0x32, 0x77, 0x74, 0x5A, 0x47, 0x56, 0x32, + 0x4C, 0x58, 0x4E, 0x74, 0x4D, 0x6A, 0x45, 0x66, 0x4D, 0x42, + 0x30, 0x47, 0x0A, 0x43, 0x53, 0x71, 0x47, 0x53, 0x49, 0x62, + 0x33, 0x44, 0x51, 0x45, 0x4A, 0x41, 0x52, 0x59, 0x51, 0x61, + 0x57, 0x35, 0x6D, 0x62, 0x30, 0x42, 0x33, 0x62, 0x32, 0x78, + 0x6D, 0x63, 0x33, 0x4E, 0x73, 0x4C, 0x6D, 0x4E, 0x76, 0x62, + 0x54, 0x45, 0x58, 0x4D, 0x42, 0x55, 0x47, 0x43, 0x67, 0x6D, + 0x53, 0x4A, 0x6F, 0x6D, 0x54, 0x38, 0x69, 0x78, 0x6B, 0x41, + 0x51, 0x45, 0x4D, 0x42, 0x33, 0x64, 0x76, 0x0A, 0x62, 0x47, + 0x5A, 0x54, 0x55, 0x30, 0x77, 0x77, 0x48, 0x68, 0x63, 0x4E, + 0x4D, 0x6A, 0x59, 0x77, 0x4D, 0x6A, 0x45, 0x34, 0x4D, 0x54, + 0x63, 0x31, 0x4E, 0x6A, 0x55, 0x33, 0x57, 0x68, 0x63, 0x4E, + 0x4D, 0x6A, 0x67, 0x78, 0x4D, 0x54, 0x45, 0x30, 0x4D, 0x54, + 0x63, 0x31, 0x4E, 0x6A, 0x55, 0x33, 0x57, 0x6A, 0x43, 0x42, + 0x6B, 0x7A, 0x45, 0x4C, 0x4D, 0x41, 0x6B, 0x47, 0x41, 0x31, + 0x55, 0x45, 0x0A, 0x42, 0x68, 0x4D, 0x43, 0x51, 0x56, 0x55, + 0x78, 0x44, 0x44, 0x41, 0x4B, 0x42, 0x67, 0x4E, 0x56, 0x42, + 0x41, 0x67, 0x4D, 0x41, 0x31, 0x46, 0x4D, 0x52, 0x44, 0x45, 0x51, 0x4D, 0x41, 0x34, 0x47, 0x41, 0x31, 0x55, 0x45, 0x43, - 0x77, 0x77, 0x48, 0x0A, 0x56, 0x47, 0x56, 0x7A, 0x64, 0x47, - 0x6C, 0x75, 0x5A, 0x7A, 0x45, 0x59, 0x4D, 0x42, 0x59, 0x47, - 0x41, 0x31, 0x55, 0x45, 0x41, 0x77, 0x77, 0x50, 0x64, 0x32, - 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x31, 0x6B, - 0x5A, 0x58, 0x59, 0x74, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, - 0x38, 0x77, 0x48, 0x51, 0x59, 0x4A, 0x4B, 0x6F, 0x5A, 0x49, - 0x68, 0x76, 0x63, 0x4E, 0x41, 0x51, 0x6B, 0x42, 0x0A, 0x46, - 0x68, 0x42, 0x70, 0x62, 0x6D, 0x5A, 0x76, 0x51, 0x48, 0x64, - 0x76, 0x62, 0x47, 0x5A, 0x7A, 0x63, 0x32, 0x77, 0x75, 0x59, - 0x32, 0x39, 0x74, 0x4D, 0x52, 0x63, 0x77, 0x46, 0x51, 0x59, - 0x4B, 0x43, 0x5A, 0x49, 0x6D, 0x69, 0x5A, 0x50, 0x79, 0x4C, - 0x47, 0x51, 0x42, 0x41, 0x51, 0x77, 0x48, 0x64, 0x32, 0x39, - 0x73, 0x5A, 0x6C, 0x4E, 0x54, 0x54, 0x44, 0x42, 0x5A, 0x4D, - 0x42, 0x4D, 0x47, 0x0A, 0x42, 0x79, 0x71, 0x47, 0x53, 0x4D, - 0x34, 0x39, 0x41, 0x67, 0x45, 0x47, 0x43, 0x43, 0x71, 0x42, - 0x48, 0x4D, 0x39, 0x56, 0x41, 0x59, 0x49, 0x74, 0x41, 0x30, - 0x49, 0x41, 0x42, 0x4E, 0x6A, 0x45, 0x6F, 0x66, 0x45, 0x4C, - 0x69, 0x34, 0x33, 0x45, 0x66, 0x64, 0x7A, 0x55, 0x5A, 0x62, - 0x6D, 0x6C, 0x56, 0x55, 0x37, 0x37, 0x72, 0x44, 0x4F, 0x72, - 0x6D, 0x30, 0x4F, 0x55, 0x54, 0x45, 0x68, 0x41, 0x0A, 0x47, - 0x7A, 0x50, 0x5A, 0x47, 0x38, 0x77, 0x78, 0x77, 0x59, 0x4A, - 0x57, 0x50, 0x37, 0x44, 0x41, 0x61, 0x35, 0x56, 0x41, 0x55, - 0x66, 0x32, 0x49, 0x41, 0x67, 0x47, 0x78, 0x73, 0x4A, 0x52, - 0x73, 0x42, 0x75, 0x75, 0x6E, 0x32, 0x6F, 0x37, 0x75, 0x63, - 0x4C, 0x62, 0x6C, 0x75, 0x37, 0x51, 0x65, 0x35, 0x37, 0x53, - 0x6A, 0x59, 0x7A, 0x42, 0x68, 0x4D, 0x42, 0x30, 0x47, 0x41, - 0x31, 0x55, 0x64, 0x0A, 0x44, 0x67, 0x51, 0x57, 0x42, 0x42, - 0x52, 0x75, 0x6C, 0x2B, 0x69, 0x59, 0x74, 0x6C, 0x75, 0x32, - 0x72, 0x6F, 0x63, 0x45, 0x32, 0x78, 0x52, 0x57, 0x5A, 0x68, - 0x62, 0x30, 0x75, 0x43, 0x32, 0x4D, 0x38, 0x6A, 0x41, 0x66, - 0x42, 0x67, 0x4E, 0x56, 0x48, 0x53, 0x4D, 0x45, 0x47, 0x44, - 0x41, 0x57, 0x67, 0x42, 0x52, 0x75, 0x6C, 0x2B, 0x69, 0x59, - 0x74, 0x6C, 0x75, 0x32, 0x72, 0x6F, 0x63, 0x45, 0x0A, 0x32, - 0x78, 0x52, 0x57, 0x5A, 0x68, 0x62, 0x30, 0x75, 0x43, 0x32, - 0x4D, 0x38, 0x6A, 0x41, 0x50, 0x42, 0x67, 0x4E, 0x56, 0x48, - 0x52, 0x4D, 0x42, 0x41, 0x66, 0x38, 0x45, 0x42, 0x54, 0x41, - 0x44, 0x41, 0x51, 0x48, 0x2F, 0x4D, 0x41, 0x34, 0x47, 0x41, - 0x31, 0x55, 0x64, 0x44, 0x77, 0x45, 0x42, 0x2F, 0x77, 0x51, - 0x45, 0x41, 0x77, 0x49, 0x42, 0x68, 0x6A, 0x41, 0x4B, 0x42, - 0x67, 0x67, 0x71, 0x0A, 0x67, 0x52, 0x7A, 0x50, 0x56, 0x51, - 0x47, 0x44, 0x64, 0x51, 0x4E, 0x48, 0x41, 0x44, 0x42, 0x45, - 0x41, 0x69, 0x41, 0x50, 0x77, 0x79, 0x77, 0x32, 0x34, 0x35, - 0x38, 0x63, 0x36, 0x57, 0x67, 0x63, 0x4F, 0x30, 0x4D, 0x59, - 0x57, 0x38, 0x6D, 0x50, 0x35, 0x50, 0x72, 0x64, 0x4D, 0x38, - 0x47, 0x34, 0x48, 0x4E, 0x50, 0x55, 0x59, 0x54, 0x50, 0x34, - 0x4E, 0x35, 0x31, 0x61, 0x39, 0x41, 0x49, 0x67, 0x0A, 0x4F, - 0x72, 0x6D, 0x6F, 0x51, 0x34, 0x44, 0x50, 0x4F, 0x43, 0x58, - 0x70, 0x5A, 0x4E, 0x67, 0x6D, 0x52, 0x35, 0x31, 0x51, 0x42, - 0x41, 0x79, 0x4B, 0x36, 0x4B, 0x4A, 0x43, 0x36, 0x47, 0x50, - 0x64, 0x55, 0x35, 0x52, 0x39, 0x4F, 0x47, 0x31, 0x53, 0x63, - 0x50, 0x30, 0x3D, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, - 0x4E, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, - 0x43, 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A - + 0x67, 0x77, 0x48, 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6C, 0x4E, + 0x54, 0x54, 0x44, 0x45, 0x51, 0x4D, 0x41, 0x34, 0x47, 0x41, + 0x31, 0x55, 0x45, 0x43, 0x77, 0x77, 0x48, 0x0A, 0x56, 0x47, + 0x56, 0x7A, 0x64, 0x47, 0x6C, 0x75, 0x5A, 0x7A, 0x45, 0x59, + 0x4D, 0x42, 0x59, 0x47, 0x41, 0x31, 0x55, 0x45, 0x41, 0x77, + 0x77, 0x50, 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, + 0x62, 0x43, 0x31, 0x6B, 0x5A, 0x58, 0x59, 0x74, 0x63, 0x32, + 0x30, 0x79, 0x4D, 0x52, 0x38, 0x77, 0x48, 0x51, 0x59, 0x4A, + 0x4B, 0x6F, 0x5A, 0x49, 0x68, 0x76, 0x63, 0x4E, 0x41, 0x51, + 0x6B, 0x42, 0x0A, 0x46, 0x68, 0x42, 0x70, 0x62, 0x6D, 0x5A, + 0x76, 0x51, 0x48, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x7A, 0x63, + 0x32, 0x77, 0x75, 0x59, 0x32, 0x39, 0x74, 0x4D, 0x52, 0x63, + 0x77, 0x46, 0x51, 0x59, 0x4B, 0x43, 0x5A, 0x49, 0x6D, 0x69, + 0x5A, 0x50, 0x79, 0x4C, 0x47, 0x51, 0x42, 0x41, 0x51, 0x77, + 0x48, 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6C, 0x4E, 0x54, 0x54, + 0x44, 0x42, 0x61, 0x4D, 0x42, 0x51, 0x47, 0x0A, 0x43, 0x43, + 0x71, 0x42, 0x48, 0x4D, 0x39, 0x56, 0x41, 0x59, 0x49, 0x74, + 0x42, 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, 0x50, 0x56, 0x51, + 0x47, 0x43, 0x4C, 0x51, 0x4E, 0x43, 0x41, 0x41, 0x54, 0x59, + 0x78, 0x4B, 0x48, 0x78, 0x43, 0x34, 0x75, 0x4E, 0x78, 0x48, + 0x33, 0x63, 0x31, 0x47, 0x57, 0x35, 0x70, 0x56, 0x56, 0x4F, + 0x2B, 0x36, 0x77, 0x7A, 0x71, 0x35, 0x74, 0x44, 0x6C, 0x45, + 0x78, 0x49, 0x0A, 0x51, 0x42, 0x73, 0x7A, 0x32, 0x52, 0x76, + 0x4D, 0x4D, 0x63, 0x47, 0x43, 0x56, 0x6A, 0x2B, 0x77, 0x77, + 0x47, 0x75, 0x56, 0x51, 0x46, 0x48, 0x39, 0x69, 0x41, 0x49, + 0x42, 0x73, 0x62, 0x43, 0x55, 0x62, 0x41, 0x62, 0x72, 0x70, + 0x39, 0x71, 0x4F, 0x37, 0x6E, 0x43, 0x32, 0x35, 0x62, 0x75, + 0x30, 0x48, 0x75, 0x65, 0x30, 0x6F, 0x32, 0x4D, 0x77, 0x59, + 0x54, 0x41, 0x64, 0x42, 0x67, 0x4E, 0x56, 0x0A, 0x48, 0x51, + 0x34, 0x45, 0x46, 0x67, 0x51, 0x55, 0x62, 0x70, 0x66, 0x6F, + 0x6D, 0x4C, 0x5A, 0x62, 0x74, 0x71, 0x36, 0x48, 0x42, 0x4E, + 0x73, 0x55, 0x56, 0x6D, 0x59, 0x57, 0x39, 0x4C, 0x67, 0x74, + 0x6A, 0x50, 0x49, 0x77, 0x48, 0x77, 0x59, 0x44, 0x56, 0x52, + 0x30, 0x6A, 0x42, 0x42, 0x67, 0x77, 0x46, 0x6F, 0x41, 0x55, + 0x62, 0x70, 0x66, 0x6F, 0x6D, 0x4C, 0x5A, 0x62, 0x74, 0x71, + 0x36, 0x48, 0x0A, 0x42, 0x4E, 0x73, 0x55, 0x56, 0x6D, 0x59, + 0x57, 0x39, 0x4C, 0x67, 0x74, 0x6A, 0x50, 0x49, 0x77, 0x44, + 0x77, 0x59, 0x44, 0x56, 0x52, 0x30, 0x54, 0x41, 0x51, 0x48, + 0x2F, 0x42, 0x41, 0x55, 0x77, 0x41, 0x77, 0x45, 0x42, 0x2F, + 0x7A, 0x41, 0x4F, 0x42, 0x67, 0x4E, 0x56, 0x48, 0x51, 0x38, + 0x42, 0x41, 0x66, 0x38, 0x45, 0x42, 0x41, 0x4D, 0x43, 0x41, + 0x59, 0x59, 0x77, 0x43, 0x67, 0x59, 0x49, 0x0A, 0x4B, 0x6F, + 0x45, 0x63, 0x7A, 0x31, 0x55, 0x42, 0x67, 0x33, 0x55, 0x44, + 0x53, 0x41, 0x41, 0x77, 0x52, 0x51, 0x49, 0x68, 0x41, 0x4D, + 0x73, 0x61, 0x39, 0x6A, 0x33, 0x46, 0x59, 0x30, 0x2F, 0x37, + 0x49, 0x38, 0x6B, 0x69, 0x35, 0x63, 0x5A, 0x54, 0x45, 0x75, + 0x43, 0x51, 0x67, 0x55, 0x4C, 0x76, 0x59, 0x5A, 0x67, 0x4C, + 0x79, 0x5A, 0x50, 0x2F, 0x4A, 0x31, 0x6E, 0x6D, 0x67, 0x56, + 0x63, 0x6C, 0x0A, 0x41, 0x69, 0x42, 0x46, 0x65, 0x6D, 0x37, + 0x62, 0x44, 0x78, 0x58, 0x48, 0x6B, 0x50, 0x43, 0x74, 0x2F, + 0x71, 0x61, 0x46, 0x51, 0x74, 0x50, 0x63, 0x37, 0x58, 0x74, + 0x57, 0x35, 0x68, 0x4A, 0x75, 0x63, 0x78, 0x4A, 0x56, 0x61, + 0x54, 0x4C, 0x46, 0x46, 0x69, 0x4C, 0x77, 0x7A, 0x51, 0x3D, + 0x3D, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, + 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, + 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A }; #define sizeof_self_sm2_cert (sizeof(self_sm2_cert)) @@ -1997,557 +1984,552 @@ static const unsigned char server_sm2[] = 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, - 0x73, 0x73, 0x75, 0x65, 0x72, 0x3A, 0x20, 0x43, 0x20, 0x3D, - 0x20, 0x55, 0x53, 0x2C, 0x20, 0x53, 0x54, 0x20, 0x3D, 0x20, - 0x4D, 0x6F, 0x6E, 0x74, 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, - 0x20, 0x3D, 0x20, 0x42, 0x6F, 0x7A, 0x65, 0x6D, 0x61, 0x6E, - 0x2C, 0x20, 0x4F, 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, - 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, 0x32, 0x2C, 0x20, 0x4F, - 0x55, 0x20, 0x3D, 0x20, 0x43, 0x41, 0x2D, 0x73, 0x6D, 0x32, - 0x2C, 0x20, 0x43, 0x4E, 0x20, 0x3D, 0x20, 0x77, 0x77, 0x77, - 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, - 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3D, 0x20, 0x69, + 0x73, 0x73, 0x75, 0x65, 0x72, 0x3A, 0x20, 0x43, 0x3D, 0x55, + 0x53, 0x2C, 0x20, 0x53, 0x54, 0x3D, 0x4D, 0x6F, 0x6E, 0x74, + 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x3D, 0x42, 0x6F, 0x7A, + 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x3D, 0x77, 0x6F, + 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, 0x32, 0x2C, + 0x20, 0x4F, 0x55, 0x3D, 0x43, 0x41, 0x2D, 0x73, 0x6D, 0x32, + 0x2C, 0x20, 0x43, 0x4E, 0x3D, 0x77, 0x77, 0x77, 0x2E, 0x77, + 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, + 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, + 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, + 0x6D, 0x2C, 0x20, 0x55, 0x49, 0x44, 0x3D, 0x77, 0x6F, 0x6C, + 0x66, 0x53, 0x53, 0x4C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, + 0x79, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x42, 0x65, + 0x66, 0x6F, 0x72, 0x65, 0x3A, 0x20, 0x46, 0x65, 0x62, 0x20, + 0x31, 0x38, 0x20, 0x31, 0x37, 0x3A, 0x35, 0x36, 0x3A, 0x35, + 0x37, 0x20, 0x32, 0x30, 0x32, 0x36, 0x20, 0x47, 0x4D, 0x54, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x41, 0x66, 0x74, + 0x65, 0x72, 0x20, 0x3A, 0x20, 0x4E, 0x6F, 0x76, 0x20, 0x31, + 0x34, 0x20, 0x31, 0x37, 0x3A, 0x35, 0x36, 0x3A, 0x35, 0x37, + 0x20, 0x32, 0x30, 0x32, 0x38, 0x20, 0x47, 0x4D, 0x54, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, + 0x62, 0x6A, 0x65, 0x63, 0x74, 0x3A, 0x20, 0x43, 0x3D, 0x55, + 0x53, 0x2C, 0x20, 0x53, 0x54, 0x3D, 0x4D, 0x6F, 0x6E, 0x74, + 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x3D, 0x42, 0x6F, 0x7A, + 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x3D, 0x77, 0x6F, + 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, 0x32, 0x2C, + 0x20, 0x4F, 0x55, 0x3D, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2D, 0x73, 0x6D, 0x32, 0x2C, 0x20, 0x43, 0x4E, 0x3D, 0x77, + 0x77, 0x77, 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, + 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, + 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x55, 0x49, 0x44, - 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x56, - 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, 0x79, 0x0A, 0x20, 0x20, + 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, + 0x6A, 0x65, 0x63, 0x74, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, + 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x6E, 0x66, 0x6F, + 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, + 0x20, 0x4B, 0x65, 0x79, 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, + 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x73, 0x6D, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x4E, 0x6F, 0x74, 0x20, 0x42, 0x65, 0x66, 0x6F, 0x72, 0x65, - 0x3A, 0x20, 0x46, 0x65, 0x62, 0x20, 0x31, 0x35, 0x20, 0x30, - 0x36, 0x3A, 0x32, 0x33, 0x3A, 0x30, 0x37, 0x20, 0x32, 0x30, - 0x32, 0x33, 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, - 0x6F, 0x74, 0x20, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x3A, - 0x20, 0x4E, 0x6F, 0x76, 0x20, 0x31, 0x31, 0x20, 0x30, 0x36, - 0x3A, 0x32, 0x33, 0x3A, 0x30, 0x37, 0x20, 0x32, 0x30, 0x32, - 0x35, 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, - 0x74, 0x3A, 0x20, 0x43, 0x20, 0x3D, 0x20, 0x55, 0x53, 0x2C, - 0x20, 0x53, 0x54, 0x20, 0x3D, 0x20, 0x4D, 0x6F, 0x6E, 0x74, - 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x20, 0x3D, 0x20, 0x42, - 0x6F, 0x7A, 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x20, - 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, - 0x73, 0x6D, 0x32, 0x2C, 0x20, 0x4F, 0x55, 0x20, 0x3D, 0x20, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2D, 0x73, 0x6D, 0x32, - 0x2C, 0x20, 0x43, 0x4E, 0x20, 0x3D, 0x20, 0x77, 0x77, 0x77, - 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, - 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3D, 0x20, 0x69, - 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, - 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x55, 0x49, 0x44, - 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, - 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x50, 0x75, 0x62, - 0x6C, 0x69, 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x6E, - 0x66, 0x6F, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, - 0x69, 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x41, 0x6C, 0x67, - 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x73, 0x6D, - 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, - 0x62, 0x6C, 0x69, 0x63, 0x2D, 0x4B, 0x65, 0x79, 0x3A, 0x20, - 0x28, 0x32, 0x35, 0x36, 0x20, 0x62, 0x69, 0x74, 0x29, 0x0A, + 0x69, 0x63, 0x2D, 0x4B, 0x65, 0x79, 0x3A, 0x20, 0x28, 0x32, + 0x35, 0x36, 0x20, 0x62, 0x69, 0x74, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x75, 0x62, 0x3A, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x70, 0x75, 0x62, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x30, 0x34, 0x3A, 0x39, 0x34, 0x3A, 0x37, 0x30, 0x3A, - 0x32, 0x62, 0x3A, 0x34, 0x36, 0x3A, 0x65, 0x34, 0x3A, 0x35, - 0x65, 0x3A, 0x30, 0x66, 0x3A, 0x34, 0x31, 0x3A, 0x66, 0x62, - 0x3A, 0x38, 0x66, 0x3A, 0x32, 0x64, 0x3A, 0x33, 0x34, 0x3A, - 0x30, 0x61, 0x3A, 0x34, 0x31, 0x3A, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x30, 0x3A, - 0x31, 0x39, 0x3A, 0x35, 0x65, 0x3A, 0x66, 0x62, 0x3A, 0x64, - 0x34, 0x3A, 0x31, 0x64, 0x3A, 0x31, 0x31, 0x3A, 0x61, 0x63, - 0x3A, 0x66, 0x61, 0x3A, 0x66, 0x35, 0x3A, 0x39, 0x33, 0x3A, - 0x33, 0x37, 0x3A, 0x63, 0x36, 0x3A, 0x66, 0x61, 0x3A, 0x38, - 0x37, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, + 0x34, 0x3A, 0x39, 0x34, 0x3A, 0x37, 0x30, 0x3A, 0x32, 0x62, + 0x3A, 0x34, 0x36, 0x3A, 0x65, 0x34, 0x3A, 0x35, 0x65, 0x3A, + 0x30, 0x66, 0x3A, 0x34, 0x31, 0x3A, 0x66, 0x62, 0x3A, 0x38, + 0x66, 0x3A, 0x32, 0x64, 0x3A, 0x33, 0x34, 0x3A, 0x30, 0x61, + 0x3A, 0x34, 0x31, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x30, 0x3A, 0x31, 0x39, + 0x3A, 0x35, 0x65, 0x3A, 0x66, 0x62, 0x3A, 0x64, 0x34, 0x3A, + 0x31, 0x64, 0x3A, 0x31, 0x31, 0x3A, 0x61, 0x63, 0x3A, 0x66, + 0x61, 0x3A, 0x66, 0x35, 0x3A, 0x39, 0x33, 0x3A, 0x33, 0x37, + 0x3A, 0x63, 0x36, 0x3A, 0x66, 0x61, 0x3A, 0x38, 0x37, 0x3A, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x30, 0x38, 0x3A, 0x66, 0x37, 0x3A, 0x31, - 0x36, 0x3A, 0x31, 0x66, 0x3A, 0x32, 0x63, 0x3A, 0x63, 0x65, - 0x3A, 0x33, 0x30, 0x3A, 0x34, 0x30, 0x3A, 0x39, 0x64, 0x3A, - 0x34, 0x66, 0x3A, 0x61, 0x36, 0x3A, 0x32, 0x61, 0x3A, 0x30, - 0x61, 0x3A, 0x61, 0x31, 0x3A, 0x64, 0x36, 0x3A, 0x0A, 0x20, + 0x20, 0x30, 0x38, 0x3A, 0x66, 0x37, 0x3A, 0x31, 0x36, 0x3A, + 0x31, 0x66, 0x3A, 0x32, 0x63, 0x3A, 0x63, 0x65, 0x3A, 0x33, + 0x30, 0x3A, 0x34, 0x30, 0x3A, 0x39, 0x64, 0x3A, 0x34, 0x66, + 0x3A, 0x61, 0x36, 0x3A, 0x32, 0x61, 0x3A, 0x30, 0x61, 0x3A, + 0x61, 0x31, 0x3A, 0x64, 0x36, 0x3A, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x35, 0x3A, + 0x33, 0x33, 0x3A, 0x63, 0x33, 0x3A, 0x61, 0x36, 0x3A, 0x30, + 0x33, 0x3A, 0x39, 0x38, 0x3A, 0x65, 0x36, 0x3A, 0x38, 0x64, + 0x3A, 0x30, 0x35, 0x3A, 0x33, 0x34, 0x3A, 0x62, 0x30, 0x3A, + 0x39, 0x37, 0x3A, 0x30, 0x63, 0x3A, 0x64, 0x65, 0x3A, 0x61, + 0x34, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, - 0x35, 0x3A, 0x33, 0x33, 0x3A, 0x63, 0x33, 0x3A, 0x61, 0x36, - 0x3A, 0x30, 0x33, 0x3A, 0x39, 0x38, 0x3A, 0x65, 0x36, 0x3A, - 0x38, 0x64, 0x3A, 0x30, 0x35, 0x3A, 0x33, 0x34, 0x3A, 0x62, - 0x30, 0x3A, 0x39, 0x37, 0x3A, 0x30, 0x63, 0x3A, 0x64, 0x65, - 0x3A, 0x61, 0x34, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x63, 0x37, 0x3A, 0x63, 0x66, 0x3A, 0x35, + 0x33, 0x3A, 0x38, 0x66, 0x3A, 0x64, 0x31, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x37, 0x3A, 0x63, 0x66, - 0x3A, 0x35, 0x33, 0x3A, 0x38, 0x66, 0x3A, 0x64, 0x31, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x41, 0x53, 0x4E, 0x31, 0x20, 0x4F, + 0x49, 0x44, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x0A, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, + 0x76, 0x33, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6E, 0x73, 0x69, + 0x6F, 0x6E, 0x73, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, + 0x39, 0x76, 0x33, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, + 0x74, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x53, 0x4E, 0x31, - 0x20, 0x4F, 0x49, 0x44, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, - 0x30, 0x39, 0x76, 0x33, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6E, - 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x3A, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, - 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x53, 0x75, 0x62, 0x6A, - 0x65, 0x63, 0x74, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x36, 0x37, 0x3A, 0x41, 0x45, + 0x3A, 0x36, 0x30, 0x3A, 0x46, 0x46, 0x3A, 0x37, 0x45, 0x3A, + 0x31, 0x42, 0x3A, 0x30, 0x46, 0x3A, 0x39, 0x35, 0x3A, 0x41, + 0x45, 0x3A, 0x31, 0x46, 0x3A, 0x38, 0x32, 0x3A, 0x35, 0x39, + 0x3A, 0x46, 0x32, 0x3A, 0x36, 0x43, 0x3A, 0x35, 0x36, 0x3A, + 0x32, 0x44, 0x3A, 0x39, 0x33, 0x3A, 0x45, 0x46, 0x3A, 0x31, + 0x37, 0x3A, 0x33, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, + 0x39, 0x76, 0x33, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, + 0x69, 0x74, 0x79, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x36, 0x37, 0x3A, - 0x41, 0x45, 0x3A, 0x36, 0x30, 0x3A, 0x46, 0x46, 0x3A, 0x37, - 0x45, 0x3A, 0x31, 0x42, 0x3A, 0x30, 0x46, 0x3A, 0x39, 0x35, - 0x3A, 0x41, 0x45, 0x3A, 0x31, 0x46, 0x3A, 0x38, 0x32, 0x3A, - 0x35, 0x39, 0x3A, 0x46, 0x32, 0x3A, 0x36, 0x43, 0x3A, 0x35, - 0x36, 0x3A, 0x32, 0x44, 0x3A, 0x39, 0x33, 0x3A, 0x45, 0x46, - 0x3A, 0x31, 0x37, 0x3A, 0x33, 0x32, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x37, 0x3A, + 0x30, 0x41, 0x3A, 0x34, 0x38, 0x3A, 0x37, 0x45, 0x3A, 0x42, + 0x42, 0x3A, 0x30, 0x32, 0x3A, 0x41, 0x38, 0x3A, 0x35, 0x41, + 0x3A, 0x32, 0x36, 0x3A, 0x35, 0x37, 0x3A, 0x32, 0x42, 0x3A, + 0x31, 0x39, 0x3A, 0x41, 0x39, 0x3A, 0x37, 0x42, 0x3A, 0x36, + 0x31, 0x3A, 0x38, 0x42, 0x3A, 0x37, 0x46, 0x3A, 0x35, 0x44, + 0x3A, 0x39, 0x39, 0x3A, 0x36, 0x45, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, - 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x41, 0x75, 0x74, 0x68, - 0x6F, 0x72, 0x69, 0x74, 0x79, 0x20, 0x4B, 0x65, 0x79, 0x20, - 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, - 0x37, 0x3A, 0x30, 0x41, 0x3A, 0x34, 0x38, 0x3A, 0x37, 0x45, - 0x3A, 0x42, 0x42, 0x3A, 0x30, 0x32, 0x3A, 0x41, 0x38, 0x3A, - 0x35, 0x41, 0x3A, 0x32, 0x36, 0x3A, 0x35, 0x37, 0x3A, 0x32, - 0x42, 0x3A, 0x31, 0x39, 0x3A, 0x41, 0x39, 0x3A, 0x37, 0x42, - 0x3A, 0x36, 0x31, 0x3A, 0x38, 0x42, 0x3A, 0x37, 0x46, 0x3A, - 0x35, 0x44, 0x3A, 0x39, 0x39, 0x3A, 0x36, 0x45, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x42, 0x61, - 0x73, 0x69, 0x63, 0x20, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x72, - 0x61, 0x69, 0x6E, 0x74, 0x73, 0x3A, 0x20, 0x63, 0x72, 0x69, - 0x74, 0x69, 0x63, 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x43, 0x41, 0x3A, 0x46, 0x41, 0x4C, 0x53, 0x45, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, - 0x4B, 0x65, 0x79, 0x20, 0x55, 0x73, 0x61, 0x67, 0x65, 0x3A, - 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x0A, + 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x42, 0x61, 0x73, 0x69, + 0x63, 0x20, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x72, 0x61, 0x69, + 0x6E, 0x74, 0x73, 0x3A, 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, + 0x63, 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x69, 0x67, 0x69, - 0x74, 0x61, 0x6C, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2C, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x45, - 0x6E, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x6D, 0x65, 0x6E, - 0x74, 0x2C, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x41, 0x67, 0x72, - 0x65, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, - 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x45, 0x78, 0x74, 0x65, - 0x6E, 0x64, 0x65, 0x64, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x55, - 0x73, 0x61, 0x67, 0x65, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, + 0x43, 0x41, 0x3A, 0x46, 0x41, 0x4C, 0x53, 0x45, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x54, 0x4C, 0x53, 0x20, 0x57, 0x65, 0x62, - 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x41, 0x75, - 0x74, 0x68, 0x65, 0x6E, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6F, 0x6E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, 0x65, 0x74, 0x73, 0x63, - 0x61, 0x70, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x20, 0x54, - 0x79, 0x70, 0x65, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x4B, 0x65, + 0x79, 0x20, 0x55, 0x73, 0x61, 0x67, 0x65, 0x3A, 0x20, 0x63, + 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x53, 0x53, 0x4C, 0x20, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, - 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, 0x6C, 0x67, - 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, - 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, + 0x20, 0x20, 0x20, 0x20, 0x44, 0x69, 0x67, 0x69, 0x74, 0x61, + 0x6C, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x2C, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x45, 0x6E, 0x63, + 0x69, 0x70, 0x68, 0x65, 0x72, 0x6D, 0x65, 0x6E, 0x74, 0x2C, + 0x20, 0x4B, 0x65, 0x79, 0x20, 0x41, 0x67, 0x72, 0x65, 0x65, + 0x6D, 0x65, 0x6E, 0x74, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, + 0x39, 0x76, 0x33, 0x20, 0x45, 0x78, 0x74, 0x65, 0x6E, 0x64, + 0x65, 0x64, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x55, 0x73, 0x61, + 0x67, 0x65, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x54, 0x4C, 0x53, 0x20, 0x57, 0x65, 0x62, 0x20, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x41, 0x75, 0x74, 0x68, + 0x65, 0x6E, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x4E, 0x65, 0x74, 0x73, 0x63, 0x61, 0x70, + 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x20, 0x54, 0x79, 0x70, + 0x65, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x53, 0x53, 0x4C, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, - 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x33, 0x30, 0x3A, 0x34, 0x35, 0x3A, 0x30, 0x32, 0x3A, 0x32, - 0x30, 0x3A, 0x31, 0x62, 0x3A, 0x63, 0x61, 0x3A, 0x39, 0x34, - 0x3A, 0x32, 0x38, 0x3A, 0x37, 0x66, 0x3A, 0x66, 0x36, 0x3A, - 0x62, 0x32, 0x3A, 0x30, 0x64, 0x3A, 0x33, 0x31, 0x3A, 0x34, - 0x33, 0x3A, 0x35, 0x30, 0x3A, 0x65, 0x31, 0x3A, 0x64, 0x35, - 0x3A, 0x33, 0x34, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x31, 0x37, 0x3A, 0x64, 0x64, 0x3A, 0x61, - 0x66, 0x3A, 0x33, 0x61, 0x3A, 0x64, 0x65, 0x3A, 0x38, 0x31, - 0x3A, 0x30, 0x36, 0x3A, 0x36, 0x37, 0x3A, 0x39, 0x61, 0x3A, - 0x62, 0x33, 0x3A, 0x30, 0x36, 0x3A, 0x32, 0x32, 0x3A, 0x37, - 0x65, 0x3A, 0x36, 0x34, 0x3A, 0x65, 0x63, 0x3A, 0x66, 0x64, - 0x3A, 0x30, 0x65, 0x3A, 0x62, 0x39, 0x3A, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x32, 0x3A, 0x32, - 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x61, 0x31, 0x3A, 0x34, 0x38, - 0x3A, 0x61, 0x38, 0x3A, 0x33, 0x32, 0x3A, 0x64, 0x31, 0x3A, - 0x30, 0x35, 0x3A, 0x30, 0x39, 0x3A, 0x36, 0x62, 0x3A, 0x31, - 0x63, 0x3A, 0x65, 0x62, 0x3A, 0x38, 0x39, 0x3A, 0x31, 0x32, - 0x3A, 0x36, 0x36, 0x3A, 0x64, 0x38, 0x3A, 0x33, 0x38, 0x3A, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, - 0x31, 0x3A, 0x63, 0x34, 0x3A, 0x35, 0x63, 0x3A, 0x38, 0x39, - 0x3A, 0x30, 0x39, 0x3A, 0x30, 0x66, 0x3A, 0x66, 0x64, 0x3A, - 0x65, 0x39, 0x3A, 0x63, 0x30, 0x3A, 0x33, 0x62, 0x3A, 0x31, - 0x64, 0x3A, 0x66, 0x62, 0x3A, 0x63, 0x64, 0x3A, 0x62, 0x35, - 0x3A, 0x34, 0x63, 0x3A, 0x33, 0x31, 0x3A, 0x36, 0x38, 0x0A, - 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, - 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, - 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x49, - 0x49, 0x43, 0x32, 0x44, 0x43, 0x43, 0x41, 0x6E, 0x36, 0x67, - 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x42, 0x41, 0x54, - 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, 0x50, - 0x56, 0x51, 0x47, 0x44, 0x64, 0x54, 0x43, 0x42, 0x72, 0x44, - 0x45, 0x4C, 0x4D, 0x41, 0x6B, 0x47, 0x41, 0x31, 0x55, 0x45, - 0x42, 0x68, 0x4D, 0x43, 0x56, 0x56, 0x4D, 0x78, 0x45, 0x44, - 0x41, 0x4F, 0x0A, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x67, - 0x4D, 0x42, 0x30, 0x31, 0x76, 0x62, 0x6E, 0x52, 0x68, 0x62, - 0x6D, 0x45, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, - 0x56, 0x42, 0x41, 0x63, 0x4D, 0x42, 0x30, 0x4A, 0x76, 0x65, - 0x6D, 0x56, 0x74, 0x59, 0x57, 0x34, 0x78, 0x46, 0x44, 0x41, - 0x53, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x6F, 0x4D, 0x43, - 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, 0x0A, 0x55, 0x30, - 0x78, 0x66, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x51, 0x38, 0x77, - 0x44, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4C, 0x44, 0x41, - 0x5A, 0x44, 0x51, 0x53, 0x31, 0x7A, 0x62, 0x54, 0x49, 0x78, - 0x47, 0x44, 0x41, 0x57, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, - 0x4D, 0x4D, 0x44, 0x33, 0x64, 0x33, 0x64, 0x79, 0x35, 0x33, - 0x62, 0x32, 0x78, 0x6D, 0x63, 0x33, 0x4E, 0x73, 0x4C, 0x6D, - 0x4E, 0x76, 0x0A, 0x62, 0x54, 0x45, 0x66, 0x4D, 0x42, 0x30, - 0x47, 0x43, 0x53, 0x71, 0x47, 0x53, 0x49, 0x62, 0x33, 0x44, - 0x51, 0x45, 0x4A, 0x41, 0x52, 0x59, 0x51, 0x61, 0x57, 0x35, - 0x6D, 0x62, 0x30, 0x42, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x63, - 0x33, 0x4E, 0x73, 0x4C, 0x6D, 0x4E, 0x76, 0x62, 0x54, 0x45, - 0x58, 0x4D, 0x42, 0x55, 0x47, 0x43, 0x67, 0x6D, 0x53, 0x4A, - 0x6F, 0x6D, 0x54, 0x38, 0x69, 0x78, 0x6B, 0x0A, 0x41, 0x51, - 0x45, 0x4D, 0x42, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, - 0x55, 0x30, 0x77, 0x77, 0x48, 0x68, 0x63, 0x4E, 0x4D, 0x6A, - 0x4D, 0x77, 0x4D, 0x6A, 0x45, 0x31, 0x4D, 0x44, 0x59, 0x79, - 0x4D, 0x7A, 0x41, 0x33, 0x57, 0x68, 0x63, 0x4E, 0x4D, 0x6A, - 0x55, 0x78, 0x4D, 0x54, 0x45, 0x78, 0x4D, 0x44, 0x59, 0x79, - 0x4D, 0x7A, 0x41, 0x33, 0x57, 0x6A, 0x43, 0x42, 0x73, 0x44, - 0x45, 0x4C, 0x0A, 0x4D, 0x41, 0x6B, 0x47, 0x41, 0x31, 0x55, + 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, + 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x2D, + 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x33, 0x30, + 0x3A, 0x34, 0x36, 0x3A, 0x30, 0x32, 0x3A, 0x32, 0x31, 0x3A, + 0x30, 0x30, 0x3A, 0x39, 0x36, 0x3A, 0x35, 0x30, 0x3A, 0x35, + 0x66, 0x3A, 0x33, 0x65, 0x3A, 0x33, 0x66, 0x3A, 0x62, 0x66, + 0x3A, 0x31, 0x65, 0x3A, 0x35, 0x30, 0x3A, 0x36, 0x63, 0x3A, + 0x39, 0x61, 0x3A, 0x35, 0x64, 0x3A, 0x34, 0x65, 0x3A, 0x38, + 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x65, 0x66, 0x3A, 0x32, 0x37, 0x3A, 0x61, 0x31, 0x3A, + 0x34, 0x64, 0x3A, 0x66, 0x61, 0x3A, 0x62, 0x39, 0x3A, 0x37, + 0x35, 0x3A, 0x61, 0x36, 0x3A, 0x35, 0x38, 0x3A, 0x30, 0x65, + 0x3A, 0x66, 0x36, 0x3A, 0x64, 0x62, 0x3A, 0x36, 0x30, 0x3A, + 0x33, 0x32, 0x3A, 0x32, 0x30, 0x3A, 0x65, 0x34, 0x3A, 0x33, + 0x31, 0x3A, 0x31, 0x64, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x33, 0x36, 0x3A, 0x30, 0x32, 0x3A, + 0x32, 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x65, 0x37, 0x3A, 0x63, + 0x62, 0x3A, 0x35, 0x63, 0x3A, 0x39, 0x66, 0x3A, 0x38, 0x35, + 0x3A, 0x37, 0x64, 0x3A, 0x34, 0x63, 0x3A, 0x62, 0x35, 0x3A, + 0x35, 0x34, 0x3A, 0x37, 0x34, 0x3A, 0x65, 0x34, 0x3A, 0x34, + 0x35, 0x3A, 0x63, 0x34, 0x3A, 0x66, 0x30, 0x3A, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x31, 0x3A, + 0x35, 0x33, 0x3A, 0x35, 0x31, 0x3A, 0x33, 0x33, 0x3A, 0x30, + 0x37, 0x3A, 0x64, 0x64, 0x3A, 0x32, 0x38, 0x3A, 0x63, 0x36, + 0x3A, 0x63, 0x37, 0x3A, 0x34, 0x37, 0x3A, 0x66, 0x66, 0x3A, + 0x64, 0x36, 0x3A, 0x64, 0x63, 0x3A, 0x62, 0x30, 0x3A, 0x65, + 0x31, 0x3A, 0x33, 0x36, 0x3A, 0x63, 0x63, 0x3A, 0x33, 0x62, + 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, + 0x4E, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, + 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, + 0x49, 0x49, 0x43, 0x32, 0x54, 0x43, 0x43, 0x41, 0x6E, 0x36, + 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x42, 0x41, + 0x54, 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, + 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, 0x54, 0x43, 0x42, 0x72, + 0x44, 0x45, 0x4C, 0x4D, 0x41, 0x6B, 0x47, 0x41, 0x31, 0x55, 0x45, 0x42, 0x68, 0x4D, 0x43, 0x56, 0x56, 0x4D, 0x78, 0x45, - 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x67, - 0x4D, 0x42, 0x30, 0x31, 0x76, 0x62, 0x6E, 0x52, 0x68, 0x62, - 0x6D, 0x45, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, - 0x56, 0x42, 0x41, 0x63, 0x4D, 0x42, 0x30, 0x4A, 0x76, 0x65, - 0x6D, 0x56, 0x74, 0x59, 0x57, 0x34, 0x78, 0x0A, 0x46, 0x44, + 0x44, 0x41, 0x4F, 0x0A, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, + 0x67, 0x4D, 0x42, 0x30, 0x31, 0x76, 0x62, 0x6E, 0x52, 0x68, + 0x62, 0x6D, 0x45, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, + 0x4E, 0x56, 0x42, 0x41, 0x63, 0x4D, 0x42, 0x30, 0x4A, 0x76, + 0x65, 0x6D, 0x56, 0x74, 0x59, 0x57, 0x34, 0x78, 0x46, 0x44, 0x41, 0x53, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x6F, 0x4D, - 0x43, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, 0x55, 0x30, - 0x78, 0x66, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, 0x4D, 0x77, - 0x45, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4C, 0x44, 0x41, - 0x70, 0x54, 0x5A, 0x58, 0x4A, 0x32, 0x5A, 0x58, 0x49, 0x74, - 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, 0x67, 0x77, 0x46, 0x67, - 0x59, 0x44, 0x0A, 0x56, 0x51, 0x51, 0x44, 0x44, 0x41, 0x39, - 0x33, 0x64, 0x33, 0x63, 0x75, 0x64, 0x32, 0x39, 0x73, 0x5A, - 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x35, 0x6A, 0x62, 0x32, 0x30, - 0x78, 0x48, 0x7A, 0x41, 0x64, 0x42, 0x67, 0x6B, 0x71, 0x68, - 0x6B, 0x69, 0x47, 0x39, 0x77, 0x30, 0x42, 0x43, 0x51, 0x45, - 0x57, 0x45, 0x47, 0x6C, 0x75, 0x5A, 0x6D, 0x39, 0x41, 0x64, - 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x0A, 0x62, 0x43, - 0x35, 0x6A, 0x62, 0x32, 0x30, 0x78, 0x46, 0x7A, 0x41, 0x56, - 0x42, 0x67, 0x6F, 0x4A, 0x6B, 0x69, 0x61, 0x4A, 0x6B, 0x2F, - 0x49, 0x73, 0x5A, 0x41, 0x45, 0x42, 0x44, 0x41, 0x64, 0x33, - 0x62, 0x32, 0x78, 0x6D, 0x55, 0x31, 0x4E, 0x4D, 0x4D, 0x46, - 0x6F, 0x77, 0x46, 0x41, 0x59, 0x49, 0x4B, 0x6F, 0x45, 0x63, - 0x7A, 0x31, 0x55, 0x42, 0x67, 0x69, 0x30, 0x47, 0x43, 0x43, - 0x71, 0x42, 0x0A, 0x48, 0x4D, 0x39, 0x56, 0x41, 0x59, 0x49, - 0x74, 0x41, 0x30, 0x49, 0x41, 0x42, 0x4A, 0x52, 0x77, 0x4B, - 0x30, 0x62, 0x6B, 0x58, 0x67, 0x39, 0x42, 0x2B, 0x34, 0x38, - 0x74, 0x4E, 0x41, 0x70, 0x42, 0x51, 0x42, 0x6C, 0x65, 0x2B, - 0x39, 0x51, 0x64, 0x45, 0x61, 0x7A, 0x36, 0x39, 0x5A, 0x4D, - 0x33, 0x78, 0x76, 0x71, 0x48, 0x43, 0x50, 0x63, 0x57, 0x48, - 0x79, 0x7A, 0x4F, 0x4D, 0x45, 0x43, 0x64, 0x0A, 0x54, 0x36, - 0x59, 0x71, 0x43, 0x71, 0x48, 0x57, 0x6C, 0x54, 0x50, 0x44, - 0x70, 0x67, 0x4F, 0x59, 0x35, 0x6F, 0x30, 0x46, 0x4E, 0x4C, - 0x43, 0x58, 0x44, 0x4E, 0x36, 0x6B, 0x78, 0x38, 0x39, 0x54, - 0x6A, 0x39, 0x47, 0x6A, 0x67, 0x59, 0x6B, 0x77, 0x67, 0x59, - 0x59, 0x77, 0x48, 0x51, 0x59, 0x44, 0x56, 0x52, 0x30, 0x4F, - 0x42, 0x42, 0x59, 0x45, 0x46, 0x47, 0x65, 0x75, 0x59, 0x50, - 0x39, 0x2B, 0x0A, 0x47, 0x77, 0x2B, 0x56, 0x72, 0x68, 0x2B, - 0x43, 0x57, 0x66, 0x4A, 0x73, 0x56, 0x69, 0x32, 0x54, 0x37, - 0x78, 0x63, 0x79, 0x4D, 0x42, 0x38, 0x47, 0x41, 0x31, 0x55, - 0x64, 0x49, 0x77, 0x51, 0x59, 0x4D, 0x42, 0x61, 0x41, 0x46, - 0x45, 0x63, 0x4B, 0x53, 0x48, 0x36, 0x37, 0x41, 0x71, 0x68, - 0x61, 0x4A, 0x6C, 0x63, 0x72, 0x47, 0x61, 0x6C, 0x37, 0x59, - 0x59, 0x74, 0x2F, 0x58, 0x5A, 0x6C, 0x75, 0x0A, 0x4D, 0x41, - 0x77, 0x47, 0x41, 0x31, 0x55, 0x64, 0x45, 0x77, 0x45, 0x42, - 0x2F, 0x77, 0x51, 0x43, 0x4D, 0x41, 0x41, 0x77, 0x44, 0x67, - 0x59, 0x44, 0x56, 0x52, 0x30, 0x50, 0x41, 0x51, 0x48, 0x2F, - 0x42, 0x41, 0x51, 0x44, 0x41, 0x67, 0x4F, 0x6F, 0x4D, 0x42, - 0x4D, 0x47, 0x41, 0x31, 0x55, 0x64, 0x4A, 0x51, 0x51, 0x4D, - 0x4D, 0x41, 0x6F, 0x47, 0x43, 0x43, 0x73, 0x47, 0x41, 0x51, - 0x55, 0x46, 0x0A, 0x42, 0x77, 0x4D, 0x42, 0x4D, 0x42, 0x45, - 0x47, 0x43, 0x57, 0x43, 0x47, 0x53, 0x41, 0x47, 0x47, 0x2B, - 0x45, 0x49, 0x42, 0x41, 0x51, 0x51, 0x45, 0x41, 0x77, 0x49, - 0x47, 0x51, 0x44, 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, 0x67, - 0x52, 0x7A, 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, 0x51, 0x4E, - 0x49, 0x41, 0x44, 0x42, 0x46, 0x41, 0x69, 0x41, 0x62, 0x79, - 0x70, 0x51, 0x6F, 0x66, 0x2F, 0x61, 0x79, 0x0A, 0x44, 0x54, - 0x46, 0x44, 0x55, 0x4F, 0x48, 0x56, 0x4E, 0x42, 0x66, 0x64, - 0x72, 0x7A, 0x72, 0x65, 0x67, 0x51, 0x5A, 0x6E, 0x6D, 0x72, - 0x4D, 0x47, 0x49, 0x6E, 0x35, 0x6B, 0x37, 0x50, 0x30, 0x4F, - 0x75, 0x51, 0x49, 0x68, 0x41, 0x4B, 0x46, 0x49, 0x71, 0x44, - 0x4C, 0x52, 0x42, 0x51, 0x6C, 0x72, 0x48, 0x4F, 0x75, 0x4A, - 0x45, 0x6D, 0x62, 0x59, 0x4F, 0x4B, 0x48, 0x45, 0x58, 0x49, - 0x6B, 0x4A, 0x0A, 0x44, 0x2F, 0x33, 0x70, 0x77, 0x44, 0x73, - 0x64, 0x2B, 0x38, 0x32, 0x31, 0x54, 0x44, 0x46, 0x6F, 0x0A, - 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x43, - 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, - 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x3A, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x44, 0x61, 0x74, 0x61, 0x3A, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x33, 0x20, 0x28, 0x30, - 0x78, 0x32, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6C, 0x20, 0x4E, - 0x75, 0x6D, 0x62, 0x65, 0x72, 0x3A, 0x20, 0x31, 0x20, 0x28, - 0x30, 0x78, 0x31, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, - 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x2D, 0x77, 0x69, - 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x73, 0x73, 0x75, 0x65, - 0x72, 0x3A, 0x20, 0x43, 0x20, 0x3D, 0x20, 0x55, 0x53, 0x2C, - 0x20, 0x53, 0x54, 0x20, 0x3D, 0x20, 0x4D, 0x6F, 0x6E, 0x74, - 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x20, 0x3D, 0x20, 0x42, - 0x6F, 0x7A, 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x20, - 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, - 0x53, 0x4D, 0x32, 0x2C, 0x20, 0x4F, 0x55, 0x20, 0x3D, 0x20, - 0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x53, 0x4D, 0x32, 0x2C, 0x20, - 0x43, 0x4E, 0x20, 0x3D, 0x20, 0x77, 0x77, 0x77, 0x2E, 0x77, + 0x43, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, 0x0A, 0x55, + 0x30, 0x78, 0x66, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x51, 0x38, + 0x77, 0x44, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4C, 0x44, + 0x41, 0x5A, 0x44, 0x51, 0x53, 0x31, 0x7A, 0x62, 0x54, 0x49, + 0x78, 0x47, 0x44, 0x41, 0x57, 0x42, 0x67, 0x4E, 0x56, 0x42, + 0x41, 0x4D, 0x4D, 0x44, 0x33, 0x64, 0x33, 0x64, 0x79, 0x35, + 0x33, 0x62, 0x32, 0x78, 0x6D, 0x63, 0x33, 0x4E, 0x73, 0x4C, + 0x6D, 0x4E, 0x76, 0x0A, 0x62, 0x54, 0x45, 0x66, 0x4D, 0x42, + 0x30, 0x47, 0x43, 0x53, 0x71, 0x47, 0x53, 0x49, 0x62, 0x33, + 0x44, 0x51, 0x45, 0x4A, 0x41, 0x52, 0x59, 0x51, 0x61, 0x57, + 0x35, 0x6D, 0x62, 0x30, 0x42, 0x33, 0x62, 0x32, 0x78, 0x6D, + 0x63, 0x33, 0x4E, 0x73, 0x4C, 0x6D, 0x4E, 0x76, 0x62, 0x54, + 0x45, 0x58, 0x4D, 0x42, 0x55, 0x47, 0x43, 0x67, 0x6D, 0x53, + 0x4A, 0x6F, 0x6D, 0x54, 0x38, 0x69, 0x78, 0x6B, 0x0A, 0x41, + 0x51, 0x45, 0x4D, 0x42, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, + 0x54, 0x55, 0x30, 0x77, 0x77, 0x48, 0x68, 0x63, 0x4E, 0x4D, + 0x6A, 0x59, 0x77, 0x4D, 0x6A, 0x45, 0x34, 0x4D, 0x54, 0x63, + 0x31, 0x4E, 0x6A, 0x55, 0x33, 0x57, 0x68, 0x63, 0x4E, 0x4D, + 0x6A, 0x67, 0x78, 0x4D, 0x54, 0x45, 0x30, 0x4D, 0x54, 0x63, + 0x31, 0x4E, 0x6A, 0x55, 0x33, 0x57, 0x6A, 0x43, 0x42, 0x73, + 0x44, 0x45, 0x4C, 0x0A, 0x4D, 0x41, 0x6B, 0x47, 0x41, 0x31, + 0x55, 0x45, 0x42, 0x68, 0x4D, 0x43, 0x56, 0x56, 0x4D, 0x78, + 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, + 0x67, 0x4D, 0x42, 0x30, 0x31, 0x76, 0x62, 0x6E, 0x52, 0x68, + 0x62, 0x6D, 0x45, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, + 0x4E, 0x56, 0x42, 0x41, 0x63, 0x4D, 0x42, 0x30, 0x4A, 0x76, + 0x65, 0x6D, 0x56, 0x74, 0x59, 0x57, 0x34, 0x78, 0x0A, 0x46, + 0x44, 0x41, 0x53, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x6F, + 0x4D, 0x43, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, 0x55, + 0x30, 0x78, 0x66, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, 0x4D, + 0x77, 0x45, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4C, 0x44, + 0x41, 0x70, 0x54, 0x5A, 0x58, 0x4A, 0x32, 0x5A, 0x58, 0x49, + 0x74, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, 0x67, 0x77, 0x46, + 0x67, 0x59, 0x44, 0x0A, 0x56, 0x51, 0x51, 0x44, 0x44, 0x41, + 0x39, 0x33, 0x64, 0x33, 0x63, 0x75, 0x64, 0x32, 0x39, 0x73, + 0x5A, 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x35, 0x6A, 0x62, 0x32, + 0x30, 0x78, 0x48, 0x7A, 0x41, 0x64, 0x42, 0x67, 0x6B, 0x71, + 0x68, 0x6B, 0x69, 0x47, 0x39, 0x77, 0x30, 0x42, 0x43, 0x51, + 0x45, 0x57, 0x45, 0x47, 0x6C, 0x75, 0x5A, 0x6D, 0x39, 0x41, + 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x0A, 0x62, + 0x43, 0x35, 0x6A, 0x62, 0x32, 0x30, 0x78, 0x46, 0x7A, 0x41, + 0x56, 0x42, 0x67, 0x6F, 0x4A, 0x6B, 0x69, 0x61, 0x4A, 0x6B, + 0x2F, 0x49, 0x73, 0x5A, 0x41, 0x45, 0x42, 0x44, 0x41, 0x64, + 0x33, 0x62, 0x32, 0x78, 0x6D, 0x55, 0x31, 0x4E, 0x4D, 0x4D, + 0x46, 0x6F, 0x77, 0x46, 0x41, 0x59, 0x49, 0x4B, 0x6F, 0x45, + 0x63, 0x7A, 0x31, 0x55, 0x42, 0x67, 0x69, 0x30, 0x47, 0x43, + 0x43, 0x71, 0x42, 0x0A, 0x48, 0x4D, 0x39, 0x56, 0x41, 0x59, + 0x49, 0x74, 0x41, 0x30, 0x49, 0x41, 0x42, 0x4A, 0x52, 0x77, + 0x4B, 0x30, 0x62, 0x6B, 0x58, 0x67, 0x39, 0x42, 0x2B, 0x34, + 0x38, 0x74, 0x4E, 0x41, 0x70, 0x42, 0x51, 0x42, 0x6C, 0x65, + 0x2B, 0x39, 0x51, 0x64, 0x45, 0x61, 0x7A, 0x36, 0x39, 0x5A, + 0x4D, 0x33, 0x78, 0x76, 0x71, 0x48, 0x43, 0x50, 0x63, 0x57, + 0x48, 0x79, 0x7A, 0x4F, 0x4D, 0x45, 0x43, 0x64, 0x0A, 0x54, + 0x36, 0x59, 0x71, 0x43, 0x71, 0x48, 0x57, 0x6C, 0x54, 0x50, + 0x44, 0x70, 0x67, 0x4F, 0x59, 0x35, 0x6F, 0x30, 0x46, 0x4E, + 0x4C, 0x43, 0x58, 0x44, 0x4E, 0x36, 0x6B, 0x78, 0x38, 0x39, + 0x54, 0x6A, 0x39, 0x47, 0x6A, 0x67, 0x59, 0x6B, 0x77, 0x67, + 0x59, 0x59, 0x77, 0x48, 0x51, 0x59, 0x44, 0x56, 0x52, 0x30, + 0x4F, 0x42, 0x42, 0x59, 0x45, 0x46, 0x47, 0x65, 0x75, 0x59, + 0x50, 0x39, 0x2B, 0x0A, 0x47, 0x77, 0x2B, 0x56, 0x72, 0x68, + 0x2B, 0x43, 0x57, 0x66, 0x4A, 0x73, 0x56, 0x69, 0x32, 0x54, + 0x37, 0x78, 0x63, 0x79, 0x4D, 0x42, 0x38, 0x47, 0x41, 0x31, + 0x55, 0x64, 0x49, 0x77, 0x51, 0x59, 0x4D, 0x42, 0x61, 0x41, + 0x46, 0x45, 0x63, 0x4B, 0x53, 0x48, 0x36, 0x37, 0x41, 0x71, + 0x68, 0x61, 0x4A, 0x6C, 0x63, 0x72, 0x47, 0x61, 0x6C, 0x37, + 0x59, 0x59, 0x74, 0x2F, 0x58, 0x5A, 0x6C, 0x75, 0x0A, 0x4D, + 0x41, 0x77, 0x47, 0x41, 0x31, 0x55, 0x64, 0x45, 0x77, 0x45, + 0x42, 0x2F, 0x77, 0x51, 0x43, 0x4D, 0x41, 0x41, 0x77, 0x44, + 0x67, 0x59, 0x44, 0x56, 0x52, 0x30, 0x50, 0x41, 0x51, 0x48, + 0x2F, 0x42, 0x41, 0x51, 0x44, 0x41, 0x67, 0x4F, 0x6F, 0x4D, + 0x42, 0x4D, 0x47, 0x41, 0x31, 0x55, 0x64, 0x4A, 0x51, 0x51, + 0x4D, 0x4D, 0x41, 0x6F, 0x47, 0x43, 0x43, 0x73, 0x47, 0x41, + 0x51, 0x55, 0x46, 0x0A, 0x42, 0x77, 0x4D, 0x42, 0x4D, 0x42, + 0x45, 0x47, 0x43, 0x57, 0x43, 0x47, 0x53, 0x41, 0x47, 0x47, + 0x2B, 0x45, 0x49, 0x42, 0x41, 0x51, 0x51, 0x45, 0x41, 0x77, + 0x49, 0x47, 0x51, 0x44, 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, + 0x67, 0x52, 0x7A, 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, 0x51, + 0x4E, 0x4A, 0x41, 0x44, 0x42, 0x47, 0x41, 0x69, 0x45, 0x41, + 0x6C, 0x6C, 0x42, 0x66, 0x50, 0x6A, 0x2B, 0x2F, 0x0A, 0x48, + 0x6C, 0x42, 0x73, 0x6D, 0x6C, 0x31, 0x4F, 0x6A, 0x75, 0x38, + 0x6E, 0x6F, 0x55, 0x33, 0x36, 0x75, 0x58, 0x57, 0x6D, 0x57, + 0x41, 0x37, 0x32, 0x32, 0x32, 0x41, 0x79, 0x49, 0x4F, 0x51, + 0x78, 0x48, 0x54, 0x59, 0x43, 0x49, 0x51, 0x44, 0x6E, 0x79, + 0x31, 0x79, 0x66, 0x68, 0x58, 0x31, 0x4D, 0x74, 0x56, 0x52, + 0x30, 0x35, 0x45, 0x58, 0x45, 0x38, 0x41, 0x46, 0x54, 0x55, + 0x54, 0x4D, 0x48, 0x0A, 0x33, 0x53, 0x6A, 0x47, 0x78, 0x30, + 0x66, 0x2F, 0x31, 0x74, 0x79, 0x77, 0x34, 0x54, 0x62, 0x4D, + 0x4F, 0x77, 0x3D, 0x3D, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, + 0x45, 0x4E, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, + 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, + 0x0A, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x44, 0x61, + 0x74, 0x61, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3A, + 0x20, 0x33, 0x20, 0x28, 0x30, 0x78, 0x32, 0x29, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x65, 0x72, + 0x69, 0x61, 0x6C, 0x20, 0x4E, 0x75, 0x6D, 0x62, 0x65, 0x72, + 0x3A, 0x20, 0x31, 0x20, 0x28, 0x30, 0x78, 0x31, 0x29, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, + 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, 0x6C, + 0x67, 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, + 0x4D, 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, + 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x3A, 0x20, 0x43, 0x3D, + 0x55, 0x53, 0x2C, 0x20, 0x53, 0x54, 0x3D, 0x4D, 0x6F, 0x6E, + 0x74, 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x3D, 0x42, 0x6F, + 0x7A, 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x3D, 0x77, + 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x53, 0x4D, 0x32, + 0x2C, 0x20, 0x4F, 0x55, 0x3D, 0x52, 0x6F, 0x6F, 0x74, 0x2D, + 0x53, 0x4D, 0x32, 0x2C, 0x20, 0x43, 0x4E, 0x3D, 0x77, 0x77, + 0x77, 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, + 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3D, 0x69, 0x6E, + 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, + 0x2E, 0x63, 0x6F, 0x6D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, + 0x79, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x42, 0x65, + 0x66, 0x6F, 0x72, 0x65, 0x3A, 0x20, 0x46, 0x65, 0x62, 0x20, + 0x31, 0x38, 0x20, 0x31, 0x37, 0x3A, 0x35, 0x36, 0x3A, 0x35, + 0x37, 0x20, 0x32, 0x30, 0x32, 0x36, 0x20, 0x47, 0x4D, 0x54, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x41, 0x66, 0x74, + 0x65, 0x72, 0x20, 0x3A, 0x20, 0x4E, 0x6F, 0x76, 0x20, 0x31, + 0x34, 0x20, 0x31, 0x37, 0x3A, 0x35, 0x36, 0x3A, 0x35, 0x37, + 0x20, 0x32, 0x30, 0x32, 0x38, 0x20, 0x47, 0x4D, 0x54, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, + 0x62, 0x6A, 0x65, 0x63, 0x74, 0x3A, 0x20, 0x43, 0x3D, 0x55, + 0x53, 0x2C, 0x20, 0x53, 0x54, 0x3D, 0x4D, 0x6F, 0x6E, 0x74, + 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x3D, 0x42, 0x6F, 0x7A, + 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x3D, 0x77, 0x6F, + 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, 0x32, 0x2C, + 0x20, 0x4F, 0x55, 0x3D, 0x43, 0x41, 0x2D, 0x73, 0x6D, 0x32, + 0x2C, 0x20, 0x43, 0x4E, 0x3D, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x20, 0x3D, 0x20, 0x69, 0x6E, 0x66, - 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, - 0x63, 0x6F, 0x6D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, 0x79, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x42, 0x65, 0x66, - 0x6F, 0x72, 0x65, 0x3A, 0x20, 0x46, 0x65, 0x62, 0x20, 0x31, - 0x35, 0x20, 0x30, 0x36, 0x3A, 0x32, 0x33, 0x3A, 0x30, 0x37, - 0x20, 0x32, 0x30, 0x32, 0x33, 0x20, 0x47, 0x4D, 0x54, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x41, 0x66, 0x74, 0x65, - 0x72, 0x20, 0x3A, 0x20, 0x4E, 0x6F, 0x76, 0x20, 0x31, 0x31, - 0x20, 0x30, 0x36, 0x3A, 0x32, 0x33, 0x3A, 0x30, 0x37, 0x20, - 0x32, 0x30, 0x32, 0x35, 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, - 0x6A, 0x65, 0x63, 0x74, 0x3A, 0x20, 0x43, 0x20, 0x3D, 0x20, - 0x55, 0x53, 0x2C, 0x20, 0x53, 0x54, 0x20, 0x3D, 0x20, 0x4D, - 0x6F, 0x6E, 0x74, 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x20, - 0x3D, 0x20, 0x42, 0x6F, 0x7A, 0x65, 0x6D, 0x61, 0x6E, 0x2C, - 0x20, 0x4F, 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, - 0x53, 0x4C, 0x5F, 0x73, 0x6D, 0x32, 0x2C, 0x20, 0x4F, 0x55, - 0x20, 0x3D, 0x20, 0x43, 0x41, 0x2D, 0x73, 0x6D, 0x32, 0x2C, - 0x20, 0x43, 0x4E, 0x20, 0x3D, 0x20, 0x77, 0x77, 0x77, 0x2E, + 0x72, 0x65, 0x73, 0x73, 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, - 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3D, 0x20, 0x69, 0x6E, - 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, - 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x55, 0x49, 0x44, 0x20, - 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, - 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x50, 0x75, 0x62, 0x6C, - 0x69, 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x6E, 0x66, - 0x6F, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, - 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x41, 0x6C, 0x67, 0x6F, - 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x73, 0x6D, 0x32, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, 0x62, - 0x6C, 0x69, 0x63, 0x2D, 0x4B, 0x65, 0x79, 0x3A, 0x20, 0x28, - 0x32, 0x35, 0x36, 0x20, 0x62, 0x69, 0x74, 0x29, 0x0A, 0x20, + 0x6D, 0x2C, 0x20, 0x55, 0x49, 0x44, 0x3D, 0x77, 0x6F, 0x6C, + 0x66, 0x53, 0x53, 0x4C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, + 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x20, 0x4B, 0x65, + 0x79, 0x20, 0x49, 0x6E, 0x66, 0x6F, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x75, 0x62, 0x3A, 0x0A, + 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x20, 0x4B, 0x65, 0x79, + 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, + 0x3A, 0x20, 0x73, 0x6D, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x2D, 0x4B, + 0x65, 0x79, 0x3A, 0x20, 0x28, 0x32, 0x35, 0x36, 0x20, 0x62, + 0x69, 0x74, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x30, 0x34, 0x3A, 0x32, 0x31, 0x3A, 0x39, 0x32, 0x3A, 0x66, - 0x37, 0x3A, 0x63, 0x62, 0x3A, 0x32, 0x34, 0x3A, 0x64, 0x66, - 0x3A, 0x36, 0x34, 0x3A, 0x34, 0x64, 0x3A, 0x62, 0x61, 0x3A, - 0x61, 0x62, 0x3A, 0x36, 0x36, 0x3A, 0x37, 0x62, 0x3A, 0x38, - 0x33, 0x3A, 0x37, 0x35, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x70, 0x75, 0x62, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x39, 0x3A, 0x32, - 0x39, 0x3A, 0x65, 0x37, 0x3A, 0x66, 0x66, 0x3A, 0x36, 0x34, - 0x3A, 0x36, 0x33, 0x3A, 0x62, 0x36, 0x3A, 0x64, 0x35, 0x3A, - 0x34, 0x32, 0x3A, 0x38, 0x30, 0x3A, 0x32, 0x30, 0x3A, 0x62, - 0x64, 0x3A, 0x65, 0x32, 0x3A, 0x65, 0x32, 0x3A, 0x30, 0x32, - 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x34, 0x3A, 0x32, 0x31, + 0x3A, 0x39, 0x32, 0x3A, 0x66, 0x37, 0x3A, 0x63, 0x62, 0x3A, + 0x32, 0x34, 0x3A, 0x64, 0x66, 0x3A, 0x36, 0x34, 0x3A, 0x34, + 0x64, 0x3A, 0x62, 0x61, 0x3A, 0x61, 0x62, 0x3A, 0x36, 0x36, + 0x3A, 0x37, 0x62, 0x3A, 0x38, 0x33, 0x3A, 0x37, 0x35, 0x3A, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x31, 0x32, 0x3A, 0x33, 0x62, 0x3A, 0x38, 0x65, - 0x3A, 0x62, 0x34, 0x3A, 0x30, 0x30, 0x3A, 0x39, 0x35, 0x3A, - 0x30, 0x39, 0x3A, 0x38, 0x30, 0x3A, 0x63, 0x62, 0x3A, 0x35, - 0x36, 0x3A, 0x65, 0x64, 0x3A, 0x34, 0x62, 0x3A, 0x63, 0x61, - 0x3A, 0x38, 0x64, 0x3A, 0x35, 0x37, 0x3A, 0x0A, 0x20, 0x20, + 0x20, 0x61, 0x39, 0x3A, 0x32, 0x39, 0x3A, 0x65, 0x37, 0x3A, + 0x66, 0x66, 0x3A, 0x36, 0x34, 0x3A, 0x36, 0x33, 0x3A, 0x62, + 0x36, 0x3A, 0x64, 0x35, 0x3A, 0x34, 0x32, 0x3A, 0x38, 0x30, + 0x3A, 0x32, 0x30, 0x3A, 0x62, 0x64, 0x3A, 0x65, 0x32, 0x3A, + 0x65, 0x32, 0x3A, 0x30, 0x32, 0x3A, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x31, 0x32, 0x3A, + 0x33, 0x62, 0x3A, 0x38, 0x65, 0x3A, 0x62, 0x34, 0x3A, 0x30, + 0x30, 0x3A, 0x39, 0x35, 0x3A, 0x30, 0x39, 0x3A, 0x38, 0x30, + 0x3A, 0x63, 0x62, 0x3A, 0x35, 0x36, 0x3A, 0x65, 0x64, 0x3A, + 0x34, 0x62, 0x3A, 0x63, 0x61, 0x3A, 0x38, 0x64, 0x3A, 0x35, + 0x37, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x36, - 0x3A, 0x61, 0x65, 0x3A, 0x30, 0x35, 0x3A, 0x64, 0x33, 0x3A, - 0x37, 0x36, 0x3A, 0x32, 0x37, 0x3A, 0x36, 0x33, 0x3A, 0x37, - 0x31, 0x3A, 0x33, 0x39, 0x3A, 0x38, 0x39, 0x3A, 0x62, 0x37, - 0x3A, 0x36, 0x39, 0x3A, 0x65, 0x36, 0x3A, 0x34, 0x38, 0x3A, - 0x38, 0x30, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x65, 0x36, 0x3A, 0x61, 0x65, 0x3A, 0x30, + 0x35, 0x3A, 0x64, 0x33, 0x3A, 0x37, 0x36, 0x3A, 0x32, 0x37, + 0x3A, 0x36, 0x33, 0x3A, 0x37, 0x31, 0x3A, 0x33, 0x39, 0x3A, + 0x38, 0x39, 0x3A, 0x62, 0x37, 0x3A, 0x36, 0x39, 0x3A, 0x65, + 0x36, 0x3A, 0x34, 0x38, 0x3A, 0x38, 0x30, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x61, 0x65, 0x3A, 0x64, 0x31, 0x3A, - 0x61, 0x39, 0x3A, 0x34, 0x38, 0x3A, 0x31, 0x32, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, + 0x65, 0x3A, 0x64, 0x31, 0x3A, 0x61, 0x39, 0x3A, 0x34, 0x38, + 0x3A, 0x31, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x53, 0x4E, 0x31, 0x20, - 0x4F, 0x49, 0x44, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, - 0x39, 0x76, 0x33, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6E, 0x73, - 0x69, 0x6F, 0x6E, 0x73, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, - 0x30, 0x39, 0x76, 0x33, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, - 0x63, 0x74, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, 0x65, - 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3A, 0x20, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x37, 0x3A, 0x30, - 0x41, 0x3A, 0x34, 0x38, 0x3A, 0x37, 0x45, 0x3A, 0x42, 0x42, - 0x3A, 0x30, 0x32, 0x3A, 0x41, 0x38, 0x3A, 0x35, 0x41, 0x3A, - 0x32, 0x36, 0x3A, 0x35, 0x37, 0x3A, 0x32, 0x42, 0x3A, 0x31, - 0x39, 0x3A, 0x41, 0x39, 0x3A, 0x37, 0x42, 0x3A, 0x36, 0x31, - 0x3A, 0x38, 0x42, 0x3A, 0x37, 0x46, 0x3A, 0x35, 0x44, 0x3A, - 0x39, 0x39, 0x3A, 0x36, 0x45, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, - 0x30, 0x39, 0x76, 0x33, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, - 0x72, 0x69, 0x74, 0x79, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, - 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3A, - 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x33, 0x34, - 0x3A, 0x31, 0x44, 0x3A, 0x37, 0x39, 0x3A, 0x34, 0x34, 0x3A, - 0x31, 0x35, 0x3A, 0x37, 0x39, 0x3A, 0x41, 0x31, 0x3A, 0x42, - 0x31, 0x3A, 0x36, 0x33, 0x3A, 0x39, 0x39, 0x3A, 0x45, 0x33, - 0x3A, 0x45, 0x44, 0x3A, 0x36, 0x35, 0x3A, 0x37, 0x43, 0x3A, - 0x36, 0x34, 0x3A, 0x38, 0x39, 0x3A, 0x38, 0x30, 0x3A, 0x46, - 0x46, 0x3A, 0x42, 0x38, 0x3A, 0x45, 0x43, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x42, 0x61, 0x73, - 0x69, 0x63, 0x20, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x72, 0x61, - 0x69, 0x6E, 0x74, 0x73, 0x3A, 0x20, 0x63, 0x72, 0x69, 0x74, - 0x69, 0x63, 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x41, 0x53, 0x4E, 0x31, 0x20, 0x4F, 0x49, 0x44, 0x3A, 0x20, + 0x53, 0x4D, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x65, + 0x78, 0x74, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x3A, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, + 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x4B, 0x65, + 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x43, 0x41, 0x3A, 0x54, 0x52, 0x55, 0x45, 0x0A, 0x20, + 0x20, 0x34, 0x37, 0x3A, 0x30, 0x41, 0x3A, 0x34, 0x38, 0x3A, + 0x37, 0x45, 0x3A, 0x42, 0x42, 0x3A, 0x30, 0x32, 0x3A, 0x41, + 0x38, 0x3A, 0x35, 0x41, 0x3A, 0x32, 0x36, 0x3A, 0x35, 0x37, + 0x3A, 0x32, 0x42, 0x3A, 0x31, 0x39, 0x3A, 0x41, 0x39, 0x3A, + 0x37, 0x42, 0x3A, 0x36, 0x31, 0x3A, 0x38, 0x42, 0x3A, 0x37, + 0x46, 0x3A, 0x35, 0x44, 0x3A, 0x39, 0x39, 0x3A, 0x36, 0x45, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, + 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x20, + 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x4B, 0x65, - 0x79, 0x20, 0x55, 0x73, 0x61, 0x67, 0x65, 0x3A, 0x20, 0x63, - 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x0A, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x33, 0x34, 0x3A, 0x31, 0x44, 0x3A, 0x37, + 0x39, 0x3A, 0x34, 0x34, 0x3A, 0x31, 0x35, 0x3A, 0x37, 0x39, + 0x3A, 0x41, 0x31, 0x3A, 0x42, 0x31, 0x3A, 0x36, 0x33, 0x3A, + 0x39, 0x39, 0x3A, 0x45, 0x33, 0x3A, 0x45, 0x44, 0x3A, 0x36, + 0x35, 0x3A, 0x37, 0x43, 0x3A, 0x36, 0x34, 0x3A, 0x38, 0x39, + 0x3A, 0x38, 0x30, 0x3A, 0x46, 0x46, 0x3A, 0x42, 0x38, 0x3A, + 0x45, 0x43, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, + 0x33, 0x20, 0x42, 0x61, 0x73, 0x69, 0x63, 0x20, 0x43, 0x6F, + 0x6E, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6E, 0x74, 0x73, 0x3A, + 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x44, 0x69, 0x67, 0x69, 0x74, 0x61, - 0x6C, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x2C, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x2C, - 0x20, 0x43, 0x52, 0x4C, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, 0x69, - 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x2D, 0x77, - 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x33, 0x30, 0x3A, - 0x34, 0x35, 0x3A, 0x30, 0x32, 0x3A, 0x32, 0x30, 0x3A, 0x34, - 0x37, 0x3A, 0x34, 0x65, 0x3A, 0x30, 0x30, 0x3A, 0x30, 0x33, - 0x3A, 0x61, 0x62, 0x3A, 0x33, 0x34, 0x3A, 0x61, 0x31, 0x3A, - 0x61, 0x66, 0x3A, 0x35, 0x39, 0x3A, 0x33, 0x39, 0x3A, 0x38, - 0x66, 0x3A, 0x36, 0x30, 0x3A, 0x33, 0x36, 0x3A, 0x62, 0x66, - 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x38, 0x39, 0x3A, 0x38, 0x38, 0x3A, 0x34, 0x32, 0x3A, 0x34, - 0x31, 0x3A, 0x32, 0x37, 0x3A, 0x63, 0x31, 0x3A, 0x64, 0x64, - 0x3A, 0x35, 0x37, 0x3A, 0x63, 0x39, 0x3A, 0x37, 0x39, 0x3A, - 0x63, 0x62, 0x3A, 0x31, 0x66, 0x3A, 0x35, 0x36, 0x3A, 0x35, - 0x63, 0x3A, 0x31, 0x36, 0x3A, 0x62, 0x35, 0x3A, 0x32, 0x38, - 0x3A, 0x62, 0x64, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x30, 0x32, 0x3A, 0x32, 0x31, 0x3A, 0x30, - 0x30, 0x3A, 0x38, 0x62, 0x3A, 0x32, 0x65, 0x3A, 0x32, 0x35, - 0x3A, 0x65, 0x62, 0x3A, 0x32, 0x31, 0x3A, 0x39, 0x62, 0x3A, - 0x61, 0x39, 0x3A, 0x32, 0x62, 0x3A, 0x61, 0x36, 0x3A, 0x36, - 0x61, 0x3A, 0x35, 0x62, 0x3A, 0x64, 0x62, 0x3A, 0x61, 0x37, - 0x3A, 0x63, 0x37, 0x3A, 0x32, 0x62, 0x3A, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x31, 0x31, 0x3A, 0x64, - 0x66, 0x3A, 0x37, 0x33, 0x3A, 0x31, 0x35, 0x3A, 0x61, 0x64, - 0x3A, 0x65, 0x34, 0x3A, 0x63, 0x35, 0x3A, 0x63, 0x33, 0x3A, - 0x63, 0x32, 0x3A, 0x66, 0x33, 0x3A, 0x62, 0x34, 0x3A, 0x62, - 0x34, 0x3A, 0x36, 0x37, 0x3A, 0x61, 0x66, 0x3A, 0x64, 0x37, - 0x3A, 0x35, 0x31, 0x3A, 0x31, 0x63, 0x0A, 0x2D, 0x2D, 0x2D, - 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x43, 0x45, - 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, - 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x49, 0x49, 0x43, 0x6C, - 0x6A, 0x43, 0x43, 0x41, 0x6A, 0x79, 0x67, 0x41, 0x77, 0x49, - 0x42, 0x41, 0x67, 0x49, 0x42, 0x41, 0x54, 0x41, 0x4B, 0x42, - 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, 0x50, 0x56, 0x51, 0x47, - 0x44, 0x64, 0x54, 0x43, 0x42, 0x6C, 0x54, 0x45, 0x4C, 0x4D, - 0x41, 0x6B, 0x47, 0x41, 0x31, 0x55, 0x45, 0x42, 0x68, 0x4D, - 0x43, 0x56, 0x56, 0x4D, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x0A, - 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x67, 0x4D, 0x42, 0x30, - 0x31, 0x76, 0x62, 0x6E, 0x52, 0x68, 0x62, 0x6D, 0x45, 0x78, - 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, - 0x63, 0x4D, 0x42, 0x30, 0x4A, 0x76, 0x65, 0x6D, 0x56, 0x74, - 0x59, 0x57, 0x34, 0x78, 0x46, 0x44, 0x41, 0x53, 0x42, 0x67, - 0x4E, 0x56, 0x42, 0x41, 0x6F, 0x4D, 0x43, 0x33, 0x64, 0x76, - 0x62, 0x47, 0x5A, 0x54, 0x0A, 0x55, 0x30, 0x78, 0x66, 0x55, - 0x30, 0x30, 0x79, 0x4D, 0x52, 0x45, 0x77, 0x44, 0x77, 0x59, - 0x44, 0x56, 0x51, 0x51, 0x4C, 0x44, 0x41, 0x68, 0x53, 0x62, - 0x32, 0x39, 0x30, 0x4C, 0x56, 0x4E, 0x4E, 0x4D, 0x6A, 0x45, - 0x59, 0x4D, 0x42, 0x59, 0x47, 0x41, 0x31, 0x55, 0x45, 0x41, - 0x77, 0x77, 0x50, 0x64, 0x33, 0x64, 0x33, 0x4C, 0x6E, 0x64, - 0x76, 0x62, 0x47, 0x5A, 0x7A, 0x63, 0x32, 0x77, 0x75, 0x0A, - 0x59, 0x32, 0x39, 0x74, 0x4D, 0x52, 0x38, 0x77, 0x48, 0x51, - 0x59, 0x4A, 0x4B, 0x6F, 0x5A, 0x49, 0x68, 0x76, 0x63, 0x4E, - 0x41, 0x51, 0x6B, 0x42, 0x46, 0x68, 0x42, 0x70, 0x62, 0x6D, - 0x5A, 0x76, 0x51, 0x48, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x7A, - 0x63, 0x32, 0x77, 0x75, 0x59, 0x32, 0x39, 0x74, 0x4D, 0x42, - 0x34, 0x58, 0x44, 0x54, 0x49, 0x7A, 0x4D, 0x44, 0x49, 0x78, - 0x4E, 0x54, 0x41, 0x32, 0x0A, 0x4D, 0x6A, 0x4D, 0x77, 0x4E, - 0x31, 0x6F, 0x58, 0x44, 0x54, 0x49, 0x31, 0x4D, 0x54, 0x45, - 0x78, 0x4D, 0x54, 0x41, 0x32, 0x4D, 0x6A, 0x4D, 0x77, 0x4E, - 0x31, 0x6F, 0x77, 0x67, 0x61, 0x77, 0x78, 0x43, 0x7A, 0x41, - 0x4A, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x59, 0x54, 0x41, - 0x6C, 0x56, 0x54, 0x4D, 0x52, 0x41, 0x77, 0x44, 0x67, 0x59, - 0x44, 0x56, 0x51, 0x51, 0x49, 0x44, 0x41, 0x64, 0x4E, 0x0A, - 0x62, 0x32, 0x35, 0x30, 0x59, 0x57, 0x35, 0x68, 0x4D, 0x52, - 0x41, 0x77, 0x44, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x48, - 0x44, 0x41, 0x64, 0x43, 0x62, 0x33, 0x70, 0x6C, 0x62, 0x57, - 0x46, 0x75, 0x4D, 0x52, 0x51, 0x77, 0x45, 0x67, 0x59, 0x44, - 0x56, 0x51, 0x51, 0x4B, 0x44, 0x41, 0x74, 0x33, 0x62, 0x32, - 0x78, 0x6D, 0x55, 0x31, 0x4E, 0x4D, 0x58, 0x33, 0x4E, 0x74, - 0x4D, 0x6A, 0x45, 0x50, 0x0A, 0x4D, 0x41, 0x30, 0x47, 0x41, - 0x31, 0x55, 0x45, 0x43, 0x77, 0x77, 0x47, 0x51, 0x30, 0x45, - 0x74, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, 0x67, 0x77, 0x46, - 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x44, 0x44, 0x41, 0x39, - 0x33, 0x64, 0x33, 0x63, 0x75, 0x64, 0x32, 0x39, 0x73, 0x5A, - 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x35, 0x6A, 0x62, 0x32, 0x30, - 0x78, 0x48, 0x7A, 0x41, 0x64, 0x42, 0x67, 0x6B, 0x71, 0x0A, - 0x68, 0x6B, 0x69, 0x47, 0x39, 0x77, 0x30, 0x42, 0x43, 0x51, - 0x45, 0x57, 0x45, 0x47, 0x6C, 0x75, 0x5A, 0x6D, 0x39, 0x41, - 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x62, 0x43, - 0x35, 0x6A, 0x62, 0x32, 0x30, 0x78, 0x46, 0x7A, 0x41, 0x56, - 0x42, 0x67, 0x6F, 0x4A, 0x6B, 0x69, 0x61, 0x4A, 0x6B, 0x2F, - 0x49, 0x73, 0x5A, 0x41, 0x45, 0x42, 0x44, 0x41, 0x64, 0x33, - 0x62, 0x32, 0x78, 0x6D, 0x0A, 0x55, 0x31, 0x4E, 0x4D, 0x4D, - 0x46, 0x6F, 0x77, 0x46, 0x41, 0x59, 0x49, 0x4B, 0x6F, 0x45, - 0x63, 0x7A, 0x31, 0x55, 0x42, 0x67, 0x69, 0x30, 0x47, 0x43, - 0x43, 0x71, 0x42, 0x48, 0x4D, 0x39, 0x56, 0x41, 0x59, 0x49, - 0x74, 0x41, 0x30, 0x49, 0x41, 0x42, 0x43, 0x47, 0x53, 0x39, - 0x38, 0x73, 0x6B, 0x33, 0x32, 0x52, 0x4E, 0x75, 0x71, 0x74, - 0x6D, 0x65, 0x34, 0x4E, 0x31, 0x71, 0x53, 0x6E, 0x6E, 0x0A, - 0x2F, 0x32, 0x52, 0x6A, 0x74, 0x74, 0x56, 0x43, 0x67, 0x43, - 0x43, 0x39, 0x34, 0x75, 0x49, 0x43, 0x45, 0x6A, 0x75, 0x4F, - 0x74, 0x41, 0x43, 0x56, 0x43, 0x59, 0x44, 0x4C, 0x56, 0x75, - 0x31, 0x4C, 0x79, 0x6F, 0x31, 0x58, 0x35, 0x71, 0x34, 0x46, - 0x30, 0x33, 0x59, 0x6E, 0x59, 0x33, 0x45, 0x35, 0x69, 0x62, - 0x64, 0x70, 0x35, 0x6B, 0x69, 0x41, 0x72, 0x74, 0x47, 0x70, - 0x53, 0x42, 0x4B, 0x6A, 0x0A, 0x59, 0x7A, 0x42, 0x68, 0x4D, - 0x42, 0x30, 0x47, 0x41, 0x31, 0x55, 0x64, 0x44, 0x67, 0x51, - 0x57, 0x42, 0x42, 0x52, 0x48, 0x43, 0x6B, 0x68, 0x2B, 0x75, - 0x77, 0x4B, 0x6F, 0x57, 0x69, 0x5A, 0x58, 0x4B, 0x78, 0x6D, - 0x70, 0x65, 0x32, 0x47, 0x4C, 0x66, 0x31, 0x32, 0x5A, 0x62, - 0x6A, 0x41, 0x66, 0x42, 0x67, 0x4E, 0x56, 0x48, 0x53, 0x4D, - 0x45, 0x47, 0x44, 0x41, 0x57, 0x67, 0x42, 0x51, 0x30, 0x0A, - 0x48, 0x58, 0x6C, 0x45, 0x46, 0x58, 0x6D, 0x68, 0x73, 0x57, - 0x4F, 0x5A, 0x34, 0x2B, 0x31, 0x6C, 0x66, 0x47, 0x53, 0x4A, - 0x67, 0x50, 0x2B, 0x34, 0x37, 0x44, 0x41, 0x50, 0x42, 0x67, - 0x4E, 0x56, 0x48, 0x52, 0x4D, 0x42, 0x41, 0x66, 0x38, 0x45, - 0x42, 0x54, 0x41, 0x44, 0x41, 0x51, 0x48, 0x2F, 0x4D, 0x41, - 0x34, 0x47, 0x41, 0x31, 0x55, 0x64, 0x44, 0x77, 0x45, 0x42, - 0x2F, 0x77, 0x51, 0x45, 0x0A, 0x41, 0x77, 0x49, 0x42, 0x68, - 0x6A, 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, - 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, 0x51, 0x4E, 0x49, 0x41, - 0x44, 0x42, 0x46, 0x41, 0x69, 0x42, 0x48, 0x54, 0x67, 0x41, - 0x44, 0x71, 0x7A, 0x53, 0x68, 0x72, 0x31, 0x6B, 0x35, 0x6A, - 0x32, 0x41, 0x32, 0x76, 0x34, 0x6D, 0x49, 0x51, 0x6B, 0x45, - 0x6E, 0x77, 0x64, 0x31, 0x58, 0x79, 0x58, 0x6E, 0x4C, 0x0A, - 0x48, 0x31, 0x5A, 0x63, 0x46, 0x72, 0x55, 0x6F, 0x76, 0x51, - 0x49, 0x68, 0x41, 0x49, 0x73, 0x75, 0x4A, 0x65, 0x73, 0x68, - 0x6D, 0x36, 0x6B, 0x72, 0x70, 0x6D, 0x70, 0x62, 0x32, 0x36, - 0x66, 0x48, 0x4B, 0x78, 0x48, 0x66, 0x63, 0x78, 0x57, 0x74, - 0x35, 0x4D, 0x58, 0x44, 0x77, 0x76, 0x4F, 0x30, 0x74, 0x47, - 0x65, 0x76, 0x31, 0x31, 0x45, 0x63, 0x0A, 0x2D, 0x2D, 0x2D, - 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x41, 0x3A, 0x54, + 0x52, 0x55, 0x45, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, + 0x76, 0x33, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x55, 0x73, 0x61, + 0x67, 0x65, 0x3A, 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, + 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, + 0x69, 0x67, 0x69, 0x74, 0x61, 0x6C, 0x20, 0x53, 0x69, 0x67, + 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2C, 0x20, 0x43, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, + 0x53, 0x69, 0x67, 0x6E, 0x2C, 0x20, 0x43, 0x52, 0x4C, 0x20, + 0x53, 0x69, 0x67, 0x6E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, + 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, + 0x6C, 0x67, 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, + 0x53, 0x4D, 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, + 0x4D, 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, + 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x56, 0x61, 0x6C, + 0x75, 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x33, 0x30, 0x3A, 0x34, 0x36, 0x3A, 0x30, 0x32, + 0x3A, 0x32, 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x62, 0x32, 0x3A, + 0x62, 0x39, 0x3A, 0x35, 0x62, 0x3A, 0x30, 0x32, 0x3A, 0x61, + 0x64, 0x3A, 0x37, 0x38, 0x3A, 0x66, 0x38, 0x3A, 0x35, 0x32, + 0x3A, 0x62, 0x61, 0x3A, 0x36, 0x37, 0x3A, 0x63, 0x66, 0x3A, + 0x63, 0x62, 0x3A, 0x32, 0x35, 0x3A, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x62, 0x3A, 0x62, 0x61, + 0x3A, 0x64, 0x39, 0x3A, 0x35, 0x36, 0x3A, 0x66, 0x35, 0x3A, + 0x61, 0x37, 0x3A, 0x66, 0x66, 0x3A, 0x61, 0x66, 0x3A, 0x32, + 0x35, 0x3A, 0x32, 0x36, 0x3A, 0x64, 0x35, 0x3A, 0x66, 0x36, + 0x3A, 0x66, 0x33, 0x3A, 0x66, 0x33, 0x3A, 0x61, 0x36, 0x3A, + 0x66, 0x35, 0x3A, 0x39, 0x61, 0x3A, 0x32, 0x66, 0x3A, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x62, + 0x3A, 0x30, 0x32, 0x3A, 0x32, 0x31, 0x3A, 0x30, 0x30, 0x3A, + 0x62, 0x63, 0x3A, 0x39, 0x36, 0x3A, 0x66, 0x33, 0x3A, 0x33, + 0x39, 0x3A, 0x31, 0x33, 0x3A, 0x37, 0x36, 0x3A, 0x64, 0x63, + 0x3A, 0x30, 0x32, 0x3A, 0x33, 0x35, 0x3A, 0x33, 0x39, 0x3A, + 0x30, 0x65, 0x3A, 0x64, 0x63, 0x3A, 0x30, 0x61, 0x3A, 0x36, + 0x39, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x62, 0x66, 0x3A, 0x30, 0x32, 0x3A, 0x31, 0x38, 0x3A, + 0x62, 0x36, 0x3A, 0x30, 0x31, 0x3A, 0x62, 0x65, 0x3A, 0x66, + 0x66, 0x3A, 0x30, 0x35, 0x3A, 0x64, 0x37, 0x3A, 0x32, 0x65, + 0x3A, 0x66, 0x32, 0x3A, 0x37, 0x62, 0x3A, 0x36, 0x37, 0x3A, + 0x65, 0x62, 0x3A, 0x31, 0x36, 0x3A, 0x65, 0x39, 0x3A, 0x38, + 0x65, 0x3A, 0x63, 0x35, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, + 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, - 0x2D, 0x2D, 0x0A + 0x2D, 0x2D, 0x0A, 0x4D, 0x49, 0x49, 0x43, 0x6C, 0x7A, 0x43, + 0x43, 0x41, 0x6A, 0x79, 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, + 0x67, 0x49, 0x42, 0x41, 0x54, 0x41, 0x4B, 0x42, 0x67, 0x67, + 0x71, 0x67, 0x52, 0x7A, 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, + 0x54, 0x43, 0x42, 0x6C, 0x54, 0x45, 0x4C, 0x4D, 0x41, 0x6B, + 0x47, 0x41, 0x31, 0x55, 0x45, 0x42, 0x68, 0x4D, 0x43, 0x56, + 0x56, 0x4D, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x0A, 0x42, 0x67, + 0x4E, 0x56, 0x42, 0x41, 0x67, 0x4D, 0x42, 0x30, 0x31, 0x76, + 0x62, 0x6E, 0x52, 0x68, 0x62, 0x6D, 0x45, 0x78, 0x45, 0x44, + 0x41, 0x4F, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x63, 0x4D, + 0x42, 0x30, 0x4A, 0x76, 0x65, 0x6D, 0x56, 0x74, 0x59, 0x57, + 0x34, 0x78, 0x46, 0x44, 0x41, 0x53, 0x42, 0x67, 0x4E, 0x56, + 0x42, 0x41, 0x6F, 0x4D, 0x43, 0x33, 0x64, 0x76, 0x62, 0x47, + 0x5A, 0x54, 0x0A, 0x55, 0x30, 0x78, 0x66, 0x55, 0x30, 0x30, + 0x79, 0x4D, 0x52, 0x45, 0x77, 0x44, 0x77, 0x59, 0x44, 0x56, + 0x51, 0x51, 0x4C, 0x44, 0x41, 0x68, 0x53, 0x62, 0x32, 0x39, + 0x30, 0x4C, 0x56, 0x4E, 0x4E, 0x4D, 0x6A, 0x45, 0x59, 0x4D, + 0x42, 0x59, 0x47, 0x41, 0x31, 0x55, 0x45, 0x41, 0x77, 0x77, + 0x50, 0x64, 0x33, 0x64, 0x33, 0x4C, 0x6E, 0x64, 0x76, 0x62, + 0x47, 0x5A, 0x7A, 0x63, 0x32, 0x77, 0x75, 0x0A, 0x59, 0x32, + 0x39, 0x74, 0x4D, 0x52, 0x38, 0x77, 0x48, 0x51, 0x59, 0x4A, + 0x4B, 0x6F, 0x5A, 0x49, 0x68, 0x76, 0x63, 0x4E, 0x41, 0x51, + 0x6B, 0x42, 0x46, 0x68, 0x42, 0x70, 0x62, 0x6D, 0x5A, 0x76, + 0x51, 0x48, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x7A, 0x63, 0x32, + 0x77, 0x75, 0x59, 0x32, 0x39, 0x74, 0x4D, 0x42, 0x34, 0x58, + 0x44, 0x54, 0x49, 0x32, 0x4D, 0x44, 0x49, 0x78, 0x4F, 0x44, + 0x45, 0x33, 0x0A, 0x4E, 0x54, 0x59, 0x31, 0x4E, 0x31, 0x6F, + 0x58, 0x44, 0x54, 0x49, 0x34, 0x4D, 0x54, 0x45, 0x78, 0x4E, + 0x44, 0x45, 0x33, 0x4E, 0x54, 0x59, 0x31, 0x4E, 0x31, 0x6F, + 0x77, 0x67, 0x61, 0x77, 0x78, 0x43, 0x7A, 0x41, 0x4A, 0x42, + 0x67, 0x4E, 0x56, 0x42, 0x41, 0x59, 0x54, 0x41, 0x6C, 0x56, + 0x54, 0x4D, 0x52, 0x41, 0x77, 0x44, 0x67, 0x59, 0x44, 0x56, + 0x51, 0x51, 0x49, 0x44, 0x41, 0x64, 0x4E, 0x0A, 0x62, 0x32, + 0x35, 0x30, 0x59, 0x57, 0x35, 0x68, 0x4D, 0x52, 0x41, 0x77, + 0x44, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x48, 0x44, 0x41, + 0x64, 0x43, 0x62, 0x33, 0x70, 0x6C, 0x62, 0x57, 0x46, 0x75, + 0x4D, 0x52, 0x51, 0x77, 0x45, 0x67, 0x59, 0x44, 0x56, 0x51, + 0x51, 0x4B, 0x44, 0x41, 0x74, 0x33, 0x62, 0x32, 0x78, 0x6D, + 0x55, 0x31, 0x4E, 0x4D, 0x58, 0x33, 0x4E, 0x74, 0x4D, 0x6A, + 0x45, 0x50, 0x0A, 0x4D, 0x41, 0x30, 0x47, 0x41, 0x31, 0x55, + 0x45, 0x43, 0x77, 0x77, 0x47, 0x51, 0x30, 0x45, 0x74, 0x63, + 0x32, 0x30, 0x79, 0x4D, 0x52, 0x67, 0x77, 0x46, 0x67, 0x59, + 0x44, 0x56, 0x51, 0x51, 0x44, 0x44, 0x41, 0x39, 0x33, 0x64, + 0x33, 0x63, 0x75, 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, + 0x7A, 0x62, 0x43, 0x35, 0x6A, 0x62, 0x32, 0x30, 0x78, 0x48, + 0x7A, 0x41, 0x64, 0x42, 0x67, 0x6B, 0x71, 0x0A, 0x68, 0x6B, + 0x69, 0x47, 0x39, 0x77, 0x30, 0x42, 0x43, 0x51, 0x45, 0x57, + 0x45, 0x47, 0x6C, 0x75, 0x5A, 0x6D, 0x39, 0x41, 0x64, 0x32, + 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x35, 0x6A, + 0x62, 0x32, 0x30, 0x78, 0x46, 0x7A, 0x41, 0x56, 0x42, 0x67, + 0x6F, 0x4A, 0x6B, 0x69, 0x61, 0x4A, 0x6B, 0x2F, 0x49, 0x73, + 0x5A, 0x41, 0x45, 0x42, 0x44, 0x41, 0x64, 0x33, 0x62, 0x32, + 0x78, 0x6D, 0x0A, 0x55, 0x31, 0x4E, 0x4D, 0x4D, 0x46, 0x6F, + 0x77, 0x46, 0x41, 0x59, 0x49, 0x4B, 0x6F, 0x45, 0x63, 0x7A, + 0x31, 0x55, 0x42, 0x67, 0x69, 0x30, 0x47, 0x43, 0x43, 0x71, + 0x42, 0x48, 0x4D, 0x39, 0x56, 0x41, 0x59, 0x49, 0x74, 0x41, + 0x30, 0x49, 0x41, 0x42, 0x43, 0x47, 0x53, 0x39, 0x38, 0x73, + 0x6B, 0x33, 0x32, 0x52, 0x4E, 0x75, 0x71, 0x74, 0x6D, 0x65, + 0x34, 0x4E, 0x31, 0x71, 0x53, 0x6E, 0x6E, 0x0A, 0x2F, 0x32, + 0x52, 0x6A, 0x74, 0x74, 0x56, 0x43, 0x67, 0x43, 0x43, 0x39, + 0x34, 0x75, 0x49, 0x43, 0x45, 0x6A, 0x75, 0x4F, 0x74, 0x41, + 0x43, 0x56, 0x43, 0x59, 0x44, 0x4C, 0x56, 0x75, 0x31, 0x4C, + 0x79, 0x6F, 0x31, 0x58, 0x35, 0x71, 0x34, 0x46, 0x30, 0x33, + 0x59, 0x6E, 0x59, 0x33, 0x45, 0x35, 0x69, 0x62, 0x64, 0x70, + 0x35, 0x6B, 0x69, 0x41, 0x72, 0x74, 0x47, 0x70, 0x53, 0x42, + 0x4B, 0x6A, 0x0A, 0x59, 0x7A, 0x42, 0x68, 0x4D, 0x42, 0x30, + 0x47, 0x41, 0x31, 0x55, 0x64, 0x44, 0x67, 0x51, 0x57, 0x42, + 0x42, 0x52, 0x48, 0x43, 0x6B, 0x68, 0x2B, 0x75, 0x77, 0x4B, + 0x6F, 0x57, 0x69, 0x5A, 0x58, 0x4B, 0x78, 0x6D, 0x70, 0x65, + 0x32, 0x47, 0x4C, 0x66, 0x31, 0x32, 0x5A, 0x62, 0x6A, 0x41, + 0x66, 0x42, 0x67, 0x4E, 0x56, 0x48, 0x53, 0x4D, 0x45, 0x47, + 0x44, 0x41, 0x57, 0x67, 0x42, 0x51, 0x30, 0x0A, 0x48, 0x58, + 0x6C, 0x45, 0x46, 0x58, 0x6D, 0x68, 0x73, 0x57, 0x4F, 0x5A, + 0x34, 0x2B, 0x31, 0x6C, 0x66, 0x47, 0x53, 0x4A, 0x67, 0x50, + 0x2B, 0x34, 0x37, 0x44, 0x41, 0x50, 0x42, 0x67, 0x4E, 0x56, + 0x48, 0x52, 0x4D, 0x42, 0x41, 0x66, 0x38, 0x45, 0x42, 0x54, + 0x41, 0x44, 0x41, 0x51, 0x48, 0x2F, 0x4D, 0x41, 0x34, 0x47, + 0x41, 0x31, 0x55, 0x64, 0x44, 0x77, 0x45, 0x42, 0x2F, 0x77, + 0x51, 0x45, 0x0A, 0x41, 0x77, 0x49, 0x42, 0x68, 0x6A, 0x41, + 0x4B, 0x42, 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, 0x50, 0x56, + 0x51, 0x47, 0x44, 0x64, 0x51, 0x4E, 0x4A, 0x41, 0x44, 0x42, + 0x47, 0x41, 0x69, 0x45, 0x41, 0x73, 0x72, 0x6C, 0x62, 0x41, + 0x71, 0x31, 0x34, 0x2B, 0x46, 0x4B, 0x36, 0x5A, 0x38, 0x2F, + 0x4C, 0x4A, 0x5A, 0x75, 0x36, 0x32, 0x56, 0x62, 0x31, 0x70, + 0x2F, 0x2B, 0x76, 0x4A, 0x53, 0x62, 0x56, 0x0A, 0x39, 0x76, + 0x50, 0x7A, 0x70, 0x76, 0x57, 0x61, 0x4C, 0x35, 0x73, 0x43, + 0x49, 0x51, 0x43, 0x38, 0x6C, 0x76, 0x4D, 0x35, 0x45, 0x33, + 0x62, 0x63, 0x41, 0x6A, 0x55, 0x35, 0x44, 0x74, 0x77, 0x4B, + 0x61, 0x62, 0x38, 0x43, 0x47, 0x4C, 0x59, 0x42, 0x76, 0x76, + 0x38, 0x46, 0x31, 0x79, 0x37, 0x79, 0x65, 0x32, 0x66, 0x72, + 0x46, 0x75, 0x6D, 0x4F, 0x78, 0x51, 0x3D, 0x3D, 0x0A, 0x2D, + 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x43, 0x45, + 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, + 0x2D, 0x2D, 0x2D, 0x2D, 0x0A }; #define sizeof_server_sm2 (sizeof(server_sm2)) @@ -2567,288 +2549,286 @@ static const unsigned char server_sm2_cert[] = 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, - 0x73, 0x73, 0x75, 0x65, 0x72, 0x3A, 0x20, 0x43, 0x20, 0x3D, - 0x20, 0x55, 0x53, 0x2C, 0x20, 0x53, 0x54, 0x20, 0x3D, 0x20, - 0x4D, 0x6F, 0x6E, 0x74, 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, - 0x20, 0x3D, 0x20, 0x42, 0x6F, 0x7A, 0x65, 0x6D, 0x61, 0x6E, - 0x2C, 0x20, 0x4F, 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, - 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, 0x32, 0x2C, 0x20, 0x4F, - 0x55, 0x20, 0x3D, 0x20, 0x43, 0x41, 0x2D, 0x73, 0x6D, 0x32, - 0x2C, 0x20, 0x43, 0x4E, 0x20, 0x3D, 0x20, 0x77, 0x77, 0x77, - 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, - 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3D, 0x20, 0x69, + 0x73, 0x73, 0x75, 0x65, 0x72, 0x3A, 0x20, 0x43, 0x3D, 0x55, + 0x53, 0x2C, 0x20, 0x53, 0x54, 0x3D, 0x4D, 0x6F, 0x6E, 0x74, + 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x3D, 0x42, 0x6F, 0x7A, + 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x3D, 0x77, 0x6F, + 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, 0x32, 0x2C, + 0x20, 0x4F, 0x55, 0x3D, 0x43, 0x41, 0x2D, 0x73, 0x6D, 0x32, + 0x2C, 0x20, 0x43, 0x4E, 0x3D, 0x77, 0x77, 0x77, 0x2E, 0x77, + 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, + 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, + 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, + 0x6D, 0x2C, 0x20, 0x55, 0x49, 0x44, 0x3D, 0x77, 0x6F, 0x6C, + 0x66, 0x53, 0x53, 0x4C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, + 0x79, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x42, 0x65, + 0x66, 0x6F, 0x72, 0x65, 0x3A, 0x20, 0x46, 0x65, 0x62, 0x20, + 0x31, 0x38, 0x20, 0x31, 0x37, 0x3A, 0x35, 0x36, 0x3A, 0x35, + 0x37, 0x20, 0x32, 0x30, 0x32, 0x36, 0x20, 0x47, 0x4D, 0x54, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x4E, 0x6F, 0x74, 0x20, 0x41, 0x66, 0x74, + 0x65, 0x72, 0x20, 0x3A, 0x20, 0x4E, 0x6F, 0x76, 0x20, 0x31, + 0x34, 0x20, 0x31, 0x37, 0x3A, 0x35, 0x36, 0x3A, 0x35, 0x37, + 0x20, 0x32, 0x30, 0x32, 0x38, 0x20, 0x47, 0x4D, 0x54, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, + 0x62, 0x6A, 0x65, 0x63, 0x74, 0x3A, 0x20, 0x43, 0x3D, 0x55, + 0x53, 0x2C, 0x20, 0x53, 0x54, 0x3D, 0x4D, 0x6F, 0x6E, 0x74, + 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x3D, 0x42, 0x6F, 0x7A, + 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x3D, 0x77, 0x6F, + 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, 0x73, 0x6D, 0x32, 0x2C, + 0x20, 0x4F, 0x55, 0x3D, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2D, 0x73, 0x6D, 0x32, 0x2C, 0x20, 0x43, 0x4E, 0x3D, 0x77, + 0x77, 0x77, 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, + 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, + 0x6C, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3D, 0x69, 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x55, 0x49, 0x44, - 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x56, - 0x61, 0x6C, 0x69, 0x64, 0x69, 0x74, 0x79, 0x0A, 0x20, 0x20, + 0x3D, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, + 0x6A, 0x65, 0x63, 0x74, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, + 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x6E, 0x66, 0x6F, + 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, + 0x20, 0x4B, 0x65, 0x79, 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, + 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x73, 0x6D, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x4E, 0x6F, 0x74, 0x20, 0x42, 0x65, 0x66, 0x6F, 0x72, 0x65, - 0x3A, 0x20, 0x46, 0x65, 0x62, 0x20, 0x31, 0x35, 0x20, 0x30, - 0x36, 0x3A, 0x32, 0x33, 0x3A, 0x30, 0x37, 0x20, 0x32, 0x30, - 0x32, 0x33, 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, - 0x6F, 0x74, 0x20, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x3A, - 0x20, 0x4E, 0x6F, 0x76, 0x20, 0x31, 0x31, 0x20, 0x30, 0x36, - 0x3A, 0x32, 0x33, 0x3A, 0x30, 0x37, 0x20, 0x32, 0x30, 0x32, - 0x35, 0x20, 0x47, 0x4D, 0x54, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, - 0x74, 0x3A, 0x20, 0x43, 0x20, 0x3D, 0x20, 0x55, 0x53, 0x2C, - 0x20, 0x53, 0x54, 0x20, 0x3D, 0x20, 0x4D, 0x6F, 0x6E, 0x74, - 0x61, 0x6E, 0x61, 0x2C, 0x20, 0x4C, 0x20, 0x3D, 0x20, 0x42, - 0x6F, 0x7A, 0x65, 0x6D, 0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x20, - 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, 0x5F, - 0x73, 0x6D, 0x32, 0x2C, 0x20, 0x4F, 0x55, 0x20, 0x3D, 0x20, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2D, 0x73, 0x6D, 0x32, - 0x2C, 0x20, 0x43, 0x4E, 0x20, 0x3D, 0x20, 0x77, 0x77, 0x77, - 0x2E, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, 0x6C, 0x2E, 0x63, - 0x6F, 0x6D, 0x2C, 0x20, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x3D, 0x20, 0x69, - 0x6E, 0x66, 0x6F, 0x40, 0x77, 0x6F, 0x6C, 0x66, 0x73, 0x73, - 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x2C, 0x20, 0x55, 0x49, 0x44, - 0x20, 0x3D, 0x20, 0x77, 0x6F, 0x6C, 0x66, 0x53, 0x53, 0x4C, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, - 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x50, 0x75, 0x62, - 0x6C, 0x69, 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x6E, - 0x66, 0x6F, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, 0x62, 0x6C, - 0x69, 0x63, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x41, 0x6C, 0x67, - 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x73, 0x6D, - 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x75, - 0x62, 0x6C, 0x69, 0x63, 0x2D, 0x4B, 0x65, 0x79, 0x3A, 0x20, - 0x28, 0x32, 0x35, 0x36, 0x20, 0x62, 0x69, 0x74, 0x29, 0x0A, + 0x69, 0x63, 0x2D, 0x4B, 0x65, 0x79, 0x3A, 0x20, 0x28, 0x32, + 0x35, 0x36, 0x20, 0x62, 0x69, 0x74, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x75, 0x62, 0x3A, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x70, 0x75, 0x62, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x30, 0x34, 0x3A, 0x39, 0x34, 0x3A, 0x37, 0x30, 0x3A, - 0x32, 0x62, 0x3A, 0x34, 0x36, 0x3A, 0x65, 0x34, 0x3A, 0x35, - 0x65, 0x3A, 0x30, 0x66, 0x3A, 0x34, 0x31, 0x3A, 0x66, 0x62, - 0x3A, 0x38, 0x66, 0x3A, 0x32, 0x64, 0x3A, 0x33, 0x34, 0x3A, - 0x30, 0x61, 0x3A, 0x34, 0x31, 0x3A, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x30, 0x3A, - 0x31, 0x39, 0x3A, 0x35, 0x65, 0x3A, 0x66, 0x62, 0x3A, 0x64, - 0x34, 0x3A, 0x31, 0x64, 0x3A, 0x31, 0x31, 0x3A, 0x61, 0x63, - 0x3A, 0x66, 0x61, 0x3A, 0x66, 0x35, 0x3A, 0x39, 0x33, 0x3A, - 0x33, 0x37, 0x3A, 0x63, 0x36, 0x3A, 0x66, 0x61, 0x3A, 0x38, - 0x37, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, + 0x34, 0x3A, 0x39, 0x34, 0x3A, 0x37, 0x30, 0x3A, 0x32, 0x62, + 0x3A, 0x34, 0x36, 0x3A, 0x65, 0x34, 0x3A, 0x35, 0x65, 0x3A, + 0x30, 0x66, 0x3A, 0x34, 0x31, 0x3A, 0x66, 0x62, 0x3A, 0x38, + 0x66, 0x3A, 0x32, 0x64, 0x3A, 0x33, 0x34, 0x3A, 0x30, 0x61, + 0x3A, 0x34, 0x31, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x30, 0x3A, 0x31, 0x39, + 0x3A, 0x35, 0x65, 0x3A, 0x66, 0x62, 0x3A, 0x64, 0x34, 0x3A, + 0x31, 0x64, 0x3A, 0x31, 0x31, 0x3A, 0x61, 0x63, 0x3A, 0x66, + 0x61, 0x3A, 0x66, 0x35, 0x3A, 0x39, 0x33, 0x3A, 0x33, 0x37, + 0x3A, 0x63, 0x36, 0x3A, 0x66, 0x61, 0x3A, 0x38, 0x37, 0x3A, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x30, 0x38, 0x3A, 0x66, 0x37, 0x3A, 0x31, - 0x36, 0x3A, 0x31, 0x66, 0x3A, 0x32, 0x63, 0x3A, 0x63, 0x65, - 0x3A, 0x33, 0x30, 0x3A, 0x34, 0x30, 0x3A, 0x39, 0x64, 0x3A, - 0x34, 0x66, 0x3A, 0x61, 0x36, 0x3A, 0x32, 0x61, 0x3A, 0x30, - 0x61, 0x3A, 0x61, 0x31, 0x3A, 0x64, 0x36, 0x3A, 0x0A, 0x20, + 0x20, 0x30, 0x38, 0x3A, 0x66, 0x37, 0x3A, 0x31, 0x36, 0x3A, + 0x31, 0x66, 0x3A, 0x32, 0x63, 0x3A, 0x63, 0x65, 0x3A, 0x33, + 0x30, 0x3A, 0x34, 0x30, 0x3A, 0x39, 0x64, 0x3A, 0x34, 0x66, + 0x3A, 0x61, 0x36, 0x3A, 0x32, 0x61, 0x3A, 0x30, 0x61, 0x3A, + 0x61, 0x31, 0x3A, 0x64, 0x36, 0x3A, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x35, 0x3A, + 0x33, 0x33, 0x3A, 0x63, 0x33, 0x3A, 0x61, 0x36, 0x3A, 0x30, + 0x33, 0x3A, 0x39, 0x38, 0x3A, 0x65, 0x36, 0x3A, 0x38, 0x64, + 0x3A, 0x30, 0x35, 0x3A, 0x33, 0x34, 0x3A, 0x62, 0x30, 0x3A, + 0x39, 0x37, 0x3A, 0x30, 0x63, 0x3A, 0x64, 0x65, 0x3A, 0x61, + 0x34, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, - 0x35, 0x3A, 0x33, 0x33, 0x3A, 0x63, 0x33, 0x3A, 0x61, 0x36, - 0x3A, 0x30, 0x33, 0x3A, 0x39, 0x38, 0x3A, 0x65, 0x36, 0x3A, - 0x38, 0x64, 0x3A, 0x30, 0x35, 0x3A, 0x33, 0x34, 0x3A, 0x62, - 0x30, 0x3A, 0x39, 0x37, 0x3A, 0x30, 0x63, 0x3A, 0x64, 0x65, - 0x3A, 0x61, 0x34, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x63, 0x37, 0x3A, 0x63, 0x66, 0x3A, 0x35, + 0x33, 0x3A, 0x38, 0x66, 0x3A, 0x64, 0x31, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x37, 0x3A, 0x63, 0x66, - 0x3A, 0x35, 0x33, 0x3A, 0x38, 0x66, 0x3A, 0x64, 0x31, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x41, 0x53, 0x4E, 0x31, 0x20, 0x4F, + 0x49, 0x44, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x0A, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, + 0x76, 0x33, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6E, 0x73, 0x69, + 0x6F, 0x6E, 0x73, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, + 0x39, 0x76, 0x33, 0x20, 0x53, 0x75, 0x62, 0x6A, 0x65, 0x63, + 0x74, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x53, 0x4E, 0x31, - 0x20, 0x4F, 0x49, 0x44, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, - 0x30, 0x39, 0x76, 0x33, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6E, - 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x3A, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, - 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x53, 0x75, 0x62, 0x6A, - 0x65, 0x63, 0x74, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x36, 0x37, 0x3A, 0x41, 0x45, + 0x3A, 0x36, 0x30, 0x3A, 0x46, 0x46, 0x3A, 0x37, 0x45, 0x3A, + 0x31, 0x42, 0x3A, 0x30, 0x46, 0x3A, 0x39, 0x35, 0x3A, 0x41, + 0x45, 0x3A, 0x31, 0x46, 0x3A, 0x38, 0x32, 0x3A, 0x35, 0x39, + 0x3A, 0x46, 0x32, 0x3A, 0x36, 0x43, 0x3A, 0x35, 0x36, 0x3A, + 0x32, 0x44, 0x3A, 0x39, 0x33, 0x3A, 0x45, 0x46, 0x3A, 0x31, + 0x37, 0x3A, 0x33, 0x32, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, + 0x39, 0x76, 0x33, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, + 0x69, 0x74, 0x79, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x36, 0x37, 0x3A, - 0x41, 0x45, 0x3A, 0x36, 0x30, 0x3A, 0x46, 0x46, 0x3A, 0x37, - 0x45, 0x3A, 0x31, 0x42, 0x3A, 0x30, 0x46, 0x3A, 0x39, 0x35, - 0x3A, 0x41, 0x45, 0x3A, 0x31, 0x46, 0x3A, 0x38, 0x32, 0x3A, - 0x35, 0x39, 0x3A, 0x46, 0x32, 0x3A, 0x36, 0x43, 0x3A, 0x35, - 0x36, 0x3A, 0x32, 0x44, 0x3A, 0x39, 0x33, 0x3A, 0x45, 0x46, - 0x3A, 0x31, 0x37, 0x3A, 0x33, 0x32, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x37, 0x3A, + 0x30, 0x41, 0x3A, 0x34, 0x38, 0x3A, 0x37, 0x45, 0x3A, 0x42, + 0x42, 0x3A, 0x30, 0x32, 0x3A, 0x41, 0x38, 0x3A, 0x35, 0x41, + 0x3A, 0x32, 0x36, 0x3A, 0x35, 0x37, 0x3A, 0x32, 0x42, 0x3A, + 0x31, 0x39, 0x3A, 0x41, 0x39, 0x3A, 0x37, 0x42, 0x3A, 0x36, + 0x31, 0x3A, 0x38, 0x42, 0x3A, 0x37, 0x46, 0x3A, 0x35, 0x44, + 0x3A, 0x39, 0x39, 0x3A, 0x36, 0x45, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, - 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x41, 0x75, 0x74, 0x68, - 0x6F, 0x72, 0x69, 0x74, 0x79, 0x20, 0x4B, 0x65, 0x79, 0x20, - 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, - 0x37, 0x3A, 0x30, 0x41, 0x3A, 0x34, 0x38, 0x3A, 0x37, 0x45, - 0x3A, 0x42, 0x42, 0x3A, 0x30, 0x32, 0x3A, 0x41, 0x38, 0x3A, - 0x35, 0x41, 0x3A, 0x32, 0x36, 0x3A, 0x35, 0x37, 0x3A, 0x32, - 0x42, 0x3A, 0x31, 0x39, 0x3A, 0x41, 0x39, 0x3A, 0x37, 0x42, - 0x3A, 0x36, 0x31, 0x3A, 0x38, 0x42, 0x3A, 0x37, 0x46, 0x3A, - 0x35, 0x44, 0x3A, 0x39, 0x39, 0x3A, 0x36, 0x45, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x42, 0x61, - 0x73, 0x69, 0x63, 0x20, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x72, - 0x61, 0x69, 0x6E, 0x74, 0x73, 0x3A, 0x20, 0x63, 0x72, 0x69, - 0x74, 0x69, 0x63, 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x43, 0x41, 0x3A, 0x46, 0x41, 0x4C, 0x53, 0x45, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, - 0x4B, 0x65, 0x79, 0x20, 0x55, 0x73, 0x61, 0x67, 0x65, 0x3A, - 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x0A, + 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x42, 0x61, 0x73, 0x69, + 0x63, 0x20, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x72, 0x61, 0x69, + 0x6E, 0x74, 0x73, 0x3A, 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, + 0x63, 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x69, 0x67, 0x69, - 0x74, 0x61, 0x6C, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2C, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x45, - 0x6E, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x6D, 0x65, 0x6E, - 0x74, 0x2C, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x41, 0x67, 0x72, - 0x65, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, - 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x45, 0x78, 0x74, 0x65, - 0x6E, 0x64, 0x65, 0x64, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x55, - 0x73, 0x61, 0x67, 0x65, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, + 0x43, 0x41, 0x3A, 0x46, 0x41, 0x4C, 0x53, 0x45, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x54, 0x4C, 0x53, 0x20, 0x57, 0x65, 0x62, - 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x41, 0x75, - 0x74, 0x68, 0x65, 0x6E, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6F, 0x6E, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, 0x65, 0x74, 0x73, 0x63, - 0x61, 0x70, 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x20, 0x54, - 0x79, 0x70, 0x65, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x58, 0x35, 0x30, 0x39, 0x76, 0x33, 0x20, 0x4B, 0x65, + 0x79, 0x20, 0x55, 0x73, 0x61, 0x67, 0x65, 0x3A, 0x20, 0x63, + 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x53, 0x53, 0x4C, 0x20, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, - 0x6E, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, 0x6C, 0x67, - 0x6F, 0x72, 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, - 0x32, 0x2D, 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, + 0x20, 0x20, 0x20, 0x20, 0x44, 0x69, 0x67, 0x69, 0x74, 0x61, + 0x6C, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x2C, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x45, 0x6E, 0x63, + 0x69, 0x70, 0x68, 0x65, 0x72, 0x6D, 0x65, 0x6E, 0x74, 0x2C, + 0x20, 0x4B, 0x65, 0x79, 0x20, 0x41, 0x67, 0x72, 0x65, 0x65, + 0x6D, 0x65, 0x6E, 0x74, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x58, 0x35, 0x30, + 0x39, 0x76, 0x33, 0x20, 0x45, 0x78, 0x74, 0x65, 0x6E, 0x64, + 0x65, 0x64, 0x20, 0x4B, 0x65, 0x79, 0x20, 0x55, 0x73, 0x61, + 0x67, 0x65, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x54, 0x4C, 0x53, 0x20, 0x57, 0x65, 0x62, 0x20, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x41, 0x75, 0x74, 0x68, + 0x65, 0x6E, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x4E, 0x65, 0x74, 0x73, 0x63, 0x61, 0x70, + 0x65, 0x20, 0x43, 0x65, 0x72, 0x74, 0x20, 0x54, 0x79, 0x70, + 0x65, 0x3A, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x53, 0x53, 0x4C, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, - 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x33, 0x30, 0x3A, 0x34, 0x35, 0x3A, 0x30, 0x32, 0x3A, 0x32, - 0x30, 0x3A, 0x31, 0x62, 0x3A, 0x63, 0x61, 0x3A, 0x39, 0x34, - 0x3A, 0x32, 0x38, 0x3A, 0x37, 0x66, 0x3A, 0x66, 0x36, 0x3A, - 0x62, 0x32, 0x3A, 0x30, 0x64, 0x3A, 0x33, 0x31, 0x3A, 0x34, - 0x33, 0x3A, 0x35, 0x30, 0x3A, 0x65, 0x31, 0x3A, 0x64, 0x35, - 0x3A, 0x33, 0x34, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x31, 0x37, 0x3A, 0x64, 0x64, 0x3A, 0x61, - 0x66, 0x3A, 0x33, 0x61, 0x3A, 0x64, 0x65, 0x3A, 0x38, 0x31, - 0x3A, 0x30, 0x36, 0x3A, 0x36, 0x37, 0x3A, 0x39, 0x61, 0x3A, - 0x62, 0x33, 0x3A, 0x30, 0x36, 0x3A, 0x32, 0x32, 0x3A, 0x37, - 0x65, 0x3A, 0x36, 0x34, 0x3A, 0x65, 0x63, 0x3A, 0x66, 0x64, - 0x3A, 0x30, 0x65, 0x3A, 0x62, 0x39, 0x3A, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x32, 0x3A, 0x32, - 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x61, 0x31, 0x3A, 0x34, 0x38, - 0x3A, 0x61, 0x38, 0x3A, 0x33, 0x32, 0x3A, 0x64, 0x31, 0x3A, - 0x30, 0x35, 0x3A, 0x30, 0x39, 0x3A, 0x36, 0x62, 0x3A, 0x31, - 0x63, 0x3A, 0x65, 0x62, 0x3A, 0x38, 0x39, 0x3A, 0x31, 0x32, - 0x3A, 0x36, 0x36, 0x3A, 0x64, 0x38, 0x3A, 0x33, 0x38, 0x3A, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, - 0x31, 0x3A, 0x63, 0x34, 0x3A, 0x35, 0x63, 0x3A, 0x38, 0x39, - 0x3A, 0x30, 0x39, 0x3A, 0x30, 0x66, 0x3A, 0x66, 0x64, 0x3A, - 0x65, 0x39, 0x3A, 0x63, 0x30, 0x3A, 0x33, 0x62, 0x3A, 0x31, - 0x64, 0x3A, 0x66, 0x62, 0x3A, 0x63, 0x64, 0x3A, 0x62, 0x35, - 0x3A, 0x34, 0x63, 0x3A, 0x33, 0x31, 0x3A, 0x36, 0x38, 0x0A, - 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, - 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, - 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, 0x49, - 0x49, 0x43, 0x32, 0x44, 0x43, 0x43, 0x41, 0x6E, 0x36, 0x67, - 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x42, 0x41, 0x54, - 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, 0x50, - 0x56, 0x51, 0x47, 0x44, 0x64, 0x54, 0x43, 0x42, 0x72, 0x44, - 0x45, 0x4C, 0x4D, 0x41, 0x6B, 0x47, 0x41, 0x31, 0x55, 0x45, - 0x42, 0x68, 0x4D, 0x43, 0x56, 0x56, 0x4D, 0x78, 0x45, 0x44, - 0x41, 0x4F, 0x0A, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x67, - 0x4D, 0x42, 0x30, 0x31, 0x76, 0x62, 0x6E, 0x52, 0x68, 0x62, - 0x6D, 0x45, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, - 0x56, 0x42, 0x41, 0x63, 0x4D, 0x42, 0x30, 0x4A, 0x76, 0x65, - 0x6D, 0x56, 0x74, 0x59, 0x57, 0x34, 0x78, 0x46, 0x44, 0x41, - 0x53, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x6F, 0x4D, 0x43, - 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, 0x0A, 0x55, 0x30, - 0x78, 0x66, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x51, 0x38, 0x77, - 0x44, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4C, 0x44, 0x41, - 0x5A, 0x44, 0x51, 0x53, 0x31, 0x7A, 0x62, 0x54, 0x49, 0x78, - 0x47, 0x44, 0x41, 0x57, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, - 0x4D, 0x4D, 0x44, 0x33, 0x64, 0x33, 0x64, 0x79, 0x35, 0x33, - 0x62, 0x32, 0x78, 0x6D, 0x63, 0x33, 0x4E, 0x73, 0x4C, 0x6D, - 0x4E, 0x76, 0x0A, 0x62, 0x54, 0x45, 0x66, 0x4D, 0x42, 0x30, - 0x47, 0x43, 0x53, 0x71, 0x47, 0x53, 0x49, 0x62, 0x33, 0x44, - 0x51, 0x45, 0x4A, 0x41, 0x52, 0x59, 0x51, 0x61, 0x57, 0x35, - 0x6D, 0x62, 0x30, 0x42, 0x33, 0x62, 0x32, 0x78, 0x6D, 0x63, - 0x33, 0x4E, 0x73, 0x4C, 0x6D, 0x4E, 0x76, 0x62, 0x54, 0x45, - 0x58, 0x4D, 0x42, 0x55, 0x47, 0x43, 0x67, 0x6D, 0x53, 0x4A, - 0x6F, 0x6D, 0x54, 0x38, 0x69, 0x78, 0x6B, 0x0A, 0x41, 0x51, - 0x45, 0x4D, 0x42, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, - 0x55, 0x30, 0x77, 0x77, 0x48, 0x68, 0x63, 0x4E, 0x4D, 0x6A, - 0x4D, 0x77, 0x4D, 0x6A, 0x45, 0x31, 0x4D, 0x44, 0x59, 0x79, - 0x4D, 0x7A, 0x41, 0x33, 0x57, 0x68, 0x63, 0x4E, 0x4D, 0x6A, - 0x55, 0x78, 0x4D, 0x54, 0x45, 0x78, 0x4D, 0x44, 0x59, 0x79, - 0x4D, 0x7A, 0x41, 0x33, 0x57, 0x6A, 0x43, 0x42, 0x73, 0x44, - 0x45, 0x4C, 0x0A, 0x4D, 0x41, 0x6B, 0x47, 0x41, 0x31, 0x55, + 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, 0x6C, 0x67, 0x6F, 0x72, + 0x69, 0x74, 0x68, 0x6D, 0x3A, 0x20, 0x53, 0x4D, 0x32, 0x2D, + 0x77, 0x69, 0x74, 0x68, 0x2D, 0x53, 0x4D, 0x33, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x53, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x20, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x33, 0x30, + 0x3A, 0x34, 0x36, 0x3A, 0x30, 0x32, 0x3A, 0x32, 0x31, 0x3A, + 0x30, 0x30, 0x3A, 0x39, 0x36, 0x3A, 0x35, 0x30, 0x3A, 0x35, + 0x66, 0x3A, 0x33, 0x65, 0x3A, 0x33, 0x66, 0x3A, 0x62, 0x66, + 0x3A, 0x31, 0x65, 0x3A, 0x35, 0x30, 0x3A, 0x36, 0x63, 0x3A, + 0x39, 0x61, 0x3A, 0x35, 0x64, 0x3A, 0x34, 0x65, 0x3A, 0x38, + 0x65, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x65, 0x66, 0x3A, 0x32, 0x37, 0x3A, 0x61, 0x31, 0x3A, + 0x34, 0x64, 0x3A, 0x66, 0x61, 0x3A, 0x62, 0x39, 0x3A, 0x37, + 0x35, 0x3A, 0x61, 0x36, 0x3A, 0x35, 0x38, 0x3A, 0x30, 0x65, + 0x3A, 0x66, 0x36, 0x3A, 0x64, 0x62, 0x3A, 0x36, 0x30, 0x3A, + 0x33, 0x32, 0x3A, 0x32, 0x30, 0x3A, 0x65, 0x34, 0x3A, 0x33, + 0x31, 0x3A, 0x31, 0x64, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x33, 0x36, 0x3A, 0x30, 0x32, 0x3A, + 0x32, 0x31, 0x3A, 0x30, 0x30, 0x3A, 0x65, 0x37, 0x3A, 0x63, + 0x62, 0x3A, 0x35, 0x63, 0x3A, 0x39, 0x66, 0x3A, 0x38, 0x35, + 0x3A, 0x37, 0x64, 0x3A, 0x34, 0x63, 0x3A, 0x62, 0x35, 0x3A, + 0x35, 0x34, 0x3A, 0x37, 0x34, 0x3A, 0x65, 0x34, 0x3A, 0x34, + 0x35, 0x3A, 0x63, 0x34, 0x3A, 0x66, 0x30, 0x3A, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x31, 0x3A, + 0x35, 0x33, 0x3A, 0x35, 0x31, 0x3A, 0x33, 0x33, 0x3A, 0x30, + 0x37, 0x3A, 0x64, 0x64, 0x3A, 0x32, 0x38, 0x3A, 0x63, 0x36, + 0x3A, 0x63, 0x37, 0x3A, 0x34, 0x37, 0x3A, 0x66, 0x66, 0x3A, + 0x64, 0x36, 0x3A, 0x64, 0x63, 0x3A, 0x62, 0x30, 0x3A, 0x65, + 0x31, 0x3A, 0x33, 0x36, 0x3A, 0x63, 0x63, 0x3A, 0x33, 0x62, + 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, + 0x4E, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, + 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x4D, + 0x49, 0x49, 0x43, 0x32, 0x54, 0x43, 0x43, 0x41, 0x6E, 0x36, + 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x42, 0x41, + 0x54, 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, 0x67, 0x52, 0x7A, + 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, 0x54, 0x43, 0x42, 0x72, + 0x44, 0x45, 0x4C, 0x4D, 0x41, 0x6B, 0x47, 0x41, 0x31, 0x55, 0x45, 0x42, 0x68, 0x4D, 0x43, 0x56, 0x56, 0x4D, 0x78, 0x45, - 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x67, - 0x4D, 0x42, 0x30, 0x31, 0x76, 0x62, 0x6E, 0x52, 0x68, 0x62, - 0x6D, 0x45, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, - 0x56, 0x42, 0x41, 0x63, 0x4D, 0x42, 0x30, 0x4A, 0x76, 0x65, - 0x6D, 0x56, 0x74, 0x59, 0x57, 0x34, 0x78, 0x0A, 0x46, 0x44, + 0x44, 0x41, 0x4F, 0x0A, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, + 0x67, 0x4D, 0x42, 0x30, 0x31, 0x76, 0x62, 0x6E, 0x52, 0x68, + 0x62, 0x6D, 0x45, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, + 0x4E, 0x56, 0x42, 0x41, 0x63, 0x4D, 0x42, 0x30, 0x4A, 0x76, + 0x65, 0x6D, 0x56, 0x74, 0x59, 0x57, 0x34, 0x78, 0x46, 0x44, 0x41, 0x53, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x6F, 0x4D, - 0x43, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, 0x55, 0x30, - 0x78, 0x66, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, 0x4D, 0x77, - 0x45, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4C, 0x44, 0x41, - 0x70, 0x54, 0x5A, 0x58, 0x4A, 0x32, 0x5A, 0x58, 0x49, 0x74, - 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, 0x67, 0x77, 0x46, 0x67, - 0x59, 0x44, 0x0A, 0x56, 0x51, 0x51, 0x44, 0x44, 0x41, 0x39, - 0x33, 0x64, 0x33, 0x63, 0x75, 0x64, 0x32, 0x39, 0x73, 0x5A, - 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x35, 0x6A, 0x62, 0x32, 0x30, - 0x78, 0x48, 0x7A, 0x41, 0x64, 0x42, 0x67, 0x6B, 0x71, 0x68, - 0x6B, 0x69, 0x47, 0x39, 0x77, 0x30, 0x42, 0x43, 0x51, 0x45, - 0x57, 0x45, 0x47, 0x6C, 0x75, 0x5A, 0x6D, 0x39, 0x41, 0x64, - 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x0A, 0x62, 0x43, - 0x35, 0x6A, 0x62, 0x32, 0x30, 0x78, 0x46, 0x7A, 0x41, 0x56, - 0x42, 0x67, 0x6F, 0x4A, 0x6B, 0x69, 0x61, 0x4A, 0x6B, 0x2F, - 0x49, 0x73, 0x5A, 0x41, 0x45, 0x42, 0x44, 0x41, 0x64, 0x33, - 0x62, 0x32, 0x78, 0x6D, 0x55, 0x31, 0x4E, 0x4D, 0x4D, 0x46, - 0x6F, 0x77, 0x46, 0x41, 0x59, 0x49, 0x4B, 0x6F, 0x45, 0x63, - 0x7A, 0x31, 0x55, 0x42, 0x67, 0x69, 0x30, 0x47, 0x43, 0x43, - 0x71, 0x42, 0x0A, 0x48, 0x4D, 0x39, 0x56, 0x41, 0x59, 0x49, - 0x74, 0x41, 0x30, 0x49, 0x41, 0x42, 0x4A, 0x52, 0x77, 0x4B, - 0x30, 0x62, 0x6B, 0x58, 0x67, 0x39, 0x42, 0x2B, 0x34, 0x38, - 0x74, 0x4E, 0x41, 0x70, 0x42, 0x51, 0x42, 0x6C, 0x65, 0x2B, - 0x39, 0x51, 0x64, 0x45, 0x61, 0x7A, 0x36, 0x39, 0x5A, 0x4D, - 0x33, 0x78, 0x76, 0x71, 0x48, 0x43, 0x50, 0x63, 0x57, 0x48, - 0x79, 0x7A, 0x4F, 0x4D, 0x45, 0x43, 0x64, 0x0A, 0x54, 0x36, - 0x59, 0x71, 0x43, 0x71, 0x48, 0x57, 0x6C, 0x54, 0x50, 0x44, - 0x70, 0x67, 0x4F, 0x59, 0x35, 0x6F, 0x30, 0x46, 0x4E, 0x4C, - 0x43, 0x58, 0x44, 0x4E, 0x36, 0x6B, 0x78, 0x38, 0x39, 0x54, - 0x6A, 0x39, 0x47, 0x6A, 0x67, 0x59, 0x6B, 0x77, 0x67, 0x59, - 0x59, 0x77, 0x48, 0x51, 0x59, 0x44, 0x56, 0x52, 0x30, 0x4F, - 0x42, 0x42, 0x59, 0x45, 0x46, 0x47, 0x65, 0x75, 0x59, 0x50, - 0x39, 0x2B, 0x0A, 0x47, 0x77, 0x2B, 0x56, 0x72, 0x68, 0x2B, - 0x43, 0x57, 0x66, 0x4A, 0x73, 0x56, 0x69, 0x32, 0x54, 0x37, - 0x78, 0x63, 0x79, 0x4D, 0x42, 0x38, 0x47, 0x41, 0x31, 0x55, - 0x64, 0x49, 0x77, 0x51, 0x59, 0x4D, 0x42, 0x61, 0x41, 0x46, - 0x45, 0x63, 0x4B, 0x53, 0x48, 0x36, 0x37, 0x41, 0x71, 0x68, - 0x61, 0x4A, 0x6C, 0x63, 0x72, 0x47, 0x61, 0x6C, 0x37, 0x59, - 0x59, 0x74, 0x2F, 0x58, 0x5A, 0x6C, 0x75, 0x0A, 0x4D, 0x41, - 0x77, 0x47, 0x41, 0x31, 0x55, 0x64, 0x45, 0x77, 0x45, 0x42, - 0x2F, 0x77, 0x51, 0x43, 0x4D, 0x41, 0x41, 0x77, 0x44, 0x67, - 0x59, 0x44, 0x56, 0x52, 0x30, 0x50, 0x41, 0x51, 0x48, 0x2F, - 0x42, 0x41, 0x51, 0x44, 0x41, 0x67, 0x4F, 0x6F, 0x4D, 0x42, - 0x4D, 0x47, 0x41, 0x31, 0x55, 0x64, 0x4A, 0x51, 0x51, 0x4D, - 0x4D, 0x41, 0x6F, 0x47, 0x43, 0x43, 0x73, 0x47, 0x41, 0x51, - 0x55, 0x46, 0x0A, 0x42, 0x77, 0x4D, 0x42, 0x4D, 0x42, 0x45, - 0x47, 0x43, 0x57, 0x43, 0x47, 0x53, 0x41, 0x47, 0x47, 0x2B, - 0x45, 0x49, 0x42, 0x41, 0x51, 0x51, 0x45, 0x41, 0x77, 0x49, - 0x47, 0x51, 0x44, 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, 0x67, - 0x52, 0x7A, 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, 0x51, 0x4E, - 0x49, 0x41, 0x44, 0x42, 0x46, 0x41, 0x69, 0x41, 0x62, 0x79, - 0x70, 0x51, 0x6F, 0x66, 0x2F, 0x61, 0x79, 0x0A, 0x44, 0x54, - 0x46, 0x44, 0x55, 0x4F, 0x48, 0x56, 0x4E, 0x42, 0x66, 0x64, - 0x72, 0x7A, 0x72, 0x65, 0x67, 0x51, 0x5A, 0x6E, 0x6D, 0x72, - 0x4D, 0x47, 0x49, 0x6E, 0x35, 0x6B, 0x37, 0x50, 0x30, 0x4F, - 0x75, 0x51, 0x49, 0x68, 0x41, 0x4B, 0x46, 0x49, 0x71, 0x44, - 0x4C, 0x52, 0x42, 0x51, 0x6C, 0x72, 0x48, 0x4F, 0x75, 0x4A, - 0x45, 0x6D, 0x62, 0x59, 0x4F, 0x4B, 0x48, 0x45, 0x58, 0x49, - 0x6B, 0x4A, 0x0A, 0x44, 0x2F, 0x33, 0x70, 0x77, 0x44, 0x73, - 0x64, 0x2B, 0x38, 0x32, 0x31, 0x54, 0x44, 0x46, 0x6F, 0x0A, - 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x43, - 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, - 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A + 0x43, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, 0x0A, 0x55, + 0x30, 0x78, 0x66, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x51, 0x38, + 0x77, 0x44, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4C, 0x44, + 0x41, 0x5A, 0x44, 0x51, 0x53, 0x31, 0x7A, 0x62, 0x54, 0x49, + 0x78, 0x47, 0x44, 0x41, 0x57, 0x42, 0x67, 0x4E, 0x56, 0x42, + 0x41, 0x4D, 0x4D, 0x44, 0x33, 0x64, 0x33, 0x64, 0x79, 0x35, + 0x33, 0x62, 0x32, 0x78, 0x6D, 0x63, 0x33, 0x4E, 0x73, 0x4C, + 0x6D, 0x4E, 0x76, 0x0A, 0x62, 0x54, 0x45, 0x66, 0x4D, 0x42, + 0x30, 0x47, 0x43, 0x53, 0x71, 0x47, 0x53, 0x49, 0x62, 0x33, + 0x44, 0x51, 0x45, 0x4A, 0x41, 0x52, 0x59, 0x51, 0x61, 0x57, + 0x35, 0x6D, 0x62, 0x30, 0x42, 0x33, 0x62, 0x32, 0x78, 0x6D, + 0x63, 0x33, 0x4E, 0x73, 0x4C, 0x6D, 0x4E, 0x76, 0x62, 0x54, + 0x45, 0x58, 0x4D, 0x42, 0x55, 0x47, 0x43, 0x67, 0x6D, 0x53, + 0x4A, 0x6F, 0x6D, 0x54, 0x38, 0x69, 0x78, 0x6B, 0x0A, 0x41, + 0x51, 0x45, 0x4D, 0x42, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, + 0x54, 0x55, 0x30, 0x77, 0x77, 0x48, 0x68, 0x63, 0x4E, 0x4D, + 0x6A, 0x59, 0x77, 0x4D, 0x6A, 0x45, 0x34, 0x4D, 0x54, 0x63, + 0x31, 0x4E, 0x6A, 0x55, 0x33, 0x57, 0x68, 0x63, 0x4E, 0x4D, + 0x6A, 0x67, 0x78, 0x4D, 0x54, 0x45, 0x30, 0x4D, 0x54, 0x63, + 0x31, 0x4E, 0x6A, 0x55, 0x33, 0x57, 0x6A, 0x43, 0x42, 0x73, + 0x44, 0x45, 0x4C, 0x0A, 0x4D, 0x41, 0x6B, 0x47, 0x41, 0x31, + 0x55, 0x45, 0x42, 0x68, 0x4D, 0x43, 0x56, 0x56, 0x4D, 0x78, + 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, + 0x67, 0x4D, 0x42, 0x30, 0x31, 0x76, 0x62, 0x6E, 0x52, 0x68, + 0x62, 0x6D, 0x45, 0x78, 0x45, 0x44, 0x41, 0x4F, 0x42, 0x67, + 0x4E, 0x56, 0x42, 0x41, 0x63, 0x4D, 0x42, 0x30, 0x4A, 0x76, + 0x65, 0x6D, 0x56, 0x74, 0x59, 0x57, 0x34, 0x78, 0x0A, 0x46, + 0x44, 0x41, 0x53, 0x42, 0x67, 0x4E, 0x56, 0x42, 0x41, 0x6F, + 0x4D, 0x43, 0x33, 0x64, 0x76, 0x62, 0x47, 0x5A, 0x54, 0x55, + 0x30, 0x78, 0x66, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, 0x4D, + 0x77, 0x45, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4C, 0x44, + 0x41, 0x70, 0x54, 0x5A, 0x58, 0x4A, 0x32, 0x5A, 0x58, 0x49, + 0x74, 0x63, 0x32, 0x30, 0x79, 0x4D, 0x52, 0x67, 0x77, 0x46, + 0x67, 0x59, 0x44, 0x0A, 0x56, 0x51, 0x51, 0x44, 0x44, 0x41, + 0x39, 0x33, 0x64, 0x33, 0x63, 0x75, 0x64, 0x32, 0x39, 0x73, + 0x5A, 0x6E, 0x4E, 0x7A, 0x62, 0x43, 0x35, 0x6A, 0x62, 0x32, + 0x30, 0x78, 0x48, 0x7A, 0x41, 0x64, 0x42, 0x67, 0x6B, 0x71, + 0x68, 0x6B, 0x69, 0x47, 0x39, 0x77, 0x30, 0x42, 0x43, 0x51, + 0x45, 0x57, 0x45, 0x47, 0x6C, 0x75, 0x5A, 0x6D, 0x39, 0x41, + 0x64, 0x32, 0x39, 0x73, 0x5A, 0x6E, 0x4E, 0x7A, 0x0A, 0x62, + 0x43, 0x35, 0x6A, 0x62, 0x32, 0x30, 0x78, 0x46, 0x7A, 0x41, + 0x56, 0x42, 0x67, 0x6F, 0x4A, 0x6B, 0x69, 0x61, 0x4A, 0x6B, + 0x2F, 0x49, 0x73, 0x5A, 0x41, 0x45, 0x42, 0x44, 0x41, 0x64, + 0x33, 0x62, 0x32, 0x78, 0x6D, 0x55, 0x31, 0x4E, 0x4D, 0x4D, + 0x46, 0x6F, 0x77, 0x46, 0x41, 0x59, 0x49, 0x4B, 0x6F, 0x45, + 0x63, 0x7A, 0x31, 0x55, 0x42, 0x67, 0x69, 0x30, 0x47, 0x43, + 0x43, 0x71, 0x42, 0x0A, 0x48, 0x4D, 0x39, 0x56, 0x41, 0x59, + 0x49, 0x74, 0x41, 0x30, 0x49, 0x41, 0x42, 0x4A, 0x52, 0x77, + 0x4B, 0x30, 0x62, 0x6B, 0x58, 0x67, 0x39, 0x42, 0x2B, 0x34, + 0x38, 0x74, 0x4E, 0x41, 0x70, 0x42, 0x51, 0x42, 0x6C, 0x65, + 0x2B, 0x39, 0x51, 0x64, 0x45, 0x61, 0x7A, 0x36, 0x39, 0x5A, + 0x4D, 0x33, 0x78, 0x76, 0x71, 0x48, 0x43, 0x50, 0x63, 0x57, + 0x48, 0x79, 0x7A, 0x4F, 0x4D, 0x45, 0x43, 0x64, 0x0A, 0x54, + 0x36, 0x59, 0x71, 0x43, 0x71, 0x48, 0x57, 0x6C, 0x54, 0x50, + 0x44, 0x70, 0x67, 0x4F, 0x59, 0x35, 0x6F, 0x30, 0x46, 0x4E, + 0x4C, 0x43, 0x58, 0x44, 0x4E, 0x36, 0x6B, 0x78, 0x38, 0x39, + 0x54, 0x6A, 0x39, 0x47, 0x6A, 0x67, 0x59, 0x6B, 0x77, 0x67, + 0x59, 0x59, 0x77, 0x48, 0x51, 0x59, 0x44, 0x56, 0x52, 0x30, + 0x4F, 0x42, 0x42, 0x59, 0x45, 0x46, 0x47, 0x65, 0x75, 0x59, + 0x50, 0x39, 0x2B, 0x0A, 0x47, 0x77, 0x2B, 0x56, 0x72, 0x68, + 0x2B, 0x43, 0x57, 0x66, 0x4A, 0x73, 0x56, 0x69, 0x32, 0x54, + 0x37, 0x78, 0x63, 0x79, 0x4D, 0x42, 0x38, 0x47, 0x41, 0x31, + 0x55, 0x64, 0x49, 0x77, 0x51, 0x59, 0x4D, 0x42, 0x61, 0x41, + 0x46, 0x45, 0x63, 0x4B, 0x53, 0x48, 0x36, 0x37, 0x41, 0x71, + 0x68, 0x61, 0x4A, 0x6C, 0x63, 0x72, 0x47, 0x61, 0x6C, 0x37, + 0x59, 0x59, 0x74, 0x2F, 0x58, 0x5A, 0x6C, 0x75, 0x0A, 0x4D, + 0x41, 0x77, 0x47, 0x41, 0x31, 0x55, 0x64, 0x45, 0x77, 0x45, + 0x42, 0x2F, 0x77, 0x51, 0x43, 0x4D, 0x41, 0x41, 0x77, 0x44, + 0x67, 0x59, 0x44, 0x56, 0x52, 0x30, 0x50, 0x41, 0x51, 0x48, + 0x2F, 0x42, 0x41, 0x51, 0x44, 0x41, 0x67, 0x4F, 0x6F, 0x4D, + 0x42, 0x4D, 0x47, 0x41, 0x31, 0x55, 0x64, 0x4A, 0x51, 0x51, + 0x4D, 0x4D, 0x41, 0x6F, 0x47, 0x43, 0x43, 0x73, 0x47, 0x41, + 0x51, 0x55, 0x46, 0x0A, 0x42, 0x77, 0x4D, 0x42, 0x4D, 0x42, + 0x45, 0x47, 0x43, 0x57, 0x43, 0x47, 0x53, 0x41, 0x47, 0x47, + 0x2B, 0x45, 0x49, 0x42, 0x41, 0x51, 0x51, 0x45, 0x41, 0x77, + 0x49, 0x47, 0x51, 0x44, 0x41, 0x4B, 0x42, 0x67, 0x67, 0x71, + 0x67, 0x52, 0x7A, 0x50, 0x56, 0x51, 0x47, 0x44, 0x64, 0x51, + 0x4E, 0x4A, 0x41, 0x44, 0x42, 0x47, 0x41, 0x69, 0x45, 0x41, + 0x6C, 0x6C, 0x42, 0x66, 0x50, 0x6A, 0x2B, 0x2F, 0x0A, 0x48, + 0x6C, 0x42, 0x73, 0x6D, 0x6C, 0x31, 0x4F, 0x6A, 0x75, 0x38, + 0x6E, 0x6F, 0x55, 0x33, 0x36, 0x75, 0x58, 0x57, 0x6D, 0x57, + 0x41, 0x37, 0x32, 0x32, 0x32, 0x41, 0x79, 0x49, 0x4F, 0x51, + 0x78, 0x48, 0x54, 0x59, 0x43, 0x49, 0x51, 0x44, 0x6E, 0x79, + 0x31, 0x79, 0x66, 0x68, 0x58, 0x31, 0x4D, 0x74, 0x56, 0x52, + 0x30, 0x35, 0x45, 0x58, 0x45, 0x38, 0x41, 0x46, 0x54, 0x55, + 0x54, 0x4D, 0x48, 0x0A, 0x33, 0x53, 0x6A, 0x47, 0x78, 0x30, + 0x66, 0x2F, 0x31, 0x74, 0x79, 0x77, 0x34, 0x54, 0x62, 0x4D, + 0x4F, 0x77, 0x3D, 0x3D, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, + 0x45, 0x4E, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, + 0x49, 0x43, 0x41, 0x54, 0x45, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, + 0x0A }; #define sizeof_server_sm2_cert (sizeof(server_sm2_cert)) diff --git a/wolfssl/error-ssl.h b/wolfssl/error-ssl.h index 1992857dbf..b98a52d40c 100644 --- a/wolfssl/error-ssl.h +++ b/wolfssl/error-ssl.h @@ -197,7 +197,7 @@ enum wolfSSL_ErrorCodes { UNSUPPORTED_PROTO_VERSION = -450, /* bad/unsupported protocol version*/ FALCON_KEY_SIZE_E = -451, /* Wrong key size for Falcon. */ QUIC_TP_MISSING_E = -452, /* QUIC transport parameter missing */ - DILITHIUM_KEY_SIZE_E = -453, /* Wrong key size for Dilithium. */ + MLDSA_KEY_SIZE_E = -453, /* Wrong key size for ML-DSA. */ DTLS_CID_ERROR = -454, /* Wrong or missing CID */ DTLS_TOO_MANY_FRAGMENTS_E = -455, /* Received too many fragments */ QUIC_WRONG_ENC_LEVEL = -456, /* QUIC data received on wrong encryption level */ @@ -251,6 +251,12 @@ enum wolfSSL_ErrorCodes { wc_static_assert((int)WC_LAST_E <= (int)WOLFSSL_LAST_E); +#ifndef WOLFSSL_NO_DILITHIUM_LEGACY_NAMES + /* Legacy alias for code written against the pre-standardization + * Dilithium name. Will be removed alongside the dilithium.h shim. */ + #define DILITHIUM_KEY_SIZE_E MLDSA_KEY_SIZE_E +#endif + /* I/O Callback default errors */ enum IOerrors { WOLFSSL_CBIO_ERR_GENERAL = -1, /* general unexpected err */ diff --git a/wolfssl/internal.h b/wolfssl/internal.h index 40400105dc..c09647c1ba 100644 --- a/wolfssl/internal.h +++ b/wolfssl/internal.h @@ -126,8 +126,8 @@ #ifdef HAVE_FALCON #include #endif -#ifdef HAVE_DILITHIUM - #include +#ifdef WOLFSSL_HAVE_MLDSA + #include #endif #ifdef HAVE_HKDF #include @@ -1778,7 +1778,7 @@ enum Misc { SM2_SA_MINOR = 8, /* Least significant byte for SM2 with SM3 */ FALCON_SA_MAJOR = 0xFE,/* Most significant byte used with falcon sig algs */ - DILITHIUM_SA_MAJOR = 0x09,/* Most significant byte used with dilithium sig algs */ + MLDSA_SA_MAJOR = 0x09,/* Most significant byte used with ML-DSA sig algs */ /* These values for falcon match what OQS has defined. */ FALCON_LEVEL1_SA_MAJOR = 0xFE, @@ -1786,14 +1786,13 @@ enum Misc { FALCON_LEVEL5_SA_MAJOR = 0xFE, FALCON_LEVEL5_SA_MINOR = 0xDA, - /* these values for MLDSA (Dilithium) correspond to what is proposed in the - * IETF. */ - DILITHIUM_LEVEL2_SA_MAJOR = 0x09, - DILITHIUM_LEVEL2_SA_MINOR = 0x04, - DILITHIUM_LEVEL3_SA_MAJOR = 0x09, - DILITHIUM_LEVEL3_SA_MINOR = 0x05, - DILITHIUM_LEVEL5_SA_MAJOR = 0x09, - DILITHIUM_LEVEL5_SA_MINOR = 0x06, + /* These values for ML-DSA correspond to what is proposed in the IETF. */ + MLDSA_44_SA_MAJOR = 0x09, + MLDSA_44_SA_MINOR = 0x04, + MLDSA_65_SA_MAJOR = 0x09, + MLDSA_65_SA_MINOR = 0x05, + MLDSA_87_SA_MAJOR = 0x09, + MLDSA_87_SA_MINOR = 0x06, MIN_RSA_SHA512_PSS_BITS = 512 * 2 + 8 * 8, /* Min key size */ MIN_RSA_SHA384_PSS_BITS = 384 * 2 + 8 * 8, /* Min key size */ @@ -1894,7 +1893,7 @@ WOLFSSL_LOCAL int NamedGroupIsPqcHybrid(int group); /* number of items in the signature algo list */ #ifndef WOLFSSL_MAX_SIGALGO -#if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) +#if defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) /* If we are building with post-quantum algorithms, we likely want to * inter-op with OQS's OpenSSL and they send a lot more sigalgs. */ @@ -1928,9 +1927,9 @@ WOLFSSL_LOCAL int NamedGroupIsPqcHybrid(int group); #define MIN_FALCONKEY_SZ 1281 #endif #endif -#ifdef HAVE_DILITHIUM -#ifndef MIN_DILITHIUMKEY_SZ - #define MIN_DILITHIUMKEY_SZ 2528 +#ifdef WOLFSSL_HAVE_MLDSA +#ifndef MIN_MLDSAKEY_SZ + #define MIN_MLDSAKEY_SZ 2528 #endif #endif @@ -1973,8 +1972,8 @@ WOLFSSL_LOCAL int NamedGroupIsPqcHybrid(int group); #endif #ifndef MAX_X509_SIZE - #if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) - #define MAX_X509_SIZE (8*1024) /* max static x509 buffer size; dilithium is big */ + #if defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) + #define MAX_X509_SIZE (8*1024) /* max static x509 buffer size; ML-DSA is big */ #elif defined(WOLFSSL_HAPROXY) #define MAX_X509_SIZE 3072 /* max static x509 buffer size */ #else @@ -2689,8 +2688,8 @@ struct WOLFSSL_CERT_MANAGER { #ifdef HAVE_FALCON short minFalconKeySz; /* minimum allowed Falcon key size */ #endif -#ifdef HAVE_DILITHIUM - short minDilithiumKeySz; /* minimum allowed Dilithium key size */ +#ifdef WOLFSSL_HAVE_MLDSA + short minMlDsaKeySz; /* minimum allowed ML-DSA key size */ #endif #ifdef WC_ASN_UNKNOWN_EXT_CB wc_UnknownExtCallback unknownExtCallback; @@ -3989,7 +3988,7 @@ struct WOLFSSL_CTX { byte haveDH:1; /* server DH params set by user */ byte haveECDSAsig:1; /* server cert signed w/ ECDSA */ byte haveFalconSig:1; /* server cert signed w/ Falcon */ - byte haveDilithiumSig:1;/* server cert signed w/ Dilithium */ + byte haveMlDsaSig:1; /* server cert signed w/ ML-DSA */ byte haveStaticECC:1; /* static server ECC private key */ byte partialWrite:1; /* only one msg per write call */ byte autoRetry:1; /* retry read/write on a WANT_{READ|WRITE} */ @@ -4082,8 +4081,8 @@ struct WOLFSSL_CTX { #ifdef HAVE_FALCON short minFalconKeySz; /* minimum Falcon key size */ #endif -#ifdef HAVE_DILITHIUM - short minDilithiumKeySz;/* minimum Dilithium key size */ +#ifdef WOLFSSL_HAVE_MLDSA + short minMlDsaKeySz; /* minimum ML-DSA key size */ #endif unsigned long mask; /* store SSL_OP_ flags */ #if defined(OPENSSL_EXTRA) || defined(HAVE_CURL) @@ -4450,11 +4449,11 @@ enum KeyExchangeAlgorithm { #define SIG_RSA 0x02 #define SIG_SM2 0x04 #define SIG_FALCON 0x08 -#define SIG_DILITHIUM 0x10 +#define SIG_MLDSA 0x10 #define SIG_ANON 0x20 /* SIG_ANON is omitted by default */ #define SIG_ALL (SIG_ECDSA | SIG_RSA | SIG_SM2 | SIG_FALCON | \ - SIG_DILITHIUM) + SIG_MLDSA) /* Supported Authentication Schemes */ enum SignatureAlgorithm { @@ -4468,9 +4467,9 @@ enum SignatureAlgorithm { ed448_sa_algo = 11, falcon_level1_sa_algo = 12, falcon_level5_sa_algo = 13, - dilithium_level2_sa_algo = 14, - dilithium_level3_sa_algo = 15, - dilithium_level5_sa_algo = 16, + mldsa_44_sa_algo = 14, + mldsa_65_sa_algo = 15, + mldsa_87_sa_algo = 16, sm2_sa_algo = 17, any_sa_algo = 18, ecc_brainpool_sa_algo = 19, @@ -4521,7 +4520,7 @@ enum ClientCertificateType { rsa_fixed_ecdh = 65, ecdsa_fixed_ecdh = 66, falcon_sign = 67, - dilithium_sign = 68, + mldsa_sign = 68, }; @@ -5138,7 +5137,7 @@ struct Options { word16 haveECDSAsig:1; /* server ECDSA signed cert */ word16 haveStaticECC:1; /* static server ECC private key */ word16 haveFalconSig:1; /* server Falcon signed cert */ - word16 haveDilithiumSig:1; /* server Dilithium signed cert */ + word16 haveMlDsaSig:1; /* server ML-DSA signed cert */ word16 havePeerCert:1; /* do we have peer's cert */ word16 havePeerVerify:1; /* and peer's cert verify */ word16 usingPSK_cipher:1; /* are using psk as cipher */ @@ -5329,8 +5328,8 @@ struct Options { #if defined(HAVE_FALCON) short minFalconKeySz; /* minimum Falcon key size */ #endif -#if defined(HAVE_DILITHIUM) - short minDilithiumKeySz;/* minimum Dilithium key size */ +#if defined(WOLFSSL_HAVE_MLDSA) + short minMlDsaKeySz; /* minimum ML-DSA key size */ #endif #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) byte verifyDepth; /* maximum verification depth */ @@ -5544,7 +5543,7 @@ struct WOLFSSL_X509 { int pubKeyOID; DNS_entry* altNamesNext; /* hint for retrieval */ #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) || \ - defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) + defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) word32 pkCurveOID; #endif #ifndef NO_CERTS @@ -6139,7 +6138,7 @@ struct WOLFSSL { word32 hsType; /* Type of Handshake key (hsKey) */ WOLFSSL_CIPHER cipher; #ifdef WOLFSSL_DUAL_ALG_CERTS - void* hsAltKey; /* Handshake key (dilithium, falcon) + void* hsAltKey; /* Handshake key (ML-DSA, falcon) * allocated from heap */ word32 hsAltType; /* Type of Handshake key (hsAltKey) */ #endif @@ -6261,9 +6260,9 @@ struct WOLFSSL { falcon_key* peerFalconKey; byte peerFalconKeyPresent; #endif -#ifdef HAVE_DILITHIUM - dilithium_key* peerDilithiumKey; - byte peerDilithiumKeyPresent; +#ifdef WOLFSSL_HAVE_MLDSA + wc_MlDsaKey* peerMlDsaKey; + byte peerMlDsaKeyPresent; #endif #ifdef HAVE_LIBZ z_stream c_stream; /* compression stream */ diff --git a/wolfssl/wolfcrypt/asn.h b/wolfssl/wolfcrypt/asn.h index dfcbf8ba6d..5db17afab1 100644 --- a/wolfssl/wolfcrypt/asn.h +++ b/wolfssl/wolfcrypt/asn.h @@ -79,8 +79,8 @@ that can be serialized and deserialized in a cross-platform way. #ifdef HAVE_FALCON #include #endif -#ifdef HAVE_DILITHIUM - #include +#ifdef WOLFSSL_HAVE_MLDSA + #include #endif #ifndef NO_SHA #include @@ -883,8 +883,8 @@ extern const WOLFSSL_ObjectInfo wolfssl_object_info[]; #endif #endif -#if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) - #define WC_MAX_CERT_VERIFY_SZ 6000 /* For Dilithium */ +#if defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) + #define WC_MAX_CERT_VERIFY_SZ 6000 /* For ML-DSA */ #elif defined(WOLFSSL_CERT_EXT) #define WC_MAX_CERT_VERIFY_SZ 2048 /* For larger extensions */ #elif !defined(NO_RSA) && defined(WC_MAX_RSA_BITS) @@ -1547,7 +1547,7 @@ struct SignatureCtx { #endif #endif #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) || \ - !defined(NO_DSA) || defined(HAVE_DILITHIUM) || defined(HAVE_FALCON) || \ + !defined(NO_DSA) || defined(WOLFSSL_HAVE_MLDSA) || defined(HAVE_FALCON) || \ defined(WOLFSSL_HAVE_SLHDSA) || defined(WOLFSSL_HAVE_LMS) || \ defined(WOLFSSL_HAVE_XMSS) int verify; @@ -1595,11 +1595,11 @@ struct SignatureCtx { struct falcon_key* falcon; #endif #endif - #ifdef HAVE_DILITHIUM + #ifdef WOLFSSL_HAVE_MLDSA #ifdef WOLFSSL_NO_MALLOC - dilithium_key dilithium[1]; + wc_MlDsaKey mldsa[1]; #else - dilithium_key* dilithium; + wc_MlDsaKey* mldsa; #endif #endif #ifdef WOLFSSL_HAVE_SLHDSA @@ -1884,14 +1884,14 @@ struct DecodedCert { #endif /* WOLFSSL_SUBJ_INFO_ACC */ #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) || \ - defined(HAVE_DILITHIUM) || defined(HAVE_FALCON) || \ + defined(WOLFSSL_HAVE_MLDSA) || defined(HAVE_FALCON) || \ defined(WOLFSSL_HAVE_SLHDSA) || defined(WOLFSSL_HAVE_LMS) || \ defined(WOLFSSL_HAVE_XMSS) word32 pkCurveOID; /* Public Key's curve OID */ #ifdef WOLFSSL_CUSTOM_CURVES int pkCurveSize; /* Public Key's curve size */ #endif -#endif /* HAVE_ECC || HAVE_ED25519 || HAVE_ED448 || HAVE_DILITHIUM || +#endif /* HAVE_ECC || HAVE_ED25519 || HAVE_ED448 || WOLFSSL_HAVE_MLDSA || * HAVE_FALCON || WOLFSSL_HAVE_SLHDSA || WOLFSSL_HAVE_LMS || * WOLFSSL_HAVE_XMSS */ const byte* beforeDate; @@ -2759,9 +2759,9 @@ enum cert_enums { DILITHIUM_LEVEL2_KEY = 18, DILITHIUM_LEVEL3_KEY = 19, DILITHIUM_LEVEL5_KEY = 20, - ML_DSA_LEVEL2_KEY = 21, - ML_DSA_LEVEL3_KEY = 22, - ML_DSA_LEVEL5_KEY = 23, + ML_DSA_44_KEY = 21, + ML_DSA_65_KEY = 22, + ML_DSA_87_KEY = 23, SLH_DSA_SHA2_128S_KEY = 24, SLH_DSA_SHA2_128F_KEY = 25, SLH_DSA_SHA2_192S_KEY = 26, @@ -2776,6 +2776,14 @@ enum cert_enums { SLH_DSA_SHAKE_256F_KEY = 35 }; +#ifndef WOLFSSL_NO_DILITHIUM_LEGACY_NAMES +/* Legacy LEVEL2/3/5 spellings for the pre-standardization names. Will + * be removed alongside the dilithium.h shim. */ +#define ML_DSA_LEVEL2_KEY ML_DSA_44_KEY +#define ML_DSA_LEVEL3_KEY ML_DSA_65_KEY +#define ML_DSA_LEVEL5_KEY ML_DSA_87_KEY +#endif + #endif /* WOLFSSL_CERT_GEN */ /* hashes type for asn */ @@ -3211,7 +3219,7 @@ WOLFSSL_TEST_VIS int wolfssl_local_MatchIpSubnet(const byte* ip, int ipSz, || (defined(HAVE_CURVE25519) && defined(HAVE_CURVE25519_KEY_IMPORT)) \ || (defined(HAVE_ED448) && defined(HAVE_ED448_KEY_IMPORT)) \ || (defined(HAVE_CURVE448) && defined(HAVE_CURVE448_KEY_IMPORT)) \ - || defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) || defined(WOLFSSL_HAVE_SLHDSA)) + || defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) || defined(WOLFSSL_HAVE_SLHDSA)) WOLFSSL_LOCAL int DecodeAsymKey_Assign(const byte* input, word32* inOutIdx, word32 inSz, const byte** seed, word32* seedLen, const byte** privKey, word32* privKeyLen, const byte** pubKey, word32* pubKeyLen, diff --git a/wolfssl/wolfcrypt/asn_public.h b/wolfssl/wolfcrypt/asn_public.h index 71f976e729..4fd5f7ba27 100644 --- a/wolfssl/wolfcrypt/asn_public.h +++ b/wolfssl/wolfcrypt/asn_public.h @@ -154,9 +154,9 @@ enum CertType { DILITHIUM_LEVEL2_TYPE, DILITHIUM_LEVEL3_TYPE, DILITHIUM_LEVEL5_TYPE, - ML_DSA_LEVEL2_TYPE, - ML_DSA_LEVEL3_TYPE, - ML_DSA_LEVEL5_TYPE, + ML_DSA_44_TYPE, + ML_DSA_65_TYPE, + ML_DSA_87_TYPE, SLH_DSA_SHA2_128S_TYPE, SLH_DSA_SHA2_128F_TYPE, SLH_DSA_SHA2_192S_TYPE, @@ -175,6 +175,14 @@ enum CertType { TRUSTED_CERT_TYPE }; +#ifndef WOLFSSL_NO_DILITHIUM_LEGACY_NAMES +/* Legacy LEVEL2/3/5 spellings for the pre-standardization names. Will + * be removed alongside the dilithium.h shim. */ +#define ML_DSA_LEVEL2_TYPE ML_DSA_44_TYPE +#define ML_DSA_LEVEL3_TYPE ML_DSA_65_TYPE +#define ML_DSA_LEVEL5_TYPE ML_DSA_87_TYPE +#endif + enum Ctc_Encoding { CTC_UTF8 = 0x0c, /* utf8 */ diff --git a/wolfssl/wolfcrypt/cryptocb.h b/wolfssl/wolfcrypt/cryptocb.h index 498f063b49..1d86bf1169 100644 --- a/wolfssl/wolfcrypt/cryptocb.h +++ b/wolfssl/wolfcrypt/cryptocb.h @@ -80,8 +80,8 @@ #ifdef WOLFSSL_HAVE_MLKEM #include #endif -#if defined(HAVE_DILITHIUM) - #include +#if defined(WOLFSSL_HAVE_MLDSA) + #include #endif #if defined(HAVE_FALCON) #include @@ -315,7 +315,7 @@ typedef struct wc_CryptoInfo { int type; /* enum wc_PqcKemType */ } pqc_decaps; #endif - #if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) || \ + #if defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) || \ defined(WOLFSSL_HAVE_SLHDSA) struct { WC_RNG* rng; @@ -780,7 +780,7 @@ WOLFSSL_LOCAL int wc_CryptoCb_PqcDecapsulate(const byte* ciphertext, int type, void* key); #endif /* WOLFSSL_HAVE_MLKEM */ -#if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) || \ +#if defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) || \ defined(WOLFSSL_HAVE_SLHDSA) WOLFSSL_LOCAL int wc_CryptoCb_PqcSigGetDevId(int type, void* key); @@ -797,7 +797,7 @@ WOLFSSL_LOCAL int wc_CryptoCb_PqcVerify(const byte* sig, word32 siglen, WOLFSSL_LOCAL int wc_CryptoCb_PqcSignatureCheckPrivKey(void* key, int type, const byte* pubKey, word32 pubKeySz); -#endif /* HAVE_FALCON || HAVE_DILITHIUM || WOLFSSL_HAVE_SLHDSA */ +#endif /* HAVE_FALCON || WOLFSSL_HAVE_MLDSA || WOLFSSL_HAVE_SLHDSA */ #ifndef NO_AES #ifdef HAVE_AESGCM diff --git a/wolfssl/wolfcrypt/dilithium.h b/wolfssl/wolfcrypt/dilithium.h index b16548eb23..123625e53f 100644 --- a/wolfssl/wolfcrypt/dilithium.h +++ b/wolfssl/wolfcrypt/dilithium.h @@ -57,6 +57,26 @@ * written against the pre-standardization API keeps compiling. Suppressed * by defining WOLFSSL_NO_DILITHIUM_LEGACY_NAMES. * + * WOLFSSL_NO_DILITHIUM_LEGACY_NAMES additionally suppresses several + * identifier families that share its opt-out gate but are not + * defined inside this header: + * + * - `ML_DSA_LEVEL{2,3,5}_TYPE` / `_KEY` / `k`, `CTC_ML_DSA_LEVEL{2,3,5}` + * aliases in , + * , . + * These were spelled in ML-DSA form on master but used the + * pre-standardization NIST-security-category numbering (2/3/5) + * rather than the FIPS 204 parameter-set numbers (44/65/87). + * + * - The `DILITHIUM_KEY_SIZE_E` error-code alias in + * . + * + * - The three per-parameter-set size-constant alias families + * (`ML_DSA_LEVEL{2,3,5}_*_SIZE`, + * `DILITHIUM_LEVEL{2,3,5}_*_SIZE`, + * `DILITHIUM_ML_DSA_{44,65,87}_*_SIZE`) defined immediately + * below in this header. + * * New code must include directly and use * the wc_MlDsaKey / wc_MlDsaKey_* / WOLFSSL_MLDSA_* names. */ @@ -71,7 +91,10 @@ * so that header sees the canonical * spelling without going through dilithium.h. The block below covers * the remaining sub-gates, all of which are read only by wc_mldsa.h / - * wc_mldsa.c (which transitively include this file first). */ + * wc_mldsa.c. wc_mldsa.h pulls this file in at its own top (see the + * #include block in ) so the forward arm + * fires before wc_mldsa.h reads any canonical gate -- including when + * wc_mldsa.h is reached transitively via / . */ #ifndef WOLFSSL_NO_DILITHIUM_LEGACY_GATES @@ -267,6 +290,46 @@ #endif /* !WOLFSSL_NO_DILITHIUM_LEGACY_GATES */ +/* === Derived canonical gates ========================================== */ + +/* Derive secondary canonical gates from the primary NO_* gates. Lives in + * this file (rather than in wc_mldsa.h alongside the struct definition) + * so the reverse arm at the bottom of this file sees the derived set + * fully populated without needing wc_mldsa.h to finish parsing first. + * wc_mldsa.h includes this file at its top, so by the time control + * returns from that include the gates are already set and wc_mldsa.h's + * struct definition / conditional declarations read them directly. */ +#if defined(WOLFSSL_HAVE_MLDSA) +#if defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ + defined(WOLFSSL_MLDSA_NO_SIGN) && \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) && \ + !defined(WOLFSSL_MLDSA_VERIFY_ONLY) + #define WOLFSSL_MLDSA_VERIFY_ONLY +#endif +#ifdef WOLFSSL_MLDSA_VERIFY_ONLY + #ifndef WOLFSSL_MLDSA_NO_MAKE_KEY + #define WOLFSSL_MLDSA_NO_MAKE_KEY + #endif + #ifndef WOLFSSL_MLDSA_NO_SIGN + #define WOLFSSL_MLDSA_NO_SIGN + #endif +#endif +#if !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) || \ + !defined(WOLFSSL_MLDSA_NO_VERIFY) + #define WOLFSSL_MLDSA_PUBLIC_KEY +#endif +#if !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) || \ + !defined(WOLFSSL_MLDSA_NO_SIGN) + #define WOLFSSL_MLDSA_PRIVATE_KEY +#endif +#if defined(WOLFSSL_MLDSA_PUBLIC_KEY) && \ + defined(WOLFSSL_MLDSA_PRIVATE_KEY) && \ + !defined(WOLFSSL_MLDSA_NO_CHECK_KEY) && \ + !defined(WOLFSSL_MLDSA_CHECK_KEY) + #define WOLFSSL_MLDSA_CHECK_KEY +#endif +#endif /* WOLFSSL_HAVE_MLDSA */ + /* === wc_mldsa.h is now reachable with canonical gates correctly set === */ #include @@ -397,27 +460,53 @@ * dlsym() or callback tables that key off the legacy spelling will see the * canonical name in the resulting pointer. */ #define wc_dilithium_init_ex wc_MlDsaKey_Init -#define wc_dilithium_init_id wc_MlDsaKey_InitId -#define wc_dilithium_init_label wc_MlDsaKey_InitLabel -#define wc_dilithium_new wc_MlDsaKey_New -#define wc_dilithium_delete wc_MlDsaKey_Delete +#ifdef WOLF_PRIVATE_KEY_ID + #define wc_dilithium_init_id wc_MlDsaKey_InitId + #define wc_dilithium_init_label wc_MlDsaKey_InitLabel +#endif +#ifndef WC_NO_CONSTRUCTORS + #define wc_dilithium_new wc_MlDsaKey_New + #define wc_dilithium_delete wc_MlDsaKey_Delete +#endif #define wc_dilithium_free wc_MlDsaKey_Free #define wc_dilithium_set_level wc_MlDsaKey_SetParams #define wc_dilithium_get_level wc_MlDsaKey_GetParams -#define wc_dilithium_make_key wc_MlDsaKey_MakeKey -#define wc_dilithium_make_key_from_seed wc_MlDsaKey_MakeKeyFromSeed -#define wc_dilithium_size wc_MlDsaKey_Size -#define wc_dilithium_priv_size wc_MlDsaKey_PrivSize -#define wc_dilithium_pub_size wc_MlDsaKey_PubSize -#define wc_dilithium_sig_size wc_MlDsaKey_SigSize -#define wc_dilithium_check_key wc_MlDsaKey_CheckKey -#define wc_dilithium_export_public wc_MlDsaKey_ExportPubRaw -#define wc_dilithium_export_private wc_MlDsaKey_ExportPrivRaw -#define wc_dilithium_export_private_only wc_MlDsaKey_ExportPrivRaw -#define wc_dilithium_export_key wc_MlDsaKey_ExportKey -#define wc_Dilithium_PublicKeyToDer wc_MlDsaKey_PublicKeyToDer -#define wc_Dilithium_PrivateKeyToDer wc_MlDsaKey_PrivateKeyToDer -#define wc_Dilithium_KeyToDer wc_MlDsaKey_KeyToDer +#ifndef WOLFSSL_MLDSA_VERIFY_ONLY + #define wc_dilithium_make_key wc_MlDsaKey_MakeKey + #define wc_dilithium_make_key_from_seed wc_MlDsaKey_MakeKeyFromSeed +#endif +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY + #define wc_dilithium_size wc_MlDsaKey_Size +#endif +#if defined(WOLFSSL_MLDSA_PRIVATE_KEY) && defined(WOLFSSL_MLDSA_PUBLIC_KEY) + #define wc_dilithium_priv_size wc_MlDsaKey_PrivSize +#endif +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + #define wc_dilithium_pub_size wc_MlDsaKey_PubSize +#endif +#if !defined(WOLFSSL_MLDSA_NO_SIGN) || !defined(WOLFSSL_MLDSA_NO_VERIFY) + #define wc_dilithium_sig_size wc_MlDsaKey_SigSize +#endif +#ifdef WOLFSSL_MLDSA_CHECK_KEY + #define wc_dilithium_check_key wc_MlDsaKey_CheckKey +#endif +#ifdef WOLFSSL_MLDSA_PUBLIC_KEY + #define wc_dilithium_export_public wc_MlDsaKey_ExportPubRaw +#endif +#ifdef WOLFSSL_MLDSA_PRIVATE_KEY + #define wc_dilithium_export_private wc_MlDsaKey_ExportPrivRaw + #define wc_dilithium_export_private_only wc_MlDsaKey_ExportPrivRaw + #define wc_dilithium_export_key wc_MlDsaKey_ExportKey +#endif +#ifndef WOLFSSL_MLDSA_NO_ASN1 + #ifdef WC_ENABLE_ASYM_KEY_EXPORT + #define wc_Dilithium_PublicKeyToDer wc_MlDsaKey_PublicKeyToDer + #endif + #ifdef WOLFSSL_MLDSA_PRIVATE_KEY + #define wc_Dilithium_PrivateKeyToDer wc_MlDsaKey_PrivateKeyToDer + #define wc_Dilithium_KeyToDer wc_MlDsaKey_KeyToDer + #endif +#endif /* !WOLFSSL_MLDSA_NO_ASN1 */ /* Legacy default-args / arg-reorder wrappers. The legacy form takes the key * pointer last (or near last); the FIPS 204 / ML-KEM convention used by the diff --git a/wolfssl/wolfcrypt/oid_sum.h b/wolfssl/wolfcrypt/oid_sum.h index e2568c1641..d56405c824 100644 --- a/wolfssl/wolfcrypt/oid_sum.h +++ b/wolfssl/wolfcrypt/oid_sum.h @@ -191,11 +191,11 @@ enum Key_Sum { /* 0x2b,0x06,0x01,0x04,0x01,0x02,0x82,0x0b,0x0c,0x08,0x07 */ DILITHIUM_LEVEL5k = 225, /* 1.3.6.1.4.1.2.267.12.8.7 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x11 */ - ML_DSA_LEVEL2k = 431, /* 2.16.840.1.101.3.4.3.17 */ + ML_DSA_44k = 431, /* 2.16.840.1.101.3.4.3.17 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x12 */ - ML_DSA_LEVEL3k = 432, /* 2.16.840.1.101.3.4.3.18 */ + ML_DSA_65k = 432, /* 2.16.840.1.101.3.4.3.18 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x13 */ - ML_DSA_LEVEL5k = 433, /* 2.16.840.1.101.3.4.3.19 */ + ML_DSA_87k = 433, /* 2.16.840.1.101.3.4.3.19 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x14 */ SLH_DSA_SHA2_128Sk = 434, /* 2.16.840.1.101.3.4.3.20 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x15 */ @@ -262,11 +262,11 @@ enum Key_Sum { /* 0x2b,0x06,0x01,0x04,0x01,0x02,0x82,0x0b,0x0c,0x08,0x07 */ DILITHIUM_LEVEL5k = 0x707b0cd9, /* 1.3.6.1.4.1.2.267.12.8.7 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x11 */ - ML_DSA_LEVEL2k = 0x7db37aeb, /* 2.16.840.1.101.3.4.3.17 */ + ML_DSA_44k = 0x7db37aeb, /* 2.16.840.1.101.3.4.3.17 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x12 */ - ML_DSA_LEVEL3k = 0x7db37ae8, /* 2.16.840.1.101.3.4.3.18 */ + ML_DSA_65k = 0x7db37ae8, /* 2.16.840.1.101.3.4.3.18 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x13 */ - ML_DSA_LEVEL5k = 0x7db37ae9, /* 2.16.840.1.101.3.4.3.19 */ + ML_DSA_87k = 0x7db37ae9, /* 2.16.840.1.101.3.4.3.19 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x14 */ SLH_DSA_SHA2_128Sk = 0x7db37aee, /* 2.16.840.1.101.3.4.3.20 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x15 */ @@ -300,6 +300,14 @@ enum Key_Sum { #endif }; +#ifndef WOLFSSL_NO_DILITHIUM_LEGACY_NAMES +/* Legacy LEVEL2/3/5 spellings for the pre-standardization names. Will + * be removed alongside the dilithium.h shim. */ +#define ML_DSA_LEVEL2k ML_DSA_44k +#define ML_DSA_LEVEL3k ML_DSA_65k +#define ML_DSA_LEVEL5k ML_DSA_87k +#endif + enum KeyWrap_Sum { #ifdef WOLFSSL_OLD_OID_SUM /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x01,0x05 */ @@ -1611,11 +1619,11 @@ enum Ctc_SigType { /* 0x2b,0x06,0x01,0x04,0x01,0x02,0x82,0x0b,0x0c,0x08,0x07 */ CTC_DILITHIUM_LEVEL5 = 225, /* 1.3.6.1.4.1.2.267.12.8.7 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x11 */ - CTC_ML_DSA_LEVEL2 = 431, /* 2.16.840.1.101.3.4.3.17 */ + CTC_ML_DSA_44 = 431, /* 2.16.840.1.101.3.4.3.17 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x12 */ - CTC_ML_DSA_LEVEL3 = 432, /* 2.16.840.1.101.3.4.3.18 */ + CTC_ML_DSA_65 = 432, /* 2.16.840.1.101.3.4.3.18 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x13 */ - CTC_ML_DSA_LEVEL5 = 433, /* 2.16.840.1.101.3.4.3.19 */ + CTC_ML_DSA_87 = 433, /* 2.16.840.1.101.3.4.3.19 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x14 */ CTC_SLH_DSA_SHA2_128S = 434, /* 2.16.840.1.101.3.4.3.20 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x15 */ @@ -1710,11 +1718,11 @@ enum Ctc_SigType { /* 0x2b,0x06,0x01,0x04,0x01,0x02,0x82,0x0b,0x0c,0x08,0x07 */ CTC_DILITHIUM_LEVEL5 = 0x707b0cd9, /* 1.3.6.1.4.1.2.267.12.8.7 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x11 */ - CTC_ML_DSA_LEVEL2 = 0x7db37aeb, /* 2.16.840.1.101.3.4.3.17 */ + CTC_ML_DSA_44 = 0x7db37aeb, /* 2.16.840.1.101.3.4.3.17 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x12 */ - CTC_ML_DSA_LEVEL3 = 0x7db37ae8, /* 2.16.840.1.101.3.4.3.18 */ + CTC_ML_DSA_65 = 0x7db37ae8, /* 2.16.840.1.101.3.4.3.18 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x13 */ - CTC_ML_DSA_LEVEL5 = 0x7db37ae9, /* 2.16.840.1.101.3.4.3.19 */ + CTC_ML_DSA_87 = 0x7db37ae9, /* 2.16.840.1.101.3.4.3.19 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x14 */ CTC_SLH_DSA_SHA2_128S = 0x7db37aee, /* 2.16.840.1.101.3.4.3.20 */ /* 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x15 */ @@ -1748,6 +1756,14 @@ enum Ctc_SigType { #endif }; +#ifndef WOLFSSL_NO_DILITHIUM_LEGACY_NAMES +/* Legacy LEVEL2/3/5 spellings for the pre-standardization names. Will + * be removed alongside the dilithium.h shim. */ +#define CTC_ML_DSA_LEVEL2 CTC_ML_DSA_44 +#define CTC_ML_DSA_LEVEL3 CTC_ML_DSA_65 +#define CTC_ML_DSA_LEVEL5 CTC_ML_DSA_87 +#endif + enum PKCS7_TYPES { #ifdef WOLFSSL_OLD_OID_SUM /* 0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x07 */ diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index 3bc08fb90f..c3ced88da7 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -396,8 +396,9 @@ * gencertbuf.pl with zero #include directives, so a TU can pull it in * (transitively, via etc.) without ever including * dilithium.h. The remaining ML-DSA sub-gates are read only from - * wc_mldsa.h / wc_mldsa.c, both of which transitively pull in - * dilithium.h first; their forward translations live there. + * wc_mldsa.h / wc_mldsa.c; wc_mldsa.c includes dilithium.h before + * asn.h so the canonical names are set before wc_mldsa.h is first + * parsed via either route. Their forward translations live there. * Suppressible by defining WOLFSSL_NO_DILITHIUM_LEGACY_GATES. */ #ifndef WOLFSSL_NO_DILITHIUM_LEGACY_GATES #ifdef WOLFSSL_DILITHIUM_NO_SIGN diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h index 388d0a569a..eb11f8436e 100644 --- a/wolfssl/wolfcrypt/types.h +++ b/wolfssl/wolfcrypt/types.h @@ -1564,7 +1564,7 @@ enum wc_PkType { #undef _WC_PK_TYPE_MAX #define _WC_PK_TYPE_MAX WC_PK_TYPE_PQC_KEM_DECAPS #endif -#if defined(HAVE_DILITHIUM) || defined(HAVE_FALCON) || \ +#if defined(WOLFSSL_HAVE_MLDSA) || defined(HAVE_FALCON) || \ defined(WOLFSSL_HAVE_SLHDSA) WC_PK_TYPE_PQC_SIG_KEYGEN = 21, WC_PK_TYPE_PQC_SIG_SIGN = 22, @@ -1606,13 +1606,13 @@ enum wc_PkType { #define WC_PQC_KEM_TYPE_KYBER WC_PQC_KEM_TYPE_MLKEM #endif -#if defined(HAVE_DILITHIUM) || defined(HAVE_FALCON) || \ +#if defined(WOLFSSL_HAVE_MLDSA) || defined(HAVE_FALCON) || \ defined(WOLFSSL_HAVE_SLHDSA) /* Post quantum signature algorithms */ enum wc_PqcSignatureType { WC_PQC_SIG_TYPE_NONE = 0, #define _WC_PQC_SIG_TYPE_MAX WC_PQC_SIG_TYPE_NONE - #if defined(HAVE_DILITHIUM) + #if defined(WOLFSSL_HAVE_MLDSA) WC_PQC_SIG_TYPE_MLDSA = 1, #undef _WC_PQC_SIG_TYPE_MAX #define _WC_PQC_SIG_TYPE_MAX WC_PQC_SIG_TYPE_MLDSA @@ -1630,7 +1630,7 @@ enum wc_PkType { WC_PQC_SIG_TYPE_MAX = _WC_PQC_SIG_TYPE_MAX }; - #if defined(HAVE_DILITHIUM) + #if defined(WOLFSSL_HAVE_MLDSA) /* Pre-standardization name retained for backwards compatibility. */ #define WC_PQC_SIG_TYPE_DILITHIUM WC_PQC_SIG_TYPE_MLDSA #endif @@ -2379,7 +2379,7 @@ enum Max_ASN { /* Largest raw SLH-DSA signature (SHAKE-256f) is 49856 bytes; round up * to leave headroom for ASN.1 wrapping (BIT STRING tag + length). */ MAX_ENCODED_SIG_SZ = 51200, -#elif defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) +#elif defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) MAX_ENCODED_SIG_SZ = 5120, #elif !defined(NO_RSA) #if defined(USE_FAST_MATH) && defined(FP_MAX_BITS) @@ -2418,8 +2418,8 @@ enum Max_ASN { MAX_DSA_PRIVKEY_SZ = (DSA_INTS * MAX_DSA_INT_SZ) + MAX_SEQ_SZ + MAX_VERSION_SZ, /* Maximum size of a DSA Private key taken from DsaKeyIntsToDer. */ -#if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) - MAX_PQC_PUBLIC_KEY_SZ = 2592, /* Maximum size of a Dilithium public key. */ +#if defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) + MAX_PQC_PUBLIC_KEY_SZ = 2592, /* Maximum size of an ML-DSA public key. */ #endif MAX_RSA_E_SZ = 16, /* Max RSA public e size */ MAX_CA_SZ = 32, /* Max encoded CA basic constraint length */ @@ -2430,13 +2430,13 @@ enum Max_ASN { /* Maximum DER digest ASN header size */ /* Max X509 header length indicates the * max length + 2 ('\n', '\0') */ -#if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) || defined(WOLFSSL_HAVE_SLHDSA) +#if defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) || defined(WOLFSSL_HAVE_SLHDSA) MAX_X509_HEADER_SZ = (48 + 2), /* Maximum PEM Header/Footer Size */ #else MAX_X509_HEADER_SZ = (37 + 2), /* Maximum PEM Header/Footer Size */ #endif -#if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM) +#if defined(HAVE_FALCON) || defined(WOLFSSL_HAVE_MLDSA) MAX_PUBLIC_KEY_SZ = MAX_PQC_PUBLIC_KEY_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ * 2, #else MAX_PUBLIC_KEY_SZ = MAX_DSA_PUBKEY_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ * 2, diff --git a/wolfssl/wolfcrypt/wc_mldsa.h b/wolfssl/wolfcrypt/wc_mldsa.h index 2212d745a6..56c612ee0c 100644 --- a/wolfssl/wolfcrypt/wc_mldsa.h +++ b/wolfssl/wolfcrypt/wc_mldsa.h @@ -54,38 +54,28 @@ #include #endif -#if defined(WOLFSSL_HAVE_MLDSA) - -#if defined(WOLFSSL_MLDSA_NO_MAKE_KEY) && \ - defined(WOLFSSL_MLDSA_NO_SIGN) && \ - !defined(WOLFSSL_MLDSA_NO_VERIFY) && \ - !defined(WOLFSSL_MLDSA_VERIFY_ONLY) - #define WOLFSSL_MLDSA_VERIFY_ONLY -#endif -#ifdef WOLFSSL_MLDSA_VERIFY_ONLY - #ifndef WOLFSSL_MLDSA_NO_MAKE_KEY - #define WOLFSSL_MLDSA_NO_MAKE_KEY - #endif - #ifndef WOLFSSL_MLDSA_NO_SIGN - #define WOLFSSL_MLDSA_NO_SIGN - #endif -#endif - -#if !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) || \ - !defined(WOLFSSL_MLDSA_NO_VERIFY) - #define WOLFSSL_MLDSA_PUBLIC_KEY -#endif -#if !defined(WOLFSSL_MLDSA_NO_MAKE_KEY) || \ - !defined(WOLFSSL_MLDSA_NO_SIGN) - #define WOLFSSL_MLDSA_PRIVATE_KEY -#endif +/* TEMPORARY: pull in the legacy compatibility shim so its forward-arm + * sub-config gate translation (legacy WOLFSSL_DILITHIUM_* / + * WC_DILITHIUM_* -> canonical WOLFSSL_MLDSA_* / WC_MLDSA_*) and the + * derivation of secondary canonical gates (WOLFSSL_MLDSA_VERIFY_ONLY, + * _PUBLIC_KEY, _PRIVATE_KEY, _CHECK_KEY) run before this header's + * struct definition and conditional declarations are parsed. Required + * because this header is reachable via / + * without going through dilithium.h, and any gate that affects + * wc_MlDsaKey struct layout (e.g. WOLFSSL_MLDSA_DYNAMIC_KEYS) must be + * normalized to its canonical spelling in every TU before the struct + * is parsed -- otherwise TUs disagree about sizeof / field offsets. + * + * The recursive #include of this file from dilithium.h is a no-op + * (header guard above is already set); dilithium.h's reverse arm and + * legacy aliases see the derived gates because the derivation in + * dilithium.h runs before that recursive include returns. + * + * To be removed alongside when the + * legacy compatibility shim is dropped. */ +#include -#if defined(WOLFSSL_MLDSA_PUBLIC_KEY) && \ - defined(WOLFSSL_MLDSA_PRIVATE_KEY) && \ - !defined(WOLFSSL_MLDSA_NO_CHECK_KEY) && \ - !defined(WOLFSSL_MLDSA_CHECK_KEY) - #define WOLFSSL_MLDSA_CHECK_KEY -#endif +#if defined(WOLFSSL_HAVE_MLDSA) #include #ifndef WOLFSSL_MLDSA_VERIFY_ONLY