From 82b50f19c6163b64d662a2a2073a70bdf83d26c2 Mon Sep 17 00:00:00 2001 From: Sean Parkinson Date: Tue, 18 Feb 2025 18:51:14 +1000 Subject: [PATCH] ML-KEM/Kyber: improvements ML-KEM/Kyber: MakeKey call generate random once only for all data. Allow MakeKey/Encapsulate/Decapsulate to be compiled separately. Pull out public key decoding common to public and private key decode. Put references to FIPS 140-3 into code. Rename variables to match FIPS 140-3. Fix InvNTT assembly code for x64 - more reductions. Split out ML-KEM/Kyber tests from api.c. TLSX: Store the object instead of the private key when WOLFSSL_MLKEM_CACHE_A is defined or WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ. Faster decapsulation when A is cached and object stored. To store private key as normal define WOLFSSL_TLSX_PQC_MLKEM_STORE_PRIV_KEY. misc.c: when Intel x64 build, assume able to read/write unaligned --- .github/workflows/pq-all.yml | 2 +- .wolfssl_known_macro_extras | 3 + CMakeLists.txt | 1 + configure.ac | 31 +- src/tls.c | 108 +- tests/api.c | 3887 +------------------------------ tests/api/include.am | 2 + tests/api/test_mlkem.c | 3882 ++++++++++++++++++++++++++++++ tests/api/test_mlkem.h | 29 + tests/suites.c | 9 +- tests/unit.c | 9 +- tests/unit.h | 1 + wolfcrypt/benchmark/benchmark.c | 25 +- wolfcrypt/src/misc.c | 32 + wolfcrypt/src/wc_kyber.c | 659 ++++-- wolfcrypt/src/wc_kyber_asm.S | 480 ++-- wolfcrypt/src/wc_kyber_poly.c | 1420 +++++++---- wolfcrypt/test/test.c | 273 ++- wolfssl/wolfcrypt/kyber.h | 151 +- wolfssl/wolfcrypt/wc_kyber.h | 12 - 20 files changed, 6323 insertions(+), 4693 deletions(-) create mode 100644 tests/api/test_mlkem.c create mode 100644 tests/api/test_mlkem.h diff --git a/.github/workflows/pq-all.yml b/.github/workflows/pq-all.yml index 5c66e36b0..efdc64cf0 100644 --- a/.github/workflows/pq-all.yml +++ b/.github/workflows/pq-all.yml @@ -18,7 +18,7 @@ jobs: matrix: config: [ # Add new configs here - '--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-kyber=all,original --enable-lms --enable-xmss --enable-dilithium --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST"' + '--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-kyber=yes,original --enable-lms --enable-xmss --enable-dilithium --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST"' ] name: make check if: github.repository_owner == 'wolfssl' diff --git a/.wolfssl_known_macro_extras b/.wolfssl_known_macro_extras index cf9b3109a..0acdde010 100644 --- a/.wolfssl_known_macro_extras +++ b/.wolfssl_known_macro_extras @@ -665,6 +665,7 @@ WOLFSSL_KEIL WOLFSSL_KEIL_NET WOLFSSL_KYBER_INVNTT_UNROLL WOLFSSL_KYBER_NO_LARGE_CODE +WOLFSSL_KYBER_NO_MALLOC WOLFSSL_KYBER_NTT_UNROLL WOLFSSL_LIB WOLFSSL_LMS_CACHE_BITS @@ -800,6 +801,8 @@ WOLFSSL_TLS13_IGNORE_AEAD_LIMITS WOLFSSL_TLS13_MIDDLEBOX_COMPAT WOLFSSL_TLS13_SHA512 WOLFSSL_TLS13_TICKET_BEFORE_FINISHED +WOLFSSL_TLSX_PQC_MLKEM_STORE_PRIV_KEY +WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ WOLFSSL_TRACK_MEMORY_FULL WOLFSSL_TRAP_MALLOC_SZ WOLFSSL_UNALIGNED_64BIT_ACCESS diff --git a/CMakeLists.txt b/CMakeLists.txt index 7427c4b17..01ea0884f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2510,6 +2510,7 @@ if(WOLFSSL_EXAMPLES) tests/api/test_ripemd.c tests/api/test_hash.c tests/api/test_ascon.c + tests/api/test_mlkem.c tests/api/test_ocsp.c tests/hash.c tests/srp.c diff --git a/configure.ac b/configure.ac index 4f5ea6101..41982be3a 100644 --- a/configure.ac +++ b/configure.ac @@ -1405,13 +1405,19 @@ AC_ARG_ENABLE([kyber], ENABLED_WC_KYBER=no ENABLED_ML_KEM=unset +ENABLED_KYBER_MAKE_KEY=no +ENABLED_KYBER_ENCAPSULATE=no +ENABLED_KYBER_DECAPSULATE=no for v in `echo $ENABLED_KYBER | tr "," " "` do case $v in - yes | all) + yes) ENABLED_KYBER512=yes ENABLED_KYBER768=yes ENABLED_KYBER1024=yes + ENABLED_KYBER_MAKE_KEY=yes + ENABLED_KYBER_ENCAPSULATE=yes + ENABLED_KYBER_DECAPSULATE=yes ;; no) ;; @@ -1430,6 +1436,20 @@ do 1024) ENABLED_KYBER1024=yes ;; + make) + ENABLED_KYBER_MAKE_KEY=yes + ;; + encapsulate|enc) + ENABLED_KYBER_ENCAPSULATE=yes + ;; + decapsulate|dec) + ENABLED_KYBER_DECAPSULATE=yes + ;; + all) + ENABLED_KYBER_MAKE_KEY=yes + ENABLED_KYBER_ENCAPSULATE=yes + ENABLED_KYBER_DECAPSULATE=yes + ;; original) ENABLED_ORIGINAL=yes ;; @@ -1483,6 +1503,15 @@ then else AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_NO_ML_KEM" fi + if test "$ENABLED_KYBER_MAKE_KEY" = "no"; then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_KYBER_NO_MAKE_KEY" + fi + if test "$ENABLED_KYBER_ENCAPSULATE" = "no"; then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_KYBER_NO_ENCAPSULATE" + fi + if test "$ENABLED_KYBER_DECAPSULATE" = "no"; then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_KYBER_NO_DECAPSULATE" + fi if test "$ENABLED_WC_KYBER" = "yes" then diff --git a/src/tls.c b/src/tls.c index ba5cbe258..b38d49f53 100644 --- a/src/tls.c +++ b/src/tls.c @@ -8192,6 +8192,19 @@ static void findEccPqc(int *ecc, int *pqc, int group) } } +#if defined(WOLFSSL_MLKEM_CACHE_A) && \ + !defined(WOLFSSL_TLSX_PQC_MLKEM_STORE_PRIV_KEY) + /* Store KyberKey object rather than private key bytes in key share entry. + * Improves performance at cost of more dynamic memory being used. */ + #define WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ +#endif +#if defined(WOLFSSL_TLSX_PQC_MLKEM_STORE_PRIV_KEY) && \ + defined(WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ) + #error "Choose WOLFSSL_TLSX_PQC_MLKEM_STORE_PRIV_KEY or " + "WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ" +#endif + +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY /* Create a key share entry using liboqs parameters group. * Generates a key pair. * @@ -8203,13 +8216,17 @@ static int TLSX_KeyShare_GenPqcKey(WOLFSSL *ssl, KeyShareEntry* kse) { int ret = 0; int type = 0; +#ifndef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ KyberKey kem[1]; - byte* pubKey = NULL; byte* privKey = NULL; + word32 privSz = 0; +#else + KyberKey* kem; +#endif + byte* pubKey = NULL; KeyShareEntry *ecc_kse = NULL; int oqs_group = 0; int ecc_group = 0; - word32 privSz = 0; word32 pubSz = 0; /* This gets called twice. Once during parsing of the key share and once @@ -8226,6 +8243,7 @@ static int TLSX_KeyShare_GenPqcKey(WOLFSSL *ssl, KeyShareEntry* kse) ret = BAD_FUNC_ARG; } +#ifndef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ if (ret == 0) { ret = wc_KyberKey_Init(type, kem, ssl->heap, ssl->devId); if (ret != 0) { @@ -8233,6 +8251,40 @@ static int TLSX_KeyShare_GenPqcKey(WOLFSSL *ssl, KeyShareEntry* kse) } } + if (ret == 0) { + ret = wc_KyberKey_PrivateKeySize(kem, &privSz); + } + if (ret == 0) { + ret = wc_KyberKey_PublicKeySize(kem, &pubSz); + } + + if (ret == 0) { + privKey = (byte*)XMALLOC(privSz, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); + if (privKey == NULL) { + WOLFSSL_MSG("privkey memory allocation failure"); + ret = MEMORY_ERROR; + } + } +#else + if (ret == 0) { + kem = (KyberKey*)XMALLOC(sizeof(KyberKey), ssl->heap, + DYNAMIC_TYPE_PRIVATE_KEY); + if (kem == NULL) { + WOLFSSL_MSG("KEM memory allocation failure"); + ret = MEMORY_ERROR; + } + } + if (ret == 0) { + ret = wc_KyberKey_Init(type, kem, ssl->heap, ssl->devId); + if (ret != 0) { + WOLFSSL_MSG("Failed to initialize Kyber Key."); + } + } + if (ret == 0) { + ret = wc_KyberKey_PublicKeySize(kem, &pubSz); + } +#endif + if (ret == 0) { ecc_kse = (KeyShareEntry*)XMALLOC(sizeof(*ecc_kse), ssl->heap, DYNAMIC_TYPE_TLSX); @@ -8244,11 +8296,6 @@ static int TLSX_KeyShare_GenPqcKey(WOLFSSL *ssl, KeyShareEntry* kse) if (ret == 0) { XMEMSET(ecc_kse, 0, sizeof(*ecc_kse)); - - ret = wc_KyberKey_PrivateKeySize(kem, &privSz); - } - if (ret == 0) { - ret = wc_KyberKey_PublicKeySize(kem, &pubSz); } if (ret == 0 && ecc_group != 0) { @@ -8266,14 +8313,6 @@ static int TLSX_KeyShare_GenPqcKey(WOLFSSL *ssl, KeyShareEntry* kse) } } - if (ret == 0) { - privKey = (byte*)XMALLOC(privSz, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); - if (privKey == NULL) { - WOLFSSL_MSG("privkey memory allocation failure"); - ret = MEMORY_ERROR; - } - } - if (ret == 0) { ret = wc_KyberKey_MakeKey(kem, ssl->rng); if (ret != 0) { @@ -8284,9 +8323,11 @@ static int TLSX_KeyShare_GenPqcKey(WOLFSSL *ssl, KeyShareEntry* kse) ret = wc_KyberKey_EncodePublicKey(kem, pubKey + ecc_kse->pubKeyLen, pubSz); } +#ifndef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ if (ret == 0) { ret = wc_KyberKey_EncodePrivateKey(kem, privKey, privSz); } +#endif if (ret == 0) { if (ecc_kse->pubKeyLen > 0) XMEMCPY(pubKey, ecc_kse->pubKey, ecc_kse->pubKeyLen); @@ -8298,9 +8339,15 @@ static int TLSX_KeyShare_GenPqcKey(WOLFSSL *ssl, KeyShareEntry* kse) * separately. That's because the ECC private key is not simply a * buffer. Its is an ecc_key struct. Typically do not need the private * key size, but will need to zero it out upon freeing. */ +#ifndef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ kse->privKey = privKey; privKey = NULL; kse->privKeyLen = privSz; +#else + kse->privKey = (byte*)kem; + kem = NULL; + kse->privKeyLen = sizeof(KyberKey); +#endif kse->key = ecc_kse->key; ecc_kse->key = NULL; @@ -8314,10 +8361,15 @@ static int TLSX_KeyShare_GenPqcKey(WOLFSSL *ssl, KeyShareEntry* kse) wc_KyberKey_Free(kem); TLSX_KeyShare_FreeAll(ecc_kse, ssl->heap); XFREE(pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); +#ifndef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ XFREE(privKey, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); +#else + XFREE(kem, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); +#endif return ret; } +#endif #endif /* WOLFSSL_HAVE_KYBER */ /* Generate a secret/key using the key share entry. @@ -8335,7 +8387,7 @@ int TLSX_KeyShare_GenKey(WOLFSSL *ssl, KeyShareEntry *kse) ret = TLSX_KeyShare_GenX25519Key(ssl, kse); else if (kse->group == WOLFSSL_ECC_X448) ret = TLSX_KeyShare_GenX448Key(ssl, kse); -#ifdef WOLFSSL_HAVE_KYBER +#if defined(WOLFSSL_HAVE_KYBER) && !defined(WOLFSSL_KYBER_NO_MAKE_KEY) else if (WOLFSSL_NAMED_GROUP_IS_PQC(kse->group)) ret = TLSX_KeyShare_GenPqcKey(ssl, kse); #endif @@ -8382,6 +8434,9 @@ static void TLSX_KeyShare_FreeAll(KeyShareEntry* list, void* heap) current->pubKey = NULL; if (current->privKey != NULL) { ForceZero(current->privKey, current->privKeyLen); + #ifdef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ + wc_KyberKey_Free((KyberKey*)current->privKey); + #endif XFREE(current->privKey, heap, DYNAMIC_TYPE_PRIVATE_KEY); current->privKey = NULL; } @@ -8920,7 +8975,7 @@ static int TLSX_KeyShare_ProcessEcc(WOLFSSL* ssl, KeyShareEntry* keyShareEntry) return ret; } -#ifdef WOLFSSL_HAVE_KYBER +#if defined(WOLFSSL_HAVE_KYBER) && !defined(WOLFSSL_KYBER_NO_DECAPSULATE) /* Process the Kyber key share extension on the client side. * * ssl The SSL/TLS object. @@ -8931,14 +8986,18 @@ static int TLSX_KeyShare_ProcessPqc(WOLFSSL* ssl, KeyShareEntry* keyShareEntry) { int ret = 0; int type; +#ifndef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ KyberKey kem[1]; + word32 privSz = 0; +#else + KyberKey* kem; +#endif byte* sharedSecret = NULL; word32 sharedSecretLen = 0; int oqs_group = 0; int ecc_group = 0; ecc_key eccpubkey; word32 outlen = 0; - word32 privSz = 0; word32 ctSz = 0; word32 ssSz = 0; @@ -8981,12 +9040,17 @@ static int TLSX_KeyShare_ProcessPqc(WOLFSSL* ssl, KeyShareEntry* keyShareEntry) return BAD_FUNC_ARG; } +#ifndef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ ret = wc_KyberKey_Init(type, kem, ssl->heap, ssl->devId); if (ret != 0) { wc_ecc_free(&eccpubkey); WOLFSSL_MSG("Error creating Kyber KEM"); return MEMORY_E; } +#else + kem = (KyberKey*)keyShareEntry->privKey; + keyShareEntry->privKey = NULL; +#endif if (ret == 0) { ret = wc_KyberKey_SharedSecretSize(kem, &ssSz); @@ -9021,12 +9085,14 @@ static int TLSX_KeyShare_ProcessPqc(WOLFSSL* ssl, KeyShareEntry* keyShareEntry) if (ret == 0) { ret = wc_KyberKey_CipherTextSize(kem, &ctSz); } +#ifndef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ if (ret == 0) { ret = wc_KyberKey_PrivateKeySize(kem, &privSz); } if (ret == 0) { ret = wc_KyberKey_DecodePrivateKey(kem, keyShareEntry->privKey, privSz); } +#endif if (ret == 0) { ret = wc_KyberKey_Decapsulate(kem, sharedSecret + outlen, keyShareEntry->ke + keyShareEntry->keLen - ctSz, ctSz); @@ -9113,7 +9179,7 @@ static int TLSX_KeyShare_Process(WOLFSSL* ssl, KeyShareEntry* keyShareEntry) ret = TLSX_KeyShare_ProcessX25519(ssl, keyShareEntry); else if (keyShareEntry->group == WOLFSSL_ECC_X448) ret = TLSX_KeyShare_ProcessX448(ssl, keyShareEntry); -#ifdef WOLFSSL_HAVE_KYBER +#if defined(WOLFSSL_HAVE_KYBER) && !defined(WOLFSSL_KYBER_NO_DECAPSULATE) else if (WOLFSSL_NAMED_GROUP_IS_PQC(keyShareEntry->group)) ret = TLSX_KeyShare_ProcessPqc(ssl, keyShareEntry); #endif @@ -9437,7 +9503,7 @@ static int TLSX_KeyShare_New(KeyShareEntry** list, int group, void *heap, return 0; } -#ifdef WOLFSSL_HAVE_KYBER +#if defined(WOLFSSL_HAVE_KYBER) && !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) static int server_generate_pqc_ciphertext(WOLFSSL* ssl, KeyShareEntry* keyShareEntry, byte* data, word16 len) { @@ -9643,7 +9709,7 @@ int TLSX_KeyShare_Use(const WOLFSSL* ssl, word16 group, word16 len, byte* data, } -#ifdef WOLFSSL_HAVE_KYBER +#if defined(WOLFSSL_HAVE_KYBER) && !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) if (WOLFSSL_NAMED_GROUP_IS_PQC(group) && ssl->options.side == WOLFSSL_SERVER_END) { ret = server_generate_pqc_ciphertext((WOLFSSL*)ssl, keyShareEntry, data, diff --git a/tests/api.c b/tests/api.c index de573dfda..354b0eb7b 100644 --- a/tests/api.c +++ b/tests/api.c @@ -300,6 +300,7 @@ #include #include #include +#include #include #include @@ -25528,3840 +25529,6 @@ static int test_wc_Curve448PrivateKeyToDer(void) return EXPECT_RESULT(); } /* End wc_Curve448PrivateKeyToDer*/ -static int test_wc_kyber_make_key_kats(void) -{ - EXPECT_DECLS; -#if defined(WOLFSSL_HAVE_KYBER) && defined(WOLFSSL_WC_KYBER) && \ - !defined(WOLFSSL_NO_ML_KEM) - KyberKey* key; -#ifndef WOLFSSL_NO_ML_KEM_512 - static const byte seed_512[WC_ML_KEM_MAKEKEY_RAND_SZ] = { - /* d */ - 0x2C, 0xB8, 0x43, 0xA0, 0x2E, 0xF0, 0x2E, 0xE1, - 0x09, 0x30, 0x5F, 0x39, 0x11, 0x9F, 0xAB, 0xF4, - 0x9A, 0xB9, 0x0A, 0x57, 0xFF, 0xEC, 0xB3, 0xA0, - 0xE7, 0x5E, 0x17, 0x94, 0x50, 0xF5, 0x27, 0x61, - /* z */ - 0x84, 0xCC, 0x91, 0x21, 0xAE, 0x56, 0xFB, 0xF3, - 0x9E, 0x67, 0xAD, 0xBD, 0x83, 0xAD, 0x2D, 0x3E, - 0x3B, 0xB8, 0x08, 0x43, 0x64, 0x52, 0x06, 0xBD, - 0xD9, 0xF2, 0xF6, 0x29, 0xE3, 0xCC, 0x49, 0xB7 - }; - static const byte ek_512[WC_ML_KEM_512_PUBLIC_KEY_SIZE] = { - 0xA3, 0x24, 0x39, 0xF8, 0x5A, 0x3C, 0x21, 0xD2, - 0x1A, 0x71, 0xB9, 0xB9, 0x2A, 0x9B, 0x64, 0xEA, - 0x0A, 0xB8, 0x43, 0x12, 0xC7, 0x70, 0x23, 0x69, - 0x4F, 0xD6, 0x4E, 0xAA, 0xB9, 0x07, 0xA4, 0x35, - 0x39, 0xDD, 0xB2, 0x7B, 0xA0, 0xA8, 0x53, 0xCC, - 0x90, 0x69, 0xEA, 0xC8, 0x50, 0x8C, 0x65, 0x3E, - 0x60, 0x0B, 0x2A, 0xC0, 0x18, 0x38, 0x1B, 0x4B, - 0xB4, 0xA8, 0x79, 0xAC, 0xDA, 0xD3, 0x42, 0xF9, - 0x11, 0x79, 0xCA, 0x82, 0x49, 0x52, 0x5C, 0xB1, - 0x96, 0x8B, 0xBE, 0x52, 0xF7, 0x55, 0xB7, 0xF5, - 0xB4, 0x3D, 0x66, 0x63, 0xD7, 0xA3, 0xBF, 0x0F, - 0x33, 0x57, 0xD8, 0xA2, 0x1D, 0x15, 0xB5, 0x2D, - 0xB3, 0x81, 0x8E, 0xCE, 0x5B, 0x40, 0x2A, 0x60, - 0xC9, 0x93, 0xE7, 0xCF, 0x43, 0x64, 0x87, 0xB8, - 0xD2, 0xAE, 0x91, 0xE6, 0xC5, 0xB8, 0x82, 0x75, - 0xE7, 0x58, 0x24, 0xB0, 0x00, 0x7E, 0xF3, 0x12, - 0x3C, 0x0A, 0xB5, 0x1B, 0x5C, 0xC6, 0x1B, 0x9B, - 0x22, 0x38, 0x0D, 0xE6, 0x6C, 0x5B, 0x20, 0xB0, - 0x60, 0xCB, 0xB9, 0x86, 0xF8, 0x12, 0x3D, 0x94, - 0x06, 0x00, 0x49, 0xCD, 0xF8, 0x03, 0x68, 0x73, - 0xA7, 0xBE, 0x10, 0x94, 0x44, 0xA0, 0xA1, 0xCD, - 0x87, 0xA4, 0x8C, 0xAE, 0x54, 0x19, 0x24, 0x84, - 0xAF, 0x84, 0x44, 0x29, 0xC1, 0xC5, 0x8C, 0x29, - 0xAC, 0x62, 0x4C, 0xD5, 0x04, 0xF1, 0xC4, 0x4F, - 0x1E, 0x13, 0x47, 0x82, 0x2B, 0x6F, 0x22, 0x13, - 0x23, 0x85, 0x9A, 0x7F, 0x6F, 0x75, 0x4B, 0xFE, - 0x71, 0x0B, 0xDA, 0x60, 0x27, 0x62, 0x40, 0xA4, - 0xFF, 0x2A, 0x53, 0x50, 0x70, 0x37, 0x86, 0xF5, - 0x67, 0x1F, 0x44, 0x9F, 0x20, 0xC2, 0xA9, 0x5A, - 0xE7, 0xC2, 0x90, 0x3A, 0x42, 0xCB, 0x3B, 0x30, - 0x3F, 0xF4, 0xC4, 0x27, 0xC0, 0x8B, 0x11, 0xB4, - 0xCD, 0x31, 0xC4, 0x18, 0xC6, 0xD1, 0x8D, 0x08, - 0x61, 0x87, 0x3B, 0xFA, 0x03, 0x32, 0xF1, 0x12, - 0x71, 0x55, 0x2E, 0xD7, 0xC0, 0x35, 0xF0, 0xE4, - 0xBC, 0x42, 0x8C, 0x43, 0x72, 0x0B, 0x39, 0xA6, - 0x51, 0x66, 0xBA, 0x9C, 0x2D, 0x3D, 0x77, 0x0E, - 0x13, 0x03, 0x60, 0xCC, 0x23, 0x84, 0xE8, 0x30, - 0x95, 0xB1, 0xA1, 0x59, 0x49, 0x55, 0x33, 0xF1, - 0x16, 0xC7, 0xB5, 0x58, 0xB6, 0x50, 0xDB, 0x04, - 0xD5, 0xA2, 0x6E, 0xAA, 0xA0, 0x8C, 0x3E, 0xE5, - 0x7D, 0xE4, 0x5A, 0x7F, 0x88, 0xC6, 0xA3, 0xCE, - 0xB2, 0x4D, 0xC5, 0x39, 0x7B, 0x88, 0xC3, 0xCE, - 0xF0, 0x03, 0x31, 0x9B, 0xB0, 0x23, 0x3F, 0xD6, - 0x92, 0xFD, 0xA1, 0x52, 0x44, 0x75, 0xB3, 0x51, - 0xF3, 0xC7, 0x82, 0x18, 0x2D, 0xEC, 0xF5, 0x90, - 0xB7, 0x72, 0x3B, 0xE4, 0x00, 0xBE, 0x14, 0x80, - 0x9C, 0x44, 0x32, 0x99, 0x63, 0xFC, 0x46, 0x95, - 0x92, 0x11, 0xD6, 0xA6, 0x23, 0x33, 0x95, 0x37, - 0x84, 0x8C, 0x25, 0x16, 0x69, 0x94, 0x1D, 0x90, - 0xB1, 0x30, 0x25, 0x8A, 0xDF, 0x55, 0xA7, 0x20, - 0xA7, 0x24, 0xE8, 0xB6, 0xA6, 0xCA, 0xE3, 0xC2, - 0x26, 0x4B, 0x16, 0x24, 0xCC, 0xBE, 0x7B, 0x45, - 0x6B, 0x30, 0xC8, 0xC7, 0x39, 0x32, 0x94, 0xCA, - 0x51, 0x80, 0xBC, 0x83, 0x7D, 0xD2, 0xE4, 0x5D, - 0xBD, 0x59, 0xB6, 0xE1, 0x7B, 0x24, 0xFE, 0x93, - 0x05, 0x2E, 0xB7, 0xC4, 0x3B, 0x27, 0xAC, 0x3D, - 0xC2, 0x49, 0xCA, 0x0C, 0xBC, 0xA4, 0xFB, 0x58, - 0x97, 0xC0, 0xB7, 0x44, 0x08, 0x8A, 0x8A, 0x07, - 0x79, 0xD3, 0x22, 0x33, 0x82, 0x6A, 0x01, 0xDD, - 0x64, 0x89, 0x95, 0x2A, 0x48, 0x25, 0xE5, 0x35, - 0x8A, 0x70, 0x0B, 0xE0, 0xE1, 0x79, 0xAC, 0x19, - 0x77, 0x10, 0xD8, 0x3E, 0xCC, 0x85, 0x3E, 0x52, - 0x69, 0x5E, 0x9B, 0xF8, 0x7B, 0xB1, 0xF6, 0xCB, - 0xD0, 0x5B, 0x02, 0xD4, 0xE6, 0x79, 0xE3, 0xB8, - 0x8D, 0xD4, 0x83, 0xB0, 0x74, 0x9B, 0x11, 0xBD, - 0x37, 0xB3, 0x83, 0xDC, 0xCA, 0x71, 0xF9, 0x09, - 0x18, 0x34, 0xA1, 0x69, 0x55, 0x02, 0xC4, 0xB9, - 0x5F, 0xC9, 0x11, 0x8C, 0x1C, 0xFC, 0x34, 0xC8, - 0x4C, 0x22, 0x65, 0xBB, 0xBC, 0x56, 0x3C, 0x28, - 0x26, 0x66, 0xB6, 0x0A, 0xE5, 0xC7, 0xF3, 0x85, - 0x1D, 0x25, 0xEC, 0xBB, 0x50, 0x21, 0xCC, 0x38, - 0xCB, 0x73, 0xEB, 0x6A, 0x34, 0x11, 0xB1, 0xC2, - 0x90, 0x46, 0xCA, 0x66, 0x54, 0x06, 0x67, 0xD1, - 0x36, 0x95, 0x44, 0x60, 0xC6, 0xFC, 0xBC, 0x4B, - 0xC7, 0xC0, 0x49, 0xBB, 0x04, 0x7F, 0xA6, 0x7A, - 0x63, 0xB3, 0xCC, 0x11, 0x11, 0xC1, 0xD8, 0xAC, - 0x27, 0xE8, 0x05, 0x8B, 0xCC, 0xA4, 0xA1, 0x54, - 0x55, 0x85, 0x8A, 0x58, 0x35, 0x8F, 0x7A, 0x61, - 0x02, 0x0B, 0xC9, 0xC4, 0xC1, 0x7F, 0x8B, 0x95, - 0xC2, 0x68, 0xCC, 0xB4, 0x04, 0xB9, 0xAA, 0xB4, - 0xA2, 0x72, 0xA2, 0x1A, 0x70, 0xDA, 0xF6, 0xB6, - 0xF1, 0x51, 0x21, 0xEE, 0x01, 0xC1, 0x56, 0xA3, - 0x54, 0xAA, 0x17, 0x08, 0x7E, 0x07, 0x70, 0x2E, - 0xAB, 0x38, 0xB3, 0x24, 0x1F, 0xDB, 0x55, 0x3F, - 0x65, 0x73, 0x39, 0xD5, 0xE2, 0x9D, 0xC5, 0xD9, - 0x1B, 0x7A, 0x5A, 0x82, 0x8E, 0xE9, 0x59, 0xFE, - 0xBB, 0x90, 0xB0, 0x72, 0x29, 0xF6, 0xE4, 0x9D, - 0x23, 0xC3, 0xA1, 0x90, 0x29, 0x70, 0x42, 0xFB, - 0x43, 0x98, 0x69, 0x55, 0xB6, 0x9C, 0x28, 0xE1, - 0x01, 0x6F, 0x77, 0xA5, 0x8B, 0x43, 0x15, 0x14, - 0xD2, 0x1B, 0x88, 0x88, 0x99, 0xC3, 0x60, 0x82, - 0x76, 0x08, 0x1B, 0x75, 0xF5, 0x68, 0x09, 0x7C, - 0xDC, 0x17, 0x48, 0xF3, 0x23, 0x07, 0x88, 0x58, - 0x15, 0xF3, 0xAE, 0xC9, 0x65, 0x18, 0x19, 0xAA, - 0x68, 0x73, 0xD1, 0xA4, 0xEB, 0x83, 0xB1, 0x95, - 0x38, 0x43, 0xB9, 0x34, 0x22, 0x51, 0x94, 0x83, - 0xFE, 0xF0, 0x05, 0x9D, 0x36, 0xBB, 0x2D, 0xB1, - 0xF3, 0xD4, 0x68, 0xFB, 0x06, 0x8C, 0x86, 0xE8, - 0x97, 0x37, 0x33, 0xC3, 0x98, 0xEA, 0xF0, 0x0E, - 0x17, 0x02, 0xC6, 0x73, 0x4A, 0xD8, 0xEB, 0x3B - }; - static const byte dk_512[WC_ML_KEM_512_PRIVATE_KEY_SIZE] = { - 0x7F, 0xE4, 0x20, 0x6F, 0x26, 0xBE, 0xDB, 0x64, - 0xC1, 0xED, 0x00, 0x09, 0x61, 0x52, 0x45, 0xDC, - 0x98, 0x48, 0x3F, 0x66, 0x3A, 0xCC, 0x61, 0x7E, - 0x65, 0x89, 0x8D, 0x59, 0x6A, 0x88, 0x36, 0xC4, - 0x9F, 0xBD, 0x3B, 0x4A, 0x84, 0x97, 0x59, 0xAA, - 0x15, 0x46, 0xBD, 0xA8, 0x35, 0xCA, 0xF1, 0x75, - 0x64, 0x2C, 0x28, 0x28, 0x08, 0x92, 0xA7, 0x87, - 0x8C, 0xC3, 0x18, 0xBC, 0xC7, 0x5B, 0x83, 0x4C, - 0xB2, 0x9F, 0xDF, 0x53, 0x60, 0xD7, 0xF9, 0x82, - 0xA5, 0x2C, 0x88, 0xAE, 0x91, 0x4D, 0xBF, 0x02, - 0xB5, 0x8B, 0xEB, 0x8B, 0xA8, 0x87, 0xAE, 0x8F, - 0xAB, 0x5E, 0xB7, 0x87, 0x31, 0xC6, 0x75, 0x78, - 0x05, 0x47, 0x1E, 0xBC, 0xEC, 0x2E, 0x38, 0xDB, - 0x1F, 0x4B, 0x83, 0x10, 0xD2, 0x88, 0x92, 0x0D, - 0x8A, 0x49, 0x27, 0x95, 0xA3, 0x90, 0xA7, 0x4B, - 0xCD, 0x55, 0xCD, 0x85, 0x57, 0xB4, 0xDA, 0xAB, - 0xA8, 0x2C, 0x28, 0xCB, 0x3F, 0x15, 0x2C, 0x52, - 0x31, 0x19, 0x61, 0x93, 0xA6, 0x6A, 0x8C, 0xCF, - 0x34, 0xB8, 0x0E, 0x1F, 0x69, 0x42, 0xC3, 0x2B, - 0xCF, 0xF9, 0x6A, 0x6E, 0x3C, 0xF3, 0x93, 0x9B, - 0x7B, 0x94, 0x24, 0x98, 0xCC, 0x5E, 0x4C, 0xB8, - 0xE8, 0x46, 0x8E, 0x70, 0x27, 0x59, 0x85, 0x2A, - 0xA2, 0x29, 0xC0, 0x25, 0x7F, 0x02, 0x98, 0x20, - 0x97, 0x33, 0x86, 0x07, 0xC0, 0xF0, 0xF4, 0x54, - 0x46, 0xFA, 0xB4, 0x26, 0x79, 0x93, 0xB8, 0xA5, - 0x90, 0x8C, 0xAB, 0x9C, 0x46, 0x78, 0x01, 0x34, - 0x80, 0x4A, 0xE1, 0x88, 0x15, 0xB1, 0x02, 0x05, - 0x27, 0xA2, 0x22, 0xEC, 0x4B, 0x39, 0xA3, 0x19, - 0x4E, 0x66, 0x17, 0x37, 0x79, 0x17, 0x14, 0x12, - 0x26, 0x62, 0xD8, 0xB9, 0x76, 0x9F, 0x6C, 0x67, - 0xDE, 0x62, 0x5C, 0x0D, 0x48, 0x3C, 0x3D, 0x42, - 0x0F, 0xF1, 0xBB, 0x88, 0x9A, 0x72, 0x7E, 0x75, - 0x62, 0x81, 0x51, 0x3A, 0x70, 0x04, 0x76, 0x48, - 0xD2, 0x9C, 0x0C, 0x30, 0xF9, 0xBE, 0x52, 0xEC, - 0x0D, 0xEB, 0x97, 0x7C, 0xF0, 0xF3, 0x4F, 0xC2, - 0x07, 0x84, 0x83, 0x45, 0x69, 0x64, 0x74, 0x34, - 0x10, 0x63, 0x8C, 0x57, 0xB5, 0x53, 0x95, 0x77, - 0xBF, 0x85, 0x66, 0x90, 0x78, 0xC3, 0x56, 0xB3, - 0x46, 0x2E, 0x9F, 0xA5, 0x80, 0x7D, 0x49, 0x59, - 0x1A, 0xFA, 0x41, 0xC1, 0x96, 0x9F, 0x65, 0xE3, - 0x40, 0x5C, 0xB6, 0x4D, 0xDF, 0x16, 0x3F, 0x26, - 0x73, 0x4C, 0xE3, 0x48, 0xB9, 0xCF, 0x45, 0x67, - 0xA3, 0x3A, 0x59, 0x69, 0xEB, 0x32, 0x6C, 0xFB, - 0x5A, 0xDC, 0x69, 0x5D, 0xCA, 0x0C, 0x8B, 0x2A, - 0x7B, 0x1F, 0x4F, 0x40, 0x4C, 0xC7, 0xA0, 0x98, - 0x1E, 0x2C, 0xC2, 0x4C, 0x1C, 0x23, 0xD1, 0x6A, - 0xA9, 0xB4, 0x39, 0x24, 0x15, 0xE2, 0x6C, 0x22, - 0xF4, 0xA9, 0x34, 0xD7, 0x94, 0xC1, 0xFB, 0x4E, - 0x5A, 0x67, 0x05, 0x11, 0x23, 0xCC, 0xD1, 0x53, - 0x76, 0x4D, 0xEC, 0x99, 0xD5, 0x53, 0x52, 0x90, - 0x53, 0xC3, 0xDA, 0x55, 0x0B, 0xCE, 0xA3, 0xAC, - 0x54, 0x13, 0x6A, 0x26, 0xA6, 0x76, 0xD2, 0xBA, - 0x84, 0x21, 0x06, 0x70, 0x68, 0xC6, 0x38, 0x1C, - 0x2A, 0x62, 0xA7, 0x27, 0xC9, 0x33, 0x70, 0x2E, - 0xE5, 0x80, 0x4A, 0x31, 0xCA, 0x86, 0x5A, 0x45, - 0x58, 0x8F, 0xB7, 0x4D, 0xE7, 0xE2, 0x22, 0x3D, - 0x88, 0xC0, 0x60, 0x8A, 0x16, 0xBF, 0xEC, 0x4F, - 0xAD, 0x67, 0x52, 0xDB, 0x56, 0xB4, 0x8B, 0x88, - 0x72, 0xBF, 0x26, 0xBA, 0x2F, 0xFA, 0x0C, 0xED, - 0xE5, 0x34, 0x3B, 0xE8, 0x14, 0x36, 0x89, 0x26, - 0x5E, 0x06, 0x5F, 0x41, 0xA6, 0x92, 0x5B, 0x86, - 0xC8, 0x92, 0xE6, 0x2E, 0xB0, 0x77, 0x27, 0x34, - 0xF5, 0xA3, 0x57, 0xC7, 0x5C, 0xA1, 0xAC, 0x6D, - 0xF7, 0x8A, 0xB1, 0xB8, 0x88, 0x5A, 0xD0, 0x81, - 0x96, 0x15, 0x37, 0x6D, 0x33, 0xEB, 0xB9, 0x8F, - 0x87, 0x33, 0xA6, 0x75, 0x58, 0x03, 0xD9, 0x77, - 0xBF, 0x51, 0xC1, 0x27, 0x40, 0x42, 0x4B, 0x2B, - 0x49, 0xC2, 0x83, 0x82, 0xA6, 0x91, 0x7C, 0xBF, - 0xA0, 0x34, 0xC3, 0xF1, 0x26, 0xA3, 0x8C, 0x21, - 0x6C, 0x03, 0xC3, 0x57, 0x70, 0xAD, 0x48, 0x1B, - 0x90, 0x84, 0xB5, 0x58, 0x8D, 0xA6, 0x5F, 0xF1, - 0x18, 0xA7, 0x4F, 0x93, 0x2C, 0x7E, 0x53, 0x7A, - 0xBE, 0x58, 0x63, 0xFB, 0x29, 0xA1, 0x0C, 0x09, - 0x70, 0x1B, 0x44, 0x1F, 0x83, 0x99, 0xC1, 0xF8, - 0xA6, 0x37, 0x82, 0x5A, 0xCE, 0xA3, 0xE9, 0x31, - 0x80, 0x57, 0x4F, 0xDE, 0xB8, 0x80, 0x76, 0x66, - 0x1A, 0xB4, 0x69, 0x51, 0x71, 0x6A, 0x50, 0x01, - 0x84, 0xA0, 0x40, 0x55, 0x72, 0x66, 0x59, 0x8C, - 0xAF, 0x76, 0x10, 0x5E, 0x1C, 0x18, 0x70, 0xB4, - 0x39, 0x69, 0xC3, 0xBC, 0xC1, 0xA0, 0x49, 0x27, - 0x63, 0x80, 0x17, 0x49, 0x8B, 0xB6, 0x2C, 0xAF, - 0xD3, 0xA6, 0xB0, 0x82, 0xB7, 0xBF, 0x7A, 0x23, - 0x45, 0x0E, 0x19, 0x17, 0x99, 0x61, 0x9B, 0x92, - 0x51, 0x12, 0xD0, 0x72, 0x02, 0x5C, 0xA8, 0x88, - 0x54, 0x8C, 0x79, 0x1A, 0xA4, 0x22, 0x51, 0x50, - 0x4D, 0x5D, 0x1C, 0x1C, 0xDD, 0xB2, 0x13, 0x30, - 0x3B, 0x04, 0x9E, 0x73, 0x46, 0xE8, 0xD8, 0x3A, - 0xD5, 0x87, 0x83, 0x6F, 0x35, 0x28, 0x4E, 0x10, - 0x97, 0x27, 0xE6, 0x6B, 0xBC, 0xC9, 0x52, 0x1F, - 0xE0, 0xB1, 0x91, 0x63, 0x00, 0x47, 0xD1, 0x58, - 0xF7, 0x56, 0x40, 0xFF, 0xEB, 0x54, 0x56, 0x07, - 0x27, 0x40, 0x02, 0x1A, 0xFD, 0x15, 0xA4, 0x54, - 0x69, 0xC5, 0x83, 0x82, 0x9D, 0xAA, 0xC8, 0xA7, - 0xDE, 0xB0, 0x5B, 0x24, 0xF0, 0x56, 0x7E, 0x43, - 0x17, 0xB3, 0xE3, 0xB3, 0x33, 0x89, 0xB5, 0xC5, - 0xF8, 0xB0, 0x4B, 0x09, 0x9F, 0xB4, 0xD1, 0x03, - 0xA3, 0x24, 0x39, 0xF8, 0x5A, 0x3C, 0x21, 0xD2, - 0x1A, 0x71, 0xB9, 0xB9, 0x2A, 0x9B, 0x64, 0xEA, - 0x0A, 0xB8, 0x43, 0x12, 0xC7, 0x70, 0x23, 0x69, - 0x4F, 0xD6, 0x4E, 0xAA, 0xB9, 0x07, 0xA4, 0x35, - 0x39, 0xDD, 0xB2, 0x7B, 0xA0, 0xA8, 0x53, 0xCC, - 0x90, 0x69, 0xEA, 0xC8, 0x50, 0x8C, 0x65, 0x3E, - 0x60, 0x0B, 0x2A, 0xC0, 0x18, 0x38, 0x1B, 0x4B, - 0xB4, 0xA8, 0x79, 0xAC, 0xDA, 0xD3, 0x42, 0xF9, - 0x11, 0x79, 0xCA, 0x82, 0x49, 0x52, 0x5C, 0xB1, - 0x96, 0x8B, 0xBE, 0x52, 0xF7, 0x55, 0xB7, 0xF5, - 0xB4, 0x3D, 0x66, 0x63, 0xD7, 0xA3, 0xBF, 0x0F, - 0x33, 0x57, 0xD8, 0xA2, 0x1D, 0x15, 0xB5, 0x2D, - 0xB3, 0x81, 0x8E, 0xCE, 0x5B, 0x40, 0x2A, 0x60, - 0xC9, 0x93, 0xE7, 0xCF, 0x43, 0x64, 0x87, 0xB8, - 0xD2, 0xAE, 0x91, 0xE6, 0xC5, 0xB8, 0x82, 0x75, - 0xE7, 0x58, 0x24, 0xB0, 0x00, 0x7E, 0xF3, 0x12, - 0x3C, 0x0A, 0xB5, 0x1B, 0x5C, 0xC6, 0x1B, 0x9B, - 0x22, 0x38, 0x0D, 0xE6, 0x6C, 0x5B, 0x20, 0xB0, - 0x60, 0xCB, 0xB9, 0x86, 0xF8, 0x12, 0x3D, 0x94, - 0x06, 0x00, 0x49, 0xCD, 0xF8, 0x03, 0x68, 0x73, - 0xA7, 0xBE, 0x10, 0x94, 0x44, 0xA0, 0xA1, 0xCD, - 0x87, 0xA4, 0x8C, 0xAE, 0x54, 0x19, 0x24, 0x84, - 0xAF, 0x84, 0x44, 0x29, 0xC1, 0xC5, 0x8C, 0x29, - 0xAC, 0x62, 0x4C, 0xD5, 0x04, 0xF1, 0xC4, 0x4F, - 0x1E, 0x13, 0x47, 0x82, 0x2B, 0x6F, 0x22, 0x13, - 0x23, 0x85, 0x9A, 0x7F, 0x6F, 0x75, 0x4B, 0xFE, - 0x71, 0x0B, 0xDA, 0x60, 0x27, 0x62, 0x40, 0xA4, - 0xFF, 0x2A, 0x53, 0x50, 0x70, 0x37, 0x86, 0xF5, - 0x67, 0x1F, 0x44, 0x9F, 0x20, 0xC2, 0xA9, 0x5A, - 0xE7, 0xC2, 0x90, 0x3A, 0x42, 0xCB, 0x3B, 0x30, - 0x3F, 0xF4, 0xC4, 0x27, 0xC0, 0x8B, 0x11, 0xB4, - 0xCD, 0x31, 0xC4, 0x18, 0xC6, 0xD1, 0x8D, 0x08, - 0x61, 0x87, 0x3B, 0xFA, 0x03, 0x32, 0xF1, 0x12, - 0x71, 0x55, 0x2E, 0xD7, 0xC0, 0x35, 0xF0, 0xE4, - 0xBC, 0x42, 0x8C, 0x43, 0x72, 0x0B, 0x39, 0xA6, - 0x51, 0x66, 0xBA, 0x9C, 0x2D, 0x3D, 0x77, 0x0E, - 0x13, 0x03, 0x60, 0xCC, 0x23, 0x84, 0xE8, 0x30, - 0x95, 0xB1, 0xA1, 0x59, 0x49, 0x55, 0x33, 0xF1, - 0x16, 0xC7, 0xB5, 0x58, 0xB6, 0x50, 0xDB, 0x04, - 0xD5, 0xA2, 0x6E, 0xAA, 0xA0, 0x8C, 0x3E, 0xE5, - 0x7D, 0xE4, 0x5A, 0x7F, 0x88, 0xC6, 0xA3, 0xCE, - 0xB2, 0x4D, 0xC5, 0x39, 0x7B, 0x88, 0xC3, 0xCE, - 0xF0, 0x03, 0x31, 0x9B, 0xB0, 0x23, 0x3F, 0xD6, - 0x92, 0xFD, 0xA1, 0x52, 0x44, 0x75, 0xB3, 0x51, - 0xF3, 0xC7, 0x82, 0x18, 0x2D, 0xEC, 0xF5, 0x90, - 0xB7, 0x72, 0x3B, 0xE4, 0x00, 0xBE, 0x14, 0x80, - 0x9C, 0x44, 0x32, 0x99, 0x63, 0xFC, 0x46, 0x95, - 0x92, 0x11, 0xD6, 0xA6, 0x23, 0x33, 0x95, 0x37, - 0x84, 0x8C, 0x25, 0x16, 0x69, 0x94, 0x1D, 0x90, - 0xB1, 0x30, 0x25, 0x8A, 0xDF, 0x55, 0xA7, 0x20, - 0xA7, 0x24, 0xE8, 0xB6, 0xA6, 0xCA, 0xE3, 0xC2, - 0x26, 0x4B, 0x16, 0x24, 0xCC, 0xBE, 0x7B, 0x45, - 0x6B, 0x30, 0xC8, 0xC7, 0x39, 0x32, 0x94, 0xCA, - 0x51, 0x80, 0xBC, 0x83, 0x7D, 0xD2, 0xE4, 0x5D, - 0xBD, 0x59, 0xB6, 0xE1, 0x7B, 0x24, 0xFE, 0x93, - 0x05, 0x2E, 0xB7, 0xC4, 0x3B, 0x27, 0xAC, 0x3D, - 0xC2, 0x49, 0xCA, 0x0C, 0xBC, 0xA4, 0xFB, 0x58, - 0x97, 0xC0, 0xB7, 0x44, 0x08, 0x8A, 0x8A, 0x07, - 0x79, 0xD3, 0x22, 0x33, 0x82, 0x6A, 0x01, 0xDD, - 0x64, 0x89, 0x95, 0x2A, 0x48, 0x25, 0xE5, 0x35, - 0x8A, 0x70, 0x0B, 0xE0, 0xE1, 0x79, 0xAC, 0x19, - 0x77, 0x10, 0xD8, 0x3E, 0xCC, 0x85, 0x3E, 0x52, - 0x69, 0x5E, 0x9B, 0xF8, 0x7B, 0xB1, 0xF6, 0xCB, - 0xD0, 0x5B, 0x02, 0xD4, 0xE6, 0x79, 0xE3, 0xB8, - 0x8D, 0xD4, 0x83, 0xB0, 0x74, 0x9B, 0x11, 0xBD, - 0x37, 0xB3, 0x83, 0xDC, 0xCA, 0x71, 0xF9, 0x09, - 0x18, 0x34, 0xA1, 0x69, 0x55, 0x02, 0xC4, 0xB9, - 0x5F, 0xC9, 0x11, 0x8C, 0x1C, 0xFC, 0x34, 0xC8, - 0x4C, 0x22, 0x65, 0xBB, 0xBC, 0x56, 0x3C, 0x28, - 0x26, 0x66, 0xB6, 0x0A, 0xE5, 0xC7, 0xF3, 0x85, - 0x1D, 0x25, 0xEC, 0xBB, 0x50, 0x21, 0xCC, 0x38, - 0xCB, 0x73, 0xEB, 0x6A, 0x34, 0x11, 0xB1, 0xC2, - 0x90, 0x46, 0xCA, 0x66, 0x54, 0x06, 0x67, 0xD1, - 0x36, 0x95, 0x44, 0x60, 0xC6, 0xFC, 0xBC, 0x4B, - 0xC7, 0xC0, 0x49, 0xBB, 0x04, 0x7F, 0xA6, 0x7A, - 0x63, 0xB3, 0xCC, 0x11, 0x11, 0xC1, 0xD8, 0xAC, - 0x27, 0xE8, 0x05, 0x8B, 0xCC, 0xA4, 0xA1, 0x54, - 0x55, 0x85, 0x8A, 0x58, 0x35, 0x8F, 0x7A, 0x61, - 0x02, 0x0B, 0xC9, 0xC4, 0xC1, 0x7F, 0x8B, 0x95, - 0xC2, 0x68, 0xCC, 0xB4, 0x04, 0xB9, 0xAA, 0xB4, - 0xA2, 0x72, 0xA2, 0x1A, 0x70, 0xDA, 0xF6, 0xB6, - 0xF1, 0x51, 0x21, 0xEE, 0x01, 0xC1, 0x56, 0xA3, - 0x54, 0xAA, 0x17, 0x08, 0x7E, 0x07, 0x70, 0x2E, - 0xAB, 0x38, 0xB3, 0x24, 0x1F, 0xDB, 0x55, 0x3F, - 0x65, 0x73, 0x39, 0xD5, 0xE2, 0x9D, 0xC5, 0xD9, - 0x1B, 0x7A, 0x5A, 0x82, 0x8E, 0xE9, 0x59, 0xFE, - 0xBB, 0x90, 0xB0, 0x72, 0x29, 0xF6, 0xE4, 0x9D, - 0x23, 0xC3, 0xA1, 0x90, 0x29, 0x70, 0x42, 0xFB, - 0x43, 0x98, 0x69, 0x55, 0xB6, 0x9C, 0x28, 0xE1, - 0x01, 0x6F, 0x77, 0xA5, 0x8B, 0x43, 0x15, 0x14, - 0xD2, 0x1B, 0x88, 0x88, 0x99, 0xC3, 0x60, 0x82, - 0x76, 0x08, 0x1B, 0x75, 0xF5, 0x68, 0x09, 0x7C, - 0xDC, 0x17, 0x48, 0xF3, 0x23, 0x07, 0x88, 0x58, - 0x15, 0xF3, 0xAE, 0xC9, 0x65, 0x18, 0x19, 0xAA, - 0x68, 0x73, 0xD1, 0xA4, 0xEB, 0x83, 0xB1, 0x95, - 0x38, 0x43, 0xB9, 0x34, 0x22, 0x51, 0x94, 0x83, - 0xFE, 0xF0, 0x05, 0x9D, 0x36, 0xBB, 0x2D, 0xB1, - 0xF3, 0xD4, 0x68, 0xFB, 0x06, 0x8C, 0x86, 0xE8, - 0x97, 0x37, 0x33, 0xC3, 0x98, 0xEA, 0xF0, 0x0E, - 0x17, 0x02, 0xC6, 0x73, 0x4A, 0xD8, 0xEB, 0x3B, - 0x62, 0x01, 0x30, 0xD6, 0xC2, 0xB8, 0xC9, 0x04, - 0xA3, 0xBB, 0x93, 0x07, 0xBE, 0x51, 0x03, 0xF8, - 0xD8, 0x14, 0x50, 0x5F, 0xB6, 0xA6, 0x0A, 0xF7, - 0x93, 0x7E, 0xA6, 0xCA, 0xA1, 0x17, 0x31, 0x5E, - 0x84, 0xCC, 0x91, 0x21, 0xAE, 0x56, 0xFB, 0xF3, - 0x9E, 0x67, 0xAD, 0xBD, 0x83, 0xAD, 0x2D, 0x3E, - 0x3B, 0xB8, 0x08, 0x43, 0x64, 0x52, 0x06, 0xBD, - 0xD9, 0xF2, 0xF6, 0x29, 0xE3, 0xCC, 0x49, 0xB7 - }; -#endif -#ifndef WOLFSSL_NO_ML_KEM_768 - static const byte seed_768[WC_ML_KEM_MAKEKEY_RAND_SZ] = { - /* d */ - 0xE3, 0x4A, 0x70, 0x1C, 0x4C, 0x87, 0x58, 0x2F, - 0x42, 0x26, 0x4E, 0xE4, 0x22, 0xD3, 0xC6, 0x84, - 0xD9, 0x76, 0x11, 0xF2, 0x52, 0x3E, 0xFE, 0x0C, - 0x99, 0x8A, 0xF0, 0x50, 0x56, 0xD6, 0x93, 0xDC, - /* z */ - 0xA8, 0x57, 0x68, 0xF3, 0x48, 0x6B, 0xD3, 0x2A, - 0x01, 0xBF, 0x9A, 0x8F, 0x21, 0xEA, 0x93, 0x8E, - 0x64, 0x8E, 0xAE, 0x4E, 0x54, 0x48, 0xC3, 0x4C, - 0x3E, 0xB8, 0x88, 0x20, 0xB1, 0x59, 0xEE, 0xDD - }; - static const byte ek_768[WC_ML_KEM_768_PUBLIC_KEY_SIZE] = { - 0x6D, 0x14, 0xA0, 0x71, 0xF7, 0xCC, 0x45, 0x25, - 0x58, 0xD5, 0xE7, 0x1A, 0x7B, 0x08, 0x70, 0x62, - 0xEC, 0xB1, 0x38, 0x68, 0x44, 0x58, 0x82, 0x46, - 0x12, 0x64, 0x02, 0xB1, 0xFA, 0x16, 0x37, 0x73, - 0x3C, 0xD5, 0xF6, 0x0C, 0xC8, 0x4B, 0xCB, 0x64, - 0x6A, 0x78, 0x92, 0x61, 0x4D, 0x7C, 0x51, 0xB1, - 0xC7, 0xF1, 0xA2, 0x79, 0x91, 0x32, 0xF1, 0x34, - 0x27, 0xDC, 0x48, 0x21, 0x58, 0xDA, 0x25, 0x44, - 0x70, 0xA5, 0x9E, 0x00, 0xA4, 0xE4, 0x96, 0x86, - 0xFD, 0xC0, 0x77, 0x55, 0x93, 0x67, 0x27, 0x0C, - 0x21, 0x53, 0xF1, 0x10, 0x07, 0x59, 0x2C, 0x9C, - 0x43, 0x10, 0xCF, 0x8A, 0x12, 0xC6, 0xA8, 0x71, - 0x3B, 0xD6, 0xBB, 0x51, 0xF3, 0x12, 0x4F, 0x98, - 0x9B, 0xA0, 0xD5, 0x40, 0x73, 0xCC, 0x24, 0x2E, - 0x09, 0x68, 0x78, 0x0B, 0x87, 0x5A, 0x86, 0x9E, - 0xFB, 0x85, 0x15, 0x86, 0xB9, 0xA8, 0x68, 0xA3, - 0x84, 0xB9, 0xE6, 0x82, 0x1B, 0x20, 0x1B, 0x93, - 0x2C, 0x45, 0x53, 0x69, 0xA7, 0x39, 0xEC, 0x22, - 0x56, 0x9C, 0x97, 0x7C, 0x21, 0x2B, 0x38, 0x18, - 0x71, 0x81, 0x36, 0x56, 0xAF, 0x5B, 0x56, 0x7E, - 0xF8, 0x93, 0xB5, 0x84, 0x62, 0x4C, 0x86, 0x3A, - 0x25, 0x90, 0x00, 0xF1, 0x7B, 0x25, 0x4B, 0x98, - 0xB1, 0x85, 0x09, 0x7C, 0x50, 0xEB, 0xB6, 0x8B, - 0x24, 0x43, 0x42, 0xE0, 0x5D, 0x4D, 0xE5, 0x20, - 0x12, 0x5B, 0x8E, 0x10, 0x33, 0xB1, 0x43, 0x60, - 0x93, 0xAC, 0xE7, 0xCE, 0x8E, 0x71, 0xB4, 0x58, - 0xD5, 0x25, 0x67, 0x33, 0x63, 0x04, 0x5A, 0x3B, - 0x3E, 0xEA, 0x94, 0x55, 0x42, 0x8A, 0x39, 0x87, - 0x05, 0xA4, 0x23, 0x27, 0xAD, 0xB3, 0x77, 0x4B, - 0x70, 0x57, 0xF4, 0x2B, 0x01, 0x7E, 0xC0, 0x73, - 0x9A, 0x98, 0x3F, 0x19, 0xE8, 0x21, 0x4D, 0x09, - 0x19, 0x5F, 0xA2, 0x4D, 0x2D, 0x57, 0x1D, 0xB7, - 0x3C, 0x19, 0xA6, 0xF8, 0x46, 0x0E, 0x50, 0x83, - 0x0D, 0x41, 0x5F, 0x62, 0x7B, 0x88, 0xE9, 0x4A, - 0x7B, 0x15, 0x37, 0x91, 0xA0, 0xC0, 0xC7, 0xE9, - 0x48, 0x4C, 0x74, 0xD5, 0x3C, 0x71, 0x48, 0x89, - 0xF0, 0xE3, 0x21, 0xB6, 0x66, 0x0A, 0x53, 0x2A, - 0x5B, 0xC0, 0xE5, 0x57, 0xFB, 0xCA, 0x35, 0xE2, - 0x9B, 0xC6, 0x11, 0x20, 0x0E, 0xD3, 0xC6, 0x33, - 0x07, 0x7A, 0x4D, 0x87, 0x3C, 0x5C, 0xC6, 0x70, - 0x06, 0xB7, 0x53, 0xBF, 0x6D, 0x6B, 0x7A, 0xF6, - 0xCA, 0x40, 0x2A, 0xB6, 0x18, 0x23, 0x6C, 0x0A, - 0xFF, 0xBC, 0x80, 0x1F, 0x82, 0x22, 0xFB, 0xC3, - 0x6C, 0xE0, 0x98, 0x4E, 0x2B, 0x18, 0xC9, 0x44, - 0xBB, 0xCB, 0xEF, 0x03, 0xB1, 0xE1, 0x36, 0x1C, - 0x1F, 0x44, 0xB0, 0xD7, 0x34, 0xAF, 0xB1, 0x56, - 0x6C, 0xFF, 0x87, 0x44, 0xDA, 0x8B, 0x99, 0x43, - 0xD6, 0xB4, 0x5A, 0x3C, 0x09, 0x03, 0x07, 0x02, - 0xCA, 0x20, 0x1F, 0xFE, 0x20, 0xCB, 0x7E, 0xC5, - 0xB0, 0xD4, 0x14, 0x9E, 0xE2, 0xC2, 0x8E, 0x8B, - 0x23, 0x37, 0x4F, 0x47, 0x1B, 0x57, 0x15, 0x0D, - 0x0E, 0xC9, 0x33, 0x62, 0x61, 0xA2, 0xD5, 0xCB, - 0x84, 0xA3, 0xAC, 0xAC, 0xC4, 0x28, 0x94, 0x73, - 0xA4, 0xC0, 0xAB, 0xC6, 0x17, 0xC9, 0xAB, 0xC1, - 0x78, 0x73, 0x44, 0x34, 0xC8, 0x2E, 0x16, 0x85, - 0x58, 0x8A, 0x5C, 0x2E, 0xA2, 0x67, 0x8F, 0x6B, - 0x3C, 0x22, 0x28, 0x73, 0x31, 0x30, 0xC4, 0x66, - 0xE5, 0xB8, 0x6E, 0xF4, 0x91, 0x15, 0x3E, 0x48, - 0x66, 0x22, 0x47, 0xB8, 0x75, 0xD2, 0x01, 0x02, - 0x0B, 0x56, 0x6B, 0x81, 0xB6, 0x4D, 0x83, 0x9A, - 0xB4, 0x63, 0x3B, 0xAA, 0x8A, 0xCE, 0x20, 0x2B, - 0xAA, 0xB4, 0x49, 0x62, 0x97, 0xF9, 0x80, 0x7A, - 0xDB, 0xBB, 0x1E, 0x33, 0x2C, 0x6F, 0x80, 0x22, - 0xB2, 0xA1, 0x8C, 0xFD, 0xD4, 0xA8, 0x25, 0x30, - 0xB6, 0xD3, 0xF0, 0x07, 0xC3, 0x35, 0x38, 0x98, - 0xD9, 0x66, 0xCC, 0x2C, 0x21, 0xCB, 0x42, 0x44, - 0xBD, 0x00, 0x44, 0x3F, 0x20, 0x98, 0x70, 0xAC, - 0xC4, 0x2B, 0xC3, 0x30, 0x68, 0xC7, 0x24, 0xEC, - 0x17, 0x22, 0x36, 0x19, 0xC1, 0x09, 0x3C, 0xCA, - 0x6A, 0xEB, 0x29, 0x50, 0x06, 0x64, 0xD1, 0x22, - 0x50, 0x36, 0xB4, 0xB8, 0x10, 0x91, 0x90, 0x69, - 0x69, 0x48, 0x1F, 0x1C, 0x72, 0x3C, 0x14, 0x0B, - 0x9D, 0x6C, 0x16, 0x8F, 0x5B, 0x64, 0xBE, 0xA6, - 0x9C, 0x5F, 0xD6, 0x38, 0x5D, 0xF7, 0x36, 0x4B, - 0x87, 0x23, 0xBC, 0xC8, 0x5E, 0x03, 0x8C, 0x7E, - 0x46, 0x4A, 0x90, 0x0D, 0x68, 0xA2, 0x12, 0x78, - 0x18, 0x99, 0x42, 0x17, 0xAE, 0xC8, 0xBD, 0xB3, - 0x9A, 0x97, 0x0A, 0x99, 0x63, 0xDE, 0x93, 0x68, - 0x8E, 0x2A, 0xC8, 0x2A, 0xBC, 0xC2, 0x2F, 0xB9, - 0x27, 0x7B, 0xA2, 0x20, 0x09, 0xE8, 0x78, 0x38, - 0x1A, 0x38, 0x16, 0x39, 0x01, 0xC7, 0xD4, 0xC8, - 0x50, 0x19, 0x53, 0x8D, 0x35, 0xCA, 0xAE, 0x9C, - 0x41, 0xAF, 0x8C, 0x92, 0x9E, 0xE2, 0x0B, 0xB0, - 0x8C, 0xA6, 0x19, 0xE7, 0x2C, 0x2F, 0x22, 0x62, - 0xC1, 0xC9, 0x93, 0x85, 0x72, 0x55, 0x1A, 0xC0, - 0x2D, 0xC9, 0x26, 0x8F, 0xBC, 0xC3, 0x5D, 0x79, - 0x01, 0x1C, 0x3C, 0x09, 0x0A, 0xD4, 0x0A, 0x4F, - 0x11, 0x1C, 0x9B, 0xE5, 0x5C, 0x42, 0x7E, 0xB7, - 0x96, 0xC1, 0x93, 0x2D, 0x86, 0x73, 0x57, 0x9A, - 0xF1, 0xB4, 0xC6, 0x38, 0xB0, 0x94, 0x44, 0x89, - 0x01, 0x2A, 0x25, 0x59, 0xA3, 0xB0, 0x24, 0x81, - 0xB0, 0x1A, 0xC3, 0x0B, 0xA8, 0x96, 0x0F, 0x80, - 0xC0, 0xC2, 0xB3, 0x94, 0x7D, 0x36, 0xA1, 0x2C, - 0x08, 0x04, 0x98, 0xBE, 0xE4, 0x48, 0x71, 0x6C, - 0x97, 0x34, 0x16, 0xC8, 0x24, 0x28, 0x04, 0xA3, - 0xDA, 0x09, 0x9E, 0xE1, 0x37, 0xB0, 0xBA, 0x90, - 0xFE, 0x4A, 0x5C, 0x6A, 0x89, 0x20, 0x02, 0x76, - 0xA0, 0xCF, 0xB6, 0x43, 0xEC, 0x2C, 0x56, 0xA2, - 0xD7, 0x08, 0xD7, 0xB4, 0x37, 0x3E, 0x44, 0xC1, - 0x50, 0x2A, 0x76, 0x3A, 0x60, 0x05, 0x86, 0xE6, - 0xCD, 0xA6, 0x27, 0x38, 0x97, 0xD4, 0x44, 0x48, - 0x28, 0x7D, 0xC2, 0xE6, 0x02, 0xDC, 0x39, 0x20, - 0x0B, 0xF6, 0x16, 0x62, 0x36, 0x55, 0x9F, 0xD1, - 0x2A, 0x60, 0x89, 0x2A, 0xEB, 0x15, 0x3D, 0xD6, - 0x51, 0xBB, 0x46, 0x99, 0x10, 0xB4, 0xB3, 0x46, - 0x69, 0xF9, 0x1D, 0xA8, 0x65, 0x4D, 0x1E, 0xB7, - 0x2E, 0xB6, 0xE0, 0x28, 0x00, 0xB3, 0xB0, 0xA7, - 0xD0, 0xA4, 0x8C, 0x83, 0x68, 0x54, 0xD3, 0xA8, - 0x3E, 0x65, 0x56, 0x9C, 0xB7, 0x23, 0x0B, 0xB4, - 0x4F, 0x3F, 0x14, 0x3A, 0x6D, 0xEC, 0x5F, 0x2C, - 0x39, 0xAB, 0x90, 0xF2, 0x74, 0xF2, 0x08, 0x8B, - 0xD3, 0xD6, 0xA6, 0xFC, 0xA0, 0x07, 0x02, 0x73, - 0xBE, 0xDC, 0x84, 0x77, 0x7F, 0xB5, 0x2E, 0x3C, - 0x55, 0x8B, 0x0A, 0xE0, 0x61, 0x83, 0xD5, 0xA4, - 0x8D, 0x45, 0x2F, 0x68, 0xE1, 0x52, 0x07, 0xF8, - 0x61, 0x62, 0x7A, 0xCA, 0x14, 0x27, 0x96, 0x30, - 0xF8, 0x2E, 0xC3, 0xA0, 0xCA, 0x07, 0x86, 0x33, - 0xB6, 0x00, 0xAF, 0xA7, 0x97, 0x43, 0xA6, 0x00, - 0x21, 0x5B, 0xE5, 0x63, 0x74, 0x58, 0xCE, 0x2C, - 0xE8, 0xAF, 0xF5, 0xA0, 0x8E, 0xB5, 0x01, 0x7B, - 0x2C, 0x76, 0x65, 0x77, 0x47, 0x9F, 0x8D, 0xC6, - 0xBF, 0x9F, 0x5C, 0xC7, 0x50, 0x89, 0x93, 0x21, - 0x61, 0xB9, 0x6C, 0xEA, 0x40, 0x66, 0x20, 0xAE, - 0xDB, 0x63, 0x04, 0x07, 0xF7, 0x68, 0x7E, 0xBB, - 0xB4, 0x81, 0x4C, 0x79, 0x81, 0x63, 0x7A, 0x48, - 0xA9, 0x0D, 0xE6, 0x80, 0x31, 0xE0, 0x62, 0xA7, - 0xAF, 0x76, 0x12, 0xB4, 0xF5, 0xC7, 0xA6, 0xDA, - 0x86, 0xBD, 0x13, 0x65, 0x29, 0xE6, 0x42, 0x95, - 0xA5, 0x61, 0x3E, 0xA7, 0x3B, 0xD3, 0xD4, 0x44, - 0x8C, 0xB8, 0x1F, 0x24, 0x31, 0x35, 0xC0, 0xA6, - 0x60, 0xBE, 0xB9, 0xC1, 0x7E, 0x65, 0x1D, 0xEF, - 0x46, 0x9A, 0x7D, 0x90, 0xA1, 0x5D, 0x34, 0x81, - 0x09, 0x0B, 0xCB, 0xF2, 0x27, 0x01, 0x23, 0x28, - 0x94, 0x1F, 0xA4, 0x6F, 0x39, 0xC5, 0x00, 0x6A, - 0xD9, 0x3D, 0x45, 0x8A, 0xA6, 0xAD, 0xD6, 0x55, - 0x86, 0x2B, 0x41, 0x8C, 0x30, 0x94, 0xF5, 0x51, - 0x46, 0x0D, 0xF2, 0x15, 0x3A, 0x58, 0x10, 0xA7, - 0xDA, 0x74, 0xF0, 0x61, 0x4C, 0x25, 0x88, 0xBE, - 0x49, 0xDC, 0x6F, 0x5E, 0x88, 0x15, 0x46, 0x42, - 0xBD, 0x1D, 0x37, 0x62, 0x56, 0x33, 0x26, 0x43, - 0x35, 0x07, 0x15, 0x6A, 0x57, 0xC5, 0x76, 0x94, - 0xBD, 0xD2, 0x6E, 0x7A, 0x24, 0x6F, 0xEB, 0x72, - 0x3A, 0xED, 0x67, 0xB0, 0x48, 0x87, 0xC8, 0xE4, - 0x76, 0xB4, 0x8C, 0xAB, 0x59, 0xE5, 0x36, 0x2F, - 0x26, 0xA9, 0xEF, 0x50, 0xC2, 0xBC, 0x80, 0xBA, - 0x14, 0x62, 0x26, 0x21, 0x6F, 0xE6, 0x29, 0x68, - 0xA6, 0x0D, 0x04, 0xE8, 0xC1, 0x70, 0xD7, 0x41, - 0xC7, 0xA2, 0xB0, 0xE1, 0xAB, 0xDA, 0xC9, 0x68 - }; - static const byte dk_768[WC_ML_KEM_768_PRIVATE_KEY_SIZE] = { - 0x98, 0xA1, 0xB2, 0xDA, 0x4A, 0x65, 0xCF, 0xB5, - 0x84, 0x5E, 0xA7, 0x31, 0x1E, 0x6A, 0x06, 0xDB, - 0x73, 0x1F, 0x15, 0x90, 0xC4, 0x1E, 0xE7, 0x4B, - 0xA1, 0x07, 0x82, 0x71, 0x5B, 0x35, 0xA3, 0x10, - 0x2D, 0xF6, 0x37, 0x87, 0x2B, 0xE6, 0x5B, 0xAB, - 0x37, 0xA1, 0xDE, 0x25, 0x11, 0xD7, 0x03, 0xC7, - 0x02, 0x47, 0xB3, 0x5E, 0xF2, 0x74, 0x35, 0x48, - 0x50, 0x24, 0xD9, 0x3F, 0xD9, 0xE7, 0x7C, 0x43, - 0x80, 0x4F, 0x37, 0x17, 0x49, 0xBA, 0x00, 0xB2, - 0x0A, 0x8C, 0x5C, 0x58, 0x8B, 0xC9, 0xAB, 0xE0, - 0x68, 0xAE, 0xAA, 0xA9, 0x38, 0x51, 0x7E, 0xBF, - 0xE5, 0x3B, 0x6B, 0x66, 0x32, 0x82, 0x90, 0x3D, - 0xCD, 0x18, 0x97, 0x36, 0xD7, 0x29, 0x68, 0x16, - 0xC7, 0x33, 0xA1, 0xC7, 0x7C, 0x63, 0x75, 0xE5, - 0x39, 0x7C, 0x0F, 0x18, 0x9B, 0xBF, 0xE4, 0x76, - 0x43, 0xA6, 0x1F, 0x58, 0xF8, 0xA3, 0xC6, 0x91, - 0x1B, 0xE4, 0x61, 0x1A, 0x8C, 0x7B, 0xC0, 0x50, - 0x02, 0x11, 0x63, 0xD0, 0xA4, 0x04, 0xDC, 0x14, - 0x06, 0x57, 0x48, 0xFF, 0x29, 0xBE, 0x60, 0xD2, - 0xB9, 0xFD, 0xCC, 0x8F, 0xFD, 0x98, 0xC5, 0x87, - 0xF3, 0x8C, 0x67, 0x11, 0x57, 0x86, 0x46, 0x4B, - 0xDB, 0x34, 0x2B, 0x17, 0xE8, 0x97, 0xD6, 0x46, - 0x17, 0xCB, 0xFB, 0x11, 0x79, 0x73, 0xA5, 0x45, - 0x89, 0x77, 0xA7, 0xD7, 0x61, 0x7A, 0x1B, 0x4D, - 0x83, 0xBA, 0x03, 0xC6, 0x11, 0x13, 0x8A, 0x46, - 0x73, 0xB1, 0xEB, 0x34, 0xB0, 0x78, 0x03, 0x3F, - 0x97, 0xCF, 0xFE, 0x80, 0xC1, 0x46, 0xA2, 0x69, - 0x43, 0xF8, 0x42, 0xB9, 0x76, 0x32, 0x7B, 0xF1, - 0xCB, 0xC6, 0x01, 0x19, 0x52, 0x5B, 0xB9, 0xA3, - 0xC0, 0x34, 0x93, 0x34, 0x90, 0x00, 0xDD, 0x8F, - 0x51, 0xBA, 0x21, 0xA2, 0xE9, 0x23, 0x61, 0x76, - 0x23, 0x24, 0x60, 0x0E, 0x0C, 0x13, 0xAA, 0xA6, - 0xCB, 0x69, 0xBF, 0xB2, 0x42, 0x76, 0x48, 0x3F, - 0x6B, 0x02, 0x42, 0x12, 0x59, 0xB7, 0x58, 0x52, - 0x63, 0xC1, 0xA0, 0x28, 0xD6, 0x82, 0xC5, 0x08, - 0xBB, 0xC2, 0x80, 0x1A, 0x56, 0xE9, 0x8B, 0x8F, - 0x62, 0x0B, 0x04, 0x83, 0xD7, 0x9B, 0x5A, 0xD8, - 0x58, 0x5A, 0xC0, 0xA4, 0x75, 0xBA, 0xC7, 0x78, - 0x65, 0x19, 0x41, 0x96, 0x33, 0x87, 0x91, 0xB7, - 0x98, 0x5A, 0x05, 0xD1, 0x09, 0x39, 0x5C, 0xCA, - 0x89, 0x32, 0x72, 0x2A, 0x91, 0x95, 0x0D, 0x37, - 0xE1, 0x2B, 0x89, 0x14, 0x20, 0xA5, 0x2B, 0x62, - 0xCB, 0xFA, 0x81, 0x5D, 0xF6, 0x17, 0x4C, 0xE0, - 0x0E, 0x68, 0xBC, 0xA7, 0x5D, 0x48, 0x38, 0xCA, - 0x28, 0x0F, 0x71, 0x3C, 0x7E, 0x69, 0x24, 0xAF, - 0xD9, 0x5B, 0xAA, 0x0D, 0x01, 0xAD, 0xA6, 0x37, - 0xB1, 0x58, 0x34, 0x70, 0x34, 0xC0, 0xAB, 0x1A, - 0x71, 0x83, 0x33, 0x1A, 0x82, 0x0A, 0xCB, 0xCB, - 0x83, 0x19, 0x3A, 0x1A, 0x94, 0xC8, 0xF7, 0xE3, - 0x84, 0xAE, 0xD0, 0xC3, 0x5E, 0xD3, 0xCB, 0x33, - 0x97, 0xBB, 0x63, 0x80, 0x86, 0xE7, 0xA3, 0x5A, - 0x64, 0x08, 0xA3, 0xA4, 0xB9, 0x0C, 0xE9, 0x53, - 0x70, 0x7C, 0x19, 0xBC, 0x46, 0xC3, 0xB2, 0xDA, - 0x3B, 0x2E, 0xE3, 0x23, 0x19, 0xC5, 0x6B, 0x92, - 0x80, 0x32, 0xB5, 0xED, 0x12, 0x56, 0xD0, 0x75, - 0x3D, 0x34, 0x14, 0x23, 0xE9, 0xDB, 0x13, 0x9D, - 0xE7, 0x71, 0x4F, 0xF0, 0x75, 0xCA, 0xF5, 0x8F, - 0xD9, 0xF5, 0x7D, 0x1A, 0x54, 0x01, 0x9B, 0x59, - 0x26, 0x40, 0x68, 0x30, 0xDA, 0xE2, 0x9A, 0x87, - 0x53, 0x02, 0xA8, 0x12, 0x56, 0xF4, 0xD6, 0xCF, - 0x5E, 0x74, 0x03, 0x4E, 0xA6, 0x14, 0xBF, 0x70, - 0xC2, 0x76, 0x4B, 0x20, 0xC9, 0x58, 0x9C, 0xDB, - 0x5C, 0x25, 0x76, 0x1A, 0x04, 0xE5, 0x82, 0x92, - 0x90, 0x7C, 0x57, 0x8A, 0x94, 0xA3, 0x58, 0x36, - 0xBE, 0xE3, 0x11, 0x2D, 0xC2, 0xC3, 0xAE, 0x21, - 0x92, 0xC9, 0xDE, 0xAA, 0x30, 0x4B, 0x29, 0xC7, - 0xFE, 0xA1, 0xBD, 0xF4, 0x7B, 0x3B, 0x6B, 0xCB, - 0xA2, 0xC0, 0xE5, 0x5C, 0x9C, 0xDB, 0x6D, 0xE7, - 0x14, 0x9E, 0x9C, 0xB1, 0x79, 0x17, 0x71, 0x8F, - 0x12, 0xC8, 0x03, 0x2D, 0xE1, 0xAD, 0xE0, 0x64, - 0x8D, 0x40, 0x55, 0x19, 0xC7, 0x07, 0x19, 0xBE, - 0xCC, 0x70, 0x18, 0x45, 0xCF, 0x9F, 0x4B, 0x91, - 0x2F, 0xE7, 0x19, 0x83, 0xCA, 0x34, 0xF9, 0x01, - 0x8C, 0x7C, 0xA7, 0xBB, 0x2F, 0x6C, 0x5D, 0x7F, - 0x8C, 0x5B, 0x29, 0x73, 0x59, 0xEC, 0x75, 0x20, - 0x9C, 0x25, 0x43, 0xFF, 0x11, 0xC4, 0x24, 0x49, - 0x77, 0xC5, 0x96, 0x95, 0x24, 0xEC, 0x45, 0x4D, - 0x44, 0xC3, 0x23, 0xFC, 0xCA, 0x94, 0xAC, 0xAC, - 0x27, 0x3A, 0x0E, 0xC4, 0x9B, 0x4A, 0x8A, 0x58, - 0x5B, 0xCE, 0x7A, 0x5B, 0x30, 0x5C, 0x04, 0xC3, - 0x50, 0x64, 0x22, 0x58, 0x03, 0x57, 0x01, 0x6A, - 0x85, 0x0C, 0x3F, 0x7E, 0xE1, 0x72, 0x05, 0xA7, - 0x7B, 0x29, 0x1C, 0x77, 0x31, 0xC9, 0x83, 0x6C, - 0x02, 0xAE, 0xE5, 0x40, 0x6F, 0x63, 0xC6, 0xA0, - 0x7A, 0x21, 0x43, 0x82, 0xAA, 0x15, 0x33, 0x6C, - 0x05, 0xD1, 0x04, 0x55, 0x88, 0x10, 0x76, 0x45, - 0xEA, 0x7D, 0xE6, 0x87, 0x0F, 0xC0, 0xE5, 0x5E, - 0x15, 0x40, 0x97, 0x43, 0x01, 0xC4, 0x2E, 0xC1, - 0x41, 0x05, 0x51, 0x86, 0x80, 0xF6, 0x88, 0xAB, - 0xE4, 0xCE, 0x45, 0x37, 0x38, 0xFE, 0x47, 0x1B, - 0x87, 0xFC, 0x31, 0xF5, 0xC6, 0x8A, 0x39, 0xE6, - 0x8A, 0xF5, 0x1B, 0x02, 0x40, 0xB9, 0x0E, 0x03, - 0x64, 0xB0, 0x4B, 0xAC, 0x43, 0xD6, 0xFB, 0x68, - 0xAB, 0x65, 0xAE, 0x02, 0x8B, 0x62, 0xBD, 0x68, - 0x3B, 0x7D, 0x28, 0xAD, 0x38, 0x80, 0x6B, 0xEE, - 0x72, 0x5B, 0x5B, 0x24, 0x16, 0xA8, 0xD7, 0x9C, - 0x16, 0xEC, 0x2A, 0x99, 0xEA, 0x4A, 0x8D, 0x92, - 0xA2, 0xF5, 0x05, 0x2E, 0x67, 0xF9, 0x73, 0x52, - 0x28, 0x97, 0x61, 0xC5, 0xC3, 0x9F, 0xC5, 0xC7, - 0x42, 0xE9, 0xC0, 0xA7, 0x40, 0xCA, 0x59, 0xFC, - 0x01, 0x82, 0xF7, 0x09, 0xD0, 0x1B, 0x51, 0x87, - 0xF0, 0x00, 0x63, 0xDA, 0xAB, 0x39, 0x75, 0x96, - 0xEE, 0xA4, 0xA3, 0x1B, 0xDB, 0xCB, 0xD4, 0xC1, - 0xBB, 0x0C, 0x55, 0xBE, 0x7C, 0x68, 0x50, 0xFD, - 0xA9, 0x32, 0x6B, 0x35, 0x3E, 0x28, 0x8C, 0x50, - 0x13, 0x22, 0x6C, 0x3C, 0x39, 0x23, 0xA7, 0x91, - 0x60, 0x9E, 0x80, 0x02, 0xE7, 0x3A, 0x5F, 0x7B, - 0x6B, 0xB4, 0xA8, 0x77, 0xB1, 0xFD, 0xF5, 0x3B, - 0xB2, 0xBA, 0xB3, 0xDD, 0x42, 0x4D, 0x31, 0xBB, - 0xB4, 0x48, 0xE6, 0x09, 0xA6, 0x6B, 0x0E, 0x34, - 0x3C, 0x28, 0x6E, 0x87, 0x60, 0x31, 0x2B, 0x6D, - 0x37, 0xAA, 0x52, 0x01, 0xD2, 0x1F, 0x53, 0x50, - 0x3D, 0x88, 0x38, 0x9A, 0xDC, 0xA2, 0x1C, 0x70, - 0xFB, 0x6C, 0x0F, 0xC9, 0xC6, 0x9D, 0x66, 0x16, - 0xC9, 0xEA, 0x37, 0x80, 0xE3, 0x55, 0x65, 0xC0, - 0xC9, 0x7C, 0x15, 0x17, 0x9C, 0x95, 0x34, 0x3E, - 0xCC, 0x5E, 0x1C, 0x2A, 0x24, 0xDE, 0x46, 0x99, - 0xF6, 0x87, 0x5E, 0xA2, 0xFA, 0x2D, 0xD3, 0xE3, - 0x57, 0xBC, 0x43, 0x91, 0x47, 0x95, 0x20, 0x7E, - 0x02, 0x6B, 0x85, 0x0A, 0x22, 0x37, 0x95, 0x0C, - 0x10, 0x8A, 0x51, 0x2F, 0xC8, 0x8C, 0x22, 0x48, - 0x81, 0x12, 0x60, 0x70, 0x88, 0x18, 0x5F, 0xB0, - 0xE0, 0x9C, 0x2C, 0x41, 0x97, 0xA8, 0x36, 0x87, - 0x26, 0x6B, 0xAB, 0x2E, 0x58, 0x3E, 0x21, 0xC4, - 0x0F, 0x4C, 0xC0, 0x08, 0xFE, 0x65, 0x28, 0x04, - 0xD8, 0x22, 0x3F, 0x15, 0x20, 0xA9, 0x0B, 0x0D, - 0x53, 0x85, 0xC7, 0x55, 0x3C, 0xC7, 0x67, 0xC5, - 0x8D, 0x12, 0x0C, 0xCD, 0x3E, 0xF5, 0xB5, 0xD1, - 0xA6, 0xCD, 0x7B, 0xC0, 0x0D, 0xFF, 0x13, 0x21, - 0xB2, 0xF2, 0xC4, 0x32, 0xB6, 0x4E, 0xFB, 0x8A, - 0x3F, 0x5D, 0x00, 0x64, 0xB3, 0xF3, 0x42, 0x93, - 0x02, 0x6C, 0x85, 0x1C, 0x2D, 0xED, 0x68, 0xB9, - 0xDF, 0xF4, 0xA2, 0x8F, 0x6A, 0x8D, 0x22, 0x55, - 0x35, 0xE0, 0x47, 0x70, 0x84, 0x43, 0x0C, 0xFF, - 0xDA, 0x0A, 0xC0, 0x55, 0x2F, 0x9A, 0x21, 0x27, - 0x85, 0xB7, 0x49, 0x91, 0x3A, 0x06, 0xFA, 0x22, - 0x74, 0xC0, 0xD1, 0x5B, 0xAD, 0x32, 0x54, 0x58, - 0xD3, 0x23, 0xEF, 0x6B, 0xAE, 0x13, 0xC0, 0x01, - 0x0D, 0x52, 0x5C, 0x1D, 0x52, 0x69, 0x97, 0x3A, - 0xC2, 0x9B, 0xDA, 0x7C, 0x98, 0x37, 0x46, 0x91, - 0x8B, 0xA0, 0xE0, 0x02, 0x58, 0x8E, 0x30, 0x37, - 0x5D, 0x78, 0x32, 0x9E, 0x6B, 0x8B, 0xA8, 0xC4, - 0x46, 0x2A, 0x69, 0x2F, 0xB6, 0x08, 0x38, 0x42, - 0xB8, 0xC8, 0xC9, 0x2C, 0x60, 0xF2, 0x52, 0x72, - 0x6D, 0x14, 0xA0, 0x71, 0xF7, 0xCC, 0x45, 0x25, - 0x58, 0xD5, 0xE7, 0x1A, 0x7B, 0x08, 0x70, 0x62, - 0xEC, 0xB1, 0x38, 0x68, 0x44, 0x58, 0x82, 0x46, - 0x12, 0x64, 0x02, 0xB1, 0xFA, 0x16, 0x37, 0x73, - 0x3C, 0xD5, 0xF6, 0x0C, 0xC8, 0x4B, 0xCB, 0x64, - 0x6A, 0x78, 0x92, 0x61, 0x4D, 0x7C, 0x51, 0xB1, - 0xC7, 0xF1, 0xA2, 0x79, 0x91, 0x32, 0xF1, 0x34, - 0x27, 0xDC, 0x48, 0x21, 0x58, 0xDA, 0x25, 0x44, - 0x70, 0xA5, 0x9E, 0x00, 0xA4, 0xE4, 0x96, 0x86, - 0xFD, 0xC0, 0x77, 0x55, 0x93, 0x67, 0x27, 0x0C, - 0x21, 0x53, 0xF1, 0x10, 0x07, 0x59, 0x2C, 0x9C, - 0x43, 0x10, 0xCF, 0x8A, 0x12, 0xC6, 0xA8, 0x71, - 0x3B, 0xD6, 0xBB, 0x51, 0xF3, 0x12, 0x4F, 0x98, - 0x9B, 0xA0, 0xD5, 0x40, 0x73, 0xCC, 0x24, 0x2E, - 0x09, 0x68, 0x78, 0x0B, 0x87, 0x5A, 0x86, 0x9E, - 0xFB, 0x85, 0x15, 0x86, 0xB9, 0xA8, 0x68, 0xA3, - 0x84, 0xB9, 0xE6, 0x82, 0x1B, 0x20, 0x1B, 0x93, - 0x2C, 0x45, 0x53, 0x69, 0xA7, 0x39, 0xEC, 0x22, - 0x56, 0x9C, 0x97, 0x7C, 0x21, 0x2B, 0x38, 0x18, - 0x71, 0x81, 0x36, 0x56, 0xAF, 0x5B, 0x56, 0x7E, - 0xF8, 0x93, 0xB5, 0x84, 0x62, 0x4C, 0x86, 0x3A, - 0x25, 0x90, 0x00, 0xF1, 0x7B, 0x25, 0x4B, 0x98, - 0xB1, 0x85, 0x09, 0x7C, 0x50, 0xEB, 0xB6, 0x8B, - 0x24, 0x43, 0x42, 0xE0, 0x5D, 0x4D, 0xE5, 0x20, - 0x12, 0x5B, 0x8E, 0x10, 0x33, 0xB1, 0x43, 0x60, - 0x93, 0xAC, 0xE7, 0xCE, 0x8E, 0x71, 0xB4, 0x58, - 0xD5, 0x25, 0x67, 0x33, 0x63, 0x04, 0x5A, 0x3B, - 0x3E, 0xEA, 0x94, 0x55, 0x42, 0x8A, 0x39, 0x87, - 0x05, 0xA4, 0x23, 0x27, 0xAD, 0xB3, 0x77, 0x4B, - 0x70, 0x57, 0xF4, 0x2B, 0x01, 0x7E, 0xC0, 0x73, - 0x9A, 0x98, 0x3F, 0x19, 0xE8, 0x21, 0x4D, 0x09, - 0x19, 0x5F, 0xA2, 0x4D, 0x2D, 0x57, 0x1D, 0xB7, - 0x3C, 0x19, 0xA6, 0xF8, 0x46, 0x0E, 0x50, 0x83, - 0x0D, 0x41, 0x5F, 0x62, 0x7B, 0x88, 0xE9, 0x4A, - 0x7B, 0x15, 0x37, 0x91, 0xA0, 0xC0, 0xC7, 0xE9, - 0x48, 0x4C, 0x74, 0xD5, 0x3C, 0x71, 0x48, 0x89, - 0xF0, 0xE3, 0x21, 0xB6, 0x66, 0x0A, 0x53, 0x2A, - 0x5B, 0xC0, 0xE5, 0x57, 0xFB, 0xCA, 0x35, 0xE2, - 0x9B, 0xC6, 0x11, 0x20, 0x0E, 0xD3, 0xC6, 0x33, - 0x07, 0x7A, 0x4D, 0x87, 0x3C, 0x5C, 0xC6, 0x70, - 0x06, 0xB7, 0x53, 0xBF, 0x6D, 0x6B, 0x7A, 0xF6, - 0xCA, 0x40, 0x2A, 0xB6, 0x18, 0x23, 0x6C, 0x0A, - 0xFF, 0xBC, 0x80, 0x1F, 0x82, 0x22, 0xFB, 0xC3, - 0x6C, 0xE0, 0x98, 0x4E, 0x2B, 0x18, 0xC9, 0x44, - 0xBB, 0xCB, 0xEF, 0x03, 0xB1, 0xE1, 0x36, 0x1C, - 0x1F, 0x44, 0xB0, 0xD7, 0x34, 0xAF, 0xB1, 0x56, - 0x6C, 0xFF, 0x87, 0x44, 0xDA, 0x8B, 0x99, 0x43, - 0xD6, 0xB4, 0x5A, 0x3C, 0x09, 0x03, 0x07, 0x02, - 0xCA, 0x20, 0x1F, 0xFE, 0x20, 0xCB, 0x7E, 0xC5, - 0xB0, 0xD4, 0x14, 0x9E, 0xE2, 0xC2, 0x8E, 0x8B, - 0x23, 0x37, 0x4F, 0x47, 0x1B, 0x57, 0x15, 0x0D, - 0x0E, 0xC9, 0x33, 0x62, 0x61, 0xA2, 0xD5, 0xCB, - 0x84, 0xA3, 0xAC, 0xAC, 0xC4, 0x28, 0x94, 0x73, - 0xA4, 0xC0, 0xAB, 0xC6, 0x17, 0xC9, 0xAB, 0xC1, - 0x78, 0x73, 0x44, 0x34, 0xC8, 0x2E, 0x16, 0x85, - 0x58, 0x8A, 0x5C, 0x2E, 0xA2, 0x67, 0x8F, 0x6B, - 0x3C, 0x22, 0x28, 0x73, 0x31, 0x30, 0xC4, 0x66, - 0xE5, 0xB8, 0x6E, 0xF4, 0x91, 0x15, 0x3E, 0x48, - 0x66, 0x22, 0x47, 0xB8, 0x75, 0xD2, 0x01, 0x02, - 0x0B, 0x56, 0x6B, 0x81, 0xB6, 0x4D, 0x83, 0x9A, - 0xB4, 0x63, 0x3B, 0xAA, 0x8A, 0xCE, 0x20, 0x2B, - 0xAA, 0xB4, 0x49, 0x62, 0x97, 0xF9, 0x80, 0x7A, - 0xDB, 0xBB, 0x1E, 0x33, 0x2C, 0x6F, 0x80, 0x22, - 0xB2, 0xA1, 0x8C, 0xFD, 0xD4, 0xA8, 0x25, 0x30, - 0xB6, 0xD3, 0xF0, 0x07, 0xC3, 0x35, 0x38, 0x98, - 0xD9, 0x66, 0xCC, 0x2C, 0x21, 0xCB, 0x42, 0x44, - 0xBD, 0x00, 0x44, 0x3F, 0x20, 0x98, 0x70, 0xAC, - 0xC4, 0x2B, 0xC3, 0x30, 0x68, 0xC7, 0x24, 0xEC, - 0x17, 0x22, 0x36, 0x19, 0xC1, 0x09, 0x3C, 0xCA, - 0x6A, 0xEB, 0x29, 0x50, 0x06, 0x64, 0xD1, 0x22, - 0x50, 0x36, 0xB4, 0xB8, 0x10, 0x91, 0x90, 0x69, - 0x69, 0x48, 0x1F, 0x1C, 0x72, 0x3C, 0x14, 0x0B, - 0x9D, 0x6C, 0x16, 0x8F, 0x5B, 0x64, 0xBE, 0xA6, - 0x9C, 0x5F, 0xD6, 0x38, 0x5D, 0xF7, 0x36, 0x4B, - 0x87, 0x23, 0xBC, 0xC8, 0x5E, 0x03, 0x8C, 0x7E, - 0x46, 0x4A, 0x90, 0x0D, 0x68, 0xA2, 0x12, 0x78, - 0x18, 0x99, 0x42, 0x17, 0xAE, 0xC8, 0xBD, 0xB3, - 0x9A, 0x97, 0x0A, 0x99, 0x63, 0xDE, 0x93, 0x68, - 0x8E, 0x2A, 0xC8, 0x2A, 0xBC, 0xC2, 0x2F, 0xB9, - 0x27, 0x7B, 0xA2, 0x20, 0x09, 0xE8, 0x78, 0x38, - 0x1A, 0x38, 0x16, 0x39, 0x01, 0xC7, 0xD4, 0xC8, - 0x50, 0x19, 0x53, 0x8D, 0x35, 0xCA, 0xAE, 0x9C, - 0x41, 0xAF, 0x8C, 0x92, 0x9E, 0xE2, 0x0B, 0xB0, - 0x8C, 0xA6, 0x19, 0xE7, 0x2C, 0x2F, 0x22, 0x62, - 0xC1, 0xC9, 0x93, 0x85, 0x72, 0x55, 0x1A, 0xC0, - 0x2D, 0xC9, 0x26, 0x8F, 0xBC, 0xC3, 0x5D, 0x79, - 0x01, 0x1C, 0x3C, 0x09, 0x0A, 0xD4, 0x0A, 0x4F, - 0x11, 0x1C, 0x9B, 0xE5, 0x5C, 0x42, 0x7E, 0xB7, - 0x96, 0xC1, 0x93, 0x2D, 0x86, 0x73, 0x57, 0x9A, - 0xF1, 0xB4, 0xC6, 0x38, 0xB0, 0x94, 0x44, 0x89, - 0x01, 0x2A, 0x25, 0x59, 0xA3, 0xB0, 0x24, 0x81, - 0xB0, 0x1A, 0xC3, 0x0B, 0xA8, 0x96, 0x0F, 0x80, - 0xC0, 0xC2, 0xB3, 0x94, 0x7D, 0x36, 0xA1, 0x2C, - 0x08, 0x04, 0x98, 0xBE, 0xE4, 0x48, 0x71, 0x6C, - 0x97, 0x34, 0x16, 0xC8, 0x24, 0x28, 0x04, 0xA3, - 0xDA, 0x09, 0x9E, 0xE1, 0x37, 0xB0, 0xBA, 0x90, - 0xFE, 0x4A, 0x5C, 0x6A, 0x89, 0x20, 0x02, 0x76, - 0xA0, 0xCF, 0xB6, 0x43, 0xEC, 0x2C, 0x56, 0xA2, - 0xD7, 0x08, 0xD7, 0xB4, 0x37, 0x3E, 0x44, 0xC1, - 0x50, 0x2A, 0x76, 0x3A, 0x60, 0x05, 0x86, 0xE6, - 0xCD, 0xA6, 0x27, 0x38, 0x97, 0xD4, 0x44, 0x48, - 0x28, 0x7D, 0xC2, 0xE6, 0x02, 0xDC, 0x39, 0x20, - 0x0B, 0xF6, 0x16, 0x62, 0x36, 0x55, 0x9F, 0xD1, - 0x2A, 0x60, 0x89, 0x2A, 0xEB, 0x15, 0x3D, 0xD6, - 0x51, 0xBB, 0x46, 0x99, 0x10, 0xB4, 0xB3, 0x46, - 0x69, 0xF9, 0x1D, 0xA8, 0x65, 0x4D, 0x1E, 0xB7, - 0x2E, 0xB6, 0xE0, 0x28, 0x00, 0xB3, 0xB0, 0xA7, - 0xD0, 0xA4, 0x8C, 0x83, 0x68, 0x54, 0xD3, 0xA8, - 0x3E, 0x65, 0x56, 0x9C, 0xB7, 0x23, 0x0B, 0xB4, - 0x4F, 0x3F, 0x14, 0x3A, 0x6D, 0xEC, 0x5F, 0x2C, - 0x39, 0xAB, 0x90, 0xF2, 0x74, 0xF2, 0x08, 0x8B, - 0xD3, 0xD6, 0xA6, 0xFC, 0xA0, 0x07, 0x02, 0x73, - 0xBE, 0xDC, 0x84, 0x77, 0x7F, 0xB5, 0x2E, 0x3C, - 0x55, 0x8B, 0x0A, 0xE0, 0x61, 0x83, 0xD5, 0xA4, - 0x8D, 0x45, 0x2F, 0x68, 0xE1, 0x52, 0x07, 0xF8, - 0x61, 0x62, 0x7A, 0xCA, 0x14, 0x27, 0x96, 0x30, - 0xF8, 0x2E, 0xC3, 0xA0, 0xCA, 0x07, 0x86, 0x33, - 0xB6, 0x00, 0xAF, 0xA7, 0x97, 0x43, 0xA6, 0x00, - 0x21, 0x5B, 0xE5, 0x63, 0x74, 0x58, 0xCE, 0x2C, - 0xE8, 0xAF, 0xF5, 0xA0, 0x8E, 0xB5, 0x01, 0x7B, - 0x2C, 0x76, 0x65, 0x77, 0x47, 0x9F, 0x8D, 0xC6, - 0xBF, 0x9F, 0x5C, 0xC7, 0x50, 0x89, 0x93, 0x21, - 0x61, 0xB9, 0x6C, 0xEA, 0x40, 0x66, 0x20, 0xAE, - 0xDB, 0x63, 0x04, 0x07, 0xF7, 0x68, 0x7E, 0xBB, - 0xB4, 0x81, 0x4C, 0x79, 0x81, 0x63, 0x7A, 0x48, - 0xA9, 0x0D, 0xE6, 0x80, 0x31, 0xE0, 0x62, 0xA7, - 0xAF, 0x76, 0x12, 0xB4, 0xF5, 0xC7, 0xA6, 0xDA, - 0x86, 0xBD, 0x13, 0x65, 0x29, 0xE6, 0x42, 0x95, - 0xA5, 0x61, 0x3E, 0xA7, 0x3B, 0xD3, 0xD4, 0x44, - 0x8C, 0xB8, 0x1F, 0x24, 0x31, 0x35, 0xC0, 0xA6, - 0x60, 0xBE, 0xB9, 0xC1, 0x7E, 0x65, 0x1D, 0xEF, - 0x46, 0x9A, 0x7D, 0x90, 0xA1, 0x5D, 0x34, 0x81, - 0x09, 0x0B, 0xCB, 0xF2, 0x27, 0x01, 0x23, 0x28, - 0x94, 0x1F, 0xA4, 0x6F, 0x39, 0xC5, 0x00, 0x6A, - 0xD9, 0x3D, 0x45, 0x8A, 0xA6, 0xAD, 0xD6, 0x55, - 0x86, 0x2B, 0x41, 0x8C, 0x30, 0x94, 0xF5, 0x51, - 0x46, 0x0D, 0xF2, 0x15, 0x3A, 0x58, 0x10, 0xA7, - 0xDA, 0x74, 0xF0, 0x61, 0x4C, 0x25, 0x88, 0xBE, - 0x49, 0xDC, 0x6F, 0x5E, 0x88, 0x15, 0x46, 0x42, - 0xBD, 0x1D, 0x37, 0x62, 0x56, 0x33, 0x26, 0x43, - 0x35, 0x07, 0x15, 0x6A, 0x57, 0xC5, 0x76, 0x94, - 0xBD, 0xD2, 0x6E, 0x7A, 0x24, 0x6F, 0xEB, 0x72, - 0x3A, 0xED, 0x67, 0xB0, 0x48, 0x87, 0xC8, 0xE4, - 0x76, 0xB4, 0x8C, 0xAB, 0x59, 0xE5, 0x36, 0x2F, - 0x26, 0xA9, 0xEF, 0x50, 0xC2, 0xBC, 0x80, 0xBA, - 0x14, 0x62, 0x26, 0x21, 0x6F, 0xE6, 0x29, 0x68, - 0xA6, 0x0D, 0x04, 0xE8, 0xC1, 0x70, 0xD7, 0x41, - 0xC7, 0xA2, 0xB0, 0xE1, 0xAB, 0xDA, 0xC9, 0x68, - 0xE2, 0x90, 0x20, 0x83, 0x9D, 0x05, 0x2F, 0xA3, - 0x72, 0x58, 0x56, 0x27, 0xF8, 0xB5, 0x9E, 0xE3, - 0x12, 0xAE, 0x41, 0x4C, 0x97, 0x9D, 0x82, 0x5F, - 0x06, 0xA6, 0x92, 0x9A, 0x79, 0x62, 0x57, 0x18, - 0xA8, 0x57, 0x68, 0xF3, 0x48, 0x6B, 0xD3, 0x2A, - 0x01, 0xBF, 0x9A, 0x8F, 0x21, 0xEA, 0x93, 0x8E, - 0x64, 0x8E, 0xAE, 0x4E, 0x54, 0x48, 0xC3, 0x4C, - 0x3E, 0xB8, 0x88, 0x20, 0xB1, 0x59, 0xEE, 0xDD - }; -#endif -#ifndef WOLFSSL_NO_ML_KEM_1024 - static const byte seed_1024[WC_ML_KEM_MAKEKEY_RAND_SZ] = { - /* d */ - 0x49, 0xAC, 0x8B, 0x99, 0xBB, 0x1E, 0x6A, 0x8E, - 0xA8, 0x18, 0x26, 0x1F, 0x8B, 0xE6, 0x8B, 0xDE, - 0xAA, 0x52, 0x89, 0x7E, 0x7E, 0xC6, 0xC4, 0x0B, - 0x53, 0x0B, 0xC7, 0x60, 0xAB, 0x77, 0xDC, 0xE3, - /* z */ - 0x99, 0xE3, 0x24, 0x68, 0x84, 0x18, 0x1F, 0x8E, - 0x1D, 0xD4, 0x4E, 0x0C, 0x76, 0x29, 0x09, 0x33, - 0x30, 0x22, 0x1F, 0xD6, 0x7D, 0x9B, 0x7D, 0x6E, - 0x15, 0x10, 0xB2, 0xDB, 0xAD, 0x87, 0x62, 0xF7 - }; - static const byte ek_1024[WC_ML_KEM_1024_PUBLIC_KEY_SIZE] = { - 0xA0, 0x41, 0x84, 0xD4, 0xBC, 0x7B, 0x53, 0x2A, - 0x0F, 0x70, 0xA5, 0x4D, 0x77, 0x57, 0xCD, 0xE6, - 0x17, 0x5A, 0x68, 0x43, 0xB8, 0x61, 0xCB, 0x2B, - 0xC4, 0x83, 0x0C, 0x00, 0x12, 0x55, 0x4C, 0xFC, - 0x5D, 0x2C, 0x8A, 0x20, 0x27, 0xAA, 0x3C, 0xD9, - 0x67, 0x13, 0x0E, 0x9B, 0x96, 0x24, 0x1B, 0x11, - 0xC4, 0x32, 0x0C, 0x76, 0x49, 0xCC, 0x23, 0xA7, - 0x1B, 0xAF, 0xE6, 0x91, 0xAF, 0xC0, 0x8E, 0x68, - 0x0B, 0xCE, 0xF4, 0x29, 0x07, 0x00, 0x07, 0x18, - 0xE4, 0xEA, 0xCE, 0x8D, 0xA2, 0x82, 0x14, 0x19, - 0x7B, 0xE1, 0xC2, 0x69, 0xDA, 0x9C, 0xB5, 0x41, - 0xE1, 0xA3, 0xCE, 0x97, 0xCF, 0xAD, 0xF9, 0xC6, - 0x05, 0x87, 0x80, 0xFE, 0x67, 0x93, 0xDB, 0xFA, - 0x82, 0x18, 0xA2, 0x76, 0x0B, 0x80, 0x2B, 0x8D, - 0xA2, 0xAA, 0x27, 0x1A, 0x38, 0x77, 0x25, 0x23, - 0xA7, 0x67, 0x36, 0xA7, 0xA3, 0x1B, 0x9D, 0x30, - 0x37, 0xAD, 0x21, 0xCE, 0xBB, 0x11, 0xA4, 0x72, - 0xB8, 0x79, 0x2E, 0xB1, 0x75, 0x58, 0xB9, 0x40, - 0xE7, 0x08, 0x83, 0xF2, 0x64, 0x59, 0x2C, 0x68, - 0x9B, 0x24, 0x0B, 0xB4, 0x3D, 0x54, 0x08, 0xBF, - 0x44, 0x64, 0x32, 0xF4, 0x12, 0xF4, 0xB9, 0xA5, - 0xF6, 0x86, 0x5C, 0xC2, 0x52, 0xA4, 0x3C, 0xF4, - 0x0A, 0x32, 0x03, 0x91, 0x55, 0x55, 0x91, 0xD6, - 0x75, 0x61, 0xFD, 0xD0, 0x53, 0x53, 0xAB, 0x6B, - 0x01, 0x9B, 0x3A, 0x08, 0xA7, 0x33, 0x53, 0xD5, - 0x1B, 0x61, 0x13, 0xAB, 0x2F, 0xA5, 0x1D, 0x97, - 0x56, 0x48, 0xEE, 0x25, 0x4A, 0xF8, 0x9A, 0x23, - 0x05, 0x04, 0xA2, 0x36, 0xA4, 0x65, 0x82, 0x57, - 0x74, 0x0B, 0xDC, 0xBB, 0xE1, 0x70, 0x8A, 0xB0, - 0x22, 0xC3, 0xC5, 0x88, 0xA4, 0x10, 0xDB, 0x3B, - 0x9C, 0x30, 0x8A, 0x06, 0x27, 0x5B, 0xDF, 0x5B, - 0x48, 0x59, 0xD3, 0xA2, 0x61, 0x7A, 0x29, 0x5E, - 0x1A, 0x22, 0xF9, 0x01, 0x98, 0xBA, 0xD0, 0x16, - 0x6F, 0x4A, 0x94, 0x34, 0x17, 0xC5, 0xB8, 0x31, - 0x73, 0x6C, 0xB2, 0xC8, 0x58, 0x0A, 0xBF, 0xDE, - 0x57, 0x14, 0xB5, 0x86, 0xAB, 0xEE, 0xC0, 0xA1, - 0x75, 0xA0, 0x8B, 0xC7, 0x10, 0xC7, 0xA2, 0x89, - 0x5D, 0xE9, 0x3A, 0xC4, 0x38, 0x06, 0x1B, 0xF7, - 0x76, 0x5D, 0x0D, 0x21, 0xCD, 0x41, 0x81, 0x67, - 0xCA, 0xF8, 0x9D, 0x1E, 0xFC, 0x34, 0x48, 0xBC, - 0xBB, 0x96, 0xD6, 0x9B, 0x3E, 0x01, 0x0C, 0x82, - 0xD1, 0x5C, 0xAB, 0x6C, 0xAC, 0xC6, 0x79, 0x9D, - 0x36, 0x39, 0x66, 0x9A, 0x5B, 0x21, 0xA6, 0x33, - 0xC8, 0x65, 0xF8, 0x59, 0x3B, 0x5B, 0x7B, 0xC8, - 0x00, 0x26, 0x2B, 0xB8, 0x37, 0xA9, 0x24, 0xA6, - 0xC5, 0x44, 0x0E, 0x4F, 0xC7, 0x3B, 0x41, 0xB2, - 0x30, 0x92, 0xC3, 0x91, 0x2F, 0x4C, 0x6B, 0xEB, - 0xB4, 0xC7, 0xB4, 0xC6, 0x29, 0x08, 0xB0, 0x37, - 0x75, 0x66, 0x6C, 0x22, 0x22, 0x0D, 0xF9, 0xC8, - 0x88, 0x23, 0xE3, 0x44, 0xC7, 0x30, 0x83, 0x32, - 0x34, 0x5C, 0x8B, 0x79, 0x5D, 0x34, 0xE8, 0xC0, - 0x51, 0xF2, 0x1F, 0x5A, 0x21, 0xC2, 0x14, 0xB6, - 0x98, 0x41, 0x35, 0x87, 0x09, 0xB1, 0xC3, 0x05, - 0xB3, 0x2C, 0xC2, 0xC3, 0x80, 0x6A, 0xE9, 0xCC, - 0xD3, 0x81, 0x9F, 0xFF, 0x45, 0x07, 0xFE, 0x52, - 0x0F, 0xBF, 0xC2, 0x71, 0x99, 0xBC, 0x23, 0xBE, - 0x6B, 0x9B, 0x2D, 0x2A, 0xC1, 0x71, 0x75, 0x79, - 0xAC, 0x76, 0x92, 0x79, 0xE2, 0xA7, 0xAA, 0xC6, - 0x8A, 0x37, 0x1A, 0x47, 0xBA, 0x3A, 0x7D, 0xBE, - 0x01, 0x6F, 0x14, 0xE1, 0xA7, 0x27, 0x33, 0x36, - 0x63, 0xC4, 0xA5, 0xCD, 0x1A, 0x0F, 0x88, 0x36, - 0xCF, 0x7B, 0x5C, 0x49, 0xAC, 0x51, 0x48, 0x5C, - 0xA6, 0x03, 0x45, 0xC9, 0x90, 0xE0, 0x68, 0x88, - 0x72, 0x00, 0x03, 0x73, 0x13, 0x22, 0xC5, 0xB8, - 0xCD, 0x5E, 0x69, 0x07, 0xFD, 0xA1, 0x15, 0x7F, - 0x46, 0x8F, 0xD3, 0xFC, 0x20, 0xFA, 0x81, 0x75, - 0xEE, 0xC9, 0x5C, 0x29, 0x1A, 0x26, 0x2B, 0xA8, - 0xC5, 0xBE, 0x99, 0x08, 0x72, 0x41, 0x89, 0x30, - 0x85, 0x23, 0x39, 0xD8, 0x8A, 0x19, 0xB3, 0x7F, - 0xEF, 0xA3, 0xCF, 0xE8, 0x21, 0x75, 0xC2, 0x24, - 0x40, 0x7C, 0xA4, 0x14, 0xBA, 0xEB, 0x37, 0x92, - 0x3B, 0x4D, 0x2D, 0x83, 0x13, 0x4A, 0xE1, 0x54, - 0xE4, 0x90, 0xA9, 0xB4, 0x5A, 0x05, 0x63, 0xB0, - 0x6C, 0x95, 0x3C, 0x33, 0x01, 0x45, 0x0A, 0x21, - 0x76, 0xA0, 0x7C, 0x61, 0x4A, 0x74, 0xE3, 0x47, - 0x8E, 0x48, 0x50, 0x9F, 0x9A, 0x60, 0xAE, 0x94, - 0x5A, 0x8E, 0xBC, 0x78, 0x15, 0x12, 0x1D, 0x90, - 0xA3, 0xB0, 0xE0, 0x70, 0x91, 0xA0, 0x96, 0xCF, - 0x02, 0xC5, 0x7B, 0x25, 0xBC, 0xA5, 0x81, 0x26, - 0xAD, 0x0C, 0x62, 0x9C, 0xE1, 0x66, 0xA7, 0xED, - 0xB4, 0xB3, 0x32, 0x21, 0xA0, 0xD3, 0xF7, 0x2B, - 0x85, 0xD5, 0x62, 0xEC, 0x69, 0x8B, 0x7D, 0x0A, - 0x91, 0x3D, 0x73, 0x80, 0x6F, 0x1C, 0x5C, 0x87, - 0xB3, 0x8E, 0xC0, 0x03, 0xCB, 0x30, 0x3A, 0x3D, - 0xC5, 0x1B, 0x4B, 0x35, 0x35, 0x6A, 0x67, 0x82, - 0x6D, 0x6E, 0xDA, 0xA8, 0xFE, 0xB9, 0x3B, 0x98, - 0x49, 0x3B, 0x2D, 0x1C, 0x11, 0xB6, 0x76, 0xA6, - 0xAD, 0x95, 0x06, 0xA1, 0xAA, 0xAE, 0x13, 0xA8, - 0x24, 0xC7, 0xC0, 0x8D, 0x1C, 0x6C, 0x2C, 0x4D, - 0xBA, 0x96, 0x42, 0xC7, 0x6E, 0xA7, 0xF6, 0xC8, - 0x26, 0x4B, 0x64, 0xA2, 0x3C, 0xCC, 0xA9, 0xA7, - 0x46, 0x35, 0xFC, 0xBF, 0x03, 0xE0, 0x0F, 0x1B, - 0x57, 0x22, 0xB2, 0x14, 0x37, 0x67, 0x90, 0x79, - 0x3B, 0x2C, 0x4F, 0x0A, 0x13, 0xB5, 0xC4, 0x07, - 0x60, 0xB4, 0x21, 0x8E, 0x1D, 0x25, 0x94, 0xDC, - 0xB3, 0x0A, 0x70, 0xD9, 0xC1, 0x78, 0x2A, 0x5D, - 0xD3, 0x05, 0x76, 0xFA, 0x41, 0x44, 0xBF, 0xC8, - 0x41, 0x6E, 0xDA, 0x81, 0x18, 0xFC, 0x64, 0x72, - 0xF5, 0x6A, 0x97, 0x95, 0x86, 0xF3, 0x3B, 0xB0, - 0x70, 0xFB, 0x0F, 0x1B, 0x0B, 0x10, 0xBC, 0x48, - 0x97, 0xEB, 0xE0, 0x1B, 0xCA, 0x38, 0x93, 0xD4, - 0xE1, 0x6A, 0xDB, 0x25, 0x09, 0x3A, 0x74, 0x17, - 0xD0, 0x70, 0x8C, 0x83, 0xA2, 0x63, 0x22, 0xE2, - 0x2E, 0x63, 0x30, 0x09, 0x1E, 0x30, 0x15, 0x2B, - 0xF8, 0x23, 0x59, 0x7C, 0x04, 0xCC, 0xF4, 0xCF, - 0xC7, 0x33, 0x15, 0x78, 0xF4, 0x3A, 0x27, 0x26, - 0xCC, 0xB4, 0x28, 0x28, 0x9A, 0x90, 0xC8, 0x63, - 0x25, 0x9D, 0xD1, 0x80, 0xC5, 0xFF, 0x14, 0x2B, - 0xEF, 0x41, 0xC7, 0x71, 0x70, 0x94, 0xBE, 0x07, - 0x85, 0x6D, 0xA2, 0xB1, 0x40, 0xFA, 0x67, 0x71, - 0x09, 0x67, 0x35, 0x6A, 0xA4, 0x7D, 0xFB, 0xC8, - 0xD2, 0x55, 0xB4, 0x72, 0x2A, 0xB8, 0x6D, 0x43, - 0x9B, 0x7E, 0x0A, 0x60, 0x90, 0x25, 0x1D, 0x2D, - 0x4C, 0x1E, 0xD5, 0xF2, 0x0B, 0xBE, 0x68, 0x07, - 0xBF, 0x65, 0xA9, 0x0B, 0x7C, 0xB2, 0xEC, 0x01, - 0x02, 0xAF, 0x02, 0x80, 0x9D, 0xC9, 0xAC, 0x7D, - 0x0A, 0x3A, 0xBC, 0x69, 0xC1, 0x83, 0x65, 0xBC, - 0xFF, 0x59, 0x18, 0x5F, 0x33, 0x99, 0x68, 0x87, - 0x74, 0x61, 0x85, 0x90, 0x6C, 0x01, 0x91, 0xAE, - 0xD4, 0x40, 0x7E, 0x13, 0x94, 0x46, 0x45, 0x9B, - 0xE2, 0x9C, 0x68, 0x22, 0x71, 0x76, 0x44, 0x35, - 0x3D, 0x24, 0xAB, 0x63, 0x39, 0x15, 0x6A, 0x9C, - 0x42, 0x49, 0x09, 0xF0, 0xA9, 0x02, 0x5B, 0xB7, - 0x47, 0x20, 0x77, 0x9B, 0xE4, 0x3F, 0x16, 0xD8, - 0x1C, 0x8C, 0xC6, 0x66, 0xE9, 0x97, 0x10, 0xD8, - 0xC6, 0x8B, 0xB5, 0xCC, 0x4E, 0x12, 0xF3, 0x14, - 0xE9, 0x25, 0xA5, 0x51, 0xF0, 0x9C, 0xC5, 0x90, - 0x03, 0xA1, 0xF8, 0x81, 0x03, 0xC2, 0x54, 0xBB, - 0x97, 0x8D, 0x75, 0xF3, 0x94, 0xD3, 0x54, 0x0E, - 0x31, 0xE7, 0x71, 0xCD, 0xA3, 0x6E, 0x39, 0xEC, - 0x54, 0xA6, 0x2B, 0x58, 0x32, 0x66, 0x4D, 0x82, - 0x1A, 0x72, 0xF1, 0xE6, 0xAF, 0xBB, 0xA2, 0x7F, - 0x84, 0x29, 0x5B, 0x26, 0x94, 0xC4, 0x98, 0x49, - 0x8E, 0x81, 0x2B, 0xC8, 0xE9, 0x37, 0x8F, 0xE5, - 0x41, 0xCE, 0xC5, 0x89, 0x1B, 0x25, 0x06, 0x29, - 0x01, 0xCB, 0x72, 0x12, 0xE3, 0xCD, 0xC4, 0x61, - 0x79, 0xEC, 0x5B, 0xCE, 0xC1, 0x0B, 0xC0, 0xB9, - 0x31, 0x1D, 0xE0, 0x50, 0x74, 0x29, 0x06, 0x87, - 0xFD, 0x6A, 0x53, 0x92, 0x67, 0x16, 0x54, 0x28, - 0x4C, 0xD9, 0xC8, 0xCC, 0x3E, 0xBA, 0x80, 0xEB, - 0x3B, 0x66, 0x2E, 0xB5, 0x3E, 0xB7, 0x51, 0x16, - 0x70, 0x4A, 0x1F, 0xEB, 0x5C, 0x2D, 0x05, 0x63, - 0x38, 0x53, 0x28, 0x68, 0xDD, 0xF2, 0x4E, 0xB8, - 0x99, 0x2A, 0xB8, 0x56, 0x5D, 0x9E, 0x49, 0x0C, - 0xAD, 0xF1, 0x48, 0x04, 0x36, 0x0D, 0xAA, 0x90, - 0x71, 0x8E, 0xAB, 0x61, 0x6B, 0xAB, 0x07, 0x65, - 0xD3, 0x39, 0x87, 0xB4, 0x7E, 0xFB, 0x65, 0x99, - 0xC5, 0x56, 0x32, 0x35, 0xE6, 0x1E, 0x4B, 0xE6, - 0x70, 0xE9, 0x79, 0x55, 0xAB, 0x29, 0x2D, 0x97, - 0x32, 0xCB, 0x89, 0x30, 0x94, 0x8A, 0xC8, 0x2D, - 0xF2, 0x30, 0xAC, 0x72, 0x29, 0x7A, 0x23, 0x67, - 0x9D, 0x6B, 0x94, 0xC1, 0x7F, 0x13, 0x59, 0x48, - 0x32, 0x54, 0xFE, 0xDC, 0x2F, 0x05, 0x81, 0x9F, - 0x0D, 0x06, 0x9A, 0x44, 0x3B, 0x78, 0xE3, 0xFC, - 0x6C, 0x3E, 0xF4, 0x71, 0x4B, 0x05, 0xA3, 0xFC, - 0xA8, 0x1C, 0xBB, 0xA6, 0x02, 0x42, 0xA7, 0x06, - 0x0C, 0xD8, 0x85, 0xD8, 0xF3, 0x99, 0x81, 0xBB, - 0x18, 0x09, 0x2B, 0x23, 0xDA, 0xA5, 0x9F, 0xD9, - 0x57, 0x83, 0x88, 0x68, 0x8A, 0x09, 0xBB, 0xA0, - 0x79, 0xBC, 0x80, 0x9A, 0x54, 0x84, 0x3A, 0x60, - 0x38, 0x5E, 0x23, 0x10, 0xBB, 0xCB, 0xCC, 0x02, - 0x13, 0xCE, 0x3D, 0xFA, 0xAB, 0x33, 0xB4, 0x7F, - 0x9D, 0x63, 0x05, 0xBC, 0x95, 0xC6, 0x10, 0x78, - 0x13, 0xC5, 0x85, 0xC4, 0xB6, 0x57, 0xBF, 0x30, - 0x54, 0x28, 0x33, 0xB1, 0x49, 0x49, 0xF5, 0x73, - 0xC0, 0x61, 0x2A, 0xD5, 0x24, 0xBA, 0xAE, 0x69, - 0x59, 0x0C, 0x12, 0x77, 0xB8, 0x6C, 0x28, 0x65, - 0x71, 0xBF, 0x66, 0xB3, 0xCF, 0xF4, 0x6A, 0x38, - 0x58, 0xC0, 0x99, 0x06, 0xA7, 0x94, 0xDF, 0x4A, - 0x06, 0xE9, 0xD4, 0xB0, 0xA2, 0xE4, 0x3F, 0x10, - 0xF7, 0x2A, 0x6C, 0x6C, 0x47, 0xE5, 0x64, 0x6E, - 0x2C, 0x79, 0x9B, 0x71, 0xC3, 0x3E, 0xD2, 0xF0, - 0x1E, 0xEB, 0x45, 0x93, 0x8E, 0xB7, 0xA4, 0xE2, - 0xE2, 0x90, 0x8C, 0x53, 0x55, 0x8A, 0x54, 0x0D, - 0x35, 0x03, 0x69, 0xFA, 0x18, 0x9C, 0x61, 0x69, - 0x43, 0xF7, 0x98, 0x1D, 0x76, 0x18, 0xCF, 0x02, - 0xA5, 0xB0, 0xA2, 0xBC, 0xC4, 0x22, 0xE8, 0x57, - 0xD1, 0xA4, 0x78, 0x71, 0x25, 0x3D, 0x08, 0x29, - 0x3C, 0x1C, 0x17, 0x9B, 0xCD, 0xC0, 0x43, 0x70, - 0x69, 0x10, 0x74, 0x18, 0x20, 0x5F, 0xDB, 0x98, - 0x56, 0x62, 0x3B, 0x8C, 0xA6, 0xB6, 0x94, 0xC9, - 0x6C, 0x08, 0x4B, 0x17, 0xF1, 0x3B, 0xB6, 0xDF, - 0x12, 0xB2, 0xCF, 0xBB, 0xC2, 0xB0, 0xE0, 0xC3, - 0x4B, 0x00, 0xD0, 0xFC, 0xD0, 0xAE, 0xCF, 0xB2, - 0x79, 0x24, 0xF6, 0x98, 0x4E, 0x74, 0x7B, 0xE2, - 0xA0, 0x9D, 0x83, 0xA8, 0x66, 0x45, 0x90, 0xA8, - 0x07, 0x73, 0x31, 0x49, 0x1A, 0x4F, 0x7D, 0x72, - 0x08, 0x43, 0xF2, 0x3E, 0x65, 0x2C, 0x6F, 0xA8, - 0x40, 0x30, 0x8D, 0xB4, 0x02, 0x03, 0x37, 0xAA, - 0xD3, 0x79, 0x67, 0x03, 0x4A, 0x9F, 0xB5, 0x23, - 0xB6, 0x7C, 0xA7, 0x03, 0x30, 0xF0, 0x2D, 0x9E, - 0xA2, 0x0C, 0x1E, 0x84, 0xCB, 0x8E, 0x57, 0x57, - 0xC9, 0xE1, 0x89, 0x6B, 0x60, 0x58, 0x14, 0x41, - 0xED, 0x61, 0x8A, 0xA5, 0xB2, 0x6D, 0xA5, 0x6C, - 0x0A, 0x5A, 0x73, 0xC4, 0xDC, 0xFD, 0x75, 0x5E, - 0x61, 0x0B, 0x4F, 0xC8, 0x1F, 0xF8, 0x4E, 0x21 - }; - static const byte dk_1024[WC_ML_KEM_1024_PRIVATE_KEY_SIZE] = { - 0x8C, 0x8B, 0x37, 0x22, 0xA8, 0x2E, 0x55, 0x05, - 0x65, 0x52, 0x16, 0x11, 0xEB, 0xBC, 0x63, 0x07, - 0x99, 0x44, 0xC9, 0xB1, 0xAB, 0xB3, 0xB0, 0x02, - 0x0F, 0xF1, 0x2F, 0x63, 0x18, 0x91, 0xA9, 0xC4, - 0x68, 0xD3, 0xA6, 0x7B, 0xF6, 0x27, 0x12, 0x80, - 0xDA, 0x58, 0xD0, 0x3C, 0xB0, 0x42, 0xB3, 0xA4, - 0x61, 0x44, 0x16, 0x37, 0xF9, 0x29, 0xC2, 0x73, - 0x46, 0x9A, 0xD1, 0x53, 0x11, 0xE9, 0x10, 0xDE, - 0x18, 0xCB, 0x95, 0x37, 0xBA, 0x1B, 0xE4, 0x2E, - 0x98, 0xBB, 0x59, 0xE4, 0x98, 0xA1, 0x3F, 0xD4, - 0x40, 0xD0, 0xE6, 0x9E, 0xE8, 0x32, 0xB4, 0x5C, - 0xD9, 0x5C, 0x38, 0x21, 0x77, 0xD6, 0x70, 0x96, - 0xA1, 0x8C, 0x07, 0xF1, 0x78, 0x16, 0x63, 0x65, - 0x1B, 0xDC, 0xAC, 0x90, 0xDE, 0xDA, 0x3D, 0xDD, - 0x14, 0x34, 0x85, 0x86, 0x41, 0x81, 0xC9, 0x1F, - 0xA2, 0x08, 0x0F, 0x6D, 0xAB, 0x3F, 0x86, 0x20, - 0x4C, 0xEB, 0x64, 0xA7, 0xB4, 0x44, 0x68, 0x95, - 0xC0, 0x39, 0x87, 0xA0, 0x31, 0xCB, 0x4B, 0x6D, - 0x9E, 0x04, 0x62, 0xFD, 0xA8, 0x29, 0x17, 0x2B, - 0x6C, 0x01, 0x2C, 0x63, 0x8B, 0x29, 0xB5, 0xCD, - 0x75, 0xA2, 0xC9, 0x30, 0xA5, 0x59, 0x6A, 0x31, - 0x81, 0xC3, 0x3A, 0x22, 0xD5, 0x74, 0xD3, 0x02, - 0x61, 0x19, 0x6B, 0xC3, 0x50, 0x73, 0x8D, 0x4F, - 0xD9, 0x18, 0x3A, 0x76, 0x33, 0x36, 0x24, 0x3A, - 0xCE, 0xD9, 0x9B, 0x32, 0x21, 0xC7, 0x1D, 0x88, - 0x66, 0x89, 0x5C, 0x4E, 0x52, 0xC1, 0x19, 0xBF, - 0x32, 0x80, 0xDA, 0xF8, 0x0A, 0x95, 0xE1, 0x52, - 0x09, 0xA7, 0x95, 0xC4, 0x43, 0x5F, 0xBB, 0x35, - 0x70, 0xFD, 0xB8, 0xAA, 0x9B, 0xF9, 0xAE, 0xFD, - 0x43, 0xB0, 0x94, 0xB7, 0x81, 0xD5, 0xA8, 0x11, - 0x36, 0xDA, 0xB8, 0x8B, 0x87, 0x99, 0x69, 0x65, - 0x56, 0xFE, 0xC6, 0xAE, 0x14, 0xB0, 0xBB, 0x8B, - 0xE4, 0x69, 0x5E, 0x9A, 0x12, 0x4C, 0x2A, 0xB8, - 0xFF, 0x4A, 0xB1, 0x22, 0x9B, 0x8A, 0xAA, 0x8C, - 0x6F, 0x41, 0xA6, 0x0C, 0x34, 0xC7, 0xB5, 0x61, - 0x82, 0xC5, 0x5C, 0x2C, 0x68, 0x5E, 0x73, 0x7C, - 0x6C, 0xA0, 0x0A, 0x23, 0xFB, 0x8A, 0x68, 0xC1, - 0xCD, 0x61, 0xF3, 0x0D, 0x39, 0x93, 0xA1, 0x65, - 0x3C, 0x16, 0x75, 0xAC, 0x5F, 0x09, 0x01, 0xA7, - 0x16, 0x0A, 0x73, 0x96, 0x64, 0x08, 0xB8, 0x87, - 0x6B, 0x71, 0x53, 0x96, 0xCF, 0xA4, 0x90, 0x3F, - 0xC6, 0x9D, 0x60, 0x49, 0x1F, 0x81, 0x46, 0x80, - 0x8C, 0x97, 0xCD, 0x5C, 0x53, 0x3E, 0x71, 0x01, - 0x79, 0x09, 0xE9, 0x7B, 0x83, 0x5B, 0x86, 0xFF, - 0x84, 0x7B, 0x42, 0xA6, 0x96, 0x37, 0x54, 0x35, - 0xE0, 0x06, 0x06, 0x1C, 0xF7, 0xA4, 0x79, 0x46, - 0x32, 0x72, 0x11, 0x4A, 0x89, 0xEB, 0x3E, 0xAF, - 0x22, 0x46, 0xF0, 0xF8, 0xC1, 0x04, 0xA1, 0x49, - 0x86, 0x82, 0x8E, 0x0A, 0xD2, 0x04, 0x20, 0xC9, - 0xB3, 0x7E, 0xA2, 0x3F, 0x5C, 0x51, 0x49, 0x49, - 0xE7, 0x7A, 0xD9, 0xE9, 0xAD, 0x12, 0x29, 0x0D, - 0xD1, 0x21, 0x5E, 0x11, 0xDA, 0x27, 0x44, 0x57, - 0xAC, 0x86, 0xB1, 0xCE, 0x68, 0x64, 0xB1, 0x22, - 0x67, 0x7F, 0x37, 0x18, 0xAA, 0x31, 0xB0, 0x25, - 0x80, 0xE6, 0x43, 0x17, 0x17, 0x8D, 0x38, 0xF2, - 0x5F, 0x60, 0x9B, 0xC6, 0xC5, 0x5B, 0xC3, 0x74, - 0xA1, 0xBF, 0x78, 0xEA, 0x8E, 0xCC, 0x21, 0x9B, - 0x30, 0xB7, 0x4C, 0xBB, 0x32, 0x72, 0xA5, 0x99, - 0x23, 0x8C, 0x93, 0x98, 0x51, 0x70, 0x04, 0x8F, - 0x17, 0x67, 0x75, 0xFB, 0x19, 0x96, 0x2A, 0xC3, - 0xB1, 0x35, 0xAA, 0x59, 0xDB, 0x10, 0x4F, 0x71, - 0x14, 0xDB, 0xC2, 0xC2, 0xD4, 0x29, 0x49, 0xAD, - 0xEC, 0xA6, 0xA8, 0x5B, 0x32, 0x3E, 0xE2, 0xB2, - 0xB2, 0x3A, 0x77, 0xD9, 0xDB, 0x23, 0x59, 0x79, - 0xA8, 0xE2, 0xD6, 0x7C, 0xF7, 0xD2, 0x13, 0x6B, - 0xBB, 0xA7, 0x1F, 0x26, 0x95, 0x74, 0xB3, 0x88, - 0x88, 0xE1, 0x54, 0x13, 0x40, 0xC1, 0x92, 0x84, - 0x07, 0x4F, 0x9B, 0x7C, 0x8C, 0xF3, 0x7E, 0xB0, - 0x13, 0x84, 0xE6, 0xE3, 0x82, 0x2E, 0xC4, 0x88, - 0x2D, 0xFB, 0xBE, 0xC4, 0xE6, 0x09, 0x8E, 0xF2, - 0xB2, 0xFC, 0x17, 0x7A, 0x1F, 0x0B, 0xCB, 0x65, - 0xA5, 0x7F, 0xDA, 0xA8, 0x93, 0x15, 0x46, 0x1B, - 0xEB, 0x78, 0x85, 0xFB, 0x68, 0xB3, 0xCD, 0x09, - 0x6E, 0xDA, 0x59, 0x6A, 0xC0, 0xE6, 0x1D, 0xD7, - 0xA9, 0xC5, 0x07, 0xBC, 0x63, 0x45, 0xE0, 0x82, - 0x7D, 0xFC, 0xC8, 0xA3, 0xAC, 0x2D, 0xCE, 0x51, - 0xAD, 0x73, 0x1A, 0xA0, 0xEB, 0x93, 0x2A, 0x6D, - 0x09, 0x83, 0x99, 0x23, 0x47, 0xCB, 0xEB, 0x3C, - 0xD0, 0xD9, 0xC9, 0x71, 0x97, 0x97, 0xCC, 0x21, - 0xCF, 0x00, 0x62, 0xB0, 0xAD, 0x94, 0xCA, 0xD7, - 0x34, 0xC6, 0x3E, 0x6B, 0x5D, 0x85, 0x9C, 0xBE, - 0x19, 0xF0, 0x36, 0x82, 0x45, 0x35, 0x1B, 0xF4, - 0x64, 0xD7, 0x50, 0x55, 0x69, 0x79, 0x0D, 0x2B, - 0xB7, 0x24, 0xD8, 0x65, 0x9A, 0x9F, 0xEB, 0x1C, - 0x7C, 0x47, 0x3D, 0xC4, 0xD0, 0x61, 0xE2, 0x98, - 0x63, 0xA2, 0x71, 0x4B, 0xAC, 0x42, 0xAD, 0xCD, - 0x1A, 0x83, 0x72, 0x77, 0x65, 0x56, 0xF7, 0x92, - 0x8A, 0x7A, 0x44, 0xE9, 0x4B, 0x6A, 0x25, 0x32, - 0x2D, 0x03, 0xC0, 0xA1, 0x62, 0x2A, 0x7F, 0xD2, - 0x61, 0x52, 0x2B, 0x73, 0x58, 0xF0, 0x85, 0xBD, - 0xFB, 0x60, 0x75, 0x87, 0x62, 0xCB, 0x90, 0x10, - 0x31, 0x90, 0x1B, 0x5E, 0xEC, 0xF4, 0x92, 0x0C, - 0x81, 0x02, 0x0A, 0x9B, 0x17, 0x81, 0xBC, 0xB9, - 0xDD, 0x19, 0xA9, 0xDF, 0xB6, 0x64, 0x58, 0xE7, - 0x75, 0x7C, 0x52, 0xCE, 0xC7, 0x5B, 0x4B, 0xA7, - 0x40, 0xA2, 0x40, 0x99, 0xCB, 0x56, 0xBB, 0x60, - 0xA7, 0x6B, 0x69, 0x01, 0xAA, 0x3E, 0x01, 0x69, - 0xC9, 0xE8, 0x34, 0x96, 0xD7, 0x3C, 0x4C, 0x99, - 0x43, 0x5A, 0x28, 0xD6, 0x13, 0xE9, 0x7A, 0x11, - 0x77, 0xF5, 0x8B, 0x6C, 0xC5, 0x95, 0xD3, 0xB2, - 0x33, 0x1E, 0x9C, 0xA7, 0xB5, 0x7B, 0x74, 0xDC, - 0x2C, 0x52, 0x77, 0xD2, 0x6F, 0x2F, 0xE1, 0x92, - 0x40, 0xA5, 0x5C, 0x35, 0xD6, 0xCF, 0xCA, 0x26, - 0xC7, 0x3E, 0x9A, 0x2D, 0x7C, 0x98, 0x0D, 0x97, - 0x96, 0x0A, 0xE1, 0xA0, 0x46, 0x98, 0xC1, 0x6B, - 0x39, 0x8A, 0x5F, 0x20, 0xC3, 0x5A, 0x09, 0x14, - 0x14, 0x5C, 0xE1, 0x67, 0x4B, 0x71, 0xAB, 0xC6, - 0x06, 0x6A, 0x90, 0x9A, 0x3E, 0x4B, 0x91, 0x1E, - 0x69, 0xD5, 0xA8, 0x49, 0x43, 0x03, 0x61, 0xF7, - 0x31, 0xB0, 0x72, 0x46, 0xA6, 0x32, 0x9B, 0x52, - 0x36, 0x19, 0x04, 0x22, 0x50, 0x82, 0xD0, 0xAA, - 0xC5, 0xB2, 0x1D, 0x6B, 0x34, 0x86, 0x24, 0x81, - 0xA8, 0x90, 0xC3, 0xC3, 0x60, 0x76, 0x6F, 0x04, - 0x26, 0x36, 0x03, 0xA6, 0xB7, 0x3E, 0x80, 0x2B, - 0x1F, 0x70, 0xB2, 0xEB, 0x00, 0x04, 0x68, 0x36, - 0xB8, 0xF4, 0x93, 0xBF, 0x10, 0xB9, 0x0B, 0x87, - 0x37, 0xC6, 0xC5, 0x48, 0x44, 0x9B, 0x29, 0x4C, - 0x47, 0x25, 0x3B, 0xE2, 0x6C, 0xA7, 0x23, 0x36, - 0xA6, 0x32, 0x06, 0x3A, 0xD3, 0xD0, 0xB4, 0x8C, - 0x8B, 0x0F, 0x4A, 0x34, 0x44, 0x7E, 0xF1, 0x3B, - 0x76, 0x40, 0x20, 0xDE, 0x73, 0x9E, 0xB7, 0x9A, - 0xBA, 0x20, 0xE2, 0xBE, 0x19, 0x51, 0x82, 0x5F, - 0x29, 0x3B, 0xED, 0xD1, 0x08, 0x9F, 0xCB, 0x0A, - 0x91, 0xF5, 0x60, 0xC8, 0xE1, 0x7C, 0xDF, 0x52, - 0x54, 0x1D, 0xC2, 0xB8, 0x1F, 0x97, 0x2A, 0x73, - 0x75, 0xB2, 0x01, 0xF1, 0x0C, 0x08, 0xD9, 0xB5, - 0xBC, 0x8B, 0x95, 0x10, 0x00, 0x54, 0xA3, 0xD0, - 0xAA, 0xFF, 0x89, 0xBD, 0x08, 0xD6, 0xA0, 0xE7, - 0xF2, 0x11, 0x5A, 0x43, 0x52, 0x31, 0x29, 0x04, - 0x60, 0xC9, 0xAD, 0x43, 0x5A, 0x3B, 0x3C, 0xF3, - 0x5E, 0x52, 0x09, 0x1E, 0xDD, 0x18, 0x90, 0x04, - 0x7B, 0xCC, 0x0A, 0xAB, 0xB1, 0xAC, 0xEB, 0xC7, - 0x5F, 0x4A, 0x32, 0xBC, 0x14, 0x51, 0xAC, 0xC4, - 0x96, 0x99, 0x40, 0x78, 0x8E, 0x89, 0x41, 0x21, - 0x88, 0x94, 0x6C, 0x91, 0x43, 0xC5, 0x04, 0x6B, - 0xD1, 0xB4, 0x58, 0xDF, 0x61, 0x7C, 0x5D, 0xF5, - 0x33, 0xB0, 0x52, 0xCD, 0x60, 0x38, 0xB7, 0x75, - 0x40, 0x34, 0xA2, 0x3C, 0x2F, 0x77, 0x20, 0x13, - 0x4C, 0x7B, 0x4E, 0xAC, 0xE0, 0x1F, 0xAC, 0x0A, - 0x28, 0x53, 0xA9, 0x28, 0x58, 0x47, 0xAB, 0xBD, - 0x06, 0xA3, 0x34, 0x3A, 0x77, 0x8A, 0xC6, 0x06, - 0x2E, 0x45, 0x8B, 0xC5, 0xE6, 0x1E, 0xCE, 0x1C, - 0x0D, 0xE0, 0x20, 0x6E, 0x6F, 0xE8, 0xA8, 0x40, - 0x34, 0xA7, 0xC5, 0xF1, 0xB0, 0x05, 0xFB, 0x0A, - 0x58, 0x40, 0x51, 0xD3, 0x22, 0x9B, 0x86, 0xC9, - 0x09, 0xAC, 0x56, 0x47, 0xB3, 0xD7, 0x55, 0x69, - 0xE0, 0x5A, 0x88, 0x27, 0x9D, 0x80, 0xE5, 0xC3, - 0x0F, 0x57, 0x4D, 0xC3, 0x27, 0x51, 0x2C, 0x6B, - 0xBE, 0x81, 0x01, 0x23, 0x9E, 0xC6, 0x28, 0x61, - 0xF4, 0xBE, 0x67, 0xB0, 0x5B, 0x9C, 0xDA, 0x9C, - 0x54, 0x5C, 0x13, 0xE7, 0xEB, 0x53, 0xCF, 0xF2, - 0x60, 0xAD, 0x98, 0x70, 0x19, 0x9C, 0x21, 0xF8, - 0xC6, 0x3D, 0x64, 0xF0, 0x45, 0x8A, 0x71, 0x41, - 0x28, 0x50, 0x23, 0xFE, 0xB8, 0x29, 0x29, 0x08, - 0x72, 0x38, 0x96, 0x44, 0xB0, 0xC3, 0xB7, 0x3A, - 0xC2, 0xC8, 0xE1, 0x21, 0xA2, 0x9B, 0xB1, 0xC4, - 0x3C, 0x19, 0xA2, 0x33, 0xD5, 0x6B, 0xED, 0x82, - 0x74, 0x0E, 0xB0, 0x21, 0xC9, 0x7B, 0x8E, 0xBB, - 0xA4, 0x0F, 0xF3, 0x28, 0xB5, 0x41, 0x76, 0x0F, - 0xCC, 0x37, 0x2B, 0x52, 0xD3, 0xBC, 0x4F, 0xCB, - 0xC0, 0x6F, 0x42, 0x4E, 0xAF, 0x25, 0x38, 0x04, - 0xD4, 0xCB, 0x46, 0xF4, 0x1F, 0xF2, 0x54, 0xC0, - 0xC5, 0xBA, 0x48, 0x3B, 0x44, 0xA8, 0x7C, 0x21, - 0x96, 0x54, 0x55, 0x5E, 0xC7, 0xC1, 0x63, 0xC7, - 0x9B, 0x9C, 0xB7, 0x60, 0xA2, 0xAD, 0x9B, 0xB7, - 0x22, 0xB9, 0x3E, 0x0C, 0x28, 0xBD, 0x4B, 0x16, - 0x85, 0x94, 0x9C, 0x49, 0x6E, 0xAB, 0x1A, 0xFF, - 0x90, 0x91, 0x9E, 0x37, 0x61, 0xB3, 0x46, 0x83, - 0x8A, 0xBB, 0x2F, 0x01, 0xA9, 0x1E, 0x55, 0x43, - 0x75, 0xAF, 0xDA, 0xAA, 0xF3, 0x82, 0x6E, 0x6D, - 0xB7, 0x9F, 0xE7, 0x35, 0x3A, 0x7A, 0x57, 0x8A, - 0x7C, 0x05, 0x98, 0xCE, 0x28, 0xB6, 0xD9, 0x91, - 0x52, 0x14, 0x23, 0x6B, 0xBF, 0xFA, 0x6D, 0x45, - 0xB6, 0x37, 0x6A, 0x07, 0x92, 0x4A, 0x39, 0xA7, - 0xBE, 0x81, 0x82, 0x86, 0x71, 0x5C, 0x8A, 0x3C, - 0x11, 0x0C, 0xD7, 0x6C, 0x02, 0xE0, 0x41, 0x7A, - 0xF1, 0x38, 0xBD, 0xB9, 0x5C, 0x3C, 0xCA, 0x79, - 0x8A, 0xC8, 0x09, 0xED, 0x69, 0xCF, 0xB6, 0x72, - 0xB6, 0xFD, 0xDC, 0x24, 0xD8, 0x9C, 0x06, 0xA6, - 0x55, 0x88, 0x14, 0xAB, 0x0C, 0x21, 0xC6, 0x2B, - 0x2F, 0x84, 0xC0, 0xE3, 0xE0, 0x80, 0x3D, 0xB3, - 0x37, 0xA4, 0xE0, 0xC7, 0x12, 0x7A, 0x6B, 0x4C, - 0x8C, 0x08, 0xB1, 0xD1, 0xA7, 0x6B, 0xF0, 0x7E, - 0xB6, 0xE5, 0xB5, 0xBB, 0x47, 0xA1, 0x6C, 0x74, - 0xBC, 0x54, 0x83, 0x75, 0xFB, 0x29, 0xCD, 0x78, - 0x9A, 0x5C, 0xFF, 0x91, 0xBD, 0xBD, 0x07, 0x18, - 0x59, 0xF4, 0x84, 0x6E, 0x35, 0x5B, 0xB0, 0xD2, - 0x94, 0x84, 0xE2, 0x64, 0xDF, 0xF3, 0x6C, 0x91, - 0x77, 0xA7, 0xAC, 0xA7, 0x89, 0x08, 0x87, 0x96, - 0x95, 0xCA, 0x87, 0xF2, 0x54, 0x36, 0xBC, 0x12, - 0x63, 0x07, 0x24, 0xBB, 0x22, 0xF0, 0xCB, 0x64, - 0x89, 0x7F, 0xE5, 0xC4, 0x11, 0x95, 0x28, 0x0D, - 0xA0, 0x41, 0x84, 0xD4, 0xBC, 0x7B, 0x53, 0x2A, - 0x0F, 0x70, 0xA5, 0x4D, 0x77, 0x57, 0xCD, 0xE6, - 0x17, 0x5A, 0x68, 0x43, 0xB8, 0x61, 0xCB, 0x2B, - 0xC4, 0x83, 0x0C, 0x00, 0x12, 0x55, 0x4C, 0xFC, - 0x5D, 0x2C, 0x8A, 0x20, 0x27, 0xAA, 0x3C, 0xD9, - 0x67, 0x13, 0x0E, 0x9B, 0x96, 0x24, 0x1B, 0x11, - 0xC4, 0x32, 0x0C, 0x76, 0x49, 0xCC, 0x23, 0xA7, - 0x1B, 0xAF, 0xE6, 0x91, 0xAF, 0xC0, 0x8E, 0x68, - 0x0B, 0xCE, 0xF4, 0x29, 0x07, 0x00, 0x07, 0x18, - 0xE4, 0xEA, 0xCE, 0x8D, 0xA2, 0x82, 0x14, 0x19, - 0x7B, 0xE1, 0xC2, 0x69, 0xDA, 0x9C, 0xB5, 0x41, - 0xE1, 0xA3, 0xCE, 0x97, 0xCF, 0xAD, 0xF9, 0xC6, - 0x05, 0x87, 0x80, 0xFE, 0x67, 0x93, 0xDB, 0xFA, - 0x82, 0x18, 0xA2, 0x76, 0x0B, 0x80, 0x2B, 0x8D, - 0xA2, 0xAA, 0x27, 0x1A, 0x38, 0x77, 0x25, 0x23, - 0xA7, 0x67, 0x36, 0xA7, 0xA3, 0x1B, 0x9D, 0x30, - 0x37, 0xAD, 0x21, 0xCE, 0xBB, 0x11, 0xA4, 0x72, - 0xB8, 0x79, 0x2E, 0xB1, 0x75, 0x58, 0xB9, 0x40, - 0xE7, 0x08, 0x83, 0xF2, 0x64, 0x59, 0x2C, 0x68, - 0x9B, 0x24, 0x0B, 0xB4, 0x3D, 0x54, 0x08, 0xBF, - 0x44, 0x64, 0x32, 0xF4, 0x12, 0xF4, 0xB9, 0xA5, - 0xF6, 0x86, 0x5C, 0xC2, 0x52, 0xA4, 0x3C, 0xF4, - 0x0A, 0x32, 0x03, 0x91, 0x55, 0x55, 0x91, 0xD6, - 0x75, 0x61, 0xFD, 0xD0, 0x53, 0x53, 0xAB, 0x6B, - 0x01, 0x9B, 0x3A, 0x08, 0xA7, 0x33, 0x53, 0xD5, - 0x1B, 0x61, 0x13, 0xAB, 0x2F, 0xA5, 0x1D, 0x97, - 0x56, 0x48, 0xEE, 0x25, 0x4A, 0xF8, 0x9A, 0x23, - 0x05, 0x04, 0xA2, 0x36, 0xA4, 0x65, 0x82, 0x57, - 0x74, 0x0B, 0xDC, 0xBB, 0xE1, 0x70, 0x8A, 0xB0, - 0x22, 0xC3, 0xC5, 0x88, 0xA4, 0x10, 0xDB, 0x3B, - 0x9C, 0x30, 0x8A, 0x06, 0x27, 0x5B, 0xDF, 0x5B, - 0x48, 0x59, 0xD3, 0xA2, 0x61, 0x7A, 0x29, 0x5E, - 0x1A, 0x22, 0xF9, 0x01, 0x98, 0xBA, 0xD0, 0x16, - 0x6F, 0x4A, 0x94, 0x34, 0x17, 0xC5, 0xB8, 0x31, - 0x73, 0x6C, 0xB2, 0xC8, 0x58, 0x0A, 0xBF, 0xDE, - 0x57, 0x14, 0xB5, 0x86, 0xAB, 0xEE, 0xC0, 0xA1, - 0x75, 0xA0, 0x8B, 0xC7, 0x10, 0xC7, 0xA2, 0x89, - 0x5D, 0xE9, 0x3A, 0xC4, 0x38, 0x06, 0x1B, 0xF7, - 0x76, 0x5D, 0x0D, 0x21, 0xCD, 0x41, 0x81, 0x67, - 0xCA, 0xF8, 0x9D, 0x1E, 0xFC, 0x34, 0x48, 0xBC, - 0xBB, 0x96, 0xD6, 0x9B, 0x3E, 0x01, 0x0C, 0x82, - 0xD1, 0x5C, 0xAB, 0x6C, 0xAC, 0xC6, 0x79, 0x9D, - 0x36, 0x39, 0x66, 0x9A, 0x5B, 0x21, 0xA6, 0x33, - 0xC8, 0x65, 0xF8, 0x59, 0x3B, 0x5B, 0x7B, 0xC8, - 0x00, 0x26, 0x2B, 0xB8, 0x37, 0xA9, 0x24, 0xA6, - 0xC5, 0x44, 0x0E, 0x4F, 0xC7, 0x3B, 0x41, 0xB2, - 0x30, 0x92, 0xC3, 0x91, 0x2F, 0x4C, 0x6B, 0xEB, - 0xB4, 0xC7, 0xB4, 0xC6, 0x29, 0x08, 0xB0, 0x37, - 0x75, 0x66, 0x6C, 0x22, 0x22, 0x0D, 0xF9, 0xC8, - 0x88, 0x23, 0xE3, 0x44, 0xC7, 0x30, 0x83, 0x32, - 0x34, 0x5C, 0x8B, 0x79, 0x5D, 0x34, 0xE8, 0xC0, - 0x51, 0xF2, 0x1F, 0x5A, 0x21, 0xC2, 0x14, 0xB6, - 0x98, 0x41, 0x35, 0x87, 0x09, 0xB1, 0xC3, 0x05, - 0xB3, 0x2C, 0xC2, 0xC3, 0x80, 0x6A, 0xE9, 0xCC, - 0xD3, 0x81, 0x9F, 0xFF, 0x45, 0x07, 0xFE, 0x52, - 0x0F, 0xBF, 0xC2, 0x71, 0x99, 0xBC, 0x23, 0xBE, - 0x6B, 0x9B, 0x2D, 0x2A, 0xC1, 0x71, 0x75, 0x79, - 0xAC, 0x76, 0x92, 0x79, 0xE2, 0xA7, 0xAA, 0xC6, - 0x8A, 0x37, 0x1A, 0x47, 0xBA, 0x3A, 0x7D, 0xBE, - 0x01, 0x6F, 0x14, 0xE1, 0xA7, 0x27, 0x33, 0x36, - 0x63, 0xC4, 0xA5, 0xCD, 0x1A, 0x0F, 0x88, 0x36, - 0xCF, 0x7B, 0x5C, 0x49, 0xAC, 0x51, 0x48, 0x5C, - 0xA6, 0x03, 0x45, 0xC9, 0x90, 0xE0, 0x68, 0x88, - 0x72, 0x00, 0x03, 0x73, 0x13, 0x22, 0xC5, 0xB8, - 0xCD, 0x5E, 0x69, 0x07, 0xFD, 0xA1, 0x15, 0x7F, - 0x46, 0x8F, 0xD3, 0xFC, 0x20, 0xFA, 0x81, 0x75, - 0xEE, 0xC9, 0x5C, 0x29, 0x1A, 0x26, 0x2B, 0xA8, - 0xC5, 0xBE, 0x99, 0x08, 0x72, 0x41, 0x89, 0x30, - 0x85, 0x23, 0x39, 0xD8, 0x8A, 0x19, 0xB3, 0x7F, - 0xEF, 0xA3, 0xCF, 0xE8, 0x21, 0x75, 0xC2, 0x24, - 0x40, 0x7C, 0xA4, 0x14, 0xBA, 0xEB, 0x37, 0x92, - 0x3B, 0x4D, 0x2D, 0x83, 0x13, 0x4A, 0xE1, 0x54, - 0xE4, 0x90, 0xA9, 0xB4, 0x5A, 0x05, 0x63, 0xB0, - 0x6C, 0x95, 0x3C, 0x33, 0x01, 0x45, 0x0A, 0x21, - 0x76, 0xA0, 0x7C, 0x61, 0x4A, 0x74, 0xE3, 0x47, - 0x8E, 0x48, 0x50, 0x9F, 0x9A, 0x60, 0xAE, 0x94, - 0x5A, 0x8E, 0xBC, 0x78, 0x15, 0x12, 0x1D, 0x90, - 0xA3, 0xB0, 0xE0, 0x70, 0x91, 0xA0, 0x96, 0xCF, - 0x02, 0xC5, 0x7B, 0x25, 0xBC, 0xA5, 0x81, 0x26, - 0xAD, 0x0C, 0x62, 0x9C, 0xE1, 0x66, 0xA7, 0xED, - 0xB4, 0xB3, 0x32, 0x21, 0xA0, 0xD3, 0xF7, 0x2B, - 0x85, 0xD5, 0x62, 0xEC, 0x69, 0x8B, 0x7D, 0x0A, - 0x91, 0x3D, 0x73, 0x80, 0x6F, 0x1C, 0x5C, 0x87, - 0xB3, 0x8E, 0xC0, 0x03, 0xCB, 0x30, 0x3A, 0x3D, - 0xC5, 0x1B, 0x4B, 0x35, 0x35, 0x6A, 0x67, 0x82, - 0x6D, 0x6E, 0xDA, 0xA8, 0xFE, 0xB9, 0x3B, 0x98, - 0x49, 0x3B, 0x2D, 0x1C, 0x11, 0xB6, 0x76, 0xA6, - 0xAD, 0x95, 0x06, 0xA1, 0xAA, 0xAE, 0x13, 0xA8, - 0x24, 0xC7, 0xC0, 0x8D, 0x1C, 0x6C, 0x2C, 0x4D, - 0xBA, 0x96, 0x42, 0xC7, 0x6E, 0xA7, 0xF6, 0xC8, - 0x26, 0x4B, 0x64, 0xA2, 0x3C, 0xCC, 0xA9, 0xA7, - 0x46, 0x35, 0xFC, 0xBF, 0x03, 0xE0, 0x0F, 0x1B, - 0x57, 0x22, 0xB2, 0x14, 0x37, 0x67, 0x90, 0x79, - 0x3B, 0x2C, 0x4F, 0x0A, 0x13, 0xB5, 0xC4, 0x07, - 0x60, 0xB4, 0x21, 0x8E, 0x1D, 0x25, 0x94, 0xDC, - 0xB3, 0x0A, 0x70, 0xD9, 0xC1, 0x78, 0x2A, 0x5D, - 0xD3, 0x05, 0x76, 0xFA, 0x41, 0x44, 0xBF, 0xC8, - 0x41, 0x6E, 0xDA, 0x81, 0x18, 0xFC, 0x64, 0x72, - 0xF5, 0x6A, 0x97, 0x95, 0x86, 0xF3, 0x3B, 0xB0, - 0x70, 0xFB, 0x0F, 0x1B, 0x0B, 0x10, 0xBC, 0x48, - 0x97, 0xEB, 0xE0, 0x1B, 0xCA, 0x38, 0x93, 0xD4, - 0xE1, 0x6A, 0xDB, 0x25, 0x09, 0x3A, 0x74, 0x17, - 0xD0, 0x70, 0x8C, 0x83, 0xA2, 0x63, 0x22, 0xE2, - 0x2E, 0x63, 0x30, 0x09, 0x1E, 0x30, 0x15, 0x2B, - 0xF8, 0x23, 0x59, 0x7C, 0x04, 0xCC, 0xF4, 0xCF, - 0xC7, 0x33, 0x15, 0x78, 0xF4, 0x3A, 0x27, 0x26, - 0xCC, 0xB4, 0x28, 0x28, 0x9A, 0x90, 0xC8, 0x63, - 0x25, 0x9D, 0xD1, 0x80, 0xC5, 0xFF, 0x14, 0x2B, - 0xEF, 0x41, 0xC7, 0x71, 0x70, 0x94, 0xBE, 0x07, - 0x85, 0x6D, 0xA2, 0xB1, 0x40, 0xFA, 0x67, 0x71, - 0x09, 0x67, 0x35, 0x6A, 0xA4, 0x7D, 0xFB, 0xC8, - 0xD2, 0x55, 0xB4, 0x72, 0x2A, 0xB8, 0x6D, 0x43, - 0x9B, 0x7E, 0x0A, 0x60, 0x90, 0x25, 0x1D, 0x2D, - 0x4C, 0x1E, 0xD5, 0xF2, 0x0B, 0xBE, 0x68, 0x07, - 0xBF, 0x65, 0xA9, 0x0B, 0x7C, 0xB2, 0xEC, 0x01, - 0x02, 0xAF, 0x02, 0x80, 0x9D, 0xC9, 0xAC, 0x7D, - 0x0A, 0x3A, 0xBC, 0x69, 0xC1, 0x83, 0x65, 0xBC, - 0xFF, 0x59, 0x18, 0x5F, 0x33, 0x99, 0x68, 0x87, - 0x74, 0x61, 0x85, 0x90, 0x6C, 0x01, 0x91, 0xAE, - 0xD4, 0x40, 0x7E, 0x13, 0x94, 0x46, 0x45, 0x9B, - 0xE2, 0x9C, 0x68, 0x22, 0x71, 0x76, 0x44, 0x35, - 0x3D, 0x24, 0xAB, 0x63, 0x39, 0x15, 0x6A, 0x9C, - 0x42, 0x49, 0x09, 0xF0, 0xA9, 0x02, 0x5B, 0xB7, - 0x47, 0x20, 0x77, 0x9B, 0xE4, 0x3F, 0x16, 0xD8, - 0x1C, 0x8C, 0xC6, 0x66, 0xE9, 0x97, 0x10, 0xD8, - 0xC6, 0x8B, 0xB5, 0xCC, 0x4E, 0x12, 0xF3, 0x14, - 0xE9, 0x25, 0xA5, 0x51, 0xF0, 0x9C, 0xC5, 0x90, - 0x03, 0xA1, 0xF8, 0x81, 0x03, 0xC2, 0x54, 0xBB, - 0x97, 0x8D, 0x75, 0xF3, 0x94, 0xD3, 0x54, 0x0E, - 0x31, 0xE7, 0x71, 0xCD, 0xA3, 0x6E, 0x39, 0xEC, - 0x54, 0xA6, 0x2B, 0x58, 0x32, 0x66, 0x4D, 0x82, - 0x1A, 0x72, 0xF1, 0xE6, 0xAF, 0xBB, 0xA2, 0x7F, - 0x84, 0x29, 0x5B, 0x26, 0x94, 0xC4, 0x98, 0x49, - 0x8E, 0x81, 0x2B, 0xC8, 0xE9, 0x37, 0x8F, 0xE5, - 0x41, 0xCE, 0xC5, 0x89, 0x1B, 0x25, 0x06, 0x29, - 0x01, 0xCB, 0x72, 0x12, 0xE3, 0xCD, 0xC4, 0x61, - 0x79, 0xEC, 0x5B, 0xCE, 0xC1, 0x0B, 0xC0, 0xB9, - 0x31, 0x1D, 0xE0, 0x50, 0x74, 0x29, 0x06, 0x87, - 0xFD, 0x6A, 0x53, 0x92, 0x67, 0x16, 0x54, 0x28, - 0x4C, 0xD9, 0xC8, 0xCC, 0x3E, 0xBA, 0x80, 0xEB, - 0x3B, 0x66, 0x2E, 0xB5, 0x3E, 0xB7, 0x51, 0x16, - 0x70, 0x4A, 0x1F, 0xEB, 0x5C, 0x2D, 0x05, 0x63, - 0x38, 0x53, 0x28, 0x68, 0xDD, 0xF2, 0x4E, 0xB8, - 0x99, 0x2A, 0xB8, 0x56, 0x5D, 0x9E, 0x49, 0x0C, - 0xAD, 0xF1, 0x48, 0x04, 0x36, 0x0D, 0xAA, 0x90, - 0x71, 0x8E, 0xAB, 0x61, 0x6B, 0xAB, 0x07, 0x65, - 0xD3, 0x39, 0x87, 0xB4, 0x7E, 0xFB, 0x65, 0x99, - 0xC5, 0x56, 0x32, 0x35, 0xE6, 0x1E, 0x4B, 0xE6, - 0x70, 0xE9, 0x79, 0x55, 0xAB, 0x29, 0x2D, 0x97, - 0x32, 0xCB, 0x89, 0x30, 0x94, 0x8A, 0xC8, 0x2D, - 0xF2, 0x30, 0xAC, 0x72, 0x29, 0x7A, 0x23, 0x67, - 0x9D, 0x6B, 0x94, 0xC1, 0x7F, 0x13, 0x59, 0x48, - 0x32, 0x54, 0xFE, 0xDC, 0x2F, 0x05, 0x81, 0x9F, - 0x0D, 0x06, 0x9A, 0x44, 0x3B, 0x78, 0xE3, 0xFC, - 0x6C, 0x3E, 0xF4, 0x71, 0x4B, 0x05, 0xA3, 0xFC, - 0xA8, 0x1C, 0xBB, 0xA6, 0x02, 0x42, 0xA7, 0x06, - 0x0C, 0xD8, 0x85, 0xD8, 0xF3, 0x99, 0x81, 0xBB, - 0x18, 0x09, 0x2B, 0x23, 0xDA, 0xA5, 0x9F, 0xD9, - 0x57, 0x83, 0x88, 0x68, 0x8A, 0x09, 0xBB, 0xA0, - 0x79, 0xBC, 0x80, 0x9A, 0x54, 0x84, 0x3A, 0x60, - 0x38, 0x5E, 0x23, 0x10, 0xBB, 0xCB, 0xCC, 0x02, - 0x13, 0xCE, 0x3D, 0xFA, 0xAB, 0x33, 0xB4, 0x7F, - 0x9D, 0x63, 0x05, 0xBC, 0x95, 0xC6, 0x10, 0x78, - 0x13, 0xC5, 0x85, 0xC4, 0xB6, 0x57, 0xBF, 0x30, - 0x54, 0x28, 0x33, 0xB1, 0x49, 0x49, 0xF5, 0x73, - 0xC0, 0x61, 0x2A, 0xD5, 0x24, 0xBA, 0xAE, 0x69, - 0x59, 0x0C, 0x12, 0x77, 0xB8, 0x6C, 0x28, 0x65, - 0x71, 0xBF, 0x66, 0xB3, 0xCF, 0xF4, 0x6A, 0x38, - 0x58, 0xC0, 0x99, 0x06, 0xA7, 0x94, 0xDF, 0x4A, - 0x06, 0xE9, 0xD4, 0xB0, 0xA2, 0xE4, 0x3F, 0x10, - 0xF7, 0x2A, 0x6C, 0x6C, 0x47, 0xE5, 0x64, 0x6E, - 0x2C, 0x79, 0x9B, 0x71, 0xC3, 0x3E, 0xD2, 0xF0, - 0x1E, 0xEB, 0x45, 0x93, 0x8E, 0xB7, 0xA4, 0xE2, - 0xE2, 0x90, 0x8C, 0x53, 0x55, 0x8A, 0x54, 0x0D, - 0x35, 0x03, 0x69, 0xFA, 0x18, 0x9C, 0x61, 0x69, - 0x43, 0xF7, 0x98, 0x1D, 0x76, 0x18, 0xCF, 0x02, - 0xA5, 0xB0, 0xA2, 0xBC, 0xC4, 0x22, 0xE8, 0x57, - 0xD1, 0xA4, 0x78, 0x71, 0x25, 0x3D, 0x08, 0x29, - 0x3C, 0x1C, 0x17, 0x9B, 0xCD, 0xC0, 0x43, 0x70, - 0x69, 0x10, 0x74, 0x18, 0x20, 0x5F, 0xDB, 0x98, - 0x56, 0x62, 0x3B, 0x8C, 0xA6, 0xB6, 0x94, 0xC9, - 0x6C, 0x08, 0x4B, 0x17, 0xF1, 0x3B, 0xB6, 0xDF, - 0x12, 0xB2, 0xCF, 0xBB, 0xC2, 0xB0, 0xE0, 0xC3, - 0x4B, 0x00, 0xD0, 0xFC, 0xD0, 0xAE, 0xCF, 0xB2, - 0x79, 0x24, 0xF6, 0x98, 0x4E, 0x74, 0x7B, 0xE2, - 0xA0, 0x9D, 0x83, 0xA8, 0x66, 0x45, 0x90, 0xA8, - 0x07, 0x73, 0x31, 0x49, 0x1A, 0x4F, 0x7D, 0x72, - 0x08, 0x43, 0xF2, 0x3E, 0x65, 0x2C, 0x6F, 0xA8, - 0x40, 0x30, 0x8D, 0xB4, 0x02, 0x03, 0x37, 0xAA, - 0xD3, 0x79, 0x67, 0x03, 0x4A, 0x9F, 0xB5, 0x23, - 0xB6, 0x7C, 0xA7, 0x03, 0x30, 0xF0, 0x2D, 0x9E, - 0xA2, 0x0C, 0x1E, 0x84, 0xCB, 0x8E, 0x57, 0x57, - 0xC9, 0xE1, 0x89, 0x6B, 0x60, 0x58, 0x14, 0x41, - 0xED, 0x61, 0x8A, 0xA5, 0xB2, 0x6D, 0xA5, 0x6C, - 0x0A, 0x5A, 0x73, 0xC4, 0xDC, 0xFD, 0x75, 0x5E, - 0x61, 0x0B, 0x4F, 0xC8, 0x1F, 0xF8, 0x4E, 0x21, - 0xD2, 0xE5, 0x74, 0xDF, 0xD8, 0xCD, 0x0A, 0xE8, - 0x93, 0xAA, 0x7E, 0x12, 0x5B, 0x44, 0xB9, 0x24, - 0xF4, 0x52, 0x23, 0xEC, 0x09, 0xF2, 0xAD, 0x11, - 0x41, 0xEA, 0x93, 0xA6, 0x80, 0x50, 0xDB, 0xF6, - 0x99, 0xE3, 0x24, 0x68, 0x84, 0x18, 0x1F, 0x8E, - 0x1D, 0xD4, 0x4E, 0x0C, 0x76, 0x29, 0x09, 0x33, - 0x30, 0x22, 0x1F, 0xD6, 0x7D, 0x9B, 0x7D, 0x6E, - 0x15, 0x10, 0xB2, 0xDB, 0xAD, 0x87, 0x62, 0xF7 - }; -#endif - static byte pubKey[WC_ML_KEM_MAX_PUBLIC_KEY_SIZE]; - static byte privKey[WC_ML_KEM_MAX_PRIVATE_KEY_SIZE]; - - key = (KyberKey*)XMALLOC(sizeof(KyberKey), NULL, DYNAMIC_TYPE_TMP_BUFFER); - ExpectNotNull(key); - if (key != NULL) { - XMEMSET(key, 0, sizeof(KyberKey)); - } - -#ifndef WOLFSSL_NO_ML_KEM_512 - ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_512, key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_KyberKey_MakeKeyWithRandom(key, seed_512, sizeof(seed_512)), - 0); - ExpectIntEQ(wc_KyberKey_EncodePublicKey(key, pubKey, - WC_ML_KEM_512_PUBLIC_KEY_SIZE), 0); - ExpectIntEQ(wc_KyberKey_EncodePrivateKey(key, privKey, - WC_ML_KEM_512_PRIVATE_KEY_SIZE), 0); - ExpectIntEQ(XMEMCMP(pubKey, ek_512, WC_ML_KEM_512_PUBLIC_KEY_SIZE), 0); - ExpectIntEQ(XMEMCMP(privKey, dk_512, WC_ML_KEM_512_PRIVATE_KEY_SIZE), 0); - wc_KyberKey_Free(key); -#endif -#ifndef WOLFSSL_NO_ML_KEM_768 - ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_768, key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_KyberKey_MakeKeyWithRandom(key, seed_768, sizeof(seed_768)), - 0); - ExpectIntEQ(wc_KyberKey_EncodePublicKey(key, pubKey, - WC_ML_KEM_768_PUBLIC_KEY_SIZE), 0); - ExpectIntEQ(wc_KyberKey_EncodePrivateKey(key, privKey, - WC_ML_KEM_768_PRIVATE_KEY_SIZE), 0); - ExpectIntEQ(XMEMCMP(pubKey, ek_768, WC_ML_KEM_768_PUBLIC_KEY_SIZE), 0); - ExpectIntEQ(XMEMCMP(privKey, dk_768, WC_ML_KEM_768_PRIVATE_KEY_SIZE), 0); - wc_KyberKey_Free(key); -#endif -#ifndef WOLFSSL_NO_ML_KEM_1024 - ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_1024, key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_KyberKey_MakeKeyWithRandom(key, seed_1024, - sizeof(seed_1024)), 0); - ExpectIntEQ(wc_KyberKey_EncodePublicKey(key, pubKey, - WC_ML_KEM_1024_PUBLIC_KEY_SIZE), 0); - ExpectIntEQ(wc_KyberKey_EncodePrivateKey(key, privKey, - WC_ML_KEM_1024_PRIVATE_KEY_SIZE), 0); - ExpectIntEQ(XMEMCMP(pubKey, ek_1024, WC_ML_KEM_1024_PUBLIC_KEY_SIZE), 0); - ExpectIntEQ(XMEMCMP(privKey, dk_1024, WC_ML_KEM_1024_PRIVATE_KEY_SIZE), 0); - wc_KyberKey_Free(key); -#endif - - XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); -#endif - return EXPECT_RESULT(); -} - -static int test_wc_kyber_encapsulate_kats(void) -{ - EXPECT_DECLS; -#if defined(WOLFSSL_HAVE_KYBER) && defined(WOLFSSL_WC_KYBER) && \ - !defined(WOLFSSL_NO_ML_KEM) - KyberKey* key; -#ifndef WOLFSSL_NO_ML_KEM_512 - static const byte ek_512[WC_ML_KEM_512_PUBLIC_KEY_SIZE] = { - 0xDD, 0x19, 0x24, 0x93, 0x5A, 0xA8, 0xE6, 0x17, - 0xAF, 0x18, 0xB5, 0xA0, 0x65, 0xAC, 0x45, 0x72, - 0x77, 0x67, 0xEE, 0x89, 0x7C, 0xF4, 0xF9, 0x44, - 0x2B, 0x2A, 0xCE, 0x30, 0xC0, 0x23, 0x7B, 0x30, - 0x7D, 0x3E, 0x76, 0xBF, 0x8E, 0xEB, 0x78, 0xAD, - 0xDC, 0x4A, 0xAC, 0xD1, 0x64, 0x63, 0xD8, 0x60, - 0x2F, 0xD5, 0x48, 0x7B, 0x63, 0xC8, 0x8B, 0xB6, - 0x60, 0x27, 0xF3, 0x7D, 0x0D, 0x61, 0x4D, 0x6F, - 0x9C, 0x24, 0x60, 0x3C, 0x42, 0x94, 0x76, 0x64, - 0xAC, 0x43, 0x98, 0xC6, 0xC5, 0x23, 0x83, 0x46, - 0x9B, 0x4F, 0x97, 0x77, 0xE5, 0xEC, 0x72, 0x06, - 0x21, 0x0F, 0x3E, 0x5A, 0x79, 0x6B, 0xF4, 0x5C, - 0x53, 0x26, 0x8E, 0x25, 0xF3, 0x9A, 0xC2, 0x61, - 0xAF, 0x3B, 0xFA, 0x2E, 0xE7, 0x55, 0xBE, 0xB8, - 0xB6, 0x7A, 0xB3, 0xAC, 0x8D, 0xF6, 0xC6, 0x29, - 0xC1, 0x17, 0x6E, 0x9E, 0x3B, 0x96, 0x5E, 0x93, - 0x69, 0xF9, 0xB3, 0xB9, 0x2A, 0xD7, 0xC2, 0x09, - 0x55, 0x64, 0x1D, 0x99, 0x52, 0x6F, 0xE7, 0xB9, - 0xFE, 0x8C, 0x85, 0x08, 0x20, 0x27, 0x5C, 0xD9, - 0x64, 0x84, 0x92, 0x50, 0x09, 0x07, 0x33, 0xCE, - 0x12, 0x4E, 0xCF, 0x31, 0x66, 0x24, 0x37, 0x4B, - 0xD1, 0x8B, 0x7C, 0x35, 0x8C, 0x06, 0xE9, 0xC1, - 0x36, 0xEE, 0x12, 0x59, 0xA9, 0x24, 0x5A, 0xBC, - 0x55, 0xB9, 0x64, 0xD6, 0x89, 0xF5, 0xA0, 0x82, - 0x92, 0xD2, 0x82, 0x65, 0x65, 0x8E, 0xBB, 0x40, - 0xCB, 0xFE, 0x48, 0x8A, 0x22, 0x28, 0x27, 0x55, - 0x90, 0xAB, 0x9F, 0x32, 0xA3, 0x41, 0x09, 0x70, - 0x9C, 0x1C, 0x29, 0x1D, 0x4A, 0x23, 0x33, 0x72, - 0x74, 0xC7, 0xA5, 0xA5, 0x99, 0x1C, 0x7A, 0x87, - 0xB8, 0x1C, 0x97, 0x4A, 0xB1, 0x8C, 0xE7, 0x78, - 0x59, 0xE4, 0x99, 0x5E, 0x7C, 0x14, 0xF0, 0x37, - 0x17, 0x48, 0xB7, 0x71, 0x2F, 0xB5, 0x2C, 0x59, - 0x66, 0xCD, 0x63, 0x06, 0x3C, 0x4F, 0x3B, 0x81, - 0xB4, 0x7C, 0x45, 0xDD, 0xE8, 0x3F, 0xB3, 0xA2, - 0x72, 0x40, 0x29, 0xB1, 0x0B, 0x32, 0x30, 0x21, - 0x4C, 0x04, 0xFA, 0x05, 0x77, 0xFC, 0x29, 0xAC, - 0x90, 0x86, 0xAE, 0x18, 0xC5, 0x3B, 0x3E, 0xD4, - 0x4E, 0x50, 0x74, 0x12, 0xFC, 0xA0, 0x4B, 0x4F, - 0x53, 0x8A, 0x51, 0x58, 0x8E, 0xC1, 0xF1, 0x02, - 0x9D, 0x15, 0x2D, 0x9A, 0xE7, 0x73, 0x5F, 0x76, - 0xA0, 0x77, 0xAA, 0x94, 0x84, 0x38, 0x0A, 0xED, - 0x91, 0x89, 0xE5, 0x91, 0x24, 0x87, 0xFC, 0xC5, - 0xB7, 0xC7, 0x01, 0x2D, 0x92, 0x23, 0xDD, 0x96, - 0x7E, 0xEC, 0xDA, 0xC3, 0x00, 0x8A, 0x89, 0x31, - 0xB6, 0x48, 0x24, 0x35, 0x37, 0xF5, 0x48, 0xC1, - 0x71, 0x69, 0x8C, 0x5B, 0x38, 0x1D, 0x84, 0x6A, - 0x72, 0xE5, 0xC9, 0x2D, 0x42, 0x26, 0xC5, 0xA8, - 0x90, 0x98, 0x84, 0xF1, 0xC4, 0xA3, 0x40, 0x4C, - 0x17, 0x20, 0xA5, 0x27, 0x94, 0x14, 0xD7, 0xF2, - 0x7B, 0x2B, 0x98, 0x26, 0x52, 0xB6, 0x74, 0x02, - 0x19, 0xC5, 0x6D, 0x21, 0x77, 0x80, 0xD7, 0xA5, - 0xE5, 0xBA, 0x59, 0x83, 0x63, 0x49, 0xF7, 0x26, - 0x88, 0x1D, 0xEA, 0x18, 0xEF, 0x75, 0xC0, 0x77, - 0x2A, 0x8B, 0x92, 0x27, 0x66, 0x95, 0x37, 0x18, - 0xCA, 0xCC, 0x14, 0xCC, 0xBA, 0xCB, 0x5F, 0xC4, - 0x12, 0xA2, 0xD0, 0xBE, 0x52, 0x18, 0x17, 0x64, - 0x5A, 0xB2, 0xBF, 0x6A, 0x47, 0x85, 0xE9, 0x2B, - 0xC9, 0x4C, 0xAF, 0x47, 0x7A, 0x96, 0x78, 0x76, - 0x79, 0x6C, 0x0A, 0x51, 0x90, 0x31, 0x5A, 0xC0, - 0x88, 0x56, 0x71, 0xA4, 0xC7, 0x49, 0x56, 0x4C, - 0x3B, 0x2C, 0x7A, 0xED, 0x90, 0x64, 0xEB, 0xA2, - 0x99, 0xEF, 0x21, 0x4B, 0xA2, 0xF4, 0x04, 0x93, - 0x66, 0x7C, 0x8B, 0xD0, 0x32, 0xAE, 0xC5, 0x62, - 0x17, 0x11, 0xB4, 0x1A, 0x38, 0x52, 0xC5, 0xC2, - 0xBA, 0xB4, 0xA3, 0x49, 0xCE, 0x4B, 0x7F, 0x08, - 0x5A, 0x81, 0x2B, 0xBB, 0xC8, 0x20, 0xB8, 0x1B, - 0xEF, 0xE6, 0x3A, 0x05, 0xB8, 0xBC, 0xDF, 0xE9, - 0xC2, 0xA7, 0x0A, 0x8B, 0x1A, 0xCA, 0x9B, 0xF9, - 0x81, 0x64, 0x81, 0x90, 0x7F, 0xF4, 0x43, 0x24, - 0x61, 0x11, 0x12, 0x87, 0x30, 0x3F, 0x0B, 0xD8, - 0x17, 0xC0, 0x57, 0x26, 0xBF, 0xA1, 0x8A, 0x2E, - 0x24, 0xC7, 0x72, 0x49, 0x21, 0x02, 0x80, 0x32, - 0xF6, 0x22, 0xBD, 0x96, 0x0A, 0x31, 0x7D, 0x83, - 0xB3, 0x56, 0xB5, 0x7F, 0x4A, 0x80, 0x04, 0x49, - 0x9C, 0xBC, 0x73, 0xC9, 0x7D, 0x1E, 0xB7, 0x74, - 0x59, 0x72, 0x63, 0x1C, 0x05, 0x61, 0xC1, 0xA3, - 0xAB, 0x6E, 0xF9, 0x1B, 0xD3, 0x63, 0x28, 0x0A, - 0x10, 0x54, 0x5D, 0xA6, 0x93, 0xE6, 0xD5, 0x8A, - 0xED, 0x68, 0x45, 0xE7, 0xCC, 0x5F, 0x0D, 0x08, - 0xCA, 0x79, 0x05, 0x05, 0x2C, 0x77, 0x36, 0x6D, - 0x19, 0x72, 0xCC, 0xFC, 0xC1, 0xA2, 0x76, 0x10, - 0xCB, 0x54, 0x36, 0x65, 0xAA, 0x79, 0x8E, 0x20, - 0x94, 0x01, 0x28, 0xB9, 0x56, 0x7A, 0x7E, 0xDB, - 0x7A, 0x90, 0x04, 0x07, 0xC7, 0x0D, 0x35, 0x94, - 0x38, 0x43, 0x5E, 0x13, 0x96, 0x16, 0x08, 0xD5, - 0x52, 0xA9, 0x4C, 0x5C, 0xDA, 0x78, 0x59, 0x22, - 0x05, 0x09, 0xB4, 0x83, 0xC5, 0xC5, 0x2A, 0x21, - 0x0E, 0x9C, 0x81, 0x2B, 0xC0, 0xC2, 0x32, 0x8C, - 0xA0, 0x0E, 0x78, 0x9A, 0x56, 0xB2, 0x60, 0x6B, - 0x90, 0x29, 0x2E, 0x35, 0x43, 0xDA, 0xCA, 0xA2, - 0x43, 0x18, 0x41, 0xD6, 0x1A, 0x22, 0xCA, 0x90, - 0xC1, 0xCC, 0xF0, 0xB5, 0xB4, 0xE0, 0xA6, 0xF6, - 0x40, 0x53, 0x6D, 0x1A, 0x26, 0xAB, 0x5B, 0x8D, - 0x21, 0x51, 0x32, 0x79, 0x28, 0xCE, 0x02, 0x90, - 0x4C, 0xF1, 0xD1, 0x5E, 0x32, 0x78, 0x8A, 0x95, - 0xF6, 0x2D, 0x3C, 0x27, 0x0B, 0x6F, 0xA1, 0x50, - 0x8F, 0x97, 0xB9, 0x15, 0x5A, 0x27, 0x26, 0xD8, - 0x0A, 0x1A, 0xFA, 0x3C, 0x53, 0x87, 0xA2, 0x76, - 0xA4, 0xD0, 0x31, 0xA0, 0x8A, 0xBF, 0x4F, 0x2E, - 0x74, 0xF1, 0xA0, 0xBB, 0x8A, 0x0F, 0xD3, 0xCB - }; - static const byte seed_512[WC_ML_KEM_ENC_RAND_SZ] = { - 0x6F, 0xF0, 0x2E, 0x1D, 0xC7, 0xFD, 0x91, 0x1B, - 0xEE, 0xE0, 0xC6, 0x92, 0xC8, 0xBD, 0x10, 0x0C, - 0x3E, 0x5C, 0x48, 0x96, 0x4D, 0x31, 0xDF, 0x92, - 0x99, 0x42, 0x18, 0xE8, 0x06, 0x64, 0xA6, 0xCA - }; - static const byte c_512[WC_ML_KEM_512_CIPHER_TEXT_SIZE] = { - 0x19, 0xC5, 0x92, 0x50, 0x59, 0x07, 0xC2, 0x4C, - 0x5F, 0xA2, 0xEB, 0xFA, 0x93, 0x2D, 0x2C, 0xBB, - 0x48, 0xF3, 0xE4, 0x34, 0x0A, 0x28, 0xF7, 0xEB, - 0xA5, 0xD0, 0x68, 0xFC, 0xAC, 0xAB, 0xED, 0xF7, - 0x77, 0x84, 0xE2, 0xB2, 0x4D, 0x79, 0x61, 0x77, - 0x5F, 0x0B, 0xF1, 0xA9, 0x97, 0xAE, 0x8B, 0xA9, - 0xFC, 0x43, 0x11, 0xBE, 0x63, 0x71, 0x67, 0x79, - 0xC2, 0xB7, 0x88, 0xF8, 0x12, 0xCB, 0xB7, 0x8C, - 0x74, 0xE7, 0x51, 0x7E, 0x22, 0xE9, 0x10, 0xEF, - 0xF5, 0xF3, 0x8D, 0x44, 0x46, 0x9C, 0x50, 0xDE, - 0x16, 0x75, 0xAE, 0x19, 0x8F, 0xD6, 0xA2, 0x89, - 0xAE, 0x7E, 0x6C, 0x30, 0xA9, 0xD4, 0x35, 0x1B, - 0x3D, 0x1F, 0x4C, 0x36, 0xEF, 0xF9, 0xC6, 0x8D, - 0xA9, 0x1C, 0x40, 0xB8, 0x2D, 0xC9, 0xB2, 0x79, - 0x9A, 0x33, 0xA2, 0x6B, 0x60, 0xA4, 0xE7, 0x0D, - 0x71, 0x01, 0x86, 0x27, 0x79, 0x46, 0x9F, 0x3A, - 0x9D, 0xAE, 0xC8, 0xE3, 0xE8, 0xF8, 0xC6, 0xA1, - 0x6B, 0xF0, 0x92, 0xFB, 0xA5, 0x86, 0x61, 0x86, - 0xB8, 0xD2, 0x08, 0xFD, 0xEB, 0x27, 0x4A, 0xC1, - 0xF8, 0x29, 0x65, 0x9D, 0xC2, 0xBE, 0x4A, 0xC4, - 0xF3, 0x06, 0xCB, 0x55, 0x84, 0xBA, 0xD1, 0x93, - 0x6A, 0x92, 0xC9, 0xB7, 0x68, 0x19, 0x23, 0x42, - 0x81, 0xBB, 0x39, 0x58, 0x41, 0xC2, 0x57, 0x56, - 0x08, 0x6E, 0xA5, 0x64, 0xCA, 0x3E, 0x22, 0x7E, - 0x3D, 0x9F, 0x10, 0x52, 0xC0, 0x76, 0x6D, 0x2E, - 0xB7, 0x9A, 0x47, 0xC1, 0x50, 0x72, 0x1E, 0x0D, - 0xEA, 0x7C, 0x00, 0x69, 0xD5, 0x51, 0xB2, 0x64, - 0x80, 0x1B, 0x77, 0x27, 0xEC, 0xAF, 0x82, 0xEE, - 0xCB, 0x99, 0xA8, 0x76, 0xFD, 0xA0, 0x90, 0xBF, - 0x6C, 0x3F, 0xC6, 0xB1, 0x09, 0xF1, 0x70, 0x14, - 0x85, 0xF0, 0x3C, 0xE6, 0x62, 0x74, 0xB8, 0x43, - 0x5B, 0x0A, 0x01, 0x4C, 0xFB, 0x3E, 0x79, 0xCC, - 0xED, 0x67, 0x05, 0x7B, 0x5A, 0xE2, 0xAD, 0x7F, - 0x52, 0x79, 0xEB, 0x71, 0x49, 0x42, 0xE4, 0xC1, - 0xCC, 0xFF, 0x7E, 0x85, 0xC0, 0xDB, 0x43, 0xE5, - 0xD4, 0x12, 0x89, 0x20, 0x73, 0x63, 0xB4, 0x44, - 0xBB, 0x51, 0xBB, 0x8A, 0xB0, 0x37, 0x1E, 0x70, - 0xCB, 0xD5, 0x5F, 0x0F, 0x3D, 0xAD, 0x40, 0x3E, - 0x10, 0x51, 0x76, 0xE3, 0xE8, 0xA2, 0x25, 0xD8, - 0x4A, 0xC8, 0xBE, 0xE3, 0x8C, 0x82, 0x1E, 0xE0, - 0xF5, 0x47, 0x43, 0x11, 0x45, 0xDC, 0xB3, 0x13, - 0x92, 0x86, 0xAB, 0xB1, 0x17, 0x94, 0xA4, 0x3A, - 0x3C, 0x1B, 0x52, 0x29, 0xE4, 0xBC, 0xFE, 0x95, - 0x9C, 0x78, 0xAD, 0xAE, 0xE2, 0xD5, 0xF2, 0x49, - 0x7B, 0x5D, 0x24, 0xBC, 0x21, 0xFA, 0x03, 0xA9, - 0xA5, 0x8C, 0x24, 0x55, 0x37, 0x3E, 0xC8, 0x95, - 0x83, 0xE7, 0xE5, 0x88, 0xD7, 0xFE, 0x67, 0x99, - 0x1E, 0xE9, 0x37, 0x83, 0xED, 0x4A, 0x6F, 0x9E, - 0xEA, 0xE0, 0x4E, 0x64, 0xE2, 0xE1, 0xE0, 0xE6, - 0x99, 0xF6, 0xDC, 0x9C, 0x5D, 0x39, 0xEF, 0x92, - 0x78, 0xC9, 0x85, 0xE7, 0xFD, 0xF2, 0xA7, 0x64, - 0xFF, 0xD1, 0xA0, 0xB9, 0x57, 0x92, 0xAD, 0x68, - 0x1E, 0x93, 0x0D, 0x76, 0xDF, 0x4E, 0xFE, 0x5D, - 0x65, 0xDB, 0xBD, 0x0F, 0x14, 0x38, 0x48, 0x1E, - 0xD8, 0x33, 0xAD, 0x49, 0x46, 0xAD, 0x1C, 0x69, - 0xAD, 0x21, 0xDD, 0x7C, 0x86, 0x18, 0x57, 0x74, - 0x42, 0x6F, 0x3F, 0xCF, 0x53, 0xB5, 0x2A, 0xD4, - 0xB4, 0x0D, 0x22, 0x8C, 0xE1, 0x24, 0x07, 0x2F, - 0x59, 0x2C, 0x7D, 0xAA, 0x05, 0x7F, 0x17, 0xD7, - 0x90, 0xA5, 0xBD, 0x5B, 0x93, 0x83, 0x4D, 0x58, - 0xC0, 0x8C, 0x88, 0xDC, 0x8F, 0x0E, 0xF4, 0x88, - 0x15, 0x64, 0x25, 0xB7, 0x44, 0x65, 0x4E, 0xAC, - 0xA9, 0xD6, 0x48, 0x58, 0xA4, 0xD6, 0xCE, 0xB4, - 0x78, 0x79, 0x51, 0x94, 0xBF, 0xAD, 0xB1, 0x8D, - 0xC0, 0xEA, 0x05, 0x4F, 0x97, 0x71, 0x21, 0x5A, - 0xD3, 0xCB, 0x1F, 0xD0, 0x31, 0xD7, 0xBE, 0x45, - 0x98, 0x62, 0x19, 0x26, 0x47, 0x8D, 0x37, 0x5A, - 0x18, 0x45, 0xAA, 0x91, 0xD7, 0xC7, 0x33, 0xF8, - 0xF0, 0xE1, 0x88, 0xC8, 0x38, 0x96, 0xED, 0xF8, - 0x3B, 0x86, 0x46, 0xC9, 0x9E, 0x29, 0xC0, 0xDA, - 0x22, 0x90, 0xE7, 0x1C, 0x3D, 0x2E, 0x97, 0x07, - 0x20, 0xC9, 0x7B, 0x5B, 0x7F, 0x95, 0x04, 0x86, - 0x03, 0x3C, 0x6A, 0x25, 0x71, 0xDD, 0xF2, 0xBC, - 0xCD, 0xAB, 0xB2, 0xDF, 0xA5, 0xFC, 0xE4, 0xC3, - 0xA1, 0x88, 0x46, 0x06, 0x04, 0x1D, 0x18, 0x1C, - 0x72, 0x87, 0x94, 0xAE, 0x0E, 0x80, 0x6E, 0xCB, - 0x49, 0xAF, 0x16, 0x75, 0x6A, 0x4C, 0xE7, 0x3C, - 0x87, 0xBD, 0x42, 0x34, 0xE6, 0x0F, 0x05, 0x53, - 0x5F, 0xA5, 0x92, 0x9F, 0xD5, 0xA3, 0x44, 0x73, - 0x26, 0x64, 0x01, 0xF6, 0x3B, 0xBD, 0x6B, 0x90, - 0xE0, 0x03, 0x47, 0x2A, 0xC0, 0xCE, 0x88, 0xF1, - 0xB6, 0x66, 0x59, 0x72, 0x79, 0xD0, 0x56, 0xA6, - 0x32, 0xC8, 0xD6, 0xB7, 0x90, 0xFD, 0x41, 0x17, - 0x67, 0x84, 0x8A, 0x69, 0xE3, 0x7A, 0x8A, 0x83, - 0x9B, 0xC7, 0x66, 0xA0, 0x2C, 0xA2, 0xF6, 0x95, - 0xEC, 0x63, 0xF0, 0x56, 0xA4, 0xE2, 0xA1, 0x14, - 0xCA, 0xCF, 0x9F, 0xD9, 0x0D, 0x73, 0x0C, 0x97, - 0x0D, 0xB3, 0x87, 0xF6, 0xDE, 0x73, 0x39, 0x5F, - 0x70, 0x1A, 0x1D, 0x95, 0x3B, 0x2A, 0x89, 0xDD, - 0x7E, 0xDA, 0xD4, 0x39, 0xFC, 0x20, 0x5A, 0x54, - 0xA4, 0x81, 0xE8, 0x89, 0xB0, 0x98, 0xD5, 0x25, - 0x56, 0x70, 0xF0, 0x26, 0xB4, 0xA2, 0xBF, 0x02, - 0xD2, 0xBD, 0xDE, 0x87, 0xC7, 0x66, 0xB2, 0x5F, - 0xC5, 0xE0, 0xFD, 0x45, 0x37, 0x57, 0xE7, 0x56, - 0xD1, 0x8C, 0x8C, 0xD9, 0x12, 0xF9, 0xA7, 0x7F, - 0x8E, 0x6B, 0xF0, 0x20, 0x53, 0x74, 0xB4, 0x62 - }; - static const byte k_512[WC_ML_KEM_SS_SZ] = { - 0x0B, 0xF3, 0x23, 0x33, 0x8D, 0x6F, 0x0A, 0x21, - 0xD5, 0x51, 0x4B, 0x67, 0x3C, 0xD1, 0x0B, 0x71, - 0x4C, 0xE6, 0xE3, 0x6F, 0x35, 0xBC, 0xD1, 0xBF, - 0x54, 0x41, 0x96, 0x36, 0x8E, 0xE5, 0x1A, 0x13 - }; -#endif -#ifndef WOLFSSL_NO_ML_KEM_768 - static const byte ek_768[WC_ML_KEM_768_PUBLIC_KEY_SIZE] = { - 0x89, 0xD2, 0xCB, 0x65, 0xF9, 0x4D, 0xCB, 0xFC, - 0x89, 0x0E, 0xFC, 0x7D, 0x0E, 0x5A, 0x7A, 0x38, - 0x34, 0x4D, 0x16, 0x41, 0xA3, 0xD0, 0xB0, 0x24, - 0xD5, 0x07, 0x97, 0xA5, 0xF2, 0x3C, 0x3A, 0x18, - 0xB3, 0x10, 0x1A, 0x12, 0x69, 0x06, 0x9F, 0x43, - 0xA8, 0x42, 0xBA, 0xCC, 0x09, 0x8A, 0x88, 0x21, - 0x27, 0x1C, 0x67, 0x3D, 0xB1, 0xBE, 0xB3, 0x30, - 0x34, 0xE4, 0xD7, 0x77, 0x4D, 0x16, 0x63, 0x5C, - 0x7C, 0x2C, 0x3C, 0x27, 0x63, 0x45, 0x35, 0x38, - 0xBC, 0x16, 0x32, 0xE1, 0x85, 0x15, 0x91, 0xA5, - 0x16, 0x42, 0x97, 0x4E, 0x59, 0x28, 0xAB, 0xB8, - 0xE5, 0x5F, 0xE5, 0x56, 0x12, 0xF9, 0xB1, 0x41, - 0xAF, 0xF0, 0x15, 0x54, 0x53, 0x94, 0xB2, 0x09, - 0x2E, 0x59, 0x09, 0x70, 0xEC, 0x29, 0xA7, 0xB7, - 0xE7, 0xAA, 0x1F, 0xB4, 0x49, 0x3B, 0xF7, 0xCB, - 0x73, 0x19, 0x06, 0xC2, 0xA5, 0xCB, 0x49, 0xE6, - 0x61, 0x48, 0x59, 0x06, 0x4E, 0x19, 0xB8, 0xFA, - 0x26, 0xAF, 0x51, 0xC4, 0x4B, 0x5E, 0x75, 0x35, - 0xBF, 0xDA, 0xC0, 0x72, 0xB6, 0x46, 0xD3, 0xEA, - 0x49, 0x0D, 0x27, 0x7F, 0x0D, 0x97, 0xCE, 0xD4, - 0x73, 0x95, 0xFE, 0xD9, 0x1E, 0x8F, 0x2B, 0xCE, - 0x0E, 0x3C, 0xA1, 0x22, 0xC2, 0x02, 0x5F, 0x74, - 0x06, 0x7A, 0xB9, 0x28, 0xA8, 0x22, 0xB3, 0x56, - 0x53, 0xA7, 0x4F, 0x06, 0x75, 0x76, 0x29, 0xAF, - 0xB1, 0xA1, 0xCA, 0xF2, 0x37, 0x10, 0x0E, 0xA9, - 0x35, 0xE7, 0x93, 0xC8, 0xF5, 0x8A, 0x71, 0xB3, - 0xD6, 0xAE, 0x2C, 0x86, 0x58, 0xB1, 0x01, 0x50, - 0xD4, 0xA3, 0x8F, 0x57, 0x2A, 0x0D, 0x49, 0xD2, - 0x8A, 0xE8, 0x94, 0x51, 0xD3, 0x38, 0x32, 0x6F, - 0xDB, 0x3B, 0x43, 0x50, 0x03, 0x6C, 0x10, 0x81, - 0x11, 0x77, 0x40, 0xED, 0xB8, 0x6B, 0x12, 0x08, - 0x1C, 0x5C, 0x12, 0x23, 0xDB, 0xB5, 0x66, 0x0D, - 0x5B, 0x3C, 0xB3, 0x78, 0x7D, 0x48, 0x18, 0x49, - 0x30, 0x4C, 0x68, 0xBE, 0x87, 0x54, 0x66, 0xF1, - 0x4E, 0xE5, 0x49, 0x5C, 0x2B, 0xD7, 0x95, 0xAE, - 0x41, 0x2D, 0x09, 0x00, 0x2D, 0x65, 0xB8, 0x71, - 0x9B, 0x90, 0xCB, 0xA3, 0x60, 0x3A, 0xC4, 0x95, - 0x8E, 0xA0, 0x3C, 0xC1, 0x38, 0xC8, 0x6F, 0x78, - 0x51, 0x59, 0x31, 0x25, 0x33, 0x47, 0x01, 0xB6, - 0x77, 0xF8, 0x2F, 0x49, 0x52, 0xA4, 0xC9, 0x3B, - 0x5B, 0x4C, 0x13, 0x4B, 0xB4, 0x2A, 0x85, 0x7F, - 0xD1, 0x5C, 0x65, 0x08, 0x64, 0xA6, 0xAA, 0x94, - 0xEB, 0x69, 0x1C, 0x0B, 0x69, 0x1B, 0xE4, 0x68, - 0x4C, 0x1F, 0x5B, 0x74, 0x90, 0x46, 0x7F, 0xC0, - 0x1B, 0x1D, 0x1F, 0xDA, 0x4D, 0xDA, 0x35, 0xC4, - 0xEC, 0xC2, 0x31, 0xBC, 0x73, 0xA6, 0xFE, 0xF4, - 0x2C, 0x99, 0xD3, 0x4E, 0xB8, 0x2A, 0x4D, 0x01, - 0x49, 0x87, 0xB3, 0xE3, 0x86, 0x91, 0x0C, 0x62, - 0x67, 0x9A, 0x11, 0x8F, 0x3C, 0x5B, 0xD9, 0xF4, - 0x67, 0xE4, 0x16, 0x20, 0x42, 0x42, 0x43, 0x57, - 0xDB, 0x92, 0xEF, 0x48, 0x4A, 0x4A, 0x17, 0x98, - 0xC1, 0x25, 0x7E, 0x87, 0x0A, 0x30, 0xCB, 0x20, - 0xAA, 0xA0, 0x33, 0x5D, 0x83, 0x31, 0x4F, 0xE0, - 0xAA, 0x7E, 0x63, 0xA8, 0x62, 0x64, 0x80, 0x41, - 0xA7, 0x2A, 0x63, 0x21, 0x52, 0x32, 0x20, 0xB1, - 0xAC, 0xE9, 0xBB, 0x70, 0x1B, 0x21, 0xAC, 0x12, - 0x53, 0xCB, 0x81, 0x2C, 0x15, 0x57, 0x5A, 0x90, - 0x85, 0xEA, 0xBE, 0xAD, 0xE7, 0x3A, 0x4A, 0xE7, - 0x6E, 0x6A, 0x7B, 0x15, 0x8A, 0x20, 0x58, 0x6D, - 0x78, 0xA5, 0xAC, 0x62, 0x0A, 0x5C, 0x9A, 0xBC, - 0xC9, 0xC0, 0x43, 0x35, 0x0A, 0x73, 0x65, 0x6B, - 0x0A, 0xBE, 0x82, 0x2D, 0xA5, 0xE0, 0xBA, 0x76, - 0x04, 0x5F, 0xAD, 0x75, 0x40, 0x1D, 0x7A, 0x3B, - 0x70, 0x37, 0x91, 0xB7, 0xE9, 0x92, 0x61, 0x71, - 0x0F, 0x86, 0xB7, 0x24, 0x21, 0xD2, 0x40, 0xA3, - 0x47, 0x63, 0x83, 0x77, 0x20, 0x5A, 0x15, 0x2C, - 0x79, 0x41, 0x30, 0xA4, 0xE0, 0x47, 0x74, 0x2B, - 0x88, 0x83, 0x03, 0xBD, 0xDC, 0x30, 0x91, 0x16, - 0x76, 0x4D, 0xE7, 0x42, 0x4C, 0xEB, 0xEA, 0x6D, - 0xB6, 0x53, 0x48, 0xAC, 0x53, 0x7E, 0x01, 0xA9, - 0xCC, 0x56, 0xEA, 0x66, 0x7D, 0x5A, 0xA8, 0x7A, - 0xC9, 0xAA, 0xA4, 0x31, 0x7D, 0x26, 0x2C, 0x10, - 0x14, 0x30, 0x50, 0xB8, 0xD0, 0x7A, 0x72, 0x8C, - 0xA6, 0x33, 0xC1, 0x3E, 0x46, 0x8A, 0xBC, 0xEA, - 0xD3, 0x72, 0xC7, 0x7B, 0x8E, 0xCF, 0x3B, 0x98, - 0x6B, 0x98, 0xC1, 0xE5, 0x58, 0x60, 0xB2, 0xB4, - 0x21, 0x67, 0x66, 0xAD, 0x87, 0x4C, 0x35, 0xED, - 0x72, 0x05, 0x06, 0x87, 0x39, 0x23, 0x02, 0x20, - 0xB5, 0xA2, 0x31, 0x7D, 0x10, 0x2C, 0x59, 0x83, - 0x56, 0xF1, 0x68, 0xAC, 0xBE, 0x80, 0x60, 0x8D, - 0xE4, 0xC9, 0xA7, 0x10, 0xB8, 0xDD, 0x07, 0x07, - 0x8C, 0xD7, 0xC6, 0x71, 0x05, 0x8A, 0xF1, 0xB0, - 0xB8, 0x30, 0x4A, 0x31, 0x4F, 0x7B, 0x29, 0xBE, - 0x78, 0xA9, 0x33, 0xC7, 0xB9, 0x29, 0x44, 0x24, - 0x95, 0x4A, 0x1B, 0xF8, 0xBC, 0x74, 0x5D, 0xE8, - 0x61, 0x98, 0x65, 0x9E, 0x0E, 0x12, 0x25, 0xA9, - 0x10, 0x72, 0x60, 0x74, 0x96, 0x9C, 0x39, 0xA9, - 0x7C, 0x19, 0x24, 0x06, 0x01, 0xA4, 0x6E, 0x01, - 0x3D, 0xCD, 0xCB, 0x67, 0x7A, 0x8C, 0xBD, 0x2C, - 0x95, 0xA4, 0x06, 0x29, 0xC2, 0x56, 0xF2, 0x4A, - 0x32, 0x89, 0x51, 0xDF, 0x57, 0x50, 0x2A, 0xB3, - 0x07, 0x72, 0xCC, 0x7E, 0x5B, 0x85, 0x00, 0x27, - 0xC8, 0x55, 0x17, 0x81, 0xCE, 0x49, 0x85, 0xBD, - 0xAC, 0xF6, 0xB8, 0x65, 0xC1, 0x04, 0xE8, 0xA4, - 0xBC, 0x65, 0xC4, 0x16, 0x94, 0xD4, 0x56, 0xB7, - 0x16, 0x9E, 0x45, 0xAB, 0x3D, 0x7A, 0xCA, 0xBE, - 0xAF, 0xE2, 0x3A, 0xD6, 0xA7, 0xB9, 0x4D, 0x19, - 0x79, 0xA2, 0xF4, 0xC1, 0xCA, 0xE7, 0xCD, 0x77, - 0xD6, 0x81, 0xD2, 0x90, 0xB5, 0xD8, 0xE4, 0x51, - 0xBF, 0xDC, 0xCC, 0xF5, 0x31, 0x0B, 0x9D, 0x12, - 0xA8, 0x8E, 0xC2, 0x9B, 0x10, 0x25, 0x5D, 0x5E, - 0x17, 0xA1, 0x92, 0x67, 0x0A, 0xA9, 0x73, 0x1C, - 0x5C, 0xA6, 0x7E, 0xC7, 0x84, 0xC5, 0x02, 0x78, - 0x1B, 0xE8, 0x52, 0x7D, 0x6F, 0xC0, 0x03, 0xC6, - 0x70, 0x1B, 0x36, 0x32, 0x28, 0x4B, 0x40, 0x30, - 0x7A, 0x52, 0x7C, 0x76, 0x20, 0x37, 0x7F, 0xEB, - 0x0B, 0x73, 0xF7, 0x22, 0xC9, 0xE3, 0xCD, 0x4D, - 0xEC, 0x64, 0x87, 0x6B, 0x93, 0xAB, 0x5B, 0x7C, - 0xFC, 0x4A, 0x65, 0x7F, 0x85, 0x2B, 0x65, 0x92, - 0x82, 0x86, 0x43, 0x84, 0xF4, 0x42, 0xB2, 0x2E, - 0x8A, 0x21, 0x10, 0x93, 0x87, 0xB8, 0xB4, 0x75, - 0x85, 0xFC, 0x68, 0x0D, 0x0B, 0xA4, 0x5C, 0x7A, - 0x8B, 0x1D, 0x72, 0x74, 0xBD, 0xA5, 0x78, 0x45, - 0xD1, 0x00, 0xD0, 0xF4, 0x2A, 0x3B, 0x74, 0x62, - 0x87, 0x73, 0x35, 0x1F, 0xD7, 0xAC, 0x30, 0x5B, - 0x24, 0x97, 0x63, 0x9B, 0xE9, 0x0B, 0x3F, 0x4F, - 0x71, 0xA6, 0xAA, 0x35, 0x61, 0xEE, 0xCC, 0x6A, - 0x69, 0x1B, 0xB5, 0xCB, 0x39, 0x14, 0xD8, 0x63, - 0x4C, 0xA1, 0xE1, 0xAF, 0x54, 0x3C, 0x04, 0x9A, - 0x8C, 0x6E, 0x86, 0x8C, 0x51, 0xF0, 0x42, 0x3B, - 0xD2, 0xD5, 0xAE, 0x09, 0xB7, 0x9E, 0x57, 0xC2, - 0x7F, 0x3F, 0xE3, 0xAE, 0x2B, 0x26, 0xA4, 0x41, - 0xBA, 0xBF, 0xC6, 0x71, 0x8C, 0xE8, 0xC0, 0x5B, - 0x4F, 0xE7, 0x93, 0xB9, 0x10, 0xB8, 0xFB, 0xCB, - 0xBE, 0x7F, 0x10, 0x13, 0x24, 0x2B, 0x40, 0xE0, - 0x51, 0x4D, 0x0B, 0xDC, 0x5C, 0x88, 0xBA, 0xC5, - 0x94, 0xC7, 0x94, 0xCE, 0x51, 0x22, 0xFB, 0xF3, - 0x48, 0x96, 0x81, 0x91, 0x47, 0xB9, 0x28, 0x38, - 0x15, 0x87, 0x96, 0x3B, 0x0B, 0x90, 0x03, 0x4A, - 0xA0, 0x7A, 0x10, 0xBE, 0x17, 0x6E, 0x01, 0xC8, - 0x0A, 0xD6, 0xA4, 0xB7, 0x1B, 0x10, 0xAF, 0x42, - 0x41, 0x40, 0x0A, 0x2A, 0x4C, 0xBB, 0xC0, 0x59, - 0x61, 0xA1, 0x5E, 0xC1, 0x47, 0x4E, 0xD5, 0x1A, - 0x3C, 0xC6, 0xD3, 0x58, 0x00, 0x67, 0x9A, 0x46, - 0x28, 0x09, 0xCA, 0xA3, 0xAB, 0x4F, 0x70, 0x94, - 0xCD, 0x66, 0x10, 0xB4, 0xA7, 0x00, 0xCB, 0xA9, - 0x39, 0xE7, 0xEA, 0xC9, 0x3E, 0x38, 0xC9, 0x97, - 0x55, 0x90, 0x87, 0x27, 0x61, 0x9E, 0xD7, 0x6A, - 0x34, 0xE5, 0x3C, 0x4F, 0xA2, 0x5B, 0xFC, 0x97, - 0x00, 0x82, 0x06, 0x69, 0x7D, 0xD1, 0x45, 0xE5, - 0xB9, 0x18, 0x8E, 0x5B, 0x01, 0x4E, 0x94, 0x16, - 0x81, 0xE1, 0x5F, 0xE3, 0xE1, 0x32, 0xB8, 0xA3, - 0x90, 0x34, 0x74, 0x14, 0x8B, 0xA2, 0x8B, 0x98, - 0x71, 0x11, 0xC9, 0xBC, 0xB3, 0x98, 0x9B, 0xBB, - 0xC6, 0x71, 0xC5, 0x81, 0xB4, 0x4A, 0x49, 0x28, - 0x45, 0xF2, 0x88, 0xE6, 0x21, 0x96, 0xE4, 0x71, - 0xFE, 0xD3, 0xC3, 0x9C, 0x1B, 0xBD, 0xDB, 0x08, - 0x37, 0xD0, 0xD4, 0x70, 0x6B, 0x09, 0x22, 0xC4 - }; - static const byte seed_768[WC_ML_KEM_ENC_RAND_SZ] = { - 0x2C, 0xE7, 0x4A, 0xD2, 0x91, 0x13, 0x35, 0x18, - 0xFE, 0x60, 0xC7, 0xDF, 0x5D, 0x25, 0x1B, 0x9D, - 0x82, 0xAD, 0xD4, 0x84, 0x62, 0xFF, 0x50, 0x5C, - 0x6E, 0x54, 0x7E, 0x94, 0x9E, 0x6B, 0x6B, 0xF7 - }; - static const byte c_768[WC_ML_KEM_768_CIPHER_TEXT_SIZE] = { - 0x56, 0xB4, 0x2D, 0x59, 0x3A, 0xAB, 0x8E, 0x87, - 0x73, 0xBD, 0x92, 0xD7, 0x6E, 0xAB, 0xDD, 0xF3, - 0xB1, 0x54, 0x6F, 0x83, 0x26, 0xF5, 0x7A, 0x7B, - 0x77, 0x37, 0x64, 0xB6, 0xC0, 0xDD, 0x30, 0x47, - 0x0F, 0x68, 0xDF, 0xF8, 0x2E, 0x0D, 0xCA, 0x92, - 0x50, 0x92, 0x74, 0xEC, 0xFE, 0x83, 0xA9, 0x54, - 0x73, 0x5F, 0xDE, 0x6E, 0x14, 0x67, 0x6D, 0xAA, - 0xA3, 0x68, 0x0C, 0x30, 0xD5, 0x24, 0xF4, 0xEF, - 0xA7, 0x9E, 0xD6, 0xA1, 0xF9, 0xED, 0x7E, 0x1C, - 0x00, 0x56, 0x0E, 0x86, 0x83, 0x53, 0x8C, 0x31, - 0x05, 0xAB, 0x93, 0x1B, 0xE0, 0xD2, 0xB2, 0x49, - 0xB3, 0x8C, 0xB9, 0xB1, 0x3A, 0xF5, 0xCE, 0xAF, - 0x78, 0x87, 0xA5, 0x9D, 0xBA, 0x16, 0x68, 0x8A, - 0x7F, 0x28, 0xDE, 0x0B, 0x14, 0xD1, 0x9F, 0x39, - 0x1E, 0xB4, 0x18, 0x32, 0xA5, 0x64, 0x79, 0x41, - 0x6C, 0xCF, 0x94, 0xE9, 0x97, 0x39, 0x0E, 0xD7, - 0x87, 0x8E, 0xEA, 0xFF, 0x49, 0x32, 0x8A, 0x70, - 0xE0, 0xAB, 0x5F, 0xCE, 0x6C, 0x63, 0xC0, 0x9B, - 0x35, 0xF4, 0xE4, 0x59, 0x94, 0xDE, 0x61, 0x5B, - 0x88, 0xBB, 0x72, 0x2F, 0x70, 0xE8, 0x7D, 0x2B, - 0xBD, 0x72, 0xAE, 0x71, 0xE1, 0xEE, 0x90, 0x08, - 0xE4, 0x59, 0xD8, 0xE7, 0x43, 0x03, 0x9A, 0x8D, - 0xDE, 0xB8, 0x74, 0xFC, 0xE5, 0x30, 0x1A, 0x2F, - 0x8C, 0x0E, 0xE8, 0xC2, 0xFE, 0xE7, 0xA4, 0xEE, - 0x68, 0xB5, 0xED, 0x6A, 0x6D, 0x9A, 0xB7, 0x4F, - 0x98, 0xBB, 0x3B, 0xA0, 0xFE, 0x89, 0xE8, 0x2B, - 0xD5, 0xA5, 0x25, 0xC5, 0xE8, 0x79, 0x0F, 0x81, - 0x8C, 0xCC, 0x60, 0x58, 0x77, 0xD4, 0x6C, 0x8B, - 0xDB, 0x5C, 0x33, 0x7B, 0x02, 0x5B, 0xB8, 0x40, - 0xFF, 0x47, 0x18, 0x96, 0xE4, 0x3B, 0xFA, 0x99, - 0xD7, 0x3D, 0xBE, 0x31, 0x80, 0x5C, 0x27, 0xA4, - 0x3E, 0x57, 0xF0, 0x61, 0x8B, 0x3A, 0xE5, 0x22, - 0xA4, 0x64, 0x4E, 0x0D, 0x4E, 0x4C, 0x1C, 0x54, - 0x84, 0x89, 0x43, 0x1B, 0xE5, 0x58, 0xF3, 0xBF, - 0xC5, 0x0E, 0x16, 0x61, 0x7E, 0x11, 0x0D, 0xD7, - 0xAF, 0x9A, 0x6F, 0xD8, 0x3E, 0x3F, 0xBB, 0x68, - 0xC3, 0x04, 0xD1, 0x5F, 0x6C, 0xB7, 0x00, 0xD6, - 0x1D, 0x7A, 0xA9, 0x15, 0xA6, 0x75, 0x1E, 0xA3, - 0xBA, 0x80, 0x22, 0x3E, 0x65, 0x41, 0x32, 0xA2, - 0x09, 0x99, 0xA4, 0x3B, 0xF4, 0x08, 0x59, 0x27, - 0x30, 0xB9, 0xA9, 0x49, 0x96, 0x36, 0xC0, 0x9F, - 0xA7, 0x29, 0xF9, 0xCB, 0x1F, 0x9D, 0x34, 0x42, - 0xF4, 0x73, 0x57, 0xA2, 0xB9, 0xCF, 0x15, 0xD3, - 0x10, 0x3B, 0x9B, 0xF3, 0x96, 0xC2, 0x30, 0x88, - 0xF1, 0x18, 0xED, 0xE3, 0x46, 0xB5, 0xC0, 0x38, - 0x91, 0xCF, 0xA5, 0xD5, 0x17, 0xCE, 0xF8, 0x47, - 0x13, 0x22, 0xE7, 0xE3, 0x10, 0x87, 0xC4, 0xB0, - 0x36, 0xAB, 0xAD, 0x78, 0x4B, 0xFF, 0x72, 0xA9, - 0xB1, 0x1F, 0xA1, 0x98, 0xFA, 0xCB, 0xCB, 0x91, - 0xF0, 0x67, 0xFE, 0xAF, 0x76, 0xFC, 0xFE, 0x53, - 0x27, 0xC1, 0x07, 0x0B, 0x3D, 0xA6, 0x98, 0x84, - 0x00, 0x75, 0x67, 0x60, 0xD2, 0xD1, 0xF0, 0x60, - 0x29, 0x8F, 0x16, 0x83, 0xD5, 0x1E, 0x36, 0x16, - 0xE9, 0x8C, 0x51, 0xC9, 0xC0, 0x3A, 0xA4, 0x2F, - 0x2E, 0x63, 0x36, 0x51, 0xA4, 0x7A, 0xD3, 0xCC, - 0x2A, 0xB4, 0xA8, 0x52, 0xAE, 0x0C, 0x4B, 0x04, - 0xB4, 0xE1, 0xC3, 0xDD, 0x94, 0x44, 0x45, 0xA2, - 0xB1, 0x2B, 0x4F, 0x42, 0xA6, 0x43, 0x51, 0x05, - 0xC0, 0x41, 0x22, 0xFC, 0x35, 0x87, 0xAF, 0xE4, - 0x09, 0xA0, 0x0B, 0x30, 0x8D, 0x63, 0xC5, 0xDD, - 0x81, 0x63, 0x65, 0x45, 0x04, 0xEE, 0xDB, 0xB7, - 0xB5, 0x32, 0x95, 0x77, 0xC3, 0x5F, 0xBE, 0xB3, - 0xF4, 0x63, 0x87, 0x2C, 0xAC, 0x28, 0x14, 0x2B, - 0x3C, 0x12, 0xA7, 0x40, 0xEC, 0x6E, 0xA7, 0xCE, - 0x9A, 0xD7, 0x8C, 0x6F, 0xC8, 0xFE, 0x1B, 0x4D, - 0xF5, 0xFC, 0x55, 0xC1, 0x66, 0x7F, 0x31, 0xF2, - 0x31, 0x2D, 0xA0, 0x77, 0x99, 0xDC, 0x87, 0x0A, - 0x47, 0x86, 0x08, 0x54, 0x9F, 0xED, 0xAF, 0xE0, - 0x21, 0xF1, 0xCF, 0x29, 0x84, 0x18, 0x03, 0x64, - 0xE9, 0x0A, 0xD9, 0x8D, 0x84, 0x56, 0x52, 0xAA, - 0x3C, 0xDD, 0x7A, 0x8E, 0xB0, 0x9F, 0x5E, 0x51, - 0x42, 0x3F, 0xAB, 0x42, 0xA7, 0xB7, 0xBB, 0x4D, - 0x51, 0x48, 0x64, 0xBE, 0x8D, 0x71, 0x29, 0x7E, - 0x9C, 0x3B, 0x17, 0xA9, 0x93, 0xF0, 0xAE, 0x62, - 0xE8, 0xEF, 0x52, 0x63, 0x7B, 0xD1, 0xB8, 0x85, - 0xBD, 0x9B, 0x6A, 0xB7, 0x27, 0x85, 0x4D, 0x70, - 0x3D, 0x8D, 0xC4, 0x78, 0xF9, 0x6C, 0xB8, 0x1F, - 0xCE, 0x4C, 0x60, 0x38, 0x3A, 0xC0, 0x1F, 0xCF, - 0x0F, 0x97, 0x1D, 0x4C, 0x8F, 0x35, 0x2B, 0x7A, - 0x82, 0xE2, 0x18, 0x65, 0x2F, 0x2C, 0x10, 0x6C, - 0xA9, 0x2A, 0xE6, 0x86, 0xBA, 0xCF, 0xCE, 0xF5, - 0xD3, 0x27, 0x34, 0x7A, 0x97, 0xA9, 0xB3, 0x75, - 0xD6, 0x73, 0x41, 0x55, 0x2B, 0xC2, 0xC5, 0x38, - 0x77, 0x8E, 0x0F, 0x98, 0x01, 0x82, 0x3C, 0xCD, - 0xFC, 0xD1, 0xEA, 0xAD, 0xED, 0x55, 0xB1, 0x8C, - 0x97, 0x57, 0xE3, 0xF2, 0x12, 0xB2, 0x88, 0x9D, - 0x38, 0x57, 0xDB, 0x51, 0xF9, 0x81, 0xD1, 0x61, - 0x85, 0xFD, 0x0F, 0x90, 0x08, 0x53, 0xA7, 0x50, - 0x05, 0xE3, 0x02, 0x0A, 0x8B, 0x95, 0xB7, 0xD8, - 0xF2, 0xF2, 0x63, 0x1C, 0x70, 0xD7, 0x8A, 0x95, - 0x7C, 0x7A, 0x62, 0xE1, 0xB3, 0x71, 0x90, 0x70, - 0xAC, 0xD1, 0xFD, 0x48, 0x0C, 0x25, 0xB8, 0x38, - 0x47, 0xDA, 0x02, 0x7B, 0x6E, 0xBB, 0xC2, 0xEE, - 0xC2, 0xDF, 0x22, 0xC8, 0x7F, 0x9B, 0x46, 0xD5, - 0xD7, 0xBA, 0xF1, 0x56, 0xB5, 0x3C, 0xEE, 0x92, - 0x95, 0x72, 0xB9, 0x2C, 0x47, 0x84, 0xC4, 0xE8, - 0x29, 0xF3, 0x44, 0x6A, 0x1F, 0xFE, 0x47, 0xF9, - 0x9D, 0xEC, 0xD0, 0x43, 0x60, 0x29, 0xDD, 0xEB, - 0xD3, 0xED, 0x8E, 0x87, 0xE5, 0xE7, 0x3D, 0x12, - 0x3D, 0xBE, 0x8A, 0x4D, 0xDA, 0xCF, 0x2A, 0xBD, - 0xE8, 0x7F, 0x33, 0xAE, 0x2B, 0x62, 0x1C, 0x0E, - 0xC5, 0xD5, 0xCA, 0xD1, 0x25, 0x9D, 0xEE, 0xC2, - 0xAE, 0xFF, 0x60, 0x88, 0xF0, 0x4F, 0x27, 0xA2, - 0x03, 0x38, 0xB5, 0x76, 0x25, 0x43, 0xE5, 0x10, - 0x08, 0x99, 0xA4, 0xCB, 0xFB, 0x7B, 0x3C, 0xA4, - 0x56, 0xB3, 0xA1, 0x9B, 0x83, 0xA4, 0xC4, 0x32, - 0x23, 0x0C, 0x23, 0xE1, 0xC7, 0xF1, 0x07, 0xC4, - 0xCB, 0x11, 0x21, 0x52, 0xF1, 0xC0, 0xF3, 0x0D, - 0xA0, 0xBB, 0x33, 0xF4, 0xF1, 0x1F, 0x47, 0xEE, - 0xA4, 0x38, 0x72, 0xBA, 0xFA, 0x84, 0xAE, 0x22, - 0x25, 0x6D, 0x70, 0x8E, 0x06, 0x04, 0xDA, 0xDE, - 0x4B, 0x2A, 0x4D, 0xDE, 0x8C, 0xCC, 0xF1, 0x19, - 0x30, 0xE1, 0x35, 0x53, 0x93, 0x4A, 0xE3, 0xEC, - 0xE5, 0x2F, 0x3D, 0x7C, 0xCC, 0x00, 0x28, 0x73, - 0x77, 0x87, 0x9F, 0xE6, 0xB8, 0xEC, 0xE7, 0xEF, - 0x79, 0x42, 0x35, 0x07, 0xC9, 0xDA, 0x33, 0x95, - 0x59, 0xC2, 0x0D, 0xE1, 0xC5, 0x19, 0x55, 0x99, - 0x9B, 0xAE, 0x47, 0x40, 0x1D, 0xC3, 0xCD, 0xFA, - 0xA1, 0xB2, 0x56, 0xD0, 0x9C, 0x7D, 0xB9, 0xFC, - 0x86, 0x98, 0xBF, 0xCE, 0xFA, 0x73, 0x02, 0xD5, - 0x6F, 0xBC, 0xDE, 0x1F, 0xBA, 0xAA, 0x1C, 0x65, - 0x34, 0x54, 0xE6, 0xFD, 0x3D, 0x84, 0xE4, 0xF7, - 0x9A, 0x93, 0x1C, 0x68, 0x1C, 0xBB, 0x6C, 0xB4, - 0x62, 0xB1, 0x0D, 0xAE, 0x11, 0x2B, 0xDF, 0xB7, - 0xF6, 0x5C, 0x7F, 0xDF, 0x6E, 0x5F, 0xC5, 0x94, - 0xEC, 0x3A, 0x47, 0x4A, 0x94, 0xBD, 0x97, 0xE6, - 0xEC, 0x81, 0xF7, 0x1C, 0x23, 0x0B, 0xF7, 0x0C, - 0xA0, 0xF1, 0x3C, 0xE3, 0xDF, 0xFB, 0xD9, 0xFF, - 0x98, 0x04, 0xEF, 0xD8, 0xF3, 0x7A, 0x4D, 0x36, - 0x29, 0xB4, 0x3A, 0x8F, 0x55, 0x54, 0x4E, 0xBC, - 0x5A, 0xC0, 0xAB, 0xD9, 0xA3, 0x3D, 0x79, 0x69, - 0x90, 0x68, 0x34, 0x6A, 0x0F, 0x1A, 0x3A, 0x96, - 0xE1, 0x15, 0xA5, 0xD8, 0x0B, 0xE1, 0x65, 0xB5, - 0x62, 0xD0, 0x82, 0x98, 0x4D, 0x5A, 0xAC, 0xC3, - 0xA2, 0x30, 0x19, 0x81, 0xA6, 0x41, 0x8F, 0x8B, - 0xA7, 0xD7, 0xB0, 0xD7, 0xCA, 0x58, 0x75, 0xC6 - }; - static const byte k_768[WC_ML_KEM_SS_SZ] = { - 0x26, 0x96, 0xD2, 0x8E, 0x9C, 0x61, 0xC2, 0xA0, - 0x1C, 0xE9, 0xB1, 0x60, 0x8D, 0xCB, 0x9D, 0x29, - 0x27, 0x85, 0xA0, 0xCD, 0x58, 0xEF, 0xB7, 0xFE, - 0x13, 0xB1, 0xDE, 0x95, 0xF0, 0xDB, 0x55, 0xB3 - }; -#endif -#ifndef WOLFSSL_NO_ML_KEM_1024 - static const byte ek_1024[WC_ML_KEM_1024_PUBLIC_KEY_SIZE] = { - 0x30, 0x7A, 0x4C, 0xEA, 0x41, 0x48, 0x21, 0x9B, - 0x95, 0x8E, 0xA0, 0xB7, 0x88, 0x66, 0x59, 0x23, - 0x5A, 0x4D, 0x19, 0x80, 0xB1, 0x92, 0x61, 0x08, - 0x47, 0xD8, 0x6E, 0xF3, 0x27, 0x39, 0xF9, 0x4C, - 0x3B, 0x44, 0x6C, 0x4D, 0x81, 0xD8, 0x9B, 0x8B, - 0x42, 0x2A, 0x9D, 0x07, 0x9C, 0x88, 0xB1, 0x1A, - 0xCA, 0xF3, 0x21, 0xB0, 0x14, 0x29, 0x4E, 0x18, - 0xB2, 0x96, 0xE5, 0x2F, 0x3F, 0x74, 0x4C, 0xF9, - 0x63, 0x4A, 0x4F, 0xB0, 0x1D, 0xB0, 0xD9, 0x9E, - 0xF2, 0x0A, 0x63, 0x3A, 0x55, 0x2E, 0x76, 0xA0, - 0x58, 0x5C, 0x61, 0x09, 0xF0, 0x18, 0x76, 0x8B, - 0x76, 0x3A, 0xF3, 0x67, 0x8B, 0x47, 0x80, 0x08, - 0x9C, 0x13, 0x42, 0xB9, 0x69, 0x07, 0xA2, 0x9A, - 0x1C, 0x11, 0x52, 0x1C, 0x74, 0x4C, 0x27, 0x97, - 0xD0, 0xBF, 0x2B, 0x9C, 0xCD, 0xCA, 0x61, 0x46, - 0x72, 0xB4, 0x50, 0x76, 0x77, 0x3F, 0x45, 0x8A, - 0x31, 0xEF, 0x86, 0x9B, 0xE1, 0xEB, 0x2E, 0xFE, - 0xB5, 0x0D, 0x0E, 0x37, 0x49, 0x5D, 0xC5, 0xCA, - 0x55, 0xE0, 0x75, 0x28, 0x93, 0x4F, 0x62, 0x93, - 0xC4, 0x16, 0x80, 0x27, 0xD0, 0xE5, 0x3D, 0x07, - 0xFA, 0xCC, 0x66, 0x30, 0xCB, 0x08, 0x19, 0x7E, - 0x53, 0xFB, 0x19, 0x3A, 0x17, 0x11, 0x35, 0xDC, - 0x8A, 0xD9, 0x97, 0x94, 0x02, 0xA7, 0x1B, 0x69, - 0x26, 0xBC, 0xDC, 0xDC, 0x47, 0xB9, 0x34, 0x01, - 0x91, 0x0A, 0x5F, 0xCC, 0x1A, 0x81, 0x3B, 0x68, - 0x2B, 0x09, 0xBA, 0x7A, 0x72, 0xD2, 0x48, 0x6D, - 0x6C, 0x79, 0x95, 0x16, 0x46, 0x5C, 0x14, 0x72, - 0x9B, 0x26, 0x94, 0x9B, 0x0B, 0x7C, 0xBC, 0x7C, - 0x64, 0x0F, 0x26, 0x7F, 0xED, 0x80, 0xB1, 0x62, - 0xC5, 0x1F, 0xD8, 0xE0, 0x92, 0x27, 0xC1, 0x01, - 0xD5, 0x05, 0xA8, 0xFA, 0xE8, 0xA2, 0xD7, 0x05, - 0x4E, 0x28, 0xA7, 0x8B, 0xA8, 0x75, 0x0D, 0xEC, - 0xF9, 0x05, 0x7C, 0x83, 0x97, 0x9F, 0x7A, 0xBB, - 0x08, 0x49, 0x45, 0x64, 0x80, 0x06, 0xC5, 0xB2, - 0x88, 0x04, 0xF3, 0x4E, 0x73, 0xB2, 0x38, 0x11, - 0x1A, 0x65, 0xA1, 0xF5, 0x00, 0xB1, 0xCC, 0x60, - 0x6A, 0x84, 0x8F, 0x28, 0x59, 0x07, 0x0B, 0xEB, - 0xA7, 0x57, 0x31, 0x79, 0xF3, 0x61, 0x49, 0xCF, - 0x58, 0x01, 0xBF, 0x89, 0xA1, 0xC3, 0x8C, 0xC2, - 0x78, 0x41, 0x55, 0x28, 0xD0, 0x3B, 0xDB, 0x94, - 0x3F, 0x96, 0x28, 0x0C, 0x8C, 0xC5, 0x20, 0x42, - 0xD9, 0xB9, 0x1F, 0xAA, 0x9D, 0x6E, 0xA7, 0xBC, - 0xBB, 0x7A, 0xB1, 0x89, 0x7A, 0x32, 0x66, 0x96, - 0x6F, 0x78, 0x39, 0x34, 0x26, 0xC7, 0x6D, 0x8A, - 0x49, 0x57, 0x8B, 0x98, 0xB1, 0x59, 0xEB, 0xB4, - 0x6E, 0xE0, 0xA8, 0x83, 0xA2, 0x70, 0xD8, 0x05, - 0x7C, 0xD0, 0x23, 0x1C, 0x86, 0x90, 0x6A, 0x91, - 0xDB, 0xBA, 0xDE, 0x6B, 0x24, 0x69, 0x58, 0x1E, - 0x2B, 0xCA, 0x2F, 0xEA, 0x83, 0x89, 0xF7, 0xC7, - 0x4B, 0xCD, 0x70, 0x96, 0x1E, 0xA5, 0xB9, 0x34, - 0xFB, 0xCF, 0x9A, 0x65, 0x90, 0xBF, 0x86, 0xB8, - 0xDB, 0x54, 0x88, 0x54, 0xD9, 0xA3, 0xFB, 0x30, - 0x11, 0x04, 0x33, 0xBD, 0x7A, 0x1B, 0x65, 0x9C, - 0xA8, 0x56, 0x80, 0x85, 0x63, 0x92, 0x37, 0xB3, - 0xBD, 0xC3, 0x7B, 0x7F, 0xA7, 0x16, 0xD4, 0x82, - 0xA2, 0x5B, 0x54, 0x10, 0x6B, 0x3A, 0x8F, 0x54, - 0xD3, 0xAA, 0x99, 0xB5, 0x12, 0x3D, 0xA9, 0x60, - 0x66, 0x90, 0x45, 0x92, 0xF3, 0xA5, 0x4E, 0xE2, - 0x3A, 0x79, 0x81, 0xAB, 0x60, 0x8A, 0x2F, 0x44, - 0x13, 0xCC, 0x65, 0x89, 0x46, 0xC6, 0xD7, 0x78, - 0x0E, 0xA7, 0x65, 0x64, 0x4B, 0x3C, 0xC0, 0x6C, - 0x70, 0x03, 0x4A, 0xB4, 0xEB, 0x35, 0x19, 0x12, - 0xE7, 0x71, 0x5B, 0x56, 0x75, 0x5D, 0x09, 0x02, - 0x15, 0x71, 0xBF, 0x34, 0x0A, 0xB9, 0x25, 0x98, - 0xA2, 0x4E, 0x81, 0x18, 0x93, 0x19, 0x5B, 0x96, - 0xA1, 0x62, 0x9F, 0x80, 0x41, 0xF5, 0x86, 0x58, - 0x43, 0x15, 0x61, 0xFC, 0x0A, 0xB1, 0x52, 0x92, - 0xB9, 0x13, 0xEC, 0x47, 0x3F, 0x04, 0x47, 0x9B, - 0xC1, 0x45, 0xCD, 0x4C, 0x56, 0x3A, 0x28, 0x62, - 0x35, 0x64, 0x6C, 0xD3, 0x05, 0xA9, 0xBE, 0x10, - 0x14, 0xE2, 0xC7, 0xB1, 0x30, 0xC3, 0x3E, 0xB7, - 0x7C, 0xC4, 0xA0, 0xD9, 0x78, 0x6B, 0xD6, 0xBC, - 0x2A, 0x95, 0x4B, 0xF3, 0x00, 0x57, 0x78, 0xF8, - 0x91, 0x7C, 0xE1, 0x37, 0x89, 0xBB, 0xB9, 0x62, - 0x80, 0x78, 0x58, 0xB6, 0x77, 0x31, 0x57, 0x2B, - 0x6D, 0x3C, 0x9B, 0x4B, 0x52, 0x06, 0xFA, 0xC9, - 0xA7, 0xC8, 0x96, 0x16, 0x98, 0xD8, 0x83, 0x24, - 0xA9, 0x15, 0x18, 0x68, 0x99, 0xB2, 0x99, 0x23, - 0xF0, 0x84, 0x42, 0xA3, 0xD3, 0x86, 0xBD, 0x41, - 0x6B, 0xCC, 0x9A, 0x10, 0x01, 0x64, 0xC9, 0x30, - 0xEC, 0x35, 0xEA, 0xFB, 0x6A, 0xB3, 0x58, 0x51, - 0xB6, 0xC8, 0xCE, 0x63, 0x77, 0x36, 0x6A, 0x17, - 0x5F, 0x3D, 0x75, 0x29, 0x8C, 0x51, 0x8D, 0x44, - 0x89, 0x89, 0x33, 0xF5, 0x3D, 0xEE, 0x61, 0x71, - 0x45, 0x09, 0x33, 0x79, 0xC4, 0x65, 0x9F, 0x68, - 0x58, 0x3B, 0x2B, 0x28, 0x12, 0x26, 0x66, 0xBE, - 0xC5, 0x78, 0x38, 0x99, 0x1F, 0xF1, 0x6C, 0x36, - 0x8D, 0xD2, 0x2C, 0x36, 0xE7, 0x80, 0xC9, 0x1A, - 0x35, 0x82, 0xE2, 0x5E, 0x19, 0x79, 0x4C, 0x6B, - 0xF2, 0xAB, 0x42, 0x45, 0x8A, 0x8D, 0xD7, 0x70, - 0x5D, 0xE2, 0xC2, 0xAA, 0x20, 0xC0, 0x54, 0xE8, - 0x4B, 0x3E, 0xF3, 0x50, 0x32, 0x79, 0x86, 0x26, - 0xC2, 0x48, 0x26, 0x32, 0x53, 0xA7, 0x1A, 0x11, - 0x94, 0x35, 0x71, 0x34, 0x0A, 0x97, 0x8C, 0xD0, - 0xA6, 0x02, 0xE4, 0x7D, 0xEE, 0x54, 0x0A, 0x88, - 0x14, 0xBA, 0x06, 0xF3, 0x14, 0x14, 0x79, 0x7C, - 0xDF, 0x60, 0x49, 0x58, 0x23, 0x61, 0xBB, 0xAB, - 0xA3, 0x87, 0xA8, 0x3D, 0x89, 0x91, 0x3F, 0xE4, - 0xC0, 0xC1, 0x12, 0xB9, 0x56, 0x21, 0xA4, 0xBD, - 0xA8, 0x12, 0x3A, 0x14, 0xD1, 0xA8, 0x42, 0xFB, - 0x57, 0xB8, 0x3A, 0x4F, 0xBA, 0xF3, 0x3A, 0x8E, - 0x55, 0x22, 0x38, 0xA5, 0x96, 0xAA, 0xE7, 0xA1, - 0x50, 0xD7, 0x5D, 0xA6, 0x48, 0xBC, 0x44, 0x64, - 0x49, 0x77, 0xBA, 0x1F, 0x87, 0xA4, 0xC6, 0x8A, - 0x8C, 0x4B, 0xD2, 0x45, 0xB7, 0xD0, 0x07, 0x21, - 0xF7, 0xD6, 0x4E, 0x82, 0x2B, 0x08, 0x5B, 0x90, - 0x13, 0x12, 0xEC, 0x37, 0xA8, 0x16, 0x98, 0x02, - 0x16, 0x0C, 0xCE, 0x11, 0x60, 0xF0, 0x10, 0xBE, - 0x8C, 0xBC, 0xAC, 0xE8, 0xE7, 0xB0, 0x05, 0xD7, - 0x83, 0x92, 0x34, 0xA7, 0x07, 0x86, 0x83, 0x09, - 0xD0, 0x37, 0x84, 0xB4, 0x27, 0x3B, 0x1C, 0x8A, - 0x16, 0x01, 0x33, 0xED, 0x29, 0x81, 0x84, 0x70, - 0x46, 0x25, 0xF2, 0x9C, 0xFA, 0x08, 0x6D, 0x13, - 0x26, 0x3E, 0xE5, 0x89, 0x91, 0x23, 0xC5, 0x96, - 0xBA, 0x78, 0x8E, 0x5C, 0x54, 0xA8, 0xE9, 0xBA, - 0x82, 0x9B, 0x8A, 0x9D, 0x90, 0x4B, 0xC4, 0xBC, - 0x0B, 0xBE, 0xA7, 0x6B, 0xC5, 0x3F, 0xF8, 0x11, - 0x21, 0x45, 0x98, 0x47, 0x2C, 0x9C, 0x20, 0x2B, - 0x73, 0xEF, 0xF0, 0x35, 0xDC, 0x09, 0x70, 0x3A, - 0xF7, 0xBF, 0x1B, 0xAB, 0xAA, 0xC7, 0x31, 0x93, - 0xCB, 0x46, 0x11, 0x7A, 0x7C, 0x94, 0x92, 0xA4, - 0x3F, 0xC9, 0x57, 0x89, 0xA9, 0x24, 0xC5, 0x91, - 0x27, 0x87, 0xB2, 0xE2, 0x09, 0x0E, 0xBB, 0xCF, - 0xD3, 0x79, 0x62, 0x21, 0xF0, 0x6D, 0xEB, 0xF9, - 0xCF, 0x70, 0xE0, 0x56, 0xB8, 0xB9, 0x16, 0x1D, - 0x63, 0x47, 0xF4, 0x73, 0x35, 0xF3, 0xE1, 0x77, - 0x6D, 0xA4, 0xBB, 0x87, 0xC1, 0x5C, 0xC8, 0x26, - 0x14, 0x6F, 0xF0, 0x24, 0x9A, 0x41, 0x3B, 0x45, - 0xAA, 0x93, 0xA8, 0x05, 0x19, 0x6E, 0xA4, 0x53, - 0x11, 0x4B, 0x52, 0x4E, 0x31, 0x0A, 0xED, 0xAA, - 0x46, 0xE3, 0xB9, 0x96, 0x42, 0x36, 0x87, 0x82, - 0x56, 0x6D, 0x04, 0x9A, 0x72, 0x6D, 0x6C, 0xCA, - 0x91, 0x09, 0x93, 0xAE, 0xD6, 0x21, 0xD0, 0x14, - 0x9E, 0xA5, 0x88, 0xA9, 0xAB, 0xD9, 0x09, 0xDB, - 0xB6, 0x9A, 0xA2, 0x28, 0x29, 0xD9, 0xB8, 0x3A, - 0xDA, 0x22, 0x09, 0xA6, 0xC2, 0x65, 0x9F, 0x21, - 0x69, 0xD6, 0x68, 0xB9, 0x31, 0x48, 0x42, 0xC6, - 0xE2, 0x2A, 0x74, 0x95, 0x8B, 0x4C, 0x25, 0xBB, - 0xDC, 0xD2, 0x93, 0xD9, 0x9C, 0xB6, 0x09, 0xD8, - 0x66, 0x74, 0x9A, 0x48, 0x5D, 0xFB, 0x56, 0x02, - 0x48, 0x83, 0xCF, 0x54, 0x65, 0xDB, 0xA0, 0x36, - 0x32, 0x06, 0x58, 0x7F, 0x45, 0x59, 0x7F, 0x89, - 0x00, 0x2F, 0xB8, 0x60, 0x72, 0x32, 0x13, 0x8E, - 0x03, 0xB2, 0xA8, 0x94, 0x52, 0x5F, 0x26, 0x53, - 0x70, 0x05, 0x4B, 0x48, 0x86, 0x36, 0x14, 0x47, - 0x2B, 0x95, 0xD0, 0xA2, 0x30, 0x34, 0x42, 0xE3, - 0x78, 0xB0, 0xDD, 0x1C, 0x75, 0xAC, 0xBA, 0xB9, - 0x71, 0xA9, 0xA8, 0xD1, 0x28, 0x1C, 0x79, 0x61, - 0x3A, 0xCE, 0xC6, 0x93, 0x3C, 0x37, 0x7B, 0x3C, - 0x57, 0x8C, 0x2A, 0x61, 0xA1, 0xEC, 0x18, 0x1B, - 0x10, 0x12, 0x97, 0xA3, 0x7C, 0xC5, 0x19, 0x7B, - 0x29, 0x42, 0xF6, 0xA0, 0xE4, 0x70, 0x4C, 0x0E, - 0xC6, 0x35, 0x40, 0x48, 0x1B, 0x9F, 0x15, 0x9D, - 0xC2, 0x55, 0xB5, 0x9B, 0xB5, 0x5D, 0xF4, 0x96, - 0xAE, 0x54, 0x21, 0x7B, 0x76, 0x89, 0xBD, 0x51, - 0xDB, 0xA0, 0x38, 0x3A, 0x3D, 0x72, 0xD8, 0x52, - 0xFF, 0xCA, 0x76, 0xDF, 0x05, 0xB6, 0x6E, 0xEC, - 0xCB, 0xD4, 0x7B, 0xC5, 0x30, 0x40, 0x81, 0x76, - 0x28, 0xC7, 0x1E, 0x36, 0x1D, 0x6A, 0xF8, 0x89, - 0x08, 0x49, 0x16, 0xB4, 0x08, 0xA4, 0x66, 0xC9, - 0x6E, 0x70, 0x86, 0xC4, 0xA6, 0x0A, 0x10, 0xFC, - 0xF7, 0x53, 0x7B, 0xB9, 0x4A, 0xFB, 0xCC, 0x7D, - 0x43, 0x75, 0x90, 0x91, 0x9C, 0x28, 0x65, 0x0C, - 0x4F, 0x23, 0x68, 0x25, 0x92, 0x26, 0xA9, 0xBF, - 0xDA, 0x3A, 0x3A, 0x0B, 0xA1, 0xB5, 0x08, 0x7D, - 0x9D, 0x76, 0x44, 0x2F, 0xD7, 0x86, 0xC6, 0xF8, - 0x1C, 0x68, 0xC0, 0x36, 0x0D, 0x71, 0x94, 0xD7, - 0x07, 0x2C, 0x45, 0x33, 0xAE, 0xA8, 0x6C, 0x2D, - 0x1F, 0x8C, 0x0A, 0x27, 0x69, 0x60, 0x66, 0xF6, - 0xCF, 0xD1, 0x10, 0x03, 0xF7, 0x97, 0x27, 0x0B, - 0x32, 0x38, 0x97, 0x13, 0xCF, 0xFA, 0x09, 0x3D, - 0x99, 0x1B, 0x63, 0x84, 0x4C, 0x38, 0x5E, 0x72, - 0x27, 0x7F, 0x16, 0x6F, 0x5A, 0x39, 0x34, 0xD6, - 0xBB, 0x89, 0xA4, 0x78, 0x8D, 0xE2, 0x83, 0x21, - 0xDE, 0xFC, 0x74, 0x57, 0xAB, 0x48, 0x4B, 0xD3, - 0x09, 0x86, 0xDC, 0x1D, 0xAB, 0x30, 0x08, 0xCD, - 0x7B, 0x22, 0xF6, 0x97, 0x02, 0xFA, 0xBB, 0x9A, - 0x10, 0x45, 0x40, 0x7D, 0xA4, 0x79, 0x1C, 0x35, - 0x90, 0xFF, 0x59, 0x9D, 0x81, 0xD6, 0x88, 0xCF, - 0xA7, 0xCC, 0x12, 0xA6, 0x8C, 0x50, 0xF5, 0x1A, - 0x10, 0x09, 0x41, 0x1B, 0x44, 0x85, 0x0F, 0x90, - 0x15, 0xDC, 0x84, 0xA9, 0x3B, 0x17, 0xC7, 0xA2, - 0x07, 0x55, 0x2C, 0x66, 0x1E, 0xA9, 0x83, 0x8E, - 0x31, 0xB9, 0x5E, 0xAD, 0x54, 0x62, 0x48, 0xE5, - 0x6B, 0xE7, 0xA5, 0x13, 0x05, 0x05, 0x26, 0x87, - 0x71, 0x19, 0x98, 0x80, 0xA1, 0x41, 0x77, 0x1A, - 0x9E, 0x47, 0xAC, 0xFE, 0xD5, 0x90, 0xCB, 0x3A, - 0xA7, 0xCB, 0x7C, 0x5F, 0x74, 0x91, 0x1D, 0x89, - 0x12, 0xC2, 0x9D, 0x62, 0x33, 0xF4, 0xD5, 0x3B, - 0xC6, 0x41, 0x39, 0xE2, 0xF5, 0x5B, 0xE7, 0x55, - 0x07, 0xDD, 0x77, 0x86, 0x8E, 0x38, 0x4A, 0xEC, - 0x58, 0x1F, 0x3F, 0x41, 0x1D, 0xB1, 0xA7, 0x42, - 0x97, 0x2D, 0x3E, 0xBF, 0xD3, 0x31, 0x5C, 0x84, - 0xA5, 0xAD, 0x63, 0xA0, 0xE7, 0x5C, 0x8B, 0xCA, - 0x3E, 0x30, 0x41, 0xE0, 0x5D, 0x90, 0x67, 0xAF, - 0xF3, 0xB1, 0x24, 0x4F, 0x76, 0x3E, 0x79, 0x83 - }; - static const byte seed_1024[WC_ML_KEM_ENC_RAND_SZ] = { - 0x59, 0xC5, 0x15, 0x4C, 0x04, 0xAE, 0x43, 0xAA, - 0xFF, 0x32, 0x70, 0x0F, 0x08, 0x17, 0x00, 0x38, - 0x9D, 0x54, 0xBE, 0xC4, 0xC3, 0x7C, 0x08, 0x8B, - 0x1C, 0x53, 0xF6, 0x62, 0x12, 0xB1, 0x2C, 0x72 - }; - static const byte c_1024[WC_ML_KEM_1024_CIPHER_TEXT_SIZE] = { - 0xE2, 0xD5, 0xFD, 0x4C, 0x13, 0xCE, 0xA0, 0xB5, - 0x2D, 0x87, 0x4F, 0xEA, 0x90, 0x12, 0xF3, 0xA5, - 0x17, 0x43, 0xA1, 0x09, 0x37, 0x10, 0xBB, 0xF2, - 0x39, 0x50, 0xF9, 0x14, 0x7A, 0x47, 0x2E, 0xE5, - 0x53, 0x39, 0x28, 0xA2, 0xF4, 0x6D, 0x59, 0x2F, - 0x35, 0xDA, 0x8B, 0x4F, 0x75, 0x8C, 0x89, 0x3B, - 0x0D, 0x7B, 0x98, 0x94, 0x8B, 0xE4, 0x47, 0xB1, - 0x7C, 0xB2, 0xAE, 0x58, 0xAF, 0x8A, 0x48, 0x9D, - 0xDD, 0x92, 0x32, 0xB9, 0x9B, 0x1C, 0x0D, 0x2D, - 0xE7, 0x7C, 0xAA, 0x47, 0x2B, 0xC3, 0xBB, 0xD4, - 0xA7, 0xC6, 0x0D, 0xBF, 0xDC, 0xA9, 0x2E, 0xBF, - 0x3A, 0x1C, 0xE1, 0xC2, 0x2D, 0xAD, 0x13, 0xE8, - 0x87, 0x00, 0x4E, 0x29, 0x24, 0xFD, 0x22, 0x65, - 0x6F, 0x5E, 0x50, 0x87, 0x91, 0xDE, 0x06, 0xD8, - 0x5E, 0x1A, 0x14, 0x26, 0x80, 0x8E, 0xD9, 0xA8, - 0x9F, 0x6E, 0x2F, 0xD3, 0xC2, 0x45, 0xD4, 0x75, - 0x8B, 0x22, 0xB0, 0x2C, 0xAD, 0xE3, 0x3B, 0x60, - 0xFC, 0x88, 0x9A, 0x33, 0xFC, 0x44, 0x47, 0xED, - 0xEB, 0xBF, 0xD4, 0x53, 0x0D, 0xE8, 0x65, 0x96, - 0xA3, 0x37, 0x89, 0xD5, 0xDB, 0xA6, 0xE6, 0xEC, - 0x9F, 0x89, 0x87, 0x9A, 0xF4, 0xBE, 0x49, 0x09, - 0xA6, 0x90, 0x17, 0xC9, 0xBB, 0x7A, 0x5E, 0x31, - 0x81, 0x5E, 0xA5, 0xF1, 0x32, 0xEE, 0xC4, 0x98, - 0x4F, 0xAA, 0x7C, 0xCF, 0x59, 0x4D, 0xD0, 0x0D, - 0x4D, 0x84, 0x87, 0xE4, 0x56, 0x21, 0xAF, 0x8F, - 0x6E, 0x33, 0x05, 0x51, 0x43, 0x9C, 0x93, 0xEC, - 0x07, 0x8A, 0x7A, 0x3C, 0xC1, 0x59, 0x4A, 0xF9, - 0x1F, 0x84, 0x17, 0x37, 0x5F, 0xD6, 0x08, 0x8C, - 0xEB, 0x5E, 0x85, 0xC6, 0x70, 0x99, 0x09, 0x1B, - 0xAC, 0x11, 0x49, 0x8A, 0x0D, 0x71, 0x14, 0x55, - 0xF5, 0xE0, 0xD9, 0x5C, 0xD7, 0xBB, 0xE5, 0xCD, - 0xD8, 0xFE, 0xCB, 0x31, 0x9E, 0x68, 0x53, 0xC2, - 0x3C, 0x9B, 0xE2, 0xC7, 0x63, 0xDF, 0x57, 0x86, - 0x66, 0xC4, 0x0A, 0x40, 0xA8, 0x74, 0x86, 0xE4, - 0x6B, 0xA8, 0x71, 0x61, 0x46, 0x19, 0x29, 0x04, - 0x51, 0x0A, 0x6D, 0xC5, 0x9D, 0xA8, 0x02, 0x58, - 0x25, 0x28, 0x3D, 0x68, 0x4D, 0xB9, 0x14, 0x10, - 0xB4, 0xF1, 0x2C, 0x6D, 0x8F, 0xBD, 0x0A, 0xDD, - 0x75, 0xD3, 0x09, 0x89, 0x18, 0xCB, 0x04, 0xAC, - 0x7B, 0xC4, 0xDB, 0x0D, 0x6B, 0xCD, 0xF1, 0x19, - 0x4D, 0xD8, 0x62, 0x92, 0xE0, 0x5B, 0x7B, 0x86, - 0x30, 0x62, 0x5B, 0x58, 0x9C, 0xC5, 0x09, 0xD2, - 0x15, 0xBB, 0xD0, 0x6A, 0x2E, 0x7C, 0x66, 0xF4, - 0x24, 0xCD, 0xF8, 0xC4, 0x0A, 0xC6, 0xC1, 0xE5, - 0xAE, 0x6C, 0x96, 0x4B, 0x7D, 0x9E, 0x92, 0xF9, - 0x5F, 0xC5, 0xC8, 0x85, 0x22, 0x81, 0x62, 0x8B, - 0x81, 0xB9, 0xAF, 0xAB, 0xC7, 0xF0, 0x3B, 0xE3, - 0xF6, 0x2E, 0x80, 0x47, 0xBB, 0x88, 0xD0, 0x1C, - 0x68, 0x68, 0x7B, 0x8D, 0xD4, 0xFE, 0x63, 0x82, - 0x00, 0x62, 0xB6, 0x78, 0x8A, 0x53, 0x72, 0x90, - 0x53, 0x82, 0x6E, 0xD3, 0xB7, 0xC7, 0xEF, 0x82, - 0x41, 0xE1, 0x9C, 0x85, 0x11, 0x7B, 0x3C, 0x53, - 0x41, 0x88, 0x1D, 0x4F, 0x29, 0x9E, 0x50, 0x37, - 0x4C, 0x8E, 0xEF, 0xD5, 0x56, 0x0B, 0xD1, 0x83, - 0x19, 0xA7, 0x96, 0x3A, 0x3D, 0x02, 0xF0, 0xFB, - 0xE8, 0x4B, 0xC4, 0x84, 0xB5, 0xA4, 0x01, 0x8B, - 0x97, 0xD2, 0x74, 0x19, 0x1C, 0x95, 0xF7, 0x02, - 0xBA, 0xB9, 0xB0, 0xD1, 0x05, 0xFA, 0xF9, 0xFD, - 0xCF, 0xF9, 0x7E, 0x43, 0x72, 0x36, 0x56, 0x75, - 0x99, 0xFA, 0xF7, 0x3B, 0x07, 0x5D, 0x40, 0x61, - 0x04, 0xD4, 0x03, 0xCD, 0xF8, 0x12, 0x24, 0xDA, - 0x59, 0x0B, 0xEC, 0x28, 0x97, 0xE3, 0x01, 0x09, - 0xE1, 0xF2, 0xE5, 0xAE, 0x46, 0x10, 0xC8, 0x09, - 0xA7, 0x3F, 0x63, 0x8C, 0x84, 0x21, 0x0B, 0x34, - 0x47, 0xA7, 0xC8, 0xB6, 0xDD, 0xDB, 0x5A, 0xE2, - 0x00, 0xBF, 0x20, 0xE2, 0xFE, 0x4D, 0x4B, 0xA6, - 0xC6, 0xB1, 0x27, 0x67, 0xFB, 0x87, 0x60, 0xF6, - 0x6C, 0x51, 0x18, 0xE7, 0xA9, 0x93, 0x5B, 0x41, - 0xC9, 0xA4, 0x71, 0xA1, 0xD3, 0x23, 0x76, 0x88, - 0xC1, 0xE6, 0x18, 0xCC, 0x3B, 0xE9, 0x36, 0xAA, - 0x3F, 0x5E, 0x44, 0xE0, 0x86, 0x82, 0x0B, 0x81, - 0x0E, 0x06, 0x32, 0x11, 0xFC, 0x21, 0xC4, 0x04, - 0x4B, 0x3A, 0xC4, 0xD0, 0x0D, 0xF1, 0xBC, 0xC7, - 0xB2, 0x4D, 0xC0, 0x7B, 0xA4, 0x8B, 0x23, 0xB0, - 0xFC, 0x12, 0xA3, 0xED, 0x3D, 0x0A, 0x5C, 0xF7, - 0x67, 0x14, 0x15, 0xAB, 0x9C, 0xF2, 0x12, 0x86, - 0xFE, 0x63, 0xFB, 0x41, 0x41, 0x85, 0x70, 0x55, - 0x5D, 0x47, 0x39, 0xB8, 0x81, 0x04, 0xA8, 0x59, - 0x3F, 0x29, 0x30, 0x25, 0xA4, 0xE3, 0xEE, 0x7C, - 0x67, 0xE4, 0xB4, 0x8E, 0x40, 0xF6, 0xBA, 0x8C, - 0x09, 0x86, 0x0C, 0x3F, 0xBB, 0xE5, 0x5D, 0x45, - 0xB4, 0x5F, 0xC9, 0xAB, 0x62, 0x9B, 0x17, 0xC2, - 0x76, 0xC9, 0xC9, 0xE2, 0xAF, 0x3A, 0x04, 0x3B, - 0xEA, 0xFC, 0x18, 0xFD, 0x4F, 0x25, 0xEE, 0x7F, - 0x83, 0xBD, 0xDC, 0xD2, 0xD9, 0x39, 0x14, 0xB7, - 0xED, 0x4F, 0x7C, 0x9A, 0xF1, 0x27, 0xF3, 0xF1, - 0x5C, 0x27, 0x7B, 0xE1, 0x65, 0x51, 0xFE, 0xF3, - 0xAE, 0x03, 0xD7, 0xB9, 0x14, 0x3F, 0x0C, 0x9C, - 0x01, 0x9A, 0xB9, 0x7E, 0xEA, 0x07, 0x63, 0x66, - 0x13, 0x1F, 0x51, 0x83, 0x63, 0x71, 0x1B, 0x34, - 0xE9, 0x6D, 0x3F, 0x8A, 0x51, 0x3F, 0x3E, 0x20, - 0xB1, 0xD4, 0x52, 0xC4, 0xB7, 0xAE, 0x3B, 0x97, - 0x5E, 0xA9, 0x4D, 0x88, 0x0D, 0xAC, 0x66, 0x93, - 0x39, 0x97, 0x50, 0xD0, 0x22, 0x20, 0x40, 0x3F, - 0x0D, 0x3E, 0x3F, 0xC1, 0x17, 0x2A, 0x4D, 0xE9, - 0xDC, 0x28, 0x0E, 0xAF, 0x0F, 0xEE, 0x28, 0x83, - 0xA6, 0x66, 0x0B, 0xF5, 0xA3, 0xD2, 0x46, 0xFF, - 0x41, 0xD2, 0x1B, 0x36, 0xEA, 0x52, 0x1C, 0xF7, - 0xAA, 0x68, 0x9F, 0x80, 0x0D, 0x0F, 0x86, 0xF4, - 0xFA, 0x10, 0x57, 0xD8, 0xA1, 0x3F, 0x9D, 0xA8, - 0xFF, 0xFD, 0x0D, 0xC1, 0xFA, 0xD3, 0xC0, 0x4B, - 0xB1, 0xCC, 0xCB, 0x7C, 0x83, 0x4D, 0xB0, 0x51, - 0xA7, 0xAC, 0x2E, 0x4C, 0x60, 0x30, 0x19, 0x96, - 0xC9, 0x30, 0x71, 0xEA, 0x41, 0x6B, 0x42, 0x17, - 0x59, 0x93, 0x56, 0x59, 0xCF, 0x62, 0xCA, 0x5F, - 0x13, 0xAE, 0x07, 0xC3, 0xB1, 0x95, 0xC1, 0x48, - 0x15, 0x9D, 0x8B, 0xEB, 0x03, 0xD4, 0x40, 0xB0, - 0x0F, 0x53, 0x05, 0x76, 0x5F, 0x20, 0xC0, 0xC4, - 0x6E, 0xEE, 0x59, 0xC6, 0xD1, 0x62, 0x06, 0x40, - 0x2D, 0xB1, 0xC7, 0x15, 0xE8, 0x88, 0xBD, 0xE5, - 0x9C, 0x78, 0x1F, 0x35, 0xA7, 0xCC, 0x7C, 0x1C, - 0x5E, 0xCB, 0x21, 0x55, 0xAE, 0x3E, 0x95, 0x9C, - 0x09, 0x64, 0xCC, 0x1E, 0xF8, 0xD7, 0xC6, 0x9D, - 0x14, 0x58, 0xA9, 0xA4, 0x2F, 0x95, 0xF4, 0xC6, - 0xB5, 0xB9, 0x96, 0x34, 0x57, 0x12, 0xAA, 0x29, - 0x0F, 0xBB, 0xF7, 0xDF, 0xD4, 0xA6, 0xE8, 0x64, - 0x63, 0x02, 0x2A, 0x3F, 0x47, 0x25, 0xF6, 0x51, - 0x1B, 0xF7, 0xEA, 0x5E, 0x95, 0xC7, 0x07, 0xCD, - 0x35, 0x73, 0x60, 0x9A, 0xAD, 0xEA, 0xF5, 0x40, - 0x15, 0x2C, 0x49, 0x5F, 0x37, 0xFE, 0x6E, 0xC8, - 0xBB, 0x9F, 0xA2, 0xAA, 0x61, 0xD1, 0x57, 0x35, - 0x93, 0x4F, 0x47, 0x37, 0x92, 0x8F, 0xDE, 0x90, - 0xBA, 0x99, 0x57, 0x22, 0x46, 0x5D, 0x4A, 0x64, - 0x50, 0x5A, 0x52, 0x01, 0xF0, 0x7A, 0xA5, 0x8C, - 0xFD, 0x8A, 0xE2, 0x26, 0xE0, 0x20, 0x70, 0xB2, - 0xDB, 0xF5, 0x12, 0xB9, 0x75, 0x31, 0x9A, 0x7E, - 0x87, 0x53, 0xB4, 0xFD, 0xAE, 0x0E, 0xB4, 0x92, - 0x28, 0x69, 0xCC, 0x8E, 0x25, 0xC4, 0xA5, 0x56, - 0x0C, 0x2A, 0x06, 0x85, 0xDE, 0x3A, 0xC3, 0x92, - 0xA8, 0x92, 0x5B, 0xA8, 0x82, 0x00, 0x48, 0x94, - 0x74, 0x2E, 0x43, 0xCC, 0xFC, 0x27, 0x74, 0x39, - 0xEC, 0x80, 0x50, 0xA9, 0xAE, 0xB4, 0x29, 0x32, - 0xE0, 0x1C, 0x84, 0x0D, 0xFC, 0xED, 0xCC, 0x34, - 0xD3, 0x99, 0x12, 0x89, 0xA6, 0x2C, 0x17, 0xD1, - 0x28, 0x4C, 0x83, 0x95, 0x14, 0xB9, 0x33, 0x51, - 0xDB, 0xB2, 0xDD, 0xA8, 0x1F, 0x92, 0x45, 0x65, - 0xD7, 0x0E, 0x70, 0x79, 0xD5, 0xB8, 0x12, 0x6C, - 0xAA, 0xB7, 0xA4, 0xA1, 0xC7, 0x31, 0x65, 0x5A, - 0x53, 0xBC, 0xC0, 0x9F, 0x5D, 0x63, 0xEC, 0x90, - 0x86, 0xDE, 0xA6, 0x50, 0x05, 0x59, 0x85, 0xED, - 0xFA, 0x82, 0x97, 0xD9, 0xC9, 0x54, 0x10, 0xC5, - 0xD1, 0x89, 0x4D, 0x17, 0xD5, 0x93, 0x05, 0x49, - 0xAD, 0xBC, 0x2B, 0x87, 0x33, 0xC9, 0x9F, 0xE6, - 0x2E, 0x17, 0xC4, 0xDE, 0x34, 0xA5, 0xD8, 0x9B, - 0x12, 0xD1, 0x8E, 0x42, 0xA4, 0x22, 0xD2, 0xCE, - 0x77, 0x9C, 0x2C, 0x28, 0xEB, 0x2D, 0x98, 0x00, - 0x3D, 0x5C, 0xD3, 0x23, 0xFC, 0xBE, 0xCF, 0x02, - 0xB5, 0x06, 0x6E, 0x0E, 0x73, 0x48, 0x10, 0xF0, - 0x9E, 0xD8, 0x90, 0x13, 0xC0, 0x0F, 0x01, 0x1B, - 0xD2, 0x20, 0xF2, 0xE5, 0xD6, 0xA3, 0x62, 0xDF, - 0x90, 0x59, 0x91, 0x98, 0xA0, 0x93, 0xB0, 0x3C, - 0x8D, 0x8E, 0xFB, 0xFE, 0x0B, 0x61, 0x75, 0x92, - 0xFA, 0xF1, 0xE6, 0x42, 0x20, 0xC4, 0x44, 0x0B, - 0x53, 0xFF, 0xB4, 0x71, 0x64, 0xF3, 0x69, 0xC9, - 0x52, 0x90, 0xBA, 0x9F, 0x31, 0x08, 0xD6, 0x86, - 0xC5, 0x7D, 0xB6, 0x45, 0xC5, 0x3C, 0x01, 0x2E, - 0x57, 0xAF, 0x25, 0xBD, 0x66, 0x93, 0xE2, 0xCC, - 0x6B, 0x57, 0x65, 0x1A, 0xF1, 0x59, 0x1F, 0xE5, - 0xD8, 0x91, 0x66, 0x40, 0xEC, 0x01, 0x7C, 0x25, - 0x3D, 0xF0, 0x60, 0x6B, 0xB6, 0xB3, 0x03, 0x5F, - 0xAE, 0x74, 0x8F, 0x3D, 0x40, 0x34, 0x22, 0x3B, - 0x1B, 0x5E, 0xFB, 0xF5, 0x28, 0x3E, 0x77, 0x8C, - 0x10, 0x94, 0x29, 0x1C, 0xF7, 0xB1, 0x9B, 0xE0, - 0xF3, 0x17, 0x35, 0x0E, 0x6F, 0x85, 0x18, 0xFD, - 0xE0, 0xEF, 0xB1, 0x38, 0x1F, 0xB6, 0xE1, 0x6C, - 0x24, 0x1F, 0x7F, 0x17, 0xA5, 0x21, 0x06, 0x93, - 0xA2, 0x74, 0x15, 0x9E, 0x7F, 0xAC, 0x86, 0x8C, - 0xD0, 0xDC, 0x43, 0x59, 0xC3, 0xD9, 0xEE, 0xFE, - 0xA0, 0xD9, 0xE3, 0x1E, 0x43, 0xFA, 0x65, 0x13, - 0x92, 0xC6, 0x5A, 0x54, 0x3A, 0x59, 0xB3, 0xEE, - 0xE3, 0xA6, 0x39, 0xDC, 0x94, 0x17, 0xD0, 0x56, - 0xA5, 0xFF, 0x0F, 0x16, 0x0B, 0xEE, 0xE2, 0xEA, - 0xC2, 0x9A, 0x7D, 0x88, 0xC0, 0x98, 0x2C, 0xF7, - 0x0B, 0x5A, 0x46, 0x37, 0x9F, 0x21, 0xE5, 0x06, - 0xAA, 0xC6, 0x1A, 0x9B, 0xB1, 0xB8, 0xC2, 0xB9, - 0xDA, 0xB0, 0xE4, 0x4A, 0x82, 0x3B, 0x61, 0xD0, - 0xAA, 0x11, 0xD9, 0x4F, 0x76, 0xA4, 0xA8, 0xE2, - 0x1F, 0x9D, 0x42, 0x80, 0x68, 0x32, 0x08, 0xF4, - 0xEA, 0x91, 0x11, 0x16, 0xF6, 0xFD, 0x6A, 0x97, - 0x42, 0x69, 0x34, 0xEC, 0x34, 0x26, 0xB8, 0xC8, - 0xF7, 0x03, 0xDA, 0x85, 0xE9, 0xDC, 0xF9, 0x93, - 0x36, 0x13, 0x60, 0x03, 0x72, 0x8B, 0x8E, 0xCD, - 0xD0, 0x4A, 0x38, 0x9F, 0x6A, 0x81, 0x7A, 0x78, - 0xBF, 0xA6, 0x1B, 0xA4, 0x60, 0x20, 0xBF, 0x3C, - 0x34, 0x82, 0x95, 0x08, 0xF9, 0xD0, 0x6D, 0x15, - 0x53, 0xCD, 0x98, 0x7A, 0xAC, 0x38, 0x0D, 0x86, - 0xF1, 0x68, 0x84, 0x3B, 0xA3, 0x90, 0x4D, 0xE5, - 0xF7, 0x05, 0x8A, 0x41, 0xB4, 0xCD, 0x38, 0x8B, - 0xC9, 0xCE, 0x3A, 0xBA, 0x7E, 0xE7, 0x13, 0x9B, - 0x7F, 0xC9, 0xE5, 0xB8, 0xCF, 0xAA, 0xA3, 0x89, - 0x90, 0xBD, 0x4A, 0x5D, 0xB3, 0x2E, 0x26, 0x13, - 0xE7, 0xEC, 0x4F, 0x5F, 0x8B, 0x12, 0x92, 0xA3, - 0x8C, 0x6F, 0x4F, 0xF5, 0xA4, 0x04, 0x90, 0xD7, - 0x6B, 0x12, 0x66, 0x52, 0xFC, 0xF8, 0x6E, 0x24, - 0x52, 0x35, 0xD6, 0x36, 0xC6, 0x5C, 0xD1, 0x02, - 0xB0, 0x1E, 0x22, 0x78, 0x1A, 0x72, 0x91, 0x8C - }; - static const byte k_1024[WC_ML_KEM_SS_SZ] = { - 0x72, 0x64, 0xBD, 0xE5, 0xC6, 0xCE, 0xC1, 0x48, - 0x49, 0x69, 0x3E, 0x2C, 0x3C, 0x86, 0xE4, 0x8F, - 0x80, 0x95, 0x8A, 0x4F, 0x61, 0x86, 0xFC, 0x69, - 0x33, 0x3A, 0x41, 0x48, 0xE6, 0xE4, 0x97, 0xF3 - }; -#endif - static byte ct[WC_ML_KEM_MAX_CIPHER_TEXT_SIZE]; - static byte ss[WC_ML_KEM_SS_SZ]; - - key = (KyberKey*)XMALLOC(sizeof(KyberKey), NULL, DYNAMIC_TYPE_TMP_BUFFER); - ExpectNotNull(key); - if (key != NULL) { - XMEMSET(key, 0, sizeof(KyberKey)); - } - -#ifndef WOLFSSL_NO_ML_KEM_512 - ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_512, key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_KyberKey_DecodePublicKey(key, ek_512, sizeof(ek_512)), 0); - ExpectIntEQ(wc_KyberKey_EncapsulateWithRandom(key, ct, ss, seed_512, - sizeof(seed_512)), 0); - ExpectIntEQ(XMEMCMP(ct, c_512, WC_ML_KEM_512_CIPHER_TEXT_SIZE), 0); - ExpectIntEQ(XMEMCMP(ss, k_512, WC_ML_KEM_SS_SZ), 0); - wc_KyberKey_Free(key); -#endif -#ifndef WOLFSSL_NO_ML_KEM_768 - ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_768, key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_KyberKey_DecodePublicKey(key, ek_768, sizeof(ek_768)), 0); - ExpectIntEQ(wc_KyberKey_EncapsulateWithRandom(key, ct, ss, seed_768, - sizeof(seed_768)), 0); - ExpectIntEQ(XMEMCMP(ct, c_768, WC_ML_KEM_768_CIPHER_TEXT_SIZE), 0); - ExpectIntEQ(XMEMCMP(ss, k_768, WC_ML_KEM_SS_SZ), 0); - wc_KyberKey_Free(key); -#endif -#ifndef WOLFSSL_NO_ML_KEM_1024 - ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_1024, key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_KyberKey_DecodePublicKey(key, ek_1024, sizeof(ek_1024)), 0); - ExpectIntEQ(wc_KyberKey_EncapsulateWithRandom(key, ct, ss, seed_1024, - sizeof(seed_1024)), 0); - ExpectIntEQ(XMEMCMP(ct, c_1024, WC_ML_KEM_1024_CIPHER_TEXT_SIZE), 0); - ExpectIntEQ(XMEMCMP(ss, k_1024, WC_ML_KEM_SS_SZ), 0); - wc_KyberKey_Free(key); -#endif - - XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); -#endif - return EXPECT_RESULT(); -} - -static int test_wc_kyber_decapsulate_kats(void) -{ - EXPECT_DECLS; -#if defined(WOLFSSL_HAVE_KYBER) && defined(WOLFSSL_WC_KYBER) && \ - !defined(WOLFSSL_NO_ML_KEM) - KyberKey* key; -#ifndef WOLFSSL_NO_ML_KEM_512 - static const byte dk_512[WC_ML_KEM_512_PRIVATE_KEY_SIZE] = { - 0x69, 0xF9, 0xCB, 0xFD, 0x12, 0x37, 0xBA, 0x16, - 0x1C, 0xF6, 0xE6, 0xC1, 0x8F, 0x48, 0x8F, 0xC6, - 0xE3, 0x9A, 0xB4, 0xA5, 0xC9, 0xE6, 0xC2, 0x2E, - 0xA4, 0xE3, 0xAD, 0x8F, 0x26, 0x7A, 0x9C, 0x44, - 0x20, 0x10, 0xD3, 0x2E, 0x61, 0xF8, 0x3E, 0x6B, - 0xFA, 0x5C, 0x58, 0x70, 0x61, 0x45, 0x37, 0x6D, - 0xBB, 0x84, 0x95, 0x28, 0xF6, 0x80, 0x07, 0xC8, - 0x22, 0xB3, 0x3A, 0x95, 0xB8, 0x49, 0x04, 0xDC, - 0xD2, 0x70, 0x8D, 0x03, 0x40, 0xC8, 0xB8, 0x08, - 0xBC, 0xD3, 0xAA, 0xD0, 0xE4, 0x8B, 0x85, 0x84, - 0x95, 0x83, 0xA1, 0xB4, 0xE5, 0x94, 0x5D, 0xD9, - 0x51, 0x4A, 0x7F, 0x64, 0x61, 0xE0, 0x57, 0xB7, - 0xEC, 0xF6, 0x19, 0x57, 0xE9, 0x7C, 0xF6, 0x28, - 0x15, 0xF9, 0xC3, 0x22, 0x94, 0xB3, 0x26, 0xE1, - 0xA1, 0xC4, 0xE3, 0x60, 0xB9, 0x49, 0x8B, 0xA8, - 0x0F, 0x8C, 0xA9, 0x15, 0x32, 0xB1, 0x71, 0xD0, - 0xAE, 0xFC, 0x48, 0x49, 0xFA, 0x53, 0xBC, 0x61, - 0x79, 0x32, 0xE2, 0x08, 0xA6, 0x77, 0xC6, 0x04, - 0x4A, 0x66, 0x00, 0xB8, 0xD8, 0xB8, 0x3F, 0x26, - 0xA7, 0x47, 0xB1, 0x8C, 0xFB, 0x78, 0xBE, 0xAF, - 0xC5, 0x51, 0xAD, 0x52, 0xB7, 0xCA, 0x6C, 0xB8, - 0x8F, 0x3B, 0x5D, 0x9C, 0xE2, 0xAF, 0x6C, 0x67, - 0x95, 0x6C, 0x47, 0x8C, 0xEF, 0x49, 0x1F, 0x59, - 0xE0, 0x19, 0x1B, 0x3B, 0xBE, 0x92, 0x9B, 0x94, - 0xB6, 0x66, 0xC1, 0x76, 0x13, 0x8B, 0x00, 0xF4, - 0x97, 0x24, 0x34, 0x1E, 0xE2, 0xE1, 0x64, 0xB9, - 0x4C, 0x05, 0x3C, 0x18, 0x5A, 0x51, 0xF9, 0x3E, - 0x00, 0xF3, 0x68, 0x61, 0x61, 0x3A, 0x7F, 0xD7, - 0x2F, 0xEB, 0xD2, 0x3A, 0x8B, 0x96, 0xA2, 0x60, - 0x23, 0x42, 0x39, 0xC9, 0x62, 0x8F, 0x99, 0x5D, - 0xC1, 0x38, 0x07, 0xB4, 0x3A, 0x69, 0x46, 0x81, - 0x67, 0xCB, 0x1A, 0x8F, 0x9D, 0xD0, 0x7E, 0xE3, - 0xB3, 0x32, 0x38, 0xF6, 0x30, 0x96, 0xEB, 0xC4, - 0x9D, 0x50, 0x51, 0xC4, 0xB6, 0x59, 0x63, 0xD7, - 0x4A, 0x47, 0x66, 0xC2, 0x26, 0xF0, 0xB9, 0x4F, - 0x18, 0x62, 0xC2, 0x12, 0x4C, 0x8C, 0x74, 0x97, - 0x48, 0xC0, 0xBC, 0x4D, 0xC1, 0x4C, 0xB3, 0x49, - 0x06, 0xB8, 0x1C, 0x55, 0x24, 0xFB, 0x81, 0x00, - 0x79, 0x85, 0x42, 0xDC, 0x6C, 0xC2, 0xAA, 0x0A, - 0x70, 0x85, 0x75, 0xEA, 0xBC, 0xC1, 0x1F, 0x96, - 0xA9, 0xE6, 0x1C, 0x01, 0x7A, 0x96, 0xA7, 0xCE, - 0x93, 0xC4, 0x20, 0x91, 0x73, 0x71, 0x13, 0xAE, - 0x78, 0x3C, 0x0A, 0xE8, 0x75, 0x5E, 0x59, 0x41, - 0x11, 0xED, 0xFA, 0xBF, 0xD8, 0x6C, 0x32, 0x12, - 0xC6, 0x12, 0xA7, 0xB6, 0x2A, 0xFD, 0x3C, 0x7A, - 0x5C, 0x78, 0xB2, 0xF0, 0x73, 0x44, 0xB7, 0x89, - 0xC2, 0xB2, 0xDB, 0xB5, 0xF4, 0x44, 0x8B, 0xE9, - 0x7B, 0xBA, 0x42, 0x33, 0xC0, 0x03, 0x9C, 0x0F, - 0xE8, 0x43, 0x00, 0xF9, 0xB0, 0x3A, 0xC9, 0x94, - 0x97, 0xE6, 0xD4, 0x6B, 0x6E, 0x95, 0x30, 0x8F, - 0xF8, 0x47, 0x90, 0xF6, 0x12, 0xCF, 0x18, 0x6E, - 0xC1, 0x68, 0x11, 0xE8, 0x0C, 0x17, 0x93, 0x16, - 0xA6, 0x3B, 0x25, 0x70, 0x3F, 0x60, 0xB8, 0x42, - 0xB6, 0x19, 0x07, 0xE6, 0x28, 0x94, 0xE7, 0x36, - 0x64, 0x7B, 0x3C, 0x09, 0xDA, 0x6F, 0xEC, 0x59, - 0x32, 0x78, 0x2B, 0x36, 0xE0, 0x63, 0x50, 0x85, - 0xA3, 0x94, 0x9E, 0x69, 0x4D, 0x7E, 0x17, 0xCB, - 0xA3, 0xD9, 0x06, 0x43, 0x30, 0x43, 0x8C, 0x07, - 0x1B, 0x58, 0x36, 0xA7, 0x70, 0xC5, 0x5F, 0x62, - 0x13, 0xCC, 0x14, 0x25, 0x84, 0x5D, 0xE5, 0xA3, - 0x34, 0xD7, 0x5D, 0x3E, 0x50, 0x58, 0xC7, 0x80, - 0x9F, 0xDA, 0x4B, 0xCD, 0x78, 0x19, 0x1D, 0xA9, - 0x79, 0x73, 0x25, 0xE6, 0x23, 0x6C, 0x26, 0x50, - 0xFC, 0x60, 0x4E, 0xE4, 0x3A, 0x83, 0xCE, 0xB3, - 0x49, 0x80, 0x08, 0x44, 0x03, 0xA3, 0x32, 0x59, - 0x85, 0x79, 0x07, 0x79, 0x9A, 0x9D, 0x2A, 0x71, - 0x3A, 0x63, 0x3B, 0x5C, 0x90, 0x47, 0x27, 0xF6, - 0x1E, 0x42, 0x52, 0x09, 0x91, 0xD6, 0x55, 0x70, - 0x5C, 0xB6, 0xBC, 0x1B, 0x74, 0xAF, 0x60, 0x71, - 0x3E, 0xF8, 0x71, 0x2F, 0x14, 0x08, 0x68, 0x69, - 0xBE, 0x8E, 0xB2, 0x97, 0xD2, 0x28, 0xB3, 0x25, - 0xA0, 0x60, 0x9F, 0xD6, 0x15, 0xEA, 0xB7, 0x08, - 0x15, 0x40, 0xA6, 0x1A, 0x82, 0xAB, 0xF4, 0x3B, - 0x7D, 0xF9, 0x8A, 0x59, 0x5B, 0xE1, 0x1F, 0x41, - 0x6B, 0x41, 0xE1, 0xEB, 0x75, 0xBB, 0x57, 0x97, - 0x7C, 0x25, 0xC6, 0x4E, 0x97, 0x43, 0x7D, 0x88, - 0xCA, 0x5F, 0xDA, 0x61, 0x59, 0xD6, 0x68, 0xF6, - 0xBA, 0xB8, 0x15, 0x75, 0x55, 0xB5, 0xD5, 0x4C, - 0x0F, 0x47, 0xCB, 0xCD, 0x16, 0x84, 0x3B, 0x1A, - 0x0A, 0x0F, 0x02, 0x10, 0xEE, 0x31, 0x03, 0x13, - 0x96, 0x7F, 0x3D, 0x51, 0x64, 0x99, 0x01, 0x8F, - 0xDF, 0x31, 0x14, 0x77, 0x24, 0x70, 0xA1, 0x88, - 0x9C, 0xC0, 0x6C, 0xB6, 0xB6, 0x69, 0x0A, 0xC3, - 0x1A, 0xBC, 0xFA, 0xF4, 0xBC, 0x70, 0x76, 0x84, - 0x54, 0x5B, 0x00, 0x0B, 0x58, 0x0C, 0xCB, 0xFC, - 0xBC, 0xE9, 0xFA, 0x70, 0xAA, 0xEA, 0x0B, 0xBD, - 0x91, 0x10, 0x99, 0x2A, 0x7C, 0x6C, 0x06, 0xCB, - 0x36, 0x85, 0x27, 0xFD, 0x22, 0x90, 0x90, 0x75, - 0x7E, 0x6F, 0xE7, 0x57, 0x05, 0xFA, 0x59, 0x2A, - 0x76, 0x08, 0xF0, 0x50, 0xC6, 0xF8, 0x87, 0x03, - 0xCC, 0x28, 0xCB, 0x00, 0x0C, 0x1D, 0x7E, 0x77, - 0xB8, 0x97, 0xB7, 0x2C, 0x62, 0xBC, 0xC7, 0xAE, - 0xA2, 0x1A, 0x57, 0x72, 0x94, 0x83, 0xD2, 0x21, - 0x18, 0x32, 0xBE, 0xD6, 0x12, 0x43, 0x0C, 0x98, - 0x31, 0x03, 0xC6, 0x9E, 0x8C, 0x07, 0x2C, 0x0E, - 0xA7, 0x89, 0x8F, 0x22, 0x83, 0xBE, 0xC4, 0x8C, - 0x5A, 0xC8, 0x19, 0x84, 0xD4, 0xA5, 0xA8, 0x36, - 0x19, 0x73, 0x5A, 0x84, 0x2B, 0xD1, 0x72, 0xC0, - 0xD1, 0xB3, 0x9F, 0x43, 0x58, 0x8A, 0xF1, 0x70, - 0x45, 0x8B, 0xA9, 0xEE, 0x74, 0x92, 0xEA, 0xAA, - 0x94, 0xEA, 0x53, 0xA4, 0xD3, 0x84, 0x98, 0xEC, - 0xBB, 0x98, 0xA5, 0xF4, 0x07, 0xE7, 0xC9, 0x7B, - 0x4E, 0x16, 0x6E, 0x39, 0x71, 0x92, 0xC2, 0x16, - 0x03, 0x30, 0x14, 0xB8, 0x78, 0xE9, 0x38, 0x07, - 0x5C, 0x6C, 0x1F, 0x10, 0xA0, 0x06, 0x5A, 0xBC, - 0x31, 0x63, 0x72, 0x2F, 0x1A, 0x2E, 0xFF, 0xEC, - 0x8D, 0x6E, 0x3A, 0x0C, 0x4F, 0x71, 0x74, 0xFC, - 0x16, 0xB7, 0x9F, 0xB5, 0x18, 0x6A, 0x75, 0x16, - 0x8F, 0x81, 0xA5, 0x6A, 0xA4, 0x8A, 0x20, 0xA0, - 0x4B, 0xDD, 0xF1, 0x82, 0xC6, 0xE1, 0x79, 0xC3, - 0xF6, 0x90, 0x61, 0x55, 0x5E, 0xF7, 0x39, 0x6D, - 0xD0, 0xB7, 0x49, 0x96, 0x01, 0xA6, 0xEB, 0x3A, - 0x96, 0xA9, 0xA2, 0x2D, 0x04, 0xF1, 0x16, 0x8D, - 0xB5, 0x63, 0x55, 0xB0, 0x76, 0x00, 0xA2, 0x03, - 0x70, 0x63, 0x7B, 0x64, 0x59, 0x76, 0xBB, 0xD9, - 0x7B, 0x6D, 0x62, 0x88, 0xA0, 0xD3, 0x03, 0x63, - 0x60, 0x47, 0x2E, 0x3A, 0xC7, 0x1D, 0x56, 0x6D, - 0xB8, 0xFB, 0xB1, 0xB1, 0xD7, 0x6C, 0xB7, 0x55, - 0xCD, 0x0D, 0x68, 0xBD, 0xBF, 0xC0, 0x48, 0xEB, - 0xA2, 0x52, 0x5E, 0xEA, 0x9D, 0xD5, 0xB1, 0x44, - 0xFB, 0x3B, 0x60, 0xFB, 0xC3, 0x42, 0x39, 0x32, - 0x0C, 0xBC, 0x06, 0x9B, 0x35, 0xAB, 0x16, 0xB8, - 0x75, 0x65, 0x36, 0xFB, 0x33, 0xE8, 0xA6, 0xAF, - 0x1D, 0xD4, 0x2C, 0x79, 0xF4, 0x8A, 0xD1, 0x20, - 0xAE, 0x4B, 0x15, 0x9D, 0x3D, 0x8C, 0x31, 0x90, - 0x60, 0xCC, 0xE5, 0x69, 0xC3, 0xF6, 0x03, 0x53, - 0x65, 0x58, 0x5D, 0x34, 0x41, 0x37, 0x95, 0xA6, - 0xA1, 0x8E, 0xC5, 0x13, 0x6A, 0xB1, 0x3C, 0x90, - 0xE3, 0xAF, 0x14, 0xC0, 0xB8, 0xA4, 0x64, 0xC8, - 0x6B, 0x90, 0x73, 0x22, 0x2B, 0x56, 0xB3, 0xF7, - 0x32, 0x8A, 0xEA, 0x79, 0x81, 0x55, 0x32, 0x59, - 0x11, 0x25, 0x0E, 0xF0, 0x16, 0xD7, 0x28, 0x02, - 0xE3, 0x87, 0x8A, 0xA5, 0x05, 0x40, 0xCC, 0x98, - 0x39, 0x56, 0x97, 0x1D, 0x6E, 0xFA, 0x35, 0x2C, - 0x02, 0x55, 0x4D, 0xC7, 0x60, 0xA5, 0xA9, 0x13, - 0x58, 0xEA, 0x56, 0x37, 0x08, 0x84, 0xFD, 0x5B, - 0x3F, 0x85, 0xB7, 0x0E, 0x83, 0xE4, 0x69, 0x7D, - 0xEB, 0x17, 0x05, 0x16, 0x9E, 0x9C, 0x60, 0xA7, - 0x45, 0x28, 0xCF, 0x15, 0x28, 0x1C, 0xB1, 0xB1, - 0xC4, 0x57, 0xD4, 0x67, 0xB5, 0xF9, 0x3A, 0x60, - 0x37, 0x3D, 0x10, 0xE0, 0xCF, 0x6A, 0x83, 0x7A, - 0xA3, 0xC9, 0x59, 0x6A, 0x72, 0xBE, 0xC2, 0x9B, - 0x2D, 0x7E, 0x58, 0x65, 0x3D, 0x53, 0x30, 0x61, - 0xD3, 0x81, 0xD5, 0x17, 0x59, 0x75, 0x22, 0x17, - 0xEB, 0x46, 0xCA, 0xC7, 0x80, 0x7C, 0x4A, 0xD3, - 0x8B, 0x61, 0x16, 0x44, 0xAC, 0xF0, 0xA3, 0xF2, - 0x6B, 0x6B, 0x08, 0x4A, 0xB4, 0x7A, 0x83, 0xBF, - 0x0D, 0x69, 0x6F, 0x8A, 0x47, 0x68, 0xFC, 0x35, - 0xBC, 0xA6, 0xBC, 0x79, 0x03, 0xB2, 0xA2, 0x37, - 0xC2, 0x77, 0x49, 0xF5, 0x51, 0x0C, 0x86, 0x38, - 0x69, 0xE6, 0xAE, 0x56, 0xBB, 0x2A, 0xFE, 0x47, - 0x71, 0xC9, 0x22, 0x18, 0x74, 0xF5, 0x0F, 0x5B, - 0x14, 0xBA, 0xAD, 0x59, 0x93, 0xB4, 0x92, 0x38, - 0xFD, 0x0A, 0x0C, 0x9F, 0x79, 0xB7, 0xB4, 0x58, - 0x4E, 0x41, 0x30, 0x1F, 0x7A, 0x88, 0x5C, 0x9F, - 0x91, 0x81, 0x9B, 0xEA, 0x00, 0xD5, 0x12, 0x58, - 0x17, 0x30, 0x53, 0x9F, 0xB3, 0x7E, 0x59, 0xE8, - 0x6A, 0x6D, 0x19, 0xCA, 0x25, 0xF0, 0xA8, 0x11, - 0xC9, 0xB4, 0x28, 0xBA, 0x86, 0x14, 0xAA, 0x4F, - 0x94, 0x80, 0x7B, 0xC0, 0x31, 0xCB, 0xCC, 0x18, - 0x3F, 0x3B, 0xF0, 0x7F, 0xE2, 0xC1, 0xA6, 0xEB, - 0xA8, 0x0D, 0x5A, 0x70, 0x6E, 0xE0, 0xDA, 0xB2, - 0x7E, 0x23, 0x14, 0x58, 0x02, 0x5D, 0x84, 0xA7, - 0xA9, 0xB0, 0x23, 0x05, 0x01, 0x11, 0x6C, 0x29, - 0x0A, 0x6B, 0xB5, 0x06, 0x26, 0xD9, 0x7B, 0x93, - 0x98, 0x50, 0x94, 0x28, 0x28, 0x39, 0x0B, 0x0A, - 0x20, 0x01, 0xB7, 0x85, 0x3A, 0xD1, 0xAE, 0x9B, - 0x01, 0x1B, 0x2D, 0xB3, 0x6C, 0xAE, 0xEA, 0x73, - 0xA2, 0x32, 0x8E, 0x3C, 0x56, 0x48, 0x5B, 0x49, - 0x1C, 0x29, 0x91, 0x15, 0xA0, 0x17, 0xC9, 0x07, - 0xAB, 0x54, 0x31, 0x72, 0x60, 0xA5, 0x93, 0xA0, - 0xD7, 0xBA, 0x6D, 0x06, 0x61, 0x5D, 0x6E, 0x2C, - 0xA8, 0x4B, 0x86, 0x0E, 0xFF, 0x3C, 0xCB, 0x59, - 0x72, 0x11, 0xBF, 0xE3, 0x6B, 0xDE, 0xF8, 0x06, - 0x9A, 0xFA, 0x36, 0xC5, 0xA7, 0x33, 0x92, 0x72, - 0x26, 0x50, 0xE4, 0x95, 0x7D, 0xCA, 0x59, 0x7A, - 0xCB, 0xA5, 0x60, 0x5B, 0x63, 0xC1, 0x63, 0xCF, - 0xA9, 0x4B, 0x64, 0xDD, 0xD6, 0x23, 0x01, 0xA4, - 0x33, 0x20, 0x83, 0x36, 0x19, 0x72, 0x58, 0x9D, - 0xB0, 0x59, 0x9A, 0x69, 0x4D, 0xD4, 0x54, 0x7A, - 0x5E, 0xE9, 0x19, 0x65, 0x77, 0xC2, 0x2E, 0xD4, - 0x27, 0xAC, 0x89, 0xBB, 0x8B, 0xA3, 0x75, 0x3E, - 0xB7, 0x6C, 0x41, 0xF2, 0xC1, 0x12, 0x9C, 0x8A, - 0x77, 0xD6, 0x80, 0x5F, 0xA7, 0x19, 0xB1, 0xB6, - 0xCA, 0x11, 0xB7, 0x40, 0xA7, 0x8A, 0x3D, 0x41, - 0xB5, 0x33, 0x05, 0x26, 0xAB, 0x87, 0xD5, 0x8D, - 0x59, 0x25, 0x31, 0x5A, 0x14, 0x85, 0xED, 0xC6, - 0x47, 0xC1, 0x60, 0x4E, 0xB3, 0x81, 0x38, 0xDE, - 0x63, 0x7A, 0xD2, 0xC6, 0xCA, 0x5B, 0xE4, 0x4E, - 0x10, 0x08, 0xB2, 0xC0, 0x86, 0x7B, 0x22, 0x9C, - 0xCC, 0x36, 0x61, 0x9E, 0x27, 0x58, 0xC4, 0xC2, - 0x02, 0x9E, 0xAE, 0xB2, 0x6E, 0x7A, 0x80, 0x3F, - 0xCA, 0x30, 0x5A, 0x59, 0xCD, 0x58, 0x5E, 0x11, - 0x7D, 0x69, 0x8E, 0xCE, 0x01, 0x1C, 0xC3, 0xFC, - 0xE5, 0x4D, 0x2E, 0x11, 0x45, 0x45, 0xA2, 0x1A, - 0xC5, 0xBE, 0x67, 0x71, 0xAB, 0x8F, 0x13, 0x12, - 0x2F, 0xAD, 0x29, 0x5E, 0x74, 0x5A, 0x50, 0x3B, - 0x14, 0x2F, 0x91, 0xAE, 0xF7, 0xBD, 0xE9, 0x99, - 0x98, 0x84, 0x5F, 0xDA, 0x04, 0x35, 0x55, 0xC9, - 0xC1, 0xEE, 0x53, 0x5B, 0xE1, 0x25, 0xE5, 0xDC, - 0xE5, 0xD2, 0x66, 0x66, 0x7E, 0x72, 0x3E, 0x67, - 0xB6, 0xBA, 0x89, 0x1C, 0x16, 0xCB, 0xA1, 0x74, - 0x09, 0x8A, 0x3F, 0x35, 0x17, 0x78, 0xB0, 0x88, - 0x8C, 0x95, 0x90, 0xA9, 0x09, 0x0C, 0xD4, 0x04 - }; - static const byte c_512[WC_ML_KEM_512_CIPHER_TEXT_SIZE] = { - 0x16, 0x1C, 0xD2, 0x59, 0xFE, 0xAA, 0x7E, 0xC6, - 0xB2, 0x86, 0x49, 0x8A, 0x9A, 0x6F, 0x69, 0xF8, - 0xB2, 0x62, 0xA2, 0xE2, 0x09, 0x3D, 0x0F, 0xBD, - 0x76, 0xD5, 0xDC, 0x1C, 0x9F, 0xDE, 0x0D, 0xED, - 0xB3, 0x65, 0x81, 0x00, 0x4C, 0xB4, 0x81, 0x12, - 0xF8, 0x52, 0xE7, 0xF8, 0x7F, 0x64, 0x9E, 0x8A, - 0x42, 0xCD, 0x9E, 0x03, 0x49, 0xE7, 0xDA, 0xBD, - 0xF0, 0xA9, 0xAC, 0x1B, 0x52, 0x1C, 0x37, 0xEA, - 0x52, 0x41, 0x37, 0x0A, 0x8A, 0xB2, 0x91, 0x1C, - 0xC7, 0x99, 0x02, 0xC9, 0x5D, 0x28, 0x22, 0x4F, - 0xA8, 0x89, 0x6A, 0xD7, 0x15, 0x20, 0x9E, 0xCD, - 0xD5, 0xD7, 0x84, 0xE9, 0x1D, 0xD9, 0xD0, 0xBE, - 0x91, 0x6B, 0x45, 0x65, 0xF4, 0xD5, 0x66, 0x9A, - 0xEE, 0x0D, 0xEF, 0x93, 0x1E, 0x97, 0x68, 0x29, - 0x4E, 0xEC, 0x52, 0x58, 0xDE, 0x83, 0x91, 0xEC, - 0xE2, 0x71, 0xE7, 0xE4, 0xCF, 0xD9, 0xD2, 0x3A, - 0x79, 0xFA, 0xC3, 0xA8, 0xE0, 0xDB, 0x5D, 0xDD, - 0x6E, 0x01, 0x07, 0x23, 0x56, 0x88, 0xBB, 0xDF, - 0x7B, 0xC5, 0xD5, 0x63, 0x2F, 0x20, 0x6C, 0x63, - 0xA0, 0xC9, 0x56, 0x4F, 0x30, 0x96, 0x5C, 0xA5, - 0x8C, 0x69, 0xFF, 0x92, 0xD2, 0x5A, 0x4F, 0x93, - 0xA0, 0x9E, 0xAB, 0x9B, 0x90, 0x85, 0x94, 0x7E, - 0x07, 0x8A, 0x23, 0xE4, 0xD9, 0xC1, 0x3B, 0x8A, - 0x56, 0xE7, 0x3E, 0x18, 0xDF, 0x42, 0xD6, 0x94, - 0x9F, 0xAF, 0x59, 0x21, 0xF2, 0xE3, 0x73, 0xD4, - 0x50, 0xC8, 0xC0, 0x9D, 0x07, 0xB1, 0x52, 0xA9, - 0x7C, 0x24, 0x54, 0x47, 0x42, 0x94, 0x81, 0xD4, - 0x98, 0xBE, 0xB7, 0x25, 0x6B, 0xC4, 0x7F, 0x68, - 0xF9, 0x92, 0x2B, 0x0B, 0x1C, 0x62, 0xD9, 0xC2, - 0x3F, 0x9F, 0x73, 0x3D, 0xD7, 0x37, 0x92, 0xCF, - 0xC7, 0xB4, 0x3C, 0xBC, 0xEA, 0x27, 0x7D, 0x51, - 0xB2, 0xB8, 0xAD, 0x4A, 0x4F, 0x52, 0x2F, 0x64, - 0x2C, 0xAD, 0x5C, 0x5D, 0xEB, 0x21, 0xF3, 0x62, - 0x7F, 0x8A, 0xF4, 0xD3, 0xE5, 0xBC, 0x9E, 0x91, - 0xD4, 0xCB, 0x2F, 0x12, 0x4B, 0x5B, 0xD7, 0xC2, - 0xF4, 0xA0, 0x50, 0xCA, 0x75, 0x5B, 0xDB, 0x80, - 0x56, 0x60, 0x96, 0x63, 0xFB, 0x95, 0x11, 0xC9, - 0xAD, 0x83, 0xB5, 0x03, 0x90, 0x88, 0xCC, 0x01, - 0xF0, 0xDD, 0x54, 0x35, 0x3B, 0x0D, 0xD7, 0x43, - 0x3F, 0x0C, 0x6C, 0xEE, 0x0D, 0x07, 0x59, 0x59, - 0x81, 0x0D, 0xEC, 0x54, 0x16, 0x52, 0x2B, 0xB1, - 0xF1, 0xF6, 0x55, 0x47, 0xA0, 0xC2, 0xE9, 0xCC, - 0x9B, 0xC1, 0x7F, 0x8D, 0x39, 0xD2, 0x93, 0x09, - 0xEB, 0xE7, 0x9F, 0x21, 0x33, 0x1B, 0x75, 0xE1, - 0x2A, 0xF2, 0xE9, 0x3F, 0x03, 0xF7, 0x4F, 0x7F, - 0x87, 0xD3, 0x60, 0xF1, 0xDA, 0xF8, 0x6C, 0xED, - 0x73, 0x60, 0x92, 0xA2, 0x11, 0xA8, 0x15, 0x88, - 0x59, 0xC4, 0x2E, 0x22, 0x3C, 0xFE, 0x2E, 0x6E, - 0x55, 0x34, 0x37, 0xD8, 0x05, 0x76, 0xCF, 0xD1, - 0x94, 0x4E, 0x97, 0xEE, 0xFF, 0x9B, 0x49, 0xE5, - 0xEC, 0xCF, 0xC6, 0x78, 0xEE, 0x16, 0x52, 0x68, - 0xDF, 0xE3, 0xD3, 0x59, 0x6B, 0x4B, 0x86, 0x20, - 0x4A, 0x81, 0xC6, 0x06, 0x3B, 0x0C, 0xDC, 0xE6, - 0x19, 0xFD, 0xBB, 0x96, 0xDF, 0x7D, 0xE6, 0xE0, - 0xBD, 0x52, 0x70, 0xB4, 0xD5, 0x9C, 0x4D, 0xC5, - 0x08, 0x47, 0x6E, 0x7F, 0x07, 0x08, 0xF9, 0x8C, - 0x7A, 0x4F, 0x66, 0x45, 0xC4, 0x9D, 0x06, 0x10, - 0x0C, 0x76, 0x0C, 0x59, 0x95, 0x28, 0xD1, 0xB8, - 0xBB, 0xFE, 0x62, 0x81, 0x91, 0xCC, 0x08, 0x3C, - 0x8D, 0x22, 0x5A, 0x09, 0x3F, 0x9F, 0x17, 0xE3, - 0x55, 0x74, 0x98, 0x6F, 0x86, 0xBA, 0xA4, 0x68, - 0x98, 0xB5, 0x89, 0xF3, 0xCB, 0x7D, 0xB4, 0x6A, - 0x45, 0xF3, 0xED, 0xD4, 0xFA, 0xC2, 0x08, 0x08, - 0xF4, 0xCD, 0x02, 0x49, 0xDA, 0x69, 0x3F, 0x8F, - 0xAB, 0xFB, 0xD4, 0xE1, 0x0C, 0x02, 0xC6, 0x5B, - 0xA8, 0xC8, 0x61, 0x0F, 0xA8, 0xC6, 0xDF, 0x3D, - 0xBA, 0xEB, 0x67, 0x63, 0xDD, 0x48, 0x2A, 0xF4, - 0x15, 0x58, 0xB1, 0xE1, 0x5C, 0xC9, 0xC7, 0xA7, - 0x2E, 0x07, 0x16, 0x85, 0xAC, 0x19, 0xA0, 0x51, - 0xF1, 0x92, 0x45, 0xB9, 0xF7, 0x7C, 0x30, 0x38, - 0xA5, 0x4E, 0x29, 0x58, 0x62, 0x3E, 0xB8, 0x10, - 0x59, 0x55, 0x60, 0x9E, 0x27, 0xD6, 0x7C, 0xF7, - 0x2E, 0xC5, 0xC4, 0xA8, 0xE9, 0xB9, 0xC2, 0x92, - 0x4A, 0x9E, 0x22, 0x98, 0x50, 0x8B, 0xAB, 0xA1, - 0x3C, 0xF1, 0x11, 0xFD, 0xFB, 0x06, 0x2C, 0x96, - 0x07, 0xAC, 0x1A, 0xAA, 0x6C, 0x63, 0x73, 0x10, - 0xA8, 0x89, 0x4B, 0xF0, 0xB9, 0x6F, 0x0C, 0x19, - 0x13, 0x61, 0x86, 0xB6, 0x18, 0xDF, 0xFB, 0x27, - 0x55, 0x28, 0xBE, 0xD1, 0xCC, 0x27, 0x15, 0xDE, - 0xF4, 0x12, 0xF7, 0x7A, 0x3C, 0xF9, 0x66, 0x45, - 0x73, 0x3B, 0x04, 0x8A, 0x78, 0x47, 0x43, 0x20, - 0xD1, 0xA3, 0x80, 0xF5, 0xEE, 0xDB, 0xDA, 0x21, - 0xFA, 0x01, 0x25, 0xC9, 0x1D, 0x3C, 0x37, 0xC5, - 0x4B, 0xF3, 0x75, 0x2A, 0x1F, 0x84, 0x71, 0xC8, - 0x1F, 0xCA, 0xE2, 0xD3, 0xED, 0xA9, 0x66, 0xE1, - 0x4E, 0x66, 0xF2, 0x23, 0xB0, 0x54, 0xD7, 0x98, - 0x48, 0xFF, 0x94, 0x11, 0xD6, 0x34, 0x02, 0x4A, - 0x09, 0x89, 0x70, 0xAD, 0xE6, 0xA8, 0x8B, 0x5F, - 0x90, 0x69, 0xF7, 0x60, 0x58, 0x4D, 0xC4, 0xCF, - 0xFF, 0xCE, 0xA8, 0xEC, 0xE1, 0x1B, 0xB5, 0x56, - 0x6B, 0xD2, 0x36, 0x0A, 0xB7, 0x07, 0xDF, 0x2D, - 0x21, 0xB6, 0x74, 0x88, 0xD9, 0x31, 0xF0, 0x20, - 0x06, 0x91, 0x76, 0x42, 0x3E, 0x69, 0x44, 0x49, - 0x0C, 0xB3, 0x85, 0xE7, 0x0B, 0x35, 0x8A, 0x25, - 0x34, 0x6B, 0xAF, 0xCD, 0xD0, 0x6D, 0x40, 0x2F, - 0xF2, 0x4D, 0x6C, 0x1E, 0x5F, 0x61, 0xA8, 0x5D - }; - static const byte kprime_512[WC_ML_KEM_SS_SZ] = { - 0xDF, 0x46, 0x2A, 0xD6, 0x8F, 0x1E, 0xC8, 0x97, - 0x2E, 0xD9, 0xB0, 0x2D, 0x6D, 0xE0, 0x60, 0x4B, - 0xDE, 0xC7, 0x57, 0x20, 0xE0, 0x50, 0x49, 0x73, - 0x51, 0xE6, 0xEC, 0x93, 0x3E, 0x71, 0xF8, 0x82 - }; -#endif -#ifndef WOLFSSL_NO_ML_KEM_768 - static const byte dk_768[WC_ML_KEM_768_PRIVATE_KEY_SIZE] = { - 0x1E, 0x4A, 0xC8, 0x7B, 0x1A, 0x69, 0x2A, 0x52, - 0x9F, 0xDB, 0xBA, 0xB9, 0x33, 0x74, 0xC5, 0x7D, - 0x11, 0x0B, 0x10, 0xF2, 0xB1, 0xDD, 0xEB, 0xAC, - 0x0D, 0x19, 0x6B, 0x7B, 0xA6, 0x31, 0xB8, 0xE9, - 0x29, 0x30, 0x28, 0xA8, 0xF3, 0x79, 0x88, 0x8C, - 0x42, 0x2D, 0xC8, 0xD3, 0x2B, 0xBF, 0x22, 0x60, - 0x10, 0xC2, 0xC1, 0xEC, 0x73, 0x18, 0x90, 0x80, - 0x45, 0x6B, 0x05, 0x64, 0xB2, 0x58, 0xB0, 0xF2, - 0x31, 0x31, 0xBC, 0x79, 0xC8, 0xE8, 0xC1, 0x1C, - 0xEF, 0x39, 0x38, 0xB2, 0x43, 0xC5, 0xCE, 0x9C, - 0x0E, 0xDD, 0x37, 0xC8, 0xF9, 0xD2, 0x98, 0x77, - 0xDB, 0xBB, 0x61, 0x5B, 0x9B, 0x5A, 0xC3, 0xC9, - 0x48, 0x48, 0x7E, 0x46, 0x71, 0x96, 0xA9, 0x14, - 0x3E, 0xFB, 0xC7, 0xCE, 0xDB, 0x64, 0xB4, 0x5D, - 0x4A, 0xCD, 0xA2, 0x66, 0x6C, 0xBC, 0x28, 0x04, - 0xF2, 0xC8, 0x66, 0x2E, 0x12, 0x8F, 0x6A, 0x99, - 0x69, 0xEC, 0x15, 0xBC, 0x0B, 0x93, 0x51, 0xF6, - 0xF9, 0x63, 0x46, 0xAA, 0x7A, 0xBC, 0x74, 0x3A, - 0x14, 0xFA, 0x03, 0x0E, 0x37, 0xA2, 0xE7, 0x59, - 0x7B, 0xDD, 0xFC, 0x5A, 0x22, 0xF9, 0xCE, 0xDA, - 0xF8, 0x61, 0x48, 0x32, 0x52, 0x72, 0x10, 0xB2, - 0x6F, 0x02, 0x4C, 0x7F, 0x6C, 0x0D, 0xCF, 0x55, - 0x1E, 0x97, 0xA4, 0x85, 0x87, 0x64, 0xC3, 0x21, - 0xD1, 0x83, 0x4A, 0xD5, 0x1D, 0x75, 0xBB, 0x24, - 0x6D, 0x27, 0x72, 0x37, 0xB7, 0xBD, 0x41, 0xDC, - 0x43, 0x62, 0xD0, 0x63, 0xF4, 0x29, 0x82, 0x92, - 0x27, 0x2D, 0x01, 0x01, 0x17, 0x80, 0xB7, 0x98, - 0x56, 0xB2, 0x96, 0xC4, 0xE9, 0x46, 0x65, 0x8B, - 0x79, 0x60, 0x31, 0x97, 0xC9, 0xB2, 0xA9, 0x9E, - 0xC6, 0x6A, 0xCB, 0x06, 0xCE, 0x2F, 0x69, 0xB5, - 0xA5, 0xA6, 0x1E, 0x9B, 0xD0, 0x6A, 0xD4, 0x43, - 0xCE, 0xB0, 0xC7, 0x4E, 0xD6, 0x53, 0x45, 0xA9, - 0x03, 0xB6, 0x14, 0xE8, 0x13, 0x68, 0xAA, 0xC2, - 0xB3, 0xD2, 0xA7, 0x9C, 0xA8, 0xCC, 0xAA, 0x1C, - 0x3B, 0x88, 0xFB, 0x82, 0xA3, 0x66, 0x32, 0x86, - 0x0B, 0x3F, 0x79, 0x50, 0x83, 0x3F, 0xD0, 0x21, - 0x2E, 0xC9, 0x6E, 0xDE, 0x4A, 0xB6, 0xF5, 0xA0, - 0xBD, 0xA3, 0xEC, 0x60, 0x60, 0xA6, 0x58, 0xF9, - 0x45, 0x7F, 0x6C, 0xC8, 0x7C, 0x6B, 0x62, 0x0C, - 0x1A, 0x14, 0x51, 0x98, 0x74, 0x86, 0xE4, 0x96, - 0x61, 0x2A, 0x10, 0x1D, 0x0E, 0x9C, 0x20, 0x57, - 0x7C, 0x57, 0x1E, 0xDB, 0x52, 0x82, 0x60, 0x8B, - 0xF4, 0xE1, 0xAC, 0x92, 0x6C, 0x0D, 0xB1, 0xC8, - 0x2A, 0x50, 0x4A, 0x79, 0x9D, 0x89, 0x88, 0x5C, - 0xA6, 0x25, 0x2B, 0xD5, 0xB1, 0xC1, 0x83, 0xAF, - 0x70, 0x13, 0x92, 0xA4, 0x07, 0xC0, 0x5B, 0x84, - 0x8C, 0x2A, 0x30, 0x16, 0xC4, 0x06, 0x13, 0xF0, - 0x2A, 0x44, 0x9B, 0x3C, 0x79, 0x26, 0xDA, 0x06, - 0x7A, 0x53, 0x31, 0x16, 0x50, 0x68, 0x40, 0x09, - 0x75, 0x10, 0x46, 0x0B, 0xBF, 0xD3, 0x60, 0x73, - 0xDC, 0xB0, 0xBF, 0xA0, 0x09, 0xB3, 0x6A, 0x91, - 0x23, 0xEA, 0xA6, 0x8F, 0x83, 0x5F, 0x74, 0xA0, - 0x1B, 0x00, 0xD2, 0x09, 0x78, 0x35, 0x96, 0x4D, - 0xF5, 0x21, 0xCE, 0x92, 0x10, 0x78, 0x9C, 0x30, - 0xB7, 0xF0, 0x6E, 0x58, 0x44, 0xB4, 0x44, 0xC5, - 0x33, 0x22, 0x39, 0x6E, 0x47, 0x99, 0xBA, 0xF6, - 0xA8, 0x8A, 0xF7, 0x31, 0x58, 0x60, 0xD0, 0x19, - 0x2D, 0x48, 0xC2, 0xC0, 0xDA, 0x6B, 0x5B, 0xA6, - 0x43, 0x25, 0x54, 0x3A, 0xCD, 0xF5, 0x90, 0x0E, - 0x8B, 0xC4, 0x77, 0xAB, 0x05, 0x82, 0x00, 0x72, - 0xD4, 0x63, 0xAF, 0xFE, 0xD0, 0x97, 0xE0, 0x62, - 0xBD, 0x78, 0xC9, 0x9D, 0x12, 0xB3, 0x85, 0x13, - 0x1A, 0x24, 0x1B, 0x70, 0x88, 0x65, 0xB4, 0x19, - 0x0A, 0xF6, 0x9E, 0xA0, 0xA6, 0x4D, 0xB7, 0x14, - 0x48, 0xA6, 0x08, 0x29, 0x36, 0x9C, 0x75, 0x55, - 0x19, 0x8E, 0x43, 0x8C, 0x9A, 0xBC, 0x31, 0x0B, - 0xC7, 0x01, 0x01, 0x91, 0x3B, 0xB1, 0x2F, 0xAA, - 0x5B, 0xEE, 0xF9, 0x75, 0x84, 0x16, 0x17, 0xC8, - 0x47, 0xCD, 0x6B, 0x33, 0x6F, 0x87, 0x79, 0x87, - 0x75, 0x38, 0x22, 0x02, 0x0B, 0x92, 0xC4, 0xCC, - 0x97, 0x05, 0x5C, 0x9B, 0x1E, 0x0B, 0x12, 0x8B, - 0xF1, 0x1F, 0x50, 0x50, 0x05, 0xB6, 0xAB, 0x0E, - 0x62, 0x77, 0x95, 0xA2, 0x06, 0x09, 0xEF, 0xA9, - 0x91, 0xE5, 0x98, 0xB8, 0x0F, 0x37, 0xB1, 0xC6, - 0xA1, 0xC3, 0xA1, 0xE9, 0xAE, 0xE7, 0x02, 0x8F, - 0x77, 0x57, 0x0A, 0xB2, 0x13, 0x91, 0x28, 0xA0, - 0x01, 0x08, 0xC5, 0x0E, 0xB3, 0x05, 0xCD, 0xB8, - 0xF9, 0xA6, 0x03, 0xA6, 0xB0, 0x78, 0x41, 0x3F, - 0x6F, 0x9B, 0x14, 0xC6, 0xD8, 0x2B, 0x51, 0x99, - 0xCE, 0x59, 0xD8, 0x87, 0x90, 0x2A, 0x28, 0x1A, - 0x02, 0x7B, 0x71, 0x74, 0x95, 0xFE, 0x12, 0x67, - 0x2A, 0x12, 0x7B, 0xBF, 0x9B, 0x25, 0x6C, 0x43, - 0x72, 0x0D, 0x7C, 0x16, 0x0B, 0x28, 0x1C, 0x12, - 0x75, 0x7D, 0xA1, 0x35, 0xB1, 0x93, 0x33, 0x52, - 0xBE, 0x4A, 0xB6, 0x7E, 0x40, 0x24, 0x8A, 0xFC, - 0x31, 0x8E, 0x23, 0x70, 0xC3, 0xB8, 0x20, 0x8E, - 0x69, 0x5B, 0xDF, 0x33, 0x74, 0x59, 0xB9, 0xAC, - 0xBF, 0xE5, 0xB4, 0x87, 0xF7, 0x6E, 0x9B, 0x4B, - 0x40, 0x01, 0xD6, 0xCF, 0x90, 0xCA, 0x8C, 0x69, - 0x9A, 0x17, 0x4D, 0x42, 0x97, 0x2D, 0xC7, 0x33, - 0xF3, 0x33, 0x89, 0xFD, 0xF5, 0x9A, 0x1D, 0xAB, - 0xA8, 0x1D, 0x83, 0x49, 0x55, 0x02, 0x73, 0x34, - 0x18, 0x5A, 0xD0, 0x2C, 0x76, 0xCF, 0x29, 0x48, - 0x46, 0xCA, 0x92, 0x94, 0xBA, 0x0E, 0xD6, 0x67, - 0x41, 0xDD, 0xEC, 0x79, 0x1C, 0xAB, 0x34, 0x19, - 0x6A, 0xC5, 0x65, 0x7C, 0x5A, 0x78, 0x32, 0x1B, - 0x56, 0xC3, 0x33, 0x06, 0xB5, 0x10, 0x23, 0x97, - 0xA5, 0xC0, 0x9C, 0x35, 0x08, 0xF7, 0x6B, 0x48, - 0x28, 0x24, 0x59, 0xF8, 0x1D, 0x0C, 0x72, 0xA4, - 0x3F, 0x73, 0x7B, 0xC2, 0xF1, 0x2F, 0x45, 0x42, - 0x26, 0x28, 0xB6, 0x7D, 0xB5, 0x1A, 0xC1, 0x42, - 0x42, 0x76, 0xA6, 0xC0, 0x8C, 0x3F, 0x76, 0x15, - 0x66, 0x5B, 0xBB, 0x8E, 0x92, 0x81, 0x48, 0xA2, - 0x70, 0xF9, 0x91, 0xBC, 0xF3, 0x65, 0xA9, 0x0F, - 0x87, 0xC3, 0x06, 0x87, 0xB6, 0x88, 0x09, 0xC9, - 0x1F, 0x23, 0x18, 0x13, 0xB8, 0x66, 0xBE, 0xA8, - 0x2E, 0x30, 0x37, 0x4D, 0x80, 0xAA, 0x0C, 0x02, - 0x97, 0x34, 0x37, 0x49, 0x8A, 0x53, 0xB1, 0x4B, - 0xF6, 0xB6, 0xCA, 0x1E, 0xD7, 0x6A, 0xB8, 0xA2, - 0x0D, 0x54, 0xA0, 0x83, 0xF4, 0xA2, 0x6B, 0x7C, - 0x03, 0x8D, 0x81, 0x96, 0x76, 0x40, 0xC2, 0x0B, - 0xF4, 0x43, 0x1E, 0x71, 0xDA, 0xCC, 0xE8, 0x57, - 0x7B, 0x21, 0x24, 0x0E, 0x49, 0x4C, 0x31, 0xF2, - 0xD8, 0x77, 0xDA, 0xF4, 0x92, 0x4F, 0xD3, 0x9D, - 0x82, 0xD6, 0x16, 0x7F, 0xBC, 0xC1, 0xF9, 0xC5, - 0xA2, 0x59, 0xF8, 0x43, 0xE3, 0x09, 0x87, 0xCC, - 0xC4, 0xBC, 0xE7, 0x49, 0x3A, 0x24, 0x04, 0xB5, - 0xE4, 0x43, 0x87, 0xF7, 0x07, 0x42, 0x57, 0x81, - 0xB7, 0x43, 0xFB, 0x55, 0x56, 0x85, 0x58, 0x4E, - 0x25, 0x57, 0xCC, 0x03, 0x8B, 0x1A, 0x9B, 0x3F, - 0x40, 0x43, 0x12, 0x1F, 0x54, 0x72, 0xEB, 0x2B, - 0x96, 0xE5, 0x94, 0x1F, 0xEC, 0x01, 0x1C, 0xEE, - 0xA5, 0x07, 0x91, 0x63, 0x6C, 0x6A, 0xBC, 0x26, - 0xC1, 0x37, 0x7E, 0xE3, 0xB5, 0x14, 0x6F, 0xC7, - 0xC8, 0x5C, 0xB3, 0x35, 0xB1, 0xE7, 0x95, 0xEE, - 0xC2, 0x03, 0x3E, 0xE4, 0x4B, 0x9A, 0xA9, 0x06, - 0x85, 0x24, 0x5E, 0xF7, 0xB4, 0x43, 0x6C, 0x00, - 0x0E, 0x66, 0xBC, 0x8B, 0xCB, 0xF1, 0xCD, 0xB8, - 0x03, 0xAC, 0x14, 0x21, 0xB1, 0xFD, 0xB2, 0x66, - 0xD5, 0x29, 0x1C, 0x83, 0x10, 0x37, 0x3A, 0x8A, - 0x3C, 0xE9, 0x56, 0x2A, 0xB1, 0x97, 0x95, 0x38, - 0x71, 0xAB, 0x99, 0xF3, 0x82, 0xCC, 0x5A, 0xA9, - 0xC0, 0xF2, 0x73, 0xD1, 0xDC, 0xA5, 0x5D, 0x27, - 0x12, 0x85, 0x38, 0x71, 0xE1, 0xA8, 0x3C, 0xB3, - 0xB8, 0x54, 0x50, 0xF7, 0x6D, 0x3F, 0x3C, 0x42, - 0xBA, 0xB5, 0x50, 0x5F, 0x72, 0x12, 0xFD, 0xB6, - 0xB8, 0xB7, 0xF6, 0x02, 0x99, 0x72, 0xA8, 0xF3, - 0x75, 0x1E, 0x4C, 0x94, 0xC1, 0x10, 0x8B, 0x02, - 0xD6, 0xAC, 0x79, 0xF8, 0xD9, 0x38, 0xF0, 0x5A, - 0x1B, 0x2C, 0x22, 0x9B, 0x14, 0xB4, 0x2B, 0x31, - 0xB0, 0x1A, 0x36, 0x40, 0x17, 0xE5, 0x95, 0x78, - 0xC6, 0xB0, 0x33, 0x83, 0x37, 0x74, 0xCB, 0x9B, - 0x57, 0x0F, 0x90, 0x86, 0xB7, 0x22, 0x90, 0x3B, - 0x37, 0x54, 0x46, 0xB4, 0x95, 0xD8, 0xA2, 0x9B, - 0xF8, 0x07, 0x51, 0x87, 0x7A, 0x80, 0xFB, 0x72, - 0x4A, 0x02, 0x10, 0xC3, 0xE1, 0x69, 0x2F, 0x39, - 0x7C, 0x2F, 0x1D, 0xDC, 0x2E, 0x6B, 0xA1, 0x7A, - 0xF8, 0x1B, 0x92, 0xAC, 0xFA, 0xBE, 0xF5, 0xF7, - 0x57, 0x3C, 0xB4, 0x93, 0xD1, 0x84, 0x02, 0x7B, - 0x71, 0x82, 0x38, 0xC8, 0x9A, 0x35, 0x49, 0xB8, - 0x90, 0x5B, 0x28, 0xA8, 0x33, 0x62, 0x86, 0x7C, - 0x08, 0x2D, 0x30, 0x19, 0xD3, 0xCA, 0x70, 0x70, - 0x07, 0x31, 0xCE, 0xB7, 0x3E, 0x84, 0x72, 0xC1, - 0xA3, 0xA0, 0x93, 0x36, 0x1C, 0x5F, 0xEA, 0x6A, - 0x7D, 0x40, 0x95, 0x5D, 0x07, 0xA4, 0x1B, 0x64, - 0xE5, 0x00, 0x81, 0xA3, 0x61, 0xB6, 0x04, 0xCC, - 0x51, 0x84, 0x47, 0xC8, 0xE2, 0x57, 0x65, 0xAB, - 0x7D, 0x68, 0xB2, 0x43, 0x27, 0x52, 0x07, 0xAF, - 0x8C, 0xA6, 0x56, 0x4A, 0x4C, 0xB1, 0xE9, 0x41, - 0x99, 0xDB, 0xA1, 0x87, 0x8C, 0x59, 0xBE, 0xC8, - 0x09, 0xAB, 0x48, 0xB2, 0xF2, 0x11, 0xBA, 0xDC, - 0x6A, 0x19, 0x98, 0xD9, 0xC7, 0x22, 0x7C, 0x13, - 0x03, 0xF4, 0x69, 0xD4, 0x6A, 0x9C, 0x7E, 0x53, - 0x03, 0xF9, 0x8A, 0xBA, 0x67, 0x56, 0x9A, 0xE8, - 0x22, 0x7C, 0x16, 0xBA, 0x1F, 0xB3, 0x24, 0x44, - 0x66, 0xA2, 0x5E, 0x7F, 0x82, 0x36, 0x71, 0x81, - 0x0C, 0xC2, 0x62, 0x06, 0xFE, 0xB2, 0x9C, 0x7E, - 0x2A, 0x1A, 0x91, 0x95, 0x9E, 0xEB, 0x03, 0xA9, - 0x82, 0x52, 0xA4, 0xF7, 0x41, 0x26, 0x74, 0xEB, - 0x9A, 0x4B, 0x27, 0x7E, 0x1F, 0x25, 0x95, 0xFC, - 0xA6, 0x40, 0x33, 0xB4, 0x1B, 0x40, 0x33, 0x08, - 0x12, 0xE9, 0x73, 0x5B, 0x7C, 0x60, 0x75, 0x01, - 0xCD, 0x81, 0x83, 0xA2, 0x2A, 0xFC, 0x33, 0x92, - 0x55, 0x37, 0x44, 0xF3, 0x3C, 0x4D, 0x20, 0x25, - 0x26, 0x94, 0x5C, 0x6D, 0x78, 0xA6, 0x0E, 0x20, - 0x1A, 0x16, 0x98, 0x7A, 0x6F, 0xA5, 0x9D, 0x94, - 0x46, 0x4B, 0x56, 0x50, 0x65, 0x56, 0x78, 0x48, - 0x24, 0xA0, 0x70, 0x58, 0xF5, 0x73, 0x20, 0xE7, - 0x6C, 0x82, 0x5B, 0x93, 0x47, 0xF2, 0x93, 0x6F, - 0x4A, 0x0E, 0x5C, 0xDA, 0xA1, 0x8C, 0xF8, 0x83, - 0x39, 0x45, 0xAE, 0x31, 0x2A, 0x36, 0xB5, 0xF5, - 0xA3, 0x81, 0x0A, 0xAC, 0x82, 0x38, 0x1F, 0xDA, - 0xE4, 0xCB, 0x9C, 0x68, 0x31, 0xD8, 0xEB, 0x8A, - 0xBA, 0xB8, 0x50, 0x41, 0x64, 0x43, 0xD7, 0x39, - 0x08, 0x6B, 0x1C, 0x32, 0x6F, 0xC2, 0xA3, 0x97, - 0x57, 0x04, 0xE3, 0x96, 0xA5, 0x96, 0x80, 0xC3, - 0xB5, 0xF3, 0x60, 0xF5, 0x48, 0x0D, 0x2B, 0x62, - 0x16, 0x9C, 0xD9, 0x4C, 0xA7, 0x1B, 0x37, 0xBC, - 0x58, 0x78, 0xBA, 0x29, 0x85, 0xE0, 0x68, 0xBA, - 0x05, 0x0B, 0x2C, 0xE5, 0x07, 0x26, 0xD4, 0xB4, - 0x45, 0x1B, 0x77, 0xAA, 0xA8, 0x67, 0x6E, 0xAE, - 0x09, 0x49, 0x82, 0x21, 0x01, 0x92, 0x19, 0x7B, - 0x1E, 0x92, 0xA2, 0x7F, 0x59, 0x86, 0x8B, 0x78, - 0x86, 0x78, 0x87, 0xB9, 0xA7, 0x0C, 0x32, 0xAF, - 0x84, 0x63, 0x0A, 0xA9, 0x08, 0x81, 0x43, 0x79, - 0xE6, 0x51, 0x91, 0x50, 0xBA, 0x16, 0x43, 0x9B, - 0x5E, 0x2B, 0x06, 0x03, 0xD0, 0x6A, 0xA6, 0x67, - 0x45, 0x57, 0xF5, 0xB0, 0x98, 0x3E, 0x5C, 0xB6, - 0xA9, 0x75, 0x96, 0x06, 0x9B, 0x01, 0xBB, 0x31, - 0x28, 0xC4, 0x16, 0x68, 0x06, 0x57, 0x20, 0x4F, - 0xD0, 0x76, 0x40, 0x39, 0x2E, 0x16, 0xB1, 0x9F, - 0x33, 0x7A, 0x99, 0xA3, 0x04, 0x84, 0x4E, 0x1A, - 0xA4, 0x74, 0xE9, 0xC7, 0x99, 0x06, 0x29, 0x71, - 0xF6, 0x72, 0x26, 0x89, 0x60, 0xF5, 0xA8, 0x2F, - 0x95, 0x00, 0x70, 0xBB, 0xE9, 0xC2, 0xA7, 0x19, - 0x50, 0xA3, 0x78, 0x5B, 0xDF, 0x0B, 0x84, 0x40, - 0x25, 0x5E, 0xD6, 0x39, 0x28, 0xD2, 0x57, 0x84, - 0x51, 0x68, 0xB1, 0xEC, 0xCC, 0x41, 0x91, 0x32, - 0x5A, 0xA7, 0x66, 0x45, 0x71, 0x9B, 0x28, 0xEB, - 0xD8, 0x93, 0x02, 0xDC, 0x67, 0x23, 0xC7, 0x86, - 0xDF, 0x52, 0x17, 0xB2, 0x43, 0x09, 0x9C, 0xA7, - 0x82, 0x38, 0xE5, 0x7E, 0x64, 0x69, 0x2F, 0x20, - 0x6B, 0x17, 0x7A, 0xBC, 0x25, 0x96, 0x60, 0x39, - 0x5C, 0xD7, 0x86, 0x0F, 0xB3, 0x5A, 0x16, 0xF6, - 0xB2, 0xFE, 0x65, 0x48, 0xC8, 0x5A, 0xB6, 0x63, - 0x30, 0xC5, 0x17, 0xFA, 0x74, 0xCD, 0xF3, 0xCB, - 0x49, 0xD2, 0x6B, 0x11, 0x81, 0x90, 0x1A, 0xF7, - 0x75, 0xA1, 0xE1, 0x80, 0x81, 0x3B, 0x6A, 0x24, - 0xC4, 0x56, 0x82, 0x9B, 0x5C, 0x38, 0x10, 0x4E, - 0xCE, 0x43, 0xC7, 0x6A, 0x43, 0x7A, 0x6A, 0x33, - 0xB6, 0xFC, 0x6C, 0x5E, 0x65, 0xC8, 0xA8, 0x94, - 0x66, 0xC1, 0x42, 0x54, 0x85, 0xB2, 0x9B, 0x9E, - 0x18, 0x54, 0x36, 0x8A, 0xFC, 0xA3, 0x53, 0xE1, - 0x43, 0xD0, 0xA9, 0x0A, 0x6C, 0x6C, 0x9E, 0x7F, - 0xDB, 0x62, 0xA6, 0x06, 0x85, 0x6B, 0x56, 0x14, - 0xF1, 0x2B, 0x64, 0xB7, 0x96, 0x02, 0x0C, 0x35, - 0x34, 0xC3, 0x60, 0x5C, 0xFD, 0xC7, 0x3B, 0x86, - 0x71, 0x4F, 0x41, 0x18, 0x50, 0x22, 0x8A, 0x28, - 0xB8, 0xF4, 0xB4, 0x9E, 0x66, 0x34, 0x16, 0xC8, - 0x4F, 0x7E, 0x38, 0x1F, 0x6A, 0xF1, 0x07, 0x13, - 0x43, 0xBF, 0x9D, 0x39, 0xB4, 0x54, 0x39, 0x24, - 0x0C, 0xC0, 0x38, 0x97, 0x29, 0x5F, 0xEA, 0x08, - 0x0B, 0x14, 0xBB, 0x2D, 0x81, 0x19, 0xA8, 0x80, - 0xE1, 0x64, 0x49, 0x5C, 0x61, 0xBE, 0xBC, 0x71, - 0x39, 0xC1, 0x18, 0x57, 0xC8, 0x5E, 0x17, 0x50, - 0x33, 0x8D, 0x63, 0x43, 0x91, 0x37, 0x06, 0xA5, - 0x07, 0xC9, 0x56, 0x64, 0x64, 0xCD, 0x28, 0x37, - 0xCF, 0x91, 0x4D, 0x1A, 0x3C, 0x35, 0xE8, 0x9B, - 0x23, 0x5C, 0x6A, 0xB7, 0xED, 0x07, 0x8B, 0xED, - 0x23, 0x47, 0x57, 0xC0, 0x2E, 0xF6, 0x99, 0x3D, - 0x4A, 0x27, 0x3C, 0xB8, 0x15, 0x05, 0x28, 0xDA, - 0x4D, 0x76, 0x70, 0x81, 0x77, 0xE9, 0x42, 0x55, - 0x46, 0xC8, 0x3E, 0x14, 0x70, 0x39, 0x76, 0x66, - 0x03, 0xB3, 0x0D, 0xA6, 0x26, 0x8F, 0x45, 0x98, - 0xA5, 0x31, 0x94, 0x24, 0x0A, 0x28, 0x32, 0xA3, - 0xD6, 0x75, 0x33, 0xB5, 0x05, 0x6F, 0x9A, 0xAA, - 0xC6, 0x1B, 0x4B, 0x17, 0xB9, 0xA2, 0x69, 0x3A, - 0xA0, 0xD5, 0x88, 0x91, 0xE6, 0xCC, 0x56, 0xCD, - 0xD7, 0x72, 0x41, 0x09, 0x00, 0xC4, 0x05, 0xAF, - 0x20, 0xB9, 0x03, 0x79, 0x7C, 0x64, 0x87, 0x69, - 0x15, 0xC3, 0x7B, 0x84, 0x87, 0xA1, 0x44, 0x9C, - 0xE9, 0x24, 0xCD, 0x34, 0x5C, 0x29, 0xA3, 0x6E, - 0x08, 0x23, 0x8F, 0x7A, 0x15, 0x7C, 0xC7, 0xE5, - 0x16, 0xAB, 0x5B, 0xA7, 0x3C, 0x80, 0x63, 0xF7, - 0x26, 0xBB, 0x5A, 0x0A, 0x03, 0x19, 0xE5, 0x71, - 0x27, 0x43, 0x8C, 0x7F, 0xC6, 0x01, 0xC9, 0x9C, - 0xCA, 0xAE, 0x4C, 0x1A, 0x83, 0x72, 0x6F, 0xDC, - 0xB5, 0x04, 0x5E, 0xD1, 0xA8, 0x2A, 0x98, 0x5E, - 0xA9, 0x95, 0x39, 0x6D, 0x77, 0x27, 0x2C, 0x66, - 0xCE, 0x49, 0x32, 0x89, 0xF6, 0x11, 0x09, 0x10, - 0xF3, 0x7C, 0x27, 0x41, 0xCE, 0x47, 0x02, 0x6A, - 0x6F, 0x82, 0x61, 0x99, 0x9C, 0x64, 0x82, 0x57, - 0x2B, 0x16, 0x93, 0x91, 0x2E, 0xF1, 0x2E, 0xEB, - 0xEA, 0x7A, 0xCF, 0x92, 0x34, 0xFB, 0x40, 0x9F, - 0x2A, 0x60, 0x90, 0xE6, 0xB0, 0xBF, 0xD8, 0x95, - 0x46, 0x9D, 0x0B, 0x2A, 0x92, 0x1B, 0xB7, 0x23, - 0xF8, 0x7A, 0x33, 0xEA, 0x54, 0x65, 0xAB, 0x90, - 0xF5, 0x14, 0xB6, 0x76, 0x98, 0xC0, 0x76, 0x8B, - 0x6C, 0xA4, 0x98, 0xB0, 0x22, 0xC5, 0x12, 0xFA, - 0x08, 0x75, 0xF0, 0x54, 0xAA, 0x22, 0x65, 0x86, - 0x7E, 0x31, 0xC0, 0xE5, 0x22, 0x65, 0x1E, 0x02, - 0x4A, 0x07, 0xD6, 0x0D, 0xD9, 0xF6, 0x33, 0x16, - 0x69, 0x21, 0xF4, 0x12, 0x6B, 0xC2, 0xB6, 0xAA, - 0x01, 0xCC, 0x15, 0xA0, 0x9B, 0x85, 0xBF, 0xF8, - 0x21, 0x8C, 0x5A, 0xAE, 0x95, 0xBC, 0x1F, 0xFB, - 0x26, 0xAE, 0x5A, 0x13, 0x76, 0x70, 0xF0, 0x49, - 0x10, 0xCA, 0x9D, 0x72, 0x41, 0xB6, 0x66, 0x0C, - 0x39, 0x4C, 0x54, 0x55, 0x91, 0x77, 0x46, 0xA2, - 0x66, 0x82, 0xFB, 0x71, 0xA4, 0x32, 0xEA, 0x95, - 0x30, 0xE8, 0x39, 0xBD, 0xEB, 0x07, 0x43, 0x30, - 0x04, 0xF4, 0x5A, 0x0D, 0xDA, 0xA0, 0xB2, 0x4E, - 0x3A, 0x56, 0x6A, 0x54, 0x08, 0x15, 0xF2, 0x81, - 0xE3, 0xFC, 0x25, 0x9A, 0xC6, 0xCB, 0xC0, 0xAC, - 0xB8, 0xD6, 0x22, 0x68, 0xB6, 0x03, 0xBC, 0x67, - 0x6A, 0xB4, 0x15, 0xC4, 0x74, 0xBB, 0x94, 0x87, - 0x3E, 0x44, 0x87, 0xAE, 0x31, 0xA4, 0xE3, 0x84, - 0x5C, 0x79, 0x90, 0x15, 0x50, 0x89, 0x0E, 0xE8, - 0x78, 0x4E, 0xEF, 0x90, 0x4F, 0xEE, 0x62, 0xBA, - 0x8C, 0x5F, 0x95, 0x2C, 0x68, 0x41, 0x30, 0x52, - 0xE0, 0xA7, 0xE3, 0x38, 0x8B, 0xB8, 0xFF, 0x0A, - 0xD6, 0x02, 0xAE, 0x3E, 0xA1, 0x4D, 0x9D, 0xF6, - 0xDD, 0x5E, 0x4C, 0xC6, 0xA3, 0x81, 0xA4, 0x1D, - 0xA5, 0xC1, 0x37, 0xEC, 0xC4, 0x9D, 0xF5, 0x87, - 0xE1, 0x78, 0xEA, 0xF4, 0x77, 0x02, 0xEC, 0x62, - 0x37, 0x80, 0x69, 0x1A, 0x32, 0x33, 0xF6, 0x9F, - 0x12, 0xBD, 0x9C, 0x9B, 0x96, 0x37, 0xC5, 0x13, - 0x78, 0xAD, 0x71, 0xA8, 0x31, 0x05, 0x52, 0x77, - 0x25, 0x4C, 0xC6, 0x3C, 0x5A, 0xD4, 0xCB, 0x76, - 0xB4, 0xAB, 0x82, 0xE5, 0xFC, 0xA1, 0x35, 0xE8, - 0xD2, 0x6A, 0x6B, 0x3A, 0x89, 0xFA, 0x5B, 0x6F - }; - static const byte c_768[WC_ML_KEM_768_CIPHER_TEXT_SIZE] = { - 0xA5, 0xC8, 0x1C, 0x76, 0xC2, 0x43, 0x05, 0xE1, - 0xCE, 0x5D, 0x81, 0x35, 0xD4, 0x15, 0x23, 0x68, - 0x2E, 0x9E, 0xE6, 0xD7, 0xB4, 0x0A, 0xD4, 0x1D, - 0xF1, 0xF3, 0x7C, 0x9B, 0x17, 0xDC, 0xE7, 0x80, - 0x76, 0x01, 0x9A, 0x6B, 0x0B, 0x7C, 0x95, 0xC9, - 0xBE, 0x7A, 0xF2, 0x95, 0x07, 0xB2, 0xD5, 0xA6, - 0x98, 0x7C, 0x8E, 0xE3, 0x25, 0x91, 0x90, 0x85, - 0x52, 0x43, 0xE6, 0xE5, 0x6F, 0x56, 0x20, 0x60, - 0x8C, 0x52, 0xD9, 0x6F, 0xAB, 0x10, 0x3A, 0x87, - 0x00, 0xFB, 0xA1, 0xA8, 0x7D, 0xCA, 0x60, 0x78, - 0x11, 0x8A, 0x08, 0x71, 0x76, 0x2C, 0x95, 0x34, - 0xC0, 0xC0, 0xC3, 0x97, 0x8C, 0x91, 0xC3, 0xA0, - 0x1F, 0x0F, 0x60, 0x8D, 0xCF, 0x75, 0x78, 0x15, - 0x43, 0x8F, 0xE8, 0x95, 0x7C, 0x8A, 0x85, 0x91, - 0x83, 0xB1, 0xB6, 0x72, 0x1A, 0x08, 0x65, 0xBE, - 0xBC, 0x79, 0x9D, 0x4E, 0x5C, 0x0E, 0x7B, 0xD3, - 0xEA, 0xE4, 0x85, 0x8E, 0x6A, 0xB6, 0xA2, 0xE7, - 0x65, 0x8E, 0xD8, 0x0D, 0x4E, 0xD1, 0x58, 0xB0, - 0x36, 0xB9, 0x3F, 0xA0, 0x3A, 0xFA, 0x6A, 0xE3, - 0x13, 0x6C, 0xF3, 0xD6, 0x93, 0xC9, 0x11, 0xBC, - 0xC7, 0x59, 0x05, 0xE5, 0xB0, 0xCB, 0x28, 0x65, - 0xB9, 0xE9, 0x88, 0x45, 0x22, 0xA7, 0x77, 0x77, - 0x61, 0x3E, 0x53, 0x11, 0x1D, 0x5A, 0x1C, 0x7D, - 0x3D, 0xAB, 0x73, 0x4C, 0xEB, 0x03, 0x65, 0x7A, - 0xE0, 0xC8, 0x97, 0x63, 0xE9, 0x94, 0x71, 0x05, - 0x47, 0x76, 0xBA, 0xE7, 0xD5, 0x1B, 0x0E, 0x73, - 0xA5, 0xBB, 0x35, 0xAE, 0xC3, 0x0F, 0xF6, 0xBC, - 0x93, 0x68, 0x49, 0x16, 0xFE, 0xF1, 0x16, 0x25, - 0x86, 0x45, 0x2F, 0x42, 0x66, 0x53, 0xE2, 0xCA, - 0x84, 0x4D, 0x57, 0x44, 0x30, 0x7F, 0xF9, 0xAE, - 0xB2, 0x87, 0xA6, 0x44, 0x77, 0x83, 0xB2, 0x1A, - 0x0E, 0x93, 0x9C, 0x81, 0x42, 0x1D, 0x63, 0x1F, - 0x5D, 0xCB, 0x45, 0x2E, 0x51, 0xED, 0x34, 0xE3, - 0xDA, 0xD1, 0xCF, 0x50, 0x4E, 0x0A, 0x3B, 0x0F, - 0x47, 0x11, 0xA8, 0xDC, 0x64, 0x99, 0xD1, 0x69, - 0x1D, 0x10, 0x95, 0x69, 0x33, 0x6C, 0xE1, 0x55, - 0x8A, 0x4C, 0x0A, 0x46, 0x4E, 0x20, 0x87, 0xEA, - 0x8F, 0x9E, 0x3B, 0x18, 0xF7, 0x47, 0xEF, 0x61, - 0xF4, 0x57, 0x6A, 0xEB, 0x42, 0xB1, 0x7C, 0xAD, - 0xB7, 0xF0, 0xFD, 0x84, 0xDA, 0x8E, 0x3A, 0x6F, - 0x47, 0x1D, 0x95, 0xED, 0xFA, 0x65, 0xBE, 0x9E, - 0x6C, 0x9F, 0x6A, 0xE7, 0x56, 0xA2, 0x2A, 0x4F, - 0x1A, 0x5C, 0x54, 0x3C, 0x26, 0xBA, 0x7B, 0xAD, - 0x88, 0xE1, 0x6D, 0x5F, 0x5B, 0x7E, 0x12, 0xE2, - 0xD4, 0xCA, 0x34, 0xB3, 0xA6, 0x4D, 0x17, 0xF8, - 0x7C, 0xCF, 0xC4, 0xFF, 0x8C, 0x5E, 0x4F, 0x53, - 0x75, 0x2A, 0x07, 0x7C, 0x68, 0x72, 0x1E, 0x8C, - 0xC8, 0x17, 0xF9, 0xFF, 0x24, 0x87, 0x61, 0x70, - 0xFF, 0x2A, 0xF8, 0x9F, 0xA9, 0x58, 0x55, 0xA5, - 0xB1, 0xDE, 0x34, 0x7C, 0x07, 0xFD, 0xDB, 0xCF, - 0xE7, 0x26, 0x4A, 0xA5, 0xED, 0x64, 0x01, 0x49, - 0x15, 0x61, 0xD8, 0x31, 0x53, 0x8F, 0x85, 0x2B, - 0x0E, 0xD7, 0xB9, 0xE8, 0xEB, 0xAF, 0xFC, 0x06, - 0x02, 0x84, 0xF2, 0x2D, 0x2B, 0xAE, 0xE5, 0x6F, - 0xA9, 0xF6, 0xD0, 0x14, 0x32, 0xA1, 0x15, 0xA2, - 0xD6, 0xA6, 0x4C, 0x38, 0xAE, 0x0A, 0x50, 0xBA, - 0x36, 0x2F, 0xB5, 0x7B, 0x53, 0xE3, 0xE8, 0x55, - 0xB8, 0x3C, 0xE8, 0xC4, 0x22, 0x74, 0x04, 0x55, - 0x99, 0xF6, 0x5F, 0xA6, 0xA8, 0x92, 0x1D, 0x85, - 0xF9, 0x4E, 0xD2, 0x30, 0xB5, 0x16, 0x71, 0x2D, - 0xB6, 0xFD, 0x2F, 0xF2, 0x8B, 0x3A, 0x33, 0x71, - 0xD9, 0xBE, 0x05, 0x8A, 0xE7, 0x5C, 0x2F, 0xA5, - 0x91, 0xB7, 0xEC, 0x3C, 0x3D, 0xAA, 0x1F, 0x76, - 0x42, 0xBC, 0x26, 0xC3, 0x24, 0xC0, 0x80, 0x90, - 0x60, 0x7E, 0x66, 0x62, 0x15, 0x4D, 0xB3, 0x7C, - 0xF7, 0x47, 0x96, 0x7A, 0x1F, 0x9F, 0xC2, 0x90, - 0x89, 0xF5, 0x70, 0xEB, 0xE6, 0x0E, 0xEE, 0xF8, - 0x9F, 0xD2, 0x44, 0x81, 0x02, 0x8C, 0x85, 0xAE, - 0xF1, 0xDC, 0x3B, 0x09, 0xF2, 0x2C, 0xD3, 0x69, - 0x1B, 0xBB, 0xB8, 0x21, 0xC7, 0xA8, 0xA0, 0xF3, - 0x5A, 0xD1, 0x2B, 0xE1, 0xDD, 0x19, 0x9B, 0x97, - 0x70, 0x48, 0xF3, 0xD4, 0x8C, 0x16, 0xBB, 0x2C, - 0xA9, 0x4C, 0xEC, 0xB8, 0x92, 0x87, 0x70, 0xD5, - 0xBB, 0x32, 0x9A, 0x03, 0x27, 0xE0, 0xB2, 0x86, - 0xFA, 0xA1, 0xC6, 0x52, 0x81, 0x03, 0x1A, 0x31, - 0xC8, 0x4F, 0x2E, 0xDC, 0x9C, 0x04, 0xD4, 0x75, - 0xED, 0x4E, 0x12, 0x8E, 0x51, 0xEF, 0xA9, 0x7D, - 0x01, 0x48, 0xCB, 0xA6, 0xC9, 0x5F, 0x67, 0x4C, - 0x58, 0x9F, 0x30, 0x1C, 0x26, 0x5B, 0xED, 0x70, - 0x8E, 0x9A, 0xD8, 0xDA, 0x3C, 0x5C, 0xEC, 0xBD, - 0xEE, 0xED, 0x35, 0xEF, 0x1E, 0x25, 0x31, 0x32, - 0xBA, 0x89, 0x92, 0x0D, 0x78, 0x6B, 0x88, 0x23, - 0x0B, 0x01, 0x3B, 0xCF, 0x2D, 0xC9, 0x2D, 0x6B, - 0x15, 0x7A, 0xFA, 0x8D, 0xA8, 0x59, 0x2C, 0xD0, - 0x74, 0x3D, 0x49, 0x82, 0xBE, 0x60, 0xD7, 0xC2, - 0xD5, 0xC4, 0x72, 0xAB, 0x9F, 0xA7, 0xF4, 0xCC, - 0x3D, 0x12, 0xB0, 0xEB, 0xAF, 0x0A, 0xBE, 0x55, - 0x5C, 0x75, 0x80, 0x54, 0x26, 0x84, 0x4D, 0xD9, - 0x42, 0x86, 0x43, 0xF8, 0x44, 0x06, 0xA1, 0xB8, - 0xD6, 0xFA, 0xED, 0xFD, 0x8A, 0xE6, 0xE7, 0x3A, - 0x72, 0x77, 0x2A, 0x21, 0x59, 0xAC, 0xAB, 0xD9, - 0x72, 0xAE, 0xB6, 0xF7, 0xDE, 0x09, 0x1A, 0xC5, - 0xFD, 0xD7, 0xF4, 0x9A, 0x3D, 0xC6, 0x64, 0x1C, - 0xDF, 0x62, 0x44, 0x6B, 0x4B, 0x04, 0xA3, 0x1F, - 0x73, 0xB8, 0x0A, 0x62, 0xF8, 0x0A, 0x40, 0x4A, - 0x8C, 0xB1, 0x8C, 0xE3, 0xE6, 0x54, 0x80, 0xEF, - 0x7B, 0x52, 0xBF, 0x00, 0x91, 0x11, 0x7E, 0x5D, - 0x08, 0xEA, 0xE1, 0xB0, 0xAA, 0xBB, 0x72, 0xE6, - 0xDF, 0xFF, 0xF7, 0x6F, 0x6E, 0x44, 0xBB, 0xD7, - 0xEA, 0x57, 0x0D, 0x66, 0x04, 0xBC, 0x2E, 0x74, - 0x31, 0x8B, 0xAF, 0xA3, 0x15, 0xA3, 0x88, 0x61, - 0xAA, 0x1B, 0x21, 0xAF, 0xB2, 0xA5, 0x3F, 0x26, - 0x14, 0xF1, 0xD6, 0x40, 0x07, 0x59, 0x84, 0xAE, - 0x62, 0xE2, 0xFC, 0xA1, 0xD1, 0xB4, 0xDB, 0x36, - 0x9F, 0x15, 0x70, 0x5C, 0xE7, 0xD4, 0xDF, 0x8A, - 0xE9, 0x82, 0x64, 0x50, 0x10, 0x51, 0xC0, 0xDE, - 0xF2, 0x1D, 0x64, 0x5D, 0x49, 0x62, 0x5A, 0xF0, - 0x2C, 0xA4, 0x28, 0xD9, 0xF0, 0xC2, 0xCD, 0x9F, - 0xBA, 0xEE, 0xAB, 0x97, 0xE8, 0xE9, 0x15, 0x16, - 0x62, 0xB6, 0x99, 0x2B, 0x4C, 0x99, 0xAB, 0x1B, - 0x92, 0x5D, 0x08, 0x92, 0x03, 0x63, 0x37, 0x3F, - 0x76, 0xD3, 0xFD, 0xF0, 0x82, 0x8C, 0xAA, 0x69, - 0xC8, 0xB1, 0xBD, 0xC6, 0xF5, 0x21, 0xDF, 0x64, - 0x1C, 0xF1, 0xC8, 0xA4, 0xE7, 0xEF, 0x0C, 0x23, - 0x28, 0x9A, 0x4E, 0x2C, 0xF1, 0x8A, 0xCE, 0xBB, - 0xE4, 0xC1, 0xE6, 0x83, 0x69, 0xBD, 0x52, 0x35, - 0x12, 0x01, 0x42, 0xEC, 0xDD, 0x1A, 0x73, 0x81, - 0x1E, 0x2E, 0x53, 0x3A, 0x64, 0x7D, 0x7A, 0xEE, - 0x16, 0xDA, 0xA0, 0x3B, 0x68, 0x36, 0x39, 0xDC, - 0xF1, 0xE1, 0xF1, 0xE7, 0x1C, 0xFA, 0xED, 0x48, - 0xF6, 0x9A, 0xEC, 0x3E, 0x83, 0x17, 0x33, 0xDA, - 0x19, 0xCE, 0xBE, 0xC1, 0xDD, 0xBF, 0x71, 0xCB, - 0xAE, 0x08, 0x00, 0xF2, 0xF6, 0xD6, 0x4A, 0x09, - 0x6E, 0xC4, 0x95, 0xD6, 0x2F, 0x43, 0x44, 0xF7, - 0xAA, 0x56, 0x21, 0xB3, 0x22, 0x35, 0x3A, 0x79, - 0x5A, 0xA0, 0x99, 0xEA, 0x3A, 0x07, 0x02, 0x72, - 0xD0, 0x53, 0xD4, 0x65, 0x3A, 0x20, 0xCF, 0x21, - 0x0E, 0xAA, 0xF1, 0x2C, 0xAE, 0x60, 0x23, 0xD8, - 0xE5, 0x11, 0x8D, 0xF0, 0x4B, 0x38, 0x4A, 0x44, - 0xD1, 0xED, 0xB9, 0x1C, 0x44, 0x98, 0x9E, 0xF7, - 0xEE, 0x57, 0xF2, 0xBF, 0x81, 0xA2, 0x4B, 0xDC, - 0x76, 0x80, 0x7D, 0xA9, 0x67, 0xEE, 0x65, 0x25, - 0x41, 0x0C, 0x5C, 0x48, 0x50, 0x67, 0xEF, 0xC3, - 0xD3, 0x9A, 0x9A, 0xD4, 0x2C, 0xC7, 0x53, 0xBA, - 0xA5, 0x9A, 0x1F, 0xD2, 0x8A, 0xF3, 0x5C, 0x00, - 0xD1, 0x8A, 0x40, 0x6A, 0x28, 0xFC, 0x79, 0xBA - }; - static const byte kprime_768[WC_ML_KEM_SS_SZ] = { - 0xDC, 0x5B, 0x88, 0x88, 0xBC, 0x1E, 0xBA, 0x5C, - 0x19, 0x69, 0xC2, 0x11, 0x64, 0xEA, 0x43, 0xE2, - 0x2E, 0x7A, 0xC0, 0xCD, 0x01, 0x2A, 0x2F, 0x26, - 0xCB, 0x8C, 0x48, 0x7E, 0x69, 0xEF, 0x7C, 0xE4 - }; -#endif -#ifndef WOLFSSL_NO_ML_KEM_1024 - static const byte dk_1024[WC_ML_KEM_1024_PRIVATE_KEY_SIZE] = { - 0x84, 0x45, 0xC3, 0x36, 0xF3, 0x51, 0x8B, 0x29, - 0x81, 0x63, 0xDC, 0xBB, 0x63, 0x57, 0x59, 0x79, - 0x83, 0xCA, 0x2E, 0x87, 0x3D, 0xCB, 0x49, 0x61, - 0x0C, 0xF5, 0x2F, 0x14, 0xDB, 0xCB, 0x94, 0x7C, - 0x1F, 0x3E, 0xE9, 0x26, 0x69, 0x67, 0x27, 0x6B, - 0x0C, 0x57, 0x6C, 0xF7, 0xC3, 0x0E, 0xE6, 0xB9, - 0x3D, 0xEA, 0x51, 0x18, 0x67, 0x6C, 0xBE, 0xE1, - 0xB1, 0xD4, 0x79, 0x42, 0x06, 0xFB, 0x36, 0x9A, - 0xBA, 0x41, 0x16, 0x7B, 0x43, 0x93, 0x85, 0x5C, - 0x84, 0xEB, 0xA8, 0xF3, 0x23, 0x73, 0xC0, 0x5B, - 0xAE, 0x76, 0x31, 0xC8, 0x02, 0x74, 0x4A, 0xAD, - 0xB6, 0xC2, 0xDE, 0x41, 0x25, 0x0C, 0x49, 0x43, - 0x15, 0x23, 0x0B, 0x52, 0x82, 0x6C, 0x34, 0x58, - 0x7C, 0xB2, 0x1B, 0x18, 0x3B, 0x49, 0xB2, 0xA5, - 0xAC, 0x04, 0x92, 0x1A, 0xC6, 0xBF, 0xAC, 0x1B, - 0x24, 0xA4, 0xB3, 0x7A, 0x93, 0xA4, 0xB1, 0x68, - 0xCC, 0xE7, 0x59, 0x1B, 0xE6, 0x11, 0x1F, 0x47, - 0x62, 0x60, 0xF2, 0x76, 0x29, 0x59, 0xF5, 0xC1, - 0x64, 0x01, 0x18, 0xC2, 0x42, 0x37, 0x72, 0xE2, - 0xAD, 0x03, 0xDC, 0x71, 0x68, 0xA3, 0x8C, 0x6D, - 0xD3, 0x9F, 0x5F, 0x72, 0x54, 0x26, 0x42, 0x80, - 0xC8, 0xBC, 0x10, 0xB9, 0x14, 0x16, 0x80, 0x70, - 0x47, 0x2F, 0xA8, 0x80, 0xAC, 0xB8, 0x60, 0x1A, - 0x8A, 0x08, 0x37, 0xF2, 0x5F, 0xE1, 0x94, 0x68, - 0x7C, 0xD6, 0x8B, 0x7D, 0xE2, 0x34, 0x0F, 0x03, - 0x6D, 0xAD, 0x89, 0x1D, 0x38, 0xD1, 0xB0, 0xCE, - 0x9C, 0x26, 0x33, 0x35, 0x5C, 0xF5, 0x7B, 0x50, - 0xB8, 0x96, 0x03, 0x6F, 0xCA, 0x26, 0x0D, 0x26, - 0x69, 0xF8, 0x5B, 0xAC, 0x79, 0x71, 0x4F, 0xDA, - 0xFB, 0x41, 0xEF, 0x80, 0xB8, 0xC3, 0x02, 0x64, - 0xC3, 0x13, 0x86, 0xAE, 0x60, 0xB0, 0x5F, 0xAA, - 0x54, 0x2A, 0x26, 0xB4, 0x1E, 0xB8, 0x5F, 0x67, - 0x06, 0x8F, 0x08, 0x80, 0x34, 0xFF, 0x67, 0xAA, - 0x2E, 0x81, 0x5A, 0xAB, 0x8B, 0xCA, 0x6B, 0xF7, - 0x1F, 0x70, 0xEC, 0xC3, 0xCB, 0xCB, 0xC4, 0x5E, - 0xF7, 0x01, 0xFC, 0xD5, 0x42, 0xBD, 0x21, 0xC7, - 0xB0, 0x95, 0x68, 0xF3, 0x69, 0xC6, 0x69, 0xF3, - 0x96, 0x47, 0x38, 0x44, 0xFB, 0xA1, 0x49, 0x57, - 0xF5, 0x19, 0x74, 0xD8, 0x52, 0xB9, 0x78, 0x01, - 0x46, 0x03, 0xA2, 0x10, 0xC0, 0x19, 0x03, 0x62, - 0x87, 0x00, 0x89, 0x94, 0xF2, 0x12, 0x55, 0xB2, - 0x50, 0x99, 0xAD, 0x82, 0xAA, 0x13, 0x24, 0x38, - 0x96, 0x3B, 0x2C, 0x0A, 0x47, 0xCD, 0xF5, 0xF3, - 0x2B, 0xA4, 0x6B, 0x76, 0xC7, 0xA6, 0x55, 0x9F, - 0x18, 0xBF, 0xD5, 0x55, 0xB7, 0x62, 0xE4, 0x87, - 0xB6, 0xAC, 0x99, 0x2F, 0xE2, 0x0E, 0x28, 0x3C, - 0xA0, 0xB3, 0xF6, 0x16, 0x44, 0x96, 0x95, 0x59, - 0x95, 0xC3, 0xB2, 0x8A, 0x57, 0xBB, 0xC2, 0x98, - 0x26, 0xF0, 0x6F, 0xB3, 0x8B, 0x25, 0x34, 0x70, - 0xAF, 0x63, 0x1B, 0xC4, 0x6C, 0x3A, 0x8F, 0x9C, - 0xE8, 0x24, 0x32, 0x19, 0x85, 0xDD, 0x01, 0xC0, - 0x5F, 0x69, 0xB8, 0x24, 0xF9, 0x16, 0x63, 0x3B, - 0x40, 0x65, 0x4C, 0x75, 0xAA, 0xEB, 0x93, 0x85, - 0x57, 0x6F, 0xFD, 0xE2, 0x99, 0x0A, 0x6B, 0x0A, - 0x3B, 0xE8, 0x29, 0xD6, 0xD8, 0x4E, 0x34, 0xF1, - 0x78, 0x05, 0x89, 0xC7, 0x92, 0x04, 0xC6, 0x3C, - 0x79, 0x8F, 0x55, 0xD2, 0x31, 0x87, 0xE4, 0x61, - 0xD4, 0x8C, 0x21, 0xE5, 0xC0, 0x47, 0xE5, 0x35, - 0xB1, 0x9F, 0x45, 0x8B, 0xBA, 0x13, 0x45, 0xB9, - 0xE4, 0x1E, 0x0C, 0xB4, 0xA9, 0xC2, 0xD8, 0xC4, - 0x0B, 0x49, 0x0A, 0x3B, 0xAB, 0xC5, 0x53, 0xB3, - 0x02, 0x6B, 0x16, 0x72, 0xD2, 0x8C, 0xBC, 0x8B, - 0x49, 0x8A, 0x3A, 0x99, 0x57, 0x9A, 0x83, 0x2F, - 0xEA, 0xE7, 0x46, 0x10, 0xF0, 0xB6, 0x25, 0x0C, - 0xC3, 0x33, 0xE9, 0x49, 0x3E, 0xB1, 0x62, 0x1E, - 0xD3, 0x4A, 0xA4, 0xAB, 0x17, 0x5F, 0x2C, 0xA2, - 0x31, 0x15, 0x25, 0x09, 0xAC, 0xB6, 0xAC, 0x86, - 0xB2, 0x0F, 0x6B, 0x39, 0x10, 0x84, 0x39, 0xE5, - 0xEC, 0x12, 0xD4, 0x65, 0xA0, 0xFE, 0xF3, 0x50, - 0x03, 0xE1, 0x42, 0x77, 0xA2, 0x18, 0x12, 0x14, - 0x6B, 0x25, 0x44, 0x71, 0x6D, 0x6A, 0xB8, 0x2D, - 0x1B, 0x07, 0x26, 0xC2, 0x7A, 0x98, 0xD5, 0x89, - 0xEB, 0xDA, 0xCC, 0x4C, 0x54, 0xBA, 0x77, 0xB2, - 0x49, 0x8F, 0x21, 0x7E, 0x14, 0xE3, 0x4E, 0x66, - 0x02, 0x5A, 0x2A, 0x14, 0x3A, 0x99, 0x25, 0x20, - 0xA6, 0x1C, 0x06, 0x72, 0xCC, 0x9C, 0xCE, 0xD7, - 0xC9, 0x45, 0x0C, 0x68, 0x3E, 0x90, 0xA3, 0xE4, - 0x65, 0x1D, 0xB6, 0x23, 0xA6, 0xDB, 0x39, 0xAC, - 0x26, 0x12, 0x5B, 0x7F, 0xC1, 0x98, 0x6D, 0x7B, - 0x04, 0x93, 0xB8, 0xB7, 0x2D, 0xE7, 0x70, 0x7D, - 0xC2, 0x0B, 0xBD, 0xD4, 0x37, 0x13, 0x15, 0x6A, - 0xF7, 0xD9, 0x43, 0x0E, 0xF4, 0x53, 0x99, 0x66, - 0x3C, 0x22, 0x02, 0x73, 0x91, 0x68, 0x69, 0x2D, - 0xD6, 0x57, 0x54, 0x5B, 0x05, 0x6D, 0x9C, 0x92, - 0x38, 0x5A, 0x7F, 0x41, 0x4B, 0x34, 0xB9, 0x0C, - 0x79, 0x60, 0xD5, 0x7B, 0x35, 0xBA, 0x7D, 0xDE, - 0x7B, 0x81, 0xFC, 0xA0, 0x11, 0x9D, 0x74, 0x1B, - 0x12, 0x78, 0x09, 0x26, 0x01, 0x8F, 0xE4, 0xC8, - 0x03, 0x0B, 0xF0, 0x38, 0xE1, 0x8B, 0x4F, 0xA3, - 0x37, 0x43, 0xD0, 0xD3, 0xC8, 0x46, 0x41, 0x7E, - 0x9D, 0x59, 0x15, 0xC2, 0x46, 0x31, 0x59, 0x38, - 0xB1, 0xE2, 0x33, 0x61, 0x45, 0x01, 0xD0, 0x26, - 0x95, 0x95, 0x51, 0x25, 0x8B, 0x23, 0x32, 0x30, - 0xD4, 0x28, 0xB1, 0x81, 0xB1, 0x32, 0xF1, 0xD0, - 0xB0, 0x26, 0x06, 0x7B, 0xA8, 0x16, 0x99, 0x9B, - 0xC0, 0xCD, 0x6B, 0x54, 0x7E, 0x54, 0x8B, 0x63, - 0xC9, 0xEA, 0xA0, 0x91, 0xBA, 0xC4, 0x93, 0xDC, - 0x59, 0x8D, 0xBC, 0x2B, 0x0E, 0x14, 0x6A, 0x25, - 0x91, 0xC2, 0xA8, 0xC0, 0x09, 0xDD, 0x51, 0x70, - 0xAA, 0xE0, 0x27, 0xC5, 0x41, 0xA1, 0xB5, 0xE6, - 0x6E, 0x45, 0xC6, 0x56, 0x12, 0x98, 0x4C, 0x46, - 0x77, 0x04, 0x93, 0xEC, 0x89, 0x6E, 0xF2, 0x5A, - 0xA9, 0x30, 0x5E, 0x9F, 0x06, 0x69, 0x2C, 0xD0, - 0xB2, 0xF0, 0x69, 0x62, 0xE2, 0x05, 0xBE, 0xBE, - 0x11, 0x3A, 0x34, 0xEB, 0xB1, 0xA4, 0x83, 0x0A, - 0x9B, 0x37, 0x49, 0x64, 0x1B, 0xB9, 0x35, 0x00, - 0x7B, 0x23, 0xB2, 0x4B, 0xFE, 0x57, 0x69, 0x56, - 0x25, 0x4D, 0x7A, 0x35, 0xAA, 0x49, 0x6A, 0xC4, - 0x46, 0xC6, 0x7A, 0x7F, 0xEC, 0x85, 0xA6, 0x00, - 0x57, 0xE8, 0x58, 0x06, 0x17, 0xBC, 0xB3, 0xFA, - 0xD1, 0x5C, 0x76, 0x44, 0x0F, 0xED, 0x54, 0xCC, - 0x78, 0x93, 0x94, 0xFE, 0xA2, 0x44, 0x52, 0xCC, - 0x6B, 0x05, 0x85, 0xB7, 0xEB, 0x0A, 0x88, 0xBB, - 0xA9, 0x50, 0x0D, 0x98, 0x00, 0xE6, 0x24, 0x1A, - 0xFE, 0xB5, 0x23, 0xB5, 0x5A, 0x96, 0xA5, 0x35, - 0x15, 0x1D, 0x10, 0x49, 0x57, 0x32, 0x06, 0xE5, - 0x9C, 0x7F, 0xEB, 0x07, 0x09, 0x66, 0x82, 0x36, - 0x34, 0xF7, 0x7D, 0x5F, 0x12, 0x91, 0x75, 0x5A, - 0x24, 0x31, 0x19, 0x62, 0x1A, 0xF8, 0x08, 0x4A, - 0xB7, 0xAC, 0x1E, 0x22, 0xA0, 0x56, 0x8C, 0x62, - 0x01, 0x41, 0x7C, 0xBE, 0x36, 0x55, 0xD8, 0xA0, - 0x8D, 0xD5, 0xB5, 0x13, 0x88, 0x4C, 0x98, 0xD5, - 0xA4, 0x93, 0xFD, 0x49, 0x38, 0x2E, 0xA4, 0x18, - 0x60, 0xF1, 0x33, 0xCC, 0xD6, 0x01, 0xE8, 0x85, - 0x96, 0x64, 0x26, 0xA2, 0xB1, 0xF2, 0x3D, 0x42, - 0xD8, 0x2E, 0x24, 0x58, 0x2D, 0x99, 0x72, 0x51, - 0x92, 0xC2, 0x17, 0x77, 0x46, 0x7B, 0x14, 0x57, - 0xB1, 0xDD, 0x42, 0x9A, 0x0C, 0x41, 0xA5, 0xC3, - 0xD7, 0x04, 0xCE, 0xA0, 0x62, 0x78, 0xC5, 0x99, - 0x41, 0xB4, 0x38, 0xC6, 0x27, 0x27, 0x09, 0x78, - 0x09, 0xB4, 0x53, 0x0D, 0xBE, 0x83, 0x7E, 0xA3, - 0x96, 0xB6, 0xD3, 0x10, 0x77, 0xFA, 0xD3, 0x73, - 0x30, 0x53, 0x98, 0x9A, 0x84, 0x42, 0xAA, 0xC4, - 0x25, 0x5C, 0xB1, 0x63, 0xB8, 0xCA, 0x2F, 0x27, - 0x50, 0x1E, 0xA9, 0x67, 0x30, 0x56, 0x95, 0xAB, - 0xD6, 0x59, 0xAA, 0x02, 0xC8, 0x3E, 0xE6, 0x0B, - 0xB5, 0x74, 0x20, 0x3E, 0x99, 0x37, 0xAE, 0x1C, - 0x62, 0x1C, 0x8E, 0xCB, 0x5C, 0xC1, 0xD2, 0x1D, - 0x55, 0x69, 0x60, 0xB5, 0xB9, 0x16, 0x1E, 0xA9, - 0x6F, 0xFF, 0xEB, 0xAC, 0x72, 0xE1, 0xB8, 0xA6, - 0x15, 0x4F, 0xC4, 0xD8, 0x8B, 0x56, 0xC0, 0x47, - 0x41, 0xF0, 0x90, 0xCB, 0xB1, 0x56, 0xA7, 0x37, - 0xC9, 0xE6, 0xA2, 0x2B, 0xA8, 0xAC, 0x70, 0x4B, - 0xC3, 0x04, 0xF8, 0xE1, 0x7E, 0x5E, 0xA8, 0x45, - 0xFD, 0xE5, 0x9F, 0xBF, 0x78, 0x8C, 0xCE, 0x0B, - 0x97, 0xC8, 0x76, 0x1F, 0x89, 0xA2, 0x42, 0xF3, - 0x05, 0x25, 0x83, 0xC6, 0x84, 0x4A, 0x63, 0x20, - 0x31, 0xC9, 0x64, 0xA6, 0xC4, 0xA8, 0x5A, 0x12, - 0x8A, 0x28, 0x61, 0x9B, 0xA1, 0xBB, 0x3D, 0x1B, - 0xEA, 0x4B, 0x49, 0x84, 0x1F, 0xC8, 0x47, 0x61, - 0x4A, 0x06, 0x68, 0x41, 0xF5, 0x2E, 0xD0, 0xEB, - 0x8A, 0xE0, 0xB8, 0xB0, 0x96, 0xE9, 0x2B, 0x81, - 0x95, 0x40, 0x58, 0x15, 0xB2, 0x31, 0x26, 0x6F, - 0x36, 0xB1, 0x8C, 0x1A, 0x53, 0x33, 0x3D, 0xAB, - 0x95, 0xD2, 0xA9, 0xA3, 0x74, 0xB5, 0x47, 0x8A, - 0x4A, 0x41, 0xFB, 0x87, 0x59, 0x95, 0x7C, 0x9A, - 0xB2, 0x2C, 0xAE, 0x54, 0x5A, 0xB5, 0x44, 0xBA, - 0x8D, 0xD0, 0x5B, 0x83, 0xF3, 0xA6, 0x13, 0xA2, - 0x43, 0x7A, 0xDB, 0x07, 0x3A, 0x96, 0x35, 0xCB, - 0x4B, 0xBC, 0x96, 0x5F, 0xB4, 0x54, 0xCF, 0x27, - 0xB2, 0x98, 0xA4, 0x0C, 0xD0, 0xDA, 0x3B, 0x8F, - 0x9C, 0xA9, 0x9D, 0x8C, 0xB4, 0x28, 0x6C, 0x5E, - 0xB4, 0x76, 0x41, 0x67, 0x96, 0x07, 0x0B, 0xA5, - 0x35, 0xAA, 0xA5, 0x8C, 0xDB, 0x45, 0x1C, 0xD6, - 0xDB, 0x5C, 0xBB, 0x0C, 0xA2, 0x0F, 0x0C, 0x71, - 0xDE, 0x97, 0xC3, 0x0D, 0xA9, 0x7E, 0xC7, 0x90, - 0x6D, 0x06, 0xB4, 0xB9, 0x39, 0x39, 0x60, 0x28, - 0xC4, 0x6B, 0xA0, 0xE7, 0xA8, 0x65, 0xBC, 0x83, - 0x08, 0xA3, 0x81, 0x0F, 0x12, 0x12, 0x00, 0x63, - 0x39, 0xF7, 0xBC, 0x16, 0x9B, 0x16, 0x66, 0xFD, - 0xF4, 0x75, 0x91, 0x1B, 0xBC, 0x8A, 0xAA, 0xB4, - 0x17, 0x55, 0xC9, 0xA8, 0xAA, 0xBF, 0xA2, 0x3C, - 0x0E, 0x37, 0xF8, 0x4F, 0xE4, 0x69, 0x99, 0xE0, - 0x30, 0x49, 0x4B, 0x92, 0x98, 0xEF, 0x99, 0x34, - 0xE8, 0xA6, 0x49, 0xC0, 0xA5, 0xCC, 0xE2, 0xB2, - 0x2F, 0x31, 0x80, 0x9A, 0xFE, 0xD2, 0x39, 0x55, - 0xD8, 0x78, 0x81, 0xD9, 0x9F, 0xC1, 0xD3, 0x52, - 0x89, 0x6C, 0xAC, 0x90, 0x55, 0xBE, 0xA0, 0xD0, - 0x16, 0xCC, 0xBA, 0x78, 0x05, 0xA3, 0xA5, 0x0E, - 0x22, 0x16, 0x30, 0x37, 0x9B, 0xD0, 0x11, 0x35, - 0x22, 0x1C, 0xAD, 0x5D, 0x95, 0x17, 0xC8, 0xCC, - 0x42, 0x63, 0x7B, 0x9F, 0xC0, 0x71, 0x8E, 0x9A, - 0x9B, 0xB4, 0x94, 0x5C, 0x72, 0xD8, 0xD1, 0x1D, - 0x3D, 0x65, 0x9D, 0x83, 0xA3, 0xC4, 0x19, 0x50, - 0x9A, 0xF5, 0xB4, 0x70, 0xDD, 0x89, 0xB7, 0xF3, - 0xAC, 0xCF, 0x5F, 0x35, 0xCF, 0xC3, 0x22, 0x11, - 0x5F, 0xD6, 0x6A, 0x5C, 0xD2, 0x87, 0x56, 0x51, - 0x32, 0x6F, 0x9B, 0x31, 0x68, 0x91, 0x3B, 0xE5, - 0xB9, 0xC8, 0x7A, 0xE0, 0xB0, 0x25, 0xEC, 0x7A, - 0x2F, 0x4A, 0x07, 0x27, 0x50, 0x94, 0x6A, 0xC6, - 0x11, 0x70, 0xA7, 0x82, 0x6D, 0x97, 0x04, 0xC5, - 0xA2, 0x3A, 0x1C, 0x0A, 0x23, 0x25, 0x14, 0x6C, - 0x3B, 0xC1, 0x85, 0x88, 0x26, 0xC6, 0xB3, 0x92, - 0x79, 0xC2, 0xDA, 0x74, 0x38, 0xA3, 0x70, 0xED, - 0x8A, 0x0A, 0xA5, 0x16, 0x9E, 0x3B, 0xEC, 0x29, - 0xED, 0x88, 0x47, 0x87, 0x32, 0x75, 0x8D, 0x45, - 0x41, 0x43, 0xE2, 0x27, 0xF8, 0x59, 0x58, 0x83, - 0x29, 0x78, 0x42, 0xE6, 0xAF, 0x13, 0x3B, 0x17, - 0xE4, 0x81, 0x1B, 0x0F, 0x57, 0x13, 0xAC, 0x73, - 0xB7, 0xE3, 0x47, 0x42, 0x3E, 0xB9, 0x28, 0x22, - 0xD2, 0x30, 0x6F, 0xA1, 0x45, 0x00, 0xA7, 0x20, - 0x7A, 0x06, 0x72, 0x67, 0x20, 0x46, 0x54, 0x4A, - 0xCC, 0x4E, 0xA9, 0xC1, 0x6E, 0xD7, 0x42, 0x1A, - 0x06, 0x9E, 0x0D, 0x73, 0x7A, 0x98, 0x62, 0x85, - 0x19, 0xC6, 0xA2, 0x9A, 0x42, 0x4A, 0x86, 0x8B, - 0x46, 0xD9, 0xA0, 0xCC, 0x7C, 0x6C, 0x9D, 0xDD, - 0x8B, 0x8B, 0xCB, 0xF4, 0x22, 0xC8, 0xF4, 0x8A, - 0x73, 0x14, 0x3D, 0x5A, 0xBB, 0x66, 0xBC, 0x55, - 0x49, 0x94, 0x18, 0x43, 0x08, 0x02, 0xBA, 0xC5, - 0x44, 0x46, 0x3C, 0xC7, 0x31, 0x9D, 0x17, 0x99, - 0x8F, 0x29, 0x41, 0x13, 0x65, 0x76, 0x6D, 0x04, - 0xC8, 0x47, 0xF3, 0x12, 0x9D, 0x90, 0x77, 0xB7, - 0xD8, 0x33, 0x9B, 0xFB, 0x96, 0xA6, 0x73, 0x9C, - 0x3F, 0x6B, 0x74, 0xA8, 0xF0, 0x5F, 0x91, 0x38, - 0xAB, 0x2F, 0xE3, 0x7A, 0xCB, 0x57, 0x63, 0x4D, - 0x18, 0x20, 0xB5, 0x01, 0x76, 0xF5, 0xA0, 0xB6, - 0xBC, 0x29, 0x40, 0xF1, 0xD5, 0x93, 0x8F, 0x19, - 0x36, 0xB5, 0xF9, 0x58, 0x28, 0xB9, 0x2E, 0xB7, - 0x29, 0x73, 0xC1, 0x59, 0x0A, 0xEB, 0x7A, 0x55, - 0x2C, 0xEC, 0xA1, 0x0B, 0x00, 0xC3, 0x03, 0xB7, - 0xC7, 0x5D, 0x40, 0x20, 0x71, 0xA7, 0x9E, 0x2C, - 0x81, 0x0A, 0xF7, 0xC7, 0x45, 0xE3, 0x33, 0x67, - 0x12, 0x49, 0x2A, 0x42, 0x04, 0x3F, 0x29, 0x03, - 0xA3, 0x7C, 0x64, 0x34, 0xCE, 0xE2, 0x0B, 0x1D, - 0x15, 0x9B, 0x05, 0x76, 0x99, 0xFF, 0x9C, 0x1D, - 0x3B, 0xD6, 0x80, 0x29, 0x83, 0x9A, 0x08, 0xF4, - 0x3E, 0x6C, 0x1C, 0x81, 0x99, 0x13, 0x53, 0x2F, - 0x91, 0x1D, 0xD3, 0x70, 0xC7, 0x02, 0x14, 0x88, - 0xE1, 0x1C, 0xB5, 0x04, 0xCB, 0x9C, 0x70, 0x57, - 0x0F, 0xFF, 0x35, 0xB4, 0xB4, 0x60, 0x11, 0x91, - 0xDC, 0x1A, 0xD9, 0xE6, 0xAD, 0xC5, 0xFA, 0x96, - 0x18, 0x79, 0x8D, 0x7C, 0xC8, 0x60, 0xC8, 0x7A, - 0x93, 0x9E, 0x4C, 0xCF, 0x85, 0x33, 0x63, 0x22, - 0x68, 0xCF, 0x1A, 0x51, 0xAF, 0xF0, 0xCB, 0x81, - 0x1C, 0x55, 0x45, 0xCB, 0x16, 0x56, 0xE6, 0x52, - 0x69, 0x47, 0x74, 0x30, 0x69, 0x9C, 0xCD, 0xEA, - 0x38, 0x00, 0x63, 0x0B, 0x78, 0xCD, 0x58, 0x10, - 0x33, 0x4C, 0xCF, 0x02, 0xE0, 0x13, 0xF3, 0xB8, - 0x02, 0x44, 0xE7, 0x0A, 0xCD, 0xB0, 0x60, 0xBB, - 0xE7, 0xA5, 0x53, 0xB0, 0x63, 0x45, 0x6B, 0x2E, - 0xA8, 0x07, 0x47, 0x34, 0x13, 0x16, 0x5C, 0xE5, - 0x7D, 0xD5, 0x63, 0x47, 0x3C, 0xFB, 0xC9, 0x06, - 0x18, 0xAD, 0xE1, 0xF0, 0xB8, 0x88, 0xAA, 0x48, - 0xE7, 0x22, 0xBB, 0x27, 0x51, 0x85, 0x8F, 0xE1, - 0x96, 0x87, 0x44, 0x2A, 0x48, 0xE7, 0xCA, 0x0D, - 0x2A, 0x29, 0xCD, 0x51, 0xBF, 0xD8, 0xF7, 0x8C, - 0x17, 0xB9, 0x66, 0x0B, 0xFB, 0x54, 0xA4, 0x70, - 0xB2, 0xAE, 0x9A, 0x95, 0x5C, 0x6A, 0xB8, 0xD6, - 0xE5, 0xCC, 0x92, 0xAC, 0x8E, 0xD3, 0xC1, 0x85, - 0xDA, 0xA8, 0xBC, 0x29, 0xF0, 0x57, 0x8E, 0xBB, - 0x81, 0x2B, 0x97, 0xC9, 0xE5, 0xA8, 0x48, 0xA6, - 0x38, 0x4D, 0xE4, 0xE7, 0x5A, 0x31, 0x47, 0x0B, - 0x53, 0x06, 0x6A, 0x8D, 0x02, 0x7B, 0xA4, 0x4B, - 0x21, 0x74, 0x9C, 0x04, 0x92, 0x46, 0x5F, 0x90, - 0x72, 0xB2, 0x83, 0x76, 0xC4, 0xE2, 0x90, 0xB3, - 0x0C, 0x18, 0x63, 0xF9, 0xE5, 0xB7, 0x99, 0x96, - 0x08, 0x34, 0x22, 0xBD, 0x8C, 0x27, 0x2C, 0x10, - 0xEC, 0xC6, 0xEB, 0x9A, 0x0A, 0x82, 0x25, 0xB3, - 0x1A, 0xA0, 0xA6, 0x6E, 0x35, 0xB9, 0xC0, 0xB9, - 0xA7, 0x95, 0x82, 0xBA, 0x20, 0xA3, 0xC0, 0x4C, - 0xD2, 0x99, 0x14, 0xF0, 0x83, 0xA0, 0x15, 0x82, - 0x88, 0xBA, 0x4D, 0x6E, 0xB6, 0x2D, 0x87, 0x26, - 0x4B, 0x91, 0x2B, 0xCA, 0x39, 0x73, 0x2F, 0xBD, - 0xE5, 0x36, 0xA3, 0x77, 0xAD, 0x02, 0xB8, 0xC8, - 0x35, 0xD4, 0xA2, 0xF4, 0xE7, 0xB1, 0xCE, 0x11, - 0x5D, 0x0C, 0x86, 0x0B, 0xEA, 0xA7, 0x95, 0x5A, - 0x49, 0xAD, 0x68, 0x95, 0x86, 0xA8, 0x9A, 0x2B, - 0x9F, 0x9B, 0x10, 0xD1, 0x59, 0x5D, 0x2F, 0xC0, - 0x65, 0xAD, 0x01, 0x8A, 0x7D, 0x56, 0xC6, 0x14, - 0x47, 0x1F, 0x8E, 0x94, 0x6F, 0xE8, 0xAB, 0x49, - 0xE8, 0x22, 0x65, 0x91, 0x11, 0x9F, 0xCA, 0xDB, - 0x4F, 0x9A, 0x86, 0x16, 0x31, 0x37, 0x87, 0x36, - 0xB6, 0x68, 0x8B, 0x78, 0x2D, 0x58, 0xE9, 0x7E, - 0x45, 0x72, 0x75, 0x3A, 0x96, 0x64, 0xB6, 0xB8, - 0x53, 0x68, 0x12, 0xB2, 0x59, 0x11, 0xAA, 0x76, - 0xA2, 0x42, 0x37, 0x54, 0x33, 0x19, 0x27, 0x38, - 0xEE, 0xE7, 0x62, 0xF6, 0xB8, 0x43, 0x15, 0xBB, - 0x34, 0x36, 0x23, 0x1E, 0x0A, 0x9B, 0x27, 0x7E, - 0xD2, 0x8A, 0xE0, 0x05, 0x07, 0x28, 0x34, 0x64, - 0x57, 0xE1, 0x34, 0x05, 0x06, 0x2D, 0xB2, 0x80, - 0x4B, 0x8D, 0xA6, 0x0B, 0xB5, 0xC7, 0x93, 0xD4, - 0xCC, 0x0E, 0x10, 0x1C, 0xBA, 0x2D, 0x91, 0x82, - 0xFD, 0x71, 0x24, 0xFF, 0x52, 0xBF, 0x4C, 0xA2, - 0x82, 0x92, 0xAC, 0x26, 0xD6, 0x78, 0x08, 0x89, - 0x53, 0x97, 0x1D, 0xBA, 0x0B, 0x6F, 0xEC, 0x2C, - 0x96, 0x59, 0x35, 0x32, 0x91, 0xC7, 0x0C, 0x5B, - 0x92, 0x45, 0xA0, 0xCA, 0x25, 0x33, 0x04, 0xAF, - 0xD3, 0xC9, 0x51, 0x02, 0xBE, 0xA6, 0x68, 0x75, - 0xC6, 0x20, 0x16, 0x80, 0xB4, 0xBD, 0xA3, 0x86, - 0x87, 0xB6, 0x48, 0xC2, 0x8E, 0xB3, 0x74, 0x78, - 0xE3, 0xBC, 0x00, 0xCA, 0x8A, 0x3C, 0xC2, 0x72, - 0x04, 0x64, 0x2B, 0x42, 0xB6, 0x8F, 0xCB, 0xE7, - 0xB2, 0x1A, 0x36, 0x6D, 0x06, 0x68, 0xA5, 0x02, - 0x9A, 0x7D, 0xEE, 0xF9, 0x4C, 0xDD, 0x6A, 0x95, - 0xD7, 0xEA, 0x89, 0x31, 0x67, 0x3B, 0xF7, 0x11, - 0x2D, 0x40, 0x42, 0x10, 0x7B, 0x1B, 0x8B, 0x97, - 0x00, 0xC9, 0x74, 0xF9, 0xC4, 0xE8, 0x3A, 0x8F, - 0xAC, 0xD8, 0x9B, 0xFE, 0x0C, 0xA3, 0xCC, 0x4C, - 0x2F, 0xCE, 0x80, 0xA0, 0x3D, 0x35, 0x76, 0xC2, - 0x22, 0xA7, 0x92, 0xB7, 0x2B, 0x1F, 0x07, 0x0A, - 0xB7, 0xF6, 0xB6, 0xF2, 0xB5, 0xCA, 0x2A, 0xF5, - 0x05, 0x4A, 0xFA, 0x70, 0xA8, 0x96, 0x99, 0x01, - 0x59, 0xB4, 0x5D, 0x10, 0x03, 0xE2, 0xA0, 0x56, - 0x48, 0x67, 0x5E, 0x59, 0x60, 0x16, 0xF1, 0xB7, - 0x1D, 0xD0, 0xF7, 0xBD, 0xA7, 0xE2, 0x09, 0x7F, - 0xC7, 0x3B, 0x3A, 0x14, 0x3D, 0x12, 0xC7, 0x26, - 0x02, 0x0A, 0xC3, 0x49, 0x58, 0xAD, 0x70, 0x62, - 0xB9, 0x2B, 0x9A, 0xBF, 0x3C, 0xA6, 0xBE, 0x5A, - 0xE2, 0x9F, 0x57, 0x13, 0x5E, 0x62, 0x5A, 0x36, - 0x79, 0x71, 0x83, 0x7E, 0x63, 0x63, 0xD1, 0x53, - 0x20, 0x94, 0xE0, 0x22, 0xA2, 0x34, 0x67, 0xCF, - 0x93, 0x2E, 0x1F, 0x89, 0xB5, 0xB0, 0x80, 0x3C, - 0x1E, 0xC9, 0x9B, 0x58, 0x5A, 0x78, 0xB5, 0x86, - 0x50, 0x96, 0x74, 0x6F, 0x32, 0x25, 0x82, 0x14, - 0xEC, 0xB3, 0x80, 0x65, 0xC9, 0x7F, 0x45, 0x5E, - 0x15, 0x5A, 0xCC, 0x2D, 0xD0, 0x05, 0xA9, 0xC7, - 0x6B, 0xED, 0x59, 0xCD, 0xA7, 0x38, 0x37, 0xD3, - 0x03, 0x50, 0x4E, 0x6C, 0x97, 0x6A, 0x60, 0x6A, - 0x2B, 0xE7, 0xBB, 0xEC, 0x59, 0x48, 0xB9, 0x1A, - 0x34, 0x9E, 0x89, 0x36, 0x68, 0x8C, 0xC0, 0x27, - 0x97, 0x54, 0xB7, 0x43, 0xAB, 0xC5, 0x86, 0x66, - 0xB1, 0x9B, 0x6C, 0x32, 0x60, 0x05, 0x1F, 0x19, - 0x20, 0x6B, 0xB9, 0x62, 0xBB, 0x66, 0x33, 0xEB, - 0x00, 0x48, 0xE3, 0x2B, 0xAA, 0xCC, 0x5B, 0x02, - 0x0D, 0x02, 0xC8, 0x6C, 0xA9, 0x77, 0x0A, 0xD4, - 0x69, 0xDB, 0x54, 0xA1, 0x06, 0xAC, 0x73, 0xA3, - 0x5B, 0x80, 0x57, 0x42, 0x2B, 0x3D, 0xB2, 0x02, - 0xC5, 0xA5, 0xB4, 0xE3, 0xD5, 0x35, 0xF0, 0xFC, - 0x99, 0x32, 0x6C, 0x4B, 0x8B, 0x7B, 0x16, 0xF1, - 0xCB, 0x5A, 0xF9, 0x68, 0x03, 0xFA, 0x8C, 0x19, - 0x5F, 0xC0, 0xBC, 0xED, 0xDA, 0xAF, 0x01, 0x2A, - 0x51, 0x72, 0x8B, 0x76, 0x48, 0x90, 0x82, 0x37, - 0x3C, 0x91, 0xE9, 0x2C, 0x87, 0xAC, 0xCA, 0x79, - 0x51, 0x60, 0x78, 0x2E, 0x3B, 0x0D, 0xD6, 0x43, - 0x54, 0x4B, 0xB9, 0x6A, 0xBC, 0x27, 0x08, 0xD4, - 0x9B, 0x75, 0x9C, 0xF0, 0x57, 0xAA, 0x22, 0x3B, - 0xAF, 0xD9, 0x6A, 0x33, 0x0B, 0xAF, 0x39, 0x81, - 0x0F, 0xE8, 0x67, 0x1B, 0x43, 0x43, 0xC2, 0x97, - 0xDA, 0x1E, 0x19, 0x69, 0xC9, 0x96, 0x21, 0x6A, - 0xB5, 0x10, 0x6D, 0xA6, 0x68, 0x94, 0x1B, 0x16, - 0x0D, 0x44, 0x77, 0x01, 0x71, 0x36, 0xCB, 0xCA, - 0x5B, 0x5A, 0x8D, 0x44, 0xC4, 0xA8, 0xB1, 0xCF, - 0x3E, 0xF7, 0x97, 0x85, 0xE5, 0xAA, 0x25, 0xC3, - 0xA1, 0xAD, 0x6C, 0x24, 0xFD, 0x14, 0x0F, 0x79, - 0x20, 0x7D, 0xE5, 0xA4, 0x99, 0xF8, 0xA1, 0x53, - 0x4F, 0xFA, 0x80, 0x4A, 0xA7, 0xB3, 0x88, 0x9C, - 0xBE, 0x25, 0xC0, 0x41, 0x47, 0x04, 0xAA, 0x57, - 0x89, 0x7F, 0x17, 0x86, 0x23, 0x64, 0xEC, 0xA5, - 0x62, 0x58, 0x00, 0x72, 0x48, 0x81, 0x39, 0x12, - 0xB8, 0x36, 0x49, 0x7F, 0x03, 0x59, 0xC2, 0xF7, - 0x23, 0x8A, 0x05, 0xD3, 0x05, 0xA0, 0xEA, 0x15, - 0x2E, 0x72, 0xB4, 0x44, 0x17, 0xA8, 0x68, 0x13, - 0x4E, 0x91, 0xB3, 0xCA, 0x79, 0x31, 0x23, 0x2F, - 0xD4, 0xC2, 0x5F, 0x8C, 0x2A, 0x49, 0x2A, 0x33, - 0x9C, 0xDC, 0x0A, 0x13, 0x89, 0x67, 0x21, 0x14, - 0x51, 0xF2, 0x56, 0x26, 0x78, 0xFA, 0x14, 0x08, - 0x0A, 0x34, 0x43, 0x6C, 0x42, 0xB0, 0x78, 0x65, - 0xAC, 0x03, 0x6A, 0x81, 0xE9, 0x7A, 0x77, 0x87, - 0xA9, 0x38, 0x02, 0x5C, 0xAF, 0x81, 0x34, 0x50, - 0x36, 0x8B, 0xED, 0x0C, 0x94, 0xB1, 0x85, 0x76, - 0x04, 0x52, 0x64, 0x05, 0xD2, 0x7A, 0x1C, 0x1A, - 0xBC, 0x81, 0xB5, 0xB6, 0xEC, 0x13, 0xC7, 0x19, - 0x30, 0xA9, 0x7D, 0x92, 0x32, 0xCF, 0x70, 0x21, - 0xEF, 0x87, 0xA4, 0xD1, 0x55, 0x32, 0x8E, 0x62, - 0xB5, 0x83, 0xA8, 0x3B, 0x4A, 0xF2, 0x1F, 0x9F, - 0x57, 0x50, 0xF8, 0x57, 0x51, 0x50, 0x42, 0x4F, - 0x63, 0xB8, 0x99, 0xD7, 0x1C, 0xAD, 0x26, 0x7C, - 0x09, 0xE4, 0x46, 0x71, 0x46, 0xE1, 0x6E, 0x9B, - 0x6C, 0x65, 0x3F, 0x00, 0x8C, 0x31, 0x13, 0x75, - 0xE2, 0xE0, 0x06, 0xD4, 0x07, 0x6A, 0x54, 0x6B, - 0x82, 0xF5, 0x31, 0x42, 0x22, 0xF7, 0xC6, 0x54, - 0x31, 0x7E, 0x79, 0xEC, 0x60, 0x35, 0xB7, 0x3F, - 0xAF, 0x49, 0x17, 0x57, 0xE6, 0x1C, 0x82, 0x83, - 0x26, 0xD5, 0x30, 0x44, 0x54, 0x1C, 0x4D, 0x45, - 0x37, 0xAB, 0xD3, 0xEA, 0x1E, 0x67, 0x99, 0x8C, - 0x33, 0x82, 0x97, 0x4C, 0xA7, 0x8A, 0xE1, 0xB1, - 0x96, 0x0E, 0x4A, 0x92, 0x26, 0xB0, 0x21, 0x9A, - 0xB0, 0x70, 0xF0, 0xD7, 0xAA, 0x66, 0xD7, 0x6F, - 0x93, 0x16, 0xAD, 0xB8, 0x0C, 0x54, 0xD6, 0x49, - 0x97, 0x71, 0xB4, 0x71, 0xE8, 0x16, 0x8D, 0x47, - 0xBC, 0xAA, 0x08, 0x32, 0x4A, 0xB6, 0xBA, 0x92, - 0xC3, 0xA7, 0x02, 0x75, 0xF2, 0x4F, 0xA4, 0xDC, - 0x10, 0xE2, 0x51, 0x63, 0x3F, 0xB9, 0x8D, 0x16, - 0x2B, 0xB5, 0x53, 0x72, 0x02, 0xC6, 0xA5, 0x53, - 0xCE, 0x78, 0x41, 0xC4, 0xD4, 0x0B, 0x87, 0x3B, - 0x85, 0xCA, 0x03, 0xA0, 0xA1, 0xE1, 0xCF, 0xAD, - 0xE6, 0xBA, 0x51, 0x80, 0xAB, 0x13, 0x23, 0xCC, - 0xBA, 0x9A, 0x3E, 0x9C, 0x53, 0xD3, 0x75, 0x75, - 0xAB, 0x1F, 0xD9, 0xE7, 0x31, 0x6C, 0x6F, 0xEE, - 0xCB, 0x0A, 0x14, 0xDF, 0x6F, 0x2D, 0xA5, 0x6C, - 0x2F, 0x56, 0xF5, 0x5A, 0x89, 0x63, 0x5C, 0xFC, - 0xFD, 0xA4, 0x79, 0x27, 0xAF, 0x1F, 0x0A, 0x47, - 0xB2, 0xD4, 0xE4, 0xE6, 0x16, 0x34, 0xB1, 0xB5, - 0x1D, 0x37, 0xA3, 0xA3, 0x07, 0xA9, 0x72, 0x42, - 0x0D, 0xE1, 0xB7, 0xA4, 0x81, 0xB8, 0x3E, 0x58, - 0x3B, 0x6A, 0xF1, 0x6F, 0x63, 0xCB, 0x00, 0xC6 - }; - static const byte c_1024[WC_ML_KEM_1024_CIPHER_TEXT_SIZE] = { - 0x0C, 0x68, 0x1B, 0x4A, 0xA8, 0x1F, 0x26, 0xAD, - 0xFB, 0x64, 0x5E, 0xC2, 0x4B, 0x37, 0x52, 0xF6, - 0xB3, 0x2C, 0x68, 0x64, 0x5A, 0xA5, 0xE7, 0xA9, - 0x99, 0xB6, 0x20, 0x36, 0xA5, 0x3D, 0xC5, 0xCB, - 0x06, 0x0A, 0x47, 0x3C, 0x08, 0xE5, 0xDA, 0x5C, - 0x0F, 0x5A, 0xF0, 0xE5, 0x17, 0x0C, 0x65, 0x97, - 0xE5, 0x0E, 0xC0, 0x80, 0x60, 0xF9, 0x9B, 0x0C, - 0x00, 0xEE, 0x9B, 0xDD, 0xAD, 0x7E, 0x7D, 0x25, - 0xA2, 0x2B, 0x22, 0x6F, 0x90, 0x14, 0x9B, 0x4C, - 0xE8, 0x87, 0xC7, 0x2F, 0xB6, 0x0A, 0xFF, 0x21, - 0x44, 0xEA, 0x2A, 0x72, 0x38, 0x3B, 0x31, 0x18, - 0xF9, 0x22, 0xD0, 0x32, 0xA1, 0x6F, 0x55, 0x42, - 0x89, 0x90, 0x2A, 0x14, 0xCF, 0x77, 0x55, 0x51, - 0x2B, 0xB1, 0x18, 0x6B, 0xAF, 0xAF, 0xFE, 0x79, - 0x4D, 0x2B, 0x6C, 0xDE, 0x90, 0x10, 0x9E, 0x65, - 0x82, 0xD3, 0x9C, 0xE0, 0xC9, 0x61, 0x97, 0x48, - 0x4B, 0x3F, 0xA0, 0x7F, 0xC9, 0x1D, 0x39, 0x4F, - 0xC8, 0xD8, 0x8E, 0x7F, 0xC4, 0xBE, 0x00, 0x2E, - 0x2D, 0xB5, 0x6F, 0x0C, 0x4D, 0x9D, 0x3F, 0xBD, - 0xA2, 0x74, 0x53, 0x6A, 0x0B, 0x86, 0xAB, 0xC6, - 0xE3, 0x9B, 0xDA, 0x52, 0x93, 0x1A, 0xEB, 0xB8, - 0xF1, 0x08, 0x4C, 0x5C, 0x1F, 0x7C, 0xB3, 0x17, - 0x77, 0x88, 0xB7, 0xF3, 0x31, 0xB7, 0x07, 0x43, - 0x61, 0x16, 0x34, 0x91, 0xD4, 0x28, 0xE7, 0x8B, - 0xCB, 0xB5, 0x7B, 0x63, 0x08, 0x41, 0xAA, 0x98, - 0x73, 0x33, 0x37, 0x7C, 0xF0, 0x95, 0x69, 0xCF, - 0xD1, 0x4C, 0xC2, 0xA1, 0x1C, 0x50, 0x1B, 0xDF, - 0x82, 0xC9, 0x3D, 0xE0, 0x5B, 0xEA, 0x20, 0x06, - 0x0D, 0xE8, 0x9C, 0x68, 0x6B, 0x82, 0x45, 0x71, - 0xCE, 0xF9, 0x4A, 0xB3, 0xFD, 0xAF, 0xA8, 0x51, - 0x26, 0x19, 0x81, 0x36, 0x69, 0xD4, 0xF5, 0x36, - 0x37, 0xFE, 0xFA, 0x4D, 0x02, 0x8C, 0xB2, 0x33, - 0xE5, 0x69, 0x30, 0xE2, 0x23, 0x5F, 0x7E, 0x60, - 0x34, 0xCA, 0x94, 0xB1, 0x43, 0xB7, 0x7A, 0xD4, - 0xA6, 0x87, 0x56, 0xE8, 0xA9, 0x18, 0x4D, 0xBA, - 0x61, 0xA8, 0x9F, 0x91, 0xED, 0xFB, 0x51, 0xA3, - 0x92, 0x11, 0x40, 0x24, 0x73, 0xA5, 0xF8, 0x91, - 0x45, 0x73, 0x6B, 0x2B, 0xF8, 0x56, 0x9C, 0x70, - 0x5B, 0x0C, 0xDB, 0x89, 0x80, 0xA4, 0x47, 0xE4, - 0xE1, 0xEA, 0xAD, 0x3E, 0x7E, 0x05, 0x78, 0xF5, - 0xF8, 0x6B, 0x8D, 0x03, 0xC9, 0xDA, 0xFE, 0x87, - 0x5E, 0x33, 0x9B, 0x44, 0x23, 0x84, 0x56, 0x16, - 0x79, 0x9E, 0xDC, 0xE0, 0x5F, 0x31, 0xB9, 0x26, - 0x64, 0xC5, 0xA5, 0x92, 0x53, 0xA6, 0x0E, 0x9D, - 0x89, 0x54, 0x8A, 0x30, 0x0C, 0x1A, 0xDB, 0x6D, - 0x19, 0x0A, 0x77, 0x5C, 0x5E, 0xE6, 0xE8, 0xA8, - 0x9B, 0x6E, 0x77, 0x9B, 0x03, 0x4C, 0x34, 0x00, - 0xA6, 0x25, 0xF4, 0xBB, 0xED, 0xBF, 0x91, 0x9C, - 0x45, 0xB2, 0xBC, 0xD1, 0x4C, 0x66, 0x92, 0x48, - 0xFC, 0x43, 0xC3, 0xEF, 0x47, 0xE1, 0x00, 0x75, - 0x89, 0x42, 0xE7, 0x5E, 0x8E, 0xD6, 0x07, 0x5A, - 0x96, 0xD7, 0x0D, 0x4E, 0xBD, 0x2B, 0x61, 0x35, - 0x82, 0x24, 0xDD, 0xA1, 0xEC, 0x4C, 0x19, 0xC2, - 0xA9, 0x28, 0x98, 0x17, 0x6F, 0xEB, 0x3C, 0x02, - 0xED, 0xCB, 0x99, 0x08, 0xBA, 0xE4, 0x9B, 0xD9, - 0x4A, 0xF0, 0x28, 0xED, 0xF8, 0xCF, 0xC2, 0xE5, - 0xF2, 0xE0, 0xBD, 0x37, 0x50, 0x06, 0x98, 0x6A, - 0xD4, 0x9E, 0x71, 0x75, 0x48, 0xE7, 0x46, 0xFE, - 0xF4, 0x9C, 0x86, 0x8B, 0xCE, 0xA2, 0x79, 0x0A, - 0xA9, 0x7E, 0x04, 0x06, 0x1B, 0x75, 0x60, 0x5C, - 0xB3, 0x9E, 0xFD, 0x46, 0x3D, 0x7B, 0x3D, 0x68, - 0xBA, 0x57, 0x44, 0x34, 0xFF, 0x7B, 0xE8, 0xE2, - 0xB8, 0x4B, 0xFC, 0x47, 0xE6, 0x7E, 0x9C, 0xD1, - 0x5F, 0x3E, 0xD4, 0x50, 0xC6, 0x1A, 0xFB, 0xA7, - 0x9A, 0x20, 0xB0, 0xB6, 0xF2, 0x87, 0x77, 0x7C, - 0x72, 0xF4, 0xAD, 0x24, 0x81, 0x74, 0xF1, 0x95, - 0x94, 0x77, 0xAA, 0x7A, 0x7C, 0x97, 0xF1, 0x22, - 0xC5, 0x04, 0x47, 0xC7, 0x48, 0x4F, 0x38, 0x2B, - 0xC4, 0x7D, 0x81, 0xFC, 0xC9, 0xC7, 0xE8, 0x92, - 0xC8, 0x83, 0x9D, 0x37, 0xB3, 0x53, 0x94, 0xB5, - 0x3E, 0x6B, 0x2B, 0x18, 0x95, 0xAB, 0xB0, 0xDE, - 0x8C, 0x98, 0xF2, 0x63, 0x3D, 0xC4, 0x41, 0x3A, - 0x8D, 0x57, 0x35, 0xDF, 0xC9, 0xA6, 0x40, 0x26, - 0xB6, 0xF3, 0x47, 0x79, 0xD6, 0xAC, 0x8A, 0xD9, - 0x9C, 0xC3, 0x1A, 0xA8, 0x98, 0xC2, 0xE7, 0x05, - 0x7F, 0x3D, 0xB8, 0xA1, 0xA8, 0xA9, 0x85, 0x27, - 0xA7, 0x9E, 0x43, 0x55, 0x2F, 0x28, 0xD1, 0x02, - 0x3E, 0x1F, 0x6A, 0x6B, 0x84, 0x85, 0x5C, 0xF5, - 0xE6, 0xDF, 0x88, 0x9B, 0xA2, 0x69, 0xF0, 0x48, - 0x94, 0x6E, 0x84, 0x02, 0x1C, 0x65, 0xC5, 0xA9, - 0x3B, 0x00, 0x7B, 0x07, 0x74, 0x1C, 0x1E, 0xE1, - 0x76, 0xC7, 0x39, 0x49, 0x11, 0x0F, 0x54, 0x8E, - 0xF4, 0x33, 0x2D, 0xCD, 0xD4, 0x91, 0xD2, 0xCE, - 0xFD, 0x02, 0x48, 0x88, 0x3F, 0x5E, 0x95, 0x25, - 0xBC, 0x91, 0xF3, 0x0A, 0xF1, 0x7C, 0xF5, 0xA9, - 0x8D, 0xD4, 0x4E, 0xF9, 0xA7, 0x1F, 0x99, 0xBB, - 0x73, 0x29, 0x85, 0xBA, 0x10, 0xA7, 0x23, 0xEF, - 0x47, 0x6F, 0xCF, 0x96, 0x6D, 0xA9, 0x45, 0x6B, - 0x24, 0x97, 0x8E, 0x33, 0x05, 0x0D, 0x0E, 0xC9, - 0x0D, 0x3C, 0xE4, 0x63, 0x78, 0x85, 0x1C, 0x9E, - 0xCF, 0xCF, 0xD3, 0x6C, 0x89, 0x5D, 0x44, 0xE9, - 0xE5, 0x06, 0x99, 0x30, 0x82, 0x52, 0x3D, 0x26, - 0x18, 0x57, 0x66, 0xB2, 0x35, 0x68, 0xCB, 0x95, - 0xE6, 0x41, 0x08, 0xF8, 0x9D, 0x10, 0x14, 0x74, - 0x7C, 0x67, 0xB6, 0xF3, 0xC8, 0x76, 0x7B, 0xE5, - 0xFC, 0x34, 0x12, 0x27, 0xDE, 0x94, 0x88, 0x86, - 0x1C, 0x5F, 0xE8, 0x11, 0x40, 0x9F, 0x80, 0x95, - 0x7D, 0x07, 0x52, 0x2A, 0x72, 0xCF, 0x6A, 0xB0, - 0x37, 0x8D, 0x0F, 0x2F, 0x28, 0xAF, 0x54, 0x81, - 0x85, 0xC3, 0x93, 0x67, 0x77, 0x99, 0x44, 0x66, - 0xA0, 0x19, 0xD3, 0x3B, 0x18, 0xA5, 0x4F, 0x38, - 0x0A, 0x33, 0x89, 0x2A, 0xB4, 0xD4, 0xBD, 0x50, - 0x7B, 0x5A, 0x61, 0xD0, 0xD3, 0x58, 0x34, 0x1A, - 0xC9, 0x2F, 0x07, 0xB4, 0x3B, 0x8F, 0x6A, 0xFC, - 0x69, 0x91, 0xBB, 0x6A, 0x1E, 0xAC, 0x23, 0xCA, - 0x6F, 0x73, 0xE9, 0x1F, 0x24, 0x64, 0xBD, 0x11, - 0x90, 0x98, 0xD7, 0xE7, 0x68, 0xE7, 0x7E, 0xCE, - 0x53, 0xFB, 0x89, 0x9B, 0xEB, 0x42, 0x26, 0x5E, - 0xCF, 0x7B, 0x27, 0x1F, 0x66, 0x54, 0x62, 0x82, - 0xD4, 0x72, 0xC3, 0x62, 0x39, 0x00, 0x6B, 0xB0, - 0xAB, 0xAB, 0xCC, 0xA2, 0x45, 0x50, 0xBA, 0xA0, - 0xA6, 0x01, 0x34, 0x8C, 0x81, 0x0F, 0xF5, 0xF9, - 0xEE, 0x50, 0x4B, 0xF7, 0x15, 0x5D, 0xEE, 0x41, - 0x41, 0xA1, 0x16, 0x05, 0xA4, 0xF3, 0x50, 0x9A, - 0xC9, 0xCA, 0xEF, 0x66, 0x24, 0xD2, 0x1D, 0xE3, - 0x32, 0xD5, 0xD5, 0x08, 0x28, 0xB5, 0x2E, 0x92, - 0x88, 0x5D, 0x3B, 0x90, 0x55, 0x3B, 0x14, 0x46, - 0x3A, 0xFB, 0x1E, 0xDC, 0xCD, 0x3B, 0x56, 0x9B, - 0x5A, 0x7F, 0x00, 0xBB, 0x66, 0x76, 0x9D, 0xAD, - 0xAC, 0x23, 0xAD, 0x8B, 0xB5, 0xD7, 0x3A, 0x6F, - 0x39, 0x0E, 0x6F, 0xC2, 0xF6, 0xF8, 0xEE, 0x3C, - 0xF4, 0x00, 0x9A, 0x5C, 0x3E, 0x1E, 0xF6, 0x0E, - 0x8F, 0x04, 0x06, 0x72, 0xD2, 0x62, 0xE6, 0x49, - 0x03, 0x79, 0xBB, 0xC7, 0x04, 0x95, 0xDF, 0xF2, - 0x37, 0xBE, 0xCD, 0x99, 0x52, 0xCD, 0x7E, 0xDE, - 0xB6, 0xD1, 0xDF, 0xC3, 0x60, 0xB3, 0xFC, 0x8B, - 0x0A, 0xF4, 0x80, 0xFF, 0xE0, 0x24, 0xAE, 0xEF, - 0xCD, 0x4E, 0x9C, 0xE9, 0x5D, 0x9B, 0x46, 0x9C, - 0x9A, 0x70, 0xE5, 0x11, 0x0D, 0xA0, 0xBA, 0xC1, - 0x24, 0xFC, 0x37, 0x41, 0xDC, 0xF4, 0x91, 0x16, - 0x26, 0x17, 0x96, 0x50, 0x4D, 0x5F, 0x49, 0x0B, - 0x43, 0x3C, 0x33, 0xC4, 0x0E, 0xDC, 0xE2, 0xB7, - 0x51, 0x51, 0xDA, 0x25, 0x6A, 0x86, 0x8A, 0x5E, - 0x35, 0xF8, 0x62, 0x26, 0xB8, 0x15, 0x1C, 0x91, - 0x93, 0x4C, 0xCC, 0x3D, 0xAC, 0xA3, 0x91, 0xDE, - 0xCC, 0xA7, 0x45, 0x37, 0x56, 0x60, 0xB6, 0xEC, - 0x41, 0xAE, 0x5D, 0x81, 0x08, 0x38, 0xCB, 0xEE, - 0xFF, 0xA1, 0x25, 0x57, 0x88, 0x44, 0x12, 0x35, - 0x7B, 0x10, 0x08, 0x36, 0x3D, 0x32, 0xB2, 0x37, - 0xAA, 0x1D, 0xD8, 0xE2, 0xD9, 0xC6, 0x36, 0x7A, - 0xDA, 0x09, 0xB2, 0xC9, 0x50, 0x60, 0x20, 0x6C, - 0xEC, 0x3E, 0xED, 0x39, 0x1F, 0xDC, 0x5D, 0xBE, - 0xF6, 0xF0, 0x8B, 0xDF, 0x04, 0x08, 0xE5, 0x85, - 0xAE, 0x5E, 0xBC, 0x8E, 0x97, 0x45, 0xD4, 0x4F, - 0xEC, 0xA9, 0x75, 0xAB, 0xBC, 0x14, 0x0B, 0xB3, - 0x7B, 0x8A, 0xDD, 0x16, 0xFC, 0xC2, 0x95, 0x69, - 0x10, 0xDC, 0x72, 0xBB, 0x3F, 0x02, 0xE9, 0xA1, - 0x30, 0xC9, 0xA8, 0x4F, 0x9C, 0xCB, 0x74, 0xD1, - 0x34, 0xCD, 0xF4, 0x0A, 0xFC, 0xBA, 0x20, 0x09, - 0xC8, 0xF0, 0x04, 0x02, 0x39, 0xBC, 0x99, 0x22, - 0x0E, 0xF6, 0x4C, 0x4D, 0xCC, 0xDE, 0x2E, 0x2E, - 0x5C, 0x9B, 0x68, 0x60, 0x2F, 0xBE, 0x8E, 0xF4, - 0xC9, 0x8B, 0x34, 0x68, 0xC7, 0x9D, 0xF4, 0xE0, - 0x78, 0x51, 0x1B, 0xFB, 0x8A, 0xA3, 0xDA, 0x09, - 0x59, 0x7A, 0x02, 0x51, 0x1E, 0x7C, 0x21, 0xA7, - 0xCF, 0x66, 0xA9, 0x38, 0x43, 0xA9, 0x48, 0x68, - 0xF1, 0x9E, 0x85, 0x52, 0x55, 0x2E, 0x3A, 0xCD, - 0xF6, 0xCB, 0x81, 0x06, 0x34, 0xDB, 0x97, 0xCB, - 0xC4, 0xBB, 0x56, 0x97, 0x09, 0xDA, 0xD4, 0x84, - 0x56, 0x45, 0x44, 0x6F, 0xA8, 0xD2, 0x89, 0xFC, - 0x59, 0x30, 0x7B, 0x80, 0x1E, 0x60, 0xCE, 0x2A, - 0x91, 0xE0, 0x6E, 0x9C, 0x22, 0xC1, 0x6E, 0x2E, - 0x59, 0xBD, 0xE3, 0x8A, 0x41, 0x6B, 0xB1, 0xB4, - 0xAC, 0x54, 0x57, 0x43, 0x8F, 0xDC, 0x5D, 0x64, - 0x45, 0x0A, 0x89, 0xEC, 0xB8, 0x32, 0xC1, 0xBB, - 0x27, 0x9D, 0xBF, 0x59, 0x33, 0x46, 0x81, 0x77, - 0x6A, 0xC0, 0x04, 0x09, 0x84, 0x6D, 0x09, 0xD6, - 0xF6, 0x87, 0x77, 0x2E, 0x34, 0x08, 0x50, 0xAB, - 0x86, 0x73, 0x38, 0x42, 0x15, 0xE1, 0x2C, 0x8D, - 0x0F, 0x53, 0x1C, 0x45, 0x1E, 0x58, 0x49, 0x3E, - 0x0E, 0xE4, 0x15, 0xAD, 0x59, 0x4D, 0xF3, 0x8C, - 0x34, 0x40, 0x8C, 0x7E, 0xD9, 0xF0, 0xC3, 0x92, - 0xF1, 0x53, 0x46, 0x04, 0xEA, 0xC3, 0xD9, 0xC1, - 0x54, 0x65, 0xA9, 0xA4, 0x66, 0x32, 0x21, 0x4B, - 0x53, 0x69, 0x90, 0xD7, 0x80, 0x78, 0xE5, 0xBD, - 0x7E, 0xAE, 0x20, 0x13, 0xFF, 0xF8, 0xFD, 0xD8, - 0xB2, 0x75, 0xC8, 0x9D, 0x97, 0xC9, 0x35, 0x3D, - 0xF3, 0xC4, 0x2A, 0x28, 0xE8, 0x14, 0xD8, 0x46, - 0x8E, 0x2B, 0x48, 0xDB, 0x09, 0x76, 0xD8, 0x8F, - 0x5E, 0xEC, 0xEF, 0xEA, 0xFB, 0x8F, 0x7F, 0x4A, - 0xF2, 0x91, 0xA7, 0x28, 0xF6, 0x24, 0x9E, 0xCF, - 0x56, 0x22, 0x33, 0x92, 0x69, 0xAA, 0x94, 0x53, - 0x29, 0xE9, 0x19, 0xF8, 0xB4, 0x41, 0xC8, 0x3D, - 0x55, 0x07, 0xF3, 0x0D, 0xF0, 0xFD, 0x2B, 0x13, - 0xFF, 0x80, 0x6F, 0x52, 0x2D, 0xAA, 0x11, 0xAF, - 0x67, 0x6A, 0x51, 0x3C, 0x14, 0x9C, 0x70, 0xF0, - 0xD6, 0xE9, 0x9A, 0x88, 0x04, 0x50, 0xA5, 0x4E, - 0x04, 0x17, 0xFE, 0x3C, 0x1E, 0x51, 0x3E, 0x9D, - 0x92, 0x0E, 0x30, 0xA8, 0xB4, 0x28, 0x91, 0x26, - 0x7A, 0x2D, 0xC5, 0x0A, 0xD8, 0x1F, 0x98, 0x04, - 0x49, 0x20, 0xC0, 0x99, 0xDF, 0x22, 0xC7, 0x39, - 0x98, 0xA2, 0x5C, 0x58, 0x1A, 0x51, 0x78, 0xC7, - 0x2B, 0x17, 0xAC, 0x87, 0x5B, 0xC6, 0x85, 0x48, - 0xA0, 0xFB, 0x0C, 0xBE, 0xE3, 0x8F, 0x05, 0x01, - 0x7B, 0x12, 0x43, 0x33, 0x43, 0xA6, 0x58, 0xF1, - 0x98, 0x0C, 0x81, 0x24, 0xEA, 0x6D, 0xD8, 0x1F - }; - static const byte kprime_1024[WC_ML_KEM_SS_SZ] = { - 0x8F, 0x33, 0x6E, 0x9C, 0x28, 0xDF, 0x34, 0x9E, - 0x03, 0x22, 0x0A, 0xF0, 0x1C, 0x42, 0x83, 0x2F, - 0xEF, 0xAB, 0x1F, 0x2A, 0x74, 0xC1, 0x6F, 0xAF, - 0x6F, 0x64, 0xAD, 0x07, 0x1C, 0x1A, 0x33, 0x94 - }; -#endif - static byte ss[WC_ML_KEM_SS_SZ]; - - key = (KyberKey*)XMALLOC(sizeof(KyberKey), NULL, DYNAMIC_TYPE_TMP_BUFFER); - ExpectNotNull(key); - if (key != NULL) { - XMEMSET(key, 0, sizeof(KyberKey)); - } - -#ifndef WOLFSSL_NO_ML_KEM_512 - ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_512, key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_KyberKey_DecodePrivateKey(key, dk_512, sizeof(dk_512)), 0); - ExpectIntEQ(wc_KyberKey_Decapsulate(key, ss, c_512, sizeof(c_512)), 0); - ExpectIntEQ(XMEMCMP(ss, kprime_512, WC_ML_KEM_SS_SZ), 0); - wc_KyberKey_Free(key); -#endif -#ifndef WOLFSSL_NO_ML_KEM_768 - ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_768, key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_KyberKey_DecodePrivateKey(key, dk_768, sizeof(dk_768)), 0); - ExpectIntEQ(wc_KyberKey_Decapsulate(key, ss, c_768, sizeof(c_768)), 0); - ExpectIntEQ(XMEMCMP(ss, kprime_768, WC_ML_KEM_SS_SZ), 0); - wc_KyberKey_Free(key); -#endif -#ifndef WOLFSSL_NO_ML_KEM_1024 - ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_1024, key, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_KyberKey_DecodePrivateKey(key, dk_1024, sizeof(dk_1024)), 0); - ExpectIntEQ(wc_KyberKey_Decapsulate(key, ss, c_1024, sizeof(c_1024)), 0); - ExpectIntEQ(XMEMCMP(ss, kprime_1024, WC_ML_KEM_SS_SZ), 0); - wc_KyberKey_Free(key); -#endif - - XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); -#endif - return EXPECT_RESULT(); -} - #if defined(HAVE_DILITHIUM) && defined(WOLFSSL_WC_DILITHIUM) && \ !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && !defined(WOLFSSL_NO_ML_DSA_44) static const byte ml_dsa_44_pub_key[] = { @@ -78958,7 +75125,10 @@ static int test_tls13_apis(void) #endif #if (!defined(NO_ECC256) || defined(HAVE_ALL_CURVES)) && ECC_MIN_KEY_SZ <= 256 "P-256:secp256r1" -#if defined(WOLFSSL_HAVE_KYBER) +#if defined(WOLFSSL_HAVE_KYBER) && !defined(WOLFSSL_KYBER_NO_MALLOC) && \ + !defined(WOLFSSL_KYBER_NO_MAKE_KEY) && \ + !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) && \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) #ifdef WOLFSSL_KYBER_ORIGINAL #ifndef WOLFSSL_NO_KYBER512 ":P256_KYBER_LEVEL1" @@ -78979,7 +75149,10 @@ static int test_tls13_apis(void) #endif #endif #endif /* !defined(NO_ECC_SECP) */ -#if defined(WOLFSSL_HAVE_KYBER) +#if defined(WOLFSSL_HAVE_KYBER) && !defined(WOLFSSL_KYBER_NO_MALLOC) && \ + !defined(WOLFSSL_KYBER_NO_MAKE_KEY) && \ + !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) && \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) #ifdef WOLFSSL_KYBER_ORIGINAL #ifndef WOLFSSL_NO_KYBER512 ":KYBER_LEVEL1" @@ -79000,7 +75173,10 @@ static int test_tls13_apis(void) #endif ""; #endif /* defined(OPENSSL_EXTRA) && defined(HAVE_ECC) */ -#if defined(WOLFSSL_HAVE_KYBER) +#if defined(WOLFSSL_HAVE_KYBER) && !defined(WOLFSSL_KYBER_NO_MALLOC) && \ + !defined(WOLFSSL_KYBER_NO_MAKE_KEY) && \ + !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) && \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) int kyberLevel; #endif @@ -79156,7 +75332,10 @@ static int test_tls13_apis(void) #endif #endif -#if defined(WOLFSSL_HAVE_KYBER) +#if defined(WOLFSSL_HAVE_KYBER) && !defined(WOLFSSL_KYBER_NO_MALLOC) && \ + !defined(WOLFSSL_KYBER_NO_MAKE_KEY) && \ + !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) && \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) #ifndef WOLFSSL_NO_ML_KEM #ifndef WOLFSSL_NO_ML_KEM_768 kyberLevel = WOLFSSL_ML_KEM_768; @@ -98266,9 +94445,9 @@ TEST_CASE testCases[] = { TEST_DECL(test_wc_Curve448PrivateKeyToDer), /* Kyber */ - TEST_DECL(test_wc_kyber_make_key_kats), - TEST_DECL(test_wc_kyber_encapsulate_kats), - TEST_DECL(test_wc_kyber_decapsulate_kats), + TEST_DECL(test_wc_mlkem_make_key_kats), + TEST_DECL(test_wc_mlkem_encapsulate_kats), + TEST_DECL(test_wc_mlkem_decapsulate_kats), /* Dilithium */ TEST_DECL(test_wc_dilithium), @@ -99371,6 +95550,32 @@ int ApiTest_RunIdx(int idx) return 0; } +/* Add test cases with part of the name to the list to run. + * + * @param [in] name Part of the name of test cases to run. + * @return 0 on success. + * @return BAD_FUNC_ARG when name is not a known test case name. + */ +int ApiTest_RunPartName(char* name) +{ + int i; + int cnt = 0; + + for (i = 0; i < TEST_CASE_CNT; i++) { + if (XSTRSTR(testCases[i].name, name) != NULL) { + cnt++; + testAll = 0; + testCases[i].run = 1; + } + } + if (cnt > 0) + return 0; + + printf("Not found a test case with: %s\n", name); + printf("Use --list to see all test case names.\n"); + return BAD_FUNC_ARG; +} + /* Add test case with name to the list to run. * * @param [in] name Name of test case to run. diff --git a/tests/api/include.am b/tests/api/include.am index 51ba3ac0c..b76d279b6 100644 --- a/tests/api/include.am +++ b/tests/api/include.am @@ -13,6 +13,7 @@ tests_unit_test_SOURCES += tests/api/test_sm3.c tests_unit_test_SOURCES += tests/api/test_ripemd.c tests_unit_test_SOURCES += tests/api/test_hash.c tests_unit_test_SOURCES += tests/api/test_ascon.c +tests_unit_test_SOURCES += tests/api/test_mlkem.c tests_unit_test_SOURCES += tests/api/test_dtls.c tests_unit_test_SOURCES += tests/api/test_ocsp.c endif @@ -29,6 +30,7 @@ EXTRA_DIST += tests/api/test_hash.h EXTRA_DIST += tests/api/test_ascon.h EXTRA_DIST += tests/api/test_ascon.h EXTRA_DIST += tests/api/test_ascon_kats.h +EXTRA_DIST += tests/api/test_mlkem.h EXTRA_DIST += tests/api/test_dtls.h EXTRA_DIST += tests/api/test_ocsp.h EXTRA_DIST += tests/api/test_ocsp_test_blobs.h diff --git a/tests/api/test_mlkem.c b/tests/api/test_mlkem.c new file mode 100644 index 000000000..1b5514407 --- /dev/null +++ b/tests/api/test_mlkem.c @@ -0,0 +1,3882 @@ +/* test_mlkem.c + * + * Copyright (C) 2006-2025 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 2 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 + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#if !defined(WOLFSSL_USER_SETTINGS) && !defined(WOLFSSL_NO_OPTIONS_H) + #include +#endif +#include + +#ifdef NO_INLINE + #include +#else + #define WOLFSSL_MISC_INCLUDED + #include +#endif + +#ifdef WOLFSSL_HAVE_KYBER + #include +#ifdef WOLFSSL_WC_KYBER + #include +#endif +#endif +#include +#include +#include +#include + +int test_wc_mlkem_make_key_kats(void) +{ + EXPECT_DECLS; +#if defined(WOLFSSL_HAVE_KYBER) && defined(WOLFSSL_WC_KYBER) && \ + !defined(WOLFSSL_NO_ML_KEM) && !defined(WOLFSSL_KYBER_NO_MAKE_KEY) + KyberKey* key; +#ifndef WOLFSSL_NO_ML_KEM_512 + static const byte seed_512[WC_ML_KEM_MAKEKEY_RAND_SZ] = { + /* d */ + 0x2C, 0xB8, 0x43, 0xA0, 0x2E, 0xF0, 0x2E, 0xE1, + 0x09, 0x30, 0x5F, 0x39, 0x11, 0x9F, 0xAB, 0xF4, + 0x9A, 0xB9, 0x0A, 0x57, 0xFF, 0xEC, 0xB3, 0xA0, + 0xE7, 0x5E, 0x17, 0x94, 0x50, 0xF5, 0x27, 0x61, + /* z */ + 0x84, 0xCC, 0x91, 0x21, 0xAE, 0x56, 0xFB, 0xF3, + 0x9E, 0x67, 0xAD, 0xBD, 0x83, 0xAD, 0x2D, 0x3E, + 0x3B, 0xB8, 0x08, 0x43, 0x64, 0x52, 0x06, 0xBD, + 0xD9, 0xF2, 0xF6, 0x29, 0xE3, 0xCC, 0x49, 0xB7 + }; + static const byte ek_512[WC_ML_KEM_512_PUBLIC_KEY_SIZE] = { + 0xA3, 0x24, 0x39, 0xF8, 0x5A, 0x3C, 0x21, 0xD2, + 0x1A, 0x71, 0xB9, 0xB9, 0x2A, 0x9B, 0x64, 0xEA, + 0x0A, 0xB8, 0x43, 0x12, 0xC7, 0x70, 0x23, 0x69, + 0x4F, 0xD6, 0x4E, 0xAA, 0xB9, 0x07, 0xA4, 0x35, + 0x39, 0xDD, 0xB2, 0x7B, 0xA0, 0xA8, 0x53, 0xCC, + 0x90, 0x69, 0xEA, 0xC8, 0x50, 0x8C, 0x65, 0x3E, + 0x60, 0x0B, 0x2A, 0xC0, 0x18, 0x38, 0x1B, 0x4B, + 0xB4, 0xA8, 0x79, 0xAC, 0xDA, 0xD3, 0x42, 0xF9, + 0x11, 0x79, 0xCA, 0x82, 0x49, 0x52, 0x5C, 0xB1, + 0x96, 0x8B, 0xBE, 0x52, 0xF7, 0x55, 0xB7, 0xF5, + 0xB4, 0x3D, 0x66, 0x63, 0xD7, 0xA3, 0xBF, 0x0F, + 0x33, 0x57, 0xD8, 0xA2, 0x1D, 0x15, 0xB5, 0x2D, + 0xB3, 0x81, 0x8E, 0xCE, 0x5B, 0x40, 0x2A, 0x60, + 0xC9, 0x93, 0xE7, 0xCF, 0x43, 0x64, 0x87, 0xB8, + 0xD2, 0xAE, 0x91, 0xE6, 0xC5, 0xB8, 0x82, 0x75, + 0xE7, 0x58, 0x24, 0xB0, 0x00, 0x7E, 0xF3, 0x12, + 0x3C, 0x0A, 0xB5, 0x1B, 0x5C, 0xC6, 0x1B, 0x9B, + 0x22, 0x38, 0x0D, 0xE6, 0x6C, 0x5B, 0x20, 0xB0, + 0x60, 0xCB, 0xB9, 0x86, 0xF8, 0x12, 0x3D, 0x94, + 0x06, 0x00, 0x49, 0xCD, 0xF8, 0x03, 0x68, 0x73, + 0xA7, 0xBE, 0x10, 0x94, 0x44, 0xA0, 0xA1, 0xCD, + 0x87, 0xA4, 0x8C, 0xAE, 0x54, 0x19, 0x24, 0x84, + 0xAF, 0x84, 0x44, 0x29, 0xC1, 0xC5, 0x8C, 0x29, + 0xAC, 0x62, 0x4C, 0xD5, 0x04, 0xF1, 0xC4, 0x4F, + 0x1E, 0x13, 0x47, 0x82, 0x2B, 0x6F, 0x22, 0x13, + 0x23, 0x85, 0x9A, 0x7F, 0x6F, 0x75, 0x4B, 0xFE, + 0x71, 0x0B, 0xDA, 0x60, 0x27, 0x62, 0x40, 0xA4, + 0xFF, 0x2A, 0x53, 0x50, 0x70, 0x37, 0x86, 0xF5, + 0x67, 0x1F, 0x44, 0x9F, 0x20, 0xC2, 0xA9, 0x5A, + 0xE7, 0xC2, 0x90, 0x3A, 0x42, 0xCB, 0x3B, 0x30, + 0x3F, 0xF4, 0xC4, 0x27, 0xC0, 0x8B, 0x11, 0xB4, + 0xCD, 0x31, 0xC4, 0x18, 0xC6, 0xD1, 0x8D, 0x08, + 0x61, 0x87, 0x3B, 0xFA, 0x03, 0x32, 0xF1, 0x12, + 0x71, 0x55, 0x2E, 0xD7, 0xC0, 0x35, 0xF0, 0xE4, + 0xBC, 0x42, 0x8C, 0x43, 0x72, 0x0B, 0x39, 0xA6, + 0x51, 0x66, 0xBA, 0x9C, 0x2D, 0x3D, 0x77, 0x0E, + 0x13, 0x03, 0x60, 0xCC, 0x23, 0x84, 0xE8, 0x30, + 0x95, 0xB1, 0xA1, 0x59, 0x49, 0x55, 0x33, 0xF1, + 0x16, 0xC7, 0xB5, 0x58, 0xB6, 0x50, 0xDB, 0x04, + 0xD5, 0xA2, 0x6E, 0xAA, 0xA0, 0x8C, 0x3E, 0xE5, + 0x7D, 0xE4, 0x5A, 0x7F, 0x88, 0xC6, 0xA3, 0xCE, + 0xB2, 0x4D, 0xC5, 0x39, 0x7B, 0x88, 0xC3, 0xCE, + 0xF0, 0x03, 0x31, 0x9B, 0xB0, 0x23, 0x3F, 0xD6, + 0x92, 0xFD, 0xA1, 0x52, 0x44, 0x75, 0xB3, 0x51, + 0xF3, 0xC7, 0x82, 0x18, 0x2D, 0xEC, 0xF5, 0x90, + 0xB7, 0x72, 0x3B, 0xE4, 0x00, 0xBE, 0x14, 0x80, + 0x9C, 0x44, 0x32, 0x99, 0x63, 0xFC, 0x46, 0x95, + 0x92, 0x11, 0xD6, 0xA6, 0x23, 0x33, 0x95, 0x37, + 0x84, 0x8C, 0x25, 0x16, 0x69, 0x94, 0x1D, 0x90, + 0xB1, 0x30, 0x25, 0x8A, 0xDF, 0x55, 0xA7, 0x20, + 0xA7, 0x24, 0xE8, 0xB6, 0xA6, 0xCA, 0xE3, 0xC2, + 0x26, 0x4B, 0x16, 0x24, 0xCC, 0xBE, 0x7B, 0x45, + 0x6B, 0x30, 0xC8, 0xC7, 0x39, 0x32, 0x94, 0xCA, + 0x51, 0x80, 0xBC, 0x83, 0x7D, 0xD2, 0xE4, 0x5D, + 0xBD, 0x59, 0xB6, 0xE1, 0x7B, 0x24, 0xFE, 0x93, + 0x05, 0x2E, 0xB7, 0xC4, 0x3B, 0x27, 0xAC, 0x3D, + 0xC2, 0x49, 0xCA, 0x0C, 0xBC, 0xA4, 0xFB, 0x58, + 0x97, 0xC0, 0xB7, 0x44, 0x08, 0x8A, 0x8A, 0x07, + 0x79, 0xD3, 0x22, 0x33, 0x82, 0x6A, 0x01, 0xDD, + 0x64, 0x89, 0x95, 0x2A, 0x48, 0x25, 0xE5, 0x35, + 0x8A, 0x70, 0x0B, 0xE0, 0xE1, 0x79, 0xAC, 0x19, + 0x77, 0x10, 0xD8, 0x3E, 0xCC, 0x85, 0x3E, 0x52, + 0x69, 0x5E, 0x9B, 0xF8, 0x7B, 0xB1, 0xF6, 0xCB, + 0xD0, 0x5B, 0x02, 0xD4, 0xE6, 0x79, 0xE3, 0xB8, + 0x8D, 0xD4, 0x83, 0xB0, 0x74, 0x9B, 0x11, 0xBD, + 0x37, 0xB3, 0x83, 0xDC, 0xCA, 0x71, 0xF9, 0x09, + 0x18, 0x34, 0xA1, 0x69, 0x55, 0x02, 0xC4, 0xB9, + 0x5F, 0xC9, 0x11, 0x8C, 0x1C, 0xFC, 0x34, 0xC8, + 0x4C, 0x22, 0x65, 0xBB, 0xBC, 0x56, 0x3C, 0x28, + 0x26, 0x66, 0xB6, 0x0A, 0xE5, 0xC7, 0xF3, 0x85, + 0x1D, 0x25, 0xEC, 0xBB, 0x50, 0x21, 0xCC, 0x38, + 0xCB, 0x73, 0xEB, 0x6A, 0x34, 0x11, 0xB1, 0xC2, + 0x90, 0x46, 0xCA, 0x66, 0x54, 0x06, 0x67, 0xD1, + 0x36, 0x95, 0x44, 0x60, 0xC6, 0xFC, 0xBC, 0x4B, + 0xC7, 0xC0, 0x49, 0xBB, 0x04, 0x7F, 0xA6, 0x7A, + 0x63, 0xB3, 0xCC, 0x11, 0x11, 0xC1, 0xD8, 0xAC, + 0x27, 0xE8, 0x05, 0x8B, 0xCC, 0xA4, 0xA1, 0x54, + 0x55, 0x85, 0x8A, 0x58, 0x35, 0x8F, 0x7A, 0x61, + 0x02, 0x0B, 0xC9, 0xC4, 0xC1, 0x7F, 0x8B, 0x95, + 0xC2, 0x68, 0xCC, 0xB4, 0x04, 0xB9, 0xAA, 0xB4, + 0xA2, 0x72, 0xA2, 0x1A, 0x70, 0xDA, 0xF6, 0xB6, + 0xF1, 0x51, 0x21, 0xEE, 0x01, 0xC1, 0x56, 0xA3, + 0x54, 0xAA, 0x17, 0x08, 0x7E, 0x07, 0x70, 0x2E, + 0xAB, 0x38, 0xB3, 0x24, 0x1F, 0xDB, 0x55, 0x3F, + 0x65, 0x73, 0x39, 0xD5, 0xE2, 0x9D, 0xC5, 0xD9, + 0x1B, 0x7A, 0x5A, 0x82, 0x8E, 0xE9, 0x59, 0xFE, + 0xBB, 0x90, 0xB0, 0x72, 0x29, 0xF6, 0xE4, 0x9D, + 0x23, 0xC3, 0xA1, 0x90, 0x29, 0x70, 0x42, 0xFB, + 0x43, 0x98, 0x69, 0x55, 0xB6, 0x9C, 0x28, 0xE1, + 0x01, 0x6F, 0x77, 0xA5, 0x8B, 0x43, 0x15, 0x14, + 0xD2, 0x1B, 0x88, 0x88, 0x99, 0xC3, 0x60, 0x82, + 0x76, 0x08, 0x1B, 0x75, 0xF5, 0x68, 0x09, 0x7C, + 0xDC, 0x17, 0x48, 0xF3, 0x23, 0x07, 0x88, 0x58, + 0x15, 0xF3, 0xAE, 0xC9, 0x65, 0x18, 0x19, 0xAA, + 0x68, 0x73, 0xD1, 0xA4, 0xEB, 0x83, 0xB1, 0x95, + 0x38, 0x43, 0xB9, 0x34, 0x22, 0x51, 0x94, 0x83, + 0xFE, 0xF0, 0x05, 0x9D, 0x36, 0xBB, 0x2D, 0xB1, + 0xF3, 0xD4, 0x68, 0xFB, 0x06, 0x8C, 0x86, 0xE8, + 0x97, 0x37, 0x33, 0xC3, 0x98, 0xEA, 0xF0, 0x0E, + 0x17, 0x02, 0xC6, 0x73, 0x4A, 0xD8, 0xEB, 0x3B + }; + static const byte dk_512[WC_ML_KEM_512_PRIVATE_KEY_SIZE] = { + 0x7F, 0xE4, 0x20, 0x6F, 0x26, 0xBE, 0xDB, 0x64, + 0xC1, 0xED, 0x00, 0x09, 0x61, 0x52, 0x45, 0xDC, + 0x98, 0x48, 0x3F, 0x66, 0x3A, 0xCC, 0x61, 0x7E, + 0x65, 0x89, 0x8D, 0x59, 0x6A, 0x88, 0x36, 0xC4, + 0x9F, 0xBD, 0x3B, 0x4A, 0x84, 0x97, 0x59, 0xAA, + 0x15, 0x46, 0xBD, 0xA8, 0x35, 0xCA, 0xF1, 0x75, + 0x64, 0x2C, 0x28, 0x28, 0x08, 0x92, 0xA7, 0x87, + 0x8C, 0xC3, 0x18, 0xBC, 0xC7, 0x5B, 0x83, 0x4C, + 0xB2, 0x9F, 0xDF, 0x53, 0x60, 0xD7, 0xF9, 0x82, + 0xA5, 0x2C, 0x88, 0xAE, 0x91, 0x4D, 0xBF, 0x02, + 0xB5, 0x8B, 0xEB, 0x8B, 0xA8, 0x87, 0xAE, 0x8F, + 0xAB, 0x5E, 0xB7, 0x87, 0x31, 0xC6, 0x75, 0x78, + 0x05, 0x47, 0x1E, 0xBC, 0xEC, 0x2E, 0x38, 0xDB, + 0x1F, 0x4B, 0x83, 0x10, 0xD2, 0x88, 0x92, 0x0D, + 0x8A, 0x49, 0x27, 0x95, 0xA3, 0x90, 0xA7, 0x4B, + 0xCD, 0x55, 0xCD, 0x85, 0x57, 0xB4, 0xDA, 0xAB, + 0xA8, 0x2C, 0x28, 0xCB, 0x3F, 0x15, 0x2C, 0x52, + 0x31, 0x19, 0x61, 0x93, 0xA6, 0x6A, 0x8C, 0xCF, + 0x34, 0xB8, 0x0E, 0x1F, 0x69, 0x42, 0xC3, 0x2B, + 0xCF, 0xF9, 0x6A, 0x6E, 0x3C, 0xF3, 0x93, 0x9B, + 0x7B, 0x94, 0x24, 0x98, 0xCC, 0x5E, 0x4C, 0xB8, + 0xE8, 0x46, 0x8E, 0x70, 0x27, 0x59, 0x85, 0x2A, + 0xA2, 0x29, 0xC0, 0x25, 0x7F, 0x02, 0x98, 0x20, + 0x97, 0x33, 0x86, 0x07, 0xC0, 0xF0, 0xF4, 0x54, + 0x46, 0xFA, 0xB4, 0x26, 0x79, 0x93, 0xB8, 0xA5, + 0x90, 0x8C, 0xAB, 0x9C, 0x46, 0x78, 0x01, 0x34, + 0x80, 0x4A, 0xE1, 0x88, 0x15, 0xB1, 0x02, 0x05, + 0x27, 0xA2, 0x22, 0xEC, 0x4B, 0x39, 0xA3, 0x19, + 0x4E, 0x66, 0x17, 0x37, 0x79, 0x17, 0x14, 0x12, + 0x26, 0x62, 0xD8, 0xB9, 0x76, 0x9F, 0x6C, 0x67, + 0xDE, 0x62, 0x5C, 0x0D, 0x48, 0x3C, 0x3D, 0x42, + 0x0F, 0xF1, 0xBB, 0x88, 0x9A, 0x72, 0x7E, 0x75, + 0x62, 0x81, 0x51, 0x3A, 0x70, 0x04, 0x76, 0x48, + 0xD2, 0x9C, 0x0C, 0x30, 0xF9, 0xBE, 0x52, 0xEC, + 0x0D, 0xEB, 0x97, 0x7C, 0xF0, 0xF3, 0x4F, 0xC2, + 0x07, 0x84, 0x83, 0x45, 0x69, 0x64, 0x74, 0x34, + 0x10, 0x63, 0x8C, 0x57, 0xB5, 0x53, 0x95, 0x77, + 0xBF, 0x85, 0x66, 0x90, 0x78, 0xC3, 0x56, 0xB3, + 0x46, 0x2E, 0x9F, 0xA5, 0x80, 0x7D, 0x49, 0x59, + 0x1A, 0xFA, 0x41, 0xC1, 0x96, 0x9F, 0x65, 0xE3, + 0x40, 0x5C, 0xB6, 0x4D, 0xDF, 0x16, 0x3F, 0x26, + 0x73, 0x4C, 0xE3, 0x48, 0xB9, 0xCF, 0x45, 0x67, + 0xA3, 0x3A, 0x59, 0x69, 0xEB, 0x32, 0x6C, 0xFB, + 0x5A, 0xDC, 0x69, 0x5D, 0xCA, 0x0C, 0x8B, 0x2A, + 0x7B, 0x1F, 0x4F, 0x40, 0x4C, 0xC7, 0xA0, 0x98, + 0x1E, 0x2C, 0xC2, 0x4C, 0x1C, 0x23, 0xD1, 0x6A, + 0xA9, 0xB4, 0x39, 0x24, 0x15, 0xE2, 0x6C, 0x22, + 0xF4, 0xA9, 0x34, 0xD7, 0x94, 0xC1, 0xFB, 0x4E, + 0x5A, 0x67, 0x05, 0x11, 0x23, 0xCC, 0xD1, 0x53, + 0x76, 0x4D, 0xEC, 0x99, 0xD5, 0x53, 0x52, 0x90, + 0x53, 0xC3, 0xDA, 0x55, 0x0B, 0xCE, 0xA3, 0xAC, + 0x54, 0x13, 0x6A, 0x26, 0xA6, 0x76, 0xD2, 0xBA, + 0x84, 0x21, 0x06, 0x70, 0x68, 0xC6, 0x38, 0x1C, + 0x2A, 0x62, 0xA7, 0x27, 0xC9, 0x33, 0x70, 0x2E, + 0xE5, 0x80, 0x4A, 0x31, 0xCA, 0x86, 0x5A, 0x45, + 0x58, 0x8F, 0xB7, 0x4D, 0xE7, 0xE2, 0x22, 0x3D, + 0x88, 0xC0, 0x60, 0x8A, 0x16, 0xBF, 0xEC, 0x4F, + 0xAD, 0x67, 0x52, 0xDB, 0x56, 0xB4, 0x8B, 0x88, + 0x72, 0xBF, 0x26, 0xBA, 0x2F, 0xFA, 0x0C, 0xED, + 0xE5, 0x34, 0x3B, 0xE8, 0x14, 0x36, 0x89, 0x26, + 0x5E, 0x06, 0x5F, 0x41, 0xA6, 0x92, 0x5B, 0x86, + 0xC8, 0x92, 0xE6, 0x2E, 0xB0, 0x77, 0x27, 0x34, + 0xF5, 0xA3, 0x57, 0xC7, 0x5C, 0xA1, 0xAC, 0x6D, + 0xF7, 0x8A, 0xB1, 0xB8, 0x88, 0x5A, 0xD0, 0x81, + 0x96, 0x15, 0x37, 0x6D, 0x33, 0xEB, 0xB9, 0x8F, + 0x87, 0x33, 0xA6, 0x75, 0x58, 0x03, 0xD9, 0x77, + 0xBF, 0x51, 0xC1, 0x27, 0x40, 0x42, 0x4B, 0x2B, + 0x49, 0xC2, 0x83, 0x82, 0xA6, 0x91, 0x7C, 0xBF, + 0xA0, 0x34, 0xC3, 0xF1, 0x26, 0xA3, 0x8C, 0x21, + 0x6C, 0x03, 0xC3, 0x57, 0x70, 0xAD, 0x48, 0x1B, + 0x90, 0x84, 0xB5, 0x58, 0x8D, 0xA6, 0x5F, 0xF1, + 0x18, 0xA7, 0x4F, 0x93, 0x2C, 0x7E, 0x53, 0x7A, + 0xBE, 0x58, 0x63, 0xFB, 0x29, 0xA1, 0x0C, 0x09, + 0x70, 0x1B, 0x44, 0x1F, 0x83, 0x99, 0xC1, 0xF8, + 0xA6, 0x37, 0x82, 0x5A, 0xCE, 0xA3, 0xE9, 0x31, + 0x80, 0x57, 0x4F, 0xDE, 0xB8, 0x80, 0x76, 0x66, + 0x1A, 0xB4, 0x69, 0x51, 0x71, 0x6A, 0x50, 0x01, + 0x84, 0xA0, 0x40, 0x55, 0x72, 0x66, 0x59, 0x8C, + 0xAF, 0x76, 0x10, 0x5E, 0x1C, 0x18, 0x70, 0xB4, + 0x39, 0x69, 0xC3, 0xBC, 0xC1, 0xA0, 0x49, 0x27, + 0x63, 0x80, 0x17, 0x49, 0x8B, 0xB6, 0x2C, 0xAF, + 0xD3, 0xA6, 0xB0, 0x82, 0xB7, 0xBF, 0x7A, 0x23, + 0x45, 0x0E, 0x19, 0x17, 0x99, 0x61, 0x9B, 0x92, + 0x51, 0x12, 0xD0, 0x72, 0x02, 0x5C, 0xA8, 0x88, + 0x54, 0x8C, 0x79, 0x1A, 0xA4, 0x22, 0x51, 0x50, + 0x4D, 0x5D, 0x1C, 0x1C, 0xDD, 0xB2, 0x13, 0x30, + 0x3B, 0x04, 0x9E, 0x73, 0x46, 0xE8, 0xD8, 0x3A, + 0xD5, 0x87, 0x83, 0x6F, 0x35, 0x28, 0x4E, 0x10, + 0x97, 0x27, 0xE6, 0x6B, 0xBC, 0xC9, 0x52, 0x1F, + 0xE0, 0xB1, 0x91, 0x63, 0x00, 0x47, 0xD1, 0x58, + 0xF7, 0x56, 0x40, 0xFF, 0xEB, 0x54, 0x56, 0x07, + 0x27, 0x40, 0x02, 0x1A, 0xFD, 0x15, 0xA4, 0x54, + 0x69, 0xC5, 0x83, 0x82, 0x9D, 0xAA, 0xC8, 0xA7, + 0xDE, 0xB0, 0x5B, 0x24, 0xF0, 0x56, 0x7E, 0x43, + 0x17, 0xB3, 0xE3, 0xB3, 0x33, 0x89, 0xB5, 0xC5, + 0xF8, 0xB0, 0x4B, 0x09, 0x9F, 0xB4, 0xD1, 0x03, + 0xA3, 0x24, 0x39, 0xF8, 0x5A, 0x3C, 0x21, 0xD2, + 0x1A, 0x71, 0xB9, 0xB9, 0x2A, 0x9B, 0x64, 0xEA, + 0x0A, 0xB8, 0x43, 0x12, 0xC7, 0x70, 0x23, 0x69, + 0x4F, 0xD6, 0x4E, 0xAA, 0xB9, 0x07, 0xA4, 0x35, + 0x39, 0xDD, 0xB2, 0x7B, 0xA0, 0xA8, 0x53, 0xCC, + 0x90, 0x69, 0xEA, 0xC8, 0x50, 0x8C, 0x65, 0x3E, + 0x60, 0x0B, 0x2A, 0xC0, 0x18, 0x38, 0x1B, 0x4B, + 0xB4, 0xA8, 0x79, 0xAC, 0xDA, 0xD3, 0x42, 0xF9, + 0x11, 0x79, 0xCA, 0x82, 0x49, 0x52, 0x5C, 0xB1, + 0x96, 0x8B, 0xBE, 0x52, 0xF7, 0x55, 0xB7, 0xF5, + 0xB4, 0x3D, 0x66, 0x63, 0xD7, 0xA3, 0xBF, 0x0F, + 0x33, 0x57, 0xD8, 0xA2, 0x1D, 0x15, 0xB5, 0x2D, + 0xB3, 0x81, 0x8E, 0xCE, 0x5B, 0x40, 0x2A, 0x60, + 0xC9, 0x93, 0xE7, 0xCF, 0x43, 0x64, 0x87, 0xB8, + 0xD2, 0xAE, 0x91, 0xE6, 0xC5, 0xB8, 0x82, 0x75, + 0xE7, 0x58, 0x24, 0xB0, 0x00, 0x7E, 0xF3, 0x12, + 0x3C, 0x0A, 0xB5, 0x1B, 0x5C, 0xC6, 0x1B, 0x9B, + 0x22, 0x38, 0x0D, 0xE6, 0x6C, 0x5B, 0x20, 0xB0, + 0x60, 0xCB, 0xB9, 0x86, 0xF8, 0x12, 0x3D, 0x94, + 0x06, 0x00, 0x49, 0xCD, 0xF8, 0x03, 0x68, 0x73, + 0xA7, 0xBE, 0x10, 0x94, 0x44, 0xA0, 0xA1, 0xCD, + 0x87, 0xA4, 0x8C, 0xAE, 0x54, 0x19, 0x24, 0x84, + 0xAF, 0x84, 0x44, 0x29, 0xC1, 0xC5, 0x8C, 0x29, + 0xAC, 0x62, 0x4C, 0xD5, 0x04, 0xF1, 0xC4, 0x4F, + 0x1E, 0x13, 0x47, 0x82, 0x2B, 0x6F, 0x22, 0x13, + 0x23, 0x85, 0x9A, 0x7F, 0x6F, 0x75, 0x4B, 0xFE, + 0x71, 0x0B, 0xDA, 0x60, 0x27, 0x62, 0x40, 0xA4, + 0xFF, 0x2A, 0x53, 0x50, 0x70, 0x37, 0x86, 0xF5, + 0x67, 0x1F, 0x44, 0x9F, 0x20, 0xC2, 0xA9, 0x5A, + 0xE7, 0xC2, 0x90, 0x3A, 0x42, 0xCB, 0x3B, 0x30, + 0x3F, 0xF4, 0xC4, 0x27, 0xC0, 0x8B, 0x11, 0xB4, + 0xCD, 0x31, 0xC4, 0x18, 0xC6, 0xD1, 0x8D, 0x08, + 0x61, 0x87, 0x3B, 0xFA, 0x03, 0x32, 0xF1, 0x12, + 0x71, 0x55, 0x2E, 0xD7, 0xC0, 0x35, 0xF0, 0xE4, + 0xBC, 0x42, 0x8C, 0x43, 0x72, 0x0B, 0x39, 0xA6, + 0x51, 0x66, 0xBA, 0x9C, 0x2D, 0x3D, 0x77, 0x0E, + 0x13, 0x03, 0x60, 0xCC, 0x23, 0x84, 0xE8, 0x30, + 0x95, 0xB1, 0xA1, 0x59, 0x49, 0x55, 0x33, 0xF1, + 0x16, 0xC7, 0xB5, 0x58, 0xB6, 0x50, 0xDB, 0x04, + 0xD5, 0xA2, 0x6E, 0xAA, 0xA0, 0x8C, 0x3E, 0xE5, + 0x7D, 0xE4, 0x5A, 0x7F, 0x88, 0xC6, 0xA3, 0xCE, + 0xB2, 0x4D, 0xC5, 0x39, 0x7B, 0x88, 0xC3, 0xCE, + 0xF0, 0x03, 0x31, 0x9B, 0xB0, 0x23, 0x3F, 0xD6, + 0x92, 0xFD, 0xA1, 0x52, 0x44, 0x75, 0xB3, 0x51, + 0xF3, 0xC7, 0x82, 0x18, 0x2D, 0xEC, 0xF5, 0x90, + 0xB7, 0x72, 0x3B, 0xE4, 0x00, 0xBE, 0x14, 0x80, + 0x9C, 0x44, 0x32, 0x99, 0x63, 0xFC, 0x46, 0x95, + 0x92, 0x11, 0xD6, 0xA6, 0x23, 0x33, 0x95, 0x37, + 0x84, 0x8C, 0x25, 0x16, 0x69, 0x94, 0x1D, 0x90, + 0xB1, 0x30, 0x25, 0x8A, 0xDF, 0x55, 0xA7, 0x20, + 0xA7, 0x24, 0xE8, 0xB6, 0xA6, 0xCA, 0xE3, 0xC2, + 0x26, 0x4B, 0x16, 0x24, 0xCC, 0xBE, 0x7B, 0x45, + 0x6B, 0x30, 0xC8, 0xC7, 0x39, 0x32, 0x94, 0xCA, + 0x51, 0x80, 0xBC, 0x83, 0x7D, 0xD2, 0xE4, 0x5D, + 0xBD, 0x59, 0xB6, 0xE1, 0x7B, 0x24, 0xFE, 0x93, + 0x05, 0x2E, 0xB7, 0xC4, 0x3B, 0x27, 0xAC, 0x3D, + 0xC2, 0x49, 0xCA, 0x0C, 0xBC, 0xA4, 0xFB, 0x58, + 0x97, 0xC0, 0xB7, 0x44, 0x08, 0x8A, 0x8A, 0x07, + 0x79, 0xD3, 0x22, 0x33, 0x82, 0x6A, 0x01, 0xDD, + 0x64, 0x89, 0x95, 0x2A, 0x48, 0x25, 0xE5, 0x35, + 0x8A, 0x70, 0x0B, 0xE0, 0xE1, 0x79, 0xAC, 0x19, + 0x77, 0x10, 0xD8, 0x3E, 0xCC, 0x85, 0x3E, 0x52, + 0x69, 0x5E, 0x9B, 0xF8, 0x7B, 0xB1, 0xF6, 0xCB, + 0xD0, 0x5B, 0x02, 0xD4, 0xE6, 0x79, 0xE3, 0xB8, + 0x8D, 0xD4, 0x83, 0xB0, 0x74, 0x9B, 0x11, 0xBD, + 0x37, 0xB3, 0x83, 0xDC, 0xCA, 0x71, 0xF9, 0x09, + 0x18, 0x34, 0xA1, 0x69, 0x55, 0x02, 0xC4, 0xB9, + 0x5F, 0xC9, 0x11, 0x8C, 0x1C, 0xFC, 0x34, 0xC8, + 0x4C, 0x22, 0x65, 0xBB, 0xBC, 0x56, 0x3C, 0x28, + 0x26, 0x66, 0xB6, 0x0A, 0xE5, 0xC7, 0xF3, 0x85, + 0x1D, 0x25, 0xEC, 0xBB, 0x50, 0x21, 0xCC, 0x38, + 0xCB, 0x73, 0xEB, 0x6A, 0x34, 0x11, 0xB1, 0xC2, + 0x90, 0x46, 0xCA, 0x66, 0x54, 0x06, 0x67, 0xD1, + 0x36, 0x95, 0x44, 0x60, 0xC6, 0xFC, 0xBC, 0x4B, + 0xC7, 0xC0, 0x49, 0xBB, 0x04, 0x7F, 0xA6, 0x7A, + 0x63, 0xB3, 0xCC, 0x11, 0x11, 0xC1, 0xD8, 0xAC, + 0x27, 0xE8, 0x05, 0x8B, 0xCC, 0xA4, 0xA1, 0x54, + 0x55, 0x85, 0x8A, 0x58, 0x35, 0x8F, 0x7A, 0x61, + 0x02, 0x0B, 0xC9, 0xC4, 0xC1, 0x7F, 0x8B, 0x95, + 0xC2, 0x68, 0xCC, 0xB4, 0x04, 0xB9, 0xAA, 0xB4, + 0xA2, 0x72, 0xA2, 0x1A, 0x70, 0xDA, 0xF6, 0xB6, + 0xF1, 0x51, 0x21, 0xEE, 0x01, 0xC1, 0x56, 0xA3, + 0x54, 0xAA, 0x17, 0x08, 0x7E, 0x07, 0x70, 0x2E, + 0xAB, 0x38, 0xB3, 0x24, 0x1F, 0xDB, 0x55, 0x3F, + 0x65, 0x73, 0x39, 0xD5, 0xE2, 0x9D, 0xC5, 0xD9, + 0x1B, 0x7A, 0x5A, 0x82, 0x8E, 0xE9, 0x59, 0xFE, + 0xBB, 0x90, 0xB0, 0x72, 0x29, 0xF6, 0xE4, 0x9D, + 0x23, 0xC3, 0xA1, 0x90, 0x29, 0x70, 0x42, 0xFB, + 0x43, 0x98, 0x69, 0x55, 0xB6, 0x9C, 0x28, 0xE1, + 0x01, 0x6F, 0x77, 0xA5, 0x8B, 0x43, 0x15, 0x14, + 0xD2, 0x1B, 0x88, 0x88, 0x99, 0xC3, 0x60, 0x82, + 0x76, 0x08, 0x1B, 0x75, 0xF5, 0x68, 0x09, 0x7C, + 0xDC, 0x17, 0x48, 0xF3, 0x23, 0x07, 0x88, 0x58, + 0x15, 0xF3, 0xAE, 0xC9, 0x65, 0x18, 0x19, 0xAA, + 0x68, 0x73, 0xD1, 0xA4, 0xEB, 0x83, 0xB1, 0x95, + 0x38, 0x43, 0xB9, 0x34, 0x22, 0x51, 0x94, 0x83, + 0xFE, 0xF0, 0x05, 0x9D, 0x36, 0xBB, 0x2D, 0xB1, + 0xF3, 0xD4, 0x68, 0xFB, 0x06, 0x8C, 0x86, 0xE8, + 0x97, 0x37, 0x33, 0xC3, 0x98, 0xEA, 0xF0, 0x0E, + 0x17, 0x02, 0xC6, 0x73, 0x4A, 0xD8, 0xEB, 0x3B, + 0x62, 0x01, 0x30, 0xD6, 0xC2, 0xB8, 0xC9, 0x04, + 0xA3, 0xBB, 0x93, 0x07, 0xBE, 0x51, 0x03, 0xF8, + 0xD8, 0x14, 0x50, 0x5F, 0xB6, 0xA6, 0x0A, 0xF7, + 0x93, 0x7E, 0xA6, 0xCA, 0xA1, 0x17, 0x31, 0x5E, + 0x84, 0xCC, 0x91, 0x21, 0xAE, 0x56, 0xFB, 0xF3, + 0x9E, 0x67, 0xAD, 0xBD, 0x83, 0xAD, 0x2D, 0x3E, + 0x3B, 0xB8, 0x08, 0x43, 0x64, 0x52, 0x06, 0xBD, + 0xD9, 0xF2, 0xF6, 0x29, 0xE3, 0xCC, 0x49, 0xB7 + }; +#endif +#ifndef WOLFSSL_NO_ML_KEM_768 + static const byte seed_768[WC_ML_KEM_MAKEKEY_RAND_SZ] = { + /* d */ + 0xE3, 0x4A, 0x70, 0x1C, 0x4C, 0x87, 0x58, 0x2F, + 0x42, 0x26, 0x4E, 0xE4, 0x22, 0xD3, 0xC6, 0x84, + 0xD9, 0x76, 0x11, 0xF2, 0x52, 0x3E, 0xFE, 0x0C, + 0x99, 0x8A, 0xF0, 0x50, 0x56, 0xD6, 0x93, 0xDC, + /* z */ + 0xA8, 0x57, 0x68, 0xF3, 0x48, 0x6B, 0xD3, 0x2A, + 0x01, 0xBF, 0x9A, 0x8F, 0x21, 0xEA, 0x93, 0x8E, + 0x64, 0x8E, 0xAE, 0x4E, 0x54, 0x48, 0xC3, 0x4C, + 0x3E, 0xB8, 0x88, 0x20, 0xB1, 0x59, 0xEE, 0xDD + }; + static const byte ek_768[WC_ML_KEM_768_PUBLIC_KEY_SIZE] = { + 0x6D, 0x14, 0xA0, 0x71, 0xF7, 0xCC, 0x45, 0x25, + 0x58, 0xD5, 0xE7, 0x1A, 0x7B, 0x08, 0x70, 0x62, + 0xEC, 0xB1, 0x38, 0x68, 0x44, 0x58, 0x82, 0x46, + 0x12, 0x64, 0x02, 0xB1, 0xFA, 0x16, 0x37, 0x73, + 0x3C, 0xD5, 0xF6, 0x0C, 0xC8, 0x4B, 0xCB, 0x64, + 0x6A, 0x78, 0x92, 0x61, 0x4D, 0x7C, 0x51, 0xB1, + 0xC7, 0xF1, 0xA2, 0x79, 0x91, 0x32, 0xF1, 0x34, + 0x27, 0xDC, 0x48, 0x21, 0x58, 0xDA, 0x25, 0x44, + 0x70, 0xA5, 0x9E, 0x00, 0xA4, 0xE4, 0x96, 0x86, + 0xFD, 0xC0, 0x77, 0x55, 0x93, 0x67, 0x27, 0x0C, + 0x21, 0x53, 0xF1, 0x10, 0x07, 0x59, 0x2C, 0x9C, + 0x43, 0x10, 0xCF, 0x8A, 0x12, 0xC6, 0xA8, 0x71, + 0x3B, 0xD6, 0xBB, 0x51, 0xF3, 0x12, 0x4F, 0x98, + 0x9B, 0xA0, 0xD5, 0x40, 0x73, 0xCC, 0x24, 0x2E, + 0x09, 0x68, 0x78, 0x0B, 0x87, 0x5A, 0x86, 0x9E, + 0xFB, 0x85, 0x15, 0x86, 0xB9, 0xA8, 0x68, 0xA3, + 0x84, 0xB9, 0xE6, 0x82, 0x1B, 0x20, 0x1B, 0x93, + 0x2C, 0x45, 0x53, 0x69, 0xA7, 0x39, 0xEC, 0x22, + 0x56, 0x9C, 0x97, 0x7C, 0x21, 0x2B, 0x38, 0x18, + 0x71, 0x81, 0x36, 0x56, 0xAF, 0x5B, 0x56, 0x7E, + 0xF8, 0x93, 0xB5, 0x84, 0x62, 0x4C, 0x86, 0x3A, + 0x25, 0x90, 0x00, 0xF1, 0x7B, 0x25, 0x4B, 0x98, + 0xB1, 0x85, 0x09, 0x7C, 0x50, 0xEB, 0xB6, 0x8B, + 0x24, 0x43, 0x42, 0xE0, 0x5D, 0x4D, 0xE5, 0x20, + 0x12, 0x5B, 0x8E, 0x10, 0x33, 0xB1, 0x43, 0x60, + 0x93, 0xAC, 0xE7, 0xCE, 0x8E, 0x71, 0xB4, 0x58, + 0xD5, 0x25, 0x67, 0x33, 0x63, 0x04, 0x5A, 0x3B, + 0x3E, 0xEA, 0x94, 0x55, 0x42, 0x8A, 0x39, 0x87, + 0x05, 0xA4, 0x23, 0x27, 0xAD, 0xB3, 0x77, 0x4B, + 0x70, 0x57, 0xF4, 0x2B, 0x01, 0x7E, 0xC0, 0x73, + 0x9A, 0x98, 0x3F, 0x19, 0xE8, 0x21, 0x4D, 0x09, + 0x19, 0x5F, 0xA2, 0x4D, 0x2D, 0x57, 0x1D, 0xB7, + 0x3C, 0x19, 0xA6, 0xF8, 0x46, 0x0E, 0x50, 0x83, + 0x0D, 0x41, 0x5F, 0x62, 0x7B, 0x88, 0xE9, 0x4A, + 0x7B, 0x15, 0x37, 0x91, 0xA0, 0xC0, 0xC7, 0xE9, + 0x48, 0x4C, 0x74, 0xD5, 0x3C, 0x71, 0x48, 0x89, + 0xF0, 0xE3, 0x21, 0xB6, 0x66, 0x0A, 0x53, 0x2A, + 0x5B, 0xC0, 0xE5, 0x57, 0xFB, 0xCA, 0x35, 0xE2, + 0x9B, 0xC6, 0x11, 0x20, 0x0E, 0xD3, 0xC6, 0x33, + 0x07, 0x7A, 0x4D, 0x87, 0x3C, 0x5C, 0xC6, 0x70, + 0x06, 0xB7, 0x53, 0xBF, 0x6D, 0x6B, 0x7A, 0xF6, + 0xCA, 0x40, 0x2A, 0xB6, 0x18, 0x23, 0x6C, 0x0A, + 0xFF, 0xBC, 0x80, 0x1F, 0x82, 0x22, 0xFB, 0xC3, + 0x6C, 0xE0, 0x98, 0x4E, 0x2B, 0x18, 0xC9, 0x44, + 0xBB, 0xCB, 0xEF, 0x03, 0xB1, 0xE1, 0x36, 0x1C, + 0x1F, 0x44, 0xB0, 0xD7, 0x34, 0xAF, 0xB1, 0x56, + 0x6C, 0xFF, 0x87, 0x44, 0xDA, 0x8B, 0x99, 0x43, + 0xD6, 0xB4, 0x5A, 0x3C, 0x09, 0x03, 0x07, 0x02, + 0xCA, 0x20, 0x1F, 0xFE, 0x20, 0xCB, 0x7E, 0xC5, + 0xB0, 0xD4, 0x14, 0x9E, 0xE2, 0xC2, 0x8E, 0x8B, + 0x23, 0x37, 0x4F, 0x47, 0x1B, 0x57, 0x15, 0x0D, + 0x0E, 0xC9, 0x33, 0x62, 0x61, 0xA2, 0xD5, 0xCB, + 0x84, 0xA3, 0xAC, 0xAC, 0xC4, 0x28, 0x94, 0x73, + 0xA4, 0xC0, 0xAB, 0xC6, 0x17, 0xC9, 0xAB, 0xC1, + 0x78, 0x73, 0x44, 0x34, 0xC8, 0x2E, 0x16, 0x85, + 0x58, 0x8A, 0x5C, 0x2E, 0xA2, 0x67, 0x8F, 0x6B, + 0x3C, 0x22, 0x28, 0x73, 0x31, 0x30, 0xC4, 0x66, + 0xE5, 0xB8, 0x6E, 0xF4, 0x91, 0x15, 0x3E, 0x48, + 0x66, 0x22, 0x47, 0xB8, 0x75, 0xD2, 0x01, 0x02, + 0x0B, 0x56, 0x6B, 0x81, 0xB6, 0x4D, 0x83, 0x9A, + 0xB4, 0x63, 0x3B, 0xAA, 0x8A, 0xCE, 0x20, 0x2B, + 0xAA, 0xB4, 0x49, 0x62, 0x97, 0xF9, 0x80, 0x7A, + 0xDB, 0xBB, 0x1E, 0x33, 0x2C, 0x6F, 0x80, 0x22, + 0xB2, 0xA1, 0x8C, 0xFD, 0xD4, 0xA8, 0x25, 0x30, + 0xB6, 0xD3, 0xF0, 0x07, 0xC3, 0x35, 0x38, 0x98, + 0xD9, 0x66, 0xCC, 0x2C, 0x21, 0xCB, 0x42, 0x44, + 0xBD, 0x00, 0x44, 0x3F, 0x20, 0x98, 0x70, 0xAC, + 0xC4, 0x2B, 0xC3, 0x30, 0x68, 0xC7, 0x24, 0xEC, + 0x17, 0x22, 0x36, 0x19, 0xC1, 0x09, 0x3C, 0xCA, + 0x6A, 0xEB, 0x29, 0x50, 0x06, 0x64, 0xD1, 0x22, + 0x50, 0x36, 0xB4, 0xB8, 0x10, 0x91, 0x90, 0x69, + 0x69, 0x48, 0x1F, 0x1C, 0x72, 0x3C, 0x14, 0x0B, + 0x9D, 0x6C, 0x16, 0x8F, 0x5B, 0x64, 0xBE, 0xA6, + 0x9C, 0x5F, 0xD6, 0x38, 0x5D, 0xF7, 0x36, 0x4B, + 0x87, 0x23, 0xBC, 0xC8, 0x5E, 0x03, 0x8C, 0x7E, + 0x46, 0x4A, 0x90, 0x0D, 0x68, 0xA2, 0x12, 0x78, + 0x18, 0x99, 0x42, 0x17, 0xAE, 0xC8, 0xBD, 0xB3, + 0x9A, 0x97, 0x0A, 0x99, 0x63, 0xDE, 0x93, 0x68, + 0x8E, 0x2A, 0xC8, 0x2A, 0xBC, 0xC2, 0x2F, 0xB9, + 0x27, 0x7B, 0xA2, 0x20, 0x09, 0xE8, 0x78, 0x38, + 0x1A, 0x38, 0x16, 0x39, 0x01, 0xC7, 0xD4, 0xC8, + 0x50, 0x19, 0x53, 0x8D, 0x35, 0xCA, 0xAE, 0x9C, + 0x41, 0xAF, 0x8C, 0x92, 0x9E, 0xE2, 0x0B, 0xB0, + 0x8C, 0xA6, 0x19, 0xE7, 0x2C, 0x2F, 0x22, 0x62, + 0xC1, 0xC9, 0x93, 0x85, 0x72, 0x55, 0x1A, 0xC0, + 0x2D, 0xC9, 0x26, 0x8F, 0xBC, 0xC3, 0x5D, 0x79, + 0x01, 0x1C, 0x3C, 0x09, 0x0A, 0xD4, 0x0A, 0x4F, + 0x11, 0x1C, 0x9B, 0xE5, 0x5C, 0x42, 0x7E, 0xB7, + 0x96, 0xC1, 0x93, 0x2D, 0x86, 0x73, 0x57, 0x9A, + 0xF1, 0xB4, 0xC6, 0x38, 0xB0, 0x94, 0x44, 0x89, + 0x01, 0x2A, 0x25, 0x59, 0xA3, 0xB0, 0x24, 0x81, + 0xB0, 0x1A, 0xC3, 0x0B, 0xA8, 0x96, 0x0F, 0x80, + 0xC0, 0xC2, 0xB3, 0x94, 0x7D, 0x36, 0xA1, 0x2C, + 0x08, 0x04, 0x98, 0xBE, 0xE4, 0x48, 0x71, 0x6C, + 0x97, 0x34, 0x16, 0xC8, 0x24, 0x28, 0x04, 0xA3, + 0xDA, 0x09, 0x9E, 0xE1, 0x37, 0xB0, 0xBA, 0x90, + 0xFE, 0x4A, 0x5C, 0x6A, 0x89, 0x20, 0x02, 0x76, + 0xA0, 0xCF, 0xB6, 0x43, 0xEC, 0x2C, 0x56, 0xA2, + 0xD7, 0x08, 0xD7, 0xB4, 0x37, 0x3E, 0x44, 0xC1, + 0x50, 0x2A, 0x76, 0x3A, 0x60, 0x05, 0x86, 0xE6, + 0xCD, 0xA6, 0x27, 0x38, 0x97, 0xD4, 0x44, 0x48, + 0x28, 0x7D, 0xC2, 0xE6, 0x02, 0xDC, 0x39, 0x20, + 0x0B, 0xF6, 0x16, 0x62, 0x36, 0x55, 0x9F, 0xD1, + 0x2A, 0x60, 0x89, 0x2A, 0xEB, 0x15, 0x3D, 0xD6, + 0x51, 0xBB, 0x46, 0x99, 0x10, 0xB4, 0xB3, 0x46, + 0x69, 0xF9, 0x1D, 0xA8, 0x65, 0x4D, 0x1E, 0xB7, + 0x2E, 0xB6, 0xE0, 0x28, 0x00, 0xB3, 0xB0, 0xA7, + 0xD0, 0xA4, 0x8C, 0x83, 0x68, 0x54, 0xD3, 0xA8, + 0x3E, 0x65, 0x56, 0x9C, 0xB7, 0x23, 0x0B, 0xB4, + 0x4F, 0x3F, 0x14, 0x3A, 0x6D, 0xEC, 0x5F, 0x2C, + 0x39, 0xAB, 0x90, 0xF2, 0x74, 0xF2, 0x08, 0x8B, + 0xD3, 0xD6, 0xA6, 0xFC, 0xA0, 0x07, 0x02, 0x73, + 0xBE, 0xDC, 0x84, 0x77, 0x7F, 0xB5, 0x2E, 0x3C, + 0x55, 0x8B, 0x0A, 0xE0, 0x61, 0x83, 0xD5, 0xA4, + 0x8D, 0x45, 0x2F, 0x68, 0xE1, 0x52, 0x07, 0xF8, + 0x61, 0x62, 0x7A, 0xCA, 0x14, 0x27, 0x96, 0x30, + 0xF8, 0x2E, 0xC3, 0xA0, 0xCA, 0x07, 0x86, 0x33, + 0xB6, 0x00, 0xAF, 0xA7, 0x97, 0x43, 0xA6, 0x00, + 0x21, 0x5B, 0xE5, 0x63, 0x74, 0x58, 0xCE, 0x2C, + 0xE8, 0xAF, 0xF5, 0xA0, 0x8E, 0xB5, 0x01, 0x7B, + 0x2C, 0x76, 0x65, 0x77, 0x47, 0x9F, 0x8D, 0xC6, + 0xBF, 0x9F, 0x5C, 0xC7, 0x50, 0x89, 0x93, 0x21, + 0x61, 0xB9, 0x6C, 0xEA, 0x40, 0x66, 0x20, 0xAE, + 0xDB, 0x63, 0x04, 0x07, 0xF7, 0x68, 0x7E, 0xBB, + 0xB4, 0x81, 0x4C, 0x79, 0x81, 0x63, 0x7A, 0x48, + 0xA9, 0x0D, 0xE6, 0x80, 0x31, 0xE0, 0x62, 0xA7, + 0xAF, 0x76, 0x12, 0xB4, 0xF5, 0xC7, 0xA6, 0xDA, + 0x86, 0xBD, 0x13, 0x65, 0x29, 0xE6, 0x42, 0x95, + 0xA5, 0x61, 0x3E, 0xA7, 0x3B, 0xD3, 0xD4, 0x44, + 0x8C, 0xB8, 0x1F, 0x24, 0x31, 0x35, 0xC0, 0xA6, + 0x60, 0xBE, 0xB9, 0xC1, 0x7E, 0x65, 0x1D, 0xEF, + 0x46, 0x9A, 0x7D, 0x90, 0xA1, 0x5D, 0x34, 0x81, + 0x09, 0x0B, 0xCB, 0xF2, 0x27, 0x01, 0x23, 0x28, + 0x94, 0x1F, 0xA4, 0x6F, 0x39, 0xC5, 0x00, 0x6A, + 0xD9, 0x3D, 0x45, 0x8A, 0xA6, 0xAD, 0xD6, 0x55, + 0x86, 0x2B, 0x41, 0x8C, 0x30, 0x94, 0xF5, 0x51, + 0x46, 0x0D, 0xF2, 0x15, 0x3A, 0x58, 0x10, 0xA7, + 0xDA, 0x74, 0xF0, 0x61, 0x4C, 0x25, 0x88, 0xBE, + 0x49, 0xDC, 0x6F, 0x5E, 0x88, 0x15, 0x46, 0x42, + 0xBD, 0x1D, 0x37, 0x62, 0x56, 0x33, 0x26, 0x43, + 0x35, 0x07, 0x15, 0x6A, 0x57, 0xC5, 0x76, 0x94, + 0xBD, 0xD2, 0x6E, 0x7A, 0x24, 0x6F, 0xEB, 0x72, + 0x3A, 0xED, 0x67, 0xB0, 0x48, 0x87, 0xC8, 0xE4, + 0x76, 0xB4, 0x8C, 0xAB, 0x59, 0xE5, 0x36, 0x2F, + 0x26, 0xA9, 0xEF, 0x50, 0xC2, 0xBC, 0x80, 0xBA, + 0x14, 0x62, 0x26, 0x21, 0x6F, 0xE6, 0x29, 0x68, + 0xA6, 0x0D, 0x04, 0xE8, 0xC1, 0x70, 0xD7, 0x41, + 0xC7, 0xA2, 0xB0, 0xE1, 0xAB, 0xDA, 0xC9, 0x68 + }; + static const byte dk_768[WC_ML_KEM_768_PRIVATE_KEY_SIZE] = { + 0x98, 0xA1, 0xB2, 0xDA, 0x4A, 0x65, 0xCF, 0xB5, + 0x84, 0x5E, 0xA7, 0x31, 0x1E, 0x6A, 0x06, 0xDB, + 0x73, 0x1F, 0x15, 0x90, 0xC4, 0x1E, 0xE7, 0x4B, + 0xA1, 0x07, 0x82, 0x71, 0x5B, 0x35, 0xA3, 0x10, + 0x2D, 0xF6, 0x37, 0x87, 0x2B, 0xE6, 0x5B, 0xAB, + 0x37, 0xA1, 0xDE, 0x25, 0x11, 0xD7, 0x03, 0xC7, + 0x02, 0x47, 0xB3, 0x5E, 0xF2, 0x74, 0x35, 0x48, + 0x50, 0x24, 0xD9, 0x3F, 0xD9, 0xE7, 0x7C, 0x43, + 0x80, 0x4F, 0x37, 0x17, 0x49, 0xBA, 0x00, 0xB2, + 0x0A, 0x8C, 0x5C, 0x58, 0x8B, 0xC9, 0xAB, 0xE0, + 0x68, 0xAE, 0xAA, 0xA9, 0x38, 0x51, 0x7E, 0xBF, + 0xE5, 0x3B, 0x6B, 0x66, 0x32, 0x82, 0x90, 0x3D, + 0xCD, 0x18, 0x97, 0x36, 0xD7, 0x29, 0x68, 0x16, + 0xC7, 0x33, 0xA1, 0xC7, 0x7C, 0x63, 0x75, 0xE5, + 0x39, 0x7C, 0x0F, 0x18, 0x9B, 0xBF, 0xE4, 0x76, + 0x43, 0xA6, 0x1F, 0x58, 0xF8, 0xA3, 0xC6, 0x91, + 0x1B, 0xE4, 0x61, 0x1A, 0x8C, 0x7B, 0xC0, 0x50, + 0x02, 0x11, 0x63, 0xD0, 0xA4, 0x04, 0xDC, 0x14, + 0x06, 0x57, 0x48, 0xFF, 0x29, 0xBE, 0x60, 0xD2, + 0xB9, 0xFD, 0xCC, 0x8F, 0xFD, 0x98, 0xC5, 0x87, + 0xF3, 0x8C, 0x67, 0x11, 0x57, 0x86, 0x46, 0x4B, + 0xDB, 0x34, 0x2B, 0x17, 0xE8, 0x97, 0xD6, 0x46, + 0x17, 0xCB, 0xFB, 0x11, 0x79, 0x73, 0xA5, 0x45, + 0x89, 0x77, 0xA7, 0xD7, 0x61, 0x7A, 0x1B, 0x4D, + 0x83, 0xBA, 0x03, 0xC6, 0x11, 0x13, 0x8A, 0x46, + 0x73, 0xB1, 0xEB, 0x34, 0xB0, 0x78, 0x03, 0x3F, + 0x97, 0xCF, 0xFE, 0x80, 0xC1, 0x46, 0xA2, 0x69, + 0x43, 0xF8, 0x42, 0xB9, 0x76, 0x32, 0x7B, 0xF1, + 0xCB, 0xC6, 0x01, 0x19, 0x52, 0x5B, 0xB9, 0xA3, + 0xC0, 0x34, 0x93, 0x34, 0x90, 0x00, 0xDD, 0x8F, + 0x51, 0xBA, 0x21, 0xA2, 0xE9, 0x23, 0x61, 0x76, + 0x23, 0x24, 0x60, 0x0E, 0x0C, 0x13, 0xAA, 0xA6, + 0xCB, 0x69, 0xBF, 0xB2, 0x42, 0x76, 0x48, 0x3F, + 0x6B, 0x02, 0x42, 0x12, 0x59, 0xB7, 0x58, 0x52, + 0x63, 0xC1, 0xA0, 0x28, 0xD6, 0x82, 0xC5, 0x08, + 0xBB, 0xC2, 0x80, 0x1A, 0x56, 0xE9, 0x8B, 0x8F, + 0x62, 0x0B, 0x04, 0x83, 0xD7, 0x9B, 0x5A, 0xD8, + 0x58, 0x5A, 0xC0, 0xA4, 0x75, 0xBA, 0xC7, 0x78, + 0x65, 0x19, 0x41, 0x96, 0x33, 0x87, 0x91, 0xB7, + 0x98, 0x5A, 0x05, 0xD1, 0x09, 0x39, 0x5C, 0xCA, + 0x89, 0x32, 0x72, 0x2A, 0x91, 0x95, 0x0D, 0x37, + 0xE1, 0x2B, 0x89, 0x14, 0x20, 0xA5, 0x2B, 0x62, + 0xCB, 0xFA, 0x81, 0x5D, 0xF6, 0x17, 0x4C, 0xE0, + 0x0E, 0x68, 0xBC, 0xA7, 0x5D, 0x48, 0x38, 0xCA, + 0x28, 0x0F, 0x71, 0x3C, 0x7E, 0x69, 0x24, 0xAF, + 0xD9, 0x5B, 0xAA, 0x0D, 0x01, 0xAD, 0xA6, 0x37, + 0xB1, 0x58, 0x34, 0x70, 0x34, 0xC0, 0xAB, 0x1A, + 0x71, 0x83, 0x33, 0x1A, 0x82, 0x0A, 0xCB, 0xCB, + 0x83, 0x19, 0x3A, 0x1A, 0x94, 0xC8, 0xF7, 0xE3, + 0x84, 0xAE, 0xD0, 0xC3, 0x5E, 0xD3, 0xCB, 0x33, + 0x97, 0xBB, 0x63, 0x80, 0x86, 0xE7, 0xA3, 0x5A, + 0x64, 0x08, 0xA3, 0xA4, 0xB9, 0x0C, 0xE9, 0x53, + 0x70, 0x7C, 0x19, 0xBC, 0x46, 0xC3, 0xB2, 0xDA, + 0x3B, 0x2E, 0xE3, 0x23, 0x19, 0xC5, 0x6B, 0x92, + 0x80, 0x32, 0xB5, 0xED, 0x12, 0x56, 0xD0, 0x75, + 0x3D, 0x34, 0x14, 0x23, 0xE9, 0xDB, 0x13, 0x9D, + 0xE7, 0x71, 0x4F, 0xF0, 0x75, 0xCA, 0xF5, 0x8F, + 0xD9, 0xF5, 0x7D, 0x1A, 0x54, 0x01, 0x9B, 0x59, + 0x26, 0x40, 0x68, 0x30, 0xDA, 0xE2, 0x9A, 0x87, + 0x53, 0x02, 0xA8, 0x12, 0x56, 0xF4, 0xD6, 0xCF, + 0x5E, 0x74, 0x03, 0x4E, 0xA6, 0x14, 0xBF, 0x70, + 0xC2, 0x76, 0x4B, 0x20, 0xC9, 0x58, 0x9C, 0xDB, + 0x5C, 0x25, 0x76, 0x1A, 0x04, 0xE5, 0x82, 0x92, + 0x90, 0x7C, 0x57, 0x8A, 0x94, 0xA3, 0x58, 0x36, + 0xBE, 0xE3, 0x11, 0x2D, 0xC2, 0xC3, 0xAE, 0x21, + 0x92, 0xC9, 0xDE, 0xAA, 0x30, 0x4B, 0x29, 0xC7, + 0xFE, 0xA1, 0xBD, 0xF4, 0x7B, 0x3B, 0x6B, 0xCB, + 0xA2, 0xC0, 0xE5, 0x5C, 0x9C, 0xDB, 0x6D, 0xE7, + 0x14, 0x9E, 0x9C, 0xB1, 0x79, 0x17, 0x71, 0x8F, + 0x12, 0xC8, 0x03, 0x2D, 0xE1, 0xAD, 0xE0, 0x64, + 0x8D, 0x40, 0x55, 0x19, 0xC7, 0x07, 0x19, 0xBE, + 0xCC, 0x70, 0x18, 0x45, 0xCF, 0x9F, 0x4B, 0x91, + 0x2F, 0xE7, 0x19, 0x83, 0xCA, 0x34, 0xF9, 0x01, + 0x8C, 0x7C, 0xA7, 0xBB, 0x2F, 0x6C, 0x5D, 0x7F, + 0x8C, 0x5B, 0x29, 0x73, 0x59, 0xEC, 0x75, 0x20, + 0x9C, 0x25, 0x43, 0xFF, 0x11, 0xC4, 0x24, 0x49, + 0x77, 0xC5, 0x96, 0x95, 0x24, 0xEC, 0x45, 0x4D, + 0x44, 0xC3, 0x23, 0xFC, 0xCA, 0x94, 0xAC, 0xAC, + 0x27, 0x3A, 0x0E, 0xC4, 0x9B, 0x4A, 0x8A, 0x58, + 0x5B, 0xCE, 0x7A, 0x5B, 0x30, 0x5C, 0x04, 0xC3, + 0x50, 0x64, 0x22, 0x58, 0x03, 0x57, 0x01, 0x6A, + 0x85, 0x0C, 0x3F, 0x7E, 0xE1, 0x72, 0x05, 0xA7, + 0x7B, 0x29, 0x1C, 0x77, 0x31, 0xC9, 0x83, 0x6C, + 0x02, 0xAE, 0xE5, 0x40, 0x6F, 0x63, 0xC6, 0xA0, + 0x7A, 0x21, 0x43, 0x82, 0xAA, 0x15, 0x33, 0x6C, + 0x05, 0xD1, 0x04, 0x55, 0x88, 0x10, 0x76, 0x45, + 0xEA, 0x7D, 0xE6, 0x87, 0x0F, 0xC0, 0xE5, 0x5E, + 0x15, 0x40, 0x97, 0x43, 0x01, 0xC4, 0x2E, 0xC1, + 0x41, 0x05, 0x51, 0x86, 0x80, 0xF6, 0x88, 0xAB, + 0xE4, 0xCE, 0x45, 0x37, 0x38, 0xFE, 0x47, 0x1B, + 0x87, 0xFC, 0x31, 0xF5, 0xC6, 0x8A, 0x39, 0xE6, + 0x8A, 0xF5, 0x1B, 0x02, 0x40, 0xB9, 0x0E, 0x03, + 0x64, 0xB0, 0x4B, 0xAC, 0x43, 0xD6, 0xFB, 0x68, + 0xAB, 0x65, 0xAE, 0x02, 0x8B, 0x62, 0xBD, 0x68, + 0x3B, 0x7D, 0x28, 0xAD, 0x38, 0x80, 0x6B, 0xEE, + 0x72, 0x5B, 0x5B, 0x24, 0x16, 0xA8, 0xD7, 0x9C, + 0x16, 0xEC, 0x2A, 0x99, 0xEA, 0x4A, 0x8D, 0x92, + 0xA2, 0xF5, 0x05, 0x2E, 0x67, 0xF9, 0x73, 0x52, + 0x28, 0x97, 0x61, 0xC5, 0xC3, 0x9F, 0xC5, 0xC7, + 0x42, 0xE9, 0xC0, 0xA7, 0x40, 0xCA, 0x59, 0xFC, + 0x01, 0x82, 0xF7, 0x09, 0xD0, 0x1B, 0x51, 0x87, + 0xF0, 0x00, 0x63, 0xDA, 0xAB, 0x39, 0x75, 0x96, + 0xEE, 0xA4, 0xA3, 0x1B, 0xDB, 0xCB, 0xD4, 0xC1, + 0xBB, 0x0C, 0x55, 0xBE, 0x7C, 0x68, 0x50, 0xFD, + 0xA9, 0x32, 0x6B, 0x35, 0x3E, 0x28, 0x8C, 0x50, + 0x13, 0x22, 0x6C, 0x3C, 0x39, 0x23, 0xA7, 0x91, + 0x60, 0x9E, 0x80, 0x02, 0xE7, 0x3A, 0x5F, 0x7B, + 0x6B, 0xB4, 0xA8, 0x77, 0xB1, 0xFD, 0xF5, 0x3B, + 0xB2, 0xBA, 0xB3, 0xDD, 0x42, 0x4D, 0x31, 0xBB, + 0xB4, 0x48, 0xE6, 0x09, 0xA6, 0x6B, 0x0E, 0x34, + 0x3C, 0x28, 0x6E, 0x87, 0x60, 0x31, 0x2B, 0x6D, + 0x37, 0xAA, 0x52, 0x01, 0xD2, 0x1F, 0x53, 0x50, + 0x3D, 0x88, 0x38, 0x9A, 0xDC, 0xA2, 0x1C, 0x70, + 0xFB, 0x6C, 0x0F, 0xC9, 0xC6, 0x9D, 0x66, 0x16, + 0xC9, 0xEA, 0x37, 0x80, 0xE3, 0x55, 0x65, 0xC0, + 0xC9, 0x7C, 0x15, 0x17, 0x9C, 0x95, 0x34, 0x3E, + 0xCC, 0x5E, 0x1C, 0x2A, 0x24, 0xDE, 0x46, 0x99, + 0xF6, 0x87, 0x5E, 0xA2, 0xFA, 0x2D, 0xD3, 0xE3, + 0x57, 0xBC, 0x43, 0x91, 0x47, 0x95, 0x20, 0x7E, + 0x02, 0x6B, 0x85, 0x0A, 0x22, 0x37, 0x95, 0x0C, + 0x10, 0x8A, 0x51, 0x2F, 0xC8, 0x8C, 0x22, 0x48, + 0x81, 0x12, 0x60, 0x70, 0x88, 0x18, 0x5F, 0xB0, + 0xE0, 0x9C, 0x2C, 0x41, 0x97, 0xA8, 0x36, 0x87, + 0x26, 0x6B, 0xAB, 0x2E, 0x58, 0x3E, 0x21, 0xC4, + 0x0F, 0x4C, 0xC0, 0x08, 0xFE, 0x65, 0x28, 0x04, + 0xD8, 0x22, 0x3F, 0x15, 0x20, 0xA9, 0x0B, 0x0D, + 0x53, 0x85, 0xC7, 0x55, 0x3C, 0xC7, 0x67, 0xC5, + 0x8D, 0x12, 0x0C, 0xCD, 0x3E, 0xF5, 0xB5, 0xD1, + 0xA6, 0xCD, 0x7B, 0xC0, 0x0D, 0xFF, 0x13, 0x21, + 0xB2, 0xF2, 0xC4, 0x32, 0xB6, 0x4E, 0xFB, 0x8A, + 0x3F, 0x5D, 0x00, 0x64, 0xB3, 0xF3, 0x42, 0x93, + 0x02, 0x6C, 0x85, 0x1C, 0x2D, 0xED, 0x68, 0xB9, + 0xDF, 0xF4, 0xA2, 0x8F, 0x6A, 0x8D, 0x22, 0x55, + 0x35, 0xE0, 0x47, 0x70, 0x84, 0x43, 0x0C, 0xFF, + 0xDA, 0x0A, 0xC0, 0x55, 0x2F, 0x9A, 0x21, 0x27, + 0x85, 0xB7, 0x49, 0x91, 0x3A, 0x06, 0xFA, 0x22, + 0x74, 0xC0, 0xD1, 0x5B, 0xAD, 0x32, 0x54, 0x58, + 0xD3, 0x23, 0xEF, 0x6B, 0xAE, 0x13, 0xC0, 0x01, + 0x0D, 0x52, 0x5C, 0x1D, 0x52, 0x69, 0x97, 0x3A, + 0xC2, 0x9B, 0xDA, 0x7C, 0x98, 0x37, 0x46, 0x91, + 0x8B, 0xA0, 0xE0, 0x02, 0x58, 0x8E, 0x30, 0x37, + 0x5D, 0x78, 0x32, 0x9E, 0x6B, 0x8B, 0xA8, 0xC4, + 0x46, 0x2A, 0x69, 0x2F, 0xB6, 0x08, 0x38, 0x42, + 0xB8, 0xC8, 0xC9, 0x2C, 0x60, 0xF2, 0x52, 0x72, + 0x6D, 0x14, 0xA0, 0x71, 0xF7, 0xCC, 0x45, 0x25, + 0x58, 0xD5, 0xE7, 0x1A, 0x7B, 0x08, 0x70, 0x62, + 0xEC, 0xB1, 0x38, 0x68, 0x44, 0x58, 0x82, 0x46, + 0x12, 0x64, 0x02, 0xB1, 0xFA, 0x16, 0x37, 0x73, + 0x3C, 0xD5, 0xF6, 0x0C, 0xC8, 0x4B, 0xCB, 0x64, + 0x6A, 0x78, 0x92, 0x61, 0x4D, 0x7C, 0x51, 0xB1, + 0xC7, 0xF1, 0xA2, 0x79, 0x91, 0x32, 0xF1, 0x34, + 0x27, 0xDC, 0x48, 0x21, 0x58, 0xDA, 0x25, 0x44, + 0x70, 0xA5, 0x9E, 0x00, 0xA4, 0xE4, 0x96, 0x86, + 0xFD, 0xC0, 0x77, 0x55, 0x93, 0x67, 0x27, 0x0C, + 0x21, 0x53, 0xF1, 0x10, 0x07, 0x59, 0x2C, 0x9C, + 0x43, 0x10, 0xCF, 0x8A, 0x12, 0xC6, 0xA8, 0x71, + 0x3B, 0xD6, 0xBB, 0x51, 0xF3, 0x12, 0x4F, 0x98, + 0x9B, 0xA0, 0xD5, 0x40, 0x73, 0xCC, 0x24, 0x2E, + 0x09, 0x68, 0x78, 0x0B, 0x87, 0x5A, 0x86, 0x9E, + 0xFB, 0x85, 0x15, 0x86, 0xB9, 0xA8, 0x68, 0xA3, + 0x84, 0xB9, 0xE6, 0x82, 0x1B, 0x20, 0x1B, 0x93, + 0x2C, 0x45, 0x53, 0x69, 0xA7, 0x39, 0xEC, 0x22, + 0x56, 0x9C, 0x97, 0x7C, 0x21, 0x2B, 0x38, 0x18, + 0x71, 0x81, 0x36, 0x56, 0xAF, 0x5B, 0x56, 0x7E, + 0xF8, 0x93, 0xB5, 0x84, 0x62, 0x4C, 0x86, 0x3A, + 0x25, 0x90, 0x00, 0xF1, 0x7B, 0x25, 0x4B, 0x98, + 0xB1, 0x85, 0x09, 0x7C, 0x50, 0xEB, 0xB6, 0x8B, + 0x24, 0x43, 0x42, 0xE0, 0x5D, 0x4D, 0xE5, 0x20, + 0x12, 0x5B, 0x8E, 0x10, 0x33, 0xB1, 0x43, 0x60, + 0x93, 0xAC, 0xE7, 0xCE, 0x8E, 0x71, 0xB4, 0x58, + 0xD5, 0x25, 0x67, 0x33, 0x63, 0x04, 0x5A, 0x3B, + 0x3E, 0xEA, 0x94, 0x55, 0x42, 0x8A, 0x39, 0x87, + 0x05, 0xA4, 0x23, 0x27, 0xAD, 0xB3, 0x77, 0x4B, + 0x70, 0x57, 0xF4, 0x2B, 0x01, 0x7E, 0xC0, 0x73, + 0x9A, 0x98, 0x3F, 0x19, 0xE8, 0x21, 0x4D, 0x09, + 0x19, 0x5F, 0xA2, 0x4D, 0x2D, 0x57, 0x1D, 0xB7, + 0x3C, 0x19, 0xA6, 0xF8, 0x46, 0x0E, 0x50, 0x83, + 0x0D, 0x41, 0x5F, 0x62, 0x7B, 0x88, 0xE9, 0x4A, + 0x7B, 0x15, 0x37, 0x91, 0xA0, 0xC0, 0xC7, 0xE9, + 0x48, 0x4C, 0x74, 0xD5, 0x3C, 0x71, 0x48, 0x89, + 0xF0, 0xE3, 0x21, 0xB6, 0x66, 0x0A, 0x53, 0x2A, + 0x5B, 0xC0, 0xE5, 0x57, 0xFB, 0xCA, 0x35, 0xE2, + 0x9B, 0xC6, 0x11, 0x20, 0x0E, 0xD3, 0xC6, 0x33, + 0x07, 0x7A, 0x4D, 0x87, 0x3C, 0x5C, 0xC6, 0x70, + 0x06, 0xB7, 0x53, 0xBF, 0x6D, 0x6B, 0x7A, 0xF6, + 0xCA, 0x40, 0x2A, 0xB6, 0x18, 0x23, 0x6C, 0x0A, + 0xFF, 0xBC, 0x80, 0x1F, 0x82, 0x22, 0xFB, 0xC3, + 0x6C, 0xE0, 0x98, 0x4E, 0x2B, 0x18, 0xC9, 0x44, + 0xBB, 0xCB, 0xEF, 0x03, 0xB1, 0xE1, 0x36, 0x1C, + 0x1F, 0x44, 0xB0, 0xD7, 0x34, 0xAF, 0xB1, 0x56, + 0x6C, 0xFF, 0x87, 0x44, 0xDA, 0x8B, 0x99, 0x43, + 0xD6, 0xB4, 0x5A, 0x3C, 0x09, 0x03, 0x07, 0x02, + 0xCA, 0x20, 0x1F, 0xFE, 0x20, 0xCB, 0x7E, 0xC5, + 0xB0, 0xD4, 0x14, 0x9E, 0xE2, 0xC2, 0x8E, 0x8B, + 0x23, 0x37, 0x4F, 0x47, 0x1B, 0x57, 0x15, 0x0D, + 0x0E, 0xC9, 0x33, 0x62, 0x61, 0xA2, 0xD5, 0xCB, + 0x84, 0xA3, 0xAC, 0xAC, 0xC4, 0x28, 0x94, 0x73, + 0xA4, 0xC0, 0xAB, 0xC6, 0x17, 0xC9, 0xAB, 0xC1, + 0x78, 0x73, 0x44, 0x34, 0xC8, 0x2E, 0x16, 0x85, + 0x58, 0x8A, 0x5C, 0x2E, 0xA2, 0x67, 0x8F, 0x6B, + 0x3C, 0x22, 0x28, 0x73, 0x31, 0x30, 0xC4, 0x66, + 0xE5, 0xB8, 0x6E, 0xF4, 0x91, 0x15, 0x3E, 0x48, + 0x66, 0x22, 0x47, 0xB8, 0x75, 0xD2, 0x01, 0x02, + 0x0B, 0x56, 0x6B, 0x81, 0xB6, 0x4D, 0x83, 0x9A, + 0xB4, 0x63, 0x3B, 0xAA, 0x8A, 0xCE, 0x20, 0x2B, + 0xAA, 0xB4, 0x49, 0x62, 0x97, 0xF9, 0x80, 0x7A, + 0xDB, 0xBB, 0x1E, 0x33, 0x2C, 0x6F, 0x80, 0x22, + 0xB2, 0xA1, 0x8C, 0xFD, 0xD4, 0xA8, 0x25, 0x30, + 0xB6, 0xD3, 0xF0, 0x07, 0xC3, 0x35, 0x38, 0x98, + 0xD9, 0x66, 0xCC, 0x2C, 0x21, 0xCB, 0x42, 0x44, + 0xBD, 0x00, 0x44, 0x3F, 0x20, 0x98, 0x70, 0xAC, + 0xC4, 0x2B, 0xC3, 0x30, 0x68, 0xC7, 0x24, 0xEC, + 0x17, 0x22, 0x36, 0x19, 0xC1, 0x09, 0x3C, 0xCA, + 0x6A, 0xEB, 0x29, 0x50, 0x06, 0x64, 0xD1, 0x22, + 0x50, 0x36, 0xB4, 0xB8, 0x10, 0x91, 0x90, 0x69, + 0x69, 0x48, 0x1F, 0x1C, 0x72, 0x3C, 0x14, 0x0B, + 0x9D, 0x6C, 0x16, 0x8F, 0x5B, 0x64, 0xBE, 0xA6, + 0x9C, 0x5F, 0xD6, 0x38, 0x5D, 0xF7, 0x36, 0x4B, + 0x87, 0x23, 0xBC, 0xC8, 0x5E, 0x03, 0x8C, 0x7E, + 0x46, 0x4A, 0x90, 0x0D, 0x68, 0xA2, 0x12, 0x78, + 0x18, 0x99, 0x42, 0x17, 0xAE, 0xC8, 0xBD, 0xB3, + 0x9A, 0x97, 0x0A, 0x99, 0x63, 0xDE, 0x93, 0x68, + 0x8E, 0x2A, 0xC8, 0x2A, 0xBC, 0xC2, 0x2F, 0xB9, + 0x27, 0x7B, 0xA2, 0x20, 0x09, 0xE8, 0x78, 0x38, + 0x1A, 0x38, 0x16, 0x39, 0x01, 0xC7, 0xD4, 0xC8, + 0x50, 0x19, 0x53, 0x8D, 0x35, 0xCA, 0xAE, 0x9C, + 0x41, 0xAF, 0x8C, 0x92, 0x9E, 0xE2, 0x0B, 0xB0, + 0x8C, 0xA6, 0x19, 0xE7, 0x2C, 0x2F, 0x22, 0x62, + 0xC1, 0xC9, 0x93, 0x85, 0x72, 0x55, 0x1A, 0xC0, + 0x2D, 0xC9, 0x26, 0x8F, 0xBC, 0xC3, 0x5D, 0x79, + 0x01, 0x1C, 0x3C, 0x09, 0x0A, 0xD4, 0x0A, 0x4F, + 0x11, 0x1C, 0x9B, 0xE5, 0x5C, 0x42, 0x7E, 0xB7, + 0x96, 0xC1, 0x93, 0x2D, 0x86, 0x73, 0x57, 0x9A, + 0xF1, 0xB4, 0xC6, 0x38, 0xB0, 0x94, 0x44, 0x89, + 0x01, 0x2A, 0x25, 0x59, 0xA3, 0xB0, 0x24, 0x81, + 0xB0, 0x1A, 0xC3, 0x0B, 0xA8, 0x96, 0x0F, 0x80, + 0xC0, 0xC2, 0xB3, 0x94, 0x7D, 0x36, 0xA1, 0x2C, + 0x08, 0x04, 0x98, 0xBE, 0xE4, 0x48, 0x71, 0x6C, + 0x97, 0x34, 0x16, 0xC8, 0x24, 0x28, 0x04, 0xA3, + 0xDA, 0x09, 0x9E, 0xE1, 0x37, 0xB0, 0xBA, 0x90, + 0xFE, 0x4A, 0x5C, 0x6A, 0x89, 0x20, 0x02, 0x76, + 0xA0, 0xCF, 0xB6, 0x43, 0xEC, 0x2C, 0x56, 0xA2, + 0xD7, 0x08, 0xD7, 0xB4, 0x37, 0x3E, 0x44, 0xC1, + 0x50, 0x2A, 0x76, 0x3A, 0x60, 0x05, 0x86, 0xE6, + 0xCD, 0xA6, 0x27, 0x38, 0x97, 0xD4, 0x44, 0x48, + 0x28, 0x7D, 0xC2, 0xE6, 0x02, 0xDC, 0x39, 0x20, + 0x0B, 0xF6, 0x16, 0x62, 0x36, 0x55, 0x9F, 0xD1, + 0x2A, 0x60, 0x89, 0x2A, 0xEB, 0x15, 0x3D, 0xD6, + 0x51, 0xBB, 0x46, 0x99, 0x10, 0xB4, 0xB3, 0x46, + 0x69, 0xF9, 0x1D, 0xA8, 0x65, 0x4D, 0x1E, 0xB7, + 0x2E, 0xB6, 0xE0, 0x28, 0x00, 0xB3, 0xB0, 0xA7, + 0xD0, 0xA4, 0x8C, 0x83, 0x68, 0x54, 0xD3, 0xA8, + 0x3E, 0x65, 0x56, 0x9C, 0xB7, 0x23, 0x0B, 0xB4, + 0x4F, 0x3F, 0x14, 0x3A, 0x6D, 0xEC, 0x5F, 0x2C, + 0x39, 0xAB, 0x90, 0xF2, 0x74, 0xF2, 0x08, 0x8B, + 0xD3, 0xD6, 0xA6, 0xFC, 0xA0, 0x07, 0x02, 0x73, + 0xBE, 0xDC, 0x84, 0x77, 0x7F, 0xB5, 0x2E, 0x3C, + 0x55, 0x8B, 0x0A, 0xE0, 0x61, 0x83, 0xD5, 0xA4, + 0x8D, 0x45, 0x2F, 0x68, 0xE1, 0x52, 0x07, 0xF8, + 0x61, 0x62, 0x7A, 0xCA, 0x14, 0x27, 0x96, 0x30, + 0xF8, 0x2E, 0xC3, 0xA0, 0xCA, 0x07, 0x86, 0x33, + 0xB6, 0x00, 0xAF, 0xA7, 0x97, 0x43, 0xA6, 0x00, + 0x21, 0x5B, 0xE5, 0x63, 0x74, 0x58, 0xCE, 0x2C, + 0xE8, 0xAF, 0xF5, 0xA0, 0x8E, 0xB5, 0x01, 0x7B, + 0x2C, 0x76, 0x65, 0x77, 0x47, 0x9F, 0x8D, 0xC6, + 0xBF, 0x9F, 0x5C, 0xC7, 0x50, 0x89, 0x93, 0x21, + 0x61, 0xB9, 0x6C, 0xEA, 0x40, 0x66, 0x20, 0xAE, + 0xDB, 0x63, 0x04, 0x07, 0xF7, 0x68, 0x7E, 0xBB, + 0xB4, 0x81, 0x4C, 0x79, 0x81, 0x63, 0x7A, 0x48, + 0xA9, 0x0D, 0xE6, 0x80, 0x31, 0xE0, 0x62, 0xA7, + 0xAF, 0x76, 0x12, 0xB4, 0xF5, 0xC7, 0xA6, 0xDA, + 0x86, 0xBD, 0x13, 0x65, 0x29, 0xE6, 0x42, 0x95, + 0xA5, 0x61, 0x3E, 0xA7, 0x3B, 0xD3, 0xD4, 0x44, + 0x8C, 0xB8, 0x1F, 0x24, 0x31, 0x35, 0xC0, 0xA6, + 0x60, 0xBE, 0xB9, 0xC1, 0x7E, 0x65, 0x1D, 0xEF, + 0x46, 0x9A, 0x7D, 0x90, 0xA1, 0x5D, 0x34, 0x81, + 0x09, 0x0B, 0xCB, 0xF2, 0x27, 0x01, 0x23, 0x28, + 0x94, 0x1F, 0xA4, 0x6F, 0x39, 0xC5, 0x00, 0x6A, + 0xD9, 0x3D, 0x45, 0x8A, 0xA6, 0xAD, 0xD6, 0x55, + 0x86, 0x2B, 0x41, 0x8C, 0x30, 0x94, 0xF5, 0x51, + 0x46, 0x0D, 0xF2, 0x15, 0x3A, 0x58, 0x10, 0xA7, + 0xDA, 0x74, 0xF0, 0x61, 0x4C, 0x25, 0x88, 0xBE, + 0x49, 0xDC, 0x6F, 0x5E, 0x88, 0x15, 0x46, 0x42, + 0xBD, 0x1D, 0x37, 0x62, 0x56, 0x33, 0x26, 0x43, + 0x35, 0x07, 0x15, 0x6A, 0x57, 0xC5, 0x76, 0x94, + 0xBD, 0xD2, 0x6E, 0x7A, 0x24, 0x6F, 0xEB, 0x72, + 0x3A, 0xED, 0x67, 0xB0, 0x48, 0x87, 0xC8, 0xE4, + 0x76, 0xB4, 0x8C, 0xAB, 0x59, 0xE5, 0x36, 0x2F, + 0x26, 0xA9, 0xEF, 0x50, 0xC2, 0xBC, 0x80, 0xBA, + 0x14, 0x62, 0x26, 0x21, 0x6F, 0xE6, 0x29, 0x68, + 0xA6, 0x0D, 0x04, 0xE8, 0xC1, 0x70, 0xD7, 0x41, + 0xC7, 0xA2, 0xB0, 0xE1, 0xAB, 0xDA, 0xC9, 0x68, + 0xE2, 0x90, 0x20, 0x83, 0x9D, 0x05, 0x2F, 0xA3, + 0x72, 0x58, 0x56, 0x27, 0xF8, 0xB5, 0x9E, 0xE3, + 0x12, 0xAE, 0x41, 0x4C, 0x97, 0x9D, 0x82, 0x5F, + 0x06, 0xA6, 0x92, 0x9A, 0x79, 0x62, 0x57, 0x18, + 0xA8, 0x57, 0x68, 0xF3, 0x48, 0x6B, 0xD3, 0x2A, + 0x01, 0xBF, 0x9A, 0x8F, 0x21, 0xEA, 0x93, 0x8E, + 0x64, 0x8E, 0xAE, 0x4E, 0x54, 0x48, 0xC3, 0x4C, + 0x3E, 0xB8, 0x88, 0x20, 0xB1, 0x59, 0xEE, 0xDD + }; +#endif +#ifndef WOLFSSL_NO_ML_KEM_1024 + static const byte seed_1024[WC_ML_KEM_MAKEKEY_RAND_SZ] = { + /* d */ + 0x49, 0xAC, 0x8B, 0x99, 0xBB, 0x1E, 0x6A, 0x8E, + 0xA8, 0x18, 0x26, 0x1F, 0x8B, 0xE6, 0x8B, 0xDE, + 0xAA, 0x52, 0x89, 0x7E, 0x7E, 0xC6, 0xC4, 0x0B, + 0x53, 0x0B, 0xC7, 0x60, 0xAB, 0x77, 0xDC, 0xE3, + /* z */ + 0x99, 0xE3, 0x24, 0x68, 0x84, 0x18, 0x1F, 0x8E, + 0x1D, 0xD4, 0x4E, 0x0C, 0x76, 0x29, 0x09, 0x33, + 0x30, 0x22, 0x1F, 0xD6, 0x7D, 0x9B, 0x7D, 0x6E, + 0x15, 0x10, 0xB2, 0xDB, 0xAD, 0x87, 0x62, 0xF7 + }; + static const byte ek_1024[WC_ML_KEM_1024_PUBLIC_KEY_SIZE] = { + 0xA0, 0x41, 0x84, 0xD4, 0xBC, 0x7B, 0x53, 0x2A, + 0x0F, 0x70, 0xA5, 0x4D, 0x77, 0x57, 0xCD, 0xE6, + 0x17, 0x5A, 0x68, 0x43, 0xB8, 0x61, 0xCB, 0x2B, + 0xC4, 0x83, 0x0C, 0x00, 0x12, 0x55, 0x4C, 0xFC, + 0x5D, 0x2C, 0x8A, 0x20, 0x27, 0xAA, 0x3C, 0xD9, + 0x67, 0x13, 0x0E, 0x9B, 0x96, 0x24, 0x1B, 0x11, + 0xC4, 0x32, 0x0C, 0x76, 0x49, 0xCC, 0x23, 0xA7, + 0x1B, 0xAF, 0xE6, 0x91, 0xAF, 0xC0, 0x8E, 0x68, + 0x0B, 0xCE, 0xF4, 0x29, 0x07, 0x00, 0x07, 0x18, + 0xE4, 0xEA, 0xCE, 0x8D, 0xA2, 0x82, 0x14, 0x19, + 0x7B, 0xE1, 0xC2, 0x69, 0xDA, 0x9C, 0xB5, 0x41, + 0xE1, 0xA3, 0xCE, 0x97, 0xCF, 0xAD, 0xF9, 0xC6, + 0x05, 0x87, 0x80, 0xFE, 0x67, 0x93, 0xDB, 0xFA, + 0x82, 0x18, 0xA2, 0x76, 0x0B, 0x80, 0x2B, 0x8D, + 0xA2, 0xAA, 0x27, 0x1A, 0x38, 0x77, 0x25, 0x23, + 0xA7, 0x67, 0x36, 0xA7, 0xA3, 0x1B, 0x9D, 0x30, + 0x37, 0xAD, 0x21, 0xCE, 0xBB, 0x11, 0xA4, 0x72, + 0xB8, 0x79, 0x2E, 0xB1, 0x75, 0x58, 0xB9, 0x40, + 0xE7, 0x08, 0x83, 0xF2, 0x64, 0x59, 0x2C, 0x68, + 0x9B, 0x24, 0x0B, 0xB4, 0x3D, 0x54, 0x08, 0xBF, + 0x44, 0x64, 0x32, 0xF4, 0x12, 0xF4, 0xB9, 0xA5, + 0xF6, 0x86, 0x5C, 0xC2, 0x52, 0xA4, 0x3C, 0xF4, + 0x0A, 0x32, 0x03, 0x91, 0x55, 0x55, 0x91, 0xD6, + 0x75, 0x61, 0xFD, 0xD0, 0x53, 0x53, 0xAB, 0x6B, + 0x01, 0x9B, 0x3A, 0x08, 0xA7, 0x33, 0x53, 0xD5, + 0x1B, 0x61, 0x13, 0xAB, 0x2F, 0xA5, 0x1D, 0x97, + 0x56, 0x48, 0xEE, 0x25, 0x4A, 0xF8, 0x9A, 0x23, + 0x05, 0x04, 0xA2, 0x36, 0xA4, 0x65, 0x82, 0x57, + 0x74, 0x0B, 0xDC, 0xBB, 0xE1, 0x70, 0x8A, 0xB0, + 0x22, 0xC3, 0xC5, 0x88, 0xA4, 0x10, 0xDB, 0x3B, + 0x9C, 0x30, 0x8A, 0x06, 0x27, 0x5B, 0xDF, 0x5B, + 0x48, 0x59, 0xD3, 0xA2, 0x61, 0x7A, 0x29, 0x5E, + 0x1A, 0x22, 0xF9, 0x01, 0x98, 0xBA, 0xD0, 0x16, + 0x6F, 0x4A, 0x94, 0x34, 0x17, 0xC5, 0xB8, 0x31, + 0x73, 0x6C, 0xB2, 0xC8, 0x58, 0x0A, 0xBF, 0xDE, + 0x57, 0x14, 0xB5, 0x86, 0xAB, 0xEE, 0xC0, 0xA1, + 0x75, 0xA0, 0x8B, 0xC7, 0x10, 0xC7, 0xA2, 0x89, + 0x5D, 0xE9, 0x3A, 0xC4, 0x38, 0x06, 0x1B, 0xF7, + 0x76, 0x5D, 0x0D, 0x21, 0xCD, 0x41, 0x81, 0x67, + 0xCA, 0xF8, 0x9D, 0x1E, 0xFC, 0x34, 0x48, 0xBC, + 0xBB, 0x96, 0xD6, 0x9B, 0x3E, 0x01, 0x0C, 0x82, + 0xD1, 0x5C, 0xAB, 0x6C, 0xAC, 0xC6, 0x79, 0x9D, + 0x36, 0x39, 0x66, 0x9A, 0x5B, 0x21, 0xA6, 0x33, + 0xC8, 0x65, 0xF8, 0x59, 0x3B, 0x5B, 0x7B, 0xC8, + 0x00, 0x26, 0x2B, 0xB8, 0x37, 0xA9, 0x24, 0xA6, + 0xC5, 0x44, 0x0E, 0x4F, 0xC7, 0x3B, 0x41, 0xB2, + 0x30, 0x92, 0xC3, 0x91, 0x2F, 0x4C, 0x6B, 0xEB, + 0xB4, 0xC7, 0xB4, 0xC6, 0x29, 0x08, 0xB0, 0x37, + 0x75, 0x66, 0x6C, 0x22, 0x22, 0x0D, 0xF9, 0xC8, + 0x88, 0x23, 0xE3, 0x44, 0xC7, 0x30, 0x83, 0x32, + 0x34, 0x5C, 0x8B, 0x79, 0x5D, 0x34, 0xE8, 0xC0, + 0x51, 0xF2, 0x1F, 0x5A, 0x21, 0xC2, 0x14, 0xB6, + 0x98, 0x41, 0x35, 0x87, 0x09, 0xB1, 0xC3, 0x05, + 0xB3, 0x2C, 0xC2, 0xC3, 0x80, 0x6A, 0xE9, 0xCC, + 0xD3, 0x81, 0x9F, 0xFF, 0x45, 0x07, 0xFE, 0x52, + 0x0F, 0xBF, 0xC2, 0x71, 0x99, 0xBC, 0x23, 0xBE, + 0x6B, 0x9B, 0x2D, 0x2A, 0xC1, 0x71, 0x75, 0x79, + 0xAC, 0x76, 0x92, 0x79, 0xE2, 0xA7, 0xAA, 0xC6, + 0x8A, 0x37, 0x1A, 0x47, 0xBA, 0x3A, 0x7D, 0xBE, + 0x01, 0x6F, 0x14, 0xE1, 0xA7, 0x27, 0x33, 0x36, + 0x63, 0xC4, 0xA5, 0xCD, 0x1A, 0x0F, 0x88, 0x36, + 0xCF, 0x7B, 0x5C, 0x49, 0xAC, 0x51, 0x48, 0x5C, + 0xA6, 0x03, 0x45, 0xC9, 0x90, 0xE0, 0x68, 0x88, + 0x72, 0x00, 0x03, 0x73, 0x13, 0x22, 0xC5, 0xB8, + 0xCD, 0x5E, 0x69, 0x07, 0xFD, 0xA1, 0x15, 0x7F, + 0x46, 0x8F, 0xD3, 0xFC, 0x20, 0xFA, 0x81, 0x75, + 0xEE, 0xC9, 0x5C, 0x29, 0x1A, 0x26, 0x2B, 0xA8, + 0xC5, 0xBE, 0x99, 0x08, 0x72, 0x41, 0x89, 0x30, + 0x85, 0x23, 0x39, 0xD8, 0x8A, 0x19, 0xB3, 0x7F, + 0xEF, 0xA3, 0xCF, 0xE8, 0x21, 0x75, 0xC2, 0x24, + 0x40, 0x7C, 0xA4, 0x14, 0xBA, 0xEB, 0x37, 0x92, + 0x3B, 0x4D, 0x2D, 0x83, 0x13, 0x4A, 0xE1, 0x54, + 0xE4, 0x90, 0xA9, 0xB4, 0x5A, 0x05, 0x63, 0xB0, + 0x6C, 0x95, 0x3C, 0x33, 0x01, 0x45, 0x0A, 0x21, + 0x76, 0xA0, 0x7C, 0x61, 0x4A, 0x74, 0xE3, 0x47, + 0x8E, 0x48, 0x50, 0x9F, 0x9A, 0x60, 0xAE, 0x94, + 0x5A, 0x8E, 0xBC, 0x78, 0x15, 0x12, 0x1D, 0x90, + 0xA3, 0xB0, 0xE0, 0x70, 0x91, 0xA0, 0x96, 0xCF, + 0x02, 0xC5, 0x7B, 0x25, 0xBC, 0xA5, 0x81, 0x26, + 0xAD, 0x0C, 0x62, 0x9C, 0xE1, 0x66, 0xA7, 0xED, + 0xB4, 0xB3, 0x32, 0x21, 0xA0, 0xD3, 0xF7, 0x2B, + 0x85, 0xD5, 0x62, 0xEC, 0x69, 0x8B, 0x7D, 0x0A, + 0x91, 0x3D, 0x73, 0x80, 0x6F, 0x1C, 0x5C, 0x87, + 0xB3, 0x8E, 0xC0, 0x03, 0xCB, 0x30, 0x3A, 0x3D, + 0xC5, 0x1B, 0x4B, 0x35, 0x35, 0x6A, 0x67, 0x82, + 0x6D, 0x6E, 0xDA, 0xA8, 0xFE, 0xB9, 0x3B, 0x98, + 0x49, 0x3B, 0x2D, 0x1C, 0x11, 0xB6, 0x76, 0xA6, + 0xAD, 0x95, 0x06, 0xA1, 0xAA, 0xAE, 0x13, 0xA8, + 0x24, 0xC7, 0xC0, 0x8D, 0x1C, 0x6C, 0x2C, 0x4D, + 0xBA, 0x96, 0x42, 0xC7, 0x6E, 0xA7, 0xF6, 0xC8, + 0x26, 0x4B, 0x64, 0xA2, 0x3C, 0xCC, 0xA9, 0xA7, + 0x46, 0x35, 0xFC, 0xBF, 0x03, 0xE0, 0x0F, 0x1B, + 0x57, 0x22, 0xB2, 0x14, 0x37, 0x67, 0x90, 0x79, + 0x3B, 0x2C, 0x4F, 0x0A, 0x13, 0xB5, 0xC4, 0x07, + 0x60, 0xB4, 0x21, 0x8E, 0x1D, 0x25, 0x94, 0xDC, + 0xB3, 0x0A, 0x70, 0xD9, 0xC1, 0x78, 0x2A, 0x5D, + 0xD3, 0x05, 0x76, 0xFA, 0x41, 0x44, 0xBF, 0xC8, + 0x41, 0x6E, 0xDA, 0x81, 0x18, 0xFC, 0x64, 0x72, + 0xF5, 0x6A, 0x97, 0x95, 0x86, 0xF3, 0x3B, 0xB0, + 0x70, 0xFB, 0x0F, 0x1B, 0x0B, 0x10, 0xBC, 0x48, + 0x97, 0xEB, 0xE0, 0x1B, 0xCA, 0x38, 0x93, 0xD4, + 0xE1, 0x6A, 0xDB, 0x25, 0x09, 0x3A, 0x74, 0x17, + 0xD0, 0x70, 0x8C, 0x83, 0xA2, 0x63, 0x22, 0xE2, + 0x2E, 0x63, 0x30, 0x09, 0x1E, 0x30, 0x15, 0x2B, + 0xF8, 0x23, 0x59, 0x7C, 0x04, 0xCC, 0xF4, 0xCF, + 0xC7, 0x33, 0x15, 0x78, 0xF4, 0x3A, 0x27, 0x26, + 0xCC, 0xB4, 0x28, 0x28, 0x9A, 0x90, 0xC8, 0x63, + 0x25, 0x9D, 0xD1, 0x80, 0xC5, 0xFF, 0x14, 0x2B, + 0xEF, 0x41, 0xC7, 0x71, 0x70, 0x94, 0xBE, 0x07, + 0x85, 0x6D, 0xA2, 0xB1, 0x40, 0xFA, 0x67, 0x71, + 0x09, 0x67, 0x35, 0x6A, 0xA4, 0x7D, 0xFB, 0xC8, + 0xD2, 0x55, 0xB4, 0x72, 0x2A, 0xB8, 0x6D, 0x43, + 0x9B, 0x7E, 0x0A, 0x60, 0x90, 0x25, 0x1D, 0x2D, + 0x4C, 0x1E, 0xD5, 0xF2, 0x0B, 0xBE, 0x68, 0x07, + 0xBF, 0x65, 0xA9, 0x0B, 0x7C, 0xB2, 0xEC, 0x01, + 0x02, 0xAF, 0x02, 0x80, 0x9D, 0xC9, 0xAC, 0x7D, + 0x0A, 0x3A, 0xBC, 0x69, 0xC1, 0x83, 0x65, 0xBC, + 0xFF, 0x59, 0x18, 0x5F, 0x33, 0x99, 0x68, 0x87, + 0x74, 0x61, 0x85, 0x90, 0x6C, 0x01, 0x91, 0xAE, + 0xD4, 0x40, 0x7E, 0x13, 0x94, 0x46, 0x45, 0x9B, + 0xE2, 0x9C, 0x68, 0x22, 0x71, 0x76, 0x44, 0x35, + 0x3D, 0x24, 0xAB, 0x63, 0x39, 0x15, 0x6A, 0x9C, + 0x42, 0x49, 0x09, 0xF0, 0xA9, 0x02, 0x5B, 0xB7, + 0x47, 0x20, 0x77, 0x9B, 0xE4, 0x3F, 0x16, 0xD8, + 0x1C, 0x8C, 0xC6, 0x66, 0xE9, 0x97, 0x10, 0xD8, + 0xC6, 0x8B, 0xB5, 0xCC, 0x4E, 0x12, 0xF3, 0x14, + 0xE9, 0x25, 0xA5, 0x51, 0xF0, 0x9C, 0xC5, 0x90, + 0x03, 0xA1, 0xF8, 0x81, 0x03, 0xC2, 0x54, 0xBB, + 0x97, 0x8D, 0x75, 0xF3, 0x94, 0xD3, 0x54, 0x0E, + 0x31, 0xE7, 0x71, 0xCD, 0xA3, 0x6E, 0x39, 0xEC, + 0x54, 0xA6, 0x2B, 0x58, 0x32, 0x66, 0x4D, 0x82, + 0x1A, 0x72, 0xF1, 0xE6, 0xAF, 0xBB, 0xA2, 0x7F, + 0x84, 0x29, 0x5B, 0x26, 0x94, 0xC4, 0x98, 0x49, + 0x8E, 0x81, 0x2B, 0xC8, 0xE9, 0x37, 0x8F, 0xE5, + 0x41, 0xCE, 0xC5, 0x89, 0x1B, 0x25, 0x06, 0x29, + 0x01, 0xCB, 0x72, 0x12, 0xE3, 0xCD, 0xC4, 0x61, + 0x79, 0xEC, 0x5B, 0xCE, 0xC1, 0x0B, 0xC0, 0xB9, + 0x31, 0x1D, 0xE0, 0x50, 0x74, 0x29, 0x06, 0x87, + 0xFD, 0x6A, 0x53, 0x92, 0x67, 0x16, 0x54, 0x28, + 0x4C, 0xD9, 0xC8, 0xCC, 0x3E, 0xBA, 0x80, 0xEB, + 0x3B, 0x66, 0x2E, 0xB5, 0x3E, 0xB7, 0x51, 0x16, + 0x70, 0x4A, 0x1F, 0xEB, 0x5C, 0x2D, 0x05, 0x63, + 0x38, 0x53, 0x28, 0x68, 0xDD, 0xF2, 0x4E, 0xB8, + 0x99, 0x2A, 0xB8, 0x56, 0x5D, 0x9E, 0x49, 0x0C, + 0xAD, 0xF1, 0x48, 0x04, 0x36, 0x0D, 0xAA, 0x90, + 0x71, 0x8E, 0xAB, 0x61, 0x6B, 0xAB, 0x07, 0x65, + 0xD3, 0x39, 0x87, 0xB4, 0x7E, 0xFB, 0x65, 0x99, + 0xC5, 0x56, 0x32, 0x35, 0xE6, 0x1E, 0x4B, 0xE6, + 0x70, 0xE9, 0x79, 0x55, 0xAB, 0x29, 0x2D, 0x97, + 0x32, 0xCB, 0x89, 0x30, 0x94, 0x8A, 0xC8, 0x2D, + 0xF2, 0x30, 0xAC, 0x72, 0x29, 0x7A, 0x23, 0x67, + 0x9D, 0x6B, 0x94, 0xC1, 0x7F, 0x13, 0x59, 0x48, + 0x32, 0x54, 0xFE, 0xDC, 0x2F, 0x05, 0x81, 0x9F, + 0x0D, 0x06, 0x9A, 0x44, 0x3B, 0x78, 0xE3, 0xFC, + 0x6C, 0x3E, 0xF4, 0x71, 0x4B, 0x05, 0xA3, 0xFC, + 0xA8, 0x1C, 0xBB, 0xA6, 0x02, 0x42, 0xA7, 0x06, + 0x0C, 0xD8, 0x85, 0xD8, 0xF3, 0x99, 0x81, 0xBB, + 0x18, 0x09, 0x2B, 0x23, 0xDA, 0xA5, 0x9F, 0xD9, + 0x57, 0x83, 0x88, 0x68, 0x8A, 0x09, 0xBB, 0xA0, + 0x79, 0xBC, 0x80, 0x9A, 0x54, 0x84, 0x3A, 0x60, + 0x38, 0x5E, 0x23, 0x10, 0xBB, 0xCB, 0xCC, 0x02, + 0x13, 0xCE, 0x3D, 0xFA, 0xAB, 0x33, 0xB4, 0x7F, + 0x9D, 0x63, 0x05, 0xBC, 0x95, 0xC6, 0x10, 0x78, + 0x13, 0xC5, 0x85, 0xC4, 0xB6, 0x57, 0xBF, 0x30, + 0x54, 0x28, 0x33, 0xB1, 0x49, 0x49, 0xF5, 0x73, + 0xC0, 0x61, 0x2A, 0xD5, 0x24, 0xBA, 0xAE, 0x69, + 0x59, 0x0C, 0x12, 0x77, 0xB8, 0x6C, 0x28, 0x65, + 0x71, 0xBF, 0x66, 0xB3, 0xCF, 0xF4, 0x6A, 0x38, + 0x58, 0xC0, 0x99, 0x06, 0xA7, 0x94, 0xDF, 0x4A, + 0x06, 0xE9, 0xD4, 0xB0, 0xA2, 0xE4, 0x3F, 0x10, + 0xF7, 0x2A, 0x6C, 0x6C, 0x47, 0xE5, 0x64, 0x6E, + 0x2C, 0x79, 0x9B, 0x71, 0xC3, 0x3E, 0xD2, 0xF0, + 0x1E, 0xEB, 0x45, 0x93, 0x8E, 0xB7, 0xA4, 0xE2, + 0xE2, 0x90, 0x8C, 0x53, 0x55, 0x8A, 0x54, 0x0D, + 0x35, 0x03, 0x69, 0xFA, 0x18, 0x9C, 0x61, 0x69, + 0x43, 0xF7, 0x98, 0x1D, 0x76, 0x18, 0xCF, 0x02, + 0xA5, 0xB0, 0xA2, 0xBC, 0xC4, 0x22, 0xE8, 0x57, + 0xD1, 0xA4, 0x78, 0x71, 0x25, 0x3D, 0x08, 0x29, + 0x3C, 0x1C, 0x17, 0x9B, 0xCD, 0xC0, 0x43, 0x70, + 0x69, 0x10, 0x74, 0x18, 0x20, 0x5F, 0xDB, 0x98, + 0x56, 0x62, 0x3B, 0x8C, 0xA6, 0xB6, 0x94, 0xC9, + 0x6C, 0x08, 0x4B, 0x17, 0xF1, 0x3B, 0xB6, 0xDF, + 0x12, 0xB2, 0xCF, 0xBB, 0xC2, 0xB0, 0xE0, 0xC3, + 0x4B, 0x00, 0xD0, 0xFC, 0xD0, 0xAE, 0xCF, 0xB2, + 0x79, 0x24, 0xF6, 0x98, 0x4E, 0x74, 0x7B, 0xE2, + 0xA0, 0x9D, 0x83, 0xA8, 0x66, 0x45, 0x90, 0xA8, + 0x07, 0x73, 0x31, 0x49, 0x1A, 0x4F, 0x7D, 0x72, + 0x08, 0x43, 0xF2, 0x3E, 0x65, 0x2C, 0x6F, 0xA8, + 0x40, 0x30, 0x8D, 0xB4, 0x02, 0x03, 0x37, 0xAA, + 0xD3, 0x79, 0x67, 0x03, 0x4A, 0x9F, 0xB5, 0x23, + 0xB6, 0x7C, 0xA7, 0x03, 0x30, 0xF0, 0x2D, 0x9E, + 0xA2, 0x0C, 0x1E, 0x84, 0xCB, 0x8E, 0x57, 0x57, + 0xC9, 0xE1, 0x89, 0x6B, 0x60, 0x58, 0x14, 0x41, + 0xED, 0x61, 0x8A, 0xA5, 0xB2, 0x6D, 0xA5, 0x6C, + 0x0A, 0x5A, 0x73, 0xC4, 0xDC, 0xFD, 0x75, 0x5E, + 0x61, 0x0B, 0x4F, 0xC8, 0x1F, 0xF8, 0x4E, 0x21 + }; + static const byte dk_1024[WC_ML_KEM_1024_PRIVATE_KEY_SIZE] = { + 0x8C, 0x8B, 0x37, 0x22, 0xA8, 0x2E, 0x55, 0x05, + 0x65, 0x52, 0x16, 0x11, 0xEB, 0xBC, 0x63, 0x07, + 0x99, 0x44, 0xC9, 0xB1, 0xAB, 0xB3, 0xB0, 0x02, + 0x0F, 0xF1, 0x2F, 0x63, 0x18, 0x91, 0xA9, 0xC4, + 0x68, 0xD3, 0xA6, 0x7B, 0xF6, 0x27, 0x12, 0x80, + 0xDA, 0x58, 0xD0, 0x3C, 0xB0, 0x42, 0xB3, 0xA4, + 0x61, 0x44, 0x16, 0x37, 0xF9, 0x29, 0xC2, 0x73, + 0x46, 0x9A, 0xD1, 0x53, 0x11, 0xE9, 0x10, 0xDE, + 0x18, 0xCB, 0x95, 0x37, 0xBA, 0x1B, 0xE4, 0x2E, + 0x98, 0xBB, 0x59, 0xE4, 0x98, 0xA1, 0x3F, 0xD4, + 0x40, 0xD0, 0xE6, 0x9E, 0xE8, 0x32, 0xB4, 0x5C, + 0xD9, 0x5C, 0x38, 0x21, 0x77, 0xD6, 0x70, 0x96, + 0xA1, 0x8C, 0x07, 0xF1, 0x78, 0x16, 0x63, 0x65, + 0x1B, 0xDC, 0xAC, 0x90, 0xDE, 0xDA, 0x3D, 0xDD, + 0x14, 0x34, 0x85, 0x86, 0x41, 0x81, 0xC9, 0x1F, + 0xA2, 0x08, 0x0F, 0x6D, 0xAB, 0x3F, 0x86, 0x20, + 0x4C, 0xEB, 0x64, 0xA7, 0xB4, 0x44, 0x68, 0x95, + 0xC0, 0x39, 0x87, 0xA0, 0x31, 0xCB, 0x4B, 0x6D, + 0x9E, 0x04, 0x62, 0xFD, 0xA8, 0x29, 0x17, 0x2B, + 0x6C, 0x01, 0x2C, 0x63, 0x8B, 0x29, 0xB5, 0xCD, + 0x75, 0xA2, 0xC9, 0x30, 0xA5, 0x59, 0x6A, 0x31, + 0x81, 0xC3, 0x3A, 0x22, 0xD5, 0x74, 0xD3, 0x02, + 0x61, 0x19, 0x6B, 0xC3, 0x50, 0x73, 0x8D, 0x4F, + 0xD9, 0x18, 0x3A, 0x76, 0x33, 0x36, 0x24, 0x3A, + 0xCE, 0xD9, 0x9B, 0x32, 0x21, 0xC7, 0x1D, 0x88, + 0x66, 0x89, 0x5C, 0x4E, 0x52, 0xC1, 0x19, 0xBF, + 0x32, 0x80, 0xDA, 0xF8, 0x0A, 0x95, 0xE1, 0x52, + 0x09, 0xA7, 0x95, 0xC4, 0x43, 0x5F, 0xBB, 0x35, + 0x70, 0xFD, 0xB8, 0xAA, 0x9B, 0xF9, 0xAE, 0xFD, + 0x43, 0xB0, 0x94, 0xB7, 0x81, 0xD5, 0xA8, 0x11, + 0x36, 0xDA, 0xB8, 0x8B, 0x87, 0x99, 0x69, 0x65, + 0x56, 0xFE, 0xC6, 0xAE, 0x14, 0xB0, 0xBB, 0x8B, + 0xE4, 0x69, 0x5E, 0x9A, 0x12, 0x4C, 0x2A, 0xB8, + 0xFF, 0x4A, 0xB1, 0x22, 0x9B, 0x8A, 0xAA, 0x8C, + 0x6F, 0x41, 0xA6, 0x0C, 0x34, 0xC7, 0xB5, 0x61, + 0x82, 0xC5, 0x5C, 0x2C, 0x68, 0x5E, 0x73, 0x7C, + 0x6C, 0xA0, 0x0A, 0x23, 0xFB, 0x8A, 0x68, 0xC1, + 0xCD, 0x61, 0xF3, 0x0D, 0x39, 0x93, 0xA1, 0x65, + 0x3C, 0x16, 0x75, 0xAC, 0x5F, 0x09, 0x01, 0xA7, + 0x16, 0x0A, 0x73, 0x96, 0x64, 0x08, 0xB8, 0x87, + 0x6B, 0x71, 0x53, 0x96, 0xCF, 0xA4, 0x90, 0x3F, + 0xC6, 0x9D, 0x60, 0x49, 0x1F, 0x81, 0x46, 0x80, + 0x8C, 0x97, 0xCD, 0x5C, 0x53, 0x3E, 0x71, 0x01, + 0x79, 0x09, 0xE9, 0x7B, 0x83, 0x5B, 0x86, 0xFF, + 0x84, 0x7B, 0x42, 0xA6, 0x96, 0x37, 0x54, 0x35, + 0xE0, 0x06, 0x06, 0x1C, 0xF7, 0xA4, 0x79, 0x46, + 0x32, 0x72, 0x11, 0x4A, 0x89, 0xEB, 0x3E, 0xAF, + 0x22, 0x46, 0xF0, 0xF8, 0xC1, 0x04, 0xA1, 0x49, + 0x86, 0x82, 0x8E, 0x0A, 0xD2, 0x04, 0x20, 0xC9, + 0xB3, 0x7E, 0xA2, 0x3F, 0x5C, 0x51, 0x49, 0x49, + 0xE7, 0x7A, 0xD9, 0xE9, 0xAD, 0x12, 0x29, 0x0D, + 0xD1, 0x21, 0x5E, 0x11, 0xDA, 0x27, 0x44, 0x57, + 0xAC, 0x86, 0xB1, 0xCE, 0x68, 0x64, 0xB1, 0x22, + 0x67, 0x7F, 0x37, 0x18, 0xAA, 0x31, 0xB0, 0x25, + 0x80, 0xE6, 0x43, 0x17, 0x17, 0x8D, 0x38, 0xF2, + 0x5F, 0x60, 0x9B, 0xC6, 0xC5, 0x5B, 0xC3, 0x74, + 0xA1, 0xBF, 0x78, 0xEA, 0x8E, 0xCC, 0x21, 0x9B, + 0x30, 0xB7, 0x4C, 0xBB, 0x32, 0x72, 0xA5, 0x99, + 0x23, 0x8C, 0x93, 0x98, 0x51, 0x70, 0x04, 0x8F, + 0x17, 0x67, 0x75, 0xFB, 0x19, 0x96, 0x2A, 0xC3, + 0xB1, 0x35, 0xAA, 0x59, 0xDB, 0x10, 0x4F, 0x71, + 0x14, 0xDB, 0xC2, 0xC2, 0xD4, 0x29, 0x49, 0xAD, + 0xEC, 0xA6, 0xA8, 0x5B, 0x32, 0x3E, 0xE2, 0xB2, + 0xB2, 0x3A, 0x77, 0xD9, 0xDB, 0x23, 0x59, 0x79, + 0xA8, 0xE2, 0xD6, 0x7C, 0xF7, 0xD2, 0x13, 0x6B, + 0xBB, 0xA7, 0x1F, 0x26, 0x95, 0x74, 0xB3, 0x88, + 0x88, 0xE1, 0x54, 0x13, 0x40, 0xC1, 0x92, 0x84, + 0x07, 0x4F, 0x9B, 0x7C, 0x8C, 0xF3, 0x7E, 0xB0, + 0x13, 0x84, 0xE6, 0xE3, 0x82, 0x2E, 0xC4, 0x88, + 0x2D, 0xFB, 0xBE, 0xC4, 0xE6, 0x09, 0x8E, 0xF2, + 0xB2, 0xFC, 0x17, 0x7A, 0x1F, 0x0B, 0xCB, 0x65, + 0xA5, 0x7F, 0xDA, 0xA8, 0x93, 0x15, 0x46, 0x1B, + 0xEB, 0x78, 0x85, 0xFB, 0x68, 0xB3, 0xCD, 0x09, + 0x6E, 0xDA, 0x59, 0x6A, 0xC0, 0xE6, 0x1D, 0xD7, + 0xA9, 0xC5, 0x07, 0xBC, 0x63, 0x45, 0xE0, 0x82, + 0x7D, 0xFC, 0xC8, 0xA3, 0xAC, 0x2D, 0xCE, 0x51, + 0xAD, 0x73, 0x1A, 0xA0, 0xEB, 0x93, 0x2A, 0x6D, + 0x09, 0x83, 0x99, 0x23, 0x47, 0xCB, 0xEB, 0x3C, + 0xD0, 0xD9, 0xC9, 0x71, 0x97, 0x97, 0xCC, 0x21, + 0xCF, 0x00, 0x62, 0xB0, 0xAD, 0x94, 0xCA, 0xD7, + 0x34, 0xC6, 0x3E, 0x6B, 0x5D, 0x85, 0x9C, 0xBE, + 0x19, 0xF0, 0x36, 0x82, 0x45, 0x35, 0x1B, 0xF4, + 0x64, 0xD7, 0x50, 0x55, 0x69, 0x79, 0x0D, 0x2B, + 0xB7, 0x24, 0xD8, 0x65, 0x9A, 0x9F, 0xEB, 0x1C, + 0x7C, 0x47, 0x3D, 0xC4, 0xD0, 0x61, 0xE2, 0x98, + 0x63, 0xA2, 0x71, 0x4B, 0xAC, 0x42, 0xAD, 0xCD, + 0x1A, 0x83, 0x72, 0x77, 0x65, 0x56, 0xF7, 0x92, + 0x8A, 0x7A, 0x44, 0xE9, 0x4B, 0x6A, 0x25, 0x32, + 0x2D, 0x03, 0xC0, 0xA1, 0x62, 0x2A, 0x7F, 0xD2, + 0x61, 0x52, 0x2B, 0x73, 0x58, 0xF0, 0x85, 0xBD, + 0xFB, 0x60, 0x75, 0x87, 0x62, 0xCB, 0x90, 0x10, + 0x31, 0x90, 0x1B, 0x5E, 0xEC, 0xF4, 0x92, 0x0C, + 0x81, 0x02, 0x0A, 0x9B, 0x17, 0x81, 0xBC, 0xB9, + 0xDD, 0x19, 0xA9, 0xDF, 0xB6, 0x64, 0x58, 0xE7, + 0x75, 0x7C, 0x52, 0xCE, 0xC7, 0x5B, 0x4B, 0xA7, + 0x40, 0xA2, 0x40, 0x99, 0xCB, 0x56, 0xBB, 0x60, + 0xA7, 0x6B, 0x69, 0x01, 0xAA, 0x3E, 0x01, 0x69, + 0xC9, 0xE8, 0x34, 0x96, 0xD7, 0x3C, 0x4C, 0x99, + 0x43, 0x5A, 0x28, 0xD6, 0x13, 0xE9, 0x7A, 0x11, + 0x77, 0xF5, 0x8B, 0x6C, 0xC5, 0x95, 0xD3, 0xB2, + 0x33, 0x1E, 0x9C, 0xA7, 0xB5, 0x7B, 0x74, 0xDC, + 0x2C, 0x52, 0x77, 0xD2, 0x6F, 0x2F, 0xE1, 0x92, + 0x40, 0xA5, 0x5C, 0x35, 0xD6, 0xCF, 0xCA, 0x26, + 0xC7, 0x3E, 0x9A, 0x2D, 0x7C, 0x98, 0x0D, 0x97, + 0x96, 0x0A, 0xE1, 0xA0, 0x46, 0x98, 0xC1, 0x6B, + 0x39, 0x8A, 0x5F, 0x20, 0xC3, 0x5A, 0x09, 0x14, + 0x14, 0x5C, 0xE1, 0x67, 0x4B, 0x71, 0xAB, 0xC6, + 0x06, 0x6A, 0x90, 0x9A, 0x3E, 0x4B, 0x91, 0x1E, + 0x69, 0xD5, 0xA8, 0x49, 0x43, 0x03, 0x61, 0xF7, + 0x31, 0xB0, 0x72, 0x46, 0xA6, 0x32, 0x9B, 0x52, + 0x36, 0x19, 0x04, 0x22, 0x50, 0x82, 0xD0, 0xAA, + 0xC5, 0xB2, 0x1D, 0x6B, 0x34, 0x86, 0x24, 0x81, + 0xA8, 0x90, 0xC3, 0xC3, 0x60, 0x76, 0x6F, 0x04, + 0x26, 0x36, 0x03, 0xA6, 0xB7, 0x3E, 0x80, 0x2B, + 0x1F, 0x70, 0xB2, 0xEB, 0x00, 0x04, 0x68, 0x36, + 0xB8, 0xF4, 0x93, 0xBF, 0x10, 0xB9, 0x0B, 0x87, + 0x37, 0xC6, 0xC5, 0x48, 0x44, 0x9B, 0x29, 0x4C, + 0x47, 0x25, 0x3B, 0xE2, 0x6C, 0xA7, 0x23, 0x36, + 0xA6, 0x32, 0x06, 0x3A, 0xD3, 0xD0, 0xB4, 0x8C, + 0x8B, 0x0F, 0x4A, 0x34, 0x44, 0x7E, 0xF1, 0x3B, + 0x76, 0x40, 0x20, 0xDE, 0x73, 0x9E, 0xB7, 0x9A, + 0xBA, 0x20, 0xE2, 0xBE, 0x19, 0x51, 0x82, 0x5F, + 0x29, 0x3B, 0xED, 0xD1, 0x08, 0x9F, 0xCB, 0x0A, + 0x91, 0xF5, 0x60, 0xC8, 0xE1, 0x7C, 0xDF, 0x52, + 0x54, 0x1D, 0xC2, 0xB8, 0x1F, 0x97, 0x2A, 0x73, + 0x75, 0xB2, 0x01, 0xF1, 0x0C, 0x08, 0xD9, 0xB5, + 0xBC, 0x8B, 0x95, 0x10, 0x00, 0x54, 0xA3, 0xD0, + 0xAA, 0xFF, 0x89, 0xBD, 0x08, 0xD6, 0xA0, 0xE7, + 0xF2, 0x11, 0x5A, 0x43, 0x52, 0x31, 0x29, 0x04, + 0x60, 0xC9, 0xAD, 0x43, 0x5A, 0x3B, 0x3C, 0xF3, + 0x5E, 0x52, 0x09, 0x1E, 0xDD, 0x18, 0x90, 0x04, + 0x7B, 0xCC, 0x0A, 0xAB, 0xB1, 0xAC, 0xEB, 0xC7, + 0x5F, 0x4A, 0x32, 0xBC, 0x14, 0x51, 0xAC, 0xC4, + 0x96, 0x99, 0x40, 0x78, 0x8E, 0x89, 0x41, 0x21, + 0x88, 0x94, 0x6C, 0x91, 0x43, 0xC5, 0x04, 0x6B, + 0xD1, 0xB4, 0x58, 0xDF, 0x61, 0x7C, 0x5D, 0xF5, + 0x33, 0xB0, 0x52, 0xCD, 0x60, 0x38, 0xB7, 0x75, + 0x40, 0x34, 0xA2, 0x3C, 0x2F, 0x77, 0x20, 0x13, + 0x4C, 0x7B, 0x4E, 0xAC, 0xE0, 0x1F, 0xAC, 0x0A, + 0x28, 0x53, 0xA9, 0x28, 0x58, 0x47, 0xAB, 0xBD, + 0x06, 0xA3, 0x34, 0x3A, 0x77, 0x8A, 0xC6, 0x06, + 0x2E, 0x45, 0x8B, 0xC5, 0xE6, 0x1E, 0xCE, 0x1C, + 0x0D, 0xE0, 0x20, 0x6E, 0x6F, 0xE8, 0xA8, 0x40, + 0x34, 0xA7, 0xC5, 0xF1, 0xB0, 0x05, 0xFB, 0x0A, + 0x58, 0x40, 0x51, 0xD3, 0x22, 0x9B, 0x86, 0xC9, + 0x09, 0xAC, 0x56, 0x47, 0xB3, 0xD7, 0x55, 0x69, + 0xE0, 0x5A, 0x88, 0x27, 0x9D, 0x80, 0xE5, 0xC3, + 0x0F, 0x57, 0x4D, 0xC3, 0x27, 0x51, 0x2C, 0x6B, + 0xBE, 0x81, 0x01, 0x23, 0x9E, 0xC6, 0x28, 0x61, + 0xF4, 0xBE, 0x67, 0xB0, 0x5B, 0x9C, 0xDA, 0x9C, + 0x54, 0x5C, 0x13, 0xE7, 0xEB, 0x53, 0xCF, 0xF2, + 0x60, 0xAD, 0x98, 0x70, 0x19, 0x9C, 0x21, 0xF8, + 0xC6, 0x3D, 0x64, 0xF0, 0x45, 0x8A, 0x71, 0x41, + 0x28, 0x50, 0x23, 0xFE, 0xB8, 0x29, 0x29, 0x08, + 0x72, 0x38, 0x96, 0x44, 0xB0, 0xC3, 0xB7, 0x3A, + 0xC2, 0xC8, 0xE1, 0x21, 0xA2, 0x9B, 0xB1, 0xC4, + 0x3C, 0x19, 0xA2, 0x33, 0xD5, 0x6B, 0xED, 0x82, + 0x74, 0x0E, 0xB0, 0x21, 0xC9, 0x7B, 0x8E, 0xBB, + 0xA4, 0x0F, 0xF3, 0x28, 0xB5, 0x41, 0x76, 0x0F, + 0xCC, 0x37, 0x2B, 0x52, 0xD3, 0xBC, 0x4F, 0xCB, + 0xC0, 0x6F, 0x42, 0x4E, 0xAF, 0x25, 0x38, 0x04, + 0xD4, 0xCB, 0x46, 0xF4, 0x1F, 0xF2, 0x54, 0xC0, + 0xC5, 0xBA, 0x48, 0x3B, 0x44, 0xA8, 0x7C, 0x21, + 0x96, 0x54, 0x55, 0x5E, 0xC7, 0xC1, 0x63, 0xC7, + 0x9B, 0x9C, 0xB7, 0x60, 0xA2, 0xAD, 0x9B, 0xB7, + 0x22, 0xB9, 0x3E, 0x0C, 0x28, 0xBD, 0x4B, 0x16, + 0x85, 0x94, 0x9C, 0x49, 0x6E, 0xAB, 0x1A, 0xFF, + 0x90, 0x91, 0x9E, 0x37, 0x61, 0xB3, 0x46, 0x83, + 0x8A, 0xBB, 0x2F, 0x01, 0xA9, 0x1E, 0x55, 0x43, + 0x75, 0xAF, 0xDA, 0xAA, 0xF3, 0x82, 0x6E, 0x6D, + 0xB7, 0x9F, 0xE7, 0x35, 0x3A, 0x7A, 0x57, 0x8A, + 0x7C, 0x05, 0x98, 0xCE, 0x28, 0xB6, 0xD9, 0x91, + 0x52, 0x14, 0x23, 0x6B, 0xBF, 0xFA, 0x6D, 0x45, + 0xB6, 0x37, 0x6A, 0x07, 0x92, 0x4A, 0x39, 0xA7, + 0xBE, 0x81, 0x82, 0x86, 0x71, 0x5C, 0x8A, 0x3C, + 0x11, 0x0C, 0xD7, 0x6C, 0x02, 0xE0, 0x41, 0x7A, + 0xF1, 0x38, 0xBD, 0xB9, 0x5C, 0x3C, 0xCA, 0x79, + 0x8A, 0xC8, 0x09, 0xED, 0x69, 0xCF, 0xB6, 0x72, + 0xB6, 0xFD, 0xDC, 0x24, 0xD8, 0x9C, 0x06, 0xA6, + 0x55, 0x88, 0x14, 0xAB, 0x0C, 0x21, 0xC6, 0x2B, + 0x2F, 0x84, 0xC0, 0xE3, 0xE0, 0x80, 0x3D, 0xB3, + 0x37, 0xA4, 0xE0, 0xC7, 0x12, 0x7A, 0x6B, 0x4C, + 0x8C, 0x08, 0xB1, 0xD1, 0xA7, 0x6B, 0xF0, 0x7E, + 0xB6, 0xE5, 0xB5, 0xBB, 0x47, 0xA1, 0x6C, 0x74, + 0xBC, 0x54, 0x83, 0x75, 0xFB, 0x29, 0xCD, 0x78, + 0x9A, 0x5C, 0xFF, 0x91, 0xBD, 0xBD, 0x07, 0x18, + 0x59, 0xF4, 0x84, 0x6E, 0x35, 0x5B, 0xB0, 0xD2, + 0x94, 0x84, 0xE2, 0x64, 0xDF, 0xF3, 0x6C, 0x91, + 0x77, 0xA7, 0xAC, 0xA7, 0x89, 0x08, 0x87, 0x96, + 0x95, 0xCA, 0x87, 0xF2, 0x54, 0x36, 0xBC, 0x12, + 0x63, 0x07, 0x24, 0xBB, 0x22, 0xF0, 0xCB, 0x64, + 0x89, 0x7F, 0xE5, 0xC4, 0x11, 0x95, 0x28, 0x0D, + 0xA0, 0x41, 0x84, 0xD4, 0xBC, 0x7B, 0x53, 0x2A, + 0x0F, 0x70, 0xA5, 0x4D, 0x77, 0x57, 0xCD, 0xE6, + 0x17, 0x5A, 0x68, 0x43, 0xB8, 0x61, 0xCB, 0x2B, + 0xC4, 0x83, 0x0C, 0x00, 0x12, 0x55, 0x4C, 0xFC, + 0x5D, 0x2C, 0x8A, 0x20, 0x27, 0xAA, 0x3C, 0xD9, + 0x67, 0x13, 0x0E, 0x9B, 0x96, 0x24, 0x1B, 0x11, + 0xC4, 0x32, 0x0C, 0x76, 0x49, 0xCC, 0x23, 0xA7, + 0x1B, 0xAF, 0xE6, 0x91, 0xAF, 0xC0, 0x8E, 0x68, + 0x0B, 0xCE, 0xF4, 0x29, 0x07, 0x00, 0x07, 0x18, + 0xE4, 0xEA, 0xCE, 0x8D, 0xA2, 0x82, 0x14, 0x19, + 0x7B, 0xE1, 0xC2, 0x69, 0xDA, 0x9C, 0xB5, 0x41, + 0xE1, 0xA3, 0xCE, 0x97, 0xCF, 0xAD, 0xF9, 0xC6, + 0x05, 0x87, 0x80, 0xFE, 0x67, 0x93, 0xDB, 0xFA, + 0x82, 0x18, 0xA2, 0x76, 0x0B, 0x80, 0x2B, 0x8D, + 0xA2, 0xAA, 0x27, 0x1A, 0x38, 0x77, 0x25, 0x23, + 0xA7, 0x67, 0x36, 0xA7, 0xA3, 0x1B, 0x9D, 0x30, + 0x37, 0xAD, 0x21, 0xCE, 0xBB, 0x11, 0xA4, 0x72, + 0xB8, 0x79, 0x2E, 0xB1, 0x75, 0x58, 0xB9, 0x40, + 0xE7, 0x08, 0x83, 0xF2, 0x64, 0x59, 0x2C, 0x68, + 0x9B, 0x24, 0x0B, 0xB4, 0x3D, 0x54, 0x08, 0xBF, + 0x44, 0x64, 0x32, 0xF4, 0x12, 0xF4, 0xB9, 0xA5, + 0xF6, 0x86, 0x5C, 0xC2, 0x52, 0xA4, 0x3C, 0xF4, + 0x0A, 0x32, 0x03, 0x91, 0x55, 0x55, 0x91, 0xD6, + 0x75, 0x61, 0xFD, 0xD0, 0x53, 0x53, 0xAB, 0x6B, + 0x01, 0x9B, 0x3A, 0x08, 0xA7, 0x33, 0x53, 0xD5, + 0x1B, 0x61, 0x13, 0xAB, 0x2F, 0xA5, 0x1D, 0x97, + 0x56, 0x48, 0xEE, 0x25, 0x4A, 0xF8, 0x9A, 0x23, + 0x05, 0x04, 0xA2, 0x36, 0xA4, 0x65, 0x82, 0x57, + 0x74, 0x0B, 0xDC, 0xBB, 0xE1, 0x70, 0x8A, 0xB0, + 0x22, 0xC3, 0xC5, 0x88, 0xA4, 0x10, 0xDB, 0x3B, + 0x9C, 0x30, 0x8A, 0x06, 0x27, 0x5B, 0xDF, 0x5B, + 0x48, 0x59, 0xD3, 0xA2, 0x61, 0x7A, 0x29, 0x5E, + 0x1A, 0x22, 0xF9, 0x01, 0x98, 0xBA, 0xD0, 0x16, + 0x6F, 0x4A, 0x94, 0x34, 0x17, 0xC5, 0xB8, 0x31, + 0x73, 0x6C, 0xB2, 0xC8, 0x58, 0x0A, 0xBF, 0xDE, + 0x57, 0x14, 0xB5, 0x86, 0xAB, 0xEE, 0xC0, 0xA1, + 0x75, 0xA0, 0x8B, 0xC7, 0x10, 0xC7, 0xA2, 0x89, + 0x5D, 0xE9, 0x3A, 0xC4, 0x38, 0x06, 0x1B, 0xF7, + 0x76, 0x5D, 0x0D, 0x21, 0xCD, 0x41, 0x81, 0x67, + 0xCA, 0xF8, 0x9D, 0x1E, 0xFC, 0x34, 0x48, 0xBC, + 0xBB, 0x96, 0xD6, 0x9B, 0x3E, 0x01, 0x0C, 0x82, + 0xD1, 0x5C, 0xAB, 0x6C, 0xAC, 0xC6, 0x79, 0x9D, + 0x36, 0x39, 0x66, 0x9A, 0x5B, 0x21, 0xA6, 0x33, + 0xC8, 0x65, 0xF8, 0x59, 0x3B, 0x5B, 0x7B, 0xC8, + 0x00, 0x26, 0x2B, 0xB8, 0x37, 0xA9, 0x24, 0xA6, + 0xC5, 0x44, 0x0E, 0x4F, 0xC7, 0x3B, 0x41, 0xB2, + 0x30, 0x92, 0xC3, 0x91, 0x2F, 0x4C, 0x6B, 0xEB, + 0xB4, 0xC7, 0xB4, 0xC6, 0x29, 0x08, 0xB0, 0x37, + 0x75, 0x66, 0x6C, 0x22, 0x22, 0x0D, 0xF9, 0xC8, + 0x88, 0x23, 0xE3, 0x44, 0xC7, 0x30, 0x83, 0x32, + 0x34, 0x5C, 0x8B, 0x79, 0x5D, 0x34, 0xE8, 0xC0, + 0x51, 0xF2, 0x1F, 0x5A, 0x21, 0xC2, 0x14, 0xB6, + 0x98, 0x41, 0x35, 0x87, 0x09, 0xB1, 0xC3, 0x05, + 0xB3, 0x2C, 0xC2, 0xC3, 0x80, 0x6A, 0xE9, 0xCC, + 0xD3, 0x81, 0x9F, 0xFF, 0x45, 0x07, 0xFE, 0x52, + 0x0F, 0xBF, 0xC2, 0x71, 0x99, 0xBC, 0x23, 0xBE, + 0x6B, 0x9B, 0x2D, 0x2A, 0xC1, 0x71, 0x75, 0x79, + 0xAC, 0x76, 0x92, 0x79, 0xE2, 0xA7, 0xAA, 0xC6, + 0x8A, 0x37, 0x1A, 0x47, 0xBA, 0x3A, 0x7D, 0xBE, + 0x01, 0x6F, 0x14, 0xE1, 0xA7, 0x27, 0x33, 0x36, + 0x63, 0xC4, 0xA5, 0xCD, 0x1A, 0x0F, 0x88, 0x36, + 0xCF, 0x7B, 0x5C, 0x49, 0xAC, 0x51, 0x48, 0x5C, + 0xA6, 0x03, 0x45, 0xC9, 0x90, 0xE0, 0x68, 0x88, + 0x72, 0x00, 0x03, 0x73, 0x13, 0x22, 0xC5, 0xB8, + 0xCD, 0x5E, 0x69, 0x07, 0xFD, 0xA1, 0x15, 0x7F, + 0x46, 0x8F, 0xD3, 0xFC, 0x20, 0xFA, 0x81, 0x75, + 0xEE, 0xC9, 0x5C, 0x29, 0x1A, 0x26, 0x2B, 0xA8, + 0xC5, 0xBE, 0x99, 0x08, 0x72, 0x41, 0x89, 0x30, + 0x85, 0x23, 0x39, 0xD8, 0x8A, 0x19, 0xB3, 0x7F, + 0xEF, 0xA3, 0xCF, 0xE8, 0x21, 0x75, 0xC2, 0x24, + 0x40, 0x7C, 0xA4, 0x14, 0xBA, 0xEB, 0x37, 0x92, + 0x3B, 0x4D, 0x2D, 0x83, 0x13, 0x4A, 0xE1, 0x54, + 0xE4, 0x90, 0xA9, 0xB4, 0x5A, 0x05, 0x63, 0xB0, + 0x6C, 0x95, 0x3C, 0x33, 0x01, 0x45, 0x0A, 0x21, + 0x76, 0xA0, 0x7C, 0x61, 0x4A, 0x74, 0xE3, 0x47, + 0x8E, 0x48, 0x50, 0x9F, 0x9A, 0x60, 0xAE, 0x94, + 0x5A, 0x8E, 0xBC, 0x78, 0x15, 0x12, 0x1D, 0x90, + 0xA3, 0xB0, 0xE0, 0x70, 0x91, 0xA0, 0x96, 0xCF, + 0x02, 0xC5, 0x7B, 0x25, 0xBC, 0xA5, 0x81, 0x26, + 0xAD, 0x0C, 0x62, 0x9C, 0xE1, 0x66, 0xA7, 0xED, + 0xB4, 0xB3, 0x32, 0x21, 0xA0, 0xD3, 0xF7, 0x2B, + 0x85, 0xD5, 0x62, 0xEC, 0x69, 0x8B, 0x7D, 0x0A, + 0x91, 0x3D, 0x73, 0x80, 0x6F, 0x1C, 0x5C, 0x87, + 0xB3, 0x8E, 0xC0, 0x03, 0xCB, 0x30, 0x3A, 0x3D, + 0xC5, 0x1B, 0x4B, 0x35, 0x35, 0x6A, 0x67, 0x82, + 0x6D, 0x6E, 0xDA, 0xA8, 0xFE, 0xB9, 0x3B, 0x98, + 0x49, 0x3B, 0x2D, 0x1C, 0x11, 0xB6, 0x76, 0xA6, + 0xAD, 0x95, 0x06, 0xA1, 0xAA, 0xAE, 0x13, 0xA8, + 0x24, 0xC7, 0xC0, 0x8D, 0x1C, 0x6C, 0x2C, 0x4D, + 0xBA, 0x96, 0x42, 0xC7, 0x6E, 0xA7, 0xF6, 0xC8, + 0x26, 0x4B, 0x64, 0xA2, 0x3C, 0xCC, 0xA9, 0xA7, + 0x46, 0x35, 0xFC, 0xBF, 0x03, 0xE0, 0x0F, 0x1B, + 0x57, 0x22, 0xB2, 0x14, 0x37, 0x67, 0x90, 0x79, + 0x3B, 0x2C, 0x4F, 0x0A, 0x13, 0xB5, 0xC4, 0x07, + 0x60, 0xB4, 0x21, 0x8E, 0x1D, 0x25, 0x94, 0xDC, + 0xB3, 0x0A, 0x70, 0xD9, 0xC1, 0x78, 0x2A, 0x5D, + 0xD3, 0x05, 0x76, 0xFA, 0x41, 0x44, 0xBF, 0xC8, + 0x41, 0x6E, 0xDA, 0x81, 0x18, 0xFC, 0x64, 0x72, + 0xF5, 0x6A, 0x97, 0x95, 0x86, 0xF3, 0x3B, 0xB0, + 0x70, 0xFB, 0x0F, 0x1B, 0x0B, 0x10, 0xBC, 0x48, + 0x97, 0xEB, 0xE0, 0x1B, 0xCA, 0x38, 0x93, 0xD4, + 0xE1, 0x6A, 0xDB, 0x25, 0x09, 0x3A, 0x74, 0x17, + 0xD0, 0x70, 0x8C, 0x83, 0xA2, 0x63, 0x22, 0xE2, + 0x2E, 0x63, 0x30, 0x09, 0x1E, 0x30, 0x15, 0x2B, + 0xF8, 0x23, 0x59, 0x7C, 0x04, 0xCC, 0xF4, 0xCF, + 0xC7, 0x33, 0x15, 0x78, 0xF4, 0x3A, 0x27, 0x26, + 0xCC, 0xB4, 0x28, 0x28, 0x9A, 0x90, 0xC8, 0x63, + 0x25, 0x9D, 0xD1, 0x80, 0xC5, 0xFF, 0x14, 0x2B, + 0xEF, 0x41, 0xC7, 0x71, 0x70, 0x94, 0xBE, 0x07, + 0x85, 0x6D, 0xA2, 0xB1, 0x40, 0xFA, 0x67, 0x71, + 0x09, 0x67, 0x35, 0x6A, 0xA4, 0x7D, 0xFB, 0xC8, + 0xD2, 0x55, 0xB4, 0x72, 0x2A, 0xB8, 0x6D, 0x43, + 0x9B, 0x7E, 0x0A, 0x60, 0x90, 0x25, 0x1D, 0x2D, + 0x4C, 0x1E, 0xD5, 0xF2, 0x0B, 0xBE, 0x68, 0x07, + 0xBF, 0x65, 0xA9, 0x0B, 0x7C, 0xB2, 0xEC, 0x01, + 0x02, 0xAF, 0x02, 0x80, 0x9D, 0xC9, 0xAC, 0x7D, + 0x0A, 0x3A, 0xBC, 0x69, 0xC1, 0x83, 0x65, 0xBC, + 0xFF, 0x59, 0x18, 0x5F, 0x33, 0x99, 0x68, 0x87, + 0x74, 0x61, 0x85, 0x90, 0x6C, 0x01, 0x91, 0xAE, + 0xD4, 0x40, 0x7E, 0x13, 0x94, 0x46, 0x45, 0x9B, + 0xE2, 0x9C, 0x68, 0x22, 0x71, 0x76, 0x44, 0x35, + 0x3D, 0x24, 0xAB, 0x63, 0x39, 0x15, 0x6A, 0x9C, + 0x42, 0x49, 0x09, 0xF0, 0xA9, 0x02, 0x5B, 0xB7, + 0x47, 0x20, 0x77, 0x9B, 0xE4, 0x3F, 0x16, 0xD8, + 0x1C, 0x8C, 0xC6, 0x66, 0xE9, 0x97, 0x10, 0xD8, + 0xC6, 0x8B, 0xB5, 0xCC, 0x4E, 0x12, 0xF3, 0x14, + 0xE9, 0x25, 0xA5, 0x51, 0xF0, 0x9C, 0xC5, 0x90, + 0x03, 0xA1, 0xF8, 0x81, 0x03, 0xC2, 0x54, 0xBB, + 0x97, 0x8D, 0x75, 0xF3, 0x94, 0xD3, 0x54, 0x0E, + 0x31, 0xE7, 0x71, 0xCD, 0xA3, 0x6E, 0x39, 0xEC, + 0x54, 0xA6, 0x2B, 0x58, 0x32, 0x66, 0x4D, 0x82, + 0x1A, 0x72, 0xF1, 0xE6, 0xAF, 0xBB, 0xA2, 0x7F, + 0x84, 0x29, 0x5B, 0x26, 0x94, 0xC4, 0x98, 0x49, + 0x8E, 0x81, 0x2B, 0xC8, 0xE9, 0x37, 0x8F, 0xE5, + 0x41, 0xCE, 0xC5, 0x89, 0x1B, 0x25, 0x06, 0x29, + 0x01, 0xCB, 0x72, 0x12, 0xE3, 0xCD, 0xC4, 0x61, + 0x79, 0xEC, 0x5B, 0xCE, 0xC1, 0x0B, 0xC0, 0xB9, + 0x31, 0x1D, 0xE0, 0x50, 0x74, 0x29, 0x06, 0x87, + 0xFD, 0x6A, 0x53, 0x92, 0x67, 0x16, 0x54, 0x28, + 0x4C, 0xD9, 0xC8, 0xCC, 0x3E, 0xBA, 0x80, 0xEB, + 0x3B, 0x66, 0x2E, 0xB5, 0x3E, 0xB7, 0x51, 0x16, + 0x70, 0x4A, 0x1F, 0xEB, 0x5C, 0x2D, 0x05, 0x63, + 0x38, 0x53, 0x28, 0x68, 0xDD, 0xF2, 0x4E, 0xB8, + 0x99, 0x2A, 0xB8, 0x56, 0x5D, 0x9E, 0x49, 0x0C, + 0xAD, 0xF1, 0x48, 0x04, 0x36, 0x0D, 0xAA, 0x90, + 0x71, 0x8E, 0xAB, 0x61, 0x6B, 0xAB, 0x07, 0x65, + 0xD3, 0x39, 0x87, 0xB4, 0x7E, 0xFB, 0x65, 0x99, + 0xC5, 0x56, 0x32, 0x35, 0xE6, 0x1E, 0x4B, 0xE6, + 0x70, 0xE9, 0x79, 0x55, 0xAB, 0x29, 0x2D, 0x97, + 0x32, 0xCB, 0x89, 0x30, 0x94, 0x8A, 0xC8, 0x2D, + 0xF2, 0x30, 0xAC, 0x72, 0x29, 0x7A, 0x23, 0x67, + 0x9D, 0x6B, 0x94, 0xC1, 0x7F, 0x13, 0x59, 0x48, + 0x32, 0x54, 0xFE, 0xDC, 0x2F, 0x05, 0x81, 0x9F, + 0x0D, 0x06, 0x9A, 0x44, 0x3B, 0x78, 0xE3, 0xFC, + 0x6C, 0x3E, 0xF4, 0x71, 0x4B, 0x05, 0xA3, 0xFC, + 0xA8, 0x1C, 0xBB, 0xA6, 0x02, 0x42, 0xA7, 0x06, + 0x0C, 0xD8, 0x85, 0xD8, 0xF3, 0x99, 0x81, 0xBB, + 0x18, 0x09, 0x2B, 0x23, 0xDA, 0xA5, 0x9F, 0xD9, + 0x57, 0x83, 0x88, 0x68, 0x8A, 0x09, 0xBB, 0xA0, + 0x79, 0xBC, 0x80, 0x9A, 0x54, 0x84, 0x3A, 0x60, + 0x38, 0x5E, 0x23, 0x10, 0xBB, 0xCB, 0xCC, 0x02, + 0x13, 0xCE, 0x3D, 0xFA, 0xAB, 0x33, 0xB4, 0x7F, + 0x9D, 0x63, 0x05, 0xBC, 0x95, 0xC6, 0x10, 0x78, + 0x13, 0xC5, 0x85, 0xC4, 0xB6, 0x57, 0xBF, 0x30, + 0x54, 0x28, 0x33, 0xB1, 0x49, 0x49, 0xF5, 0x73, + 0xC0, 0x61, 0x2A, 0xD5, 0x24, 0xBA, 0xAE, 0x69, + 0x59, 0x0C, 0x12, 0x77, 0xB8, 0x6C, 0x28, 0x65, + 0x71, 0xBF, 0x66, 0xB3, 0xCF, 0xF4, 0x6A, 0x38, + 0x58, 0xC0, 0x99, 0x06, 0xA7, 0x94, 0xDF, 0x4A, + 0x06, 0xE9, 0xD4, 0xB0, 0xA2, 0xE4, 0x3F, 0x10, + 0xF7, 0x2A, 0x6C, 0x6C, 0x47, 0xE5, 0x64, 0x6E, + 0x2C, 0x79, 0x9B, 0x71, 0xC3, 0x3E, 0xD2, 0xF0, + 0x1E, 0xEB, 0x45, 0x93, 0x8E, 0xB7, 0xA4, 0xE2, + 0xE2, 0x90, 0x8C, 0x53, 0x55, 0x8A, 0x54, 0x0D, + 0x35, 0x03, 0x69, 0xFA, 0x18, 0x9C, 0x61, 0x69, + 0x43, 0xF7, 0x98, 0x1D, 0x76, 0x18, 0xCF, 0x02, + 0xA5, 0xB0, 0xA2, 0xBC, 0xC4, 0x22, 0xE8, 0x57, + 0xD1, 0xA4, 0x78, 0x71, 0x25, 0x3D, 0x08, 0x29, + 0x3C, 0x1C, 0x17, 0x9B, 0xCD, 0xC0, 0x43, 0x70, + 0x69, 0x10, 0x74, 0x18, 0x20, 0x5F, 0xDB, 0x98, + 0x56, 0x62, 0x3B, 0x8C, 0xA6, 0xB6, 0x94, 0xC9, + 0x6C, 0x08, 0x4B, 0x17, 0xF1, 0x3B, 0xB6, 0xDF, + 0x12, 0xB2, 0xCF, 0xBB, 0xC2, 0xB0, 0xE0, 0xC3, + 0x4B, 0x00, 0xD0, 0xFC, 0xD0, 0xAE, 0xCF, 0xB2, + 0x79, 0x24, 0xF6, 0x98, 0x4E, 0x74, 0x7B, 0xE2, + 0xA0, 0x9D, 0x83, 0xA8, 0x66, 0x45, 0x90, 0xA8, + 0x07, 0x73, 0x31, 0x49, 0x1A, 0x4F, 0x7D, 0x72, + 0x08, 0x43, 0xF2, 0x3E, 0x65, 0x2C, 0x6F, 0xA8, + 0x40, 0x30, 0x8D, 0xB4, 0x02, 0x03, 0x37, 0xAA, + 0xD3, 0x79, 0x67, 0x03, 0x4A, 0x9F, 0xB5, 0x23, + 0xB6, 0x7C, 0xA7, 0x03, 0x30, 0xF0, 0x2D, 0x9E, + 0xA2, 0x0C, 0x1E, 0x84, 0xCB, 0x8E, 0x57, 0x57, + 0xC9, 0xE1, 0x89, 0x6B, 0x60, 0x58, 0x14, 0x41, + 0xED, 0x61, 0x8A, 0xA5, 0xB2, 0x6D, 0xA5, 0x6C, + 0x0A, 0x5A, 0x73, 0xC4, 0xDC, 0xFD, 0x75, 0x5E, + 0x61, 0x0B, 0x4F, 0xC8, 0x1F, 0xF8, 0x4E, 0x21, + 0xD2, 0xE5, 0x74, 0xDF, 0xD8, 0xCD, 0x0A, 0xE8, + 0x93, 0xAA, 0x7E, 0x12, 0x5B, 0x44, 0xB9, 0x24, + 0xF4, 0x52, 0x23, 0xEC, 0x09, 0xF2, 0xAD, 0x11, + 0x41, 0xEA, 0x93, 0xA6, 0x80, 0x50, 0xDB, 0xF6, + 0x99, 0xE3, 0x24, 0x68, 0x84, 0x18, 0x1F, 0x8E, + 0x1D, 0xD4, 0x4E, 0x0C, 0x76, 0x29, 0x09, 0x33, + 0x30, 0x22, 0x1F, 0xD6, 0x7D, 0x9B, 0x7D, 0x6E, + 0x15, 0x10, 0xB2, 0xDB, 0xAD, 0x87, 0x62, 0xF7 + }; +#endif + static byte pubKey[WC_ML_KEM_MAX_PUBLIC_KEY_SIZE]; + static byte privKey[WC_ML_KEM_MAX_PRIVATE_KEY_SIZE]; + + key = (KyberKey*)XMALLOC(sizeof(KyberKey), NULL, DYNAMIC_TYPE_TMP_BUFFER); + ExpectNotNull(key); + if (key != NULL) { + XMEMSET(key, 0, sizeof(KyberKey)); + } + +#ifndef WOLFSSL_NO_ML_KEM_512 + ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_512, key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_KyberKey_MakeKeyWithRandom(key, seed_512, sizeof(seed_512)), + 0); + ExpectIntEQ(wc_KyberKey_EncodePublicKey(key, pubKey, + WC_ML_KEM_512_PUBLIC_KEY_SIZE), 0); + ExpectIntEQ(wc_KyberKey_EncodePrivateKey(key, privKey, + WC_ML_KEM_512_PRIVATE_KEY_SIZE), 0); + ExpectIntEQ(XMEMCMP(pubKey, ek_512, WC_ML_KEM_512_PUBLIC_KEY_SIZE), 0); + ExpectIntEQ(XMEMCMP(privKey, dk_512, WC_ML_KEM_512_PRIVATE_KEY_SIZE), 0); + wc_KyberKey_Free(key); +#endif +#ifndef WOLFSSL_NO_ML_KEM_768 + ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_768, key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_KyberKey_MakeKeyWithRandom(key, seed_768, sizeof(seed_768)), + 0); + ExpectIntEQ(wc_KyberKey_EncodePublicKey(key, pubKey, + WC_ML_KEM_768_PUBLIC_KEY_SIZE), 0); + ExpectIntEQ(wc_KyberKey_EncodePrivateKey(key, privKey, + WC_ML_KEM_768_PRIVATE_KEY_SIZE), 0); + ExpectIntEQ(XMEMCMP(pubKey, ek_768, WC_ML_KEM_768_PUBLIC_KEY_SIZE), 0); + ExpectIntEQ(XMEMCMP(privKey, dk_768, WC_ML_KEM_768_PRIVATE_KEY_SIZE), 0); + wc_KyberKey_Free(key); +#endif +#ifndef WOLFSSL_NO_ML_KEM_1024 + ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_1024, key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_KyberKey_MakeKeyWithRandom(key, seed_1024, + sizeof(seed_1024)), 0); + ExpectIntEQ(wc_KyberKey_EncodePublicKey(key, pubKey, + WC_ML_KEM_1024_PUBLIC_KEY_SIZE), 0); + ExpectIntEQ(wc_KyberKey_EncodePrivateKey(key, privKey, + WC_ML_KEM_1024_PRIVATE_KEY_SIZE), 0); + ExpectIntEQ(XMEMCMP(pubKey, ek_1024, WC_ML_KEM_1024_PUBLIC_KEY_SIZE), 0); + ExpectIntEQ(XMEMCMP(privKey, dk_1024, WC_ML_KEM_1024_PRIVATE_KEY_SIZE), 0); + wc_KyberKey_Free(key); +#endif + + XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); +#endif + return EXPECT_RESULT(); +} + +int test_wc_mlkem_encapsulate_kats(void) +{ + EXPECT_DECLS; +#if defined(WOLFSSL_HAVE_KYBER) && defined(WOLFSSL_WC_KYBER) && \ + !defined(WOLFSSL_NO_ML_KEM) && !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) + KyberKey* key; +#ifndef WOLFSSL_NO_ML_KEM_512 + static const byte ek_512[WC_ML_KEM_512_PUBLIC_KEY_SIZE] = { + 0xDD, 0x19, 0x24, 0x93, 0x5A, 0xA8, 0xE6, 0x17, + 0xAF, 0x18, 0xB5, 0xA0, 0x65, 0xAC, 0x45, 0x72, + 0x77, 0x67, 0xEE, 0x89, 0x7C, 0xF4, 0xF9, 0x44, + 0x2B, 0x2A, 0xCE, 0x30, 0xC0, 0x23, 0x7B, 0x30, + 0x7D, 0x3E, 0x76, 0xBF, 0x8E, 0xEB, 0x78, 0xAD, + 0xDC, 0x4A, 0xAC, 0xD1, 0x64, 0x63, 0xD8, 0x60, + 0x2F, 0xD5, 0x48, 0x7B, 0x63, 0xC8, 0x8B, 0xB6, + 0x60, 0x27, 0xF3, 0x7D, 0x0D, 0x61, 0x4D, 0x6F, + 0x9C, 0x24, 0x60, 0x3C, 0x42, 0x94, 0x76, 0x64, + 0xAC, 0x43, 0x98, 0xC6, 0xC5, 0x23, 0x83, 0x46, + 0x9B, 0x4F, 0x97, 0x77, 0xE5, 0xEC, 0x72, 0x06, + 0x21, 0x0F, 0x3E, 0x5A, 0x79, 0x6B, 0xF4, 0x5C, + 0x53, 0x26, 0x8E, 0x25, 0xF3, 0x9A, 0xC2, 0x61, + 0xAF, 0x3B, 0xFA, 0x2E, 0xE7, 0x55, 0xBE, 0xB8, + 0xB6, 0x7A, 0xB3, 0xAC, 0x8D, 0xF6, 0xC6, 0x29, + 0xC1, 0x17, 0x6E, 0x9E, 0x3B, 0x96, 0x5E, 0x93, + 0x69, 0xF9, 0xB3, 0xB9, 0x2A, 0xD7, 0xC2, 0x09, + 0x55, 0x64, 0x1D, 0x99, 0x52, 0x6F, 0xE7, 0xB9, + 0xFE, 0x8C, 0x85, 0x08, 0x20, 0x27, 0x5C, 0xD9, + 0x64, 0x84, 0x92, 0x50, 0x09, 0x07, 0x33, 0xCE, + 0x12, 0x4E, 0xCF, 0x31, 0x66, 0x24, 0x37, 0x4B, + 0xD1, 0x8B, 0x7C, 0x35, 0x8C, 0x06, 0xE9, 0xC1, + 0x36, 0xEE, 0x12, 0x59, 0xA9, 0x24, 0x5A, 0xBC, + 0x55, 0xB9, 0x64, 0xD6, 0x89, 0xF5, 0xA0, 0x82, + 0x92, 0xD2, 0x82, 0x65, 0x65, 0x8E, 0xBB, 0x40, + 0xCB, 0xFE, 0x48, 0x8A, 0x22, 0x28, 0x27, 0x55, + 0x90, 0xAB, 0x9F, 0x32, 0xA3, 0x41, 0x09, 0x70, + 0x9C, 0x1C, 0x29, 0x1D, 0x4A, 0x23, 0x33, 0x72, + 0x74, 0xC7, 0xA5, 0xA5, 0x99, 0x1C, 0x7A, 0x87, + 0xB8, 0x1C, 0x97, 0x4A, 0xB1, 0x8C, 0xE7, 0x78, + 0x59, 0xE4, 0x99, 0x5E, 0x7C, 0x14, 0xF0, 0x37, + 0x17, 0x48, 0xB7, 0x71, 0x2F, 0xB5, 0x2C, 0x59, + 0x66, 0xCD, 0x63, 0x06, 0x3C, 0x4F, 0x3B, 0x81, + 0xB4, 0x7C, 0x45, 0xDD, 0xE8, 0x3F, 0xB3, 0xA2, + 0x72, 0x40, 0x29, 0xB1, 0x0B, 0x32, 0x30, 0x21, + 0x4C, 0x04, 0xFA, 0x05, 0x77, 0xFC, 0x29, 0xAC, + 0x90, 0x86, 0xAE, 0x18, 0xC5, 0x3B, 0x3E, 0xD4, + 0x4E, 0x50, 0x74, 0x12, 0xFC, 0xA0, 0x4B, 0x4F, + 0x53, 0x8A, 0x51, 0x58, 0x8E, 0xC1, 0xF1, 0x02, + 0x9D, 0x15, 0x2D, 0x9A, 0xE7, 0x73, 0x5F, 0x76, + 0xA0, 0x77, 0xAA, 0x94, 0x84, 0x38, 0x0A, 0xED, + 0x91, 0x89, 0xE5, 0x91, 0x24, 0x87, 0xFC, 0xC5, + 0xB7, 0xC7, 0x01, 0x2D, 0x92, 0x23, 0xDD, 0x96, + 0x7E, 0xEC, 0xDA, 0xC3, 0x00, 0x8A, 0x89, 0x31, + 0xB6, 0x48, 0x24, 0x35, 0x37, 0xF5, 0x48, 0xC1, + 0x71, 0x69, 0x8C, 0x5B, 0x38, 0x1D, 0x84, 0x6A, + 0x72, 0xE5, 0xC9, 0x2D, 0x42, 0x26, 0xC5, 0xA8, + 0x90, 0x98, 0x84, 0xF1, 0xC4, 0xA3, 0x40, 0x4C, + 0x17, 0x20, 0xA5, 0x27, 0x94, 0x14, 0xD7, 0xF2, + 0x7B, 0x2B, 0x98, 0x26, 0x52, 0xB6, 0x74, 0x02, + 0x19, 0xC5, 0x6D, 0x21, 0x77, 0x80, 0xD7, 0xA5, + 0xE5, 0xBA, 0x59, 0x83, 0x63, 0x49, 0xF7, 0x26, + 0x88, 0x1D, 0xEA, 0x18, 0xEF, 0x75, 0xC0, 0x77, + 0x2A, 0x8B, 0x92, 0x27, 0x66, 0x95, 0x37, 0x18, + 0xCA, 0xCC, 0x14, 0xCC, 0xBA, 0xCB, 0x5F, 0xC4, + 0x12, 0xA2, 0xD0, 0xBE, 0x52, 0x18, 0x17, 0x64, + 0x5A, 0xB2, 0xBF, 0x6A, 0x47, 0x85, 0xE9, 0x2B, + 0xC9, 0x4C, 0xAF, 0x47, 0x7A, 0x96, 0x78, 0x76, + 0x79, 0x6C, 0x0A, 0x51, 0x90, 0x31, 0x5A, 0xC0, + 0x88, 0x56, 0x71, 0xA4, 0xC7, 0x49, 0x56, 0x4C, + 0x3B, 0x2C, 0x7A, 0xED, 0x90, 0x64, 0xEB, 0xA2, + 0x99, 0xEF, 0x21, 0x4B, 0xA2, 0xF4, 0x04, 0x93, + 0x66, 0x7C, 0x8B, 0xD0, 0x32, 0xAE, 0xC5, 0x62, + 0x17, 0x11, 0xB4, 0x1A, 0x38, 0x52, 0xC5, 0xC2, + 0xBA, 0xB4, 0xA3, 0x49, 0xCE, 0x4B, 0x7F, 0x08, + 0x5A, 0x81, 0x2B, 0xBB, 0xC8, 0x20, 0xB8, 0x1B, + 0xEF, 0xE6, 0x3A, 0x05, 0xB8, 0xBC, 0xDF, 0xE9, + 0xC2, 0xA7, 0x0A, 0x8B, 0x1A, 0xCA, 0x9B, 0xF9, + 0x81, 0x64, 0x81, 0x90, 0x7F, 0xF4, 0x43, 0x24, + 0x61, 0x11, 0x12, 0x87, 0x30, 0x3F, 0x0B, 0xD8, + 0x17, 0xC0, 0x57, 0x26, 0xBF, 0xA1, 0x8A, 0x2E, + 0x24, 0xC7, 0x72, 0x49, 0x21, 0x02, 0x80, 0x32, + 0xF6, 0x22, 0xBD, 0x96, 0x0A, 0x31, 0x7D, 0x83, + 0xB3, 0x56, 0xB5, 0x7F, 0x4A, 0x80, 0x04, 0x49, + 0x9C, 0xBC, 0x73, 0xC9, 0x7D, 0x1E, 0xB7, 0x74, + 0x59, 0x72, 0x63, 0x1C, 0x05, 0x61, 0xC1, 0xA3, + 0xAB, 0x6E, 0xF9, 0x1B, 0xD3, 0x63, 0x28, 0x0A, + 0x10, 0x54, 0x5D, 0xA6, 0x93, 0xE6, 0xD5, 0x8A, + 0xED, 0x68, 0x45, 0xE7, 0xCC, 0x5F, 0x0D, 0x08, + 0xCA, 0x79, 0x05, 0x05, 0x2C, 0x77, 0x36, 0x6D, + 0x19, 0x72, 0xCC, 0xFC, 0xC1, 0xA2, 0x76, 0x10, + 0xCB, 0x54, 0x36, 0x65, 0xAA, 0x79, 0x8E, 0x20, + 0x94, 0x01, 0x28, 0xB9, 0x56, 0x7A, 0x7E, 0xDB, + 0x7A, 0x90, 0x04, 0x07, 0xC7, 0x0D, 0x35, 0x94, + 0x38, 0x43, 0x5E, 0x13, 0x96, 0x16, 0x08, 0xD5, + 0x52, 0xA9, 0x4C, 0x5C, 0xDA, 0x78, 0x59, 0x22, + 0x05, 0x09, 0xB4, 0x83, 0xC5, 0xC5, 0x2A, 0x21, + 0x0E, 0x9C, 0x81, 0x2B, 0xC0, 0xC2, 0x32, 0x8C, + 0xA0, 0x0E, 0x78, 0x9A, 0x56, 0xB2, 0x60, 0x6B, + 0x90, 0x29, 0x2E, 0x35, 0x43, 0xDA, 0xCA, 0xA2, + 0x43, 0x18, 0x41, 0xD6, 0x1A, 0x22, 0xCA, 0x90, + 0xC1, 0xCC, 0xF0, 0xB5, 0xB4, 0xE0, 0xA6, 0xF6, + 0x40, 0x53, 0x6D, 0x1A, 0x26, 0xAB, 0x5B, 0x8D, + 0x21, 0x51, 0x32, 0x79, 0x28, 0xCE, 0x02, 0x90, + 0x4C, 0xF1, 0xD1, 0x5E, 0x32, 0x78, 0x8A, 0x95, + 0xF6, 0x2D, 0x3C, 0x27, 0x0B, 0x6F, 0xA1, 0x50, + 0x8F, 0x97, 0xB9, 0x15, 0x5A, 0x27, 0x26, 0xD8, + 0x0A, 0x1A, 0xFA, 0x3C, 0x53, 0x87, 0xA2, 0x76, + 0xA4, 0xD0, 0x31, 0xA0, 0x8A, 0xBF, 0x4F, 0x2E, + 0x74, 0xF1, 0xA0, 0xBB, 0x8A, 0x0F, 0xD3, 0xCB + }; + static const byte seed_512[WC_ML_KEM_ENC_RAND_SZ] = { + 0x6F, 0xF0, 0x2E, 0x1D, 0xC7, 0xFD, 0x91, 0x1B, + 0xEE, 0xE0, 0xC6, 0x92, 0xC8, 0xBD, 0x10, 0x0C, + 0x3E, 0x5C, 0x48, 0x96, 0x4D, 0x31, 0xDF, 0x92, + 0x99, 0x42, 0x18, 0xE8, 0x06, 0x64, 0xA6, 0xCA + }; + static const byte c_512[WC_ML_KEM_512_CIPHER_TEXT_SIZE] = { + 0x19, 0xC5, 0x92, 0x50, 0x59, 0x07, 0xC2, 0x4C, + 0x5F, 0xA2, 0xEB, 0xFA, 0x93, 0x2D, 0x2C, 0xBB, + 0x48, 0xF3, 0xE4, 0x34, 0x0A, 0x28, 0xF7, 0xEB, + 0xA5, 0xD0, 0x68, 0xFC, 0xAC, 0xAB, 0xED, 0xF7, + 0x77, 0x84, 0xE2, 0xB2, 0x4D, 0x79, 0x61, 0x77, + 0x5F, 0x0B, 0xF1, 0xA9, 0x97, 0xAE, 0x8B, 0xA9, + 0xFC, 0x43, 0x11, 0xBE, 0x63, 0x71, 0x67, 0x79, + 0xC2, 0xB7, 0x88, 0xF8, 0x12, 0xCB, 0xB7, 0x8C, + 0x74, 0xE7, 0x51, 0x7E, 0x22, 0xE9, 0x10, 0xEF, + 0xF5, 0xF3, 0x8D, 0x44, 0x46, 0x9C, 0x50, 0xDE, + 0x16, 0x75, 0xAE, 0x19, 0x8F, 0xD6, 0xA2, 0x89, + 0xAE, 0x7E, 0x6C, 0x30, 0xA9, 0xD4, 0x35, 0x1B, + 0x3D, 0x1F, 0x4C, 0x36, 0xEF, 0xF9, 0xC6, 0x8D, + 0xA9, 0x1C, 0x40, 0xB8, 0x2D, 0xC9, 0xB2, 0x79, + 0x9A, 0x33, 0xA2, 0x6B, 0x60, 0xA4, 0xE7, 0x0D, + 0x71, 0x01, 0x86, 0x27, 0x79, 0x46, 0x9F, 0x3A, + 0x9D, 0xAE, 0xC8, 0xE3, 0xE8, 0xF8, 0xC6, 0xA1, + 0x6B, 0xF0, 0x92, 0xFB, 0xA5, 0x86, 0x61, 0x86, + 0xB8, 0xD2, 0x08, 0xFD, 0xEB, 0x27, 0x4A, 0xC1, + 0xF8, 0x29, 0x65, 0x9D, 0xC2, 0xBE, 0x4A, 0xC4, + 0xF3, 0x06, 0xCB, 0x55, 0x84, 0xBA, 0xD1, 0x93, + 0x6A, 0x92, 0xC9, 0xB7, 0x68, 0x19, 0x23, 0x42, + 0x81, 0xBB, 0x39, 0x58, 0x41, 0xC2, 0x57, 0x56, + 0x08, 0x6E, 0xA5, 0x64, 0xCA, 0x3E, 0x22, 0x7E, + 0x3D, 0x9F, 0x10, 0x52, 0xC0, 0x76, 0x6D, 0x2E, + 0xB7, 0x9A, 0x47, 0xC1, 0x50, 0x72, 0x1E, 0x0D, + 0xEA, 0x7C, 0x00, 0x69, 0xD5, 0x51, 0xB2, 0x64, + 0x80, 0x1B, 0x77, 0x27, 0xEC, 0xAF, 0x82, 0xEE, + 0xCB, 0x99, 0xA8, 0x76, 0xFD, 0xA0, 0x90, 0xBF, + 0x6C, 0x3F, 0xC6, 0xB1, 0x09, 0xF1, 0x70, 0x14, + 0x85, 0xF0, 0x3C, 0xE6, 0x62, 0x74, 0xB8, 0x43, + 0x5B, 0x0A, 0x01, 0x4C, 0xFB, 0x3E, 0x79, 0xCC, + 0xED, 0x67, 0x05, 0x7B, 0x5A, 0xE2, 0xAD, 0x7F, + 0x52, 0x79, 0xEB, 0x71, 0x49, 0x42, 0xE4, 0xC1, + 0xCC, 0xFF, 0x7E, 0x85, 0xC0, 0xDB, 0x43, 0xE5, + 0xD4, 0x12, 0x89, 0x20, 0x73, 0x63, 0xB4, 0x44, + 0xBB, 0x51, 0xBB, 0x8A, 0xB0, 0x37, 0x1E, 0x70, + 0xCB, 0xD5, 0x5F, 0x0F, 0x3D, 0xAD, 0x40, 0x3E, + 0x10, 0x51, 0x76, 0xE3, 0xE8, 0xA2, 0x25, 0xD8, + 0x4A, 0xC8, 0xBE, 0xE3, 0x8C, 0x82, 0x1E, 0xE0, + 0xF5, 0x47, 0x43, 0x11, 0x45, 0xDC, 0xB3, 0x13, + 0x92, 0x86, 0xAB, 0xB1, 0x17, 0x94, 0xA4, 0x3A, + 0x3C, 0x1B, 0x52, 0x29, 0xE4, 0xBC, 0xFE, 0x95, + 0x9C, 0x78, 0xAD, 0xAE, 0xE2, 0xD5, 0xF2, 0x49, + 0x7B, 0x5D, 0x24, 0xBC, 0x21, 0xFA, 0x03, 0xA9, + 0xA5, 0x8C, 0x24, 0x55, 0x37, 0x3E, 0xC8, 0x95, + 0x83, 0xE7, 0xE5, 0x88, 0xD7, 0xFE, 0x67, 0x99, + 0x1E, 0xE9, 0x37, 0x83, 0xED, 0x4A, 0x6F, 0x9E, + 0xEA, 0xE0, 0x4E, 0x64, 0xE2, 0xE1, 0xE0, 0xE6, + 0x99, 0xF6, 0xDC, 0x9C, 0x5D, 0x39, 0xEF, 0x92, + 0x78, 0xC9, 0x85, 0xE7, 0xFD, 0xF2, 0xA7, 0x64, + 0xFF, 0xD1, 0xA0, 0xB9, 0x57, 0x92, 0xAD, 0x68, + 0x1E, 0x93, 0x0D, 0x76, 0xDF, 0x4E, 0xFE, 0x5D, + 0x65, 0xDB, 0xBD, 0x0F, 0x14, 0x38, 0x48, 0x1E, + 0xD8, 0x33, 0xAD, 0x49, 0x46, 0xAD, 0x1C, 0x69, + 0xAD, 0x21, 0xDD, 0x7C, 0x86, 0x18, 0x57, 0x74, + 0x42, 0x6F, 0x3F, 0xCF, 0x53, 0xB5, 0x2A, 0xD4, + 0xB4, 0x0D, 0x22, 0x8C, 0xE1, 0x24, 0x07, 0x2F, + 0x59, 0x2C, 0x7D, 0xAA, 0x05, 0x7F, 0x17, 0xD7, + 0x90, 0xA5, 0xBD, 0x5B, 0x93, 0x83, 0x4D, 0x58, + 0xC0, 0x8C, 0x88, 0xDC, 0x8F, 0x0E, 0xF4, 0x88, + 0x15, 0x64, 0x25, 0xB7, 0x44, 0x65, 0x4E, 0xAC, + 0xA9, 0xD6, 0x48, 0x58, 0xA4, 0xD6, 0xCE, 0xB4, + 0x78, 0x79, 0x51, 0x94, 0xBF, 0xAD, 0xB1, 0x8D, + 0xC0, 0xEA, 0x05, 0x4F, 0x97, 0x71, 0x21, 0x5A, + 0xD3, 0xCB, 0x1F, 0xD0, 0x31, 0xD7, 0xBE, 0x45, + 0x98, 0x62, 0x19, 0x26, 0x47, 0x8D, 0x37, 0x5A, + 0x18, 0x45, 0xAA, 0x91, 0xD7, 0xC7, 0x33, 0xF8, + 0xF0, 0xE1, 0x88, 0xC8, 0x38, 0x96, 0xED, 0xF8, + 0x3B, 0x86, 0x46, 0xC9, 0x9E, 0x29, 0xC0, 0xDA, + 0x22, 0x90, 0xE7, 0x1C, 0x3D, 0x2E, 0x97, 0x07, + 0x20, 0xC9, 0x7B, 0x5B, 0x7F, 0x95, 0x04, 0x86, + 0x03, 0x3C, 0x6A, 0x25, 0x71, 0xDD, 0xF2, 0xBC, + 0xCD, 0xAB, 0xB2, 0xDF, 0xA5, 0xFC, 0xE4, 0xC3, + 0xA1, 0x88, 0x46, 0x06, 0x04, 0x1D, 0x18, 0x1C, + 0x72, 0x87, 0x94, 0xAE, 0x0E, 0x80, 0x6E, 0xCB, + 0x49, 0xAF, 0x16, 0x75, 0x6A, 0x4C, 0xE7, 0x3C, + 0x87, 0xBD, 0x42, 0x34, 0xE6, 0x0F, 0x05, 0x53, + 0x5F, 0xA5, 0x92, 0x9F, 0xD5, 0xA3, 0x44, 0x73, + 0x26, 0x64, 0x01, 0xF6, 0x3B, 0xBD, 0x6B, 0x90, + 0xE0, 0x03, 0x47, 0x2A, 0xC0, 0xCE, 0x88, 0xF1, + 0xB6, 0x66, 0x59, 0x72, 0x79, 0xD0, 0x56, 0xA6, + 0x32, 0xC8, 0xD6, 0xB7, 0x90, 0xFD, 0x41, 0x17, + 0x67, 0x84, 0x8A, 0x69, 0xE3, 0x7A, 0x8A, 0x83, + 0x9B, 0xC7, 0x66, 0xA0, 0x2C, 0xA2, 0xF6, 0x95, + 0xEC, 0x63, 0xF0, 0x56, 0xA4, 0xE2, 0xA1, 0x14, + 0xCA, 0xCF, 0x9F, 0xD9, 0x0D, 0x73, 0x0C, 0x97, + 0x0D, 0xB3, 0x87, 0xF6, 0xDE, 0x73, 0x39, 0x5F, + 0x70, 0x1A, 0x1D, 0x95, 0x3B, 0x2A, 0x89, 0xDD, + 0x7E, 0xDA, 0xD4, 0x39, 0xFC, 0x20, 0x5A, 0x54, + 0xA4, 0x81, 0xE8, 0x89, 0xB0, 0x98, 0xD5, 0x25, + 0x56, 0x70, 0xF0, 0x26, 0xB4, 0xA2, 0xBF, 0x02, + 0xD2, 0xBD, 0xDE, 0x87, 0xC7, 0x66, 0xB2, 0x5F, + 0xC5, 0xE0, 0xFD, 0x45, 0x37, 0x57, 0xE7, 0x56, + 0xD1, 0x8C, 0x8C, 0xD9, 0x12, 0xF9, 0xA7, 0x7F, + 0x8E, 0x6B, 0xF0, 0x20, 0x53, 0x74, 0xB4, 0x62 + }; + static const byte k_512[WC_ML_KEM_SS_SZ] = { + 0x0B, 0xF3, 0x23, 0x33, 0x8D, 0x6F, 0x0A, 0x21, + 0xD5, 0x51, 0x4B, 0x67, 0x3C, 0xD1, 0x0B, 0x71, + 0x4C, 0xE6, 0xE3, 0x6F, 0x35, 0xBC, 0xD1, 0xBF, + 0x54, 0x41, 0x96, 0x36, 0x8E, 0xE5, 0x1A, 0x13 + }; +#endif +#ifndef WOLFSSL_NO_ML_KEM_768 + static const byte ek_768[WC_ML_KEM_768_PUBLIC_KEY_SIZE] = { + 0x89, 0xD2, 0xCB, 0x65, 0xF9, 0x4D, 0xCB, 0xFC, + 0x89, 0x0E, 0xFC, 0x7D, 0x0E, 0x5A, 0x7A, 0x38, + 0x34, 0x4D, 0x16, 0x41, 0xA3, 0xD0, 0xB0, 0x24, + 0xD5, 0x07, 0x97, 0xA5, 0xF2, 0x3C, 0x3A, 0x18, + 0xB3, 0x10, 0x1A, 0x12, 0x69, 0x06, 0x9F, 0x43, + 0xA8, 0x42, 0xBA, 0xCC, 0x09, 0x8A, 0x88, 0x21, + 0x27, 0x1C, 0x67, 0x3D, 0xB1, 0xBE, 0xB3, 0x30, + 0x34, 0xE4, 0xD7, 0x77, 0x4D, 0x16, 0x63, 0x5C, + 0x7C, 0x2C, 0x3C, 0x27, 0x63, 0x45, 0x35, 0x38, + 0xBC, 0x16, 0x32, 0xE1, 0x85, 0x15, 0x91, 0xA5, + 0x16, 0x42, 0x97, 0x4E, 0x59, 0x28, 0xAB, 0xB8, + 0xE5, 0x5F, 0xE5, 0x56, 0x12, 0xF9, 0xB1, 0x41, + 0xAF, 0xF0, 0x15, 0x54, 0x53, 0x94, 0xB2, 0x09, + 0x2E, 0x59, 0x09, 0x70, 0xEC, 0x29, 0xA7, 0xB7, + 0xE7, 0xAA, 0x1F, 0xB4, 0x49, 0x3B, 0xF7, 0xCB, + 0x73, 0x19, 0x06, 0xC2, 0xA5, 0xCB, 0x49, 0xE6, + 0x61, 0x48, 0x59, 0x06, 0x4E, 0x19, 0xB8, 0xFA, + 0x26, 0xAF, 0x51, 0xC4, 0x4B, 0x5E, 0x75, 0x35, + 0xBF, 0xDA, 0xC0, 0x72, 0xB6, 0x46, 0xD3, 0xEA, + 0x49, 0x0D, 0x27, 0x7F, 0x0D, 0x97, 0xCE, 0xD4, + 0x73, 0x95, 0xFE, 0xD9, 0x1E, 0x8F, 0x2B, 0xCE, + 0x0E, 0x3C, 0xA1, 0x22, 0xC2, 0x02, 0x5F, 0x74, + 0x06, 0x7A, 0xB9, 0x28, 0xA8, 0x22, 0xB3, 0x56, + 0x53, 0xA7, 0x4F, 0x06, 0x75, 0x76, 0x29, 0xAF, + 0xB1, 0xA1, 0xCA, 0xF2, 0x37, 0x10, 0x0E, 0xA9, + 0x35, 0xE7, 0x93, 0xC8, 0xF5, 0x8A, 0x71, 0xB3, + 0xD6, 0xAE, 0x2C, 0x86, 0x58, 0xB1, 0x01, 0x50, + 0xD4, 0xA3, 0x8F, 0x57, 0x2A, 0x0D, 0x49, 0xD2, + 0x8A, 0xE8, 0x94, 0x51, 0xD3, 0x38, 0x32, 0x6F, + 0xDB, 0x3B, 0x43, 0x50, 0x03, 0x6C, 0x10, 0x81, + 0x11, 0x77, 0x40, 0xED, 0xB8, 0x6B, 0x12, 0x08, + 0x1C, 0x5C, 0x12, 0x23, 0xDB, 0xB5, 0x66, 0x0D, + 0x5B, 0x3C, 0xB3, 0x78, 0x7D, 0x48, 0x18, 0x49, + 0x30, 0x4C, 0x68, 0xBE, 0x87, 0x54, 0x66, 0xF1, + 0x4E, 0xE5, 0x49, 0x5C, 0x2B, 0xD7, 0x95, 0xAE, + 0x41, 0x2D, 0x09, 0x00, 0x2D, 0x65, 0xB8, 0x71, + 0x9B, 0x90, 0xCB, 0xA3, 0x60, 0x3A, 0xC4, 0x95, + 0x8E, 0xA0, 0x3C, 0xC1, 0x38, 0xC8, 0x6F, 0x78, + 0x51, 0x59, 0x31, 0x25, 0x33, 0x47, 0x01, 0xB6, + 0x77, 0xF8, 0x2F, 0x49, 0x52, 0xA4, 0xC9, 0x3B, + 0x5B, 0x4C, 0x13, 0x4B, 0xB4, 0x2A, 0x85, 0x7F, + 0xD1, 0x5C, 0x65, 0x08, 0x64, 0xA6, 0xAA, 0x94, + 0xEB, 0x69, 0x1C, 0x0B, 0x69, 0x1B, 0xE4, 0x68, + 0x4C, 0x1F, 0x5B, 0x74, 0x90, 0x46, 0x7F, 0xC0, + 0x1B, 0x1D, 0x1F, 0xDA, 0x4D, 0xDA, 0x35, 0xC4, + 0xEC, 0xC2, 0x31, 0xBC, 0x73, 0xA6, 0xFE, 0xF4, + 0x2C, 0x99, 0xD3, 0x4E, 0xB8, 0x2A, 0x4D, 0x01, + 0x49, 0x87, 0xB3, 0xE3, 0x86, 0x91, 0x0C, 0x62, + 0x67, 0x9A, 0x11, 0x8F, 0x3C, 0x5B, 0xD9, 0xF4, + 0x67, 0xE4, 0x16, 0x20, 0x42, 0x42, 0x43, 0x57, + 0xDB, 0x92, 0xEF, 0x48, 0x4A, 0x4A, 0x17, 0x98, + 0xC1, 0x25, 0x7E, 0x87, 0x0A, 0x30, 0xCB, 0x20, + 0xAA, 0xA0, 0x33, 0x5D, 0x83, 0x31, 0x4F, 0xE0, + 0xAA, 0x7E, 0x63, 0xA8, 0x62, 0x64, 0x80, 0x41, + 0xA7, 0x2A, 0x63, 0x21, 0x52, 0x32, 0x20, 0xB1, + 0xAC, 0xE9, 0xBB, 0x70, 0x1B, 0x21, 0xAC, 0x12, + 0x53, 0xCB, 0x81, 0x2C, 0x15, 0x57, 0x5A, 0x90, + 0x85, 0xEA, 0xBE, 0xAD, 0xE7, 0x3A, 0x4A, 0xE7, + 0x6E, 0x6A, 0x7B, 0x15, 0x8A, 0x20, 0x58, 0x6D, + 0x78, 0xA5, 0xAC, 0x62, 0x0A, 0x5C, 0x9A, 0xBC, + 0xC9, 0xC0, 0x43, 0x35, 0x0A, 0x73, 0x65, 0x6B, + 0x0A, 0xBE, 0x82, 0x2D, 0xA5, 0xE0, 0xBA, 0x76, + 0x04, 0x5F, 0xAD, 0x75, 0x40, 0x1D, 0x7A, 0x3B, + 0x70, 0x37, 0x91, 0xB7, 0xE9, 0x92, 0x61, 0x71, + 0x0F, 0x86, 0xB7, 0x24, 0x21, 0xD2, 0x40, 0xA3, + 0x47, 0x63, 0x83, 0x77, 0x20, 0x5A, 0x15, 0x2C, + 0x79, 0x41, 0x30, 0xA4, 0xE0, 0x47, 0x74, 0x2B, + 0x88, 0x83, 0x03, 0xBD, 0xDC, 0x30, 0x91, 0x16, + 0x76, 0x4D, 0xE7, 0x42, 0x4C, 0xEB, 0xEA, 0x6D, + 0xB6, 0x53, 0x48, 0xAC, 0x53, 0x7E, 0x01, 0xA9, + 0xCC, 0x56, 0xEA, 0x66, 0x7D, 0x5A, 0xA8, 0x7A, + 0xC9, 0xAA, 0xA4, 0x31, 0x7D, 0x26, 0x2C, 0x10, + 0x14, 0x30, 0x50, 0xB8, 0xD0, 0x7A, 0x72, 0x8C, + 0xA6, 0x33, 0xC1, 0x3E, 0x46, 0x8A, 0xBC, 0xEA, + 0xD3, 0x72, 0xC7, 0x7B, 0x8E, 0xCF, 0x3B, 0x98, + 0x6B, 0x98, 0xC1, 0xE5, 0x58, 0x60, 0xB2, 0xB4, + 0x21, 0x67, 0x66, 0xAD, 0x87, 0x4C, 0x35, 0xED, + 0x72, 0x05, 0x06, 0x87, 0x39, 0x23, 0x02, 0x20, + 0xB5, 0xA2, 0x31, 0x7D, 0x10, 0x2C, 0x59, 0x83, + 0x56, 0xF1, 0x68, 0xAC, 0xBE, 0x80, 0x60, 0x8D, + 0xE4, 0xC9, 0xA7, 0x10, 0xB8, 0xDD, 0x07, 0x07, + 0x8C, 0xD7, 0xC6, 0x71, 0x05, 0x8A, 0xF1, 0xB0, + 0xB8, 0x30, 0x4A, 0x31, 0x4F, 0x7B, 0x29, 0xBE, + 0x78, 0xA9, 0x33, 0xC7, 0xB9, 0x29, 0x44, 0x24, + 0x95, 0x4A, 0x1B, 0xF8, 0xBC, 0x74, 0x5D, 0xE8, + 0x61, 0x98, 0x65, 0x9E, 0x0E, 0x12, 0x25, 0xA9, + 0x10, 0x72, 0x60, 0x74, 0x96, 0x9C, 0x39, 0xA9, + 0x7C, 0x19, 0x24, 0x06, 0x01, 0xA4, 0x6E, 0x01, + 0x3D, 0xCD, 0xCB, 0x67, 0x7A, 0x8C, 0xBD, 0x2C, + 0x95, 0xA4, 0x06, 0x29, 0xC2, 0x56, 0xF2, 0x4A, + 0x32, 0x89, 0x51, 0xDF, 0x57, 0x50, 0x2A, 0xB3, + 0x07, 0x72, 0xCC, 0x7E, 0x5B, 0x85, 0x00, 0x27, + 0xC8, 0x55, 0x17, 0x81, 0xCE, 0x49, 0x85, 0xBD, + 0xAC, 0xF6, 0xB8, 0x65, 0xC1, 0x04, 0xE8, 0xA4, + 0xBC, 0x65, 0xC4, 0x16, 0x94, 0xD4, 0x56, 0xB7, + 0x16, 0x9E, 0x45, 0xAB, 0x3D, 0x7A, 0xCA, 0xBE, + 0xAF, 0xE2, 0x3A, 0xD6, 0xA7, 0xB9, 0x4D, 0x19, + 0x79, 0xA2, 0xF4, 0xC1, 0xCA, 0xE7, 0xCD, 0x77, + 0xD6, 0x81, 0xD2, 0x90, 0xB5, 0xD8, 0xE4, 0x51, + 0xBF, 0xDC, 0xCC, 0xF5, 0x31, 0x0B, 0x9D, 0x12, + 0xA8, 0x8E, 0xC2, 0x9B, 0x10, 0x25, 0x5D, 0x5E, + 0x17, 0xA1, 0x92, 0x67, 0x0A, 0xA9, 0x73, 0x1C, + 0x5C, 0xA6, 0x7E, 0xC7, 0x84, 0xC5, 0x02, 0x78, + 0x1B, 0xE8, 0x52, 0x7D, 0x6F, 0xC0, 0x03, 0xC6, + 0x70, 0x1B, 0x36, 0x32, 0x28, 0x4B, 0x40, 0x30, + 0x7A, 0x52, 0x7C, 0x76, 0x20, 0x37, 0x7F, 0xEB, + 0x0B, 0x73, 0xF7, 0x22, 0xC9, 0xE3, 0xCD, 0x4D, + 0xEC, 0x64, 0x87, 0x6B, 0x93, 0xAB, 0x5B, 0x7C, + 0xFC, 0x4A, 0x65, 0x7F, 0x85, 0x2B, 0x65, 0x92, + 0x82, 0x86, 0x43, 0x84, 0xF4, 0x42, 0xB2, 0x2E, + 0x8A, 0x21, 0x10, 0x93, 0x87, 0xB8, 0xB4, 0x75, + 0x85, 0xFC, 0x68, 0x0D, 0x0B, 0xA4, 0x5C, 0x7A, + 0x8B, 0x1D, 0x72, 0x74, 0xBD, 0xA5, 0x78, 0x45, + 0xD1, 0x00, 0xD0, 0xF4, 0x2A, 0x3B, 0x74, 0x62, + 0x87, 0x73, 0x35, 0x1F, 0xD7, 0xAC, 0x30, 0x5B, + 0x24, 0x97, 0x63, 0x9B, 0xE9, 0x0B, 0x3F, 0x4F, + 0x71, 0xA6, 0xAA, 0x35, 0x61, 0xEE, 0xCC, 0x6A, + 0x69, 0x1B, 0xB5, 0xCB, 0x39, 0x14, 0xD8, 0x63, + 0x4C, 0xA1, 0xE1, 0xAF, 0x54, 0x3C, 0x04, 0x9A, + 0x8C, 0x6E, 0x86, 0x8C, 0x51, 0xF0, 0x42, 0x3B, + 0xD2, 0xD5, 0xAE, 0x09, 0xB7, 0x9E, 0x57, 0xC2, + 0x7F, 0x3F, 0xE3, 0xAE, 0x2B, 0x26, 0xA4, 0x41, + 0xBA, 0xBF, 0xC6, 0x71, 0x8C, 0xE8, 0xC0, 0x5B, + 0x4F, 0xE7, 0x93, 0xB9, 0x10, 0xB8, 0xFB, 0xCB, + 0xBE, 0x7F, 0x10, 0x13, 0x24, 0x2B, 0x40, 0xE0, + 0x51, 0x4D, 0x0B, 0xDC, 0x5C, 0x88, 0xBA, 0xC5, + 0x94, 0xC7, 0x94, 0xCE, 0x51, 0x22, 0xFB, 0xF3, + 0x48, 0x96, 0x81, 0x91, 0x47, 0xB9, 0x28, 0x38, + 0x15, 0x87, 0x96, 0x3B, 0x0B, 0x90, 0x03, 0x4A, + 0xA0, 0x7A, 0x10, 0xBE, 0x17, 0x6E, 0x01, 0xC8, + 0x0A, 0xD6, 0xA4, 0xB7, 0x1B, 0x10, 0xAF, 0x42, + 0x41, 0x40, 0x0A, 0x2A, 0x4C, 0xBB, 0xC0, 0x59, + 0x61, 0xA1, 0x5E, 0xC1, 0x47, 0x4E, 0xD5, 0x1A, + 0x3C, 0xC6, 0xD3, 0x58, 0x00, 0x67, 0x9A, 0x46, + 0x28, 0x09, 0xCA, 0xA3, 0xAB, 0x4F, 0x70, 0x94, + 0xCD, 0x66, 0x10, 0xB4, 0xA7, 0x00, 0xCB, 0xA9, + 0x39, 0xE7, 0xEA, 0xC9, 0x3E, 0x38, 0xC9, 0x97, + 0x55, 0x90, 0x87, 0x27, 0x61, 0x9E, 0xD7, 0x6A, + 0x34, 0xE5, 0x3C, 0x4F, 0xA2, 0x5B, 0xFC, 0x97, + 0x00, 0x82, 0x06, 0x69, 0x7D, 0xD1, 0x45, 0xE5, + 0xB9, 0x18, 0x8E, 0x5B, 0x01, 0x4E, 0x94, 0x16, + 0x81, 0xE1, 0x5F, 0xE3, 0xE1, 0x32, 0xB8, 0xA3, + 0x90, 0x34, 0x74, 0x14, 0x8B, 0xA2, 0x8B, 0x98, + 0x71, 0x11, 0xC9, 0xBC, 0xB3, 0x98, 0x9B, 0xBB, + 0xC6, 0x71, 0xC5, 0x81, 0xB4, 0x4A, 0x49, 0x28, + 0x45, 0xF2, 0x88, 0xE6, 0x21, 0x96, 0xE4, 0x71, + 0xFE, 0xD3, 0xC3, 0x9C, 0x1B, 0xBD, 0xDB, 0x08, + 0x37, 0xD0, 0xD4, 0x70, 0x6B, 0x09, 0x22, 0xC4 + }; + static const byte seed_768[WC_ML_KEM_ENC_RAND_SZ] = { + 0x2C, 0xE7, 0x4A, 0xD2, 0x91, 0x13, 0x35, 0x18, + 0xFE, 0x60, 0xC7, 0xDF, 0x5D, 0x25, 0x1B, 0x9D, + 0x82, 0xAD, 0xD4, 0x84, 0x62, 0xFF, 0x50, 0x5C, + 0x6E, 0x54, 0x7E, 0x94, 0x9E, 0x6B, 0x6B, 0xF7 + }; + static const byte c_768[WC_ML_KEM_768_CIPHER_TEXT_SIZE] = { + 0x56, 0xB4, 0x2D, 0x59, 0x3A, 0xAB, 0x8E, 0x87, + 0x73, 0xBD, 0x92, 0xD7, 0x6E, 0xAB, 0xDD, 0xF3, + 0xB1, 0x54, 0x6F, 0x83, 0x26, 0xF5, 0x7A, 0x7B, + 0x77, 0x37, 0x64, 0xB6, 0xC0, 0xDD, 0x30, 0x47, + 0x0F, 0x68, 0xDF, 0xF8, 0x2E, 0x0D, 0xCA, 0x92, + 0x50, 0x92, 0x74, 0xEC, 0xFE, 0x83, 0xA9, 0x54, + 0x73, 0x5F, 0xDE, 0x6E, 0x14, 0x67, 0x6D, 0xAA, + 0xA3, 0x68, 0x0C, 0x30, 0xD5, 0x24, 0xF4, 0xEF, + 0xA7, 0x9E, 0xD6, 0xA1, 0xF9, 0xED, 0x7E, 0x1C, + 0x00, 0x56, 0x0E, 0x86, 0x83, 0x53, 0x8C, 0x31, + 0x05, 0xAB, 0x93, 0x1B, 0xE0, 0xD2, 0xB2, 0x49, + 0xB3, 0x8C, 0xB9, 0xB1, 0x3A, 0xF5, 0xCE, 0xAF, + 0x78, 0x87, 0xA5, 0x9D, 0xBA, 0x16, 0x68, 0x8A, + 0x7F, 0x28, 0xDE, 0x0B, 0x14, 0xD1, 0x9F, 0x39, + 0x1E, 0xB4, 0x18, 0x32, 0xA5, 0x64, 0x79, 0x41, + 0x6C, 0xCF, 0x94, 0xE9, 0x97, 0x39, 0x0E, 0xD7, + 0x87, 0x8E, 0xEA, 0xFF, 0x49, 0x32, 0x8A, 0x70, + 0xE0, 0xAB, 0x5F, 0xCE, 0x6C, 0x63, 0xC0, 0x9B, + 0x35, 0xF4, 0xE4, 0x59, 0x94, 0xDE, 0x61, 0x5B, + 0x88, 0xBB, 0x72, 0x2F, 0x70, 0xE8, 0x7D, 0x2B, + 0xBD, 0x72, 0xAE, 0x71, 0xE1, 0xEE, 0x90, 0x08, + 0xE4, 0x59, 0xD8, 0xE7, 0x43, 0x03, 0x9A, 0x8D, + 0xDE, 0xB8, 0x74, 0xFC, 0xE5, 0x30, 0x1A, 0x2F, + 0x8C, 0x0E, 0xE8, 0xC2, 0xFE, 0xE7, 0xA4, 0xEE, + 0x68, 0xB5, 0xED, 0x6A, 0x6D, 0x9A, 0xB7, 0x4F, + 0x98, 0xBB, 0x3B, 0xA0, 0xFE, 0x89, 0xE8, 0x2B, + 0xD5, 0xA5, 0x25, 0xC5, 0xE8, 0x79, 0x0F, 0x81, + 0x8C, 0xCC, 0x60, 0x58, 0x77, 0xD4, 0x6C, 0x8B, + 0xDB, 0x5C, 0x33, 0x7B, 0x02, 0x5B, 0xB8, 0x40, + 0xFF, 0x47, 0x18, 0x96, 0xE4, 0x3B, 0xFA, 0x99, + 0xD7, 0x3D, 0xBE, 0x31, 0x80, 0x5C, 0x27, 0xA4, + 0x3E, 0x57, 0xF0, 0x61, 0x8B, 0x3A, 0xE5, 0x22, + 0xA4, 0x64, 0x4E, 0x0D, 0x4E, 0x4C, 0x1C, 0x54, + 0x84, 0x89, 0x43, 0x1B, 0xE5, 0x58, 0xF3, 0xBF, + 0xC5, 0x0E, 0x16, 0x61, 0x7E, 0x11, 0x0D, 0xD7, + 0xAF, 0x9A, 0x6F, 0xD8, 0x3E, 0x3F, 0xBB, 0x68, + 0xC3, 0x04, 0xD1, 0x5F, 0x6C, 0xB7, 0x00, 0xD6, + 0x1D, 0x7A, 0xA9, 0x15, 0xA6, 0x75, 0x1E, 0xA3, + 0xBA, 0x80, 0x22, 0x3E, 0x65, 0x41, 0x32, 0xA2, + 0x09, 0x99, 0xA4, 0x3B, 0xF4, 0x08, 0x59, 0x27, + 0x30, 0xB9, 0xA9, 0x49, 0x96, 0x36, 0xC0, 0x9F, + 0xA7, 0x29, 0xF9, 0xCB, 0x1F, 0x9D, 0x34, 0x42, + 0xF4, 0x73, 0x57, 0xA2, 0xB9, 0xCF, 0x15, 0xD3, + 0x10, 0x3B, 0x9B, 0xF3, 0x96, 0xC2, 0x30, 0x88, + 0xF1, 0x18, 0xED, 0xE3, 0x46, 0xB5, 0xC0, 0x38, + 0x91, 0xCF, 0xA5, 0xD5, 0x17, 0xCE, 0xF8, 0x47, + 0x13, 0x22, 0xE7, 0xE3, 0x10, 0x87, 0xC4, 0xB0, + 0x36, 0xAB, 0xAD, 0x78, 0x4B, 0xFF, 0x72, 0xA9, + 0xB1, 0x1F, 0xA1, 0x98, 0xFA, 0xCB, 0xCB, 0x91, + 0xF0, 0x67, 0xFE, 0xAF, 0x76, 0xFC, 0xFE, 0x53, + 0x27, 0xC1, 0x07, 0x0B, 0x3D, 0xA6, 0x98, 0x84, + 0x00, 0x75, 0x67, 0x60, 0xD2, 0xD1, 0xF0, 0x60, + 0x29, 0x8F, 0x16, 0x83, 0xD5, 0x1E, 0x36, 0x16, + 0xE9, 0x8C, 0x51, 0xC9, 0xC0, 0x3A, 0xA4, 0x2F, + 0x2E, 0x63, 0x36, 0x51, 0xA4, 0x7A, 0xD3, 0xCC, + 0x2A, 0xB4, 0xA8, 0x52, 0xAE, 0x0C, 0x4B, 0x04, + 0xB4, 0xE1, 0xC3, 0xDD, 0x94, 0x44, 0x45, 0xA2, + 0xB1, 0x2B, 0x4F, 0x42, 0xA6, 0x43, 0x51, 0x05, + 0xC0, 0x41, 0x22, 0xFC, 0x35, 0x87, 0xAF, 0xE4, + 0x09, 0xA0, 0x0B, 0x30, 0x8D, 0x63, 0xC5, 0xDD, + 0x81, 0x63, 0x65, 0x45, 0x04, 0xEE, 0xDB, 0xB7, + 0xB5, 0x32, 0x95, 0x77, 0xC3, 0x5F, 0xBE, 0xB3, + 0xF4, 0x63, 0x87, 0x2C, 0xAC, 0x28, 0x14, 0x2B, + 0x3C, 0x12, 0xA7, 0x40, 0xEC, 0x6E, 0xA7, 0xCE, + 0x9A, 0xD7, 0x8C, 0x6F, 0xC8, 0xFE, 0x1B, 0x4D, + 0xF5, 0xFC, 0x55, 0xC1, 0x66, 0x7F, 0x31, 0xF2, + 0x31, 0x2D, 0xA0, 0x77, 0x99, 0xDC, 0x87, 0x0A, + 0x47, 0x86, 0x08, 0x54, 0x9F, 0xED, 0xAF, 0xE0, + 0x21, 0xF1, 0xCF, 0x29, 0x84, 0x18, 0x03, 0x64, + 0xE9, 0x0A, 0xD9, 0x8D, 0x84, 0x56, 0x52, 0xAA, + 0x3C, 0xDD, 0x7A, 0x8E, 0xB0, 0x9F, 0x5E, 0x51, + 0x42, 0x3F, 0xAB, 0x42, 0xA7, 0xB7, 0xBB, 0x4D, + 0x51, 0x48, 0x64, 0xBE, 0x8D, 0x71, 0x29, 0x7E, + 0x9C, 0x3B, 0x17, 0xA9, 0x93, 0xF0, 0xAE, 0x62, + 0xE8, 0xEF, 0x52, 0x63, 0x7B, 0xD1, 0xB8, 0x85, + 0xBD, 0x9B, 0x6A, 0xB7, 0x27, 0x85, 0x4D, 0x70, + 0x3D, 0x8D, 0xC4, 0x78, 0xF9, 0x6C, 0xB8, 0x1F, + 0xCE, 0x4C, 0x60, 0x38, 0x3A, 0xC0, 0x1F, 0xCF, + 0x0F, 0x97, 0x1D, 0x4C, 0x8F, 0x35, 0x2B, 0x7A, + 0x82, 0xE2, 0x18, 0x65, 0x2F, 0x2C, 0x10, 0x6C, + 0xA9, 0x2A, 0xE6, 0x86, 0xBA, 0xCF, 0xCE, 0xF5, + 0xD3, 0x27, 0x34, 0x7A, 0x97, 0xA9, 0xB3, 0x75, + 0xD6, 0x73, 0x41, 0x55, 0x2B, 0xC2, 0xC5, 0x38, + 0x77, 0x8E, 0x0F, 0x98, 0x01, 0x82, 0x3C, 0xCD, + 0xFC, 0xD1, 0xEA, 0xAD, 0xED, 0x55, 0xB1, 0x8C, + 0x97, 0x57, 0xE3, 0xF2, 0x12, 0xB2, 0x88, 0x9D, + 0x38, 0x57, 0xDB, 0x51, 0xF9, 0x81, 0xD1, 0x61, + 0x85, 0xFD, 0x0F, 0x90, 0x08, 0x53, 0xA7, 0x50, + 0x05, 0xE3, 0x02, 0x0A, 0x8B, 0x95, 0xB7, 0xD8, + 0xF2, 0xF2, 0x63, 0x1C, 0x70, 0xD7, 0x8A, 0x95, + 0x7C, 0x7A, 0x62, 0xE1, 0xB3, 0x71, 0x90, 0x70, + 0xAC, 0xD1, 0xFD, 0x48, 0x0C, 0x25, 0xB8, 0x38, + 0x47, 0xDA, 0x02, 0x7B, 0x6E, 0xBB, 0xC2, 0xEE, + 0xC2, 0xDF, 0x22, 0xC8, 0x7F, 0x9B, 0x46, 0xD5, + 0xD7, 0xBA, 0xF1, 0x56, 0xB5, 0x3C, 0xEE, 0x92, + 0x95, 0x72, 0xB9, 0x2C, 0x47, 0x84, 0xC4, 0xE8, + 0x29, 0xF3, 0x44, 0x6A, 0x1F, 0xFE, 0x47, 0xF9, + 0x9D, 0xEC, 0xD0, 0x43, 0x60, 0x29, 0xDD, 0xEB, + 0xD3, 0xED, 0x8E, 0x87, 0xE5, 0xE7, 0x3D, 0x12, + 0x3D, 0xBE, 0x8A, 0x4D, 0xDA, 0xCF, 0x2A, 0xBD, + 0xE8, 0x7F, 0x33, 0xAE, 0x2B, 0x62, 0x1C, 0x0E, + 0xC5, 0xD5, 0xCA, 0xD1, 0x25, 0x9D, 0xEE, 0xC2, + 0xAE, 0xFF, 0x60, 0x88, 0xF0, 0x4F, 0x27, 0xA2, + 0x03, 0x38, 0xB5, 0x76, 0x25, 0x43, 0xE5, 0x10, + 0x08, 0x99, 0xA4, 0xCB, 0xFB, 0x7B, 0x3C, 0xA4, + 0x56, 0xB3, 0xA1, 0x9B, 0x83, 0xA4, 0xC4, 0x32, + 0x23, 0x0C, 0x23, 0xE1, 0xC7, 0xF1, 0x07, 0xC4, + 0xCB, 0x11, 0x21, 0x52, 0xF1, 0xC0, 0xF3, 0x0D, + 0xA0, 0xBB, 0x33, 0xF4, 0xF1, 0x1F, 0x47, 0xEE, + 0xA4, 0x38, 0x72, 0xBA, 0xFA, 0x84, 0xAE, 0x22, + 0x25, 0x6D, 0x70, 0x8E, 0x06, 0x04, 0xDA, 0xDE, + 0x4B, 0x2A, 0x4D, 0xDE, 0x8C, 0xCC, 0xF1, 0x19, + 0x30, 0xE1, 0x35, 0x53, 0x93, 0x4A, 0xE3, 0xEC, + 0xE5, 0x2F, 0x3D, 0x7C, 0xCC, 0x00, 0x28, 0x73, + 0x77, 0x87, 0x9F, 0xE6, 0xB8, 0xEC, 0xE7, 0xEF, + 0x79, 0x42, 0x35, 0x07, 0xC9, 0xDA, 0x33, 0x95, + 0x59, 0xC2, 0x0D, 0xE1, 0xC5, 0x19, 0x55, 0x99, + 0x9B, 0xAE, 0x47, 0x40, 0x1D, 0xC3, 0xCD, 0xFA, + 0xA1, 0xB2, 0x56, 0xD0, 0x9C, 0x7D, 0xB9, 0xFC, + 0x86, 0x98, 0xBF, 0xCE, 0xFA, 0x73, 0x02, 0xD5, + 0x6F, 0xBC, 0xDE, 0x1F, 0xBA, 0xAA, 0x1C, 0x65, + 0x34, 0x54, 0xE6, 0xFD, 0x3D, 0x84, 0xE4, 0xF7, + 0x9A, 0x93, 0x1C, 0x68, 0x1C, 0xBB, 0x6C, 0xB4, + 0x62, 0xB1, 0x0D, 0xAE, 0x11, 0x2B, 0xDF, 0xB7, + 0xF6, 0x5C, 0x7F, 0xDF, 0x6E, 0x5F, 0xC5, 0x94, + 0xEC, 0x3A, 0x47, 0x4A, 0x94, 0xBD, 0x97, 0xE6, + 0xEC, 0x81, 0xF7, 0x1C, 0x23, 0x0B, 0xF7, 0x0C, + 0xA0, 0xF1, 0x3C, 0xE3, 0xDF, 0xFB, 0xD9, 0xFF, + 0x98, 0x04, 0xEF, 0xD8, 0xF3, 0x7A, 0x4D, 0x36, + 0x29, 0xB4, 0x3A, 0x8F, 0x55, 0x54, 0x4E, 0xBC, + 0x5A, 0xC0, 0xAB, 0xD9, 0xA3, 0x3D, 0x79, 0x69, + 0x90, 0x68, 0x34, 0x6A, 0x0F, 0x1A, 0x3A, 0x96, + 0xE1, 0x15, 0xA5, 0xD8, 0x0B, 0xE1, 0x65, 0xB5, + 0x62, 0xD0, 0x82, 0x98, 0x4D, 0x5A, 0xAC, 0xC3, + 0xA2, 0x30, 0x19, 0x81, 0xA6, 0x41, 0x8F, 0x8B, + 0xA7, 0xD7, 0xB0, 0xD7, 0xCA, 0x58, 0x75, 0xC6 + }; + static const byte k_768[WC_ML_KEM_SS_SZ] = { + 0x26, 0x96, 0xD2, 0x8E, 0x9C, 0x61, 0xC2, 0xA0, + 0x1C, 0xE9, 0xB1, 0x60, 0x8D, 0xCB, 0x9D, 0x29, + 0x27, 0x85, 0xA0, 0xCD, 0x58, 0xEF, 0xB7, 0xFE, + 0x13, 0xB1, 0xDE, 0x95, 0xF0, 0xDB, 0x55, 0xB3 + }; +#endif +#ifndef WOLFSSL_NO_ML_KEM_1024 + static const byte ek_1024[WC_ML_KEM_1024_PUBLIC_KEY_SIZE] = { + 0x30, 0x7A, 0x4C, 0xEA, 0x41, 0x48, 0x21, 0x9B, + 0x95, 0x8E, 0xA0, 0xB7, 0x88, 0x66, 0x59, 0x23, + 0x5A, 0x4D, 0x19, 0x80, 0xB1, 0x92, 0x61, 0x08, + 0x47, 0xD8, 0x6E, 0xF3, 0x27, 0x39, 0xF9, 0x4C, + 0x3B, 0x44, 0x6C, 0x4D, 0x81, 0xD8, 0x9B, 0x8B, + 0x42, 0x2A, 0x9D, 0x07, 0x9C, 0x88, 0xB1, 0x1A, + 0xCA, 0xF3, 0x21, 0xB0, 0x14, 0x29, 0x4E, 0x18, + 0xB2, 0x96, 0xE5, 0x2F, 0x3F, 0x74, 0x4C, 0xF9, + 0x63, 0x4A, 0x4F, 0xB0, 0x1D, 0xB0, 0xD9, 0x9E, + 0xF2, 0x0A, 0x63, 0x3A, 0x55, 0x2E, 0x76, 0xA0, + 0x58, 0x5C, 0x61, 0x09, 0xF0, 0x18, 0x76, 0x8B, + 0x76, 0x3A, 0xF3, 0x67, 0x8B, 0x47, 0x80, 0x08, + 0x9C, 0x13, 0x42, 0xB9, 0x69, 0x07, 0xA2, 0x9A, + 0x1C, 0x11, 0x52, 0x1C, 0x74, 0x4C, 0x27, 0x97, + 0xD0, 0xBF, 0x2B, 0x9C, 0xCD, 0xCA, 0x61, 0x46, + 0x72, 0xB4, 0x50, 0x76, 0x77, 0x3F, 0x45, 0x8A, + 0x31, 0xEF, 0x86, 0x9B, 0xE1, 0xEB, 0x2E, 0xFE, + 0xB5, 0x0D, 0x0E, 0x37, 0x49, 0x5D, 0xC5, 0xCA, + 0x55, 0xE0, 0x75, 0x28, 0x93, 0x4F, 0x62, 0x93, + 0xC4, 0x16, 0x80, 0x27, 0xD0, 0xE5, 0x3D, 0x07, + 0xFA, 0xCC, 0x66, 0x30, 0xCB, 0x08, 0x19, 0x7E, + 0x53, 0xFB, 0x19, 0x3A, 0x17, 0x11, 0x35, 0xDC, + 0x8A, 0xD9, 0x97, 0x94, 0x02, 0xA7, 0x1B, 0x69, + 0x26, 0xBC, 0xDC, 0xDC, 0x47, 0xB9, 0x34, 0x01, + 0x91, 0x0A, 0x5F, 0xCC, 0x1A, 0x81, 0x3B, 0x68, + 0x2B, 0x09, 0xBA, 0x7A, 0x72, 0xD2, 0x48, 0x6D, + 0x6C, 0x79, 0x95, 0x16, 0x46, 0x5C, 0x14, 0x72, + 0x9B, 0x26, 0x94, 0x9B, 0x0B, 0x7C, 0xBC, 0x7C, + 0x64, 0x0F, 0x26, 0x7F, 0xED, 0x80, 0xB1, 0x62, + 0xC5, 0x1F, 0xD8, 0xE0, 0x92, 0x27, 0xC1, 0x01, + 0xD5, 0x05, 0xA8, 0xFA, 0xE8, 0xA2, 0xD7, 0x05, + 0x4E, 0x28, 0xA7, 0x8B, 0xA8, 0x75, 0x0D, 0xEC, + 0xF9, 0x05, 0x7C, 0x83, 0x97, 0x9F, 0x7A, 0xBB, + 0x08, 0x49, 0x45, 0x64, 0x80, 0x06, 0xC5, 0xB2, + 0x88, 0x04, 0xF3, 0x4E, 0x73, 0xB2, 0x38, 0x11, + 0x1A, 0x65, 0xA1, 0xF5, 0x00, 0xB1, 0xCC, 0x60, + 0x6A, 0x84, 0x8F, 0x28, 0x59, 0x07, 0x0B, 0xEB, + 0xA7, 0x57, 0x31, 0x79, 0xF3, 0x61, 0x49, 0xCF, + 0x58, 0x01, 0xBF, 0x89, 0xA1, 0xC3, 0x8C, 0xC2, + 0x78, 0x41, 0x55, 0x28, 0xD0, 0x3B, 0xDB, 0x94, + 0x3F, 0x96, 0x28, 0x0C, 0x8C, 0xC5, 0x20, 0x42, + 0xD9, 0xB9, 0x1F, 0xAA, 0x9D, 0x6E, 0xA7, 0xBC, + 0xBB, 0x7A, 0xB1, 0x89, 0x7A, 0x32, 0x66, 0x96, + 0x6F, 0x78, 0x39, 0x34, 0x26, 0xC7, 0x6D, 0x8A, + 0x49, 0x57, 0x8B, 0x98, 0xB1, 0x59, 0xEB, 0xB4, + 0x6E, 0xE0, 0xA8, 0x83, 0xA2, 0x70, 0xD8, 0x05, + 0x7C, 0xD0, 0x23, 0x1C, 0x86, 0x90, 0x6A, 0x91, + 0xDB, 0xBA, 0xDE, 0x6B, 0x24, 0x69, 0x58, 0x1E, + 0x2B, 0xCA, 0x2F, 0xEA, 0x83, 0x89, 0xF7, 0xC7, + 0x4B, 0xCD, 0x70, 0x96, 0x1E, 0xA5, 0xB9, 0x34, + 0xFB, 0xCF, 0x9A, 0x65, 0x90, 0xBF, 0x86, 0xB8, + 0xDB, 0x54, 0x88, 0x54, 0xD9, 0xA3, 0xFB, 0x30, + 0x11, 0x04, 0x33, 0xBD, 0x7A, 0x1B, 0x65, 0x9C, + 0xA8, 0x56, 0x80, 0x85, 0x63, 0x92, 0x37, 0xB3, + 0xBD, 0xC3, 0x7B, 0x7F, 0xA7, 0x16, 0xD4, 0x82, + 0xA2, 0x5B, 0x54, 0x10, 0x6B, 0x3A, 0x8F, 0x54, + 0xD3, 0xAA, 0x99, 0xB5, 0x12, 0x3D, 0xA9, 0x60, + 0x66, 0x90, 0x45, 0x92, 0xF3, 0xA5, 0x4E, 0xE2, + 0x3A, 0x79, 0x81, 0xAB, 0x60, 0x8A, 0x2F, 0x44, + 0x13, 0xCC, 0x65, 0x89, 0x46, 0xC6, 0xD7, 0x78, + 0x0E, 0xA7, 0x65, 0x64, 0x4B, 0x3C, 0xC0, 0x6C, + 0x70, 0x03, 0x4A, 0xB4, 0xEB, 0x35, 0x19, 0x12, + 0xE7, 0x71, 0x5B, 0x56, 0x75, 0x5D, 0x09, 0x02, + 0x15, 0x71, 0xBF, 0x34, 0x0A, 0xB9, 0x25, 0x98, + 0xA2, 0x4E, 0x81, 0x18, 0x93, 0x19, 0x5B, 0x96, + 0xA1, 0x62, 0x9F, 0x80, 0x41, 0xF5, 0x86, 0x58, + 0x43, 0x15, 0x61, 0xFC, 0x0A, 0xB1, 0x52, 0x92, + 0xB9, 0x13, 0xEC, 0x47, 0x3F, 0x04, 0x47, 0x9B, + 0xC1, 0x45, 0xCD, 0x4C, 0x56, 0x3A, 0x28, 0x62, + 0x35, 0x64, 0x6C, 0xD3, 0x05, 0xA9, 0xBE, 0x10, + 0x14, 0xE2, 0xC7, 0xB1, 0x30, 0xC3, 0x3E, 0xB7, + 0x7C, 0xC4, 0xA0, 0xD9, 0x78, 0x6B, 0xD6, 0xBC, + 0x2A, 0x95, 0x4B, 0xF3, 0x00, 0x57, 0x78, 0xF8, + 0x91, 0x7C, 0xE1, 0x37, 0x89, 0xBB, 0xB9, 0x62, + 0x80, 0x78, 0x58, 0xB6, 0x77, 0x31, 0x57, 0x2B, + 0x6D, 0x3C, 0x9B, 0x4B, 0x52, 0x06, 0xFA, 0xC9, + 0xA7, 0xC8, 0x96, 0x16, 0x98, 0xD8, 0x83, 0x24, + 0xA9, 0x15, 0x18, 0x68, 0x99, 0xB2, 0x99, 0x23, + 0xF0, 0x84, 0x42, 0xA3, 0xD3, 0x86, 0xBD, 0x41, + 0x6B, 0xCC, 0x9A, 0x10, 0x01, 0x64, 0xC9, 0x30, + 0xEC, 0x35, 0xEA, 0xFB, 0x6A, 0xB3, 0x58, 0x51, + 0xB6, 0xC8, 0xCE, 0x63, 0x77, 0x36, 0x6A, 0x17, + 0x5F, 0x3D, 0x75, 0x29, 0x8C, 0x51, 0x8D, 0x44, + 0x89, 0x89, 0x33, 0xF5, 0x3D, 0xEE, 0x61, 0x71, + 0x45, 0x09, 0x33, 0x79, 0xC4, 0x65, 0x9F, 0x68, + 0x58, 0x3B, 0x2B, 0x28, 0x12, 0x26, 0x66, 0xBE, + 0xC5, 0x78, 0x38, 0x99, 0x1F, 0xF1, 0x6C, 0x36, + 0x8D, 0xD2, 0x2C, 0x36, 0xE7, 0x80, 0xC9, 0x1A, + 0x35, 0x82, 0xE2, 0x5E, 0x19, 0x79, 0x4C, 0x6B, + 0xF2, 0xAB, 0x42, 0x45, 0x8A, 0x8D, 0xD7, 0x70, + 0x5D, 0xE2, 0xC2, 0xAA, 0x20, 0xC0, 0x54, 0xE8, + 0x4B, 0x3E, 0xF3, 0x50, 0x32, 0x79, 0x86, 0x26, + 0xC2, 0x48, 0x26, 0x32, 0x53, 0xA7, 0x1A, 0x11, + 0x94, 0x35, 0x71, 0x34, 0x0A, 0x97, 0x8C, 0xD0, + 0xA6, 0x02, 0xE4, 0x7D, 0xEE, 0x54, 0x0A, 0x88, + 0x14, 0xBA, 0x06, 0xF3, 0x14, 0x14, 0x79, 0x7C, + 0xDF, 0x60, 0x49, 0x58, 0x23, 0x61, 0xBB, 0xAB, + 0xA3, 0x87, 0xA8, 0x3D, 0x89, 0x91, 0x3F, 0xE4, + 0xC0, 0xC1, 0x12, 0xB9, 0x56, 0x21, 0xA4, 0xBD, + 0xA8, 0x12, 0x3A, 0x14, 0xD1, 0xA8, 0x42, 0xFB, + 0x57, 0xB8, 0x3A, 0x4F, 0xBA, 0xF3, 0x3A, 0x8E, + 0x55, 0x22, 0x38, 0xA5, 0x96, 0xAA, 0xE7, 0xA1, + 0x50, 0xD7, 0x5D, 0xA6, 0x48, 0xBC, 0x44, 0x64, + 0x49, 0x77, 0xBA, 0x1F, 0x87, 0xA4, 0xC6, 0x8A, + 0x8C, 0x4B, 0xD2, 0x45, 0xB7, 0xD0, 0x07, 0x21, + 0xF7, 0xD6, 0x4E, 0x82, 0x2B, 0x08, 0x5B, 0x90, + 0x13, 0x12, 0xEC, 0x37, 0xA8, 0x16, 0x98, 0x02, + 0x16, 0x0C, 0xCE, 0x11, 0x60, 0xF0, 0x10, 0xBE, + 0x8C, 0xBC, 0xAC, 0xE8, 0xE7, 0xB0, 0x05, 0xD7, + 0x83, 0x92, 0x34, 0xA7, 0x07, 0x86, 0x83, 0x09, + 0xD0, 0x37, 0x84, 0xB4, 0x27, 0x3B, 0x1C, 0x8A, + 0x16, 0x01, 0x33, 0xED, 0x29, 0x81, 0x84, 0x70, + 0x46, 0x25, 0xF2, 0x9C, 0xFA, 0x08, 0x6D, 0x13, + 0x26, 0x3E, 0xE5, 0x89, 0x91, 0x23, 0xC5, 0x96, + 0xBA, 0x78, 0x8E, 0x5C, 0x54, 0xA8, 0xE9, 0xBA, + 0x82, 0x9B, 0x8A, 0x9D, 0x90, 0x4B, 0xC4, 0xBC, + 0x0B, 0xBE, 0xA7, 0x6B, 0xC5, 0x3F, 0xF8, 0x11, + 0x21, 0x45, 0x98, 0x47, 0x2C, 0x9C, 0x20, 0x2B, + 0x73, 0xEF, 0xF0, 0x35, 0xDC, 0x09, 0x70, 0x3A, + 0xF7, 0xBF, 0x1B, 0xAB, 0xAA, 0xC7, 0x31, 0x93, + 0xCB, 0x46, 0x11, 0x7A, 0x7C, 0x94, 0x92, 0xA4, + 0x3F, 0xC9, 0x57, 0x89, 0xA9, 0x24, 0xC5, 0x91, + 0x27, 0x87, 0xB2, 0xE2, 0x09, 0x0E, 0xBB, 0xCF, + 0xD3, 0x79, 0x62, 0x21, 0xF0, 0x6D, 0xEB, 0xF9, + 0xCF, 0x70, 0xE0, 0x56, 0xB8, 0xB9, 0x16, 0x1D, + 0x63, 0x47, 0xF4, 0x73, 0x35, 0xF3, 0xE1, 0x77, + 0x6D, 0xA4, 0xBB, 0x87, 0xC1, 0x5C, 0xC8, 0x26, + 0x14, 0x6F, 0xF0, 0x24, 0x9A, 0x41, 0x3B, 0x45, + 0xAA, 0x93, 0xA8, 0x05, 0x19, 0x6E, 0xA4, 0x53, + 0x11, 0x4B, 0x52, 0x4E, 0x31, 0x0A, 0xED, 0xAA, + 0x46, 0xE3, 0xB9, 0x96, 0x42, 0x36, 0x87, 0x82, + 0x56, 0x6D, 0x04, 0x9A, 0x72, 0x6D, 0x6C, 0xCA, + 0x91, 0x09, 0x93, 0xAE, 0xD6, 0x21, 0xD0, 0x14, + 0x9E, 0xA5, 0x88, 0xA9, 0xAB, 0xD9, 0x09, 0xDB, + 0xB6, 0x9A, 0xA2, 0x28, 0x29, 0xD9, 0xB8, 0x3A, + 0xDA, 0x22, 0x09, 0xA6, 0xC2, 0x65, 0x9F, 0x21, + 0x69, 0xD6, 0x68, 0xB9, 0x31, 0x48, 0x42, 0xC6, + 0xE2, 0x2A, 0x74, 0x95, 0x8B, 0x4C, 0x25, 0xBB, + 0xDC, 0xD2, 0x93, 0xD9, 0x9C, 0xB6, 0x09, 0xD8, + 0x66, 0x74, 0x9A, 0x48, 0x5D, 0xFB, 0x56, 0x02, + 0x48, 0x83, 0xCF, 0x54, 0x65, 0xDB, 0xA0, 0x36, + 0x32, 0x06, 0x58, 0x7F, 0x45, 0x59, 0x7F, 0x89, + 0x00, 0x2F, 0xB8, 0x60, 0x72, 0x32, 0x13, 0x8E, + 0x03, 0xB2, 0xA8, 0x94, 0x52, 0x5F, 0x26, 0x53, + 0x70, 0x05, 0x4B, 0x48, 0x86, 0x36, 0x14, 0x47, + 0x2B, 0x95, 0xD0, 0xA2, 0x30, 0x34, 0x42, 0xE3, + 0x78, 0xB0, 0xDD, 0x1C, 0x75, 0xAC, 0xBA, 0xB9, + 0x71, 0xA9, 0xA8, 0xD1, 0x28, 0x1C, 0x79, 0x61, + 0x3A, 0xCE, 0xC6, 0x93, 0x3C, 0x37, 0x7B, 0x3C, + 0x57, 0x8C, 0x2A, 0x61, 0xA1, 0xEC, 0x18, 0x1B, + 0x10, 0x12, 0x97, 0xA3, 0x7C, 0xC5, 0x19, 0x7B, + 0x29, 0x42, 0xF6, 0xA0, 0xE4, 0x70, 0x4C, 0x0E, + 0xC6, 0x35, 0x40, 0x48, 0x1B, 0x9F, 0x15, 0x9D, + 0xC2, 0x55, 0xB5, 0x9B, 0xB5, 0x5D, 0xF4, 0x96, + 0xAE, 0x54, 0x21, 0x7B, 0x76, 0x89, 0xBD, 0x51, + 0xDB, 0xA0, 0x38, 0x3A, 0x3D, 0x72, 0xD8, 0x52, + 0xFF, 0xCA, 0x76, 0xDF, 0x05, 0xB6, 0x6E, 0xEC, + 0xCB, 0xD4, 0x7B, 0xC5, 0x30, 0x40, 0x81, 0x76, + 0x28, 0xC7, 0x1E, 0x36, 0x1D, 0x6A, 0xF8, 0x89, + 0x08, 0x49, 0x16, 0xB4, 0x08, 0xA4, 0x66, 0xC9, + 0x6E, 0x70, 0x86, 0xC4, 0xA6, 0x0A, 0x10, 0xFC, + 0xF7, 0x53, 0x7B, 0xB9, 0x4A, 0xFB, 0xCC, 0x7D, + 0x43, 0x75, 0x90, 0x91, 0x9C, 0x28, 0x65, 0x0C, + 0x4F, 0x23, 0x68, 0x25, 0x92, 0x26, 0xA9, 0xBF, + 0xDA, 0x3A, 0x3A, 0x0B, 0xA1, 0xB5, 0x08, 0x7D, + 0x9D, 0x76, 0x44, 0x2F, 0xD7, 0x86, 0xC6, 0xF8, + 0x1C, 0x68, 0xC0, 0x36, 0x0D, 0x71, 0x94, 0xD7, + 0x07, 0x2C, 0x45, 0x33, 0xAE, 0xA8, 0x6C, 0x2D, + 0x1F, 0x8C, 0x0A, 0x27, 0x69, 0x60, 0x66, 0xF6, + 0xCF, 0xD1, 0x10, 0x03, 0xF7, 0x97, 0x27, 0x0B, + 0x32, 0x38, 0x97, 0x13, 0xCF, 0xFA, 0x09, 0x3D, + 0x99, 0x1B, 0x63, 0x84, 0x4C, 0x38, 0x5E, 0x72, + 0x27, 0x7F, 0x16, 0x6F, 0x5A, 0x39, 0x34, 0xD6, + 0xBB, 0x89, 0xA4, 0x78, 0x8D, 0xE2, 0x83, 0x21, + 0xDE, 0xFC, 0x74, 0x57, 0xAB, 0x48, 0x4B, 0xD3, + 0x09, 0x86, 0xDC, 0x1D, 0xAB, 0x30, 0x08, 0xCD, + 0x7B, 0x22, 0xF6, 0x97, 0x02, 0xFA, 0xBB, 0x9A, + 0x10, 0x45, 0x40, 0x7D, 0xA4, 0x79, 0x1C, 0x35, + 0x90, 0xFF, 0x59, 0x9D, 0x81, 0xD6, 0x88, 0xCF, + 0xA7, 0xCC, 0x12, 0xA6, 0x8C, 0x50, 0xF5, 0x1A, + 0x10, 0x09, 0x41, 0x1B, 0x44, 0x85, 0x0F, 0x90, + 0x15, 0xDC, 0x84, 0xA9, 0x3B, 0x17, 0xC7, 0xA2, + 0x07, 0x55, 0x2C, 0x66, 0x1E, 0xA9, 0x83, 0x8E, + 0x31, 0xB9, 0x5E, 0xAD, 0x54, 0x62, 0x48, 0xE5, + 0x6B, 0xE7, 0xA5, 0x13, 0x05, 0x05, 0x26, 0x87, + 0x71, 0x19, 0x98, 0x80, 0xA1, 0x41, 0x77, 0x1A, + 0x9E, 0x47, 0xAC, 0xFE, 0xD5, 0x90, 0xCB, 0x3A, + 0xA7, 0xCB, 0x7C, 0x5F, 0x74, 0x91, 0x1D, 0x89, + 0x12, 0xC2, 0x9D, 0x62, 0x33, 0xF4, 0xD5, 0x3B, + 0xC6, 0x41, 0x39, 0xE2, 0xF5, 0x5B, 0xE7, 0x55, + 0x07, 0xDD, 0x77, 0x86, 0x8E, 0x38, 0x4A, 0xEC, + 0x58, 0x1F, 0x3F, 0x41, 0x1D, 0xB1, 0xA7, 0x42, + 0x97, 0x2D, 0x3E, 0xBF, 0xD3, 0x31, 0x5C, 0x84, + 0xA5, 0xAD, 0x63, 0xA0, 0xE7, 0x5C, 0x8B, 0xCA, + 0x3E, 0x30, 0x41, 0xE0, 0x5D, 0x90, 0x67, 0xAF, + 0xF3, 0xB1, 0x24, 0x4F, 0x76, 0x3E, 0x79, 0x83 + }; + static const byte seed_1024[WC_ML_KEM_ENC_RAND_SZ] = { + 0x59, 0xC5, 0x15, 0x4C, 0x04, 0xAE, 0x43, 0xAA, + 0xFF, 0x32, 0x70, 0x0F, 0x08, 0x17, 0x00, 0x38, + 0x9D, 0x54, 0xBE, 0xC4, 0xC3, 0x7C, 0x08, 0x8B, + 0x1C, 0x53, 0xF6, 0x62, 0x12, 0xB1, 0x2C, 0x72 + }; + static const byte c_1024[WC_ML_KEM_1024_CIPHER_TEXT_SIZE] = { + 0xE2, 0xD5, 0xFD, 0x4C, 0x13, 0xCE, 0xA0, 0xB5, + 0x2D, 0x87, 0x4F, 0xEA, 0x90, 0x12, 0xF3, 0xA5, + 0x17, 0x43, 0xA1, 0x09, 0x37, 0x10, 0xBB, 0xF2, + 0x39, 0x50, 0xF9, 0x14, 0x7A, 0x47, 0x2E, 0xE5, + 0x53, 0x39, 0x28, 0xA2, 0xF4, 0x6D, 0x59, 0x2F, + 0x35, 0xDA, 0x8B, 0x4F, 0x75, 0x8C, 0x89, 0x3B, + 0x0D, 0x7B, 0x98, 0x94, 0x8B, 0xE4, 0x47, 0xB1, + 0x7C, 0xB2, 0xAE, 0x58, 0xAF, 0x8A, 0x48, 0x9D, + 0xDD, 0x92, 0x32, 0xB9, 0x9B, 0x1C, 0x0D, 0x2D, + 0xE7, 0x7C, 0xAA, 0x47, 0x2B, 0xC3, 0xBB, 0xD4, + 0xA7, 0xC6, 0x0D, 0xBF, 0xDC, 0xA9, 0x2E, 0xBF, + 0x3A, 0x1C, 0xE1, 0xC2, 0x2D, 0xAD, 0x13, 0xE8, + 0x87, 0x00, 0x4E, 0x29, 0x24, 0xFD, 0x22, 0x65, + 0x6F, 0x5E, 0x50, 0x87, 0x91, 0xDE, 0x06, 0xD8, + 0x5E, 0x1A, 0x14, 0x26, 0x80, 0x8E, 0xD9, 0xA8, + 0x9F, 0x6E, 0x2F, 0xD3, 0xC2, 0x45, 0xD4, 0x75, + 0x8B, 0x22, 0xB0, 0x2C, 0xAD, 0xE3, 0x3B, 0x60, + 0xFC, 0x88, 0x9A, 0x33, 0xFC, 0x44, 0x47, 0xED, + 0xEB, 0xBF, 0xD4, 0x53, 0x0D, 0xE8, 0x65, 0x96, + 0xA3, 0x37, 0x89, 0xD5, 0xDB, 0xA6, 0xE6, 0xEC, + 0x9F, 0x89, 0x87, 0x9A, 0xF4, 0xBE, 0x49, 0x09, + 0xA6, 0x90, 0x17, 0xC9, 0xBB, 0x7A, 0x5E, 0x31, + 0x81, 0x5E, 0xA5, 0xF1, 0x32, 0xEE, 0xC4, 0x98, + 0x4F, 0xAA, 0x7C, 0xCF, 0x59, 0x4D, 0xD0, 0x0D, + 0x4D, 0x84, 0x87, 0xE4, 0x56, 0x21, 0xAF, 0x8F, + 0x6E, 0x33, 0x05, 0x51, 0x43, 0x9C, 0x93, 0xEC, + 0x07, 0x8A, 0x7A, 0x3C, 0xC1, 0x59, 0x4A, 0xF9, + 0x1F, 0x84, 0x17, 0x37, 0x5F, 0xD6, 0x08, 0x8C, + 0xEB, 0x5E, 0x85, 0xC6, 0x70, 0x99, 0x09, 0x1B, + 0xAC, 0x11, 0x49, 0x8A, 0x0D, 0x71, 0x14, 0x55, + 0xF5, 0xE0, 0xD9, 0x5C, 0xD7, 0xBB, 0xE5, 0xCD, + 0xD8, 0xFE, 0xCB, 0x31, 0x9E, 0x68, 0x53, 0xC2, + 0x3C, 0x9B, 0xE2, 0xC7, 0x63, 0xDF, 0x57, 0x86, + 0x66, 0xC4, 0x0A, 0x40, 0xA8, 0x74, 0x86, 0xE4, + 0x6B, 0xA8, 0x71, 0x61, 0x46, 0x19, 0x29, 0x04, + 0x51, 0x0A, 0x6D, 0xC5, 0x9D, 0xA8, 0x02, 0x58, + 0x25, 0x28, 0x3D, 0x68, 0x4D, 0xB9, 0x14, 0x10, + 0xB4, 0xF1, 0x2C, 0x6D, 0x8F, 0xBD, 0x0A, 0xDD, + 0x75, 0xD3, 0x09, 0x89, 0x18, 0xCB, 0x04, 0xAC, + 0x7B, 0xC4, 0xDB, 0x0D, 0x6B, 0xCD, 0xF1, 0x19, + 0x4D, 0xD8, 0x62, 0x92, 0xE0, 0x5B, 0x7B, 0x86, + 0x30, 0x62, 0x5B, 0x58, 0x9C, 0xC5, 0x09, 0xD2, + 0x15, 0xBB, 0xD0, 0x6A, 0x2E, 0x7C, 0x66, 0xF4, + 0x24, 0xCD, 0xF8, 0xC4, 0x0A, 0xC6, 0xC1, 0xE5, + 0xAE, 0x6C, 0x96, 0x4B, 0x7D, 0x9E, 0x92, 0xF9, + 0x5F, 0xC5, 0xC8, 0x85, 0x22, 0x81, 0x62, 0x8B, + 0x81, 0xB9, 0xAF, 0xAB, 0xC7, 0xF0, 0x3B, 0xE3, + 0xF6, 0x2E, 0x80, 0x47, 0xBB, 0x88, 0xD0, 0x1C, + 0x68, 0x68, 0x7B, 0x8D, 0xD4, 0xFE, 0x63, 0x82, + 0x00, 0x62, 0xB6, 0x78, 0x8A, 0x53, 0x72, 0x90, + 0x53, 0x82, 0x6E, 0xD3, 0xB7, 0xC7, 0xEF, 0x82, + 0x41, 0xE1, 0x9C, 0x85, 0x11, 0x7B, 0x3C, 0x53, + 0x41, 0x88, 0x1D, 0x4F, 0x29, 0x9E, 0x50, 0x37, + 0x4C, 0x8E, 0xEF, 0xD5, 0x56, 0x0B, 0xD1, 0x83, + 0x19, 0xA7, 0x96, 0x3A, 0x3D, 0x02, 0xF0, 0xFB, + 0xE8, 0x4B, 0xC4, 0x84, 0xB5, 0xA4, 0x01, 0x8B, + 0x97, 0xD2, 0x74, 0x19, 0x1C, 0x95, 0xF7, 0x02, + 0xBA, 0xB9, 0xB0, 0xD1, 0x05, 0xFA, 0xF9, 0xFD, + 0xCF, 0xF9, 0x7E, 0x43, 0x72, 0x36, 0x56, 0x75, + 0x99, 0xFA, 0xF7, 0x3B, 0x07, 0x5D, 0x40, 0x61, + 0x04, 0xD4, 0x03, 0xCD, 0xF8, 0x12, 0x24, 0xDA, + 0x59, 0x0B, 0xEC, 0x28, 0x97, 0xE3, 0x01, 0x09, + 0xE1, 0xF2, 0xE5, 0xAE, 0x46, 0x10, 0xC8, 0x09, + 0xA7, 0x3F, 0x63, 0x8C, 0x84, 0x21, 0x0B, 0x34, + 0x47, 0xA7, 0xC8, 0xB6, 0xDD, 0xDB, 0x5A, 0xE2, + 0x00, 0xBF, 0x20, 0xE2, 0xFE, 0x4D, 0x4B, 0xA6, + 0xC6, 0xB1, 0x27, 0x67, 0xFB, 0x87, 0x60, 0xF6, + 0x6C, 0x51, 0x18, 0xE7, 0xA9, 0x93, 0x5B, 0x41, + 0xC9, 0xA4, 0x71, 0xA1, 0xD3, 0x23, 0x76, 0x88, + 0xC1, 0xE6, 0x18, 0xCC, 0x3B, 0xE9, 0x36, 0xAA, + 0x3F, 0x5E, 0x44, 0xE0, 0x86, 0x82, 0x0B, 0x81, + 0x0E, 0x06, 0x32, 0x11, 0xFC, 0x21, 0xC4, 0x04, + 0x4B, 0x3A, 0xC4, 0xD0, 0x0D, 0xF1, 0xBC, 0xC7, + 0xB2, 0x4D, 0xC0, 0x7B, 0xA4, 0x8B, 0x23, 0xB0, + 0xFC, 0x12, 0xA3, 0xED, 0x3D, 0x0A, 0x5C, 0xF7, + 0x67, 0x14, 0x15, 0xAB, 0x9C, 0xF2, 0x12, 0x86, + 0xFE, 0x63, 0xFB, 0x41, 0x41, 0x85, 0x70, 0x55, + 0x5D, 0x47, 0x39, 0xB8, 0x81, 0x04, 0xA8, 0x59, + 0x3F, 0x29, 0x30, 0x25, 0xA4, 0xE3, 0xEE, 0x7C, + 0x67, 0xE4, 0xB4, 0x8E, 0x40, 0xF6, 0xBA, 0x8C, + 0x09, 0x86, 0x0C, 0x3F, 0xBB, 0xE5, 0x5D, 0x45, + 0xB4, 0x5F, 0xC9, 0xAB, 0x62, 0x9B, 0x17, 0xC2, + 0x76, 0xC9, 0xC9, 0xE2, 0xAF, 0x3A, 0x04, 0x3B, + 0xEA, 0xFC, 0x18, 0xFD, 0x4F, 0x25, 0xEE, 0x7F, + 0x83, 0xBD, 0xDC, 0xD2, 0xD9, 0x39, 0x14, 0xB7, + 0xED, 0x4F, 0x7C, 0x9A, 0xF1, 0x27, 0xF3, 0xF1, + 0x5C, 0x27, 0x7B, 0xE1, 0x65, 0x51, 0xFE, 0xF3, + 0xAE, 0x03, 0xD7, 0xB9, 0x14, 0x3F, 0x0C, 0x9C, + 0x01, 0x9A, 0xB9, 0x7E, 0xEA, 0x07, 0x63, 0x66, + 0x13, 0x1F, 0x51, 0x83, 0x63, 0x71, 0x1B, 0x34, + 0xE9, 0x6D, 0x3F, 0x8A, 0x51, 0x3F, 0x3E, 0x20, + 0xB1, 0xD4, 0x52, 0xC4, 0xB7, 0xAE, 0x3B, 0x97, + 0x5E, 0xA9, 0x4D, 0x88, 0x0D, 0xAC, 0x66, 0x93, + 0x39, 0x97, 0x50, 0xD0, 0x22, 0x20, 0x40, 0x3F, + 0x0D, 0x3E, 0x3F, 0xC1, 0x17, 0x2A, 0x4D, 0xE9, + 0xDC, 0x28, 0x0E, 0xAF, 0x0F, 0xEE, 0x28, 0x83, + 0xA6, 0x66, 0x0B, 0xF5, 0xA3, 0xD2, 0x46, 0xFF, + 0x41, 0xD2, 0x1B, 0x36, 0xEA, 0x52, 0x1C, 0xF7, + 0xAA, 0x68, 0x9F, 0x80, 0x0D, 0x0F, 0x86, 0xF4, + 0xFA, 0x10, 0x57, 0xD8, 0xA1, 0x3F, 0x9D, 0xA8, + 0xFF, 0xFD, 0x0D, 0xC1, 0xFA, 0xD3, 0xC0, 0x4B, + 0xB1, 0xCC, 0xCB, 0x7C, 0x83, 0x4D, 0xB0, 0x51, + 0xA7, 0xAC, 0x2E, 0x4C, 0x60, 0x30, 0x19, 0x96, + 0xC9, 0x30, 0x71, 0xEA, 0x41, 0x6B, 0x42, 0x17, + 0x59, 0x93, 0x56, 0x59, 0xCF, 0x62, 0xCA, 0x5F, + 0x13, 0xAE, 0x07, 0xC3, 0xB1, 0x95, 0xC1, 0x48, + 0x15, 0x9D, 0x8B, 0xEB, 0x03, 0xD4, 0x40, 0xB0, + 0x0F, 0x53, 0x05, 0x76, 0x5F, 0x20, 0xC0, 0xC4, + 0x6E, 0xEE, 0x59, 0xC6, 0xD1, 0x62, 0x06, 0x40, + 0x2D, 0xB1, 0xC7, 0x15, 0xE8, 0x88, 0xBD, 0xE5, + 0x9C, 0x78, 0x1F, 0x35, 0xA7, 0xCC, 0x7C, 0x1C, + 0x5E, 0xCB, 0x21, 0x55, 0xAE, 0x3E, 0x95, 0x9C, + 0x09, 0x64, 0xCC, 0x1E, 0xF8, 0xD7, 0xC6, 0x9D, + 0x14, 0x58, 0xA9, 0xA4, 0x2F, 0x95, 0xF4, 0xC6, + 0xB5, 0xB9, 0x96, 0x34, 0x57, 0x12, 0xAA, 0x29, + 0x0F, 0xBB, 0xF7, 0xDF, 0xD4, 0xA6, 0xE8, 0x64, + 0x63, 0x02, 0x2A, 0x3F, 0x47, 0x25, 0xF6, 0x51, + 0x1B, 0xF7, 0xEA, 0x5E, 0x95, 0xC7, 0x07, 0xCD, + 0x35, 0x73, 0x60, 0x9A, 0xAD, 0xEA, 0xF5, 0x40, + 0x15, 0x2C, 0x49, 0x5F, 0x37, 0xFE, 0x6E, 0xC8, + 0xBB, 0x9F, 0xA2, 0xAA, 0x61, 0xD1, 0x57, 0x35, + 0x93, 0x4F, 0x47, 0x37, 0x92, 0x8F, 0xDE, 0x90, + 0xBA, 0x99, 0x57, 0x22, 0x46, 0x5D, 0x4A, 0x64, + 0x50, 0x5A, 0x52, 0x01, 0xF0, 0x7A, 0xA5, 0x8C, + 0xFD, 0x8A, 0xE2, 0x26, 0xE0, 0x20, 0x70, 0xB2, + 0xDB, 0xF5, 0x12, 0xB9, 0x75, 0x31, 0x9A, 0x7E, + 0x87, 0x53, 0xB4, 0xFD, 0xAE, 0x0E, 0xB4, 0x92, + 0x28, 0x69, 0xCC, 0x8E, 0x25, 0xC4, 0xA5, 0x56, + 0x0C, 0x2A, 0x06, 0x85, 0xDE, 0x3A, 0xC3, 0x92, + 0xA8, 0x92, 0x5B, 0xA8, 0x82, 0x00, 0x48, 0x94, + 0x74, 0x2E, 0x43, 0xCC, 0xFC, 0x27, 0x74, 0x39, + 0xEC, 0x80, 0x50, 0xA9, 0xAE, 0xB4, 0x29, 0x32, + 0xE0, 0x1C, 0x84, 0x0D, 0xFC, 0xED, 0xCC, 0x34, + 0xD3, 0x99, 0x12, 0x89, 0xA6, 0x2C, 0x17, 0xD1, + 0x28, 0x4C, 0x83, 0x95, 0x14, 0xB9, 0x33, 0x51, + 0xDB, 0xB2, 0xDD, 0xA8, 0x1F, 0x92, 0x45, 0x65, + 0xD7, 0x0E, 0x70, 0x79, 0xD5, 0xB8, 0x12, 0x6C, + 0xAA, 0xB7, 0xA4, 0xA1, 0xC7, 0x31, 0x65, 0x5A, + 0x53, 0xBC, 0xC0, 0x9F, 0x5D, 0x63, 0xEC, 0x90, + 0x86, 0xDE, 0xA6, 0x50, 0x05, 0x59, 0x85, 0xED, + 0xFA, 0x82, 0x97, 0xD9, 0xC9, 0x54, 0x10, 0xC5, + 0xD1, 0x89, 0x4D, 0x17, 0xD5, 0x93, 0x05, 0x49, + 0xAD, 0xBC, 0x2B, 0x87, 0x33, 0xC9, 0x9F, 0xE6, + 0x2E, 0x17, 0xC4, 0xDE, 0x34, 0xA5, 0xD8, 0x9B, + 0x12, 0xD1, 0x8E, 0x42, 0xA4, 0x22, 0xD2, 0xCE, + 0x77, 0x9C, 0x2C, 0x28, 0xEB, 0x2D, 0x98, 0x00, + 0x3D, 0x5C, 0xD3, 0x23, 0xFC, 0xBE, 0xCF, 0x02, + 0xB5, 0x06, 0x6E, 0x0E, 0x73, 0x48, 0x10, 0xF0, + 0x9E, 0xD8, 0x90, 0x13, 0xC0, 0x0F, 0x01, 0x1B, + 0xD2, 0x20, 0xF2, 0xE5, 0xD6, 0xA3, 0x62, 0xDF, + 0x90, 0x59, 0x91, 0x98, 0xA0, 0x93, 0xB0, 0x3C, + 0x8D, 0x8E, 0xFB, 0xFE, 0x0B, 0x61, 0x75, 0x92, + 0xFA, 0xF1, 0xE6, 0x42, 0x20, 0xC4, 0x44, 0x0B, + 0x53, 0xFF, 0xB4, 0x71, 0x64, 0xF3, 0x69, 0xC9, + 0x52, 0x90, 0xBA, 0x9F, 0x31, 0x08, 0xD6, 0x86, + 0xC5, 0x7D, 0xB6, 0x45, 0xC5, 0x3C, 0x01, 0x2E, + 0x57, 0xAF, 0x25, 0xBD, 0x66, 0x93, 0xE2, 0xCC, + 0x6B, 0x57, 0x65, 0x1A, 0xF1, 0x59, 0x1F, 0xE5, + 0xD8, 0x91, 0x66, 0x40, 0xEC, 0x01, 0x7C, 0x25, + 0x3D, 0xF0, 0x60, 0x6B, 0xB6, 0xB3, 0x03, 0x5F, + 0xAE, 0x74, 0x8F, 0x3D, 0x40, 0x34, 0x22, 0x3B, + 0x1B, 0x5E, 0xFB, 0xF5, 0x28, 0x3E, 0x77, 0x8C, + 0x10, 0x94, 0x29, 0x1C, 0xF7, 0xB1, 0x9B, 0xE0, + 0xF3, 0x17, 0x35, 0x0E, 0x6F, 0x85, 0x18, 0xFD, + 0xE0, 0xEF, 0xB1, 0x38, 0x1F, 0xB6, 0xE1, 0x6C, + 0x24, 0x1F, 0x7F, 0x17, 0xA5, 0x21, 0x06, 0x93, + 0xA2, 0x74, 0x15, 0x9E, 0x7F, 0xAC, 0x86, 0x8C, + 0xD0, 0xDC, 0x43, 0x59, 0xC3, 0xD9, 0xEE, 0xFE, + 0xA0, 0xD9, 0xE3, 0x1E, 0x43, 0xFA, 0x65, 0x13, + 0x92, 0xC6, 0x5A, 0x54, 0x3A, 0x59, 0xB3, 0xEE, + 0xE3, 0xA6, 0x39, 0xDC, 0x94, 0x17, 0xD0, 0x56, + 0xA5, 0xFF, 0x0F, 0x16, 0x0B, 0xEE, 0xE2, 0xEA, + 0xC2, 0x9A, 0x7D, 0x88, 0xC0, 0x98, 0x2C, 0xF7, + 0x0B, 0x5A, 0x46, 0x37, 0x9F, 0x21, 0xE5, 0x06, + 0xAA, 0xC6, 0x1A, 0x9B, 0xB1, 0xB8, 0xC2, 0xB9, + 0xDA, 0xB0, 0xE4, 0x4A, 0x82, 0x3B, 0x61, 0xD0, + 0xAA, 0x11, 0xD9, 0x4F, 0x76, 0xA4, 0xA8, 0xE2, + 0x1F, 0x9D, 0x42, 0x80, 0x68, 0x32, 0x08, 0xF4, + 0xEA, 0x91, 0x11, 0x16, 0xF6, 0xFD, 0x6A, 0x97, + 0x42, 0x69, 0x34, 0xEC, 0x34, 0x26, 0xB8, 0xC8, + 0xF7, 0x03, 0xDA, 0x85, 0xE9, 0xDC, 0xF9, 0x93, + 0x36, 0x13, 0x60, 0x03, 0x72, 0x8B, 0x8E, 0xCD, + 0xD0, 0x4A, 0x38, 0x9F, 0x6A, 0x81, 0x7A, 0x78, + 0xBF, 0xA6, 0x1B, 0xA4, 0x60, 0x20, 0xBF, 0x3C, + 0x34, 0x82, 0x95, 0x08, 0xF9, 0xD0, 0x6D, 0x15, + 0x53, 0xCD, 0x98, 0x7A, 0xAC, 0x38, 0x0D, 0x86, + 0xF1, 0x68, 0x84, 0x3B, 0xA3, 0x90, 0x4D, 0xE5, + 0xF7, 0x05, 0x8A, 0x41, 0xB4, 0xCD, 0x38, 0x8B, + 0xC9, 0xCE, 0x3A, 0xBA, 0x7E, 0xE7, 0x13, 0x9B, + 0x7F, 0xC9, 0xE5, 0xB8, 0xCF, 0xAA, 0xA3, 0x89, + 0x90, 0xBD, 0x4A, 0x5D, 0xB3, 0x2E, 0x26, 0x13, + 0xE7, 0xEC, 0x4F, 0x5F, 0x8B, 0x12, 0x92, 0xA3, + 0x8C, 0x6F, 0x4F, 0xF5, 0xA4, 0x04, 0x90, 0xD7, + 0x6B, 0x12, 0x66, 0x52, 0xFC, 0xF8, 0x6E, 0x24, + 0x52, 0x35, 0xD6, 0x36, 0xC6, 0x5C, 0xD1, 0x02, + 0xB0, 0x1E, 0x22, 0x78, 0x1A, 0x72, 0x91, 0x8C + }; + static const byte k_1024[WC_ML_KEM_SS_SZ] = { + 0x72, 0x64, 0xBD, 0xE5, 0xC6, 0xCE, 0xC1, 0x48, + 0x49, 0x69, 0x3E, 0x2C, 0x3C, 0x86, 0xE4, 0x8F, + 0x80, 0x95, 0x8A, 0x4F, 0x61, 0x86, 0xFC, 0x69, + 0x33, 0x3A, 0x41, 0x48, 0xE6, 0xE4, 0x97, 0xF3 + }; +#endif + static byte ct[WC_ML_KEM_MAX_CIPHER_TEXT_SIZE]; + static byte ss[WC_ML_KEM_SS_SZ]; + + key = (KyberKey*)XMALLOC(sizeof(KyberKey), NULL, DYNAMIC_TYPE_TMP_BUFFER); + ExpectNotNull(key); + if (key != NULL) { + XMEMSET(key, 0, sizeof(KyberKey)); + } + +#ifndef WOLFSSL_NO_ML_KEM_512 + ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_512, key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_KyberKey_DecodePublicKey(key, ek_512, sizeof(ek_512)), 0); + ExpectIntEQ(wc_KyberKey_EncapsulateWithRandom(key, ct, ss, seed_512, + sizeof(seed_512)), 0); + ExpectIntEQ(XMEMCMP(ct, c_512, WC_ML_KEM_512_CIPHER_TEXT_SIZE), 0); + ExpectIntEQ(XMEMCMP(ss, k_512, WC_ML_KEM_SS_SZ), 0); + wc_KyberKey_Free(key); +#endif +#ifndef WOLFSSL_NO_ML_KEM_768 + ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_768, key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_KyberKey_DecodePublicKey(key, ek_768, sizeof(ek_768)), 0); + ExpectIntEQ(wc_KyberKey_EncapsulateWithRandom(key, ct, ss, seed_768, + sizeof(seed_768)), 0); + ExpectIntEQ(XMEMCMP(ct, c_768, WC_ML_KEM_768_CIPHER_TEXT_SIZE), 0); + ExpectIntEQ(XMEMCMP(ss, k_768, WC_ML_KEM_SS_SZ), 0); + wc_KyberKey_Free(key); +#endif +#ifndef WOLFSSL_NO_ML_KEM_1024 + ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_1024, key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_KyberKey_DecodePublicKey(key, ek_1024, sizeof(ek_1024)), 0); + ExpectIntEQ(wc_KyberKey_EncapsulateWithRandom(key, ct, ss, seed_1024, + sizeof(seed_1024)), 0); + ExpectIntEQ(XMEMCMP(ct, c_1024, WC_ML_KEM_1024_CIPHER_TEXT_SIZE), 0); + ExpectIntEQ(XMEMCMP(ss, k_1024, WC_ML_KEM_SS_SZ), 0); + wc_KyberKey_Free(key); +#endif + + XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); +#endif + return EXPECT_RESULT(); +} + +int test_wc_mlkem_decapsulate_kats(void) +{ + EXPECT_DECLS; +#if defined(WOLFSSL_HAVE_KYBER) && defined(WOLFSSL_WC_KYBER) && \ + !defined(WOLFSSL_NO_ML_KEM) && !defined(WOLFSSL_KYBER_NO_DECAPSULATE) + KyberKey* key; +#ifndef WOLFSSL_NO_ML_KEM_512 + static const byte dk_512[WC_ML_KEM_512_PRIVATE_KEY_SIZE] = { + 0x69, 0xF9, 0xCB, 0xFD, 0x12, 0x37, 0xBA, 0x16, + 0x1C, 0xF6, 0xE6, 0xC1, 0x8F, 0x48, 0x8F, 0xC6, + 0xE3, 0x9A, 0xB4, 0xA5, 0xC9, 0xE6, 0xC2, 0x2E, + 0xA4, 0xE3, 0xAD, 0x8F, 0x26, 0x7A, 0x9C, 0x44, + 0x20, 0x10, 0xD3, 0x2E, 0x61, 0xF8, 0x3E, 0x6B, + 0xFA, 0x5C, 0x58, 0x70, 0x61, 0x45, 0x37, 0x6D, + 0xBB, 0x84, 0x95, 0x28, 0xF6, 0x80, 0x07, 0xC8, + 0x22, 0xB3, 0x3A, 0x95, 0xB8, 0x49, 0x04, 0xDC, + 0xD2, 0x70, 0x8D, 0x03, 0x40, 0xC8, 0xB8, 0x08, + 0xBC, 0xD3, 0xAA, 0xD0, 0xE4, 0x8B, 0x85, 0x84, + 0x95, 0x83, 0xA1, 0xB4, 0xE5, 0x94, 0x5D, 0xD9, + 0x51, 0x4A, 0x7F, 0x64, 0x61, 0xE0, 0x57, 0xB7, + 0xEC, 0xF6, 0x19, 0x57, 0xE9, 0x7C, 0xF6, 0x28, + 0x15, 0xF9, 0xC3, 0x22, 0x94, 0xB3, 0x26, 0xE1, + 0xA1, 0xC4, 0xE3, 0x60, 0xB9, 0x49, 0x8B, 0xA8, + 0x0F, 0x8C, 0xA9, 0x15, 0x32, 0xB1, 0x71, 0xD0, + 0xAE, 0xFC, 0x48, 0x49, 0xFA, 0x53, 0xBC, 0x61, + 0x79, 0x32, 0xE2, 0x08, 0xA6, 0x77, 0xC6, 0x04, + 0x4A, 0x66, 0x00, 0xB8, 0xD8, 0xB8, 0x3F, 0x26, + 0xA7, 0x47, 0xB1, 0x8C, 0xFB, 0x78, 0xBE, 0xAF, + 0xC5, 0x51, 0xAD, 0x52, 0xB7, 0xCA, 0x6C, 0xB8, + 0x8F, 0x3B, 0x5D, 0x9C, 0xE2, 0xAF, 0x6C, 0x67, + 0x95, 0x6C, 0x47, 0x8C, 0xEF, 0x49, 0x1F, 0x59, + 0xE0, 0x19, 0x1B, 0x3B, 0xBE, 0x92, 0x9B, 0x94, + 0xB6, 0x66, 0xC1, 0x76, 0x13, 0x8B, 0x00, 0xF4, + 0x97, 0x24, 0x34, 0x1E, 0xE2, 0xE1, 0x64, 0xB9, + 0x4C, 0x05, 0x3C, 0x18, 0x5A, 0x51, 0xF9, 0x3E, + 0x00, 0xF3, 0x68, 0x61, 0x61, 0x3A, 0x7F, 0xD7, + 0x2F, 0xEB, 0xD2, 0x3A, 0x8B, 0x96, 0xA2, 0x60, + 0x23, 0x42, 0x39, 0xC9, 0x62, 0x8F, 0x99, 0x5D, + 0xC1, 0x38, 0x07, 0xB4, 0x3A, 0x69, 0x46, 0x81, + 0x67, 0xCB, 0x1A, 0x8F, 0x9D, 0xD0, 0x7E, 0xE3, + 0xB3, 0x32, 0x38, 0xF6, 0x30, 0x96, 0xEB, 0xC4, + 0x9D, 0x50, 0x51, 0xC4, 0xB6, 0x59, 0x63, 0xD7, + 0x4A, 0x47, 0x66, 0xC2, 0x26, 0xF0, 0xB9, 0x4F, + 0x18, 0x62, 0xC2, 0x12, 0x4C, 0x8C, 0x74, 0x97, + 0x48, 0xC0, 0xBC, 0x4D, 0xC1, 0x4C, 0xB3, 0x49, + 0x06, 0xB8, 0x1C, 0x55, 0x24, 0xFB, 0x81, 0x00, + 0x79, 0x85, 0x42, 0xDC, 0x6C, 0xC2, 0xAA, 0x0A, + 0x70, 0x85, 0x75, 0xEA, 0xBC, 0xC1, 0x1F, 0x96, + 0xA9, 0xE6, 0x1C, 0x01, 0x7A, 0x96, 0xA7, 0xCE, + 0x93, 0xC4, 0x20, 0x91, 0x73, 0x71, 0x13, 0xAE, + 0x78, 0x3C, 0x0A, 0xE8, 0x75, 0x5E, 0x59, 0x41, + 0x11, 0xED, 0xFA, 0xBF, 0xD8, 0x6C, 0x32, 0x12, + 0xC6, 0x12, 0xA7, 0xB6, 0x2A, 0xFD, 0x3C, 0x7A, + 0x5C, 0x78, 0xB2, 0xF0, 0x73, 0x44, 0xB7, 0x89, + 0xC2, 0xB2, 0xDB, 0xB5, 0xF4, 0x44, 0x8B, 0xE9, + 0x7B, 0xBA, 0x42, 0x33, 0xC0, 0x03, 0x9C, 0x0F, + 0xE8, 0x43, 0x00, 0xF9, 0xB0, 0x3A, 0xC9, 0x94, + 0x97, 0xE6, 0xD4, 0x6B, 0x6E, 0x95, 0x30, 0x8F, + 0xF8, 0x47, 0x90, 0xF6, 0x12, 0xCF, 0x18, 0x6E, + 0xC1, 0x68, 0x11, 0xE8, 0x0C, 0x17, 0x93, 0x16, + 0xA6, 0x3B, 0x25, 0x70, 0x3F, 0x60, 0xB8, 0x42, + 0xB6, 0x19, 0x07, 0xE6, 0x28, 0x94, 0xE7, 0x36, + 0x64, 0x7B, 0x3C, 0x09, 0xDA, 0x6F, 0xEC, 0x59, + 0x32, 0x78, 0x2B, 0x36, 0xE0, 0x63, 0x50, 0x85, + 0xA3, 0x94, 0x9E, 0x69, 0x4D, 0x7E, 0x17, 0xCB, + 0xA3, 0xD9, 0x06, 0x43, 0x30, 0x43, 0x8C, 0x07, + 0x1B, 0x58, 0x36, 0xA7, 0x70, 0xC5, 0x5F, 0x62, + 0x13, 0xCC, 0x14, 0x25, 0x84, 0x5D, 0xE5, 0xA3, + 0x34, 0xD7, 0x5D, 0x3E, 0x50, 0x58, 0xC7, 0x80, + 0x9F, 0xDA, 0x4B, 0xCD, 0x78, 0x19, 0x1D, 0xA9, + 0x79, 0x73, 0x25, 0xE6, 0x23, 0x6C, 0x26, 0x50, + 0xFC, 0x60, 0x4E, 0xE4, 0x3A, 0x83, 0xCE, 0xB3, + 0x49, 0x80, 0x08, 0x44, 0x03, 0xA3, 0x32, 0x59, + 0x85, 0x79, 0x07, 0x79, 0x9A, 0x9D, 0x2A, 0x71, + 0x3A, 0x63, 0x3B, 0x5C, 0x90, 0x47, 0x27, 0xF6, + 0x1E, 0x42, 0x52, 0x09, 0x91, 0xD6, 0x55, 0x70, + 0x5C, 0xB6, 0xBC, 0x1B, 0x74, 0xAF, 0x60, 0x71, + 0x3E, 0xF8, 0x71, 0x2F, 0x14, 0x08, 0x68, 0x69, + 0xBE, 0x8E, 0xB2, 0x97, 0xD2, 0x28, 0xB3, 0x25, + 0xA0, 0x60, 0x9F, 0xD6, 0x15, 0xEA, 0xB7, 0x08, + 0x15, 0x40, 0xA6, 0x1A, 0x82, 0xAB, 0xF4, 0x3B, + 0x7D, 0xF9, 0x8A, 0x59, 0x5B, 0xE1, 0x1F, 0x41, + 0x6B, 0x41, 0xE1, 0xEB, 0x75, 0xBB, 0x57, 0x97, + 0x7C, 0x25, 0xC6, 0x4E, 0x97, 0x43, 0x7D, 0x88, + 0xCA, 0x5F, 0xDA, 0x61, 0x59, 0xD6, 0x68, 0xF6, + 0xBA, 0xB8, 0x15, 0x75, 0x55, 0xB5, 0xD5, 0x4C, + 0x0F, 0x47, 0xCB, 0xCD, 0x16, 0x84, 0x3B, 0x1A, + 0x0A, 0x0F, 0x02, 0x10, 0xEE, 0x31, 0x03, 0x13, + 0x96, 0x7F, 0x3D, 0x51, 0x64, 0x99, 0x01, 0x8F, + 0xDF, 0x31, 0x14, 0x77, 0x24, 0x70, 0xA1, 0x88, + 0x9C, 0xC0, 0x6C, 0xB6, 0xB6, 0x69, 0x0A, 0xC3, + 0x1A, 0xBC, 0xFA, 0xF4, 0xBC, 0x70, 0x76, 0x84, + 0x54, 0x5B, 0x00, 0x0B, 0x58, 0x0C, 0xCB, 0xFC, + 0xBC, 0xE9, 0xFA, 0x70, 0xAA, 0xEA, 0x0B, 0xBD, + 0x91, 0x10, 0x99, 0x2A, 0x7C, 0x6C, 0x06, 0xCB, + 0x36, 0x85, 0x27, 0xFD, 0x22, 0x90, 0x90, 0x75, + 0x7E, 0x6F, 0xE7, 0x57, 0x05, 0xFA, 0x59, 0x2A, + 0x76, 0x08, 0xF0, 0x50, 0xC6, 0xF8, 0x87, 0x03, + 0xCC, 0x28, 0xCB, 0x00, 0x0C, 0x1D, 0x7E, 0x77, + 0xB8, 0x97, 0xB7, 0x2C, 0x62, 0xBC, 0xC7, 0xAE, + 0xA2, 0x1A, 0x57, 0x72, 0x94, 0x83, 0xD2, 0x21, + 0x18, 0x32, 0xBE, 0xD6, 0x12, 0x43, 0x0C, 0x98, + 0x31, 0x03, 0xC6, 0x9E, 0x8C, 0x07, 0x2C, 0x0E, + 0xA7, 0x89, 0x8F, 0x22, 0x83, 0xBE, 0xC4, 0x8C, + 0x5A, 0xC8, 0x19, 0x84, 0xD4, 0xA5, 0xA8, 0x36, + 0x19, 0x73, 0x5A, 0x84, 0x2B, 0xD1, 0x72, 0xC0, + 0xD1, 0xB3, 0x9F, 0x43, 0x58, 0x8A, 0xF1, 0x70, + 0x45, 0x8B, 0xA9, 0xEE, 0x74, 0x92, 0xEA, 0xAA, + 0x94, 0xEA, 0x53, 0xA4, 0xD3, 0x84, 0x98, 0xEC, + 0xBB, 0x98, 0xA5, 0xF4, 0x07, 0xE7, 0xC9, 0x7B, + 0x4E, 0x16, 0x6E, 0x39, 0x71, 0x92, 0xC2, 0x16, + 0x03, 0x30, 0x14, 0xB8, 0x78, 0xE9, 0x38, 0x07, + 0x5C, 0x6C, 0x1F, 0x10, 0xA0, 0x06, 0x5A, 0xBC, + 0x31, 0x63, 0x72, 0x2F, 0x1A, 0x2E, 0xFF, 0xEC, + 0x8D, 0x6E, 0x3A, 0x0C, 0x4F, 0x71, 0x74, 0xFC, + 0x16, 0xB7, 0x9F, 0xB5, 0x18, 0x6A, 0x75, 0x16, + 0x8F, 0x81, 0xA5, 0x6A, 0xA4, 0x8A, 0x20, 0xA0, + 0x4B, 0xDD, 0xF1, 0x82, 0xC6, 0xE1, 0x79, 0xC3, + 0xF6, 0x90, 0x61, 0x55, 0x5E, 0xF7, 0x39, 0x6D, + 0xD0, 0xB7, 0x49, 0x96, 0x01, 0xA6, 0xEB, 0x3A, + 0x96, 0xA9, 0xA2, 0x2D, 0x04, 0xF1, 0x16, 0x8D, + 0xB5, 0x63, 0x55, 0xB0, 0x76, 0x00, 0xA2, 0x03, + 0x70, 0x63, 0x7B, 0x64, 0x59, 0x76, 0xBB, 0xD9, + 0x7B, 0x6D, 0x62, 0x88, 0xA0, 0xD3, 0x03, 0x63, + 0x60, 0x47, 0x2E, 0x3A, 0xC7, 0x1D, 0x56, 0x6D, + 0xB8, 0xFB, 0xB1, 0xB1, 0xD7, 0x6C, 0xB7, 0x55, + 0xCD, 0x0D, 0x68, 0xBD, 0xBF, 0xC0, 0x48, 0xEB, + 0xA2, 0x52, 0x5E, 0xEA, 0x9D, 0xD5, 0xB1, 0x44, + 0xFB, 0x3B, 0x60, 0xFB, 0xC3, 0x42, 0x39, 0x32, + 0x0C, 0xBC, 0x06, 0x9B, 0x35, 0xAB, 0x16, 0xB8, + 0x75, 0x65, 0x36, 0xFB, 0x33, 0xE8, 0xA6, 0xAF, + 0x1D, 0xD4, 0x2C, 0x79, 0xF4, 0x8A, 0xD1, 0x20, + 0xAE, 0x4B, 0x15, 0x9D, 0x3D, 0x8C, 0x31, 0x90, + 0x60, 0xCC, 0xE5, 0x69, 0xC3, 0xF6, 0x03, 0x53, + 0x65, 0x58, 0x5D, 0x34, 0x41, 0x37, 0x95, 0xA6, + 0xA1, 0x8E, 0xC5, 0x13, 0x6A, 0xB1, 0x3C, 0x90, + 0xE3, 0xAF, 0x14, 0xC0, 0xB8, 0xA4, 0x64, 0xC8, + 0x6B, 0x90, 0x73, 0x22, 0x2B, 0x56, 0xB3, 0xF7, + 0x32, 0x8A, 0xEA, 0x79, 0x81, 0x55, 0x32, 0x59, + 0x11, 0x25, 0x0E, 0xF0, 0x16, 0xD7, 0x28, 0x02, + 0xE3, 0x87, 0x8A, 0xA5, 0x05, 0x40, 0xCC, 0x98, + 0x39, 0x56, 0x97, 0x1D, 0x6E, 0xFA, 0x35, 0x2C, + 0x02, 0x55, 0x4D, 0xC7, 0x60, 0xA5, 0xA9, 0x13, + 0x58, 0xEA, 0x56, 0x37, 0x08, 0x84, 0xFD, 0x5B, + 0x3F, 0x85, 0xB7, 0x0E, 0x83, 0xE4, 0x69, 0x7D, + 0xEB, 0x17, 0x05, 0x16, 0x9E, 0x9C, 0x60, 0xA7, + 0x45, 0x28, 0xCF, 0x15, 0x28, 0x1C, 0xB1, 0xB1, + 0xC4, 0x57, 0xD4, 0x67, 0xB5, 0xF9, 0x3A, 0x60, + 0x37, 0x3D, 0x10, 0xE0, 0xCF, 0x6A, 0x83, 0x7A, + 0xA3, 0xC9, 0x59, 0x6A, 0x72, 0xBE, 0xC2, 0x9B, + 0x2D, 0x7E, 0x58, 0x65, 0x3D, 0x53, 0x30, 0x61, + 0xD3, 0x81, 0xD5, 0x17, 0x59, 0x75, 0x22, 0x17, + 0xEB, 0x46, 0xCA, 0xC7, 0x80, 0x7C, 0x4A, 0xD3, + 0x8B, 0x61, 0x16, 0x44, 0xAC, 0xF0, 0xA3, 0xF2, + 0x6B, 0x6B, 0x08, 0x4A, 0xB4, 0x7A, 0x83, 0xBF, + 0x0D, 0x69, 0x6F, 0x8A, 0x47, 0x68, 0xFC, 0x35, + 0xBC, 0xA6, 0xBC, 0x79, 0x03, 0xB2, 0xA2, 0x37, + 0xC2, 0x77, 0x49, 0xF5, 0x51, 0x0C, 0x86, 0x38, + 0x69, 0xE6, 0xAE, 0x56, 0xBB, 0x2A, 0xFE, 0x47, + 0x71, 0xC9, 0x22, 0x18, 0x74, 0xF5, 0x0F, 0x5B, + 0x14, 0xBA, 0xAD, 0x59, 0x93, 0xB4, 0x92, 0x38, + 0xFD, 0x0A, 0x0C, 0x9F, 0x79, 0xB7, 0xB4, 0x58, + 0x4E, 0x41, 0x30, 0x1F, 0x7A, 0x88, 0x5C, 0x9F, + 0x91, 0x81, 0x9B, 0xEA, 0x00, 0xD5, 0x12, 0x58, + 0x17, 0x30, 0x53, 0x9F, 0xB3, 0x7E, 0x59, 0xE8, + 0x6A, 0x6D, 0x19, 0xCA, 0x25, 0xF0, 0xA8, 0x11, + 0xC9, 0xB4, 0x28, 0xBA, 0x86, 0x14, 0xAA, 0x4F, + 0x94, 0x80, 0x7B, 0xC0, 0x31, 0xCB, 0xCC, 0x18, + 0x3F, 0x3B, 0xF0, 0x7F, 0xE2, 0xC1, 0xA6, 0xEB, + 0xA8, 0x0D, 0x5A, 0x70, 0x6E, 0xE0, 0xDA, 0xB2, + 0x7E, 0x23, 0x14, 0x58, 0x02, 0x5D, 0x84, 0xA7, + 0xA9, 0xB0, 0x23, 0x05, 0x01, 0x11, 0x6C, 0x29, + 0x0A, 0x6B, 0xB5, 0x06, 0x26, 0xD9, 0x7B, 0x93, + 0x98, 0x50, 0x94, 0x28, 0x28, 0x39, 0x0B, 0x0A, + 0x20, 0x01, 0xB7, 0x85, 0x3A, 0xD1, 0xAE, 0x9B, + 0x01, 0x1B, 0x2D, 0xB3, 0x6C, 0xAE, 0xEA, 0x73, + 0xA2, 0x32, 0x8E, 0x3C, 0x56, 0x48, 0x5B, 0x49, + 0x1C, 0x29, 0x91, 0x15, 0xA0, 0x17, 0xC9, 0x07, + 0xAB, 0x54, 0x31, 0x72, 0x60, 0xA5, 0x93, 0xA0, + 0xD7, 0xBA, 0x6D, 0x06, 0x61, 0x5D, 0x6E, 0x2C, + 0xA8, 0x4B, 0x86, 0x0E, 0xFF, 0x3C, 0xCB, 0x59, + 0x72, 0x11, 0xBF, 0xE3, 0x6B, 0xDE, 0xF8, 0x06, + 0x9A, 0xFA, 0x36, 0xC5, 0xA7, 0x33, 0x92, 0x72, + 0x26, 0x50, 0xE4, 0x95, 0x7D, 0xCA, 0x59, 0x7A, + 0xCB, 0xA5, 0x60, 0x5B, 0x63, 0xC1, 0x63, 0xCF, + 0xA9, 0x4B, 0x64, 0xDD, 0xD6, 0x23, 0x01, 0xA4, + 0x33, 0x20, 0x83, 0x36, 0x19, 0x72, 0x58, 0x9D, + 0xB0, 0x59, 0x9A, 0x69, 0x4D, 0xD4, 0x54, 0x7A, + 0x5E, 0xE9, 0x19, 0x65, 0x77, 0xC2, 0x2E, 0xD4, + 0x27, 0xAC, 0x89, 0xBB, 0x8B, 0xA3, 0x75, 0x3E, + 0xB7, 0x6C, 0x41, 0xF2, 0xC1, 0x12, 0x9C, 0x8A, + 0x77, 0xD6, 0x80, 0x5F, 0xA7, 0x19, 0xB1, 0xB6, + 0xCA, 0x11, 0xB7, 0x40, 0xA7, 0x8A, 0x3D, 0x41, + 0xB5, 0x33, 0x05, 0x26, 0xAB, 0x87, 0xD5, 0x8D, + 0x59, 0x25, 0x31, 0x5A, 0x14, 0x85, 0xED, 0xC6, + 0x47, 0xC1, 0x60, 0x4E, 0xB3, 0x81, 0x38, 0xDE, + 0x63, 0x7A, 0xD2, 0xC6, 0xCA, 0x5B, 0xE4, 0x4E, + 0x10, 0x08, 0xB2, 0xC0, 0x86, 0x7B, 0x22, 0x9C, + 0xCC, 0x36, 0x61, 0x9E, 0x27, 0x58, 0xC4, 0xC2, + 0x02, 0x9E, 0xAE, 0xB2, 0x6E, 0x7A, 0x80, 0x3F, + 0xCA, 0x30, 0x5A, 0x59, 0xCD, 0x58, 0x5E, 0x11, + 0x7D, 0x69, 0x8E, 0xCE, 0x01, 0x1C, 0xC3, 0xFC, + 0xE5, 0x4D, 0x2E, 0x11, 0x45, 0x45, 0xA2, 0x1A, + 0xC5, 0xBE, 0x67, 0x71, 0xAB, 0x8F, 0x13, 0x12, + 0x2F, 0xAD, 0x29, 0x5E, 0x74, 0x5A, 0x50, 0x3B, + 0x14, 0x2F, 0x91, 0xAE, 0xF7, 0xBD, 0xE9, 0x99, + 0x98, 0x84, 0x5F, 0xDA, 0x04, 0x35, 0x55, 0xC9, + 0xC1, 0xEE, 0x53, 0x5B, 0xE1, 0x25, 0xE5, 0xDC, + 0xE5, 0xD2, 0x66, 0x66, 0x7E, 0x72, 0x3E, 0x67, + 0xB6, 0xBA, 0x89, 0x1C, 0x16, 0xCB, 0xA1, 0x74, + 0x09, 0x8A, 0x3F, 0x35, 0x17, 0x78, 0xB0, 0x88, + 0x8C, 0x95, 0x90, 0xA9, 0x09, 0x0C, 0xD4, 0x04 + }; + static const byte c_512[WC_ML_KEM_512_CIPHER_TEXT_SIZE] = { + 0x16, 0x1C, 0xD2, 0x59, 0xFE, 0xAA, 0x7E, 0xC6, + 0xB2, 0x86, 0x49, 0x8A, 0x9A, 0x6F, 0x69, 0xF8, + 0xB2, 0x62, 0xA2, 0xE2, 0x09, 0x3D, 0x0F, 0xBD, + 0x76, 0xD5, 0xDC, 0x1C, 0x9F, 0xDE, 0x0D, 0xED, + 0xB3, 0x65, 0x81, 0x00, 0x4C, 0xB4, 0x81, 0x12, + 0xF8, 0x52, 0xE7, 0xF8, 0x7F, 0x64, 0x9E, 0x8A, + 0x42, 0xCD, 0x9E, 0x03, 0x49, 0xE7, 0xDA, 0xBD, + 0xF0, 0xA9, 0xAC, 0x1B, 0x52, 0x1C, 0x37, 0xEA, + 0x52, 0x41, 0x37, 0x0A, 0x8A, 0xB2, 0x91, 0x1C, + 0xC7, 0x99, 0x02, 0xC9, 0x5D, 0x28, 0x22, 0x4F, + 0xA8, 0x89, 0x6A, 0xD7, 0x15, 0x20, 0x9E, 0xCD, + 0xD5, 0xD7, 0x84, 0xE9, 0x1D, 0xD9, 0xD0, 0xBE, + 0x91, 0x6B, 0x45, 0x65, 0xF4, 0xD5, 0x66, 0x9A, + 0xEE, 0x0D, 0xEF, 0x93, 0x1E, 0x97, 0x68, 0x29, + 0x4E, 0xEC, 0x52, 0x58, 0xDE, 0x83, 0x91, 0xEC, + 0xE2, 0x71, 0xE7, 0xE4, 0xCF, 0xD9, 0xD2, 0x3A, + 0x79, 0xFA, 0xC3, 0xA8, 0xE0, 0xDB, 0x5D, 0xDD, + 0x6E, 0x01, 0x07, 0x23, 0x56, 0x88, 0xBB, 0xDF, + 0x7B, 0xC5, 0xD5, 0x63, 0x2F, 0x20, 0x6C, 0x63, + 0xA0, 0xC9, 0x56, 0x4F, 0x30, 0x96, 0x5C, 0xA5, + 0x8C, 0x69, 0xFF, 0x92, 0xD2, 0x5A, 0x4F, 0x93, + 0xA0, 0x9E, 0xAB, 0x9B, 0x90, 0x85, 0x94, 0x7E, + 0x07, 0x8A, 0x23, 0xE4, 0xD9, 0xC1, 0x3B, 0x8A, + 0x56, 0xE7, 0x3E, 0x18, 0xDF, 0x42, 0xD6, 0x94, + 0x9F, 0xAF, 0x59, 0x21, 0xF2, 0xE3, 0x73, 0xD4, + 0x50, 0xC8, 0xC0, 0x9D, 0x07, 0xB1, 0x52, 0xA9, + 0x7C, 0x24, 0x54, 0x47, 0x42, 0x94, 0x81, 0xD4, + 0x98, 0xBE, 0xB7, 0x25, 0x6B, 0xC4, 0x7F, 0x68, + 0xF9, 0x92, 0x2B, 0x0B, 0x1C, 0x62, 0xD9, 0xC2, + 0x3F, 0x9F, 0x73, 0x3D, 0xD7, 0x37, 0x92, 0xCF, + 0xC7, 0xB4, 0x3C, 0xBC, 0xEA, 0x27, 0x7D, 0x51, + 0xB2, 0xB8, 0xAD, 0x4A, 0x4F, 0x52, 0x2F, 0x64, + 0x2C, 0xAD, 0x5C, 0x5D, 0xEB, 0x21, 0xF3, 0x62, + 0x7F, 0x8A, 0xF4, 0xD3, 0xE5, 0xBC, 0x9E, 0x91, + 0xD4, 0xCB, 0x2F, 0x12, 0x4B, 0x5B, 0xD7, 0xC2, + 0xF4, 0xA0, 0x50, 0xCA, 0x75, 0x5B, 0xDB, 0x80, + 0x56, 0x60, 0x96, 0x63, 0xFB, 0x95, 0x11, 0xC9, + 0xAD, 0x83, 0xB5, 0x03, 0x90, 0x88, 0xCC, 0x01, + 0xF0, 0xDD, 0x54, 0x35, 0x3B, 0x0D, 0xD7, 0x43, + 0x3F, 0x0C, 0x6C, 0xEE, 0x0D, 0x07, 0x59, 0x59, + 0x81, 0x0D, 0xEC, 0x54, 0x16, 0x52, 0x2B, 0xB1, + 0xF1, 0xF6, 0x55, 0x47, 0xA0, 0xC2, 0xE9, 0xCC, + 0x9B, 0xC1, 0x7F, 0x8D, 0x39, 0xD2, 0x93, 0x09, + 0xEB, 0xE7, 0x9F, 0x21, 0x33, 0x1B, 0x75, 0xE1, + 0x2A, 0xF2, 0xE9, 0x3F, 0x03, 0xF7, 0x4F, 0x7F, + 0x87, 0xD3, 0x60, 0xF1, 0xDA, 0xF8, 0x6C, 0xED, + 0x73, 0x60, 0x92, 0xA2, 0x11, 0xA8, 0x15, 0x88, + 0x59, 0xC4, 0x2E, 0x22, 0x3C, 0xFE, 0x2E, 0x6E, + 0x55, 0x34, 0x37, 0xD8, 0x05, 0x76, 0xCF, 0xD1, + 0x94, 0x4E, 0x97, 0xEE, 0xFF, 0x9B, 0x49, 0xE5, + 0xEC, 0xCF, 0xC6, 0x78, 0xEE, 0x16, 0x52, 0x68, + 0xDF, 0xE3, 0xD3, 0x59, 0x6B, 0x4B, 0x86, 0x20, + 0x4A, 0x81, 0xC6, 0x06, 0x3B, 0x0C, 0xDC, 0xE6, + 0x19, 0xFD, 0xBB, 0x96, 0xDF, 0x7D, 0xE6, 0xE0, + 0xBD, 0x52, 0x70, 0xB4, 0xD5, 0x9C, 0x4D, 0xC5, + 0x08, 0x47, 0x6E, 0x7F, 0x07, 0x08, 0xF9, 0x8C, + 0x7A, 0x4F, 0x66, 0x45, 0xC4, 0x9D, 0x06, 0x10, + 0x0C, 0x76, 0x0C, 0x59, 0x95, 0x28, 0xD1, 0xB8, + 0xBB, 0xFE, 0x62, 0x81, 0x91, 0xCC, 0x08, 0x3C, + 0x8D, 0x22, 0x5A, 0x09, 0x3F, 0x9F, 0x17, 0xE3, + 0x55, 0x74, 0x98, 0x6F, 0x86, 0xBA, 0xA4, 0x68, + 0x98, 0xB5, 0x89, 0xF3, 0xCB, 0x7D, 0xB4, 0x6A, + 0x45, 0xF3, 0xED, 0xD4, 0xFA, 0xC2, 0x08, 0x08, + 0xF4, 0xCD, 0x02, 0x49, 0xDA, 0x69, 0x3F, 0x8F, + 0xAB, 0xFB, 0xD4, 0xE1, 0x0C, 0x02, 0xC6, 0x5B, + 0xA8, 0xC8, 0x61, 0x0F, 0xA8, 0xC6, 0xDF, 0x3D, + 0xBA, 0xEB, 0x67, 0x63, 0xDD, 0x48, 0x2A, 0xF4, + 0x15, 0x58, 0xB1, 0xE1, 0x5C, 0xC9, 0xC7, 0xA7, + 0x2E, 0x07, 0x16, 0x85, 0xAC, 0x19, 0xA0, 0x51, + 0xF1, 0x92, 0x45, 0xB9, 0xF7, 0x7C, 0x30, 0x38, + 0xA5, 0x4E, 0x29, 0x58, 0x62, 0x3E, 0xB8, 0x10, + 0x59, 0x55, 0x60, 0x9E, 0x27, 0xD6, 0x7C, 0xF7, + 0x2E, 0xC5, 0xC4, 0xA8, 0xE9, 0xB9, 0xC2, 0x92, + 0x4A, 0x9E, 0x22, 0x98, 0x50, 0x8B, 0xAB, 0xA1, + 0x3C, 0xF1, 0x11, 0xFD, 0xFB, 0x06, 0x2C, 0x96, + 0x07, 0xAC, 0x1A, 0xAA, 0x6C, 0x63, 0x73, 0x10, + 0xA8, 0x89, 0x4B, 0xF0, 0xB9, 0x6F, 0x0C, 0x19, + 0x13, 0x61, 0x86, 0xB6, 0x18, 0xDF, 0xFB, 0x27, + 0x55, 0x28, 0xBE, 0xD1, 0xCC, 0x27, 0x15, 0xDE, + 0xF4, 0x12, 0xF7, 0x7A, 0x3C, 0xF9, 0x66, 0x45, + 0x73, 0x3B, 0x04, 0x8A, 0x78, 0x47, 0x43, 0x20, + 0xD1, 0xA3, 0x80, 0xF5, 0xEE, 0xDB, 0xDA, 0x21, + 0xFA, 0x01, 0x25, 0xC9, 0x1D, 0x3C, 0x37, 0xC5, + 0x4B, 0xF3, 0x75, 0x2A, 0x1F, 0x84, 0x71, 0xC8, + 0x1F, 0xCA, 0xE2, 0xD3, 0xED, 0xA9, 0x66, 0xE1, + 0x4E, 0x66, 0xF2, 0x23, 0xB0, 0x54, 0xD7, 0x98, + 0x48, 0xFF, 0x94, 0x11, 0xD6, 0x34, 0x02, 0x4A, + 0x09, 0x89, 0x70, 0xAD, 0xE6, 0xA8, 0x8B, 0x5F, + 0x90, 0x69, 0xF7, 0x60, 0x58, 0x4D, 0xC4, 0xCF, + 0xFF, 0xCE, 0xA8, 0xEC, 0xE1, 0x1B, 0xB5, 0x56, + 0x6B, 0xD2, 0x36, 0x0A, 0xB7, 0x07, 0xDF, 0x2D, + 0x21, 0xB6, 0x74, 0x88, 0xD9, 0x31, 0xF0, 0x20, + 0x06, 0x91, 0x76, 0x42, 0x3E, 0x69, 0x44, 0x49, + 0x0C, 0xB3, 0x85, 0xE7, 0x0B, 0x35, 0x8A, 0x25, + 0x34, 0x6B, 0xAF, 0xCD, 0xD0, 0x6D, 0x40, 0x2F, + 0xF2, 0x4D, 0x6C, 0x1E, 0x5F, 0x61, 0xA8, 0x5D + }; + static const byte kprime_512[WC_ML_KEM_SS_SZ] = { + 0xDF, 0x46, 0x2A, 0xD6, 0x8F, 0x1E, 0xC8, 0x97, + 0x2E, 0xD9, 0xB0, 0x2D, 0x6D, 0xE0, 0x60, 0x4B, + 0xDE, 0xC7, 0x57, 0x20, 0xE0, 0x50, 0x49, 0x73, + 0x51, 0xE6, 0xEC, 0x93, 0x3E, 0x71, 0xF8, 0x82 + }; +#endif +#ifndef WOLFSSL_NO_ML_KEM_768 + static const byte dk_768[WC_ML_KEM_768_PRIVATE_KEY_SIZE] = { + 0x1E, 0x4A, 0xC8, 0x7B, 0x1A, 0x69, 0x2A, 0x52, + 0x9F, 0xDB, 0xBA, 0xB9, 0x33, 0x74, 0xC5, 0x7D, + 0x11, 0x0B, 0x10, 0xF2, 0xB1, 0xDD, 0xEB, 0xAC, + 0x0D, 0x19, 0x6B, 0x7B, 0xA6, 0x31, 0xB8, 0xE9, + 0x29, 0x30, 0x28, 0xA8, 0xF3, 0x79, 0x88, 0x8C, + 0x42, 0x2D, 0xC8, 0xD3, 0x2B, 0xBF, 0x22, 0x60, + 0x10, 0xC2, 0xC1, 0xEC, 0x73, 0x18, 0x90, 0x80, + 0x45, 0x6B, 0x05, 0x64, 0xB2, 0x58, 0xB0, 0xF2, + 0x31, 0x31, 0xBC, 0x79, 0xC8, 0xE8, 0xC1, 0x1C, + 0xEF, 0x39, 0x38, 0xB2, 0x43, 0xC5, 0xCE, 0x9C, + 0x0E, 0xDD, 0x37, 0xC8, 0xF9, 0xD2, 0x98, 0x77, + 0xDB, 0xBB, 0x61, 0x5B, 0x9B, 0x5A, 0xC3, 0xC9, + 0x48, 0x48, 0x7E, 0x46, 0x71, 0x96, 0xA9, 0x14, + 0x3E, 0xFB, 0xC7, 0xCE, 0xDB, 0x64, 0xB4, 0x5D, + 0x4A, 0xCD, 0xA2, 0x66, 0x6C, 0xBC, 0x28, 0x04, + 0xF2, 0xC8, 0x66, 0x2E, 0x12, 0x8F, 0x6A, 0x99, + 0x69, 0xEC, 0x15, 0xBC, 0x0B, 0x93, 0x51, 0xF6, + 0xF9, 0x63, 0x46, 0xAA, 0x7A, 0xBC, 0x74, 0x3A, + 0x14, 0xFA, 0x03, 0x0E, 0x37, 0xA2, 0xE7, 0x59, + 0x7B, 0xDD, 0xFC, 0x5A, 0x22, 0xF9, 0xCE, 0xDA, + 0xF8, 0x61, 0x48, 0x32, 0x52, 0x72, 0x10, 0xB2, + 0x6F, 0x02, 0x4C, 0x7F, 0x6C, 0x0D, 0xCF, 0x55, + 0x1E, 0x97, 0xA4, 0x85, 0x87, 0x64, 0xC3, 0x21, + 0xD1, 0x83, 0x4A, 0xD5, 0x1D, 0x75, 0xBB, 0x24, + 0x6D, 0x27, 0x72, 0x37, 0xB7, 0xBD, 0x41, 0xDC, + 0x43, 0x62, 0xD0, 0x63, 0xF4, 0x29, 0x82, 0x92, + 0x27, 0x2D, 0x01, 0x01, 0x17, 0x80, 0xB7, 0x98, + 0x56, 0xB2, 0x96, 0xC4, 0xE9, 0x46, 0x65, 0x8B, + 0x79, 0x60, 0x31, 0x97, 0xC9, 0xB2, 0xA9, 0x9E, + 0xC6, 0x6A, 0xCB, 0x06, 0xCE, 0x2F, 0x69, 0xB5, + 0xA5, 0xA6, 0x1E, 0x9B, 0xD0, 0x6A, 0xD4, 0x43, + 0xCE, 0xB0, 0xC7, 0x4E, 0xD6, 0x53, 0x45, 0xA9, + 0x03, 0xB6, 0x14, 0xE8, 0x13, 0x68, 0xAA, 0xC2, + 0xB3, 0xD2, 0xA7, 0x9C, 0xA8, 0xCC, 0xAA, 0x1C, + 0x3B, 0x88, 0xFB, 0x82, 0xA3, 0x66, 0x32, 0x86, + 0x0B, 0x3F, 0x79, 0x50, 0x83, 0x3F, 0xD0, 0x21, + 0x2E, 0xC9, 0x6E, 0xDE, 0x4A, 0xB6, 0xF5, 0xA0, + 0xBD, 0xA3, 0xEC, 0x60, 0x60, 0xA6, 0x58, 0xF9, + 0x45, 0x7F, 0x6C, 0xC8, 0x7C, 0x6B, 0x62, 0x0C, + 0x1A, 0x14, 0x51, 0x98, 0x74, 0x86, 0xE4, 0x96, + 0x61, 0x2A, 0x10, 0x1D, 0x0E, 0x9C, 0x20, 0x57, + 0x7C, 0x57, 0x1E, 0xDB, 0x52, 0x82, 0x60, 0x8B, + 0xF4, 0xE1, 0xAC, 0x92, 0x6C, 0x0D, 0xB1, 0xC8, + 0x2A, 0x50, 0x4A, 0x79, 0x9D, 0x89, 0x88, 0x5C, + 0xA6, 0x25, 0x2B, 0xD5, 0xB1, 0xC1, 0x83, 0xAF, + 0x70, 0x13, 0x92, 0xA4, 0x07, 0xC0, 0x5B, 0x84, + 0x8C, 0x2A, 0x30, 0x16, 0xC4, 0x06, 0x13, 0xF0, + 0x2A, 0x44, 0x9B, 0x3C, 0x79, 0x26, 0xDA, 0x06, + 0x7A, 0x53, 0x31, 0x16, 0x50, 0x68, 0x40, 0x09, + 0x75, 0x10, 0x46, 0x0B, 0xBF, 0xD3, 0x60, 0x73, + 0xDC, 0xB0, 0xBF, 0xA0, 0x09, 0xB3, 0x6A, 0x91, + 0x23, 0xEA, 0xA6, 0x8F, 0x83, 0x5F, 0x74, 0xA0, + 0x1B, 0x00, 0xD2, 0x09, 0x78, 0x35, 0x96, 0x4D, + 0xF5, 0x21, 0xCE, 0x92, 0x10, 0x78, 0x9C, 0x30, + 0xB7, 0xF0, 0x6E, 0x58, 0x44, 0xB4, 0x44, 0xC5, + 0x33, 0x22, 0x39, 0x6E, 0x47, 0x99, 0xBA, 0xF6, + 0xA8, 0x8A, 0xF7, 0x31, 0x58, 0x60, 0xD0, 0x19, + 0x2D, 0x48, 0xC2, 0xC0, 0xDA, 0x6B, 0x5B, 0xA6, + 0x43, 0x25, 0x54, 0x3A, 0xCD, 0xF5, 0x90, 0x0E, + 0x8B, 0xC4, 0x77, 0xAB, 0x05, 0x82, 0x00, 0x72, + 0xD4, 0x63, 0xAF, 0xFE, 0xD0, 0x97, 0xE0, 0x62, + 0xBD, 0x78, 0xC9, 0x9D, 0x12, 0xB3, 0x85, 0x13, + 0x1A, 0x24, 0x1B, 0x70, 0x88, 0x65, 0xB4, 0x19, + 0x0A, 0xF6, 0x9E, 0xA0, 0xA6, 0x4D, 0xB7, 0x14, + 0x48, 0xA6, 0x08, 0x29, 0x36, 0x9C, 0x75, 0x55, + 0x19, 0x8E, 0x43, 0x8C, 0x9A, 0xBC, 0x31, 0x0B, + 0xC7, 0x01, 0x01, 0x91, 0x3B, 0xB1, 0x2F, 0xAA, + 0x5B, 0xEE, 0xF9, 0x75, 0x84, 0x16, 0x17, 0xC8, + 0x47, 0xCD, 0x6B, 0x33, 0x6F, 0x87, 0x79, 0x87, + 0x75, 0x38, 0x22, 0x02, 0x0B, 0x92, 0xC4, 0xCC, + 0x97, 0x05, 0x5C, 0x9B, 0x1E, 0x0B, 0x12, 0x8B, + 0xF1, 0x1F, 0x50, 0x50, 0x05, 0xB6, 0xAB, 0x0E, + 0x62, 0x77, 0x95, 0xA2, 0x06, 0x09, 0xEF, 0xA9, + 0x91, 0xE5, 0x98, 0xB8, 0x0F, 0x37, 0xB1, 0xC6, + 0xA1, 0xC3, 0xA1, 0xE9, 0xAE, 0xE7, 0x02, 0x8F, + 0x77, 0x57, 0x0A, 0xB2, 0x13, 0x91, 0x28, 0xA0, + 0x01, 0x08, 0xC5, 0x0E, 0xB3, 0x05, 0xCD, 0xB8, + 0xF9, 0xA6, 0x03, 0xA6, 0xB0, 0x78, 0x41, 0x3F, + 0x6F, 0x9B, 0x14, 0xC6, 0xD8, 0x2B, 0x51, 0x99, + 0xCE, 0x59, 0xD8, 0x87, 0x90, 0x2A, 0x28, 0x1A, + 0x02, 0x7B, 0x71, 0x74, 0x95, 0xFE, 0x12, 0x67, + 0x2A, 0x12, 0x7B, 0xBF, 0x9B, 0x25, 0x6C, 0x43, + 0x72, 0x0D, 0x7C, 0x16, 0x0B, 0x28, 0x1C, 0x12, + 0x75, 0x7D, 0xA1, 0x35, 0xB1, 0x93, 0x33, 0x52, + 0xBE, 0x4A, 0xB6, 0x7E, 0x40, 0x24, 0x8A, 0xFC, + 0x31, 0x8E, 0x23, 0x70, 0xC3, 0xB8, 0x20, 0x8E, + 0x69, 0x5B, 0xDF, 0x33, 0x74, 0x59, 0xB9, 0xAC, + 0xBF, 0xE5, 0xB4, 0x87, 0xF7, 0x6E, 0x9B, 0x4B, + 0x40, 0x01, 0xD6, 0xCF, 0x90, 0xCA, 0x8C, 0x69, + 0x9A, 0x17, 0x4D, 0x42, 0x97, 0x2D, 0xC7, 0x33, + 0xF3, 0x33, 0x89, 0xFD, 0xF5, 0x9A, 0x1D, 0xAB, + 0xA8, 0x1D, 0x83, 0x49, 0x55, 0x02, 0x73, 0x34, + 0x18, 0x5A, 0xD0, 0x2C, 0x76, 0xCF, 0x29, 0x48, + 0x46, 0xCA, 0x92, 0x94, 0xBA, 0x0E, 0xD6, 0x67, + 0x41, 0xDD, 0xEC, 0x79, 0x1C, 0xAB, 0x34, 0x19, + 0x6A, 0xC5, 0x65, 0x7C, 0x5A, 0x78, 0x32, 0x1B, + 0x56, 0xC3, 0x33, 0x06, 0xB5, 0x10, 0x23, 0x97, + 0xA5, 0xC0, 0x9C, 0x35, 0x08, 0xF7, 0x6B, 0x48, + 0x28, 0x24, 0x59, 0xF8, 0x1D, 0x0C, 0x72, 0xA4, + 0x3F, 0x73, 0x7B, 0xC2, 0xF1, 0x2F, 0x45, 0x42, + 0x26, 0x28, 0xB6, 0x7D, 0xB5, 0x1A, 0xC1, 0x42, + 0x42, 0x76, 0xA6, 0xC0, 0x8C, 0x3F, 0x76, 0x15, + 0x66, 0x5B, 0xBB, 0x8E, 0x92, 0x81, 0x48, 0xA2, + 0x70, 0xF9, 0x91, 0xBC, 0xF3, 0x65, 0xA9, 0x0F, + 0x87, 0xC3, 0x06, 0x87, 0xB6, 0x88, 0x09, 0xC9, + 0x1F, 0x23, 0x18, 0x13, 0xB8, 0x66, 0xBE, 0xA8, + 0x2E, 0x30, 0x37, 0x4D, 0x80, 0xAA, 0x0C, 0x02, + 0x97, 0x34, 0x37, 0x49, 0x8A, 0x53, 0xB1, 0x4B, + 0xF6, 0xB6, 0xCA, 0x1E, 0xD7, 0x6A, 0xB8, 0xA2, + 0x0D, 0x54, 0xA0, 0x83, 0xF4, 0xA2, 0x6B, 0x7C, + 0x03, 0x8D, 0x81, 0x96, 0x76, 0x40, 0xC2, 0x0B, + 0xF4, 0x43, 0x1E, 0x71, 0xDA, 0xCC, 0xE8, 0x57, + 0x7B, 0x21, 0x24, 0x0E, 0x49, 0x4C, 0x31, 0xF2, + 0xD8, 0x77, 0xDA, 0xF4, 0x92, 0x4F, 0xD3, 0x9D, + 0x82, 0xD6, 0x16, 0x7F, 0xBC, 0xC1, 0xF9, 0xC5, + 0xA2, 0x59, 0xF8, 0x43, 0xE3, 0x09, 0x87, 0xCC, + 0xC4, 0xBC, 0xE7, 0x49, 0x3A, 0x24, 0x04, 0xB5, + 0xE4, 0x43, 0x87, 0xF7, 0x07, 0x42, 0x57, 0x81, + 0xB7, 0x43, 0xFB, 0x55, 0x56, 0x85, 0x58, 0x4E, + 0x25, 0x57, 0xCC, 0x03, 0x8B, 0x1A, 0x9B, 0x3F, + 0x40, 0x43, 0x12, 0x1F, 0x54, 0x72, 0xEB, 0x2B, + 0x96, 0xE5, 0x94, 0x1F, 0xEC, 0x01, 0x1C, 0xEE, + 0xA5, 0x07, 0x91, 0x63, 0x6C, 0x6A, 0xBC, 0x26, + 0xC1, 0x37, 0x7E, 0xE3, 0xB5, 0x14, 0x6F, 0xC7, + 0xC8, 0x5C, 0xB3, 0x35, 0xB1, 0xE7, 0x95, 0xEE, + 0xC2, 0x03, 0x3E, 0xE4, 0x4B, 0x9A, 0xA9, 0x06, + 0x85, 0x24, 0x5E, 0xF7, 0xB4, 0x43, 0x6C, 0x00, + 0x0E, 0x66, 0xBC, 0x8B, 0xCB, 0xF1, 0xCD, 0xB8, + 0x03, 0xAC, 0x14, 0x21, 0xB1, 0xFD, 0xB2, 0x66, + 0xD5, 0x29, 0x1C, 0x83, 0x10, 0x37, 0x3A, 0x8A, + 0x3C, 0xE9, 0x56, 0x2A, 0xB1, 0x97, 0x95, 0x38, + 0x71, 0xAB, 0x99, 0xF3, 0x82, 0xCC, 0x5A, 0xA9, + 0xC0, 0xF2, 0x73, 0xD1, 0xDC, 0xA5, 0x5D, 0x27, + 0x12, 0x85, 0x38, 0x71, 0xE1, 0xA8, 0x3C, 0xB3, + 0xB8, 0x54, 0x50, 0xF7, 0x6D, 0x3F, 0x3C, 0x42, + 0xBA, 0xB5, 0x50, 0x5F, 0x72, 0x12, 0xFD, 0xB6, + 0xB8, 0xB7, 0xF6, 0x02, 0x99, 0x72, 0xA8, 0xF3, + 0x75, 0x1E, 0x4C, 0x94, 0xC1, 0x10, 0x8B, 0x02, + 0xD6, 0xAC, 0x79, 0xF8, 0xD9, 0x38, 0xF0, 0x5A, + 0x1B, 0x2C, 0x22, 0x9B, 0x14, 0xB4, 0x2B, 0x31, + 0xB0, 0x1A, 0x36, 0x40, 0x17, 0xE5, 0x95, 0x78, + 0xC6, 0xB0, 0x33, 0x83, 0x37, 0x74, 0xCB, 0x9B, + 0x57, 0x0F, 0x90, 0x86, 0xB7, 0x22, 0x90, 0x3B, + 0x37, 0x54, 0x46, 0xB4, 0x95, 0xD8, 0xA2, 0x9B, + 0xF8, 0x07, 0x51, 0x87, 0x7A, 0x80, 0xFB, 0x72, + 0x4A, 0x02, 0x10, 0xC3, 0xE1, 0x69, 0x2F, 0x39, + 0x7C, 0x2F, 0x1D, 0xDC, 0x2E, 0x6B, 0xA1, 0x7A, + 0xF8, 0x1B, 0x92, 0xAC, 0xFA, 0xBE, 0xF5, 0xF7, + 0x57, 0x3C, 0xB4, 0x93, 0xD1, 0x84, 0x02, 0x7B, + 0x71, 0x82, 0x38, 0xC8, 0x9A, 0x35, 0x49, 0xB8, + 0x90, 0x5B, 0x28, 0xA8, 0x33, 0x62, 0x86, 0x7C, + 0x08, 0x2D, 0x30, 0x19, 0xD3, 0xCA, 0x70, 0x70, + 0x07, 0x31, 0xCE, 0xB7, 0x3E, 0x84, 0x72, 0xC1, + 0xA3, 0xA0, 0x93, 0x36, 0x1C, 0x5F, 0xEA, 0x6A, + 0x7D, 0x40, 0x95, 0x5D, 0x07, 0xA4, 0x1B, 0x64, + 0xE5, 0x00, 0x81, 0xA3, 0x61, 0xB6, 0x04, 0xCC, + 0x51, 0x84, 0x47, 0xC8, 0xE2, 0x57, 0x65, 0xAB, + 0x7D, 0x68, 0xB2, 0x43, 0x27, 0x52, 0x07, 0xAF, + 0x8C, 0xA6, 0x56, 0x4A, 0x4C, 0xB1, 0xE9, 0x41, + 0x99, 0xDB, 0xA1, 0x87, 0x8C, 0x59, 0xBE, 0xC8, + 0x09, 0xAB, 0x48, 0xB2, 0xF2, 0x11, 0xBA, 0xDC, + 0x6A, 0x19, 0x98, 0xD9, 0xC7, 0x22, 0x7C, 0x13, + 0x03, 0xF4, 0x69, 0xD4, 0x6A, 0x9C, 0x7E, 0x53, + 0x03, 0xF9, 0x8A, 0xBA, 0x67, 0x56, 0x9A, 0xE8, + 0x22, 0x7C, 0x16, 0xBA, 0x1F, 0xB3, 0x24, 0x44, + 0x66, 0xA2, 0x5E, 0x7F, 0x82, 0x36, 0x71, 0x81, + 0x0C, 0xC2, 0x62, 0x06, 0xFE, 0xB2, 0x9C, 0x7E, + 0x2A, 0x1A, 0x91, 0x95, 0x9E, 0xEB, 0x03, 0xA9, + 0x82, 0x52, 0xA4, 0xF7, 0x41, 0x26, 0x74, 0xEB, + 0x9A, 0x4B, 0x27, 0x7E, 0x1F, 0x25, 0x95, 0xFC, + 0xA6, 0x40, 0x33, 0xB4, 0x1B, 0x40, 0x33, 0x08, + 0x12, 0xE9, 0x73, 0x5B, 0x7C, 0x60, 0x75, 0x01, + 0xCD, 0x81, 0x83, 0xA2, 0x2A, 0xFC, 0x33, 0x92, + 0x55, 0x37, 0x44, 0xF3, 0x3C, 0x4D, 0x20, 0x25, + 0x26, 0x94, 0x5C, 0x6D, 0x78, 0xA6, 0x0E, 0x20, + 0x1A, 0x16, 0x98, 0x7A, 0x6F, 0xA5, 0x9D, 0x94, + 0x46, 0x4B, 0x56, 0x50, 0x65, 0x56, 0x78, 0x48, + 0x24, 0xA0, 0x70, 0x58, 0xF5, 0x73, 0x20, 0xE7, + 0x6C, 0x82, 0x5B, 0x93, 0x47, 0xF2, 0x93, 0x6F, + 0x4A, 0x0E, 0x5C, 0xDA, 0xA1, 0x8C, 0xF8, 0x83, + 0x39, 0x45, 0xAE, 0x31, 0x2A, 0x36, 0xB5, 0xF5, + 0xA3, 0x81, 0x0A, 0xAC, 0x82, 0x38, 0x1F, 0xDA, + 0xE4, 0xCB, 0x9C, 0x68, 0x31, 0xD8, 0xEB, 0x8A, + 0xBA, 0xB8, 0x50, 0x41, 0x64, 0x43, 0xD7, 0x39, + 0x08, 0x6B, 0x1C, 0x32, 0x6F, 0xC2, 0xA3, 0x97, + 0x57, 0x04, 0xE3, 0x96, 0xA5, 0x96, 0x80, 0xC3, + 0xB5, 0xF3, 0x60, 0xF5, 0x48, 0x0D, 0x2B, 0x62, + 0x16, 0x9C, 0xD9, 0x4C, 0xA7, 0x1B, 0x37, 0xBC, + 0x58, 0x78, 0xBA, 0x29, 0x85, 0xE0, 0x68, 0xBA, + 0x05, 0x0B, 0x2C, 0xE5, 0x07, 0x26, 0xD4, 0xB4, + 0x45, 0x1B, 0x77, 0xAA, 0xA8, 0x67, 0x6E, 0xAE, + 0x09, 0x49, 0x82, 0x21, 0x01, 0x92, 0x19, 0x7B, + 0x1E, 0x92, 0xA2, 0x7F, 0x59, 0x86, 0x8B, 0x78, + 0x86, 0x78, 0x87, 0xB9, 0xA7, 0x0C, 0x32, 0xAF, + 0x84, 0x63, 0x0A, 0xA9, 0x08, 0x81, 0x43, 0x79, + 0xE6, 0x51, 0x91, 0x50, 0xBA, 0x16, 0x43, 0x9B, + 0x5E, 0x2B, 0x06, 0x03, 0xD0, 0x6A, 0xA6, 0x67, + 0x45, 0x57, 0xF5, 0xB0, 0x98, 0x3E, 0x5C, 0xB6, + 0xA9, 0x75, 0x96, 0x06, 0x9B, 0x01, 0xBB, 0x31, + 0x28, 0xC4, 0x16, 0x68, 0x06, 0x57, 0x20, 0x4F, + 0xD0, 0x76, 0x40, 0x39, 0x2E, 0x16, 0xB1, 0x9F, + 0x33, 0x7A, 0x99, 0xA3, 0x04, 0x84, 0x4E, 0x1A, + 0xA4, 0x74, 0xE9, 0xC7, 0x99, 0x06, 0x29, 0x71, + 0xF6, 0x72, 0x26, 0x89, 0x60, 0xF5, 0xA8, 0x2F, + 0x95, 0x00, 0x70, 0xBB, 0xE9, 0xC2, 0xA7, 0x19, + 0x50, 0xA3, 0x78, 0x5B, 0xDF, 0x0B, 0x84, 0x40, + 0x25, 0x5E, 0xD6, 0x39, 0x28, 0xD2, 0x57, 0x84, + 0x51, 0x68, 0xB1, 0xEC, 0xCC, 0x41, 0x91, 0x32, + 0x5A, 0xA7, 0x66, 0x45, 0x71, 0x9B, 0x28, 0xEB, + 0xD8, 0x93, 0x02, 0xDC, 0x67, 0x23, 0xC7, 0x86, + 0xDF, 0x52, 0x17, 0xB2, 0x43, 0x09, 0x9C, 0xA7, + 0x82, 0x38, 0xE5, 0x7E, 0x64, 0x69, 0x2F, 0x20, + 0x6B, 0x17, 0x7A, 0xBC, 0x25, 0x96, 0x60, 0x39, + 0x5C, 0xD7, 0x86, 0x0F, 0xB3, 0x5A, 0x16, 0xF6, + 0xB2, 0xFE, 0x65, 0x48, 0xC8, 0x5A, 0xB6, 0x63, + 0x30, 0xC5, 0x17, 0xFA, 0x74, 0xCD, 0xF3, 0xCB, + 0x49, 0xD2, 0x6B, 0x11, 0x81, 0x90, 0x1A, 0xF7, + 0x75, 0xA1, 0xE1, 0x80, 0x81, 0x3B, 0x6A, 0x24, + 0xC4, 0x56, 0x82, 0x9B, 0x5C, 0x38, 0x10, 0x4E, + 0xCE, 0x43, 0xC7, 0x6A, 0x43, 0x7A, 0x6A, 0x33, + 0xB6, 0xFC, 0x6C, 0x5E, 0x65, 0xC8, 0xA8, 0x94, + 0x66, 0xC1, 0x42, 0x54, 0x85, 0xB2, 0x9B, 0x9E, + 0x18, 0x54, 0x36, 0x8A, 0xFC, 0xA3, 0x53, 0xE1, + 0x43, 0xD0, 0xA9, 0x0A, 0x6C, 0x6C, 0x9E, 0x7F, + 0xDB, 0x62, 0xA6, 0x06, 0x85, 0x6B, 0x56, 0x14, + 0xF1, 0x2B, 0x64, 0xB7, 0x96, 0x02, 0x0C, 0x35, + 0x34, 0xC3, 0x60, 0x5C, 0xFD, 0xC7, 0x3B, 0x86, + 0x71, 0x4F, 0x41, 0x18, 0x50, 0x22, 0x8A, 0x28, + 0xB8, 0xF4, 0xB4, 0x9E, 0x66, 0x34, 0x16, 0xC8, + 0x4F, 0x7E, 0x38, 0x1F, 0x6A, 0xF1, 0x07, 0x13, + 0x43, 0xBF, 0x9D, 0x39, 0xB4, 0x54, 0x39, 0x24, + 0x0C, 0xC0, 0x38, 0x97, 0x29, 0x5F, 0xEA, 0x08, + 0x0B, 0x14, 0xBB, 0x2D, 0x81, 0x19, 0xA8, 0x80, + 0xE1, 0x64, 0x49, 0x5C, 0x61, 0xBE, 0xBC, 0x71, + 0x39, 0xC1, 0x18, 0x57, 0xC8, 0x5E, 0x17, 0x50, + 0x33, 0x8D, 0x63, 0x43, 0x91, 0x37, 0x06, 0xA5, + 0x07, 0xC9, 0x56, 0x64, 0x64, 0xCD, 0x28, 0x37, + 0xCF, 0x91, 0x4D, 0x1A, 0x3C, 0x35, 0xE8, 0x9B, + 0x23, 0x5C, 0x6A, 0xB7, 0xED, 0x07, 0x8B, 0xED, + 0x23, 0x47, 0x57, 0xC0, 0x2E, 0xF6, 0x99, 0x3D, + 0x4A, 0x27, 0x3C, 0xB8, 0x15, 0x05, 0x28, 0xDA, + 0x4D, 0x76, 0x70, 0x81, 0x77, 0xE9, 0x42, 0x55, + 0x46, 0xC8, 0x3E, 0x14, 0x70, 0x39, 0x76, 0x66, + 0x03, 0xB3, 0x0D, 0xA6, 0x26, 0x8F, 0x45, 0x98, + 0xA5, 0x31, 0x94, 0x24, 0x0A, 0x28, 0x32, 0xA3, + 0xD6, 0x75, 0x33, 0xB5, 0x05, 0x6F, 0x9A, 0xAA, + 0xC6, 0x1B, 0x4B, 0x17, 0xB9, 0xA2, 0x69, 0x3A, + 0xA0, 0xD5, 0x88, 0x91, 0xE6, 0xCC, 0x56, 0xCD, + 0xD7, 0x72, 0x41, 0x09, 0x00, 0xC4, 0x05, 0xAF, + 0x20, 0xB9, 0x03, 0x79, 0x7C, 0x64, 0x87, 0x69, + 0x15, 0xC3, 0x7B, 0x84, 0x87, 0xA1, 0x44, 0x9C, + 0xE9, 0x24, 0xCD, 0x34, 0x5C, 0x29, 0xA3, 0x6E, + 0x08, 0x23, 0x8F, 0x7A, 0x15, 0x7C, 0xC7, 0xE5, + 0x16, 0xAB, 0x5B, 0xA7, 0x3C, 0x80, 0x63, 0xF7, + 0x26, 0xBB, 0x5A, 0x0A, 0x03, 0x19, 0xE5, 0x71, + 0x27, 0x43, 0x8C, 0x7F, 0xC6, 0x01, 0xC9, 0x9C, + 0xCA, 0xAE, 0x4C, 0x1A, 0x83, 0x72, 0x6F, 0xDC, + 0xB5, 0x04, 0x5E, 0xD1, 0xA8, 0x2A, 0x98, 0x5E, + 0xA9, 0x95, 0x39, 0x6D, 0x77, 0x27, 0x2C, 0x66, + 0xCE, 0x49, 0x32, 0x89, 0xF6, 0x11, 0x09, 0x10, + 0xF3, 0x7C, 0x27, 0x41, 0xCE, 0x47, 0x02, 0x6A, + 0x6F, 0x82, 0x61, 0x99, 0x9C, 0x64, 0x82, 0x57, + 0x2B, 0x16, 0x93, 0x91, 0x2E, 0xF1, 0x2E, 0xEB, + 0xEA, 0x7A, 0xCF, 0x92, 0x34, 0xFB, 0x40, 0x9F, + 0x2A, 0x60, 0x90, 0xE6, 0xB0, 0xBF, 0xD8, 0x95, + 0x46, 0x9D, 0x0B, 0x2A, 0x92, 0x1B, 0xB7, 0x23, + 0xF8, 0x7A, 0x33, 0xEA, 0x54, 0x65, 0xAB, 0x90, + 0xF5, 0x14, 0xB6, 0x76, 0x98, 0xC0, 0x76, 0x8B, + 0x6C, 0xA4, 0x98, 0xB0, 0x22, 0xC5, 0x12, 0xFA, + 0x08, 0x75, 0xF0, 0x54, 0xAA, 0x22, 0x65, 0x86, + 0x7E, 0x31, 0xC0, 0xE5, 0x22, 0x65, 0x1E, 0x02, + 0x4A, 0x07, 0xD6, 0x0D, 0xD9, 0xF6, 0x33, 0x16, + 0x69, 0x21, 0xF4, 0x12, 0x6B, 0xC2, 0xB6, 0xAA, + 0x01, 0xCC, 0x15, 0xA0, 0x9B, 0x85, 0xBF, 0xF8, + 0x21, 0x8C, 0x5A, 0xAE, 0x95, 0xBC, 0x1F, 0xFB, + 0x26, 0xAE, 0x5A, 0x13, 0x76, 0x70, 0xF0, 0x49, + 0x10, 0xCA, 0x9D, 0x72, 0x41, 0xB6, 0x66, 0x0C, + 0x39, 0x4C, 0x54, 0x55, 0x91, 0x77, 0x46, 0xA2, + 0x66, 0x82, 0xFB, 0x71, 0xA4, 0x32, 0xEA, 0x95, + 0x30, 0xE8, 0x39, 0xBD, 0xEB, 0x07, 0x43, 0x30, + 0x04, 0xF4, 0x5A, 0x0D, 0xDA, 0xA0, 0xB2, 0x4E, + 0x3A, 0x56, 0x6A, 0x54, 0x08, 0x15, 0xF2, 0x81, + 0xE3, 0xFC, 0x25, 0x9A, 0xC6, 0xCB, 0xC0, 0xAC, + 0xB8, 0xD6, 0x22, 0x68, 0xB6, 0x03, 0xBC, 0x67, + 0x6A, 0xB4, 0x15, 0xC4, 0x74, 0xBB, 0x94, 0x87, + 0x3E, 0x44, 0x87, 0xAE, 0x31, 0xA4, 0xE3, 0x84, + 0x5C, 0x79, 0x90, 0x15, 0x50, 0x89, 0x0E, 0xE8, + 0x78, 0x4E, 0xEF, 0x90, 0x4F, 0xEE, 0x62, 0xBA, + 0x8C, 0x5F, 0x95, 0x2C, 0x68, 0x41, 0x30, 0x52, + 0xE0, 0xA7, 0xE3, 0x38, 0x8B, 0xB8, 0xFF, 0x0A, + 0xD6, 0x02, 0xAE, 0x3E, 0xA1, 0x4D, 0x9D, 0xF6, + 0xDD, 0x5E, 0x4C, 0xC6, 0xA3, 0x81, 0xA4, 0x1D, + 0xA5, 0xC1, 0x37, 0xEC, 0xC4, 0x9D, 0xF5, 0x87, + 0xE1, 0x78, 0xEA, 0xF4, 0x77, 0x02, 0xEC, 0x62, + 0x37, 0x80, 0x69, 0x1A, 0x32, 0x33, 0xF6, 0x9F, + 0x12, 0xBD, 0x9C, 0x9B, 0x96, 0x37, 0xC5, 0x13, + 0x78, 0xAD, 0x71, 0xA8, 0x31, 0x05, 0x52, 0x77, + 0x25, 0x4C, 0xC6, 0x3C, 0x5A, 0xD4, 0xCB, 0x76, + 0xB4, 0xAB, 0x82, 0xE5, 0xFC, 0xA1, 0x35, 0xE8, + 0xD2, 0x6A, 0x6B, 0x3A, 0x89, 0xFA, 0x5B, 0x6F + }; + static const byte c_768[WC_ML_KEM_768_CIPHER_TEXT_SIZE] = { + 0xA5, 0xC8, 0x1C, 0x76, 0xC2, 0x43, 0x05, 0xE1, + 0xCE, 0x5D, 0x81, 0x35, 0xD4, 0x15, 0x23, 0x68, + 0x2E, 0x9E, 0xE6, 0xD7, 0xB4, 0x0A, 0xD4, 0x1D, + 0xF1, 0xF3, 0x7C, 0x9B, 0x17, 0xDC, 0xE7, 0x80, + 0x76, 0x01, 0x9A, 0x6B, 0x0B, 0x7C, 0x95, 0xC9, + 0xBE, 0x7A, 0xF2, 0x95, 0x07, 0xB2, 0xD5, 0xA6, + 0x98, 0x7C, 0x8E, 0xE3, 0x25, 0x91, 0x90, 0x85, + 0x52, 0x43, 0xE6, 0xE5, 0x6F, 0x56, 0x20, 0x60, + 0x8C, 0x52, 0xD9, 0x6F, 0xAB, 0x10, 0x3A, 0x87, + 0x00, 0xFB, 0xA1, 0xA8, 0x7D, 0xCA, 0x60, 0x78, + 0x11, 0x8A, 0x08, 0x71, 0x76, 0x2C, 0x95, 0x34, + 0xC0, 0xC0, 0xC3, 0x97, 0x8C, 0x91, 0xC3, 0xA0, + 0x1F, 0x0F, 0x60, 0x8D, 0xCF, 0x75, 0x78, 0x15, + 0x43, 0x8F, 0xE8, 0x95, 0x7C, 0x8A, 0x85, 0x91, + 0x83, 0xB1, 0xB6, 0x72, 0x1A, 0x08, 0x65, 0xBE, + 0xBC, 0x79, 0x9D, 0x4E, 0x5C, 0x0E, 0x7B, 0xD3, + 0xEA, 0xE4, 0x85, 0x8E, 0x6A, 0xB6, 0xA2, 0xE7, + 0x65, 0x8E, 0xD8, 0x0D, 0x4E, 0xD1, 0x58, 0xB0, + 0x36, 0xB9, 0x3F, 0xA0, 0x3A, 0xFA, 0x6A, 0xE3, + 0x13, 0x6C, 0xF3, 0xD6, 0x93, 0xC9, 0x11, 0xBC, + 0xC7, 0x59, 0x05, 0xE5, 0xB0, 0xCB, 0x28, 0x65, + 0xB9, 0xE9, 0x88, 0x45, 0x22, 0xA7, 0x77, 0x77, + 0x61, 0x3E, 0x53, 0x11, 0x1D, 0x5A, 0x1C, 0x7D, + 0x3D, 0xAB, 0x73, 0x4C, 0xEB, 0x03, 0x65, 0x7A, + 0xE0, 0xC8, 0x97, 0x63, 0xE9, 0x94, 0x71, 0x05, + 0x47, 0x76, 0xBA, 0xE7, 0xD5, 0x1B, 0x0E, 0x73, + 0xA5, 0xBB, 0x35, 0xAE, 0xC3, 0x0F, 0xF6, 0xBC, + 0x93, 0x68, 0x49, 0x16, 0xFE, 0xF1, 0x16, 0x25, + 0x86, 0x45, 0x2F, 0x42, 0x66, 0x53, 0xE2, 0xCA, + 0x84, 0x4D, 0x57, 0x44, 0x30, 0x7F, 0xF9, 0xAE, + 0xB2, 0x87, 0xA6, 0x44, 0x77, 0x83, 0xB2, 0x1A, + 0x0E, 0x93, 0x9C, 0x81, 0x42, 0x1D, 0x63, 0x1F, + 0x5D, 0xCB, 0x45, 0x2E, 0x51, 0xED, 0x34, 0xE3, + 0xDA, 0xD1, 0xCF, 0x50, 0x4E, 0x0A, 0x3B, 0x0F, + 0x47, 0x11, 0xA8, 0xDC, 0x64, 0x99, 0xD1, 0x69, + 0x1D, 0x10, 0x95, 0x69, 0x33, 0x6C, 0xE1, 0x55, + 0x8A, 0x4C, 0x0A, 0x46, 0x4E, 0x20, 0x87, 0xEA, + 0x8F, 0x9E, 0x3B, 0x18, 0xF7, 0x47, 0xEF, 0x61, + 0xF4, 0x57, 0x6A, 0xEB, 0x42, 0xB1, 0x7C, 0xAD, + 0xB7, 0xF0, 0xFD, 0x84, 0xDA, 0x8E, 0x3A, 0x6F, + 0x47, 0x1D, 0x95, 0xED, 0xFA, 0x65, 0xBE, 0x9E, + 0x6C, 0x9F, 0x6A, 0xE7, 0x56, 0xA2, 0x2A, 0x4F, + 0x1A, 0x5C, 0x54, 0x3C, 0x26, 0xBA, 0x7B, 0xAD, + 0x88, 0xE1, 0x6D, 0x5F, 0x5B, 0x7E, 0x12, 0xE2, + 0xD4, 0xCA, 0x34, 0xB3, 0xA6, 0x4D, 0x17, 0xF8, + 0x7C, 0xCF, 0xC4, 0xFF, 0x8C, 0x5E, 0x4F, 0x53, + 0x75, 0x2A, 0x07, 0x7C, 0x68, 0x72, 0x1E, 0x8C, + 0xC8, 0x17, 0xF9, 0xFF, 0x24, 0x87, 0x61, 0x70, + 0xFF, 0x2A, 0xF8, 0x9F, 0xA9, 0x58, 0x55, 0xA5, + 0xB1, 0xDE, 0x34, 0x7C, 0x07, 0xFD, 0xDB, 0xCF, + 0xE7, 0x26, 0x4A, 0xA5, 0xED, 0x64, 0x01, 0x49, + 0x15, 0x61, 0xD8, 0x31, 0x53, 0x8F, 0x85, 0x2B, + 0x0E, 0xD7, 0xB9, 0xE8, 0xEB, 0xAF, 0xFC, 0x06, + 0x02, 0x84, 0xF2, 0x2D, 0x2B, 0xAE, 0xE5, 0x6F, + 0xA9, 0xF6, 0xD0, 0x14, 0x32, 0xA1, 0x15, 0xA2, + 0xD6, 0xA6, 0x4C, 0x38, 0xAE, 0x0A, 0x50, 0xBA, + 0x36, 0x2F, 0xB5, 0x7B, 0x53, 0xE3, 0xE8, 0x55, + 0xB8, 0x3C, 0xE8, 0xC4, 0x22, 0x74, 0x04, 0x55, + 0x99, 0xF6, 0x5F, 0xA6, 0xA8, 0x92, 0x1D, 0x85, + 0xF9, 0x4E, 0xD2, 0x30, 0xB5, 0x16, 0x71, 0x2D, + 0xB6, 0xFD, 0x2F, 0xF2, 0x8B, 0x3A, 0x33, 0x71, + 0xD9, 0xBE, 0x05, 0x8A, 0xE7, 0x5C, 0x2F, 0xA5, + 0x91, 0xB7, 0xEC, 0x3C, 0x3D, 0xAA, 0x1F, 0x76, + 0x42, 0xBC, 0x26, 0xC3, 0x24, 0xC0, 0x80, 0x90, + 0x60, 0x7E, 0x66, 0x62, 0x15, 0x4D, 0xB3, 0x7C, + 0xF7, 0x47, 0x96, 0x7A, 0x1F, 0x9F, 0xC2, 0x90, + 0x89, 0xF5, 0x70, 0xEB, 0xE6, 0x0E, 0xEE, 0xF8, + 0x9F, 0xD2, 0x44, 0x81, 0x02, 0x8C, 0x85, 0xAE, + 0xF1, 0xDC, 0x3B, 0x09, 0xF2, 0x2C, 0xD3, 0x69, + 0x1B, 0xBB, 0xB8, 0x21, 0xC7, 0xA8, 0xA0, 0xF3, + 0x5A, 0xD1, 0x2B, 0xE1, 0xDD, 0x19, 0x9B, 0x97, + 0x70, 0x48, 0xF3, 0xD4, 0x8C, 0x16, 0xBB, 0x2C, + 0xA9, 0x4C, 0xEC, 0xB8, 0x92, 0x87, 0x70, 0xD5, + 0xBB, 0x32, 0x9A, 0x03, 0x27, 0xE0, 0xB2, 0x86, + 0xFA, 0xA1, 0xC6, 0x52, 0x81, 0x03, 0x1A, 0x31, + 0xC8, 0x4F, 0x2E, 0xDC, 0x9C, 0x04, 0xD4, 0x75, + 0xED, 0x4E, 0x12, 0x8E, 0x51, 0xEF, 0xA9, 0x7D, + 0x01, 0x48, 0xCB, 0xA6, 0xC9, 0x5F, 0x67, 0x4C, + 0x58, 0x9F, 0x30, 0x1C, 0x26, 0x5B, 0xED, 0x70, + 0x8E, 0x9A, 0xD8, 0xDA, 0x3C, 0x5C, 0xEC, 0xBD, + 0xEE, 0xED, 0x35, 0xEF, 0x1E, 0x25, 0x31, 0x32, + 0xBA, 0x89, 0x92, 0x0D, 0x78, 0x6B, 0x88, 0x23, + 0x0B, 0x01, 0x3B, 0xCF, 0x2D, 0xC9, 0x2D, 0x6B, + 0x15, 0x7A, 0xFA, 0x8D, 0xA8, 0x59, 0x2C, 0xD0, + 0x74, 0x3D, 0x49, 0x82, 0xBE, 0x60, 0xD7, 0xC2, + 0xD5, 0xC4, 0x72, 0xAB, 0x9F, 0xA7, 0xF4, 0xCC, + 0x3D, 0x12, 0xB0, 0xEB, 0xAF, 0x0A, 0xBE, 0x55, + 0x5C, 0x75, 0x80, 0x54, 0x26, 0x84, 0x4D, 0xD9, + 0x42, 0x86, 0x43, 0xF8, 0x44, 0x06, 0xA1, 0xB8, + 0xD6, 0xFA, 0xED, 0xFD, 0x8A, 0xE6, 0xE7, 0x3A, + 0x72, 0x77, 0x2A, 0x21, 0x59, 0xAC, 0xAB, 0xD9, + 0x72, 0xAE, 0xB6, 0xF7, 0xDE, 0x09, 0x1A, 0xC5, + 0xFD, 0xD7, 0xF4, 0x9A, 0x3D, 0xC6, 0x64, 0x1C, + 0xDF, 0x62, 0x44, 0x6B, 0x4B, 0x04, 0xA3, 0x1F, + 0x73, 0xB8, 0x0A, 0x62, 0xF8, 0x0A, 0x40, 0x4A, + 0x8C, 0xB1, 0x8C, 0xE3, 0xE6, 0x54, 0x80, 0xEF, + 0x7B, 0x52, 0xBF, 0x00, 0x91, 0x11, 0x7E, 0x5D, + 0x08, 0xEA, 0xE1, 0xB0, 0xAA, 0xBB, 0x72, 0xE6, + 0xDF, 0xFF, 0xF7, 0x6F, 0x6E, 0x44, 0xBB, 0xD7, + 0xEA, 0x57, 0x0D, 0x66, 0x04, 0xBC, 0x2E, 0x74, + 0x31, 0x8B, 0xAF, 0xA3, 0x15, 0xA3, 0x88, 0x61, + 0xAA, 0x1B, 0x21, 0xAF, 0xB2, 0xA5, 0x3F, 0x26, + 0x14, 0xF1, 0xD6, 0x40, 0x07, 0x59, 0x84, 0xAE, + 0x62, 0xE2, 0xFC, 0xA1, 0xD1, 0xB4, 0xDB, 0x36, + 0x9F, 0x15, 0x70, 0x5C, 0xE7, 0xD4, 0xDF, 0x8A, + 0xE9, 0x82, 0x64, 0x50, 0x10, 0x51, 0xC0, 0xDE, + 0xF2, 0x1D, 0x64, 0x5D, 0x49, 0x62, 0x5A, 0xF0, + 0x2C, 0xA4, 0x28, 0xD9, 0xF0, 0xC2, 0xCD, 0x9F, + 0xBA, 0xEE, 0xAB, 0x97, 0xE8, 0xE9, 0x15, 0x16, + 0x62, 0xB6, 0x99, 0x2B, 0x4C, 0x99, 0xAB, 0x1B, + 0x92, 0x5D, 0x08, 0x92, 0x03, 0x63, 0x37, 0x3F, + 0x76, 0xD3, 0xFD, 0xF0, 0x82, 0x8C, 0xAA, 0x69, + 0xC8, 0xB1, 0xBD, 0xC6, 0xF5, 0x21, 0xDF, 0x64, + 0x1C, 0xF1, 0xC8, 0xA4, 0xE7, 0xEF, 0x0C, 0x23, + 0x28, 0x9A, 0x4E, 0x2C, 0xF1, 0x8A, 0xCE, 0xBB, + 0xE4, 0xC1, 0xE6, 0x83, 0x69, 0xBD, 0x52, 0x35, + 0x12, 0x01, 0x42, 0xEC, 0xDD, 0x1A, 0x73, 0x81, + 0x1E, 0x2E, 0x53, 0x3A, 0x64, 0x7D, 0x7A, 0xEE, + 0x16, 0xDA, 0xA0, 0x3B, 0x68, 0x36, 0x39, 0xDC, + 0xF1, 0xE1, 0xF1, 0xE7, 0x1C, 0xFA, 0xED, 0x48, + 0xF6, 0x9A, 0xEC, 0x3E, 0x83, 0x17, 0x33, 0xDA, + 0x19, 0xCE, 0xBE, 0xC1, 0xDD, 0xBF, 0x71, 0xCB, + 0xAE, 0x08, 0x00, 0xF2, 0xF6, 0xD6, 0x4A, 0x09, + 0x6E, 0xC4, 0x95, 0xD6, 0x2F, 0x43, 0x44, 0xF7, + 0xAA, 0x56, 0x21, 0xB3, 0x22, 0x35, 0x3A, 0x79, + 0x5A, 0xA0, 0x99, 0xEA, 0x3A, 0x07, 0x02, 0x72, + 0xD0, 0x53, 0xD4, 0x65, 0x3A, 0x20, 0xCF, 0x21, + 0x0E, 0xAA, 0xF1, 0x2C, 0xAE, 0x60, 0x23, 0xD8, + 0xE5, 0x11, 0x8D, 0xF0, 0x4B, 0x38, 0x4A, 0x44, + 0xD1, 0xED, 0xB9, 0x1C, 0x44, 0x98, 0x9E, 0xF7, + 0xEE, 0x57, 0xF2, 0xBF, 0x81, 0xA2, 0x4B, 0xDC, + 0x76, 0x80, 0x7D, 0xA9, 0x67, 0xEE, 0x65, 0x25, + 0x41, 0x0C, 0x5C, 0x48, 0x50, 0x67, 0xEF, 0xC3, + 0xD3, 0x9A, 0x9A, 0xD4, 0x2C, 0xC7, 0x53, 0xBA, + 0xA5, 0x9A, 0x1F, 0xD2, 0x8A, 0xF3, 0x5C, 0x00, + 0xD1, 0x8A, 0x40, 0x6A, 0x28, 0xFC, 0x79, 0xBA + }; + static const byte kprime_768[WC_ML_KEM_SS_SZ] = { + 0xDC, 0x5B, 0x88, 0x88, 0xBC, 0x1E, 0xBA, 0x5C, + 0x19, 0x69, 0xC2, 0x11, 0x64, 0xEA, 0x43, 0xE2, + 0x2E, 0x7A, 0xC0, 0xCD, 0x01, 0x2A, 0x2F, 0x26, + 0xCB, 0x8C, 0x48, 0x7E, 0x69, 0xEF, 0x7C, 0xE4 + }; +#endif +#ifndef WOLFSSL_NO_ML_KEM_1024 + static const byte dk_1024[WC_ML_KEM_1024_PRIVATE_KEY_SIZE] = { + 0x84, 0x45, 0xC3, 0x36, 0xF3, 0x51, 0x8B, 0x29, + 0x81, 0x63, 0xDC, 0xBB, 0x63, 0x57, 0x59, 0x79, + 0x83, 0xCA, 0x2E, 0x87, 0x3D, 0xCB, 0x49, 0x61, + 0x0C, 0xF5, 0x2F, 0x14, 0xDB, 0xCB, 0x94, 0x7C, + 0x1F, 0x3E, 0xE9, 0x26, 0x69, 0x67, 0x27, 0x6B, + 0x0C, 0x57, 0x6C, 0xF7, 0xC3, 0x0E, 0xE6, 0xB9, + 0x3D, 0xEA, 0x51, 0x18, 0x67, 0x6C, 0xBE, 0xE1, + 0xB1, 0xD4, 0x79, 0x42, 0x06, 0xFB, 0x36, 0x9A, + 0xBA, 0x41, 0x16, 0x7B, 0x43, 0x93, 0x85, 0x5C, + 0x84, 0xEB, 0xA8, 0xF3, 0x23, 0x73, 0xC0, 0x5B, + 0xAE, 0x76, 0x31, 0xC8, 0x02, 0x74, 0x4A, 0xAD, + 0xB6, 0xC2, 0xDE, 0x41, 0x25, 0x0C, 0x49, 0x43, + 0x15, 0x23, 0x0B, 0x52, 0x82, 0x6C, 0x34, 0x58, + 0x7C, 0xB2, 0x1B, 0x18, 0x3B, 0x49, 0xB2, 0xA5, + 0xAC, 0x04, 0x92, 0x1A, 0xC6, 0xBF, 0xAC, 0x1B, + 0x24, 0xA4, 0xB3, 0x7A, 0x93, 0xA4, 0xB1, 0x68, + 0xCC, 0xE7, 0x59, 0x1B, 0xE6, 0x11, 0x1F, 0x47, + 0x62, 0x60, 0xF2, 0x76, 0x29, 0x59, 0xF5, 0xC1, + 0x64, 0x01, 0x18, 0xC2, 0x42, 0x37, 0x72, 0xE2, + 0xAD, 0x03, 0xDC, 0x71, 0x68, 0xA3, 0x8C, 0x6D, + 0xD3, 0x9F, 0x5F, 0x72, 0x54, 0x26, 0x42, 0x80, + 0xC8, 0xBC, 0x10, 0xB9, 0x14, 0x16, 0x80, 0x70, + 0x47, 0x2F, 0xA8, 0x80, 0xAC, 0xB8, 0x60, 0x1A, + 0x8A, 0x08, 0x37, 0xF2, 0x5F, 0xE1, 0x94, 0x68, + 0x7C, 0xD6, 0x8B, 0x7D, 0xE2, 0x34, 0x0F, 0x03, + 0x6D, 0xAD, 0x89, 0x1D, 0x38, 0xD1, 0xB0, 0xCE, + 0x9C, 0x26, 0x33, 0x35, 0x5C, 0xF5, 0x7B, 0x50, + 0xB8, 0x96, 0x03, 0x6F, 0xCA, 0x26, 0x0D, 0x26, + 0x69, 0xF8, 0x5B, 0xAC, 0x79, 0x71, 0x4F, 0xDA, + 0xFB, 0x41, 0xEF, 0x80, 0xB8, 0xC3, 0x02, 0x64, + 0xC3, 0x13, 0x86, 0xAE, 0x60, 0xB0, 0x5F, 0xAA, + 0x54, 0x2A, 0x26, 0xB4, 0x1E, 0xB8, 0x5F, 0x67, + 0x06, 0x8F, 0x08, 0x80, 0x34, 0xFF, 0x67, 0xAA, + 0x2E, 0x81, 0x5A, 0xAB, 0x8B, 0xCA, 0x6B, 0xF7, + 0x1F, 0x70, 0xEC, 0xC3, 0xCB, 0xCB, 0xC4, 0x5E, + 0xF7, 0x01, 0xFC, 0xD5, 0x42, 0xBD, 0x21, 0xC7, + 0xB0, 0x95, 0x68, 0xF3, 0x69, 0xC6, 0x69, 0xF3, + 0x96, 0x47, 0x38, 0x44, 0xFB, 0xA1, 0x49, 0x57, + 0xF5, 0x19, 0x74, 0xD8, 0x52, 0xB9, 0x78, 0x01, + 0x46, 0x03, 0xA2, 0x10, 0xC0, 0x19, 0x03, 0x62, + 0x87, 0x00, 0x89, 0x94, 0xF2, 0x12, 0x55, 0xB2, + 0x50, 0x99, 0xAD, 0x82, 0xAA, 0x13, 0x24, 0x38, + 0x96, 0x3B, 0x2C, 0x0A, 0x47, 0xCD, 0xF5, 0xF3, + 0x2B, 0xA4, 0x6B, 0x76, 0xC7, 0xA6, 0x55, 0x9F, + 0x18, 0xBF, 0xD5, 0x55, 0xB7, 0x62, 0xE4, 0x87, + 0xB6, 0xAC, 0x99, 0x2F, 0xE2, 0x0E, 0x28, 0x3C, + 0xA0, 0xB3, 0xF6, 0x16, 0x44, 0x96, 0x95, 0x59, + 0x95, 0xC3, 0xB2, 0x8A, 0x57, 0xBB, 0xC2, 0x98, + 0x26, 0xF0, 0x6F, 0xB3, 0x8B, 0x25, 0x34, 0x70, + 0xAF, 0x63, 0x1B, 0xC4, 0x6C, 0x3A, 0x8F, 0x9C, + 0xE8, 0x24, 0x32, 0x19, 0x85, 0xDD, 0x01, 0xC0, + 0x5F, 0x69, 0xB8, 0x24, 0xF9, 0x16, 0x63, 0x3B, + 0x40, 0x65, 0x4C, 0x75, 0xAA, 0xEB, 0x93, 0x85, + 0x57, 0x6F, 0xFD, 0xE2, 0x99, 0x0A, 0x6B, 0x0A, + 0x3B, 0xE8, 0x29, 0xD6, 0xD8, 0x4E, 0x34, 0xF1, + 0x78, 0x05, 0x89, 0xC7, 0x92, 0x04, 0xC6, 0x3C, + 0x79, 0x8F, 0x55, 0xD2, 0x31, 0x87, 0xE4, 0x61, + 0xD4, 0x8C, 0x21, 0xE5, 0xC0, 0x47, 0xE5, 0x35, + 0xB1, 0x9F, 0x45, 0x8B, 0xBA, 0x13, 0x45, 0xB9, + 0xE4, 0x1E, 0x0C, 0xB4, 0xA9, 0xC2, 0xD8, 0xC4, + 0x0B, 0x49, 0x0A, 0x3B, 0xAB, 0xC5, 0x53, 0xB3, + 0x02, 0x6B, 0x16, 0x72, 0xD2, 0x8C, 0xBC, 0x8B, + 0x49, 0x8A, 0x3A, 0x99, 0x57, 0x9A, 0x83, 0x2F, + 0xEA, 0xE7, 0x46, 0x10, 0xF0, 0xB6, 0x25, 0x0C, + 0xC3, 0x33, 0xE9, 0x49, 0x3E, 0xB1, 0x62, 0x1E, + 0xD3, 0x4A, 0xA4, 0xAB, 0x17, 0x5F, 0x2C, 0xA2, + 0x31, 0x15, 0x25, 0x09, 0xAC, 0xB6, 0xAC, 0x86, + 0xB2, 0x0F, 0x6B, 0x39, 0x10, 0x84, 0x39, 0xE5, + 0xEC, 0x12, 0xD4, 0x65, 0xA0, 0xFE, 0xF3, 0x50, + 0x03, 0xE1, 0x42, 0x77, 0xA2, 0x18, 0x12, 0x14, + 0x6B, 0x25, 0x44, 0x71, 0x6D, 0x6A, 0xB8, 0x2D, + 0x1B, 0x07, 0x26, 0xC2, 0x7A, 0x98, 0xD5, 0x89, + 0xEB, 0xDA, 0xCC, 0x4C, 0x54, 0xBA, 0x77, 0xB2, + 0x49, 0x8F, 0x21, 0x7E, 0x14, 0xE3, 0x4E, 0x66, + 0x02, 0x5A, 0x2A, 0x14, 0x3A, 0x99, 0x25, 0x20, + 0xA6, 0x1C, 0x06, 0x72, 0xCC, 0x9C, 0xCE, 0xD7, + 0xC9, 0x45, 0x0C, 0x68, 0x3E, 0x90, 0xA3, 0xE4, + 0x65, 0x1D, 0xB6, 0x23, 0xA6, 0xDB, 0x39, 0xAC, + 0x26, 0x12, 0x5B, 0x7F, 0xC1, 0x98, 0x6D, 0x7B, + 0x04, 0x93, 0xB8, 0xB7, 0x2D, 0xE7, 0x70, 0x7D, + 0xC2, 0x0B, 0xBD, 0xD4, 0x37, 0x13, 0x15, 0x6A, + 0xF7, 0xD9, 0x43, 0x0E, 0xF4, 0x53, 0x99, 0x66, + 0x3C, 0x22, 0x02, 0x73, 0x91, 0x68, 0x69, 0x2D, + 0xD6, 0x57, 0x54, 0x5B, 0x05, 0x6D, 0x9C, 0x92, + 0x38, 0x5A, 0x7F, 0x41, 0x4B, 0x34, 0xB9, 0x0C, + 0x79, 0x60, 0xD5, 0x7B, 0x35, 0xBA, 0x7D, 0xDE, + 0x7B, 0x81, 0xFC, 0xA0, 0x11, 0x9D, 0x74, 0x1B, + 0x12, 0x78, 0x09, 0x26, 0x01, 0x8F, 0xE4, 0xC8, + 0x03, 0x0B, 0xF0, 0x38, 0xE1, 0x8B, 0x4F, 0xA3, + 0x37, 0x43, 0xD0, 0xD3, 0xC8, 0x46, 0x41, 0x7E, + 0x9D, 0x59, 0x15, 0xC2, 0x46, 0x31, 0x59, 0x38, + 0xB1, 0xE2, 0x33, 0x61, 0x45, 0x01, 0xD0, 0x26, + 0x95, 0x95, 0x51, 0x25, 0x8B, 0x23, 0x32, 0x30, + 0xD4, 0x28, 0xB1, 0x81, 0xB1, 0x32, 0xF1, 0xD0, + 0xB0, 0x26, 0x06, 0x7B, 0xA8, 0x16, 0x99, 0x9B, + 0xC0, 0xCD, 0x6B, 0x54, 0x7E, 0x54, 0x8B, 0x63, + 0xC9, 0xEA, 0xA0, 0x91, 0xBA, 0xC4, 0x93, 0xDC, + 0x59, 0x8D, 0xBC, 0x2B, 0x0E, 0x14, 0x6A, 0x25, + 0x91, 0xC2, 0xA8, 0xC0, 0x09, 0xDD, 0x51, 0x70, + 0xAA, 0xE0, 0x27, 0xC5, 0x41, 0xA1, 0xB5, 0xE6, + 0x6E, 0x45, 0xC6, 0x56, 0x12, 0x98, 0x4C, 0x46, + 0x77, 0x04, 0x93, 0xEC, 0x89, 0x6E, 0xF2, 0x5A, + 0xA9, 0x30, 0x5E, 0x9F, 0x06, 0x69, 0x2C, 0xD0, + 0xB2, 0xF0, 0x69, 0x62, 0xE2, 0x05, 0xBE, 0xBE, + 0x11, 0x3A, 0x34, 0xEB, 0xB1, 0xA4, 0x83, 0x0A, + 0x9B, 0x37, 0x49, 0x64, 0x1B, 0xB9, 0x35, 0x00, + 0x7B, 0x23, 0xB2, 0x4B, 0xFE, 0x57, 0x69, 0x56, + 0x25, 0x4D, 0x7A, 0x35, 0xAA, 0x49, 0x6A, 0xC4, + 0x46, 0xC6, 0x7A, 0x7F, 0xEC, 0x85, 0xA6, 0x00, + 0x57, 0xE8, 0x58, 0x06, 0x17, 0xBC, 0xB3, 0xFA, + 0xD1, 0x5C, 0x76, 0x44, 0x0F, 0xED, 0x54, 0xCC, + 0x78, 0x93, 0x94, 0xFE, 0xA2, 0x44, 0x52, 0xCC, + 0x6B, 0x05, 0x85, 0xB7, 0xEB, 0x0A, 0x88, 0xBB, + 0xA9, 0x50, 0x0D, 0x98, 0x00, 0xE6, 0x24, 0x1A, + 0xFE, 0xB5, 0x23, 0xB5, 0x5A, 0x96, 0xA5, 0x35, + 0x15, 0x1D, 0x10, 0x49, 0x57, 0x32, 0x06, 0xE5, + 0x9C, 0x7F, 0xEB, 0x07, 0x09, 0x66, 0x82, 0x36, + 0x34, 0xF7, 0x7D, 0x5F, 0x12, 0x91, 0x75, 0x5A, + 0x24, 0x31, 0x19, 0x62, 0x1A, 0xF8, 0x08, 0x4A, + 0xB7, 0xAC, 0x1E, 0x22, 0xA0, 0x56, 0x8C, 0x62, + 0x01, 0x41, 0x7C, 0xBE, 0x36, 0x55, 0xD8, 0xA0, + 0x8D, 0xD5, 0xB5, 0x13, 0x88, 0x4C, 0x98, 0xD5, + 0xA4, 0x93, 0xFD, 0x49, 0x38, 0x2E, 0xA4, 0x18, + 0x60, 0xF1, 0x33, 0xCC, 0xD6, 0x01, 0xE8, 0x85, + 0x96, 0x64, 0x26, 0xA2, 0xB1, 0xF2, 0x3D, 0x42, + 0xD8, 0x2E, 0x24, 0x58, 0x2D, 0x99, 0x72, 0x51, + 0x92, 0xC2, 0x17, 0x77, 0x46, 0x7B, 0x14, 0x57, + 0xB1, 0xDD, 0x42, 0x9A, 0x0C, 0x41, 0xA5, 0xC3, + 0xD7, 0x04, 0xCE, 0xA0, 0x62, 0x78, 0xC5, 0x99, + 0x41, 0xB4, 0x38, 0xC6, 0x27, 0x27, 0x09, 0x78, + 0x09, 0xB4, 0x53, 0x0D, 0xBE, 0x83, 0x7E, 0xA3, + 0x96, 0xB6, 0xD3, 0x10, 0x77, 0xFA, 0xD3, 0x73, + 0x30, 0x53, 0x98, 0x9A, 0x84, 0x42, 0xAA, 0xC4, + 0x25, 0x5C, 0xB1, 0x63, 0xB8, 0xCA, 0x2F, 0x27, + 0x50, 0x1E, 0xA9, 0x67, 0x30, 0x56, 0x95, 0xAB, + 0xD6, 0x59, 0xAA, 0x02, 0xC8, 0x3E, 0xE6, 0x0B, + 0xB5, 0x74, 0x20, 0x3E, 0x99, 0x37, 0xAE, 0x1C, + 0x62, 0x1C, 0x8E, 0xCB, 0x5C, 0xC1, 0xD2, 0x1D, + 0x55, 0x69, 0x60, 0xB5, 0xB9, 0x16, 0x1E, 0xA9, + 0x6F, 0xFF, 0xEB, 0xAC, 0x72, 0xE1, 0xB8, 0xA6, + 0x15, 0x4F, 0xC4, 0xD8, 0x8B, 0x56, 0xC0, 0x47, + 0x41, 0xF0, 0x90, 0xCB, 0xB1, 0x56, 0xA7, 0x37, + 0xC9, 0xE6, 0xA2, 0x2B, 0xA8, 0xAC, 0x70, 0x4B, + 0xC3, 0x04, 0xF8, 0xE1, 0x7E, 0x5E, 0xA8, 0x45, + 0xFD, 0xE5, 0x9F, 0xBF, 0x78, 0x8C, 0xCE, 0x0B, + 0x97, 0xC8, 0x76, 0x1F, 0x89, 0xA2, 0x42, 0xF3, + 0x05, 0x25, 0x83, 0xC6, 0x84, 0x4A, 0x63, 0x20, + 0x31, 0xC9, 0x64, 0xA6, 0xC4, 0xA8, 0x5A, 0x12, + 0x8A, 0x28, 0x61, 0x9B, 0xA1, 0xBB, 0x3D, 0x1B, + 0xEA, 0x4B, 0x49, 0x84, 0x1F, 0xC8, 0x47, 0x61, + 0x4A, 0x06, 0x68, 0x41, 0xF5, 0x2E, 0xD0, 0xEB, + 0x8A, 0xE0, 0xB8, 0xB0, 0x96, 0xE9, 0x2B, 0x81, + 0x95, 0x40, 0x58, 0x15, 0xB2, 0x31, 0x26, 0x6F, + 0x36, 0xB1, 0x8C, 0x1A, 0x53, 0x33, 0x3D, 0xAB, + 0x95, 0xD2, 0xA9, 0xA3, 0x74, 0xB5, 0x47, 0x8A, + 0x4A, 0x41, 0xFB, 0x87, 0x59, 0x95, 0x7C, 0x9A, + 0xB2, 0x2C, 0xAE, 0x54, 0x5A, 0xB5, 0x44, 0xBA, + 0x8D, 0xD0, 0x5B, 0x83, 0xF3, 0xA6, 0x13, 0xA2, + 0x43, 0x7A, 0xDB, 0x07, 0x3A, 0x96, 0x35, 0xCB, + 0x4B, 0xBC, 0x96, 0x5F, 0xB4, 0x54, 0xCF, 0x27, + 0xB2, 0x98, 0xA4, 0x0C, 0xD0, 0xDA, 0x3B, 0x8F, + 0x9C, 0xA9, 0x9D, 0x8C, 0xB4, 0x28, 0x6C, 0x5E, + 0xB4, 0x76, 0x41, 0x67, 0x96, 0x07, 0x0B, 0xA5, + 0x35, 0xAA, 0xA5, 0x8C, 0xDB, 0x45, 0x1C, 0xD6, + 0xDB, 0x5C, 0xBB, 0x0C, 0xA2, 0x0F, 0x0C, 0x71, + 0xDE, 0x97, 0xC3, 0x0D, 0xA9, 0x7E, 0xC7, 0x90, + 0x6D, 0x06, 0xB4, 0xB9, 0x39, 0x39, 0x60, 0x28, + 0xC4, 0x6B, 0xA0, 0xE7, 0xA8, 0x65, 0xBC, 0x83, + 0x08, 0xA3, 0x81, 0x0F, 0x12, 0x12, 0x00, 0x63, + 0x39, 0xF7, 0xBC, 0x16, 0x9B, 0x16, 0x66, 0xFD, + 0xF4, 0x75, 0x91, 0x1B, 0xBC, 0x8A, 0xAA, 0xB4, + 0x17, 0x55, 0xC9, 0xA8, 0xAA, 0xBF, 0xA2, 0x3C, + 0x0E, 0x37, 0xF8, 0x4F, 0xE4, 0x69, 0x99, 0xE0, + 0x30, 0x49, 0x4B, 0x92, 0x98, 0xEF, 0x99, 0x34, + 0xE8, 0xA6, 0x49, 0xC0, 0xA5, 0xCC, 0xE2, 0xB2, + 0x2F, 0x31, 0x80, 0x9A, 0xFE, 0xD2, 0x39, 0x55, + 0xD8, 0x78, 0x81, 0xD9, 0x9F, 0xC1, 0xD3, 0x52, + 0x89, 0x6C, 0xAC, 0x90, 0x55, 0xBE, 0xA0, 0xD0, + 0x16, 0xCC, 0xBA, 0x78, 0x05, 0xA3, 0xA5, 0x0E, + 0x22, 0x16, 0x30, 0x37, 0x9B, 0xD0, 0x11, 0x35, + 0x22, 0x1C, 0xAD, 0x5D, 0x95, 0x17, 0xC8, 0xCC, + 0x42, 0x63, 0x7B, 0x9F, 0xC0, 0x71, 0x8E, 0x9A, + 0x9B, 0xB4, 0x94, 0x5C, 0x72, 0xD8, 0xD1, 0x1D, + 0x3D, 0x65, 0x9D, 0x83, 0xA3, 0xC4, 0x19, 0x50, + 0x9A, 0xF5, 0xB4, 0x70, 0xDD, 0x89, 0xB7, 0xF3, + 0xAC, 0xCF, 0x5F, 0x35, 0xCF, 0xC3, 0x22, 0x11, + 0x5F, 0xD6, 0x6A, 0x5C, 0xD2, 0x87, 0x56, 0x51, + 0x32, 0x6F, 0x9B, 0x31, 0x68, 0x91, 0x3B, 0xE5, + 0xB9, 0xC8, 0x7A, 0xE0, 0xB0, 0x25, 0xEC, 0x7A, + 0x2F, 0x4A, 0x07, 0x27, 0x50, 0x94, 0x6A, 0xC6, + 0x11, 0x70, 0xA7, 0x82, 0x6D, 0x97, 0x04, 0xC5, + 0xA2, 0x3A, 0x1C, 0x0A, 0x23, 0x25, 0x14, 0x6C, + 0x3B, 0xC1, 0x85, 0x88, 0x26, 0xC6, 0xB3, 0x92, + 0x79, 0xC2, 0xDA, 0x74, 0x38, 0xA3, 0x70, 0xED, + 0x8A, 0x0A, 0xA5, 0x16, 0x9E, 0x3B, 0xEC, 0x29, + 0xED, 0x88, 0x47, 0x87, 0x32, 0x75, 0x8D, 0x45, + 0x41, 0x43, 0xE2, 0x27, 0xF8, 0x59, 0x58, 0x83, + 0x29, 0x78, 0x42, 0xE6, 0xAF, 0x13, 0x3B, 0x17, + 0xE4, 0x81, 0x1B, 0x0F, 0x57, 0x13, 0xAC, 0x73, + 0xB7, 0xE3, 0x47, 0x42, 0x3E, 0xB9, 0x28, 0x22, + 0xD2, 0x30, 0x6F, 0xA1, 0x45, 0x00, 0xA7, 0x20, + 0x7A, 0x06, 0x72, 0x67, 0x20, 0x46, 0x54, 0x4A, + 0xCC, 0x4E, 0xA9, 0xC1, 0x6E, 0xD7, 0x42, 0x1A, + 0x06, 0x9E, 0x0D, 0x73, 0x7A, 0x98, 0x62, 0x85, + 0x19, 0xC6, 0xA2, 0x9A, 0x42, 0x4A, 0x86, 0x8B, + 0x46, 0xD9, 0xA0, 0xCC, 0x7C, 0x6C, 0x9D, 0xDD, + 0x8B, 0x8B, 0xCB, 0xF4, 0x22, 0xC8, 0xF4, 0x8A, + 0x73, 0x14, 0x3D, 0x5A, 0xBB, 0x66, 0xBC, 0x55, + 0x49, 0x94, 0x18, 0x43, 0x08, 0x02, 0xBA, 0xC5, + 0x44, 0x46, 0x3C, 0xC7, 0x31, 0x9D, 0x17, 0x99, + 0x8F, 0x29, 0x41, 0x13, 0x65, 0x76, 0x6D, 0x04, + 0xC8, 0x47, 0xF3, 0x12, 0x9D, 0x90, 0x77, 0xB7, + 0xD8, 0x33, 0x9B, 0xFB, 0x96, 0xA6, 0x73, 0x9C, + 0x3F, 0x6B, 0x74, 0xA8, 0xF0, 0x5F, 0x91, 0x38, + 0xAB, 0x2F, 0xE3, 0x7A, 0xCB, 0x57, 0x63, 0x4D, + 0x18, 0x20, 0xB5, 0x01, 0x76, 0xF5, 0xA0, 0xB6, + 0xBC, 0x29, 0x40, 0xF1, 0xD5, 0x93, 0x8F, 0x19, + 0x36, 0xB5, 0xF9, 0x58, 0x28, 0xB9, 0x2E, 0xB7, + 0x29, 0x73, 0xC1, 0x59, 0x0A, 0xEB, 0x7A, 0x55, + 0x2C, 0xEC, 0xA1, 0x0B, 0x00, 0xC3, 0x03, 0xB7, + 0xC7, 0x5D, 0x40, 0x20, 0x71, 0xA7, 0x9E, 0x2C, + 0x81, 0x0A, 0xF7, 0xC7, 0x45, 0xE3, 0x33, 0x67, + 0x12, 0x49, 0x2A, 0x42, 0x04, 0x3F, 0x29, 0x03, + 0xA3, 0x7C, 0x64, 0x34, 0xCE, 0xE2, 0x0B, 0x1D, + 0x15, 0x9B, 0x05, 0x76, 0x99, 0xFF, 0x9C, 0x1D, + 0x3B, 0xD6, 0x80, 0x29, 0x83, 0x9A, 0x08, 0xF4, + 0x3E, 0x6C, 0x1C, 0x81, 0x99, 0x13, 0x53, 0x2F, + 0x91, 0x1D, 0xD3, 0x70, 0xC7, 0x02, 0x14, 0x88, + 0xE1, 0x1C, 0xB5, 0x04, 0xCB, 0x9C, 0x70, 0x57, + 0x0F, 0xFF, 0x35, 0xB4, 0xB4, 0x60, 0x11, 0x91, + 0xDC, 0x1A, 0xD9, 0xE6, 0xAD, 0xC5, 0xFA, 0x96, + 0x18, 0x79, 0x8D, 0x7C, 0xC8, 0x60, 0xC8, 0x7A, + 0x93, 0x9E, 0x4C, 0xCF, 0x85, 0x33, 0x63, 0x22, + 0x68, 0xCF, 0x1A, 0x51, 0xAF, 0xF0, 0xCB, 0x81, + 0x1C, 0x55, 0x45, 0xCB, 0x16, 0x56, 0xE6, 0x52, + 0x69, 0x47, 0x74, 0x30, 0x69, 0x9C, 0xCD, 0xEA, + 0x38, 0x00, 0x63, 0x0B, 0x78, 0xCD, 0x58, 0x10, + 0x33, 0x4C, 0xCF, 0x02, 0xE0, 0x13, 0xF3, 0xB8, + 0x02, 0x44, 0xE7, 0x0A, 0xCD, 0xB0, 0x60, 0xBB, + 0xE7, 0xA5, 0x53, 0xB0, 0x63, 0x45, 0x6B, 0x2E, + 0xA8, 0x07, 0x47, 0x34, 0x13, 0x16, 0x5C, 0xE5, + 0x7D, 0xD5, 0x63, 0x47, 0x3C, 0xFB, 0xC9, 0x06, + 0x18, 0xAD, 0xE1, 0xF0, 0xB8, 0x88, 0xAA, 0x48, + 0xE7, 0x22, 0xBB, 0x27, 0x51, 0x85, 0x8F, 0xE1, + 0x96, 0x87, 0x44, 0x2A, 0x48, 0xE7, 0xCA, 0x0D, + 0x2A, 0x29, 0xCD, 0x51, 0xBF, 0xD8, 0xF7, 0x8C, + 0x17, 0xB9, 0x66, 0x0B, 0xFB, 0x54, 0xA4, 0x70, + 0xB2, 0xAE, 0x9A, 0x95, 0x5C, 0x6A, 0xB8, 0xD6, + 0xE5, 0xCC, 0x92, 0xAC, 0x8E, 0xD3, 0xC1, 0x85, + 0xDA, 0xA8, 0xBC, 0x29, 0xF0, 0x57, 0x8E, 0xBB, + 0x81, 0x2B, 0x97, 0xC9, 0xE5, 0xA8, 0x48, 0xA6, + 0x38, 0x4D, 0xE4, 0xE7, 0x5A, 0x31, 0x47, 0x0B, + 0x53, 0x06, 0x6A, 0x8D, 0x02, 0x7B, 0xA4, 0x4B, + 0x21, 0x74, 0x9C, 0x04, 0x92, 0x46, 0x5F, 0x90, + 0x72, 0xB2, 0x83, 0x76, 0xC4, 0xE2, 0x90, 0xB3, + 0x0C, 0x18, 0x63, 0xF9, 0xE5, 0xB7, 0x99, 0x96, + 0x08, 0x34, 0x22, 0xBD, 0x8C, 0x27, 0x2C, 0x10, + 0xEC, 0xC6, 0xEB, 0x9A, 0x0A, 0x82, 0x25, 0xB3, + 0x1A, 0xA0, 0xA6, 0x6E, 0x35, 0xB9, 0xC0, 0xB9, + 0xA7, 0x95, 0x82, 0xBA, 0x20, 0xA3, 0xC0, 0x4C, + 0xD2, 0x99, 0x14, 0xF0, 0x83, 0xA0, 0x15, 0x82, + 0x88, 0xBA, 0x4D, 0x6E, 0xB6, 0x2D, 0x87, 0x26, + 0x4B, 0x91, 0x2B, 0xCA, 0x39, 0x73, 0x2F, 0xBD, + 0xE5, 0x36, 0xA3, 0x77, 0xAD, 0x02, 0xB8, 0xC8, + 0x35, 0xD4, 0xA2, 0xF4, 0xE7, 0xB1, 0xCE, 0x11, + 0x5D, 0x0C, 0x86, 0x0B, 0xEA, 0xA7, 0x95, 0x5A, + 0x49, 0xAD, 0x68, 0x95, 0x86, 0xA8, 0x9A, 0x2B, + 0x9F, 0x9B, 0x10, 0xD1, 0x59, 0x5D, 0x2F, 0xC0, + 0x65, 0xAD, 0x01, 0x8A, 0x7D, 0x56, 0xC6, 0x14, + 0x47, 0x1F, 0x8E, 0x94, 0x6F, 0xE8, 0xAB, 0x49, + 0xE8, 0x22, 0x65, 0x91, 0x11, 0x9F, 0xCA, 0xDB, + 0x4F, 0x9A, 0x86, 0x16, 0x31, 0x37, 0x87, 0x36, + 0xB6, 0x68, 0x8B, 0x78, 0x2D, 0x58, 0xE9, 0x7E, + 0x45, 0x72, 0x75, 0x3A, 0x96, 0x64, 0xB6, 0xB8, + 0x53, 0x68, 0x12, 0xB2, 0x59, 0x11, 0xAA, 0x76, + 0xA2, 0x42, 0x37, 0x54, 0x33, 0x19, 0x27, 0x38, + 0xEE, 0xE7, 0x62, 0xF6, 0xB8, 0x43, 0x15, 0xBB, + 0x34, 0x36, 0x23, 0x1E, 0x0A, 0x9B, 0x27, 0x7E, + 0xD2, 0x8A, 0xE0, 0x05, 0x07, 0x28, 0x34, 0x64, + 0x57, 0xE1, 0x34, 0x05, 0x06, 0x2D, 0xB2, 0x80, + 0x4B, 0x8D, 0xA6, 0x0B, 0xB5, 0xC7, 0x93, 0xD4, + 0xCC, 0x0E, 0x10, 0x1C, 0xBA, 0x2D, 0x91, 0x82, + 0xFD, 0x71, 0x24, 0xFF, 0x52, 0xBF, 0x4C, 0xA2, + 0x82, 0x92, 0xAC, 0x26, 0xD6, 0x78, 0x08, 0x89, + 0x53, 0x97, 0x1D, 0xBA, 0x0B, 0x6F, 0xEC, 0x2C, + 0x96, 0x59, 0x35, 0x32, 0x91, 0xC7, 0x0C, 0x5B, + 0x92, 0x45, 0xA0, 0xCA, 0x25, 0x33, 0x04, 0xAF, + 0xD3, 0xC9, 0x51, 0x02, 0xBE, 0xA6, 0x68, 0x75, + 0xC6, 0x20, 0x16, 0x80, 0xB4, 0xBD, 0xA3, 0x86, + 0x87, 0xB6, 0x48, 0xC2, 0x8E, 0xB3, 0x74, 0x78, + 0xE3, 0xBC, 0x00, 0xCA, 0x8A, 0x3C, 0xC2, 0x72, + 0x04, 0x64, 0x2B, 0x42, 0xB6, 0x8F, 0xCB, 0xE7, + 0xB2, 0x1A, 0x36, 0x6D, 0x06, 0x68, 0xA5, 0x02, + 0x9A, 0x7D, 0xEE, 0xF9, 0x4C, 0xDD, 0x6A, 0x95, + 0xD7, 0xEA, 0x89, 0x31, 0x67, 0x3B, 0xF7, 0x11, + 0x2D, 0x40, 0x42, 0x10, 0x7B, 0x1B, 0x8B, 0x97, + 0x00, 0xC9, 0x74, 0xF9, 0xC4, 0xE8, 0x3A, 0x8F, + 0xAC, 0xD8, 0x9B, 0xFE, 0x0C, 0xA3, 0xCC, 0x4C, + 0x2F, 0xCE, 0x80, 0xA0, 0x3D, 0x35, 0x76, 0xC2, + 0x22, 0xA7, 0x92, 0xB7, 0x2B, 0x1F, 0x07, 0x0A, + 0xB7, 0xF6, 0xB6, 0xF2, 0xB5, 0xCA, 0x2A, 0xF5, + 0x05, 0x4A, 0xFA, 0x70, 0xA8, 0x96, 0x99, 0x01, + 0x59, 0xB4, 0x5D, 0x10, 0x03, 0xE2, 0xA0, 0x56, + 0x48, 0x67, 0x5E, 0x59, 0x60, 0x16, 0xF1, 0xB7, + 0x1D, 0xD0, 0xF7, 0xBD, 0xA7, 0xE2, 0x09, 0x7F, + 0xC7, 0x3B, 0x3A, 0x14, 0x3D, 0x12, 0xC7, 0x26, + 0x02, 0x0A, 0xC3, 0x49, 0x58, 0xAD, 0x70, 0x62, + 0xB9, 0x2B, 0x9A, 0xBF, 0x3C, 0xA6, 0xBE, 0x5A, + 0xE2, 0x9F, 0x57, 0x13, 0x5E, 0x62, 0x5A, 0x36, + 0x79, 0x71, 0x83, 0x7E, 0x63, 0x63, 0xD1, 0x53, + 0x20, 0x94, 0xE0, 0x22, 0xA2, 0x34, 0x67, 0xCF, + 0x93, 0x2E, 0x1F, 0x89, 0xB5, 0xB0, 0x80, 0x3C, + 0x1E, 0xC9, 0x9B, 0x58, 0x5A, 0x78, 0xB5, 0x86, + 0x50, 0x96, 0x74, 0x6F, 0x32, 0x25, 0x82, 0x14, + 0xEC, 0xB3, 0x80, 0x65, 0xC9, 0x7F, 0x45, 0x5E, + 0x15, 0x5A, 0xCC, 0x2D, 0xD0, 0x05, 0xA9, 0xC7, + 0x6B, 0xED, 0x59, 0xCD, 0xA7, 0x38, 0x37, 0xD3, + 0x03, 0x50, 0x4E, 0x6C, 0x97, 0x6A, 0x60, 0x6A, + 0x2B, 0xE7, 0xBB, 0xEC, 0x59, 0x48, 0xB9, 0x1A, + 0x34, 0x9E, 0x89, 0x36, 0x68, 0x8C, 0xC0, 0x27, + 0x97, 0x54, 0xB7, 0x43, 0xAB, 0xC5, 0x86, 0x66, + 0xB1, 0x9B, 0x6C, 0x32, 0x60, 0x05, 0x1F, 0x19, + 0x20, 0x6B, 0xB9, 0x62, 0xBB, 0x66, 0x33, 0xEB, + 0x00, 0x48, 0xE3, 0x2B, 0xAA, 0xCC, 0x5B, 0x02, + 0x0D, 0x02, 0xC8, 0x6C, 0xA9, 0x77, 0x0A, 0xD4, + 0x69, 0xDB, 0x54, 0xA1, 0x06, 0xAC, 0x73, 0xA3, + 0x5B, 0x80, 0x57, 0x42, 0x2B, 0x3D, 0xB2, 0x02, + 0xC5, 0xA5, 0xB4, 0xE3, 0xD5, 0x35, 0xF0, 0xFC, + 0x99, 0x32, 0x6C, 0x4B, 0x8B, 0x7B, 0x16, 0xF1, + 0xCB, 0x5A, 0xF9, 0x68, 0x03, 0xFA, 0x8C, 0x19, + 0x5F, 0xC0, 0xBC, 0xED, 0xDA, 0xAF, 0x01, 0x2A, + 0x51, 0x72, 0x8B, 0x76, 0x48, 0x90, 0x82, 0x37, + 0x3C, 0x91, 0xE9, 0x2C, 0x87, 0xAC, 0xCA, 0x79, + 0x51, 0x60, 0x78, 0x2E, 0x3B, 0x0D, 0xD6, 0x43, + 0x54, 0x4B, 0xB9, 0x6A, 0xBC, 0x27, 0x08, 0xD4, + 0x9B, 0x75, 0x9C, 0xF0, 0x57, 0xAA, 0x22, 0x3B, + 0xAF, 0xD9, 0x6A, 0x33, 0x0B, 0xAF, 0x39, 0x81, + 0x0F, 0xE8, 0x67, 0x1B, 0x43, 0x43, 0xC2, 0x97, + 0xDA, 0x1E, 0x19, 0x69, 0xC9, 0x96, 0x21, 0x6A, + 0xB5, 0x10, 0x6D, 0xA6, 0x68, 0x94, 0x1B, 0x16, + 0x0D, 0x44, 0x77, 0x01, 0x71, 0x36, 0xCB, 0xCA, + 0x5B, 0x5A, 0x8D, 0x44, 0xC4, 0xA8, 0xB1, 0xCF, + 0x3E, 0xF7, 0x97, 0x85, 0xE5, 0xAA, 0x25, 0xC3, + 0xA1, 0xAD, 0x6C, 0x24, 0xFD, 0x14, 0x0F, 0x79, + 0x20, 0x7D, 0xE5, 0xA4, 0x99, 0xF8, 0xA1, 0x53, + 0x4F, 0xFA, 0x80, 0x4A, 0xA7, 0xB3, 0x88, 0x9C, + 0xBE, 0x25, 0xC0, 0x41, 0x47, 0x04, 0xAA, 0x57, + 0x89, 0x7F, 0x17, 0x86, 0x23, 0x64, 0xEC, 0xA5, + 0x62, 0x58, 0x00, 0x72, 0x48, 0x81, 0x39, 0x12, + 0xB8, 0x36, 0x49, 0x7F, 0x03, 0x59, 0xC2, 0xF7, + 0x23, 0x8A, 0x05, 0xD3, 0x05, 0xA0, 0xEA, 0x15, + 0x2E, 0x72, 0xB4, 0x44, 0x17, 0xA8, 0x68, 0x13, + 0x4E, 0x91, 0xB3, 0xCA, 0x79, 0x31, 0x23, 0x2F, + 0xD4, 0xC2, 0x5F, 0x8C, 0x2A, 0x49, 0x2A, 0x33, + 0x9C, 0xDC, 0x0A, 0x13, 0x89, 0x67, 0x21, 0x14, + 0x51, 0xF2, 0x56, 0x26, 0x78, 0xFA, 0x14, 0x08, + 0x0A, 0x34, 0x43, 0x6C, 0x42, 0xB0, 0x78, 0x65, + 0xAC, 0x03, 0x6A, 0x81, 0xE9, 0x7A, 0x77, 0x87, + 0xA9, 0x38, 0x02, 0x5C, 0xAF, 0x81, 0x34, 0x50, + 0x36, 0x8B, 0xED, 0x0C, 0x94, 0xB1, 0x85, 0x76, + 0x04, 0x52, 0x64, 0x05, 0xD2, 0x7A, 0x1C, 0x1A, + 0xBC, 0x81, 0xB5, 0xB6, 0xEC, 0x13, 0xC7, 0x19, + 0x30, 0xA9, 0x7D, 0x92, 0x32, 0xCF, 0x70, 0x21, + 0xEF, 0x87, 0xA4, 0xD1, 0x55, 0x32, 0x8E, 0x62, + 0xB5, 0x83, 0xA8, 0x3B, 0x4A, 0xF2, 0x1F, 0x9F, + 0x57, 0x50, 0xF8, 0x57, 0x51, 0x50, 0x42, 0x4F, + 0x63, 0xB8, 0x99, 0xD7, 0x1C, 0xAD, 0x26, 0x7C, + 0x09, 0xE4, 0x46, 0x71, 0x46, 0xE1, 0x6E, 0x9B, + 0x6C, 0x65, 0x3F, 0x00, 0x8C, 0x31, 0x13, 0x75, + 0xE2, 0xE0, 0x06, 0xD4, 0x07, 0x6A, 0x54, 0x6B, + 0x82, 0xF5, 0x31, 0x42, 0x22, 0xF7, 0xC6, 0x54, + 0x31, 0x7E, 0x79, 0xEC, 0x60, 0x35, 0xB7, 0x3F, + 0xAF, 0x49, 0x17, 0x57, 0xE6, 0x1C, 0x82, 0x83, + 0x26, 0xD5, 0x30, 0x44, 0x54, 0x1C, 0x4D, 0x45, + 0x37, 0xAB, 0xD3, 0xEA, 0x1E, 0x67, 0x99, 0x8C, + 0x33, 0x82, 0x97, 0x4C, 0xA7, 0x8A, 0xE1, 0xB1, + 0x96, 0x0E, 0x4A, 0x92, 0x26, 0xB0, 0x21, 0x9A, + 0xB0, 0x70, 0xF0, 0xD7, 0xAA, 0x66, 0xD7, 0x6F, + 0x93, 0x16, 0xAD, 0xB8, 0x0C, 0x54, 0xD6, 0x49, + 0x97, 0x71, 0xB4, 0x71, 0xE8, 0x16, 0x8D, 0x47, + 0xBC, 0xAA, 0x08, 0x32, 0x4A, 0xB6, 0xBA, 0x92, + 0xC3, 0xA7, 0x02, 0x75, 0xF2, 0x4F, 0xA4, 0xDC, + 0x10, 0xE2, 0x51, 0x63, 0x3F, 0xB9, 0x8D, 0x16, + 0x2B, 0xB5, 0x53, 0x72, 0x02, 0xC6, 0xA5, 0x53, + 0xCE, 0x78, 0x41, 0xC4, 0xD4, 0x0B, 0x87, 0x3B, + 0x85, 0xCA, 0x03, 0xA0, 0xA1, 0xE1, 0xCF, 0xAD, + 0xE6, 0xBA, 0x51, 0x80, 0xAB, 0x13, 0x23, 0xCC, + 0xBA, 0x9A, 0x3E, 0x9C, 0x53, 0xD3, 0x75, 0x75, + 0xAB, 0x1F, 0xD9, 0xE7, 0x31, 0x6C, 0x6F, 0xEE, + 0xCB, 0x0A, 0x14, 0xDF, 0x6F, 0x2D, 0xA5, 0x6C, + 0x2F, 0x56, 0xF5, 0x5A, 0x89, 0x63, 0x5C, 0xFC, + 0xFD, 0xA4, 0x79, 0x27, 0xAF, 0x1F, 0x0A, 0x47, + 0xB2, 0xD4, 0xE4, 0xE6, 0x16, 0x34, 0xB1, 0xB5, + 0x1D, 0x37, 0xA3, 0xA3, 0x07, 0xA9, 0x72, 0x42, + 0x0D, 0xE1, 0xB7, 0xA4, 0x81, 0xB8, 0x3E, 0x58, + 0x3B, 0x6A, 0xF1, 0x6F, 0x63, 0xCB, 0x00, 0xC6 + }; + static const byte c_1024[WC_ML_KEM_1024_CIPHER_TEXT_SIZE] = { + 0x0C, 0x68, 0x1B, 0x4A, 0xA8, 0x1F, 0x26, 0xAD, + 0xFB, 0x64, 0x5E, 0xC2, 0x4B, 0x37, 0x52, 0xF6, + 0xB3, 0x2C, 0x68, 0x64, 0x5A, 0xA5, 0xE7, 0xA9, + 0x99, 0xB6, 0x20, 0x36, 0xA5, 0x3D, 0xC5, 0xCB, + 0x06, 0x0A, 0x47, 0x3C, 0x08, 0xE5, 0xDA, 0x5C, + 0x0F, 0x5A, 0xF0, 0xE5, 0x17, 0x0C, 0x65, 0x97, + 0xE5, 0x0E, 0xC0, 0x80, 0x60, 0xF9, 0x9B, 0x0C, + 0x00, 0xEE, 0x9B, 0xDD, 0xAD, 0x7E, 0x7D, 0x25, + 0xA2, 0x2B, 0x22, 0x6F, 0x90, 0x14, 0x9B, 0x4C, + 0xE8, 0x87, 0xC7, 0x2F, 0xB6, 0x0A, 0xFF, 0x21, + 0x44, 0xEA, 0x2A, 0x72, 0x38, 0x3B, 0x31, 0x18, + 0xF9, 0x22, 0xD0, 0x32, 0xA1, 0x6F, 0x55, 0x42, + 0x89, 0x90, 0x2A, 0x14, 0xCF, 0x77, 0x55, 0x51, + 0x2B, 0xB1, 0x18, 0x6B, 0xAF, 0xAF, 0xFE, 0x79, + 0x4D, 0x2B, 0x6C, 0xDE, 0x90, 0x10, 0x9E, 0x65, + 0x82, 0xD3, 0x9C, 0xE0, 0xC9, 0x61, 0x97, 0x48, + 0x4B, 0x3F, 0xA0, 0x7F, 0xC9, 0x1D, 0x39, 0x4F, + 0xC8, 0xD8, 0x8E, 0x7F, 0xC4, 0xBE, 0x00, 0x2E, + 0x2D, 0xB5, 0x6F, 0x0C, 0x4D, 0x9D, 0x3F, 0xBD, + 0xA2, 0x74, 0x53, 0x6A, 0x0B, 0x86, 0xAB, 0xC6, + 0xE3, 0x9B, 0xDA, 0x52, 0x93, 0x1A, 0xEB, 0xB8, + 0xF1, 0x08, 0x4C, 0x5C, 0x1F, 0x7C, 0xB3, 0x17, + 0x77, 0x88, 0xB7, 0xF3, 0x31, 0xB7, 0x07, 0x43, + 0x61, 0x16, 0x34, 0x91, 0xD4, 0x28, 0xE7, 0x8B, + 0xCB, 0xB5, 0x7B, 0x63, 0x08, 0x41, 0xAA, 0x98, + 0x73, 0x33, 0x37, 0x7C, 0xF0, 0x95, 0x69, 0xCF, + 0xD1, 0x4C, 0xC2, 0xA1, 0x1C, 0x50, 0x1B, 0xDF, + 0x82, 0xC9, 0x3D, 0xE0, 0x5B, 0xEA, 0x20, 0x06, + 0x0D, 0xE8, 0x9C, 0x68, 0x6B, 0x82, 0x45, 0x71, + 0xCE, 0xF9, 0x4A, 0xB3, 0xFD, 0xAF, 0xA8, 0x51, + 0x26, 0x19, 0x81, 0x36, 0x69, 0xD4, 0xF5, 0x36, + 0x37, 0xFE, 0xFA, 0x4D, 0x02, 0x8C, 0xB2, 0x33, + 0xE5, 0x69, 0x30, 0xE2, 0x23, 0x5F, 0x7E, 0x60, + 0x34, 0xCA, 0x94, 0xB1, 0x43, 0xB7, 0x7A, 0xD4, + 0xA6, 0x87, 0x56, 0xE8, 0xA9, 0x18, 0x4D, 0xBA, + 0x61, 0xA8, 0x9F, 0x91, 0xED, 0xFB, 0x51, 0xA3, + 0x92, 0x11, 0x40, 0x24, 0x73, 0xA5, 0xF8, 0x91, + 0x45, 0x73, 0x6B, 0x2B, 0xF8, 0x56, 0x9C, 0x70, + 0x5B, 0x0C, 0xDB, 0x89, 0x80, 0xA4, 0x47, 0xE4, + 0xE1, 0xEA, 0xAD, 0x3E, 0x7E, 0x05, 0x78, 0xF5, + 0xF8, 0x6B, 0x8D, 0x03, 0xC9, 0xDA, 0xFE, 0x87, + 0x5E, 0x33, 0x9B, 0x44, 0x23, 0x84, 0x56, 0x16, + 0x79, 0x9E, 0xDC, 0xE0, 0x5F, 0x31, 0xB9, 0x26, + 0x64, 0xC5, 0xA5, 0x92, 0x53, 0xA6, 0x0E, 0x9D, + 0x89, 0x54, 0x8A, 0x30, 0x0C, 0x1A, 0xDB, 0x6D, + 0x19, 0x0A, 0x77, 0x5C, 0x5E, 0xE6, 0xE8, 0xA8, + 0x9B, 0x6E, 0x77, 0x9B, 0x03, 0x4C, 0x34, 0x00, + 0xA6, 0x25, 0xF4, 0xBB, 0xED, 0xBF, 0x91, 0x9C, + 0x45, 0xB2, 0xBC, 0xD1, 0x4C, 0x66, 0x92, 0x48, + 0xFC, 0x43, 0xC3, 0xEF, 0x47, 0xE1, 0x00, 0x75, + 0x89, 0x42, 0xE7, 0x5E, 0x8E, 0xD6, 0x07, 0x5A, + 0x96, 0xD7, 0x0D, 0x4E, 0xBD, 0x2B, 0x61, 0x35, + 0x82, 0x24, 0xDD, 0xA1, 0xEC, 0x4C, 0x19, 0xC2, + 0xA9, 0x28, 0x98, 0x17, 0x6F, 0xEB, 0x3C, 0x02, + 0xED, 0xCB, 0x99, 0x08, 0xBA, 0xE4, 0x9B, 0xD9, + 0x4A, 0xF0, 0x28, 0xED, 0xF8, 0xCF, 0xC2, 0xE5, + 0xF2, 0xE0, 0xBD, 0x37, 0x50, 0x06, 0x98, 0x6A, + 0xD4, 0x9E, 0x71, 0x75, 0x48, 0xE7, 0x46, 0xFE, + 0xF4, 0x9C, 0x86, 0x8B, 0xCE, 0xA2, 0x79, 0x0A, + 0xA9, 0x7E, 0x04, 0x06, 0x1B, 0x75, 0x60, 0x5C, + 0xB3, 0x9E, 0xFD, 0x46, 0x3D, 0x7B, 0x3D, 0x68, + 0xBA, 0x57, 0x44, 0x34, 0xFF, 0x7B, 0xE8, 0xE2, + 0xB8, 0x4B, 0xFC, 0x47, 0xE6, 0x7E, 0x9C, 0xD1, + 0x5F, 0x3E, 0xD4, 0x50, 0xC6, 0x1A, 0xFB, 0xA7, + 0x9A, 0x20, 0xB0, 0xB6, 0xF2, 0x87, 0x77, 0x7C, + 0x72, 0xF4, 0xAD, 0x24, 0x81, 0x74, 0xF1, 0x95, + 0x94, 0x77, 0xAA, 0x7A, 0x7C, 0x97, 0xF1, 0x22, + 0xC5, 0x04, 0x47, 0xC7, 0x48, 0x4F, 0x38, 0x2B, + 0xC4, 0x7D, 0x81, 0xFC, 0xC9, 0xC7, 0xE8, 0x92, + 0xC8, 0x83, 0x9D, 0x37, 0xB3, 0x53, 0x94, 0xB5, + 0x3E, 0x6B, 0x2B, 0x18, 0x95, 0xAB, 0xB0, 0xDE, + 0x8C, 0x98, 0xF2, 0x63, 0x3D, 0xC4, 0x41, 0x3A, + 0x8D, 0x57, 0x35, 0xDF, 0xC9, 0xA6, 0x40, 0x26, + 0xB6, 0xF3, 0x47, 0x79, 0xD6, 0xAC, 0x8A, 0xD9, + 0x9C, 0xC3, 0x1A, 0xA8, 0x98, 0xC2, 0xE7, 0x05, + 0x7F, 0x3D, 0xB8, 0xA1, 0xA8, 0xA9, 0x85, 0x27, + 0xA7, 0x9E, 0x43, 0x55, 0x2F, 0x28, 0xD1, 0x02, + 0x3E, 0x1F, 0x6A, 0x6B, 0x84, 0x85, 0x5C, 0xF5, + 0xE6, 0xDF, 0x88, 0x9B, 0xA2, 0x69, 0xF0, 0x48, + 0x94, 0x6E, 0x84, 0x02, 0x1C, 0x65, 0xC5, 0xA9, + 0x3B, 0x00, 0x7B, 0x07, 0x74, 0x1C, 0x1E, 0xE1, + 0x76, 0xC7, 0x39, 0x49, 0x11, 0x0F, 0x54, 0x8E, + 0xF4, 0x33, 0x2D, 0xCD, 0xD4, 0x91, 0xD2, 0xCE, + 0xFD, 0x02, 0x48, 0x88, 0x3F, 0x5E, 0x95, 0x25, + 0xBC, 0x91, 0xF3, 0x0A, 0xF1, 0x7C, 0xF5, 0xA9, + 0x8D, 0xD4, 0x4E, 0xF9, 0xA7, 0x1F, 0x99, 0xBB, + 0x73, 0x29, 0x85, 0xBA, 0x10, 0xA7, 0x23, 0xEF, + 0x47, 0x6F, 0xCF, 0x96, 0x6D, 0xA9, 0x45, 0x6B, + 0x24, 0x97, 0x8E, 0x33, 0x05, 0x0D, 0x0E, 0xC9, + 0x0D, 0x3C, 0xE4, 0x63, 0x78, 0x85, 0x1C, 0x9E, + 0xCF, 0xCF, 0xD3, 0x6C, 0x89, 0x5D, 0x44, 0xE9, + 0xE5, 0x06, 0x99, 0x30, 0x82, 0x52, 0x3D, 0x26, + 0x18, 0x57, 0x66, 0xB2, 0x35, 0x68, 0xCB, 0x95, + 0xE6, 0x41, 0x08, 0xF8, 0x9D, 0x10, 0x14, 0x74, + 0x7C, 0x67, 0xB6, 0xF3, 0xC8, 0x76, 0x7B, 0xE5, + 0xFC, 0x34, 0x12, 0x27, 0xDE, 0x94, 0x88, 0x86, + 0x1C, 0x5F, 0xE8, 0x11, 0x40, 0x9F, 0x80, 0x95, + 0x7D, 0x07, 0x52, 0x2A, 0x72, 0xCF, 0x6A, 0xB0, + 0x37, 0x8D, 0x0F, 0x2F, 0x28, 0xAF, 0x54, 0x81, + 0x85, 0xC3, 0x93, 0x67, 0x77, 0x99, 0x44, 0x66, + 0xA0, 0x19, 0xD3, 0x3B, 0x18, 0xA5, 0x4F, 0x38, + 0x0A, 0x33, 0x89, 0x2A, 0xB4, 0xD4, 0xBD, 0x50, + 0x7B, 0x5A, 0x61, 0xD0, 0xD3, 0x58, 0x34, 0x1A, + 0xC9, 0x2F, 0x07, 0xB4, 0x3B, 0x8F, 0x6A, 0xFC, + 0x69, 0x91, 0xBB, 0x6A, 0x1E, 0xAC, 0x23, 0xCA, + 0x6F, 0x73, 0xE9, 0x1F, 0x24, 0x64, 0xBD, 0x11, + 0x90, 0x98, 0xD7, 0xE7, 0x68, 0xE7, 0x7E, 0xCE, + 0x53, 0xFB, 0x89, 0x9B, 0xEB, 0x42, 0x26, 0x5E, + 0xCF, 0x7B, 0x27, 0x1F, 0x66, 0x54, 0x62, 0x82, + 0xD4, 0x72, 0xC3, 0x62, 0x39, 0x00, 0x6B, 0xB0, + 0xAB, 0xAB, 0xCC, 0xA2, 0x45, 0x50, 0xBA, 0xA0, + 0xA6, 0x01, 0x34, 0x8C, 0x81, 0x0F, 0xF5, 0xF9, + 0xEE, 0x50, 0x4B, 0xF7, 0x15, 0x5D, 0xEE, 0x41, + 0x41, 0xA1, 0x16, 0x05, 0xA4, 0xF3, 0x50, 0x9A, + 0xC9, 0xCA, 0xEF, 0x66, 0x24, 0xD2, 0x1D, 0xE3, + 0x32, 0xD5, 0xD5, 0x08, 0x28, 0xB5, 0x2E, 0x92, + 0x88, 0x5D, 0x3B, 0x90, 0x55, 0x3B, 0x14, 0x46, + 0x3A, 0xFB, 0x1E, 0xDC, 0xCD, 0x3B, 0x56, 0x9B, + 0x5A, 0x7F, 0x00, 0xBB, 0x66, 0x76, 0x9D, 0xAD, + 0xAC, 0x23, 0xAD, 0x8B, 0xB5, 0xD7, 0x3A, 0x6F, + 0x39, 0x0E, 0x6F, 0xC2, 0xF6, 0xF8, 0xEE, 0x3C, + 0xF4, 0x00, 0x9A, 0x5C, 0x3E, 0x1E, 0xF6, 0x0E, + 0x8F, 0x04, 0x06, 0x72, 0xD2, 0x62, 0xE6, 0x49, + 0x03, 0x79, 0xBB, 0xC7, 0x04, 0x95, 0xDF, 0xF2, + 0x37, 0xBE, 0xCD, 0x99, 0x52, 0xCD, 0x7E, 0xDE, + 0xB6, 0xD1, 0xDF, 0xC3, 0x60, 0xB3, 0xFC, 0x8B, + 0x0A, 0xF4, 0x80, 0xFF, 0xE0, 0x24, 0xAE, 0xEF, + 0xCD, 0x4E, 0x9C, 0xE9, 0x5D, 0x9B, 0x46, 0x9C, + 0x9A, 0x70, 0xE5, 0x11, 0x0D, 0xA0, 0xBA, 0xC1, + 0x24, 0xFC, 0x37, 0x41, 0xDC, 0xF4, 0x91, 0x16, + 0x26, 0x17, 0x96, 0x50, 0x4D, 0x5F, 0x49, 0x0B, + 0x43, 0x3C, 0x33, 0xC4, 0x0E, 0xDC, 0xE2, 0xB7, + 0x51, 0x51, 0xDA, 0x25, 0x6A, 0x86, 0x8A, 0x5E, + 0x35, 0xF8, 0x62, 0x26, 0xB8, 0x15, 0x1C, 0x91, + 0x93, 0x4C, 0xCC, 0x3D, 0xAC, 0xA3, 0x91, 0xDE, + 0xCC, 0xA7, 0x45, 0x37, 0x56, 0x60, 0xB6, 0xEC, + 0x41, 0xAE, 0x5D, 0x81, 0x08, 0x38, 0xCB, 0xEE, + 0xFF, 0xA1, 0x25, 0x57, 0x88, 0x44, 0x12, 0x35, + 0x7B, 0x10, 0x08, 0x36, 0x3D, 0x32, 0xB2, 0x37, + 0xAA, 0x1D, 0xD8, 0xE2, 0xD9, 0xC6, 0x36, 0x7A, + 0xDA, 0x09, 0xB2, 0xC9, 0x50, 0x60, 0x20, 0x6C, + 0xEC, 0x3E, 0xED, 0x39, 0x1F, 0xDC, 0x5D, 0xBE, + 0xF6, 0xF0, 0x8B, 0xDF, 0x04, 0x08, 0xE5, 0x85, + 0xAE, 0x5E, 0xBC, 0x8E, 0x97, 0x45, 0xD4, 0x4F, + 0xEC, 0xA9, 0x75, 0xAB, 0xBC, 0x14, 0x0B, 0xB3, + 0x7B, 0x8A, 0xDD, 0x16, 0xFC, 0xC2, 0x95, 0x69, + 0x10, 0xDC, 0x72, 0xBB, 0x3F, 0x02, 0xE9, 0xA1, + 0x30, 0xC9, 0xA8, 0x4F, 0x9C, 0xCB, 0x74, 0xD1, + 0x34, 0xCD, 0xF4, 0x0A, 0xFC, 0xBA, 0x20, 0x09, + 0xC8, 0xF0, 0x04, 0x02, 0x39, 0xBC, 0x99, 0x22, + 0x0E, 0xF6, 0x4C, 0x4D, 0xCC, 0xDE, 0x2E, 0x2E, + 0x5C, 0x9B, 0x68, 0x60, 0x2F, 0xBE, 0x8E, 0xF4, + 0xC9, 0x8B, 0x34, 0x68, 0xC7, 0x9D, 0xF4, 0xE0, + 0x78, 0x51, 0x1B, 0xFB, 0x8A, 0xA3, 0xDA, 0x09, + 0x59, 0x7A, 0x02, 0x51, 0x1E, 0x7C, 0x21, 0xA7, + 0xCF, 0x66, 0xA9, 0x38, 0x43, 0xA9, 0x48, 0x68, + 0xF1, 0x9E, 0x85, 0x52, 0x55, 0x2E, 0x3A, 0xCD, + 0xF6, 0xCB, 0x81, 0x06, 0x34, 0xDB, 0x97, 0xCB, + 0xC4, 0xBB, 0x56, 0x97, 0x09, 0xDA, 0xD4, 0x84, + 0x56, 0x45, 0x44, 0x6F, 0xA8, 0xD2, 0x89, 0xFC, + 0x59, 0x30, 0x7B, 0x80, 0x1E, 0x60, 0xCE, 0x2A, + 0x91, 0xE0, 0x6E, 0x9C, 0x22, 0xC1, 0x6E, 0x2E, + 0x59, 0xBD, 0xE3, 0x8A, 0x41, 0x6B, 0xB1, 0xB4, + 0xAC, 0x54, 0x57, 0x43, 0x8F, 0xDC, 0x5D, 0x64, + 0x45, 0x0A, 0x89, 0xEC, 0xB8, 0x32, 0xC1, 0xBB, + 0x27, 0x9D, 0xBF, 0x59, 0x33, 0x46, 0x81, 0x77, + 0x6A, 0xC0, 0x04, 0x09, 0x84, 0x6D, 0x09, 0xD6, + 0xF6, 0x87, 0x77, 0x2E, 0x34, 0x08, 0x50, 0xAB, + 0x86, 0x73, 0x38, 0x42, 0x15, 0xE1, 0x2C, 0x8D, + 0x0F, 0x53, 0x1C, 0x45, 0x1E, 0x58, 0x49, 0x3E, + 0x0E, 0xE4, 0x15, 0xAD, 0x59, 0x4D, 0xF3, 0x8C, + 0x34, 0x40, 0x8C, 0x7E, 0xD9, 0xF0, 0xC3, 0x92, + 0xF1, 0x53, 0x46, 0x04, 0xEA, 0xC3, 0xD9, 0xC1, + 0x54, 0x65, 0xA9, 0xA4, 0x66, 0x32, 0x21, 0x4B, + 0x53, 0x69, 0x90, 0xD7, 0x80, 0x78, 0xE5, 0xBD, + 0x7E, 0xAE, 0x20, 0x13, 0xFF, 0xF8, 0xFD, 0xD8, + 0xB2, 0x75, 0xC8, 0x9D, 0x97, 0xC9, 0x35, 0x3D, + 0xF3, 0xC4, 0x2A, 0x28, 0xE8, 0x14, 0xD8, 0x46, + 0x8E, 0x2B, 0x48, 0xDB, 0x09, 0x76, 0xD8, 0x8F, + 0x5E, 0xEC, 0xEF, 0xEA, 0xFB, 0x8F, 0x7F, 0x4A, + 0xF2, 0x91, 0xA7, 0x28, 0xF6, 0x24, 0x9E, 0xCF, + 0x56, 0x22, 0x33, 0x92, 0x69, 0xAA, 0x94, 0x53, + 0x29, 0xE9, 0x19, 0xF8, 0xB4, 0x41, 0xC8, 0x3D, + 0x55, 0x07, 0xF3, 0x0D, 0xF0, 0xFD, 0x2B, 0x13, + 0xFF, 0x80, 0x6F, 0x52, 0x2D, 0xAA, 0x11, 0xAF, + 0x67, 0x6A, 0x51, 0x3C, 0x14, 0x9C, 0x70, 0xF0, + 0xD6, 0xE9, 0x9A, 0x88, 0x04, 0x50, 0xA5, 0x4E, + 0x04, 0x17, 0xFE, 0x3C, 0x1E, 0x51, 0x3E, 0x9D, + 0x92, 0x0E, 0x30, 0xA8, 0xB4, 0x28, 0x91, 0x26, + 0x7A, 0x2D, 0xC5, 0x0A, 0xD8, 0x1F, 0x98, 0x04, + 0x49, 0x20, 0xC0, 0x99, 0xDF, 0x22, 0xC7, 0x39, + 0x98, 0xA2, 0x5C, 0x58, 0x1A, 0x51, 0x78, 0xC7, + 0x2B, 0x17, 0xAC, 0x87, 0x5B, 0xC6, 0x85, 0x48, + 0xA0, 0xFB, 0x0C, 0xBE, 0xE3, 0x8F, 0x05, 0x01, + 0x7B, 0x12, 0x43, 0x33, 0x43, 0xA6, 0x58, 0xF1, + 0x98, 0x0C, 0x81, 0x24, 0xEA, 0x6D, 0xD8, 0x1F + }; + static const byte kprime_1024[WC_ML_KEM_SS_SZ] = { + 0x8F, 0x33, 0x6E, 0x9C, 0x28, 0xDF, 0x34, 0x9E, + 0x03, 0x22, 0x0A, 0xF0, 0x1C, 0x42, 0x83, 0x2F, + 0xEF, 0xAB, 0x1F, 0x2A, 0x74, 0xC1, 0x6F, 0xAF, + 0x6F, 0x64, 0xAD, 0x07, 0x1C, 0x1A, 0x33, 0x94 + }; +#endif + static byte ss[WC_ML_KEM_SS_SZ]; + + key = (KyberKey*)XMALLOC(sizeof(KyberKey), NULL, DYNAMIC_TYPE_TMP_BUFFER); + ExpectNotNull(key); + if (key != NULL) { + XMEMSET(key, 0, sizeof(KyberKey)); + } + +#ifndef WOLFSSL_NO_ML_KEM_512 + ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_512, key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_KyberKey_DecodePrivateKey(key, dk_512, sizeof(dk_512)), 0); + ExpectIntEQ(wc_KyberKey_Decapsulate(key, ss, c_512, sizeof(c_512)), 0); + ExpectIntEQ(XMEMCMP(ss, kprime_512, WC_ML_KEM_SS_SZ), 0); + wc_KyberKey_Free(key); +#endif +#ifndef WOLFSSL_NO_ML_KEM_768 + ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_768, key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_KyberKey_DecodePrivateKey(key, dk_768, sizeof(dk_768)), 0); + ExpectIntEQ(wc_KyberKey_Decapsulate(key, ss, c_768, sizeof(c_768)), 0); + ExpectIntEQ(XMEMCMP(ss, kprime_768, WC_ML_KEM_SS_SZ), 0); + wc_KyberKey_Free(key); +#endif +#ifndef WOLFSSL_NO_ML_KEM_1024 + ExpectIntEQ(wc_KyberKey_Init(WC_ML_KEM_1024, key, NULL, INVALID_DEVID), 0); + ExpectIntEQ(wc_KyberKey_DecodePrivateKey(key, dk_1024, sizeof(dk_1024)), 0); + ExpectIntEQ(wc_KyberKey_Decapsulate(key, ss, c_1024, sizeof(c_1024)), 0); + ExpectIntEQ(XMEMCMP(ss, kprime_1024, WC_ML_KEM_SS_SZ), 0); + wc_KyberKey_Free(key); +#endif + + XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); +#endif + return EXPECT_RESULT(); +} + diff --git a/tests/api/test_mlkem.h b/tests/api/test_mlkem.h new file mode 100644 index 000000000..c726edbe4 --- /dev/null +++ b/tests/api/test_mlkem.h @@ -0,0 +1,29 @@ +/* test_mlkem.h + * + * Copyright (C) 2006-2025 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 2 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 + */ + +#ifndef WOLFCRYPT_TEST_MLKEM_H +#define WOLFCRYPT_TEST_MLKEM_H + +int test_wc_mlkem_make_key_kats(void); +int test_wc_mlkem_encapsulate_kats(void); +int test_wc_mlkem_decapsulate_kats(void); + +#endif /* WOLFCRYPT_TEST_MLKEM_H */ diff --git a/tests/suites.c b/tests/suites.c index e55f03c10..074a9a03f 100644 --- a/tests/suites.c +++ b/tests/suites.c @@ -168,7 +168,7 @@ static int IsValidCipherSuite(const char* line, char *suite, size_t suite_spc) return valid; } -#ifdef WOLFSSL_HAVE_KYBER +#if defined(WOLFSSL_HAVE_KYBER) static int IsKyberLevelAvailable(const char* line) { int available = 0; @@ -222,7 +222,14 @@ static int IsKyberLevelAvailable(const char* line) #endif } +#if defined(WOLFSSL_KYBER_NO_MAKE_KEY) || \ + defined(WOLFSSL_KYBER_NO_ENCAPSULATE) || \ + defined(WOLFSSL_KYBER_NO_DECAPSULATE) + (void)available; + return begin == NULL; +#else return (begin == NULL) || available; +#endif } #endif diff --git a/tests/unit.c b/tests/unit.c index aef14d9e1..432ce61fb 100644 --- a/tests/unit.c +++ b/tests/unit.c @@ -192,13 +192,20 @@ int unit_test(int argc, char** argv) else if (XSTRCMP(argv[1], "--no-api") == 0) { apiTesting = 0; } - else if (argv[1][1] >= '0' && argv[1][1] <= '9') { + else if (argv[1][0] == '-' && argv[1][1] >= '0' && argv[1][1] <= '9') { ret = ApiTest_RunIdx(atoi(argv[1] + 1)); if (ret != 0) { goto exit; } allTesting = 0; } + else if (argv[1][0] == '-' && argv[1][1] == '~') { + ret = ApiTest_RunPartName(argv[1] + 2); + if (ret != 0) { + goto exit; + } + allTesting = 0; + } else { ret = ApiTest_RunName(argv[1] + 1); if (ret != 0) { diff --git a/tests/unit.h b/tests/unit.h index 3c0ec63fd..ece943482 100644 --- a/tests/unit.h +++ b/tests/unit.h @@ -414,6 +414,7 @@ int test_wolfSSL_client_server_nofail_memio(test_ssl_cbf* client_cb, void ApiTest_PrintTestCases(void); int ApiTest_RunIdx(int idx); +int ApiTest_RunPartName(char* name); int ApiTest_RunName(char* name); int ApiTest(void); diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index e65fb0860..c96777c3e 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -3693,17 +3693,17 @@ static void* benchmarks_do(void* args) #ifdef WOLFSSL_HAVE_KYBER if (bench_all || (bench_pq_asym_algs & BENCH_KYBER)) { #ifndef WOLFSSL_NO_ML_KEM - #ifdef WOLFSSL_KYBER512 + #ifdef WOLFSSL_WC_ML_KEM_512 if (bench_all || (bench_pq_asym_algs & BENCH_KYBER512)) { bench_kyber(WC_ML_KEM_512); } #endif - #ifdef WOLFSSL_KYBER768 + #ifdef WOLFSSL_WC_ML_KEM_768 if (bench_all || (bench_pq_asym_algs & BENCH_KYBER768)) { bench_kyber(WC_ML_KEM_768); } #endif - #ifdef WOLFSSL_KYBER1024 + #ifdef WOLFSSL_WC_ML_KEM_1024 if (bench_all || (bench_pq_asym_algs & BENCH_KYBER1024)) { bench_kyber(WC_ML_KEM_1024); } @@ -9656,6 +9656,7 @@ exit: static void bench_kyber_keygen(int type, const char* name, int keySize, KyberKey* key) { +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY int ret = 0, times, count, pending = 0; double start; const char**desc = bench_desc_words[lng_index]; @@ -9693,8 +9694,16 @@ exit: #ifdef MULTI_VALUE_STATISTICS bench_multi_value_stats(max, min, sum, squareSum, runs); #endif +#else + (void)type; + (void)name; + (void)keySize; + (void)key; +#endif /* !WOLFSSL_KYBER_NO_MAKE_KEY */ } +#if !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) || \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) static void bench_kyber_encap(int type, const char* name, int keySize, KyberKey* key1, KyberKey* key2) { @@ -9730,6 +9739,7 @@ static void bench_kyber_encap(int type, const char* name, int keySize, return; } +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE /* KYBER Encapsulate */ bench_stats_start(&count, &start); do { @@ -9758,7 +9768,9 @@ exit_encap: #ifdef MULTI_VALUE_STATISTICS bench_multi_value_stats(max, min, sum, squareSum, runs); #endif +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE RESET_MULTI_VALUE_STATS_VARS(); /* KYBER Decapsulate */ @@ -9783,7 +9795,9 @@ exit_decap: #ifdef MULTI_VALUE_STATISTICS bench_multi_value_stats(max, min, sum, squareSum, runs); #endif +#endif } +#endif void bench_kyber(int type) { @@ -9808,7 +9822,7 @@ void bench_kyber(int type) #endif #ifdef WOLFSSL_WC_ML_KEM_1024 case WC_ML_KEM_1024: - name = "ML-KEM 1024 "; + name = "ML-KEM 1024"; keySize = 256; break; #endif @@ -9836,7 +9850,10 @@ void bench_kyber(int type) } bench_kyber_keygen(type, name, keySize, &key1); +#if !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) || \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) bench_kyber_encap(type, name, keySize, &key1, &key2); +#endif wc_KyberKey_Free(&key2); wc_KyberKey_Free(&key1); diff --git a/wolfcrypt/src/misc.c b/wolfcrypt/src/misc.c index 5af55ec67..2dc806852 100644 --- a/wolfcrypt/src/misc.c +++ b/wolfcrypt/src/misc.c @@ -254,6 +254,36 @@ WC_MISC_STATIC WC_INLINE void writeUnalignedWords32(byte *out, const word32 *in, #if defined(WORD64_AVAILABLE) && !defined(WOLFSSL_NO_WORD64_OPS) +#ifdef WOLFSSL_X86_64_BUILD + +WC_MISC_STATIC WC_INLINE word64 readUnalignedWord64(const byte *in) +{ + return ((word64*)in)[0]; +} + +WC_MISC_STATIC WC_INLINE word64 writeUnalignedWord64(void *out, word64 in) +{ + return ((word64*)out)[0] = in; +} + +WC_MISC_STATIC WC_INLINE void readUnalignedWords64(word64 *out, const byte *in, + size_t count) +{ + const word64 *in_word64 = (const word64 *)in; + while (count-- > 0) + *out++ = *in_word64++; +} + +WC_MISC_STATIC WC_INLINE void writeUnalignedWords64(byte *out, const word64 *in, + size_t count) +{ + word64 *out_word64 = (word64 *)out; + while (count-- > 0) + *out_word64++ = *in++; +} + +#else + WC_MISC_STATIC WC_INLINE word64 readUnalignedWord64(const byte *in) { if (((wc_ptr_t)in & (wc_ptr_t)(sizeof(word64) - 1U)) == (wc_ptr_t)0) @@ -301,6 +331,8 @@ WC_MISC_STATIC WC_INLINE void writeUnalignedWords64(byte *out, const word64 *in, } } +#endif + WC_MISC_STATIC WC_INLINE word64 rotlFixed64(word64 x, word64 y) { return (x << y) | (x >> (sizeof(y) * 8 - y)); diff --git a/wolfcrypt/src/wc_kyber.c b/wolfcrypt/src/wc_kyber.c index d09fc7422..781b93c72 100644 --- a/wolfcrypt/src/wc_kyber.c +++ b/wolfcrypt/src/wc_kyber.c @@ -19,7 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ -/* Implementation based on NIST 3rd Round submission package. +/* Implementation based on FIPS 203: + * https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.203.pdf + * + * Original implementation based on NIST 3rd Round submission package. * See link at: * https://csrc.nist.gov/Projects/post-quantum-cryptography/post-quantum-cryptography-standardization/round-3-submissions */ @@ -36,6 +39,27 @@ * Affects decapsulation too as encapsulation called. * Has a small performance trade-off. * Only usable with C implementation. + * + * WOLFSSL_KYBER_NO_MAKE_KEY Default: OFF + * Disable the make key or key generation API. + * Reduces the code size. + * Turn on when only doing encapsulation. + * + * WOLFSSL_KYBER_NO_ENCAPSULATE Default: OFF + * Disable the encapsulation API. + * Reduces the code size. + * Turn on when doing make key/decapsulation. + * + * WOLFSSL_KYBER_NO_DECAPSULATE Default: OFF + * Disable the decapsulation API. + * Reduces the code size. + * Turn on when only doing encapsulation. + * + * WOLFSSL_MLKEM_CACHE_A Default: OFF + * Stores the matrix A during key generation for use in encapsulation when + * performing decapsulation. + * KyberKey is 8KB larger but decapsulation is significantly faster. + * Turn on when performing make key and decapsualtion with same object. */ #ifdef HAVE_CONFIG_H @@ -70,6 +94,12 @@ #endif #endif +#if defined(WOLFSSL_KYBER_NO_MAKE_KEY) && \ + defined(WOLFSSL_KYBER_NO_ENCAPSULATE) && \ + defined(WOLFSSL_KYBER_NO_DECAPSULATE) + #error "No ML-KEM operations to be built." +#endif + #ifdef WOLFSSL_WC_KYBER /******************************************************************************/ @@ -164,9 +194,6 @@ int wc_KyberKey_Init(int type, KyberKey* key, void* heap, int devId) } } if (ret == 0) { - /* Zero out all data. */ - XMEMSET(key, 0, sizeof(*key)); - /* Keep type for parameters. */ key->type = type; /* Cache heap pointer. */ @@ -175,6 +202,10 @@ int wc_KyberKey_Init(int type, KyberKey* key, void* heap, int devId) /* Cache device id - not used in for this algorithm yet. */ key->devId = devId; #endif + key->flags = 0; + + /* Zero out all data. */ + XMEMSET(&key->prf, 0, sizeof(key->prf)); /* Initialize the hash algorithm object. */ ret = kyber_hash_new(&key->hash, heap, devId); @@ -205,20 +236,39 @@ void wc_KyberKey_Free(KyberKey* key) /* Dispose of hash object. */ kyber_hash_free(&key->hash); /* Ensure all private data is zeroed. */ - ForceZero(key, sizeof(*key)); + ForceZero(&key->hash, sizeof(key->hash)); + ForceZero(&key->prf, sizeof(key->prf)); + ForceZero(key->priv, sizeof(key->priv)); + ForceZero(key->z, sizeof(key->z)); } } /******************************************************************************/ +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY /** * Make a Kyber key object using a random number generator. * + * FIPS 203 - Algorithm 19: ML-KEM.KeyGen() + * Generates an encapsulation key and a corresponding decapsulation key. + * 1: d <- B_32 > d is 32 random bytes + * 2: z <- B_32 > z is 32 random bytes + * 3: if d == NULL or z == NULL then + * 4: return falsum + * > return an error indication if random bit generation failed + * 5: end if + * 6: (ek,dk) <- ML-KEM.KeyGen_Interal(d, z) + * > run internal key generation algorithm + * &: return (ek,dk) + * * @param [in, out] key Kyber key object. * @param [in] rng Random number generator. * @return 0 on success. * @return BAD_FUNC_ARG when key or rng is NULL. * @return MEMORY_E when dynamic memory allocation failed. + * @return MEMORY_E when dynamic memory allocation failed. + * @return RNG_FAILURE_E when generating random numbers failed. + * @return DRBG_CONT_FAILURE when random number generator health check fails. */ int wc_KyberKey_MakeKey(KyberKey* key, WC_RNG* rng) { @@ -231,27 +281,49 @@ int wc_KyberKey_MakeKey(KyberKey* key, WC_RNG* rng) } if (ret == 0) { - /* Generate random to with PRFs. */ - ret = wc_RNG_GenerateBlock(rng, rand, KYBER_SYM_SZ); + /* Generate random to use with PRFs. + * Step 1: d is 32 random bytes + * Step 2: z is 32 random bytes + */ + ret = wc_RNG_GenerateBlock(rng, rand, KYBER_SYM_SZ * 2); + /* Step 3: ret is not zero when d == NULL or z == NULL. */ } if (ret == 0) { - /* Generate random to with PRFs. */ - ret = wc_RNG_GenerateBlock(rng, rand + KYBER_SYM_SZ, KYBER_SYM_SZ); - } - if (ret == 0) { - /* Make a key pair from the random. */ + /* Make a key pair from the random. + * Step 6. run internal key generation algorithm + * Step 7. public and private key are stored in key + */ ret = wc_KyberKey_MakeKeyWithRandom(key, rand, sizeof(rand)); } /* Ensure seeds are zeroized. */ ForceZero((void*)rand, (word32)sizeof(rand)); + /* Step 4: return ret != 0 on falsum or internal key generation failure. */ return ret; } /** * Make a Kyber key object using random data. * + * FIPS 203 - Algorithm 16: ML-KEM.KeyGen_internal(d,z) + * Uses randomness to generate an encapsulation key and a corresponding + * decapsulation key. + * 1: (ek_PKE,dk_PKE) < K-PKE.KeyGen(d) > run key generation for K-PKE + * ... + * + * FIPS 203 - Algorithm 13: K-PKE.KeyGen(d) + * Uses randomness to generate an encryption key and a corresponding decryption + * key. + * 1: (rho,sigma) <- G(d||k)A + * > expand 32+1 bytes to two pseudorandom 32-byte seeds + * 2: N <- 0 + * 3-7: generate matrix A_hat + * 8-11: generate s + * 12-15: generate e + * 16-18: calculate t_hat from A_hat, s and e + * ... + * * @param [in, out] key Kyber key ovject. * @param [in] rand Random data. * @param [in] len Length of random data in bytes. @@ -265,8 +337,8 @@ int wc_KyberKey_MakeKeyWithRandom(KyberKey* key, const unsigned char* rand, int len) { byte buf[2 * KYBER_SYM_SZ + 1]; - byte* pubSeed = buf; - byte* noiseSeed = buf + KYBER_SYM_SZ; + byte* rho = buf; + byte* sigma = buf + KYBER_SYM_SZ; #ifndef WOLFSSL_NO_MALLOC sword16* e = NULL; #else @@ -283,8 +355,10 @@ int wc_KyberKey_MakeKeyWithRandom(KyberKey* key, const unsigned char* rand, #ifndef WOLFSSL_MLKEM_MAKEKEY_SMALL_MEM sword16* a = NULL; #endif + sword16* s = NULL; + sword16* t = NULL; int ret = 0; - int kp = 0; + int k = 0; /* Validate parameters. */ if ((key == NULL) || (rand == NULL)) { @@ -302,34 +376,34 @@ int wc_KyberKey_MakeKeyWithRandom(KyberKey* key, const unsigned char* rand, #ifndef WOLFSSL_NO_ML_KEM #ifdef WOLFSSL_WC_ML_KEM_512 case WC_ML_KEM_512: - kp = WC_ML_KEM_512_K; + k = WC_ML_KEM_512_K; break; #endif #ifdef WOLFSSL_WC_ML_KEM_768 case WC_ML_KEM_768: - kp = WC_ML_KEM_768_K; + k = WC_ML_KEM_768_K; break; #endif #ifdef WOLFSSL_WC_ML_KEM_1024 case WC_ML_KEM_1024: - kp = WC_ML_KEM_1024_K; + k = WC_ML_KEM_1024_K; break; #endif #endif #ifdef WOLFSSL_KYBER_ORIGINAL #ifdef WOLFSSL_KYBER512 case KYBER512: - kp = KYBER512_K; + k = KYBER512_K; break; #endif #ifdef WOLFSSL_KYBER768 case KYBER768: - kp = KYBER768_K; + k = KYBER768_K; break; #endif #ifdef WOLFSSL_KYBER1024 case KYBER1024: - kp = KYBER1024_K; + k = KYBER1024_K; break; #endif #endif @@ -346,16 +420,16 @@ int wc_KyberKey_MakeKeyWithRandom(KyberKey* key, const unsigned char* rand, #ifndef WOLFSSL_MLKEM_MAKEKEY_SMALL_MEM #ifndef WOLFSSL_MLKEM_CACHE_A /* e (v) | a (m) */ - e = (sword16*)XMALLOC((kp + 1) * kp * KYBER_N * sizeof(sword16), + e = (sword16*)XMALLOC((k + 1) * k * KYBER_N * sizeof(sword16), key->heap, DYNAMIC_TYPE_TMP_BUFFER); #else /* e (v) */ - e = (sword16*)XMALLOC(kp * KYBER_N * sizeof(sword16), + e = (sword16*)XMALLOC(k * KYBER_N * sizeof(sword16), key->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif #else /* e (v) */ - e = (sword16*)XMALLOC(kp * KYBER_N * sizeof(sword16), + e = (sword16*)XMALLOC(k * KYBER_N * sizeof(sword16), key->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif if (e == NULL) { @@ -370,7 +444,7 @@ int wc_KyberKey_MakeKeyWithRandom(KyberKey* key, const unsigned char* rand, a = key->a; #elif !defined(WOLFSSL_MLKEM_MAKEKEY_SMALL_MEM) /* Matrix A allocated at end of error vector. */ - a = e + (kp * KYBER_N); + a = e + (k * KYBER_N); #endif #if defined(WOLFSSL_KYBER_ORIGINAL) && !defined(WOLFSSL_NO_ML_KEM) @@ -387,49 +461,65 @@ int wc_KyberKey_MakeKeyWithRandom(KyberKey* key, const unsigned char* rand, #endif #ifndef WOLFSSL_NO_ML_KEM { - buf[0] = kp; - /* Expand 33 bytes of random to 32. */ + buf[0] = k; + /* Expand 33 bytes of random to 32. + * Alg 13: Step 1: (rho,sigma) <- G(d||k) + */ ret = KYBER_HASH_G(&key->hash, d, KYBER_SYM_SZ, buf, 1, buf); } #endif } if (ret == 0) { const byte* z = rand + KYBER_SYM_SZ; + s = key->priv; + t = key->pub; /* Cache the public seed for use in encapsulation and encoding public * key. */ - XMEMCPY(key->pubSeed, pubSeed, KYBER_SYM_SZ); + XMEMCPY(key->pubSeed, rho, KYBER_SYM_SZ); /* Cache the z value for decapsulation and encoding private key. */ XMEMCPY(key->z, z, sizeof(key->z)); /* Initialize PRF for use in noise generation. */ kyber_prf_init(&key->prf); #ifndef WOLFSSL_MLKEM_MAKEKEY_SMALL_MEM - /* Generate noise using PRF. */ - ret = kyber_get_noise(&key->prf, kp, key->priv, e, NULL, noiseSeed); + /* Generate noise using PRF. + * Alg 13: Steps 8-15: generate s and e + */ + ret = kyber_get_noise(&key->prf, k, s, e, NULL, sigma); } if (ret == 0) { - /* Generate the matrix A. */ - ret = kyber_gen_matrix(&key->prf, a, kp, pubSeed, 0); + /* Generate the matrix A. + * Alg 13: Steps 3-7 + */ + ret = kyber_gen_matrix(&key->prf, a, k, rho, 0); } if (ret == 0) { -#ifdef WOLFSSL_MLKEM_CACHE_A - key->flags |= KYBER_FLAG_A_SET; -#endif - /* Generate key pair from random data. */ - kyber_keygen(key->priv, key->pub, e, a, kp); + /* Generate key pair from random data. + * Alg 13: Steps 16-18. + */ + kyber_keygen(s, t, e, a, k); #else - /* Generate noise using PRF. */ - ret = kyber_get_noise(&key->prf, kp, key->priv, NULL, NULL, noiseSeed); + /* Generate noise using PRF. + * Alg 13: Steps 8-11: generate s + */ + ret = kyber_get_noise(&key->prf, k, s, NULL, NULL, sigma); } if (ret == 0) { - ret = kyber_keygen_seeds(key->priv, key->pub, &key->prf, e, kp, - pubSeed, noiseSeed); + /* Generate key pair from private vector and seeds. + * Alg 13: Steps 3-7: generate matrix A_hat + * Alg 13: 12-15: generate e + * Alg 13: 16-18: calculate t_hat from A_hat, s and e + */ + ret = kyber_keygen_seeds(s, t, &key->prf, e, k, rho, sigma); } if (ret == 0) { #endif /* Private and public key are set/available. */ key->flags |= KYBER_FLAG_PRIV_SET | KYBER_FLAG_PUB_SET; +#ifdef WOLFSSL_MLKEM_CACHE_A + key->flags |= KYBER_FLAG_A_SET; +#endif } #ifndef WOLFSSL_NO_MALLOC @@ -441,6 +531,7 @@ int wc_KyberKey_MakeKeyWithRandom(KyberKey* key, const unsigned char* rand, return ret; } +#endif /* !WOLFSSL_KYBER_NO_MAKE_KEY */ /******************************************************************************/ @@ -526,38 +617,59 @@ int wc_KyberKey_SharedSecretSize(KyberKey* key, word32* len) return 0; } +#if !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) || \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) /* Encapsulate data and derive secret. * - * @param [in] key Kyber key object. - * @param [in] msg Message to encapsulate. - * @param [in] coins Coins (seed) to feed to PRF. - * @param [in] ct Calculated cipher text. + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE, m, r) + * Uses the encryption key to encrypt a plaintext message using the randomness + * r. + * 1: N <- 0 + * 2: t_hat <- ByteDecode_12(ek_PKE[0:384k]) + * > run ByteDecode_12 k times to decode t_hat + * 3: rho <- ek_PKE[384k : 384K + 32] + * > extract 32-byte seed from ek_PKE + * 4-8: generate matrix A_hat + * 9-12: generate y + * 13-16: generate e_1 + * 17: generate e_2 + * 18-19: calculate u + * 20: mu <- Decompress_1(ByteDecode_1(m)) + * 21: calculate v + * 22: c_1 <- ByteEncode_d_u(Compress_d_u(u)) + * > run ByteEncode_d_u and Compress_d_u k times + * 23: c_2 <- ByteEncode_d_v(Compress_d_v(v)) + * 24: return c <- (c_1||c_2) + * + * @param [in] key Kyber key object. + * @param [in] m Random bytes. + * @param [in] r Seed to feed to PRF when generating y, e1 and e2. + * @param [out] c Calculated cipher text. * @return 0 on success. * @return NOT_COMPILED_IN when key type is not supported. */ -static int kyberkey_encapsulate(KyberKey* key, const byte* msg, byte* coins, - unsigned char* ct) +static int kyberkey_encapsulate(KyberKey* key, const byte* m, byte* r, byte* c) { int ret = 0; - sword16* at = NULL; + sword16* a = NULL; #ifndef WOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM - sword16* k = NULL; - sword16* ep = NULL; - sword16* epp = NULL; + sword16* mu = NULL; + sword16* e1 = NULL; + sword16* e2 = NULL; #endif - unsigned int kp = 0; + unsigned int k = 0; unsigned int compVecSz = 0; #ifndef WOLFSSL_NO_MALLOC - sword16* sp = NULL; + sword16* y = NULL; #else #ifndef WOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM - sword16 sp[((KYBER_MAX_K + 3) * KYBER_MAX_K + 3) * KYBER_N]; + sword16 y[((KYBER_MAX_K + 3) * KYBER_MAX_K + 3) * KYBER_N]; #else - sword16 sp[3 * KYBER_MAX_K * KYBER_N]; + sword16 y[3 * KYBER_MAX_K * KYBER_N]; #endif #endif #ifdef WOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM - sword16* bp; + sword16* u; sword16* v; #endif @@ -566,19 +678,19 @@ static int kyberkey_encapsulate(KyberKey* key, const byte* msg, byte* coins, #ifndef WOLFSSL_NO_ML_KEM #ifdef WOLFSSL_WC_ML_KEM_512 case WC_ML_KEM_512: - kp = WC_ML_KEM_512_K; + k = WC_ML_KEM_512_K; compVecSz = WC_ML_KEM_512_POLY_VEC_COMPRESSED_SZ; break; #endif #ifdef WOLFSSL_WC_ML_KEM_768 case WC_ML_KEM_768: - kp = WC_ML_KEM_768_K; + k = WC_ML_KEM_768_K; compVecSz = WC_ML_KEM_768_POLY_VEC_COMPRESSED_SZ; break; #endif #ifdef WOLFSSL_WC_ML_KEM_1024 case WC_ML_KEM_1024: - kp = WC_ML_KEM_1024_K; + k = WC_ML_KEM_1024_K; compVecSz = WC_ML_KEM_1024_POLY_VEC_COMPRESSED_SZ; break; #endif @@ -586,19 +698,19 @@ static int kyberkey_encapsulate(KyberKey* key, const byte* msg, byte* coins, #ifdef WOLFSSL_KYBER_ORIGINAL #ifdef WOLFSSL_KYBER512 case KYBER512: - kp = KYBER512_K; + k = KYBER512_K; compVecSz = KYBER512_POLY_VEC_COMPRESSED_SZ; break; #endif #ifdef WOLFSSL_KYBER768 case KYBER768: - kp = KYBER768_K; + k = KYBER768_K; compVecSz = KYBER768_POLY_VEC_COMPRESSED_SZ; break; #endif #ifdef WOLFSSL_KYBER1024 case KYBER1024: - kp = KYBER1024_K; + k = KYBER1024_K; compVecSz = KYBER1024_POLY_VEC_COMPRESSED_SZ; break; #endif @@ -613,13 +725,13 @@ static int kyberkey_encapsulate(KyberKey* key, const byte* msg, byte* coins, if (ret == 0) { /* Allocate dynamic memory for all matrices, vectors and polynomials. */ #ifndef WOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM - sp = (sword16*)XMALLOC(((kp + 3) * kp + 3) * KYBER_N * sizeof(sword16), + y = (sword16*)XMALLOC(((k + 3) * k + 3) * KYBER_N * sizeof(sword16), key->heap, DYNAMIC_TYPE_TMP_BUFFER); #else - sp = (sword16*)XMALLOC(3 * kp * KYBER_N * sizeof(sword16), key->heap, + y = (sword16*)XMALLOC(3 * k * KYBER_N * sizeof(sword16), key->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif - if (sp == NULL) { + if (y == NULL) { ret = MEMORY_E; } } @@ -628,35 +740,39 @@ static int kyberkey_encapsulate(KyberKey* key, const byte* msg, byte* coins, if (ret == 0) { #ifndef WOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM /* Assign allocated dynamic memory to pointers. - * sp (b) | at (m) | k (p) | ep (p) | epp (v) | bp (v) | v (p) */ - at = sp + KYBER_N * kp; - k = at + KYBER_N * kp * kp; - ep = k + KYBER_N; - epp = ep + KYBER_N * kp; + * y (b) | a (m) | mu (p) | e1 (p) | e2 (v) | u (v) | v (p) */ + a = y + KYBER_N * k; + mu = a + KYBER_N * k * k; + e1 = mu + KYBER_N; + e2 = e1 + KYBER_N * k; #else /* Assign allocated dynamic memory to pointers. - * sp (v) | at (v) | bp (v) */ - at = sp + KYBER_N * kp; + * y (v) | a (v) | u (v) */ + a = y + KYBER_N * k; #endif +#ifndef WOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM + /* Convert msg to a polynomial. + * Step 20: mu <- Decompress_1(ByteDecode_1(m)) */ + kyber_from_msg(mu, m); + /* Initialize the PRF for use in the noise generation. */ kyber_prf_init(&key->prf); -#ifndef WOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM - /* Convert msg to a polynomial. */ - kyber_from_msg(k, msg); - - /* Generate noise using PRF. */ - ret = kyber_get_noise(&key->prf, kp, sp, ep, epp, coins); + /* Generate noise using PRF. + * Steps 9-17: generate y, e_1, e_2 + */ + ret = kyber_get_noise(&key->prf, k, y, e1, e2, r); } #ifdef WOLFSSL_MLKEM_CACHE_A if ((ret == 0) && ((key->flags & KYBER_FLAG_A_SET) != 0)) { unsigned int i; - /* Transpose matrix. */ - for (i = 0; i < kp; i++) { + /* Transpose matrix. + * Steps 4-8: generate matrix A_hat (from original) */ + for (i = 0; i < k; i++) { unsigned int j; - for (j = 0; j < kp; j++) { - XMEMCPY(&at[(i * kp + j) * KYBER_N], - &key->a[(j * kp + i) * KYBER_N], + for (j = 0; j < k; j++) { + XMEMCPY(&a[(i * k + j) * KYBER_N], + &key->a[(j * k + i) * KYBER_N], KYBER_N * 2); } } @@ -664,115 +780,161 @@ static int kyberkey_encapsulate(KyberKey* key, const byte* msg, byte* coins, else #endif if (ret == 0) { - /* Generate the transposed matrix. */ - ret = kyber_gen_matrix(&key->prf, at, kp, key->pubSeed, 1); + /* Generate the transposed matrix. + * Step 4-8: generate matrix A_hat */ + ret = kyber_gen_matrix(&key->prf, a, k, key->pubSeed, 1); } if (ret == 0) { - sword16* bp; + sword16* u; sword16* v; /* Assign remaining allocated dynamic memory to pointers. - * sp (v) | at (m) | k (p) | ep (p) | epp (v) | bp (v) | v (p)*/ - bp = epp + KYBER_N; - v = bp + KYBER_N * kp; + * y (v) | a (m) | mu (p) | e1 (p) | r2 (v) | u (v) | v (p)*/ + u = e2 + KYBER_N; + v = u + KYBER_N * k; - /* Perform encapsulation maths. */ - kyber_encapsulate(key->pub, bp, v, at, sp, ep, epp, k, kp); + /* Perform encapsulation maths. + * Steps 18-19, 21: calculate u and v */ + kyber_encapsulate(key->pub, u, v, a, y, e1, e2, mu, k); #else - /* Generate noise using PRF. */ - ret = kyber_get_noise(&key->prf, kp, sp, NULL, NULL, coins); + /* Initialize the PRF for use in the noise generation. */ + kyber_prf_init(&key->prf); + /* Generate noise using PRF. + * Steps 9-12: generate y */ + ret = kyber_get_noise(&key->prf, k, y, NULL, NULL, r); } if (ret == 0) { /* Assign remaining allocated dynamic memory to pointers. - * sp (v) | at (v) | bp (v) */ - bp = sp + KYBER_N * kp; - v = at; + * y (v) | at (v) | u (v) */ + u = a + KYBER_N * k; + v = a; - ret = kyber_encapsulate_seeds(key->pub, &key->prf, bp, at, sp, kp, msg, - key->pubSeed, coins); + /* Perform encapsulation maths. + * Steps 13-17: generate e_1 and e_2 + * Steps 18-19, 21: calculate u and v */ + ret = kyber_encapsulate_seeds(key->pub, &key->prf, u, a, y, k, m, + key->pubSeed, r); } if (ret == 0) { #endif + byte* c1 = c; + byte* c2 = c + compVecSz; #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) - if (kp == KYBER512_K) { - kyber_vec_compress_10(ct, bp, kp); - kyber_compress_4(ct + compVecSz, v); + if (k == KYBER512_K) { + /* Step 22: c_1 <- ByteEncode_d_u(Compress_d_u(u)) */ + kyber_vec_compress_10(c1, u, k); + /* Step 23: c_2 <- ByteEncode_d_v(Compress_d_v(v)) */ + kyber_compress_4(c2, v); + /* Step 24: return c <- (c_1||c_2) */ } #endif #if defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) - if (kp == KYBER768_K) { - kyber_vec_compress_10(ct, bp, kp); - kyber_compress_4(ct + compVecSz, v); + if (k == KYBER768_K) { + /* Step 22: c_1 <- ByteEncode_d_u(Compress_d_u(u)) */ + kyber_vec_compress_10(c1, u, k); + /* Step 23: c_2 <- ByteEncode_d_v(Compress_d_v(v)) */ + kyber_compress_4(c2, v); + /* Step 24: return c <- (c_1||c_2) */ } #endif #if defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) - if (kp == KYBER1024_K) { - kyber_vec_compress_11(ct, bp); - kyber_compress_5(ct + compVecSz, v); + if (k == KYBER1024_K) { + /* Step 22: c_1 <- ByteEncode_d_u(Compress_d_u(u)) */ + kyber_vec_compress_11(c1, u); + /* Step 23: c_2 <- ByteEncode_d_v(Compress_d_v(v)) */ + kyber_compress_5(c2, v); + /* Step 24: return c <- (c_1||c_2) */ } #endif } #ifndef WOLFSSL_NO_MALLOC /* Dispose of dynamic memory allocated in function. */ - XFREE(sp, key->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(y, key->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; } +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE /** * Encapsulate with random number generator and derive secret. * + * FIPS 203, Algorithm 20: ML-KEM.Encaps(ek) + * Uses the encapsulation key to generate a shared secret key and an associated + * ciphertext. + * 1: m <- B_32 > m is 32 random bytes + * 2: if m == NULL then + * 3: return falsum + * 4: end if + * 5: (K,c) <- ML-KEM.Encaps_internal(ek,m) + * > run internal encapsulation algorithm + * 6: return (K,c) + * * @param [in] key Kyber key object. - * @param [out] ct Cipher text. - * @param [out] ss Shared secret generated. + * @param [out] c Cipher text. + * @param [out] k Shared secret generated. * @param [in] rng Random number generator. * @return 0 on success. * @return BAD_FUNC_ARG when key, ct, ss or RNG is NULL. * @return NOT_COMPILED_IN when key type is not supported. * @return MEMORY_E when dynamic memory allocation failed. */ -int wc_KyberKey_Encapsulate(KyberKey* key, unsigned char* ct, unsigned char* ss, +int wc_KyberKey_Encapsulate(KyberKey* key, unsigned char* c, unsigned char* k, WC_RNG* rng) { int ret = 0; - unsigned char rand[KYBER_ENC_RAND_SZ]; + unsigned char m[KYBER_ENC_RAND_SZ]; /* Validate parameters. */ - if ((key == NULL) || (ct == NULL) || (ss == NULL) || (rng == NULL)) { + if ((key == NULL) || (c == NULL) || (k == NULL) || (rng == NULL)) { ret = BAD_FUNC_ARG; } if (ret == 0) { - /* Generate seed for use with PRFs. */ - ret = wc_RNG_GenerateBlock(rng, rand, sizeof(rand)); + /* Generate seed for use with PRFs. + * Step 1: m is 32 random bytes + */ + ret = wc_RNG_GenerateBlock(rng, m, sizeof(m)); + /* Step 2: ret is not zero when m == NULL. */ } if (ret == 0) { - /* Encapsulate with the random. */ - ret = wc_KyberKey_EncapsulateWithRandom(key, ct, ss, rand, - sizeof(rand)); + /* Encapsulate with the random. + * Step 5: run internal encapsulation algorithm + */ + ret = wc_KyberKey_EncapsulateWithRandom(key, c, k, m, sizeof(m)); } + /* Step 3: return ret != 0 on falsum or internal key generation failure. */ return ret; } /** * Encapsulate with random data and derive secret. * - * @param [out] ct Cipher text. - * @param [out] ss Shared secret generated. - * @param [in] rand Random data. - * @param [in] len Random data. + * FIPS 203, Algorithm 17: ML-KEM.Encaps_internal(ek, m) + * Uses the encapsulation key and randomness to generate a key and an associated + * ciphertext. + * Step 1: (K,r) <- G(m||H(ek)) + * > derive shared secret key K and randomness r + * Step 2: c <- K-PPKE.Encrypt(ek, m, r) + * > encrypt m using K-PKE with randomness r + * Step 3: return (K,c) + * + * @param [out] c Cipher text. + * @param [out] k Shared secret generated. + * @param [in] m Random bytes. + * @param [in] len Length of random bytes. * @return 0 on success. - * @return BAD_FUNC_ARG when key, ct, ss or RNG is NULL. + * @return BAD_FUNC_ARG when key, c, k or RNG is NULL. * @return BUFFER_E when len is not KYBER_ENC_RAND_SZ. * @return NOT_COMPILED_IN when key type is not supported. * @return MEMORY_E when dynamic memory allocation failed. */ -int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, - unsigned char* ss, const unsigned char* rand, int len) +int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* c, + unsigned char* k, const unsigned char* m, int len) { #ifdef WOLFSSL_KYBER_ORIGINAL byte msg[KYBER_SYM_SZ]; @@ -780,11 +942,11 @@ int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, byte kr[2 * KYBER_SYM_SZ + 1]; int ret = 0; #ifdef WOLFSSL_KYBER_ORIGINAL - unsigned int ctSz = 0; + unsigned int cSz = 0; #endif /* Validate parameters. */ - if ((key == NULL) || (ct == NULL) || (ss == NULL) || (rand == NULL)) { + if ((key == NULL) || (c == NULL) || (k == NULL) || (m == NULL)) { ret = BAD_FUNC_ARG; } if ((ret == 0) && (len != KYBER_ENC_RAND_SZ)) { @@ -809,17 +971,17 @@ int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, #endif #ifdef WOLFSSL_KYBER512 case KYBER512: - ctSz = KYBER512_CIPHER_TEXT_SIZE; + cSz = KYBER512_CIPHER_TEXT_SIZE; break; #endif #ifdef WOLFSSL_KYBER768 case KYBER768: - ctSz = KYBER768_CIPHER_TEXT_SIZE; + cSz = KYBER768_CIPHER_TEXT_SIZE; break; #endif #ifdef WOLFSSL_KYBER1024 case KYBER1024: - ctSz = KYBER1024_CIPHER_TEXT_SIZE; + cSz = KYBER1024_CIPHER_TEXT_SIZE; break; #endif default: @@ -830,7 +992,10 @@ int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, } #endif - /* If public hash (h) is not stored against key, calculate it. */ + /* If public hash (h) is not stored against key, calculate it + * (fields set explicitly instead of using decode). + * Step 1: ... H(ek)... + */ if ((ret == 0) && ((key->flags & KYBER_FLAG_H_SET) == 0)) { #ifndef WOLFSSL_NO_MALLOC byte* pubKey = NULL; @@ -873,7 +1038,7 @@ int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, #endif { /* Hash random to anonymize as seed data. */ - ret = KYBER_HASH_H(&key->hash, rand, KYBER_SYM_SZ, msg); + ret = KYBER_HASH_H(&key->hash, m, KYBER_SYM_SZ, msg); } } #endif @@ -893,20 +1058,21 @@ int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, #endif #ifndef WOLFSSL_NO_ML_KEM { - ret = KYBER_HASH_G(&key->hash, rand, KYBER_SYM_SZ, key->h, + /* Step 1: (K,r) <- G(m||H(ek)) */ + ret = KYBER_HASH_G(&key->hash, m, KYBER_SYM_SZ, key->h, KYBER_SYM_SZ, kr); } #endif } if (ret == 0) { - /* Encapsulate the message using the key and the seed (coins). */ + /* Encapsulate the message using the key and the seed. */ #if defined(WOLFSSL_KYBER_ORIGINAL) && !defined(WOLFSSL_NO_ML_KEM) if (key->type & KYBER_ORIGINAL) #endif #ifdef WOLFSSL_KYBER_ORIGINAL { - ret = kyberkey_encapsulate(key, msg, kr + KYBER_SYM_SZ, ct); + ret = kyberkey_encapsulate(key, msg, kr + KYBER_SYM_SZ, c); } #endif #if defined(WOLFSSL_KYBER_ORIGINAL) && !defined(WOLFSSL_NO_ML_KEM) @@ -914,7 +1080,8 @@ int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, #endif #ifndef WOLFSSL_NO_ML_KEM { - ret = kyberkey_encapsulate(key, rand, kr + KYBER_SYM_SZ, ct); + /* Step 2: c <- K-PKE.Encrypt(ek,m,r) */ + ret = kyberkey_encapsulate(key, m, kr + KYBER_SYM_SZ, c); } #endif } @@ -926,11 +1093,11 @@ int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, { if (ret == 0) { /* Hash the cipher text after the seed. */ - ret = KYBER_HASH_H(&key->hash, ct, ctSz, kr + KYBER_SYM_SZ); + ret = KYBER_HASH_H(&key->hash, c, cSz, kr + KYBER_SYM_SZ); } if (ret == 0) { /* Derive the secret from the seed and hash of cipher text. */ - ret = KYBER_KDF(kr, 2 * KYBER_SYM_SZ, ss, KYBER_SS_SZ); + ret = KYBER_KDF(kr, 2 * KYBER_SYM_SZ, k, KYBER_SS_SZ); } } #endif @@ -940,37 +1107,51 @@ int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, #ifndef WOLFSSL_NO_ML_KEM { if (ret == 0) { - XMEMCPY(ss, kr, KYBER_SS_SZ); + /* return (K,c) */ + XMEMCPY(k, kr, KYBER_SS_SZ); } } #endif return ret; } +#endif /* !WOLFSSL_KYBER_NO_ENCAPSULATE */ /******************************************************************************/ +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE /* Decapsulate cipher text to the message using key. * - * @param [in] Kyber key object. - * @param [out] Message than was encapsulated. - * @param [in] Cipher text. + * FIPS 203, Algorithm 15: K-PKE.Decrypt(dk_PKE,c) + * Uses the decryption key to decrypt a ciphertext. + * 1: c1 <- c[0 : 32.d_u.k] + * 2: c2 <= c[32.d_u.k : 32(d_u.k + d_v)] + * 3: u' <= Decompress_d_u(ByteDecode_d_u(c1)) + * 4: v' <= Decompress_d_v(ByteDecode_d_v(c2)) + * ... + * 6: w <- v' - InvNTT(s_hat_trans o NTT(u')) + * 7: m <- ByteEncode_1(Compress_1(w)) + * 8: return m + * + * @param [in] key Kyber key object. + * @param [out] m Message than was encapsulated. + * @param [in] c Cipher text. * @return 0 on success. * @return NOT_COMPILED_IN when key type is not supported. * @return MEMORY_E when dynamic memory allocation failed. */ -static KYBER_NOINLINE int kyberkey_decapsulate(KyberKey* key, - unsigned char* msg, const unsigned char* ct) +static KYBER_NOINLINE int kyberkey_decapsulate(KyberKey* key, byte* m, + const byte* c) { int ret = 0; sword16* v; - sword16* mp; - unsigned int kp = 0; + sword16* w; + unsigned int k = 0; unsigned int compVecSz; #if !defined(USE_INTEL_SPEEDUP) && !defined(WOLFSSL_NO_MALLOC) - sword16* bp = NULL; + sword16* u = NULL; #else - sword16 bp[(KYBER_MAX_K + 1) * KYBER_N]; + sword16 u[(KYBER_MAX_K + 1) * KYBER_N]; #endif /* Establish parameters based on key type. */ @@ -978,19 +1159,19 @@ static KYBER_NOINLINE int kyberkey_decapsulate(KyberKey* key, #ifndef WOLFSSL_NO_ML_KEM #ifdef WOLFSSL_WC_ML_KEM_512 case WC_ML_KEM_512: - kp = WC_ML_KEM_512_K; + k = WC_ML_KEM_512_K; compVecSz = WC_ML_KEM_512_POLY_VEC_COMPRESSED_SZ; break; #endif #ifdef WOLFSSL_WC_ML_KEM_768 case WC_ML_KEM_768: - kp = WC_ML_KEM_768_K; + k = WC_ML_KEM_768_K; compVecSz = WC_ML_KEM_768_POLY_VEC_COMPRESSED_SZ; break; #endif #ifdef WOLFSSL_WC_ML_KEM_1024 case WC_ML_KEM_1024: - kp = WC_ML_KEM_1024_K; + k = WC_ML_KEM_1024_K; compVecSz = WC_ML_KEM_1024_POLY_VEC_COMPRESSED_SZ; break; #endif @@ -998,19 +1179,19 @@ static KYBER_NOINLINE int kyberkey_decapsulate(KyberKey* key, #ifdef WOLFSSL_KYBER_ORIGINAL #ifdef WOLFSSL_KYBER512 case KYBER512: - kp = KYBER512_K; + k = KYBER512_K; compVecSz = KYBER512_POLY_VEC_COMPRESSED_SZ; break; #endif #ifdef WOLFSSL_KYBER768 case KYBER768: - kp = KYBER768_K; + k = KYBER768_K; compVecSz = KYBER768_POLY_VEC_COMPRESSED_SZ; break; #endif #ifdef WOLFSSL_KYBER1024 case KYBER1024: - kp = KYBER1024_K; + k = KYBER1024_K; compVecSz = KYBER1024_POLY_VEC_COMPRESSED_SZ; break; #endif @@ -1024,48 +1205,62 @@ static KYBER_NOINLINE int kyberkey_decapsulate(KyberKey* key, #if !defined(USE_INTEL_SPEEDUP) && !defined(WOLFSSL_NO_MALLOC) if (ret == 0) { /* Allocate dynamic memory for a vector and a polynomial. */ - bp = (sword16*)XMALLOC((kp + 1) * KYBER_N * sizeof(sword16), key->heap, + u = (sword16*)XMALLOC((k + 1) * KYBER_N * sizeof(sword16), key->heap, DYNAMIC_TYPE_TMP_BUFFER); - if (bp == NULL) { + if (u == NULL) { ret = MEMORY_E; } } #endif if (ret == 0) { + /* Step 1: c1 <- c[0 : 32.d_u.k] */ + const byte* c1 = c; + /* Step 2: c2 <= c[32.d_u.k : 32(d_u.k + d_v)] */ + const byte* c2 = c + compVecSz; + /* Assign allocated dynamic memory to pointers. - * bp (v) | v (p) */ - v = bp + kp * KYBER_N; - mp = bp; + * u (v) | v (p) */ + v = u + k * KYBER_N; + w = u; #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) - if (kp == KYBER512_K) { - kyber_vec_decompress_10(bp, ct, kp); - kyber_decompress_4(v, ct + compVecSz); + if (k == KYBER512_K) { + /* Step 3: u' <= Decompress_d_u(ByteDecode_d_u(c1)) */ + kyber_vec_decompress_10(u, c1, k); + /* Step 4: v' <= Decompress_d_v(ByteDecode_d_v(c2)) */ + kyber_decompress_4(v, c2); } #endif #if defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) - if (kp == KYBER768_K) { - kyber_vec_decompress_10(bp, ct, kp); - kyber_decompress_4(v, ct + compVecSz); + if (k == KYBER768_K) { + /* Step 3: u' <= Decompress_d_u(ByteDecode_d_u(c1)) */ + kyber_vec_decompress_10(u, c1, k); + /* Step 4: v' <= Decompress_d_v(ByteDecode_d_v(c2)) */ + kyber_decompress_4(v, c2); } #endif #if defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) - if (kp == KYBER1024_K) { - kyber_vec_decompress_11(bp, ct); - kyber_decompress_5(v, ct + compVecSz); + if (k == KYBER1024_K) { + /* Step 3: u' <= Decompress_d_u(ByteDecode_d_u(c1)) */ + kyber_vec_decompress_11(u, c1); + /* Step 4: v' <= Decompress_d_v(ByteDecode_d_v(c2)) */ + kyber_decompress_5(v, c2); } #endif - /* Decapsulate the cipher text into polynomial. */ - kyber_decapsulate(key->priv, mp, bp, v, kp); + /* Decapsulate the cipher text into polynomial. + * Step 6: w <- v' - InvNTT(s_hat_trans o NTT(u')) */ + kyber_decapsulate(key->priv, w, u, v, k); - /* Convert the polynomial into a array of bytes (message). */ - kyber_to_msg(msg, mp); + /* Convert the polynomial into a array of bytes (message). + * Step 7: m <- ByteEncode_1(Compress_1(w)) */ + kyber_to_msg(m, w); + /* Step 8: return m */ } #if !defined(USE_INTEL_SPEEDUP) && !defined(WOLFSSL_NO_MALLOC) /* Dispose of dynamically memory allocated in function. */ - XFREE(bp, key->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(u, key->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; @@ -1109,6 +1304,34 @@ static int kyber_derive_secret(const byte* z, const byte* ct, word32 ctSz, * * Validates the cipher text by encapsulating and comparing with data passed in. * + * FIPS 203, Algorithm 21: ML-KEM.Decaps(dk, c) + * Uses the decapsulation key to produce a shared secret key from a ciphertext. + * 1: K' <- ML-KEM.Decaps_internal(dk,c) + * > run internal decapsulation algorithm + * 2: return K' + * + * FIPS 203, Algorithm 18: ML-KEM.Decaps_internal(dk, c) + * Uses the decapsulation key to produce a shared secret key from a ciphertext. + * ... + * 1: dk_PKE <- dk[0 : 384k] + * > extract (from KEM decaps key) the PKE decryption key + * 2: ek_PKE <- dk[384k : 768l + 32] + * > extract PKE encryption key + * 3: h <- dk[768K + 32 : 768k + 64] + * > extract hash of PKE encryption key + * 4: z <- dk[768K + 64 : 768k + 96] + * > extract implicit rejection value + * 5: m' <- K-PKE.Decrypt(dk_PKE, c) > decrypt ciphertext + * 6: (K', r') <- G(m'||h) + * 7: K_bar <- J(z||c) + * 8: c' <- K-PKE.Encrypt(ek_PKE, m', r') + * > re-encrypt using the derived randomness r' + * 9: if c != c' then + * 10: K' <= K_bar + * > if ciphertexts do not match, "implicitly reject" + * 11: end if + * 12: return K' + * * @param [in] key Kyber key object. * @param [out] ss Shared secret. * @param [in] ct Cipher text. @@ -1240,7 +1463,7 @@ int wc_KyberKey_Decapsulate(KyberKey* key, unsigned char* ss, { ret = kyber_derive_secret(key->z, ct, ctSz, msg); if (ret == 0) { - /* Change seed to z on comparison failure. */ + /* Set secret to kr or fake secret on comparison failure. */ for (i = 0; i < KYBER_SYM_SZ; i++) { ss[i] = kr[i] ^ ((kr[i] ^ msg[i]) & fail); } @@ -1258,14 +1481,61 @@ int wc_KyberKey_Decapsulate(KyberKey* key, unsigned char* ss, return ret; } +#endif /* WOLFSSL_KYBER_NO_DECAPSULATE */ /******************************************************************************/ +/** + * Get the public key and public seed from bytes. + * + * FIPS 203, Algorithm 14 K-PKE.Encrypt(ek_PKE, m, r) + * ... + * 2: t <- ByteDecode_12(ek_PKE[0 : 384k]) + * 3: rho <- ek_PKE[384k : 384k + 32] + * ... + * + * @param [out] pub Public key - vector. + * @param [out] pubSeed Public seed. + * @param [in] p Public key data. + * @param [in] k Number of polynomials in vector. + */ +static void kyberkey_decode_public(sword16* pub, byte* pubSeed, const byte* p, + unsigned int k) +{ + unsigned int i; + + /* Decode public key that is vector of polynomials. + * Step 2: t <- ByteDecode_12(ek_PKE[0 : 384k]) */ + kyber_from_bytes(pub, p, k); + p += k * KYBER_POLY_SIZE; + + /* Read public key seed. + * Step 3: rho <- ek_PKE[384k : 384k + 32] */ + for (i = 0; i < KYBER_SYM_SZ; i++) { + pubSeed[i] = p[i]; + } +} + /** * Decode the private key. * * Private Vector | Public Key | Public Hash | Randomizer * + * FIPS 203, Algorithm 18: ML-KEM.Decaps_internal(dk, c) + * 1: dk_PKE <- dk[0 : 384k] + * > extract (from KEM decaps key) the PKE decryption key + * 2: ek_PKE <- dk[384k : 768l + 32] + * > extract PKE encryption key + * 3: h <- dk[768K + 32 : 768k + 64] + * > extract hash of PKE encryption key + * 4: z <- dk[768K + 64 : 768k + 96] + * > extract implicit rejection value + * + * FIPS 203, Algorithm 15: K-PKE.Decrypt(dk_PKE, c) + * ... + * 5: s_hat <= ByteDecode_12(dk_PKE) + * ... + * * @param [in, out] key Kyber key object. * @param [in] in Buffer holding encoded key. * @param [in] len Length of data in buffer. @@ -1349,22 +1619,23 @@ int wc_KyberKey_DecodePrivateKey(KyberKey* key, const unsigned char* in, } if (ret == 0) { - /* Decode private key that is vector of polynomials. */ + /* Decode private key that is vector of polynomials. + * Alg 18 Step 1: dk_PKE <- dk[0 : 384k] + * Alg 15 Step 5: s_hat <- ByteDecode_12(dk_PKE) */ kyber_from_bytes(key->priv, p, k); p += k * KYBER_POLY_SIZE; /* Decode the public key that is after the private key. */ - ret = wc_KyberKey_DecodePublicKey(key, p, pubLen); - } - if (ret == 0) { - /* Skip over public key. */ + kyberkey_decode_public(key->pub, key->pubSeed, p, k); p += pubLen; + /* Copy the hash of the encoded public key that is after public key. */ XMEMCPY(key->h, p, sizeof(key->h)); p += KYBER_SYM_SZ; /* Copy the z (randomizer) that is after hash. */ XMEMCPY(key->z, p, sizeof(key->z)); - /* Set that private and public keys, and public hash are set. */ + + /* Set flags */ key->flags |= KYBER_FLAG_H_SET | KYBER_FLAG_BOTH_SET; } @@ -1451,16 +1722,8 @@ int wc_KyberKey_DecodePublicKey(KyberKey* key, const unsigned char* in, } if (ret == 0) { - unsigned int i; + kyberkey_decode_public(key->pub, key->pubSeed, p, k); - /* Decode public key that is vector of polynomials. */ - kyber_from_bytes(key->pub, p, k); - p += k * KYBER_POLY_SIZE; - - /* Read public key seed. */ - for (i = 0; i < KYBER_SYM_SZ; i++) { - key->pubSeed[i] = p[i]; - } /* Calculate public hash. */ ret = KYBER_HASH_H(&key->hash, in, len, key->h); } @@ -1609,6 +1872,15 @@ int wc_KyberKey_PublicKeySize(KyberKey* key, word32* len) * * Private Vector | Public Key | Public Hash | Randomizer * + * FIPS 203, Algorithm 16: ML-KEM.KeyGen_internal(d,z) + * ... + * 3: dk <- (dk_PKE||ek||H(ek)||z) + * ... + * FIPS 203, Algorithm 13: K-PKE.KeyGen(d) + * ... + * 20: dk_PKE <- ByteEncode_12(s_hat) + * ... + * * @param [in] key Kyber key object. * @param [out] out Buffer to hold data. * @param [in] len Size of buffer in bytes. @@ -1723,6 +1995,15 @@ int wc_KyberKey_EncodePrivateKey(KyberKey* key, unsigned char* out, word32 len) * * Public vector | Public Seed * + * FIPS 203, Algorithm 16: ML-KEM.KeyGen_internal(d,z) + * ... + * 2: ek <- ek_PKE + * ... + * FIPS 203, Algorithm 13: K-PKE.KeyGen(d) + * ... + * 19: ek_PKE <- ByteEncode_12(t_hat)||rho + * ... + * * @param [in] key Kyber key object. * @param [out] out Buffer to hold data. * @param [in] len Size of buffer in bytes. diff --git a/wolfcrypt/src/wc_kyber_asm.S b/wolfcrypt/src/wc_kyber_asm.S index 32b14acd8..b51c3d5d1 100644 --- a/wolfcrypt/src/wc_kyber_asm.S +++ b/wolfcrypt/src/wc_kyber_asm.S @@ -6086,6 +6086,14 @@ L_pointwise_acc_mont_end_encap_bp: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 + vpmulhw %ymm15, %ymm8, %ymm0 + vpmulhw %ymm15, %ymm9, %ymm2 + vpsraw $10, %ymm0, %ymm0 + vpsraw $10, %ymm2, %ymm2 + vpmullw %ymm14, %ymm0, %ymm0 + vpmullw %ymm14, %ymm2, %ymm2 + vpsubw %ymm0, %ymm8, %ymm8 + vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -6107,14 +6115,6 @@ L_pointwise_acc_mont_end_encap_bp: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 - vpmulhw %ymm15, %ymm8, %ymm0 - vpmulhw %ymm15, %ymm9, %ymm2 - vpsraw $10, %ymm0, %ymm0 - vpsraw $10, %ymm2, %ymm2 - vpmullw %ymm14, %ymm0, %ymm0 - vpmullw %ymm14, %ymm2, %ymm2 - vpsubw %ymm0, %ymm8, %ymm8 - vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -6136,6 +6136,14 @@ L_pointwise_acc_mont_end_encap_bp: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 + vpmulhw %ymm15, %ymm8, %ymm0 + vpmulhw %ymm15, %ymm9, %ymm2 + vpsraw $10, %ymm0, %ymm0 + vpsraw $10, %ymm2, %ymm2 + vpmullw %ymm14, %ymm0, %ymm0 + vpmullw %ymm14, %ymm2, %ymm2 + vpsubw %ymm0, %ymm8, %ymm8 + vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -6209,6 +6217,14 @@ L_pointwise_acc_mont_end_encap_bp: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm4 + vpmulhw %ymm15, %ymm9, %ymm6 + vpsraw $10, %ymm4, %ymm4 + vpsraw $10, %ymm6, %ymm6 + vpmullw %ymm14, %ymm4, %ymm4 + vpmullw %ymm14, %ymm6, %ymm6 + vpsubw %ymm4, %ymm8, %ymm8 + vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -6230,14 +6246,6 @@ L_pointwise_acc_mont_end_encap_bp: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 - vpmulhw %ymm15, %ymm8, %ymm4 - vpmulhw %ymm15, %ymm9, %ymm6 - vpsraw $10, %ymm4, %ymm4 - vpsraw $10, %ymm6, %ymm6 - vpmullw %ymm14, %ymm4, %ymm4 - vpmullw %ymm14, %ymm6, %ymm6 - vpsubw %ymm4, %ymm8, %ymm8 - vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -6259,6 +6267,14 @@ L_pointwise_acc_mont_end_encap_bp: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm4 + vpmulhw %ymm15, %ymm9, %ymm6 + vpsraw $10, %ymm4, %ymm4 + vpsraw $10, %ymm6, %ymm6 + vpmullw %ymm14, %ymm4, %ymm4 + vpmullw %ymm14, %ymm6, %ymm6 + vpsubw %ymm4, %ymm8, %ymm8 + vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -6375,6 +6391,14 @@ L_pointwise_acc_mont_end_encap_bp: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 + vpmulhw %ymm15, %ymm8, %ymm0 + vpmulhw %ymm15, %ymm9, %ymm2 + vpsraw $10, %ymm0, %ymm0 + vpsraw $10, %ymm2, %ymm2 + vpmullw %ymm14, %ymm0, %ymm0 + vpmullw %ymm14, %ymm2, %ymm2 + vpsubw %ymm0, %ymm8, %ymm8 + vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -6396,14 +6420,6 @@ L_pointwise_acc_mont_end_encap_bp: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 - vpmulhw %ymm15, %ymm8, %ymm0 - vpmulhw %ymm15, %ymm9, %ymm2 - vpsraw $10, %ymm0, %ymm0 - vpsraw $10, %ymm2, %ymm2 - vpmullw %ymm14, %ymm0, %ymm0 - vpmullw %ymm14, %ymm2, %ymm2 - vpsubw %ymm0, %ymm8, %ymm8 - vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -6425,6 +6441,14 @@ L_pointwise_acc_mont_end_encap_bp: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 + vpmulhw %ymm15, %ymm8, %ymm0 + vpmulhw %ymm15, %ymm9, %ymm2 + vpsraw $10, %ymm0, %ymm0 + vpsraw $10, %ymm2, %ymm2 + vpmullw %ymm14, %ymm0, %ymm0 + vpmullw %ymm14, %ymm2, %ymm2 + vpsubw %ymm0, %ymm8, %ymm8 + vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -6498,6 +6522,14 @@ L_pointwise_acc_mont_end_encap_bp: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm4 + vpmulhw %ymm15, %ymm9, %ymm6 + vpsraw $10, %ymm4, %ymm4 + vpsraw $10, %ymm6, %ymm6 + vpmullw %ymm14, %ymm4, %ymm4 + vpmullw %ymm14, %ymm6, %ymm6 + vpsubw %ymm4, %ymm8, %ymm8 + vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -6519,14 +6551,6 @@ L_pointwise_acc_mont_end_encap_bp: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 - vpmulhw %ymm15, %ymm8, %ymm4 - vpmulhw %ymm15, %ymm9, %ymm6 - vpsraw $10, %ymm4, %ymm4 - vpsraw $10, %ymm6, %ymm6 - vpmullw %ymm14, %ymm4, %ymm4 - vpmullw %ymm14, %ymm6, %ymm6 - vpsubw %ymm4, %ymm8, %ymm8 - vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -6548,6 +6572,14 @@ L_pointwise_acc_mont_end_encap_bp: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm4 + vpmulhw %ymm15, %ymm9, %ymm6 + vpsraw $10, %ymm4, %ymm4 + vpsraw $10, %ymm6, %ymm6 + vpmullw %ymm14, %ymm4, %ymm4 + vpmullw %ymm14, %ymm6, %ymm6 + vpsubw %ymm4, %ymm8, %ymm8 + vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -6652,18 +6684,26 @@ L_pointwise_acc_mont_end_encap_bp: vpmulhw %ymm14, %ymm5, %ymm5 vpsubw %ymm4, %ymm8, %ymm4 vpsubw %ymm5, %ymm9, %ymm5 - vpsubw %ymm6, %ymm2, %ymm8 - vpsubw %ymm7, %ymm3, %ymm9 - vpaddw %ymm6, %ymm2, %ymm2 - vpaddw %ymm7, %ymm3, %ymm3 - vpmullw %ymm12, %ymm8, %ymm6 - vpmullw %ymm12, %ymm9, %ymm7 - vpmulhw %ymm10, %ymm8, %ymm8 - vpmulhw %ymm10, %ymm9, %ymm9 - vpmulhw %ymm14, %ymm6, %ymm6 - vpmulhw %ymm14, %ymm7, %ymm7 - vpsubw %ymm6, %ymm8, %ymm6 - vpsubw %ymm7, %ymm9, %ymm7 + vpaddw %ymm6, %ymm2, %ymm8 + vpaddw %ymm7, %ymm3, %ymm9 + vpsubw %ymm6, %ymm2, %ymm6 + vpsubw %ymm7, %ymm3, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm2 + vpmulhw %ymm15, %ymm9, %ymm3 + vpsraw $10, %ymm2, %ymm2 + vpsraw $10, %ymm3, %ymm3 + vpmullw %ymm14, %ymm2, %ymm2 + vpmullw %ymm14, %ymm3, %ymm3 + vpsubw %ymm2, %ymm8, %ymm2 + vpsubw %ymm3, %ymm9, %ymm3 + vpmullw %ymm12, %ymm6, %ymm8 + vpmullw %ymm12, %ymm7, %ymm9 + vpmulhw %ymm10, %ymm6, %ymm6 + vpmulhw %ymm10, %ymm7, %ymm7 + vpmulhw %ymm14, %ymm8, %ymm8 + vpmulhw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm6, %ymm6 + vpsubw %ymm9, %ymm7, %ymm7 vpmullw %ymm13, %ymm0, %ymm8 vpmullw %ymm13, %ymm1, %ymm9 vpmulhw %ymm11, %ymm0, %ymm0 @@ -6724,18 +6764,26 @@ L_pointwise_acc_mont_end_encap_bp: vpmulhw %ymm14, %ymm5, %ymm5 vpsubw %ymm4, %ymm8, %ymm4 vpsubw %ymm5, %ymm9, %ymm5 - vpsubw %ymm6, %ymm2, %ymm8 - vpsubw %ymm7, %ymm3, %ymm9 - vpaddw %ymm6, %ymm2, %ymm2 - vpaddw %ymm7, %ymm3, %ymm3 - vpmullw %ymm12, %ymm8, %ymm6 - vpmullw %ymm12, %ymm9, %ymm7 - vpmulhw %ymm10, %ymm8, %ymm8 - vpmulhw %ymm10, %ymm9, %ymm9 - vpmulhw %ymm14, %ymm6, %ymm6 - vpmulhw %ymm14, %ymm7, %ymm7 - vpsubw %ymm6, %ymm8, %ymm6 - vpsubw %ymm7, %ymm9, %ymm7 + vpaddw %ymm6, %ymm2, %ymm8 + vpaddw %ymm7, %ymm3, %ymm9 + vpsubw %ymm6, %ymm2, %ymm6 + vpsubw %ymm7, %ymm3, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm2 + vpmulhw %ymm15, %ymm9, %ymm3 + vpsraw $10, %ymm2, %ymm2 + vpsraw $10, %ymm3, %ymm3 + vpmullw %ymm14, %ymm2, %ymm2 + vpmullw %ymm14, %ymm3, %ymm3 + vpsubw %ymm2, %ymm8, %ymm2 + vpsubw %ymm3, %ymm9, %ymm3 + vpmullw %ymm12, %ymm6, %ymm8 + vpmullw %ymm12, %ymm7, %ymm9 + vpmulhw %ymm10, %ymm6, %ymm6 + vpmulhw %ymm10, %ymm7, %ymm7 + vpmulhw %ymm14, %ymm8, %ymm8 + vpmulhw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm6, %ymm6 + vpsubw %ymm9, %ymm7, %ymm7 vpmullw %ymm13, %ymm0, %ymm8 vpmullw %ymm13, %ymm1, %ymm9 vpmulhw %ymm11, %ymm0, %ymm0 @@ -8116,6 +8164,14 @@ L_pointwise_acc_mont_end_encap_v: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 + vpmulhw %ymm15, %ymm8, %ymm0 + vpmulhw %ymm15, %ymm9, %ymm2 + vpsraw $10, %ymm0, %ymm0 + vpsraw $10, %ymm2, %ymm2 + vpmullw %ymm14, %ymm0, %ymm0 + vpmullw %ymm14, %ymm2, %ymm2 + vpsubw %ymm0, %ymm8, %ymm8 + vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -8137,14 +8193,6 @@ L_pointwise_acc_mont_end_encap_v: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 - vpmulhw %ymm15, %ymm8, %ymm0 - vpmulhw %ymm15, %ymm9, %ymm2 - vpsraw $10, %ymm0, %ymm0 - vpsraw $10, %ymm2, %ymm2 - vpmullw %ymm14, %ymm0, %ymm0 - vpmullw %ymm14, %ymm2, %ymm2 - vpsubw %ymm0, %ymm8, %ymm8 - vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -8166,6 +8214,14 @@ L_pointwise_acc_mont_end_encap_v: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 + vpmulhw %ymm15, %ymm8, %ymm0 + vpmulhw %ymm15, %ymm9, %ymm2 + vpsraw $10, %ymm0, %ymm0 + vpsraw $10, %ymm2, %ymm2 + vpmullw %ymm14, %ymm0, %ymm0 + vpmullw %ymm14, %ymm2, %ymm2 + vpsubw %ymm0, %ymm8, %ymm8 + vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -8239,6 +8295,14 @@ L_pointwise_acc_mont_end_encap_v: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm4 + vpmulhw %ymm15, %ymm9, %ymm6 + vpsraw $10, %ymm4, %ymm4 + vpsraw $10, %ymm6, %ymm6 + vpmullw %ymm14, %ymm4, %ymm4 + vpmullw %ymm14, %ymm6, %ymm6 + vpsubw %ymm4, %ymm8, %ymm8 + vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -8260,14 +8324,6 @@ L_pointwise_acc_mont_end_encap_v: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 - vpmulhw %ymm15, %ymm8, %ymm4 - vpmulhw %ymm15, %ymm9, %ymm6 - vpsraw $10, %ymm4, %ymm4 - vpsraw $10, %ymm6, %ymm6 - vpmullw %ymm14, %ymm4, %ymm4 - vpmullw %ymm14, %ymm6, %ymm6 - vpsubw %ymm4, %ymm8, %ymm8 - vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -8289,6 +8345,14 @@ L_pointwise_acc_mont_end_encap_v: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm4 + vpmulhw %ymm15, %ymm9, %ymm6 + vpsraw $10, %ymm4, %ymm4 + vpsraw $10, %ymm6, %ymm6 + vpmullw %ymm14, %ymm4, %ymm4 + vpmullw %ymm14, %ymm6, %ymm6 + vpsubw %ymm4, %ymm8, %ymm8 + vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -8405,6 +8469,14 @@ L_pointwise_acc_mont_end_encap_v: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 + vpmulhw %ymm15, %ymm8, %ymm0 + vpmulhw %ymm15, %ymm9, %ymm2 + vpsraw $10, %ymm0, %ymm0 + vpsraw $10, %ymm2, %ymm2 + vpmullw %ymm14, %ymm0, %ymm0 + vpmullw %ymm14, %ymm2, %ymm2 + vpsubw %ymm0, %ymm8, %ymm8 + vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -8426,14 +8498,6 @@ L_pointwise_acc_mont_end_encap_v: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 - vpmulhw %ymm15, %ymm8, %ymm0 - vpmulhw %ymm15, %ymm9, %ymm2 - vpsraw $10, %ymm0, %ymm0 - vpsraw $10, %ymm2, %ymm2 - vpmullw %ymm14, %ymm0, %ymm0 - vpmullw %ymm14, %ymm2, %ymm2 - vpsubw %ymm0, %ymm8, %ymm8 - vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -8455,6 +8519,14 @@ L_pointwise_acc_mont_end_encap_v: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 + vpmulhw %ymm15, %ymm8, %ymm0 + vpmulhw %ymm15, %ymm9, %ymm2 + vpsraw $10, %ymm0, %ymm0 + vpsraw $10, %ymm2, %ymm2 + vpmullw %ymm14, %ymm0, %ymm0 + vpmullw %ymm14, %ymm2, %ymm2 + vpsubw %ymm0, %ymm8, %ymm8 + vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -8528,6 +8600,14 @@ L_pointwise_acc_mont_end_encap_v: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm4 + vpmulhw %ymm15, %ymm9, %ymm6 + vpsraw $10, %ymm4, %ymm4 + vpsraw $10, %ymm6, %ymm6 + vpmullw %ymm14, %ymm4, %ymm4 + vpmullw %ymm14, %ymm6, %ymm6 + vpsubw %ymm4, %ymm8, %ymm8 + vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -8549,14 +8629,6 @@ L_pointwise_acc_mont_end_encap_v: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 - vpmulhw %ymm15, %ymm8, %ymm4 - vpmulhw %ymm15, %ymm9, %ymm6 - vpsraw $10, %ymm4, %ymm4 - vpsraw $10, %ymm6, %ymm6 - vpmullw %ymm14, %ymm4, %ymm4 - vpmullw %ymm14, %ymm6, %ymm6 - vpsubw %ymm4, %ymm8, %ymm8 - vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -8578,6 +8650,14 @@ L_pointwise_acc_mont_end_encap_v: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm4 + vpmulhw %ymm15, %ymm9, %ymm6 + vpsraw $10, %ymm4, %ymm4 + vpsraw $10, %ymm6, %ymm6 + vpmullw %ymm14, %ymm4, %ymm4 + vpmullw %ymm14, %ymm6, %ymm6 + vpsubw %ymm4, %ymm8, %ymm8 + vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -8682,18 +8762,26 @@ L_pointwise_acc_mont_end_encap_v: vpmulhw %ymm14, %ymm5, %ymm5 vpsubw %ymm4, %ymm8, %ymm4 vpsubw %ymm5, %ymm9, %ymm5 - vpsubw %ymm6, %ymm2, %ymm8 - vpsubw %ymm7, %ymm3, %ymm9 - vpaddw %ymm6, %ymm2, %ymm2 - vpaddw %ymm7, %ymm3, %ymm3 - vpmullw %ymm12, %ymm8, %ymm6 - vpmullw %ymm12, %ymm9, %ymm7 - vpmulhw %ymm10, %ymm8, %ymm8 - vpmulhw %ymm10, %ymm9, %ymm9 - vpmulhw %ymm14, %ymm6, %ymm6 - vpmulhw %ymm14, %ymm7, %ymm7 - vpsubw %ymm6, %ymm8, %ymm6 - vpsubw %ymm7, %ymm9, %ymm7 + vpaddw %ymm6, %ymm2, %ymm8 + vpaddw %ymm7, %ymm3, %ymm9 + vpsubw %ymm6, %ymm2, %ymm6 + vpsubw %ymm7, %ymm3, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm2 + vpmulhw %ymm15, %ymm9, %ymm3 + vpsraw $10, %ymm2, %ymm2 + vpsraw $10, %ymm3, %ymm3 + vpmullw %ymm14, %ymm2, %ymm2 + vpmullw %ymm14, %ymm3, %ymm3 + vpsubw %ymm2, %ymm8, %ymm2 + vpsubw %ymm3, %ymm9, %ymm3 + vpmullw %ymm12, %ymm6, %ymm8 + vpmullw %ymm12, %ymm7, %ymm9 + vpmulhw %ymm10, %ymm6, %ymm6 + vpmulhw %ymm10, %ymm7, %ymm7 + vpmulhw %ymm14, %ymm8, %ymm8 + vpmulhw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm6, %ymm6 + vpsubw %ymm9, %ymm7, %ymm7 vpmullw %ymm13, %ymm0, %ymm8 vpmullw %ymm13, %ymm1, %ymm9 vpmulhw %ymm11, %ymm0, %ymm0 @@ -8754,18 +8842,26 @@ L_pointwise_acc_mont_end_encap_v: vpmulhw %ymm14, %ymm5, %ymm5 vpsubw %ymm4, %ymm8, %ymm4 vpsubw %ymm5, %ymm9, %ymm5 - vpsubw %ymm6, %ymm2, %ymm8 - vpsubw %ymm7, %ymm3, %ymm9 - vpaddw %ymm6, %ymm2, %ymm2 - vpaddw %ymm7, %ymm3, %ymm3 - vpmullw %ymm12, %ymm8, %ymm6 - vpmullw %ymm12, %ymm9, %ymm7 - vpmulhw %ymm10, %ymm8, %ymm8 - vpmulhw %ymm10, %ymm9, %ymm9 - vpmulhw %ymm14, %ymm6, %ymm6 - vpmulhw %ymm14, %ymm7, %ymm7 - vpsubw %ymm6, %ymm8, %ymm6 - vpsubw %ymm7, %ymm9, %ymm7 + vpaddw %ymm6, %ymm2, %ymm8 + vpaddw %ymm7, %ymm3, %ymm9 + vpsubw %ymm6, %ymm2, %ymm6 + vpsubw %ymm7, %ymm3, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm2 + vpmulhw %ymm15, %ymm9, %ymm3 + vpsraw $10, %ymm2, %ymm2 + vpsraw $10, %ymm3, %ymm3 + vpmullw %ymm14, %ymm2, %ymm2 + vpmullw %ymm14, %ymm3, %ymm3 + vpsubw %ymm2, %ymm8, %ymm2 + vpsubw %ymm3, %ymm9, %ymm3 + vpmullw %ymm12, %ymm6, %ymm8 + vpmullw %ymm12, %ymm7, %ymm9 + vpmulhw %ymm10, %ymm6, %ymm6 + vpmulhw %ymm10, %ymm7, %ymm7 + vpmulhw %ymm14, %ymm8, %ymm8 + vpmulhw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm6, %ymm6 + vpsubw %ymm9, %ymm7, %ymm7 vpmullw %ymm13, %ymm0, %ymm8 vpmullw %ymm13, %ymm1, %ymm9 vpmulhw %ymm11, %ymm0, %ymm0 @@ -10891,6 +10987,14 @@ L_pointwise_acc_mont_end_decap: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 + vpmulhw %ymm15, %ymm8, %ymm0 + vpmulhw %ymm15, %ymm9, %ymm2 + vpsraw $10, %ymm0, %ymm0 + vpsraw $10, %ymm2, %ymm2 + vpmullw %ymm14, %ymm0, %ymm0 + vpmullw %ymm14, %ymm2, %ymm2 + vpsubw %ymm0, %ymm8, %ymm8 + vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -10912,14 +11016,6 @@ L_pointwise_acc_mont_end_decap: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 - vpmulhw %ymm15, %ymm8, %ymm0 - vpmulhw %ymm15, %ymm9, %ymm2 - vpsraw $10, %ymm0, %ymm0 - vpsraw $10, %ymm2, %ymm2 - vpmullw %ymm14, %ymm0, %ymm0 - vpmullw %ymm14, %ymm2, %ymm2 - vpsubw %ymm0, %ymm8, %ymm8 - vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -10941,6 +11037,14 @@ L_pointwise_acc_mont_end_decap: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 + vpmulhw %ymm15, %ymm8, %ymm0 + vpmulhw %ymm15, %ymm9, %ymm2 + vpsraw $10, %ymm0, %ymm0 + vpsraw $10, %ymm2, %ymm2 + vpmullw %ymm14, %ymm0, %ymm0 + vpmullw %ymm14, %ymm2, %ymm2 + vpsubw %ymm0, %ymm8, %ymm8 + vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -11014,6 +11118,14 @@ L_pointwise_acc_mont_end_decap: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm4 + vpmulhw %ymm15, %ymm9, %ymm6 + vpsraw $10, %ymm4, %ymm4 + vpsraw $10, %ymm6, %ymm6 + vpmullw %ymm14, %ymm4, %ymm4 + vpmullw %ymm14, %ymm6, %ymm6 + vpsubw %ymm4, %ymm8, %ymm8 + vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -11035,14 +11147,6 @@ L_pointwise_acc_mont_end_decap: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 - vpmulhw %ymm15, %ymm8, %ymm4 - vpmulhw %ymm15, %ymm9, %ymm6 - vpsraw $10, %ymm4, %ymm4 - vpsraw $10, %ymm6, %ymm6 - vpmullw %ymm14, %ymm4, %ymm4 - vpmullw %ymm14, %ymm6, %ymm6 - vpsubw %ymm4, %ymm8, %ymm8 - vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -11064,6 +11168,14 @@ L_pointwise_acc_mont_end_decap: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm4 + vpmulhw %ymm15, %ymm9, %ymm6 + vpsraw $10, %ymm4, %ymm4 + vpsraw $10, %ymm6, %ymm6 + vpmullw %ymm14, %ymm4, %ymm4 + vpmullw %ymm14, %ymm6, %ymm6 + vpsubw %ymm4, %ymm8, %ymm8 + vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -11180,6 +11292,14 @@ L_pointwise_acc_mont_end_decap: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 + vpmulhw %ymm15, %ymm8, %ymm0 + vpmulhw %ymm15, %ymm9, %ymm2 + vpsraw $10, %ymm0, %ymm0 + vpsraw $10, %ymm2, %ymm2 + vpmullw %ymm14, %ymm0, %ymm0 + vpmullw %ymm14, %ymm2, %ymm2 + vpsubw %ymm0, %ymm8, %ymm8 + vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -11201,14 +11321,6 @@ L_pointwise_acc_mont_end_decap: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 - vpmulhw %ymm15, %ymm8, %ymm0 - vpmulhw %ymm15, %ymm9, %ymm2 - vpsraw $10, %ymm0, %ymm0 - vpsraw $10, %ymm2, %ymm2 - vpmullw %ymm14, %ymm0, %ymm0 - vpmullw %ymm14, %ymm2, %ymm2 - vpsubw %ymm0, %ymm8, %ymm8 - vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -11230,6 +11342,14 @@ L_pointwise_acc_mont_end_decap: vpaddw %ymm3, %ymm2, %ymm9 vpsubw %ymm1, %ymm0, %ymm1 vpsubw %ymm3, %ymm2, %ymm3 + vpmulhw %ymm15, %ymm8, %ymm0 + vpmulhw %ymm15, %ymm9, %ymm2 + vpsraw $10, %ymm0, %ymm0 + vpsraw $10, %ymm2, %ymm2 + vpmullw %ymm14, %ymm0, %ymm0 + vpmullw %ymm14, %ymm2, %ymm2 + vpsubw %ymm0, %ymm8, %ymm8 + vpsubw %ymm2, %ymm9, %ymm9 vpmullw %ymm12, %ymm1, %ymm0 vpmullw %ymm13, %ymm3, %ymm2 vpmulhw %ymm10, %ymm1, %ymm1 @@ -11303,6 +11423,14 @@ L_pointwise_acc_mont_end_decap: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm4 + vpmulhw %ymm15, %ymm9, %ymm6 + vpsraw $10, %ymm4, %ymm4 + vpsraw $10, %ymm6, %ymm6 + vpmullw %ymm14, %ymm4, %ymm4 + vpmullw %ymm14, %ymm6, %ymm6 + vpsubw %ymm4, %ymm8, %ymm8 + vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -11324,14 +11452,6 @@ L_pointwise_acc_mont_end_decap: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 - vpmulhw %ymm15, %ymm8, %ymm4 - vpmulhw %ymm15, %ymm9, %ymm6 - vpsraw $10, %ymm4, %ymm4 - vpsraw $10, %ymm6, %ymm6 - vpmullw %ymm14, %ymm4, %ymm4 - vpmullw %ymm14, %ymm6, %ymm6 - vpsubw %ymm4, %ymm8, %ymm8 - vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -11353,6 +11473,14 @@ L_pointwise_acc_mont_end_decap: vpaddw %ymm7, %ymm6, %ymm9 vpsubw %ymm5, %ymm4, %ymm5 vpsubw %ymm7, %ymm6, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm4 + vpmulhw %ymm15, %ymm9, %ymm6 + vpsraw $10, %ymm4, %ymm4 + vpsraw $10, %ymm6, %ymm6 + vpmullw %ymm14, %ymm4, %ymm4 + vpmullw %ymm14, %ymm6, %ymm6 + vpsubw %ymm4, %ymm8, %ymm8 + vpsubw %ymm6, %ymm9, %ymm9 vpmullw %ymm12, %ymm5, %ymm4 vpmullw %ymm13, %ymm7, %ymm6 vpmulhw %ymm10, %ymm5, %ymm5 @@ -11457,18 +11585,26 @@ L_pointwise_acc_mont_end_decap: vpmulhw %ymm14, %ymm5, %ymm5 vpsubw %ymm4, %ymm8, %ymm4 vpsubw %ymm5, %ymm9, %ymm5 - vpsubw %ymm6, %ymm2, %ymm8 - vpsubw %ymm7, %ymm3, %ymm9 - vpaddw %ymm6, %ymm2, %ymm2 - vpaddw %ymm7, %ymm3, %ymm3 - vpmullw %ymm12, %ymm8, %ymm6 - vpmullw %ymm12, %ymm9, %ymm7 - vpmulhw %ymm10, %ymm8, %ymm8 - vpmulhw %ymm10, %ymm9, %ymm9 - vpmulhw %ymm14, %ymm6, %ymm6 - vpmulhw %ymm14, %ymm7, %ymm7 - vpsubw %ymm6, %ymm8, %ymm6 - vpsubw %ymm7, %ymm9, %ymm7 + vpaddw %ymm6, %ymm2, %ymm8 + vpaddw %ymm7, %ymm3, %ymm9 + vpsubw %ymm6, %ymm2, %ymm6 + vpsubw %ymm7, %ymm3, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm2 + vpmulhw %ymm15, %ymm9, %ymm3 + vpsraw $10, %ymm2, %ymm2 + vpsraw $10, %ymm3, %ymm3 + vpmullw %ymm14, %ymm2, %ymm2 + vpmullw %ymm14, %ymm3, %ymm3 + vpsubw %ymm2, %ymm8, %ymm2 + vpsubw %ymm3, %ymm9, %ymm3 + vpmullw %ymm12, %ymm6, %ymm8 + vpmullw %ymm12, %ymm7, %ymm9 + vpmulhw %ymm10, %ymm6, %ymm6 + vpmulhw %ymm10, %ymm7, %ymm7 + vpmulhw %ymm14, %ymm8, %ymm8 + vpmulhw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm6, %ymm6 + vpsubw %ymm9, %ymm7, %ymm7 vpmullw %ymm13, %ymm0, %ymm8 vpmullw %ymm13, %ymm1, %ymm9 vpmulhw %ymm11, %ymm0, %ymm0 @@ -11529,18 +11665,26 @@ L_pointwise_acc_mont_end_decap: vpmulhw %ymm14, %ymm5, %ymm5 vpsubw %ymm4, %ymm8, %ymm4 vpsubw %ymm5, %ymm9, %ymm5 - vpsubw %ymm6, %ymm2, %ymm8 - vpsubw %ymm7, %ymm3, %ymm9 - vpaddw %ymm6, %ymm2, %ymm2 - vpaddw %ymm7, %ymm3, %ymm3 - vpmullw %ymm12, %ymm8, %ymm6 - vpmullw %ymm12, %ymm9, %ymm7 - vpmulhw %ymm10, %ymm8, %ymm8 - vpmulhw %ymm10, %ymm9, %ymm9 - vpmulhw %ymm14, %ymm6, %ymm6 - vpmulhw %ymm14, %ymm7, %ymm7 - vpsubw %ymm6, %ymm8, %ymm6 - vpsubw %ymm7, %ymm9, %ymm7 + vpaddw %ymm6, %ymm2, %ymm8 + vpaddw %ymm7, %ymm3, %ymm9 + vpsubw %ymm6, %ymm2, %ymm6 + vpsubw %ymm7, %ymm3, %ymm7 + vpmulhw %ymm15, %ymm8, %ymm2 + vpmulhw %ymm15, %ymm9, %ymm3 + vpsraw $10, %ymm2, %ymm2 + vpsraw $10, %ymm3, %ymm3 + vpmullw %ymm14, %ymm2, %ymm2 + vpmullw %ymm14, %ymm3, %ymm3 + vpsubw %ymm2, %ymm8, %ymm2 + vpsubw %ymm3, %ymm9, %ymm3 + vpmullw %ymm12, %ymm6, %ymm8 + vpmullw %ymm12, %ymm7, %ymm9 + vpmulhw %ymm10, %ymm6, %ymm6 + vpmulhw %ymm10, %ymm7, %ymm7 + vpmulhw %ymm14, %ymm8, %ymm8 + vpmulhw %ymm14, %ymm9, %ymm9 + vpsubw %ymm8, %ymm6, %ymm6 + vpsubw %ymm9, %ymm7, %ymm7 vpmullw %ymm13, %ymm0, %ymm8 vpmullw %ymm13, %ymm1, %ymm9 vpmulhw %ymm11, %ymm0, %ymm0 diff --git a/wolfcrypt/src/wc_kyber_poly.c b/wolfcrypt/src/wc_kyber_poly.c index 7886c82b2..0030b139d 100644 --- a/wolfcrypt/src/wc_kyber_poly.c +++ b/wolfcrypt/src/wc_kyber_poly.c @@ -19,7 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ -/* Implementation based on NIST 3rd Round submission package. +/* Implementation based on FIPS 203: + * https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.203.pdf + * + * Original implementation based on NIST 3rd Round submission package. * See link at: * https://csrc.nist.gov/Projects/post-quantum-cryptography/post-quantum-cryptography-standardization/round-3-submissions */ @@ -83,9 +86,9 @@ #if defined(WOLFSSL_MLKEM_MAKEKEY_SMALL_MEM) || \ defined(WOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM) -static int kyber_gen_matrix_i(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, +static int kyber_gen_matrix_i(KYBER_PRF_T* prf, sword16* a, int k, byte* seed, int i, int transposed); -static int kyber_get_noise_i(KYBER_PRF_T* prf, int kp, sword16* vec2, +static int kyber_get_noise_i(KYBER_PRF_T* prf, int k, sword16* vec2, byte* seed, int i, int make); static int kyber_get_noise_eta2_c(KYBER_PRF_T* prf, sword16* p, const byte* seed); @@ -163,45 +166,45 @@ static word32 cpuid_flags = 0; /* Zetas for NTT. */ const sword16 zetas[KYBER_N / 2] = { - 2285, 2571, 2970, 1812, 1493, 1422, 287, 202, 3158, 622, 1577, 182, - 962, 2127, 1855, 1468, 573, 2004, 264, 383, 2500, 1458, 1727, 3199, - 2648, 1017, 732, 608, 1787, 411, 3124, 1758, 1223, 652, 2777, 1015, - 2036, 1491, 3047, 1785, 516, 3321, 3009, 2663, 1711, 2167, 126, 1469, - 2476, 3239, 3058, 830, 107, 1908, 3082, 2378, 2931, 961, 1821, 2604, - 448, 2264, 677, 2054, 2226, 430, 555, 843, 2078, 871, 1550, 105, - 422, 587, 177, 3094, 3038, 2869, 1574, 1653, 3083, 778, 1159, 3182, - 2552, 1483, 2727, 1119, 1739, 644, 2457, 349, 418, 329, 3173, 3254, - 817, 1097, 603, 610, 1322, 2044, 1864, 384, 2114, 3193, 1218, 1994, - 2455, 220, 2142, 1670, 2144, 1799, 2051, 794, 1819, 2475, 2459, 478, + 2285, 2571, 2970, 1812, 1493, 1422, 287, 202, + 3158, 622, 1577, 182, 962, 2127, 1855, 1468, + 573, 2004, 264, 383, 2500, 1458, 1727, 3199, + 2648, 1017, 732, 608, 1787, 411, 3124, 1758, + 1223, 652, 2777, 1015, 2036, 1491, 3047, 1785, + 516, 3321, 3009, 2663, 1711, 2167, 126, 1469, + 2476, 3239, 3058, 830, 107, 1908, 3082, 2378, + 2931, 961, 1821, 2604, 448, 2264, 677, 2054, + 2226, 430, 555, 843, 2078, 871, 1550, 105, + 422, 587, 177, 3094, 3038, 2869, 1574, 1653, + 3083, 778, 1159, 3182, 2552, 1483, 2727, 1119, + 1739, 644, 2457, 349, 418, 329, 3173, 3254, + 817, 1097, 603, 610, 1322, 2044, 1864, 384, + 2114, 3193, 1218, 1994, 2455, 220, 2142, 1670, + 2144, 1799, 2051, 794, 1819, 2475, 2459, 478, 3221, 3021, 996, 991, 958, 1869, 1522, 1628 }; -/* Zetas for inverse NTT. */ -const sword16 zetas_inv[KYBER_N / 2] = { - 1701, 1807, 1460, 2371, 2338, 2333, 308, 108, 2851, 870, 854, 1510, - 2535, 1278, 1530, 1185, 1659, 1187, 3109, 874, 1335, 2111, 136, 1215, - 2945, 1465, 1285, 2007, 2719, 2726, 2232, 2512, 75, 156, 3000, 2911, - 2980, 872, 2685, 1590, 2210, 602, 1846, 777, 147, 2170, 2551, 246, - 1676, 1755, 460, 291, 235, 3152, 2742, 2907, 3224, 1779, 2458, 1251, - 2486, 2774, 2899, 1103, 1275, 2652, 1065, 2881, 725, 1508, 2368, 398, - 951, 247, 1421, 3222, 2499, 271, 90, 853, 1860, 3203, 1162, 1618, - 666, 320, 8, 2813, 1544, 282, 1838, 1293, 2314, 552, 2677, 2106, - 1571, 205, 2918, 1542, 2721, 2597, 2312, 681, 130, 1602, 1871, 829, - 2946, 3065, 1325, 2756, 1861, 1474, 1202, 2367, 3147, 1752, 2707, 171, - 3127, 3042, 1907, 1836, 1517, 359, 758, 1441 -}; - -#define KYBER_BARRETT(a) \ - "SMULWB r10, r14, " #a "\n\t" \ - "SMULWT r11, r14, " #a "\n\t" \ - "SMULBT r10, r12, r10\n\t" \ - "SMULBT r11, r12, r11\n\t" \ - "PKHBT r10, r10, r11, LSL #16\n\t" \ - "SSUB16 " #a ", " #a ", r10\n\t" - #if !defined(WOLFSSL_ARMASM) /* Number-Theoretic Transform. + * + * FIPS 203, Algorithm 9: NTT(f) + * Computes the NTT representation f_hat of the given polynomial f element of + * R_q. + * 1: f_hat <- f + * 2: i <- 1 + * 3: for (len <- 128; len >= 2; len <- len/2) + * 4: for (start <- 0; start < 256; start <- start + 2.len) + * 5: zeta <- zetas^BitRev_7(i) mod q + * 6: i <- i + 1 + * 7: for (j <- start; j < start + len; j++) + * 8: t <- zeta.f[j+len] + * 9: f_hat[j+len] <- f_hat[j] - t + * 10: f_hat[j] <- f_hat[j] - t + * 11: end for + * 12: end for + * 13: end for + * 14: return f_hat * * @param [in, out] r Polynomial to transform. */ @@ -212,16 +215,24 @@ static void kyber_ntt(sword16* r) unsigned int k; unsigned int j; + /* Step 2 */ k = 1; + /* Step 3 */ for (len = KYBER_N / 2; len >= 2; len >>= 1) { unsigned int start; + /* Step 4 */ for (start = 0; start < KYBER_N; start = j + len) { + /* Step 5, 6*/ sword16 zeta = zetas[k++]; + /* Step 7 */ for (j = start; j < start + len; ++j) { + /* Step 8 */ sword32 p = (sword32)zeta * r[j + len]; sword16 t = KYBER_MONT_RED(p); sword16 rj = r[j]; + /* Step 9 */ r[j + len] = rj - t; + /* Step 10 */ r[j] = rj + t; } } @@ -232,6 +243,7 @@ static void kyber_ntt(sword16* r) r[j] = KYBER_BARRETT_RED(r[j]); } #elif defined(WOLFSSL_KYBER_NO_LARGE_CODE) + /* Take out the first iteration. */ unsigned int len; unsigned int k = 1; unsigned int j; @@ -263,11 +275,13 @@ static void kyber_ntt(sword16* r) r[j] = KYBER_BARRETT_RED(r[j]); } #elif defined(WOLFSSL_KYBER_NTT_UNROLL) + /* Unroll len loop (Step 3). */ unsigned int k = 1; unsigned int j; unsigned int start; sword16 zeta = zetas[k++]; + /* len = 128 */ for (j = 0; j < KYBER_N / 2; ++j) { sword32 p = (sword32)zeta * r[j + KYBER_N / 2]; sword16 t = KYBER_MONT_RED(p); @@ -275,6 +289,7 @@ static void kyber_ntt(sword16* r) r[j + KYBER_N / 2] = rj - t; r[j] = rj + t; } + /* len = 64 */ for (start = 0; start < KYBER_N; start += 2 * 64) { zeta = zetas[k++]; for (j = 0; j < 64; ++j) { @@ -285,6 +300,7 @@ static void kyber_ntt(sword16* r) r[start + j] = rj + t; } } + /* len = 32 */ for (start = 0; start < KYBER_N; start += 2 * 32) { zeta = zetas[k++]; for (j = 0; j < 32; ++j) { @@ -295,6 +311,7 @@ static void kyber_ntt(sword16* r) r[start + j] = rj + t; } } + /* len = 16 */ for (start = 0; start < KYBER_N; start += 2 * 16) { zeta = zetas[k++]; for (j = 0; j < 16; ++j) { @@ -305,6 +322,7 @@ static void kyber_ntt(sword16* r) r[start + j] = rj + t; } } + /* len = 8 */ for (start = 0; start < KYBER_N; start += 2 * 8) { zeta = zetas[k++]; for (j = 0; j < 8; ++j) { @@ -315,6 +333,7 @@ static void kyber_ntt(sword16* r) r[start + j] = rj + t; } } + /* len = 4 */ for (start = 0; start < KYBER_N; start += 2 * 4) { zeta = zetas[k++]; for (j = 0; j < 4; ++j) { @@ -325,6 +344,7 @@ static void kyber_ntt(sword16* r) r[start + j] = rj + t; } } + /* len = 2 */ for (start = 0; start < KYBER_N; start += 2 * 2) { zeta = zetas[k++]; for (j = 0; j < 2; ++j) { @@ -340,12 +360,14 @@ static void kyber_ntt(sword16* r) r[j] = KYBER_BARRETT_RED(r[j]); } #else + /* Unroll len (2, 3, 2) and start loops. */ unsigned int j; sword16 t0; sword16 t1; sword16 t2; sword16 t3; + /* len = 128,64 */ sword16 zeta128 = zetas[1]; sword16 zeta64_0 = zetas[2]; sword16 zeta64_1 = zetas[3]; @@ -395,6 +417,7 @@ static void kyber_ntt(sword16* r) r[j + 224] = r7; } + /* len = 32,16,8 */ for (j = 0; j < KYBER_N; j += 64) { int i; sword16 zeta32 = zetas[ 4 + j / 64 + 0]; @@ -464,6 +487,7 @@ static void kyber_ntt(sword16* r) } } + /* len = 4,2 and Final reduction */ for (j = 0; j < KYBER_N; j += 8) { sword16 zeta4 = zetas[32 + j / 8 + 0]; sword16 zeta2_0 = zetas[64 + j / 4 + 0]; @@ -515,7 +539,48 @@ static void kyber_ntt(sword16* r) #endif } +#if !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) || \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) +/* Zetas for inverse NTT. */ +const sword16 zetas_inv[KYBER_N / 2] = { + 1701, 1807, 1460, 2371, 2338, 2333, 308, 108, + 2851, 870, 854, 1510, 2535, 1278, 1530, 1185, + 1659, 1187, 3109, 874, 1335, 2111, 136, 1215, + 2945, 1465, 1285, 2007, 2719, 2726, 2232, 2512, + 75, 156, 3000, 2911, 2980, 872, 2685, 1590, + 2210, 602, 1846, 777, 147, 2170, 2551, 246, + 1676, 1755, 460, 291, 235, 3152, 2742, 2907, + 3224, 1779, 2458, 1251, 2486, 2774, 2899, 1103, + 1275, 2652, 1065, 2881, 725, 1508, 2368, 398, + 951, 247, 1421, 3222, 2499, 271, 90, 853, + 1860, 3203, 1162, 1618, 666, 320, 8, 2813, + 1544, 282, 1838, 1293, 2314, 552, 2677, 2106, + 1571, 205, 2918, 1542, 2721, 2597, 2312, 681, + 130, 1602, 1871, 829, 2946, 3065, 1325, 2756, + 1861, 1474, 1202, 2367, 3147, 1752, 2707, 171, + 3127, 3042, 1907, 1836, 1517, 359, 758, 1441 +}; + /* Inverse Number-Theoretic Transform. + * + * FIPS 203, Algorithm 10: NTT^-1(f_hat) + * Computes the polynomial f element of R_q that corresponds to the given NTT + * representation f element of T_q. + * 1: f <- f_hat + * 2: i <- 127 + * 3: for (len <- 2; len <= 128 ; len <- 2.len) + * 4: for (start <- 0; start < 256; start <- start + 2.len) + * 5: zeta <- zetas^BitRev_7(i) mod q + * 6: i <- i - 1 + * 7: for (j <- start; j < start + len; j++) + * 8: t <- f[j] + * 9: f[j] < t + f[j + len] + * 10: f[j + len] <- zeta.(f[j+len] - t) + * 11: end for + * 12: end for + * 13: end for + * 14: f <- f.3303 mod q + * 15: return f * * @param [in, out] r Polynomial to transform. */ @@ -527,17 +592,25 @@ static void kyber_invntt(sword16* r) unsigned int j; sword16 zeta; + /* Step 2 - table reversed */ k = 0; + /* Step 3 */ for (len = 2; len <= KYBER_N / 2; len <<= 1) { unsigned int start; + /* Step 4 */ for (start = 0; start < KYBER_N; start = j + len) { + /* Step 5, 6 */ zeta = zetas_inv[k++]; + /* Step 7 */ for (j = start; j < start + len; ++j) { sword32 p; + /* Step 8 */ sword16 rj = r[j]; sword16 rjl = r[j + len]; + /* Step 9 */ sword16 t = rj + rjl; r[j] = KYBER_BARRETT_RED(t); + /* Step 10 */ rjl = rj - rjl; p = (sword32)zeta * rjl; r[j + len] = KYBER_MONT_RED(p); @@ -545,12 +618,14 @@ static void kyber_invntt(sword16* r) } } + /* Step 14 */ zeta = zetas_inv[127]; for (j = 0; j < KYBER_N; ++j) { sword32 p = (sword32)zeta * r[j]; r[j] = KYBER_MONT_RED(p); } #elif defined(WOLFSSL_KYBER_NO_LARGE_CODE) + /* Take out last iteration. */ unsigned int len; unsigned int k; unsigned int j; @@ -593,6 +668,7 @@ static void kyber_invntt(sword16* r) r[j + KYBER_N / 2] = KYBER_MONT_RED(p); } #elif defined(WOLFSSL_KYBER_INVNTT_UNROLL) + /* Unroll len loop (Step 3). */ unsigned int k; unsigned int j; unsigned int start; @@ -600,6 +676,7 @@ static void kyber_invntt(sword16* r) sword16 zeta2; k = 0; + /* len = 2 */ for (start = 0; start < KYBER_N; start += 2 * 2) { zeta = zetas_inv[k++]; for (j = 0; j < 2; ++j) { @@ -613,6 +690,7 @@ static void kyber_invntt(sword16* r) r[start + j + 2] = KYBER_MONT_RED(p); } } + /* len = 4 */ for (start = 0; start < KYBER_N; start += 2 * 4) { zeta = zetas_inv[k++]; for (j = 0; j < 4; ++j) { @@ -626,6 +704,7 @@ static void kyber_invntt(sword16* r) r[start + j + 4] = KYBER_MONT_RED(p); } } + /* len = 8 */ for (start = 0; start < KYBER_N; start += 2 * 8) { zeta = zetas_inv[k++]; for (j = 0; j < 8; ++j) { @@ -640,6 +719,7 @@ static void kyber_invntt(sword16* r) r[start + j + 8] = KYBER_MONT_RED(p); } } + /* len = 16 */ for (start = 0; start < KYBER_N; start += 2 * 16) { zeta = zetas_inv[k++]; for (j = 0; j < 16; ++j) { @@ -653,6 +733,7 @@ static void kyber_invntt(sword16* r) r[start + j + 16] = KYBER_MONT_RED(p); } } + /* len = 32 */ for (start = 0; start < KYBER_N; start += 2 * 32) { zeta = zetas_inv[k++]; for (j = 0; j < 32; ++j) { @@ -666,6 +747,7 @@ static void kyber_invntt(sword16* r) r[start + j + 32] = KYBER_MONT_RED(p); } } + /* len = 64 */ for (start = 0; start < KYBER_N; start += 2 * 64) { zeta = zetas_inv[k++]; for (j = 0; j < 64; ++j) { @@ -680,6 +762,7 @@ static void kyber_invntt(sword16* r) r[start + j + 64] = KYBER_MONT_RED(p); } } + /* len = 128, 256 */ zeta = zetas_inv[126]; zeta2 = zetas_inv[127]; for (j = 0; j < KYBER_N / 2; ++j) { @@ -698,6 +781,7 @@ static void kyber_invntt(sword16* r) r[j + KYBER_N / 2] = KYBER_MONT_RED(p); } #else + /* Unroll len (2, 3, 3) and start loops. */ unsigned int j; sword16 t0; sword16 t1; @@ -923,11 +1007,19 @@ static void kyber_invntt(sword16* r) } #endif } +#endif /* Multiplication of polynomials in Zq[X]/(X^2-zeta). * * Used for multiplication of elements in Rq in NTT domain. * + * FIPS 203, Algorithm 12: BaseCaseMultiply(a0, a1, b0, b1, zeta) + * Computes the product of two degree-one polynomials with respect to a + * quadratic modulus. + * 1: c0 <- a0.b0 + a1.b1.zeta + * 2: c1 <- a0.b1 + a1.b0 + * 3: return (c0, c1) + * * @param [out] r Result polynomial. * @param [in] a First factor. * @param [in] b Second factor. @@ -944,13 +1036,15 @@ static void kyber_basemul(sword16* r, const sword16* a, const sword16* b, sword32 p1; sword32 p2; - p1 = (sword32)a1 * b1; - p2 = (sword32)a0 * b0; - r0 = KYBER_MONT_RED(p1); - p1 = (sword32)zeta * r0; - p1 += p2; - r[0] = KYBER_MONT_RED(p1); + /* Step 1 */ + p1 = (sword32)a0 * b0; + p2 = (sword32)a1 * b1; + r0 = KYBER_MONT_RED(p2); + p2 = (sword32)zeta * r0; + p2 += p1; + r[0] = KYBER_MONT_RED(p2); + /* Step 2 */ p1 = (sword32)a0 * b1; p2 = (sword32)a1 * b0; p1 += p2; @@ -958,6 +1052,15 @@ static void kyber_basemul(sword16* r, const sword16* a, const sword16* b, } /* Multiply two polynomials in NTT domain. r = a * b. + * + * FIPS 203, Algorithm 11: MultiplyNTTs(f_hat, g_hat) + * Computes the product (in the ring T_q) of two NTT representations. + * 1: for (i <- 0; i < 128; i++) + * 2: (h_hat[2i],h_hat[2i+1]) <- + * BaseCaseMultiply(f_hat[2i],f_hat[2i+1],g_hat[2i],g_hat[2i+1], + * zetas^(BitRev_7(i)+1) + * 3: end for + * 4: return h_hat * * @param [out] r Result polynomial. * @param [in] a First polynomial multiplier. @@ -968,12 +1071,16 @@ static void kyber_basemul_mont(sword16* r, const sword16* a, const sword16* b) const sword16* zeta = zetas + 64; #if defined(WOLFSSL_KYBER_SMALL) + /* Two multiplications per loop. */ unsigned int i; + /* Step 1 */ for (i = 0; i < KYBER_N; i += 4, zeta++) { + /* Step 2 */ kyber_basemul(r + i + 0, a + i + 0, b + i + 0, zeta[0]); kyber_basemul(r + i + 2, a + i + 2, b + i + 2, -zeta[0]); } #elif defined(WOLFSSL_KYBER_NO_LARGE_CODE) + /* Four multiplications per loop. */ unsigned int i; for (i = 0; i < KYBER_N; i += 8, zeta += 2) { kyber_basemul(r + i + 0, a + i + 0, b + i + 0, zeta[0]); @@ -982,6 +1089,7 @@ static void kyber_basemul_mont(sword16* r, const sword16* a, const sword16* b) kyber_basemul(r + i + 6, a + i + 6, b + i + 6, -zeta[1]); } #else + /* Eight multiplications per loop. */ unsigned int i; for (i = 0; i < KYBER_N; i += 16, zeta += 4) { kyber_basemul(r + i + 0, a + i + 0, b + i + 0, zeta[0]); @@ -997,6 +1105,16 @@ static void kyber_basemul_mont(sword16* r, const sword16* a, const sword16* b) } /* Multiply two polynomials in NTT domain and add to result. r += a * b. + * + * FIPS 203, Algorithm 11: MultiplyNTTs(f_hat, g_hat) + * Computes the product (in the ring T_q) of two NTT representations. + * 1: for (i <- 0; i < 128; i++) + * 2: (h_hat[2i],h_hat[2i+1]) <- + * BaseCaseMultiply(f_hat[2i],f_hat[2i+1],g_hat[2i],g_hat[2i+1], + * zetas^(BitRev_7(i)+1) + * 3: end for + * 4: return h_hat + * Add h_hat to r. * * @param [in, out] r Result polynomial. * @param [in] a First polynomial multiplier. @@ -1008,6 +1126,7 @@ static void kyber_basemul_mont_add(sword16* r, const sword16* a, const sword16* zeta = zetas + 64; #if defined(WOLFSSL_KYBER_SMALL) + /* Two multiplications per loop. */ unsigned int i; for (i = 0; i < KYBER_N; i += 4, zeta++) { sword16 t0[2]; @@ -1022,6 +1141,7 @@ static void kyber_basemul_mont_add(sword16* r, const sword16* a, r[i + 3] += t2[1]; } #elif defined(WOLFSSL_KYBER_NO_LARGE_CODE) + /* Four multiplications per loop. */ unsigned int i; for (i = 0; i < KYBER_N; i += 8, zeta += 2) { sword16 t0[2]; @@ -1044,6 +1164,7 @@ static void kyber_basemul_mont_add(sword16* r, const sword16* a, r[i + 7] += t6[1]; } #else + /* Eight multiplications per loop. */ unsigned int i; for (i = 0; i < KYBER_N; i += 16, zeta += 4) { sword16 t0[2]; @@ -1087,26 +1208,26 @@ static void kyber_basemul_mont_add(sword16* r, const sword16* a, /* Pointwise multiply elements of a and b, into r, and multiply by 2^-16. * - * @param [out] r Result polynomial. - * @param [in] a First vector polynomial to multiply with. - * @param [in] b Second vector polynomial to multiply with. - * @param [in] kp Number of polynomials in vector. + * @param [out] r Result polynomial. + * @param [in] a First vector polynomial to multiply with. + * @param [in] b Second vector polynomial to multiply with. + * @param [in] k Number of polynomials in vector. */ static void kyber_pointwise_acc_mont(sword16* r, const sword16* a, - const sword16* b, unsigned int kp) + const sword16* b, unsigned int k) { unsigned int i; kyber_basemul_mont(r, a, b); #ifdef WOLFSSL_KYBER_SMALL - for (i = 1; i < kp; ++i) { + for (i = 1; i < k; ++i) { kyber_basemul_mont_add(r, a + i * KYBER_N, b + i * KYBER_N); } #else - for (i = 1; i < kp - 1; ++i) { + for (i = 1; i < k - 1; ++i) { kyber_basemul_mont_add(r, a + i * KYBER_N, b + i * KYBER_N); } - kyber_basemul_mont_add(r, a + (kp - 1) * KYBER_N, b + (kp - 1) * KYBER_N); + kyber_basemul_mont_add(r, a + (k - 1) * KYBER_N, b + (k - 1) * KYBER_N); #endif } @@ -1126,238 +1247,318 @@ void kyber_init(void) #if defined(__aarch64__) && defined(WOLFSSL_ARMASM) +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY /* Generate a public-private key pair from randomly generated data. * - * @param [in, out] priv Private key vector of polynomials. - * @param [out] pub Public key vector of polynomials. - * @param [in] e Error values as a vector of polynomials. Modified. - * @param [in] a Random values in an array of vectors of polynomials. - * @param [in] kp Number of polynomials in vector. + * FIPS 203, Algorithm 13: K-PKE.KeyGen(d) + * ... + * 16: s_hat <- NTT(s) + * 17: e_hat <- NTT(e) + * 18: t^hat <- A_hat o s_hat + e_hat + * ... + * + * @param [in, out] s Private key vector of polynomials. + * @param [out] t Public key vector of polynomials. + * @param [in] e Error values as a vector of polynomials. Modified. + * @param [in] a Random values in an array of vectors of polynomials. + * @param [in] k Number of polynomials in vector. */ -void kyber_keygen(sword16* priv, sword16* pub, sword16* e, const sword16* a, - int kp) +void kyber_keygen(sword16* s, sword16* t, sword16* e, const sword16* a, int k) { int i; #ifndef WOLFSSL_AARCH64_NO_SQRDMLSH if (IS_AARCH64_RDM(cpuid_flags)) { /* Transform private key. All of result used in public key calculation. - */ - for (i = 0; i < kp; ++i) { - kyber_ntt_sqrdmlsh(priv + i * KYBER_N); + * Step 16: s_hat = NTT(s) */ + for (i = 0; i < k; ++i) { + kyber_ntt_sqrdmlsh(s + i * KYBER_N); } - /* For each polynomial in the vectors. */ - for (i = 0; i < kp; ++i) { - /* Multiply a by private into public polynomial. */ - kyber_pointwise_acc_mont(pub + i * KYBER_N, a + i * kp * KYBER_N, - priv, kp); - /* Convert public polynomial to Montgomery form. */ - kyber_to_mont_sqrdmlsh(pub + i * KYBER_N); - /* Transform error values polynomial. */ + /* For each polynomial in the vectors. + * Step 17, Step 18: Calculate public from A_hat, s_hat and e_hat. */ + for (i = 0; i < k; ++i) { + /* Multiply a by private into public polynomial. + * Step 18: ... A_hat o s_hat ... */ + kyber_pointwise_acc_mont(t + i * KYBER_N, a + i * k * KYBER_N, s, + k); + /* Convert public polynomial to Montgomery form. + * Step 18: ... MontRed(A_hat o s_hat) ... */ + kyber_to_mont_sqrdmlsh(t + i * KYBER_N); + /* Transform error values polynomial. + * Step 17: e_hat = NTT(e) */ kyber_ntt_sqrdmlsh(e + i * KYBER_N); - /* Add errors to public key and reduce. */ - kyber_add_reduce(pub + i * KYBER_N, e + i * KYBER_N); + /* Add errors to public key and reduce. + * Step 18: t_hat = BarrettRed(MontRed(A_hat o s_hat) + e_hat) */ + kyber_add_reduce(t + i * KYBER_N, e + i * KYBER_N); } } else #endif { /* Transform private key. All of result used in public key calculation. - */ - for (i = 0; i < kp; ++i) { - kyber_ntt(priv + i * KYBER_N); + * Step 16: s_hat = NTT(s) */ + for (i = 0; i < k; ++i) { + kyber_ntt(s + i * KYBER_N); } - /* For each polynomial in the vectors. */ - for (i = 0; i < kp; ++i) { - /* Multiply a by private into public polynomial. */ - kyber_pointwise_acc_mont(pub + i * KYBER_N, a + i * kp * KYBER_N, - priv, kp); - /* Convert public polynomial to Montgomery form. */ - kyber_to_mont(pub + i * KYBER_N); - /* Transform error values polynomial. */ + /* For each polynomial in the vectors. + * Step 17, Step 18: Calculate public from A_hat, s_hat and e_hat. */ + for (i = 0; i < k; ++i) { + /* Multiply a by private into public polynomial. + * Step 18: ... A_hat o s_hat ... */ + kyber_pointwise_acc_mont(t + i * KYBER_N, a + i * k * KYBER_N, s, + k); + /* Convert public polynomial to Montgomery form. + * Step 18: ... MontRed(A_hat o s_hat) ... */ + kyber_to_mont(t + i * KYBER_N); + /* Transform error values polynomial. + * Step 17: e_hat = NTT(e) */ kyber_ntt(e + i * KYBER_N); - /* Add errors to public key and reduce. */ - kyber_add_reduce(pub + i * KYBER_N, e + i * KYBER_N); + /* Add errors to public key and reduce. + * Step 18: t_hat = BarrettRed(MontRed(A_hat o s_hat) + e_hat) */ + kyber_add_reduce(t + i * KYBER_N, e + i * KYBER_N); } } } +#endif /* WOLFSSL_KYBER_NO_MAKE_KEY */ +#if !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) || \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) /* Encapsulate message. * - * @param [in] pub Public key vector of polynomials. - * @param [out] bp Vector of polynomials. - * @param [out] v Polynomial. - * @param [in] at Array of vector of polynomials. - * @param [in] sp Vector of polynomials. - * @param [in] ep Error Vector of polynomials. - * @param [in] epp Error polynomial. - * @param [in] m Message polynomial. - * @param [in] kp Number of polynomials in vector. + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE, m, r) + * ... + * Step 18: y_hat <- NTT(y) + * Step 19: u <- InvNTT(A_hat_trans o y_hat) + e_1) + * ... + * Step 21: v <- InvNTT(t_hat_trans o y_hat) + e_2 + mu) + * ... + * + * @param [in] t Public key vector of polynomials. + * @param [out] u Vector of polynomials. + * @param [out] v Polynomial. + * @param [in] a Array of vector of polynomials. + * @param [in] y Vector of polynomials. + * @param [in] e1 Error Vector of polynomials. + * @param [in] e2 Error polynomial. + * @param [in] m Message polynomial. + * @param [in] k Number of polynomials in vector. */ -void kyber_encapsulate(const sword16* pub, sword16* bp, sword16* v, - const sword16* at, sword16* sp, const sword16* ep, const sword16* epp, - const sword16* m, int kp) +void kyber_encapsulate(const sword16* t, sword16* u , sword16* v, + const sword16* a, sword16* y, const sword16* e1, const sword16* e2, + const sword16* m, int k) { int i; #ifndef WOLFSSL_AARCH64_NO_SQRDMLSH if (IS_AARCH64_RDM(cpuid_flags)) { - /* Transform sp. All of result used in calculation of bp and v. */ - for (i = 0; i < kp; ++i) { - kyber_ntt_sqrdmlsh(sp + i * KYBER_N); + /* Transform y. All of result used in calculation of u and v. + * Step 18: y_hat <- NTT(y) */ + for (i = 0; i < k; ++i) { + kyber_ntt_sqrdmlsh(y + i * KYBER_N); } - /* For each polynomial in the vectors. */ - for (i = 0; i < kp; ++i) { - /* Multiply at by sp into bp polynomial. */ - kyber_pointwise_acc_mont(bp + i * KYBER_N, at + i * kp * KYBER_N, - sp, kp); - /* Inverse transform bp polynomial. */ - kyber_invntt_sqrdmlsh(bp + i * KYBER_N); - /* Add errors to bp and reduce. */ - kyber_add_reduce(bp + i * KYBER_N, ep + i * KYBER_N); + /* For each polynomial in the vectors. + * Step 19: u <- InvNTT(A_hat_trans o y_hat) + e_1) */ + for (i = 0; i < k; ++i) { + /* Multiply at by y into u polynomial. + * Step 19: ... A_hat_trans o y_hat ... */ + kyber_pointwise_acc_mont(u + i * KYBER_N, a + i * k * KYBER_N, y, + k); + /* Inverse transform u polynomial. + * Step 19: ... InvNTT(A_hat_trans o y_hat) ... */ + kyber_invntt_sqrdmlsh(u + i * KYBER_N); + /* Add errors to u and reduce. + * Step 19: u <- InvNTT(A_hat_trans o y_hat) + e_1) */ + kyber_add_reduce(u + i * KYBER_N, e1 + i * KYBER_N); } - /* Multiply public key by sp into v polynomial. */ - kyber_pointwise_acc_mont(v, pub, sp, kp); - /* Inverse transform v. */ + /* Multiply public key by y into v polynomial. + * Step 21: ... t_hat_trans o y_hat ... */ + kyber_pointwise_acc_mont(v, t, y, k); + /* Inverse transform v. + * Step 22: ... InvNTT(t_hat_trans o y_hat) ... */ kyber_invntt_sqrdmlsh(v); } else #endif { - /* Transform sp. All of result used in calculation of bp and v. */ - for (i = 0; i < kp; ++i) { - kyber_ntt(sp + i * KYBER_N); + /* Transform y. All of result used in calculation of u and v. + * Step 18: y_hat <- NTT(y) */ + for (i = 0; i < k; ++i) { + kyber_ntt(y + i * KYBER_N); } - /* For each polynomial in the vectors. */ - for (i = 0; i < kp; ++i) { - /* Multiply at by sp into bp polynomial. */ - kyber_pointwise_acc_mont(bp + i * KYBER_N, at + i * kp * KYBER_N, - sp, kp); - /* Inverse transform bp polynomial. */ - kyber_invntt(bp + i * KYBER_N); - /* Add errors to bp and reduce. */ - kyber_add_reduce(bp + i * KYBER_N, ep + i * KYBER_N); + /* For each polynomial in the vectors. + * Step 19: u <- InvNTT(A_hat_trans o y_hat) + e_1) */ + for (i = 0; i < k; ++i) { + /* Multiply at by y into u polynomial. + * Step 19: ... A_hat_trans o y_hat ... */ + kyber_pointwise_acc_mont(u + i * KYBER_N, a + i * k * KYBER_N, y, + k); + /* Inverse transform u polynomial. + * Step 19: ... InvNTT(A_hat_trans o y_hat) ... */ + kyber_invntt(u + i * KYBER_N); + /* Add errors to u and reduce. + * Step 19: u <- InvNTT(A_hat_trans o y_hat) + e_1) */ + kyber_add_reduce(u + i * KYBER_N, e1 + i * KYBER_N); } - /* Multiply public key by sp into v polynomial. */ - kyber_pointwise_acc_mont(v, pub, sp, kp); - /* Inverse transform v. */ + /* Multiply public key by y into v polynomial. + * Step 21: ... t_hat_trans o y_hat ... */ + kyber_pointwise_acc_mont(v, t, y, k); + /* Inverse transform v. + * Step 22: ... InvNTT(t_hat_trans o y_hat) ... */ kyber_invntt(v); } - /* Add errors and message to v and reduce. */ - kyber_add3_reduce(v, epp, m); + /* Add errors and message to v and reduce. + * Step 21: v <- InvNTT(t_hat_trans o y_hat) + e_2 + mu) */ + kyber_add3_reduce(v, e2, m); } +#endif /* !WOLFSSL_KYBER_NO_ENCAPSULATE || !WOLFSSL_KYBER_NO_DECAPSULATE */ +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE /* Decapsulate message. * - * @param [in] priv Private key vector of polynomials. - * @param [out] mp Message polynomial. - * @param [in] bp Vector of polynomials containing error. - * @param [in] v Encapsulated message polynomial. - * @param [in] kp Number of polynomials in vector. + * FIPS 203, Algorithm 15: K-PKE.Decrypt(dk_PKE,c) + * Uses the decryption key to decrypt a ciphertext. + * ... + * 6: w <- v' - InvNTT(s_hat_trans o NTT(u')) + * ... + * + * @param [in] s Decryption key as vector of polynomials. + * @param [out] w Message polynomial. + * @param [in] u Vector of polynomials containing error. + * @param [in] v Encapsulated message polynomial. + * @param [in] k Number of polynomials in vector. */ -void kyber_decapsulate(const sword16* priv, sword16* mp, sword16* bp, - const sword16* v, int kp) +void kyber_decapsulate(const sword16* s, sword16* w, sword16* u, + const sword16* v, int k) { int i; #ifndef WOLFSSL_AARCH64_NO_SQRDMLSH if (IS_AARCH64_RDM(cpuid_flags)) { - /* Transform bp. All of result used in calculation of mp. */ - for (i = 0; i < kp; ++i) { - kyber_ntt_sqrdmlsh(bp + i * KYBER_N); + /* Transform u. All of result used in calculation of w. + * Step 6: ... NTT(u') */ + for (i = 0; i < k; ++i) { + kyber_ntt_sqrdmlsh(u + i * KYBER_N); } - /* Multiply private key by bp into mp polynomial. */ - kyber_pointwise_acc_mont(mp, priv, bp, kp); - /* Inverse transform mp. */ - kyber_invntt_sqrdmlsh(mp); + /* Multiply private key by u into w polynomial. + * Step 6: ... s_hat_trans o NTT(u') */ + kyber_pointwise_acc_mont(w, s, u, k); + /* Inverse transform w. + * Step 6: ... InvNTT(s_hat_trans o NTT(u')) */ + kyber_invntt_sqrdmlsh(w); } else #endif { - /* Transform bp. All of result used in calculation of mp. */ - for (i = 0; i < kp; ++i) { - kyber_ntt(bp + i * KYBER_N); + /* Transform u. All of result used in calculation of w. + * Step 6: ... NTT(u') */ + for (i = 0; i < k; ++i) { + kyber_ntt(u + i * KYBER_N); } - /* Multiply private key by bp into mp polynomial. */ - kyber_pointwise_acc_mont(mp, priv, bp, kp); - /* Inverse transform mp. */ - kyber_invntt(mp); + /* Multiply private key by u into w polynomial. + * Step 6: ... s_hat_trans o NTT(u') */ + kyber_pointwise_acc_mont(w, s, u, k); + /* Inverse transform w. + * Step 6: ... InvNTT(s_hat_trans o NTT(u')) */ + kyber_invntt(w); } - /* Subtract errors (mp) out of v and reduce into mp. */ - kyber_rsub_reduce(mp, v); + /* Subtract errors (in w) out of v and reduce into w. + * Step 6: w <- v' - InvNTT(s_hat_trans o NTT(u')) */ + kyber_rsub_reduce(w, v); } +#endif /* !WOLFSSL_KYBER_NO_DECAPSULATE */ #else +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY #ifndef WOLFSSL_MLKEM_MAKEKEY_SMALL_MEM /* Generate a public-private key pair from randomly generated data. * - * @param [in, out] priv Private key vector of polynomials. - * @param [out] pub Public key vector of polynomials. - * @param [in] e Error values as a vector of polynomials. Modified. - * @param [in] a Random values in an array of vectors of polynomials. - * @param [in] kp Number of polynomials in vector. + * FIPS 203, Algorithm 13: K-PKE.KeyGen(d) + * ... + * 16: s_hat <- NTT(s) + * 17: e_hat <- NTT(e) + * 18: t^hat <- A_hat o s_hat + e_hat + * ... + * + * @param [in, out] s Private key vector of polynomials. + * @param [out] t Public key vector of polynomials. + * @param [in] e Error values as a vector of polynomials. Modified. + * @param [in] a Random values in an array of vectors of polynomials. + * @param [in] k Number of polynomials in vector. */ -static void kyber_keygen_c(sword16* priv, sword16* pub, sword16* e, - const sword16* a, int kp) +static void kyber_keygen_c(sword16* s, sword16* t, sword16* e, const sword16* a, + int k) { int i; - /* Transform private key. All of result used in public key calculation */ - for (i = 0; i < kp; ++i) { - kyber_ntt(priv + i * KYBER_N); + /* Transform private key. All of result used in public key calculation + * Step 16: s_hat = NTT(s) */ + for (i = 0; i < k; ++i) { + kyber_ntt(s + i * KYBER_N); } - /* For each polynomial in the vectors. */ - for (i = 0; i < kp; ++i) { + /* For each polynomial in the vectors. + * Step 17, Step 18: Calculate public from A_hat, s_hat and e_hat. */ + for (i = 0; i < k; ++i) { unsigned int j; - /* Multiply a by private into public polynomial. */ - kyber_pointwise_acc_mont(pub + i * KYBER_N, a + i * kp * KYBER_N, priv, - kp); - /* Convert public polynomial to Montgomery form. */ + /* Multiply a by private into public polynomial. + * Step 18: ... A_hat o s_hat ... */ + kyber_pointwise_acc_mont(t + i * KYBER_N, a + i * k * KYBER_N, s, k); + /* Convert public polynomial to Montgomery form. + * Step 18: ... MontRed(A_hat o s_hat) ... */ for (j = 0; j < KYBER_N; ++j) { - sword32 t = pub[i * KYBER_N + j] * (sword32)KYBER_F; - pub[i * KYBER_N + j] = KYBER_MONT_RED(t); + sword32 n = t[i * KYBER_N + j] * (sword32)KYBER_F; + t[i * KYBER_N + j] = KYBER_MONT_RED(n); } - /* Transform error values polynomial. */ + /* Transform error values polynomial. + * Step 17: e_hat = NTT(e) */ kyber_ntt(e + i * KYBER_N); - /* Add errors to public key and reduce. */ + /* Add errors to public key and reduce. + * Step 18: t_hat = BarrettRed(MontRed(A_hat o s_hat) + e_hat) */ for (j = 0; j < KYBER_N; ++j) { - sword16 t = pub[i * KYBER_N + j] + e[i * KYBER_N + j]; - pub[i * KYBER_N + j] = KYBER_BARRETT_RED(t); + sword16 n = t[i * KYBER_N + j] + e[i * KYBER_N + j]; + t[i * KYBER_N + j] = KYBER_BARRETT_RED(n); } } } /* Generate a public-private key pair from randomly generated data. * - * @param [in, out] priv Private key vector of polynomials. - * @param [out] pub Public key vector of polynomials. - * @param [in] e Error values as a vector of polynomials. Modified. - * @param [in] a Random values in an array of vectors of polynomials. - * @param [in] kp Number of polynomials in vector. + * FIPS 203, Algorithm 13: K-PKE.KeyGen(d) + * ... + * 16: s_hat <- NTT(s) + * 17: e_hat <- NTT(e) + * 18: t^hat <- A_hat o s_hat + e_hat + * ... + * + * @param [in, out] s Private key vector of polynomials. + * @param [out] t Public key vector of polynomials. + * @param [in] e Error values as a vector of polynomials. Modified. + * @param [in] a Random values in an array of vectors of polynomials. + * @param [in] k Number of polynomials in vector. */ -void kyber_keygen(sword16* priv, sword16* pub, sword16* e, const sword16* a, - int kp) +void kyber_keygen(sword16* s, sword16* t, sword16* e, const sword16* a, int k) { #ifdef USE_INTEL_SPEEDUP if ((IS_INTEL_AVX2(cpuid_flags)) && (SAVE_VECTOR_REGISTERS2() == 0)) { - kyber_keygen_avx2(priv, pub, e, a, kp); + /* Alg 13: Steps 16-18 */ + kyber_keygen_avx2(s, t, e, a, k); RESTORE_VECTOR_REGISTERS(); } else #endif { - kyber_keygen_c(priv, pub, e, a, kp); + /* Alg 13: Steps 16-18 */ + kyber_keygen_c(s, t, e, a, k); } } @@ -1365,54 +1566,76 @@ void kyber_keygen(sword16* priv, sword16* pub, sword16* e, const sword16* a, /* Generate a public-private key pair from randomly generated data. * - * @param [in, out] priv Private key vector of polynomials. - * @param [out] pub Public key vector of polynomials. - * @param [in] prf XOF object. - * @param [in] tv Temporary vector of polynomials. - * @param [in] kp Number of polynomials in vector. - * @param [in] seed Random seed to generate matrix A from. - * @param [in] noiseSeed Random seed to generate noise from. + * FIPS 203, Algorithm 13: K-PKE.KeyGen(d) + * 3: for (i <- 0; i < k; i++) > generate matrix A_hat + * ... (generate A[i]) + * 7: end for + * ... + * 9: s[i] <- SamplePolyCBD_eta_1(PRF_eta_1(rho, N)) + * ... + * 16: s_hat <- NTT(s) + * 17: e_hat <- NTT(e) + * 18: t^hat <- A_hat o s_hat + e_hat + * ... + * + * @param [in, out] s Private key vector of polynomials. + * @param [out] tv Public key vector of polynomials. + * @param [in] prf XOF object. + * @param [in] tv Temporary vector of polynomials. + * @param [in] k Number of polynomials in vector. + * @param [in] rho Random seed to generate matrix A from. + * @param [in] sigma Random seed to generate noise from. */ -int kyber_keygen_seeds(sword16* priv, sword16* pub, KYBER_PRF_T* prf, - sword16* tv, int kp, byte* seed, byte* noiseSeed) +int kyber_keygen_seeds(sword16* s, sword16* t, KYBER_PRF_T* prf, + sword16* tv, int k, byte* rho, byte* sigma) { int i; int ret = 0; + sword16* ai = tv; + sword16* e = tv; - /* Transform private key. All of result used in public key calculation */ - for (i = 0; i < kp; ++i) { - kyber_ntt(priv + i * KYBER_N); + /* Transform private key. All of result used in public key calculation + * Step 16: s_hat = NTT(s) */ + for (i = 0; i < k; ++i) { + kyber_ntt(s + i * KYBER_N); } - /* For each polynomial in the vectors. */ - for (i = 0; i < kp; ++i) { + /* For each polynomial in the vectors. + * Step 17, Step 18: Calculate public from A_hat, s_hat and e_hat. */ + for (i = 0; i < k; ++i) { unsigned int j; - /* Generate a vector of matrix A. */ - ret = kyber_gen_matrix_i(prf, tv, kp, seed, i, 0); + /* Generate a vector of matrix A. + * Steps 4-6: generate A[i] */ + ret = kyber_gen_matrix_i(prf, ai, k, rho, i, 0); if (ret != 0) { break; } - /* Multiply a by private into public polynomial. */ - kyber_pointwise_acc_mont(pub + i * KYBER_N, tv, priv, kp); - /* Convert public polynomial to Montgomery form. */ + /* Multiply a by private into public polynomial. + * Step 18: ... A_hat o s_hat ... */ + kyber_pointwise_acc_mont(t + i * KYBER_N, ai, s, k); + /* Convert public polynomial to Montgomery form. + * Step 18: ... MontRed(A_hat o s_hat) ... */ for (j = 0; j < KYBER_N; ++j) { - sword32 t = pub[i * KYBER_N + j] * (sword32)KYBER_F; - pub[i * KYBER_N + j] = KYBER_MONT_RED(t); + sword32 n = t[i * KYBER_N + j] * (sword32)KYBER_F; + t[i * KYBER_N + j] = KYBER_MONT_RED(n); } - /* Generate noise using PRF. */ - ret = kyber_get_noise_i(prf, kp, tv, noiseSeed, i, 1); + /* Generate noise using PRF. + * Step 9: s[i] <- SamplePolyCBD_eta_1(PRF_eta_1(rho, N)) */ + ret = kyber_get_noise_i(prf, k, e, sigma, i, 1); if (ret != 0) { break; } - /* Transform error values polynomial. */ - kyber_ntt(tv); - /* Add errors to public key and reduce. */ + /* Transform error values polynomial. + * Step 17: e_hat = NTT(e) */ + kyber_ntt(e); + /* Add errors to public key and reduce. + * Step 18: t_hat = BarrettRed(MontRed(A_hat o s_hat) + e_hat) */ for (j = 0; j < KYBER_N; ++j) { - sword16 t = pub[i * KYBER_N + j] + tv[j]; - pub[i * KYBER_N + j] = KYBER_BARRETT_RED(t); + sword16 n = t[i * KYBER_N + j] + e[j]; + t[i * KYBER_N + j] = KYBER_BARRETT_RED(n); } } @@ -1420,54 +1643,56 @@ int kyber_keygen_seeds(sword16* priv, sword16* pub, KYBER_PRF_T* prf, } #endif +#endif /* !WOLFSSL_KYBER_NO_MAKE_KEY */ +#if !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) || \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) #ifndef WOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM /* Encapsulate message. * * @param [in] pub Public key vector of polynomials. - * @param [out] bp Vector of polynomials. + * @param [out] u Vector of polynomials. * @param [out] v Polynomial. - * @param [in] at Array of vector of polynomials. - * @param [in] sp Vector of polynomials. - * @param [in] ep Error Vector of polynomials. - * @param [in] epp Error polynomial. + * @param [in] a Array of vector of polynomials. + * @param [in] y Vector of polynomials. + * @param [in] e1 Error Vector of polynomials. + * @param [in] e2 Error polynomial. * @param [in] m Message polynomial. - * @param [in] kp Number of polynomials in vector. + * @param [in] k Number of polynomials in vector. */ -static void kyber_encapsulate_c(const sword16* pub, sword16* bp, sword16* v, - const sword16* at, sword16* sp, const sword16* ep, const sword16* epp, - const sword16* m, int kp) +static void kyber_encapsulate_c(const sword16* pub, sword16* u, sword16* v, + const sword16* a, sword16* y, const sword16* e1, const sword16* e2, + const sword16* m, int k) { int i; - /* Transform sp. All of result used in calculation of bp and v. */ - for (i = 0; i < kp; ++i) { - kyber_ntt(sp + i * KYBER_N); + /* Transform y. All of result used in calculation of u and v. */ + for (i = 0; i < k; ++i) { + kyber_ntt(y + i * KYBER_N); } /* For each polynomial in the vectors. */ - for (i = 0; i < kp; ++i) { + for (i = 0; i < k; ++i) { unsigned int j; - /* Multiply at by sp into bp polynomial. */ - kyber_pointwise_acc_mont(bp + i * KYBER_N, at + i * kp * KYBER_N, sp, - kp); - /* Inverse transform bp polynomial. */ - kyber_invntt(bp + i * KYBER_N); - /* Add errors to bp and reduce. */ + /* Multiply at by y into u polynomial. */ + kyber_pointwise_acc_mont(u + i * KYBER_N, a + i * k * KYBER_N, y, k); + /* Inverse transform u polynomial. */ + kyber_invntt(u + i * KYBER_N); + /* Add errors to u and reduce. */ for (j = 0; j < KYBER_N; ++j) { - sword16 t = bp[i * KYBER_N + j] + ep[i * KYBER_N + j]; - bp[i * KYBER_N + j] = KYBER_BARRETT_RED(t); + sword16 t = u[i * KYBER_N + j] + e1[i * KYBER_N + j]; + u[i * KYBER_N + j] = KYBER_BARRETT_RED(t); } } - /* Multiply public key by sp into v polynomial. */ - kyber_pointwise_acc_mont(v, pub, sp, kp); + /* Multiply public key by y into v polynomial. */ + kyber_pointwise_acc_mont(v, pub, y, k); /* Inverse transform v. */ kyber_invntt(v); /* Add errors and message to v and reduce. */ for (i = 0; i < KYBER_N; ++i) { - sword16 t = v[i] + epp[i] + m[i]; + sword16 t = v[i] + e2[i] + m[i]; v[i] = KYBER_BARRETT_RED(t); } } @@ -1475,28 +1700,28 @@ static void kyber_encapsulate_c(const sword16* pub, sword16* bp, sword16* v, /* Encapsulate message. * * @param [in] pub Public key vector of polynomials. - * @param [out] bp Vector of polynomials. + * @param [out] u Vector of polynomials. * @param [out] v Polynomial. - * @param [in] at Array of vector of polynomials. - * @param [in] sp Vector of polynomials. - * @param [in] ep Error Vector of polynomials. - * @param [in] epp Error polynomial. + * @param [in] a Array of vector of polynomials. + * @param [in] y Vector of polynomials. + * @param [in] e1 Error Vector of polynomials. + * @param [in] e2 Error polynomial. * @param [in] m Message polynomial. - * @param [in] kp Number of polynomials in vector. + * @param [in] k Number of polynomials in vector. */ -void kyber_encapsulate(const sword16* pub, sword16* bp, sword16* v, - const sword16* at, sword16* sp, const sword16* ep, const sword16* epp, - const sword16* m, int kp) +void kyber_encapsulate(const sword16* pub, sword16* u, sword16* v, + const sword16* a, sword16* y, const sword16* e1, const sword16* e2, + const sword16* m, int k) { #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { - kyber_encapsulate_avx2(pub, bp, v, at, sp, ep, epp, m, kp); + kyber_encapsulate_avx2(pub, u, v, a, y, e1, e2, m, k); RESTORE_VECTOR_REGISTERS(); } else #endif { - kyber_encapsulate_c(pub, bp, v, at, sp, ep, epp, m, kp); + kyber_encapsulate_c(pub, u, v, a, y, e1, e2, m, k); } } @@ -1504,73 +1729,73 @@ void kyber_encapsulate(const sword16* pub, sword16* bp, sword16* v, /* Encapsulate message. * - * @param [in] pub Public key vector of polynomials. - * @param [in] prf XOF object. - * @param [out] bp Vector of polynomials. - * @param [in, out] tp Polynomial. - * @param [in] sp Vector of polynomials. - * @param [in] kp Number of polynomials in vector. - * @param [in] msg Message to encapsulate. + * @param [in] pub Public key vector of polynomials. + * @param [in] prf XOF object. + * @param [out] u Vector of polynomials. + * @param [in, out] tp Polynomial. + * @param [in] y Vector of polynomials. + * @param [in] k Number of polynomials in vector. + * @param [in] msg Message to encapsulate. * @param [in] seed Random seed to generate matrix A from. * @param [in] coins Random seed to generate noise from. */ -int kyber_encapsulate_seeds(const sword16* pub, KYBER_PRF_T* prf, sword16* bp, - sword16* tp, sword16* sp, int kp, const byte* msg, byte* seed, byte* coins) +int kyber_encapsulate_seeds(const sword16* pub, KYBER_PRF_T* prf, sword16* u, + sword16* tp, sword16* y, int k, const byte* msg, byte* seed, byte* coins) { int ret = 0; int i; - sword16* at = tp; - sword16* ep = tp; + sword16* a = tp; + sword16* e1 = tp; sword16* v = tp; - sword16* epp = tp + KYBER_N; - sword16* m = sp; + sword16* e2 = tp + KYBER_N; + sword16* m = y; - /* Transform sp. All of result used in calculation of bp and v. */ - for (i = 0; i < kp; ++i) { - kyber_ntt(sp + i * KYBER_N); + /* Transform y. All of result used in calculation of u and v. */ + for (i = 0; i < k; ++i) { + kyber_ntt(y + i * KYBER_N); } /* For each polynomial in the vectors. */ - for (i = 0; i < kp; ++i) { + for (i = 0; i < k; ++i) { unsigned int j; /* Generate a vector of matrix A. */ - ret = kyber_gen_matrix_i(prf, at, kp, seed, i, 1); + ret = kyber_gen_matrix_i(prf, a, k, seed, i, 1); if (ret != 0) { break; } - /* Multiply at by sp into bp polynomial. */ - kyber_pointwise_acc_mont(bp + i * KYBER_N, at, sp, kp); - /* Inverse transform bp polynomial. */ - kyber_invntt(bp + i * KYBER_N); + /* Multiply at by y into u polynomial. */ + kyber_pointwise_acc_mont(u + i * KYBER_N, a, y, k); + /* Inverse transform u polynomial. */ + kyber_invntt(u + i * KYBER_N); /* Generate noise using PRF. */ - ret = kyber_get_noise_i(prf, kp, ep, coins, i, 0); + ret = kyber_get_noise_i(prf, k, e1, coins, i, 0); if (ret != 0) { break; } - /* Add errors to bp and reduce. */ + /* Add errors to u and reduce. */ for (j = 0; j < KYBER_N; ++j) { - sword16 t = bp[i * KYBER_N + j] + ep[j]; - bp[i * KYBER_N + j] = KYBER_BARRETT_RED(t); + sword16 t = u[i * KYBER_N + j] + e1[j]; + u[i * KYBER_N + j] = KYBER_BARRETT_RED(t); } } - /* Multiply public key by sp into v polynomial. */ - kyber_pointwise_acc_mont(v, pub, sp, kp); + /* Multiply public key by y into v polynomial. */ + kyber_pointwise_acc_mont(v, pub, y, k); /* Inverse transform v. */ kyber_invntt(v); kyber_from_msg(m, msg); /* Generate noise using PRF. */ - coins[KYBER_SYM_SZ] = 2 * kp; - ret = kyber_get_noise_eta2_c(prf, epp, coins); + coins[KYBER_SYM_SZ] = 2 * k; + ret = kyber_get_noise_eta2_c(prf, e2, coins); if (ret == 0) { /* Add errors and message to v and reduce. */ for (i = 0; i < KYBER_N; ++i) { - sword16 t = v[i] + epp[i] + m[i]; + sword16 t = v[i] + e2[i] + m[i]; tp[i] = KYBER_BARRETT_RED(t); } } @@ -1578,59 +1803,79 @@ int kyber_encapsulate_seeds(const sword16* pub, KYBER_PRF_T* prf, sword16* bp, return ret; } #endif +#endif /* !WOLFSSL_KYBER_NO_ENCAPSULATE || !WOLFSSL_KYBER_NO_DECAPSULATE */ + +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE /* Decapsulate message. * - * @param [in] priv Private key vector of polynomials. - * @param [out] mp Message polynomial. - * @param [in] bp Vector of polynomials containing error. - * @param [in] v Encapsulated message polynomial. - * @param [in] kp Number of polynomials in vector. + * FIPS 203, Algorithm 15: K-PKE.Decrypt(dk_PKE,c) + * Uses the decryption key to decrypt a ciphertext. + * ... + * 6: w <- v' - InvNTT(s_hat_trans o NTT(u')) + * ... + * + * @param [in] s Private key vector of polynomials. + * @param [out] w Message polynomial. + * @param [in] u Vector of polynomials containing error. + * @param [in] v Encapsulated message polynomial. + * @param [in] k Number of polynomials in vector. */ -static void kyber_decapsulate_c(const sword16* priv, sword16* mp, sword16* bp, - const sword16* v, int kp) +static void kyber_decapsulate_c(const sword16* s, sword16* w, sword16* u, + const sword16* v, int k) { int i; - /* Transform bp. All of result used in calculation of mp. */ - for (i = 0; i < kp; ++i) { - kyber_ntt(bp + i * KYBER_N); + /* Transform u. All of result used in calculation of w. + * Step 6: ... NTT(u') */ + for (i = 0; i < k; ++i) { + kyber_ntt(u + i * KYBER_N); } - /* Multiply private key by bp into mp polynomial. */ - kyber_pointwise_acc_mont(mp, priv, bp, kp); - /* Inverse transform mp. */ - kyber_invntt(mp); - /* Subtract errors (mp) out of v and reduce into mp. */ + /* Multiply private key by u into w polynomial. + * Step 6: ... s_hat_trans o NTT(u') */ + kyber_pointwise_acc_mont(w, s, u, k); + /* Inverse transform w. + * Step 6: ... InvNTT(s_hat_trans o NTT(u')) */ + kyber_invntt(w); + /* Subtract errors (in w) out of v and reduce into w. + * Step 6: w <- v' - InvNTT(s_hat_trans o NTT(u')) */ for (i = 0; i < KYBER_N; ++i) { - sword16 t = v[i] - mp[i]; - mp[i] = KYBER_BARRETT_RED(t); + sword16 t = v[i] - w[i]; + w[i] = KYBER_BARRETT_RED(t); } } /* Decapsulate message. * - * @param [in] priv Private key vector of polynomials. - * @param [out] mp Message polynomial. - * @param [in] bp Vector of polynomials containing error. - * @param [in] v Encapsulated message polynomial. - * @param [in] kp Number of polynomials in vector. + * FIPS 203, Algorithm 15: K-PKE.Decrypt(dk_PKE,c) + * Uses the decryption key to decrypt a ciphertext. + * ... + * 6: w <- v' - InvNTT(s_hat_trans o NTT(u')) + * ... + * + * @param [in] s Private key vector of polynomials. + * @param [out] w Message polynomial. + * @param [in] u Vector of polynomials containing error. + * @param [in] v Encapsulated message polynomial. + * @param [in] k Number of polynomials in vector. */ -void kyber_decapsulate(const sword16* priv, sword16* mp, sword16* bp, - const sword16* v, int kp) +void kyber_decapsulate(const sword16* s, sword16* w, sword16* u, + const sword16* v, int k) { #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { - kyber_decapsulate_avx2(priv, mp, bp, v, kp); + kyber_decapsulate_avx2(s, w, u, v, k); RESTORE_VECTOR_REGISTERS(); } else #endif { - kyber_decapsulate_c(priv, mp, bp, v, kp); + kyber_decapsulate_c(s, w, u, v, k); } } +#endif /* !WOLFSSL_KYBER_ NO_DECAPSULATE */ #endif /******************************************************************************/ @@ -2167,6 +2412,10 @@ static int kyber_gen_matrix_k4_aarch64(sword16* a, byte* seed, int transposed) #if !(defined(WOLFSSL_ARMASM) && defined(__aarch64__)) /* Absorb the seed data for squeezing out pseudo-random data. + * + * FIPS 203, Section 4.1: + * 1. XOF.init() = SHA128.Init(). + * 2. XOF.Absorb(ctx,str) = SHAKE128.Absorb(ctx,str). * * @param [in, out] shake128 SHAKE-128 object. * @param [in] seed Data to absorb. @@ -2186,6 +2435,9 @@ static int kyber_xof_absorb(wc_Shake* shake128, byte* seed, int len) } /* Squeeze the state to produce pseudo-random data. + * + * FIPS 203, Section 4.1: + * 3. XOF.Absorb(ctx,l) = SHAKE128.Squeeze(ctx,8.l). * * @param [in, out] shake128 SHAKE-128 object. * @param [out] out Buffer to write to. @@ -2199,6 +2451,9 @@ static int kyber_xof_squeezeblocks(wc_Shake* shake128, byte* out, int blocks) #endif /* New/Initialize SHA-3 object. + * + * FIPS 203, Section 4.1: + * H(s) := SHA3-256(s) * * @param [in, out] hash SHA-3 object. * @param [in] heap Dynamic memory allocator hint. @@ -2211,6 +2466,9 @@ int kyber_hash_new(wc_Sha3* hash, void* heap, int devId) } /* Free SHA-3 object. + * + * FIPS 203, Section 4.1: + * H(s) := SHA3-256(s) * * @param [in, out] hash SHA-3 object. */ @@ -2219,28 +2477,58 @@ void kyber_hash_free(wc_Sha3* hash) wc_Sha3_256_Free(hash); } +/* Hash data using SHA3-256 with SHA-3 object. + * + * FIPS 203, Section 4.1: + * H(s) := SHA3-256(s) + * + * @param [in, out] hash SHA-3 object. + * @param [io] data Data to be hashed. + * @param [in] dataLen Length of data in bytes. + * @param [out] out Hash of data. + * @return 0 on success. + */ int kyber_hash256(wc_Sha3* hash, const byte* data, word32 dataLen, byte* out) { int ret; + /* Process all data. */ ret = wc_Sha3_256_Update(hash, data, dataLen); if (ret == 0) { + /* Calculate Hash of data passed in an re-initialize. */ ret = wc_Sha3_256_Final(hash, out); } return ret; } +/* Hash one or two blocks of data using SHA3-512 with SHA-3 object. + * + * FIPS 203, Section 4.1: + * G(s) := SHA3-512(s) + * + * @param [in, out] hash SHA-3 object. + * @param [io] data1 First block of data to be hashed. + * @param [in] data1Len Length of first block of data in bytes. + * @param [io] data2 Second block of data to be hashed. May be NULL. + * @param [in] data2Len Length of second block of data in bytes. + * @param [out] out Hash of all data. + * @return 0 on success. + */ int kyber_hash512(wc_Sha3* hash, const byte* data1, word32 data1Len, const byte* data2, word32 data2Len, byte* out) { int ret; + /* Process first block of data. */ ret = wc_Sha3_512_Update(hash, data1, data1Len); + /* Check if there is a second block of data. */ if ((ret == 0) && (data2Len > 0)) { + /* Process second block of data. */ ret = wc_Sha3_512_Update(hash, data2, data2Len); } if (ret == 0) { + /* Calculate Hash of data passed in an re-initialize. */ ret = wc_Sha3_512_Final(hash, out); } @@ -2257,6 +2545,9 @@ void kyber_prf_init(wc_Shake* prf) } /* New/Initialize SHAKE-256 object. + * + * FIPS 203, Section 4.1: + * PRF_eta(s,b) := SHA256(s||b,8.64.eta) * * @param [in, out] shake256 SHAKE-256 object. * @param [in] heap Dynamic memory allocator hint. @@ -2269,6 +2560,9 @@ int kyber_prf_new(wc_Shake* prf, void* heap, int devId) } /* Free SHAKE-256 object. + * + * FIPS 203, Section 4.1: + * PRF_eta(s,b) := SHA256(s||b,8.64.eta) * * @param [in, out] shake256 SHAKE-256 object. */ @@ -2279,6 +2573,9 @@ void kyber_prf_free(wc_Shake* prf) #if !(defined(WOLFSSL_ARMASM) && defined(__aarch64__)) /* Create pseudo-random data from the key using SHAKE-256. + * + * FIPS 203, Section 4.1: + * PRF_eta(s,b) := SHA256(s||b,8.64.eta) * * @param [in, out] shake256 SHAKE-256 object. * @param [out] out Buffer to write to. @@ -2295,15 +2592,22 @@ static int kyber_prf(wc_Shake* shake256, byte* out, unsigned int outLen, (void)shake256; + /* Put first KYBER_SYM_SZ bytes og key into blank state. */ readUnalignedWords64(state, key, KYBER_SYM_SZ / sizeof(word64)); + /* Last byte in with end of content marker. */ state[KYBER_SYM_SZ / 8] = 0x1f00 | key[KYBER_SYM_SZ]; + /* Set rest of state to 0. */ XMEMSET(state + KYBER_SYM_SZ / 8 + 1, 0, (25 - KYBER_SYM_SZ / 8 - 1) * sizeof(word64)); + /* ... except for rate marker. */ state[WC_SHA3_256_COUNT - 1] = W64LIT(0x8000000000000000); + /* Generate as much output as is required. */ while (outLen > 0) { + /* Get as much of an output block as is needed. */ unsigned int len = min(outLen, WC_SHA3_256_BLOCK_SIZE); + /* Perform a block operation on the state for next block of output. */ if (IS_INTEL_BMI2(cpuid_flags)) { sha3_block_bmi2(state); } @@ -2315,7 +2619,10 @@ static int kyber_prf(wc_Shake* shake256, byte* out, unsigned int outLen, else { BlockSha3(state); } + + /* Copy the state as output. */ XMEMCPY(out, state, len); + /* Update output pointer and length. */ out += len; outLen -= len; } @@ -2324,8 +2631,10 @@ static int kyber_prf(wc_Shake* shake256, byte* out, unsigned int outLen, #else int ret; + /* Process all data. */ ret = wc_Shake256_Update(shake256, key, KYBER_SYM_SZ + 1); if (ret == 0) { + /* Calculate Hash of data passed in an re-initialize. */ ret = wc_Shake256_Final(shake256, out, outLen); } @@ -2334,6 +2643,7 @@ static int kyber_prf(wc_Shake* shake256, byte* out, unsigned int outLen, } #endif +#ifdef WOLFSSL_KYBER_ORIGINAL #ifdef USE_INTEL_SPEEDUP /* Create pseudo-random key from the seed using SHAKE-256. * @@ -2394,11 +2704,31 @@ int kyber_kdf(byte* seed, int seedLen, byte* out, int outLen) return 0; } #endif +#endif #if !defined(WOLFSSL_ARMASM) /* Rejection sampling on uniform random bytes to generate uniform random * integers mod q. * + * FIPS 203, Algorithm 7: SampleNTT(B) + * Takes a 32-byte seed and two indices as input and outputs a pseudorandom + * element of T_q. + * ... + * 4: while j < 256 do + * 5: (ctx,C) <- XOF.Squeeze(ctx,3) + * 6: d1 <- C[0] + 256.(C[1] mod 16) + * 7: d2 <- lower(C[1] / 16) + 16.C[2] + * 8: if d1 < q then + * 9: a_hat[j] <- d1 + * 10: j <- j + 1 + * 11: end if + * 12: if d2 < q and j < 256 then + * 13: a_hat[j] <- d2 + * 14: j <- j + 1 + * 15: end if + * 16: end while + * ... + * * @param [out] p Uniform random integers mod q. * @param [in] len Maximum number of integers. * @param [in] r Uniform random bytes buffer. @@ -2413,19 +2743,26 @@ static unsigned int kyber_rej_uniform_c(sword16* p, unsigned int len, #if defined(WOLFSSL_KYBER_SMALL) || !defined(WC_64BIT_CPU) /* Keep sampling until maximum number of integers reached or buffer used up. - */ + * Step 4. */ for (i = 0, j = 0; (i < len) && (j <= rLen - 3); j += 3) { + /* Step 5 - caller generates and now using 3 bytes of it. */ /* Use 24 bits (3 bytes) as two 12 bits integers. */ + /* Step 6. */ sword16 v0 = ((r[0] >> 0) | ((word16)r[1] << 8)) & 0xFFF; + /* Step 7. */ sword16 v1 = ((r[1] >> 4) | ((word16)r[2] << 4)) & 0xFFF; - /* Reject first 12-bit integer if greater than or equal to q. */ + /* Reject first 12-bit integer if greater than or equal to q. + * Step 8 */ if (v0 < KYBER_Q) { + /* Steps 9-10 */ p[i++] = v0; } /* Check second if we don't have enough integers yet. - * Reject second 12-bit integer if greater than or equal to q. */ + * Reject second 12-bit integer if greater than or equal to q. + * Step 12 */ if ((i < len) && (v1 < KYBER_Q)) { + /* Steps 13-14 */ p[i++] = v1; } @@ -2433,8 +2770,11 @@ static unsigned int kyber_rej_uniform_c(sword16* p, unsigned int len, r += 3; } #else + /* Unroll loops. Minimal work per loop. */ unsigned int minJ; + /* Calculate minimum number of 6 byte data blocks to get all required + * numbers assuming no rejections. */ minJ = len / 4 * 6; if (minJ > rLen) minJ = rLen; @@ -2447,19 +2787,22 @@ static unsigned int kyber_rej_uniform_c(sword16* p, unsigned int len, sword16 v2 = (r_word >> 24) & 0xfff; sword16 v3 = (r_word >> 36) & 0xfff; - p[i] = v0 & (0 - (v0 < KYBER_Q)); - i += v0 < KYBER_Q; - p[i] = v1 & (0 - (v1 < KYBER_Q)); - i += v1 < KYBER_Q; - p[i] = v2 & (0 - (v2 < KYBER_Q)); - i += v2 < KYBER_Q; - p[i] = v3 & (0 - (v3 < KYBER_Q)); - i += v3 < KYBER_Q; + p[i] = v0; + i += (v0 < KYBER_Q); + p[i] = v1; + i += (v1 < KYBER_Q); + p[i] = v2; + i += (v2 < KYBER_Q); + p[i] = v3; + i += (v3 < KYBER_Q); /* Move over used bytes. */ r += 6; } + /* Check whether we have all the numbers we need. */ if (j < rLen) { + /* Keep trying until we have less than 4 numbers to find or data is used + * up. */ for (; (i + 4 < len) && (j < rLen); j += 6) { /* Use 48 bits (6 bytes) as four 12-bit integers. */ word64 r_word = readUnalignedWord64(r); @@ -2469,17 +2812,19 @@ static unsigned int kyber_rej_uniform_c(sword16* p, unsigned int len, sword16 v3 = (r_word >> 36) & 0xfff; p[i] = v0; - i += v0 < KYBER_Q; + i += (v0 < KYBER_Q); p[i] = v1; - i += v1 < KYBER_Q; + i += (v1 < KYBER_Q); p[i] = v2; - i += v2 < KYBER_Q; + i += (v2 < KYBER_Q); p[i] = v3; - i += v3 < KYBER_Q; + i += (v3 < KYBER_Q); /* Move over used bytes. */ r += 6; } + /* Keep trying until we have all the numbers we need or the data is used + * up. */ for (; (i < len) && (j < rLen); j += 6) { /* Use 48 bits (6 bytes) as four 12-bit integers. */ word64 r_word = readUnalignedWord64(r); @@ -2526,16 +2871,44 @@ static unsigned int kyber_rej_uniform_c(sword16* p, unsigned int len, * * Seed used with XOF to generate random bytes. * + * FIPS 203, Algorithm 13: K-PKE.KeyGen(d) + * ... + * 3: for (i <- 0; i < k; i++) + * 4: for (j <- 0; j < k; j++) + * 5: A_hat[i,j] <- SampleNTT(rho||j||i) + * 6: end for + * 7: end for + * ... + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE,m,r) + * ... + * 4: for (i <- 0; i < k; i++) + * 5: for (j <- 0; j < k; j++) + * 6: A_hat[i,j] <- SampleNTT(rho||j||i) (Transposed is rho||i||j) + * 7: end for + * 8: end for + * ... + * FIPS 203, Algorithm 7: SampleNTT(B) + * Takes a 32-byte seed and two indices as input and outputs a pseudorandom + * element of T_q. + * 1: ctx <- XOF.init() + * 2: ctx <- XOF.Absorb(ctx,B) + * 3: j <- 0 + * 4: while j < 256 do + * 5: (ctx,C) <- XOF.Squeeze(ctx,3) + * ... + * 16: end while + * 17: return a_hat + * * @param [in] prf XOF object. * @param [out] a Matrix of uniform integers. - * @param [in] kp Number of dimensions. kp x kp polynomials. + * @param [in] k Number of dimensions. k x k polynomials. * @param [in] seed Bytes to seed XOF generation. * @param [in] transposed Whether A or A^T is generated. * @return 0 on success. * @return MEMORY_E when dynamic memory allocation fails. Only possible when * WOLFSSL_SMALL_STACK is defined. */ -static int kyber_gen_matrix_c(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, +static int kyber_gen_matrix_c(KYBER_PRF_T* prf, sword16* a, int k, byte* seed, int transposed) { #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) @@ -2547,6 +2920,7 @@ static int kyber_gen_matrix_c(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, int ret = 0; int i; + /* Copy seed into buffer than has space for i and j to be appended. */ XMEMCPY(extSeed, seed, KYBER_SYM_SZ); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) @@ -2565,34 +2939,46 @@ static int kyber_gen_matrix_c(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, } #endif - /* Generate each vector of polynomials. */ - for (i = 0; (ret == 0) && (i < kp); i++, a += kp * KYBER_N) { + /* Generate each vector of polynomials. + * Alg 13, Step 3. Alg 14, Step 4. */ + for (i = 0; (ret == 0) && (i < k); i++, a += k * KYBER_N) { int j; - /* Generate each polynomial in vector from seed with indices. */ - for (j = 0; (ret == 0) && (j < kp); j++) { + /* Generate each polynomial in vector from seed with indices. + * Alg 13, Step 4. Alg 14, Step 5. */ + for (j = 0; (ret == 0) && (j < k); j++) { if (transposed) { + /* Alg 14, Step 6: .. rho||i||j ... */ extSeed[KYBER_SYM_SZ + 0] = i; extSeed[KYBER_SYM_SZ + 1] = j; } else { + /* Alg 13, Step 5: .. rho||j||i ... */ extSeed[KYBER_SYM_SZ + 0] = j; extSeed[KYBER_SYM_SZ + 1] = i; } - /* Absorb the index specific seed. */ + /* Absorb the index specific seed. + * Alg 7, Step 1-2 */ ret = kyber_xof_absorb(prf, extSeed, sizeof(extSeed)); if (ret == 0) { - /* Create out based on the seed. */ + /* Create data based on the seed. + * Alg 7, Step 5. Generating enough to, on average, be able to + * get enough valid values. */ ret = kyber_xof_squeezeblocks(prf, rand, GEN_MATRIX_NBLOCKS); } if (ret == 0) { unsigned int ctr; - /* Sample random bytes to create a polynomial. */ + /* Sample random bytes to create a polynomial. + * Alg 7, Step 3 - implicitly counter is 0. + * Alg 7, Step 4-16. */ ctr = kyber_rej_uniform_c(a + j * KYBER_N, KYBER_N, rand, GEN_MATRIX_SIZE); - /* Create more blocks if too many rejected. */ + /* Create more blocks if too many rejected. + * Alg 7, Step 4. */ while (ctr < KYBER_N) { + /* Alg 7, Step 5. */ kyber_xof_squeezeblocks(prf, rand, 1); + /* Alg 7, Step 4-16. */ ctr += kyber_rej_uniform_c(a + j * KYBER_N + ctr, KYBER_N - ctr, rand, XOF_BLOCK_SIZE); } @@ -2613,22 +2999,25 @@ static int kyber_gen_matrix_c(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, * * Seed used with XOF to generate random bytes. * + * FIPS 203, Algorithm 13: K-PKE.KeyGen(d), Steps 3-7 + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE,m,r), Steps 4-8 + * * @param [in] prf XOF object. * @param [out] a Matrix of uniform integers. - * @param [in] kp Number of dimensions. kp x kp polynomials. + * @param [in] k Number of dimensions. k x k polynomials. * @param [in] seed Bytes to seed XOF generation. * @param [in] transposed Whether A or A^T is generated. * @return 0 on success. * @return MEMORY_E when dynamic memory allocation fails. Only possible when * WOLFSSL_SMALL_STACK is defined. */ -int kyber_gen_matrix(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, +int kyber_gen_matrix(KYBER_PRF_T* prf, sword16* a, int k, byte* seed, int transposed) { int ret; #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) - if (kp == KYBER512_K) { + if (k == KYBER512_K) { #if defined(WOLFSSL_ARMASM) && defined(__aarch64__) ret = kyber_gen_matrix_k2_aarch64(a, seed, transposed); #else @@ -2647,7 +3036,7 @@ int kyber_gen_matrix(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, else #endif #if defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) - if (kp == KYBER768_K) { + if (k == KYBER768_K) { #if defined(WOLFSSL_ARMASM) && defined(__aarch64__) ret = kyber_gen_matrix_k3_aarch64(a, seed, transposed); #else @@ -2666,7 +3055,7 @@ int kyber_gen_matrix(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, else #endif #if defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) - if (kp == KYBER1024_K) { + if (k == KYBER1024_K) { #if defined(WOLFSSL_ARMASM) && defined(__aarch64__) ret = kyber_gen_matrix_k4_aarch64(a, seed, transposed); #else @@ -2702,9 +3091,22 @@ int kyber_gen_matrix(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, * * Seed used with XOF to generate random bytes. * + * FIPS 203, Algorithm 13: K-PKE.KeyGen(d) + * ... + * 4: for (j <- 0; j < k; j++) + * 5: A_hat[i,j] <- SampleNTT(rho||j||i) + * 6: end for + * ... + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE,m,r) + * ... + * 5: for (j <- 0; j < k; j++) + * 6: A_hat[i,j] <- SampleNTT(rho||j||i) (Transposed is rho||i||j) + * 7: end for + * ... + * * @param [in] prf XOF object. * @param [out] a Matrix of uniform integers. - * @param [in] kp Number of dimensions. kp x kp polynomials. + * @param [in] k Number of dimensions. k x k polynomials. * @param [in] seed Bytes to seed XOF generation. * @param [in] i Index of vector to generate. * @param [in] transposed Whether A or A^T is generated. @@ -2712,7 +3114,7 @@ int kyber_gen_matrix(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, * @return MEMORY_E when dynamic memory allocation fails. Only possible when * WOLFSSL_SMALL_STACK is defined. */ -static int kyber_gen_matrix_i(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, +static int kyber_gen_matrix_i(KYBER_PRF_T* prf, sword16* a, int k, byte* seed, int i, int transposed) { #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) @@ -2742,31 +3144,42 @@ static int kyber_gen_matrix_i(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, } #endif - /* Generate each polynomial in vector from seed with indices. */ - for (j = 0; (ret == 0) && (j < kp); j++) { + /* Generate each polynomial in vector from seed with indices. + * Alg 13, Step 4. Alg 14, Step 5. */ + for (j = 0; (ret == 0) && (j < k); j++) { if (transposed) { + /* Alg 14, Step 6: .. rho||i||j ... */ extSeed[KYBER_SYM_SZ + 0] = i; extSeed[KYBER_SYM_SZ + 1] = j; } else { + /* Alg 13, Step 5: .. rho||j||i ... */ extSeed[KYBER_SYM_SZ + 0] = j; extSeed[KYBER_SYM_SZ + 1] = i; } - /* Absorb the index specific seed. */ + /* Absorb the index specific seed. + * Alg 7, Step 1-2 */ ret = kyber_xof_absorb(prf, extSeed, sizeof(extSeed)); if (ret == 0) { - /* Create out based on the seed. */ + /* Create out based on the seed. + * Alg 7, Step 5. Generating enough to, on average, be able to get + * enough valid values. */ ret = kyber_xof_squeezeblocks(prf, rand, GEN_MATRIX_NBLOCKS); } if (ret == 0) { unsigned int ctr; - /* Sample random bytes to create a polynomial. */ + /* Sample random bytes to create a polynomial. + * Alg 7, Step 3 - implicitly counter is 0. + * Alg 7, Step 4-16. */ ctr = kyber_rej_uniform_c(a + j * KYBER_N, KYBER_N, rand, GEN_MATRIX_SIZE); - /* Create more blocks if too many rejected. */ + /* Create more blocks if too many rejected. + * Alg 7, Step 4. */ while (ctr < KYBER_N) { + /* Alg 7, Step 5. */ kyber_xof_squeezeblocks(prf, rand, 1); + /* Alg 7, Step 4-16. */ ctr += kyber_rej_uniform_c(a + j * KYBER_N + ctr, KYBER_N - ctr, rand, XOF_BLOCK_SIZE); } @@ -2787,6 +3200,10 @@ static int kyber_gen_matrix_i(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, /******************************************************************************/ /* Subtract one 2 bit value from another out of a larger number. + * + * FIPS 203, Algorithm 8: SmaplePolyCBD_eta(B) + * Takes a seed as input and outputs a pseudorandom sample from the distribution + * D_eta(R_q). * * @param [in] d Value containing sequential 2 bit values. * @param [in] i Start index of the two values in 2 bits each. @@ -2799,6 +3216,10 @@ static int kyber_gen_matrix_i(KYBER_PRF_T* prf, sword16* a, int kp, byte* seed, /* Compute polynomial with coefficients distributed according to a centered * binomial distribution with parameter eta2 from uniform random bytes. * + * FIPS 203, Algorithm 8: SmaplePolyCBD_eta(B) + * Takes a seed as input and outputs a pseudorandom sample from the distribution + * D_eta(R_q). + * * @param [out] p Polynomial computed. * @param [in] r Random bytes. */ @@ -2895,6 +3316,10 @@ static void kyber_cbd_eta2(sword16* p, const byte* r) #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) /* Subtract one 3 bit value from another out of a larger number. + * + * FIPS 203, Algorithm 8: SmaplePolyCBD_eta(B) + * Takes a seed as input and outputs a pseudorandom sample from the distribution + * D_eta(R_q). * * @param [in] d Value containing sequential 3 bit values. * @param [in] i Start index of the two values in 3 bits each. @@ -2907,6 +3332,10 @@ static void kyber_cbd_eta2(sword16* p, const byte* r) /* Compute polynomial with coefficients distributed according to a centered * binomial distribution with parameter eta3 from uniform random bytes. * + * FIPS 203, Algorithm 8: SmaplePolyCBD_eta(B) + * Takes a seed as input and outputs a pseudorandom sample from the distribution + * D_eta(R_q). + * * @param [out] p Polynomial computed. * @param [in] r Random bytes. */ @@ -3050,6 +3479,17 @@ static void kyber_cbd_eta3(sword16* p, const byte* r) /* Get noise/error by calculating random bytes and sampling to a binomial * distribution. * + * FIPS 203, Algorithm 13: K-PKE.KeyGen(d) + * ... + * 9: s[i] <- SamplePolyCBD_eta_1(PRF_eta_1(rho, N)) + * ... + * 13: e[i] <- SamplePolyCBD_eta_1(PRF_eta_1(rho, N)) + * ... + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE,m,r) + * ... + * 10: y[i] <- SamplePolyCBD_eta_1(PRF_eta_1(r, N)) + * ... + * * @param [in, out] prf Pseudo-random function object. * @param [out] p Polynomial. * @param [in] seed Seed to use when calculating random. @@ -3093,6 +3533,13 @@ static int kyber_get_noise_eta1_c(KYBER_PRF_T* prf, sword16* p, /* Get noise/error by calculating random bytes and sampling to a binomial * distribution. Values -2..2 * + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE,m,r) + * ... + * 14: e1[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... + * 17: e2[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... + * * @param [in, out] prf Pseudo-random function object. * @param [out] p Polynomial. * @param [in] seed Seed to use when calculating random. @@ -3121,6 +3568,13 @@ static int kyber_get_noise_eta2_c(KYBER_PRF_T* prf, sword16* p, #if defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) || \ defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) /* Get the noise/error by calculating random bytes. + * + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE,m,r) + * ... + * 14: e1[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... + * 17: e2[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... * * @param [out] rand Random number byte array. * @param [in] seed Seed to generate random from. @@ -3144,6 +3598,13 @@ static void kyber_get_noise_x4_eta2_avx2(byte* rand, byte* seed, byte o) #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) /* Get the noise/error by calculating random bytes. + * + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE,m,r) + * ... + * 14: e1[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... + * 17: e2[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... * * @param [out] rand Random number byte array. * @param [in] seed Seed to generate random from. @@ -3173,6 +3634,13 @@ static void kyber_get_noise_x4_eta3_avx2(byte* rand, byte* seed) /* Get noise/error by calculating random bytes and sampling to a binomial * distribution. Values -2..2 * + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE,m,r) + * ... + * 14: e1[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... + * 17: e2[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... + * * @param [in, out] prf Pseudo-random function object. * @param [out] p Polynomial. * @param [in] seed Seed to use when calculating random. @@ -3290,7 +3758,7 @@ static int kyber_get_noise_k4_avx2(KYBER_PRF_T* prf, sword16* vec1, kyber_cbd_eta2_avx2(vec2 + 3 * KYBER_N, rand + 3 * ETA2_RAND_SIZE); if (poly != NULL) { seed[KYBER_SYM_SZ] = 8; - ret = kyber_get_noise_eta2_c(prf, poly, seed); + ret = kyber_get_noise_eta2_avx2(prf, poly, seed); } return ret; @@ -3303,6 +3771,13 @@ static int kyber_get_noise_k4_avx2(KYBER_PRF_T* prf, sword16* vec1, #define PRF_RAND_SZ (2 * SHA3_256_BYTES) /* Get the noise/error by calculating random bytes. + * + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE,m,r) + * ... + * 14: e1[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... + * 17: e2[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... * * @param [out] rand Random number byte array. * @param [in] seed Seed to generate random from. @@ -3321,6 +3796,13 @@ static void kyber_get_noise_x3_eta2_aarch64(byte* rand, byte* seed, byte o) #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) /* Get the noise/error by calculating random bytes. + * + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE,m,r) + * ... + * 14: e1[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... + * 17: e2[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... * * @param [out] rand Random number byte array. * @param [in] seed Seed to generate random from. @@ -3349,6 +3831,13 @@ static void kyber_get_noise_x3_eta3_aarch64(byte* rand, byte* seed, byte o) } /* Get the noise/error by calculating random bytes. + * + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE,m,r) + * ... + * 14: e1[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... + * 17: e2[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... * * @param [out] rand Random number byte array. * @param [in] seed Seed to generate random from. @@ -3408,6 +3897,13 @@ static int kyber_get_noise_k2_aarch64(sword16* vec1, sword16* vec2, #if defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) /* Get the noise/error by calculating random bytes. + * + * FIPS 203, Algorithm 14: K-PKE.Encrypt(ek_PKE,m,r) + * ... + * 14: e1[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... + * 17: e2[i] <- SamplePolyCBD_eta_2(PRF_eta_2(r, N)) + * ... * * @param [out] rand Random number byte array. * @param [in] seed Seed to generate random from. @@ -3502,7 +3998,7 @@ static int kyber_get_noise_k4_aarch64(sword16* vec1, sword16* vec2, * distribution. * * @param [in, out] prf Pseudo-random function object. - * @param [in] kp Number of polynomials in vector. + * @param [in] k Number of polynomials in vector. * @param [out] vec1 First Vector of polynomials. * @param [in] eta1 Size of noise/error integers with first vector. * @param [out] vec2 Second Vector of polynomials. @@ -3511,7 +4007,7 @@ static int kyber_get_noise_k4_aarch64(sword16* vec1, sword16* vec2, * @param [in] seed Seed to use when calculating random. * @return 0 on success. */ -static int kyber_get_noise_c(KYBER_PRF_T* prf, int kp, sword16* vec1, int eta1, +static int kyber_get_noise_c(KYBER_PRF_T* prf, int k, sword16* vec1, int eta1, sword16* vec2, int eta2, sword16* poly, byte* seed) { int ret = 0; @@ -3520,7 +4016,7 @@ static int kyber_get_noise_c(KYBER_PRF_T* prf, int kp, sword16* vec1, int eta1, /* First noise generation has a seed with 0x00 appended. */ seed[KYBER_SYM_SZ] = 0; /* Generate noise as private key. */ - for (i = 0; (ret == 0) && (i < kp); i++) { + for (i = 0; (ret == 0) && (i < k); i++) { /* Generate noise for each dimension of vector. */ ret = kyber_get_noise_eta1_c(prf, vec1 + i * KYBER_N, seed, eta1); /* Increment value of appended byte. */ @@ -3528,7 +4024,7 @@ static int kyber_get_noise_c(KYBER_PRF_T* prf, int kp, sword16* vec1, int eta1, } if ((ret == 0) && (vec2 != NULL)) { /* Generate noise for error. */ - for (i = 0; (ret == 0) && (i < kp); i++) { + for (i = 0; (ret == 0) && (i < k); i++) { /* Generate noise for each dimension of vector. */ ret = kyber_get_noise_eta1_c(prf, vec2 + i * KYBER_N, seed, eta2); /* Increment value of appended byte. */ @@ -3536,7 +4032,7 @@ static int kyber_get_noise_c(KYBER_PRF_T* prf, int kp, sword16* vec1, int eta1, } } else { - seed[KYBER_SYM_SZ] = 2 * kp; + seed[KYBER_SYM_SZ] = 2 * k; } if ((ret == 0) && (poly != NULL)) { /* Generating random error polynomial. */ @@ -3552,20 +4048,20 @@ static int kyber_get_noise_c(KYBER_PRF_T* prf, int kp, sword16* vec1, int eta1, * distribution. * * @param [in, out] prf Pseudo-random function object. - * @param [in] kp Number of polynomials in vector. + * @param [in] k Number of polynomials in vector. * @param [out] vec1 First Vector of polynomials. * @param [out] vec2 Second Vector of polynomials. * @param [out] poly Polynomial. * @param [in] seed Seed to use when calculating random. * @return 0 on success. */ -int kyber_get_noise(KYBER_PRF_T* prf, int kp, sword16* vec1, - sword16* vec2, sword16* poly, byte* seed) +int kyber_get_noise(KYBER_PRF_T* prf, int k, sword16* vec1, sword16* vec2, + sword16* poly, byte* seed) { int ret; #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) - if (kp == KYBER512_K) { + if (k == KYBER512_K) { #if defined(WOLFSSL_ARMASM) && defined(__aarch64__) ret = kyber_get_noise_k2_aarch64(vec1, vec2, poly, seed); #else @@ -3577,11 +4073,11 @@ int kyber_get_noise(KYBER_PRF_T* prf, int kp, sword16* vec1, else #endif if (poly == NULL) { - ret = kyber_get_noise_c(prf, kp, vec1, KYBER_CBD_ETA3, vec2, + ret = kyber_get_noise_c(prf, k, vec1, KYBER_CBD_ETA3, vec2, KYBER_CBD_ETA3, NULL, seed); } else { - ret = kyber_get_noise_c(prf, kp, vec1, KYBER_CBD_ETA3, vec2, + ret = kyber_get_noise_c(prf, k, vec1, KYBER_CBD_ETA3, vec2, KYBER_CBD_ETA2, poly, seed); } #endif @@ -3589,7 +4085,7 @@ int kyber_get_noise(KYBER_PRF_T* prf, int kp, sword16* vec1, else #endif #if defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) - if (kp == KYBER768_K) { + if (k == KYBER768_K) { #if defined(WOLFSSL_ARMASM) && defined(__aarch64__) ret = kyber_get_noise_k3_aarch64(vec1, vec2, poly, seed); #else @@ -3601,7 +4097,7 @@ int kyber_get_noise(KYBER_PRF_T* prf, int kp, sword16* vec1, else #endif { - ret = kyber_get_noise_c(prf, kp, vec1, KYBER_CBD_ETA2, vec2, + ret = kyber_get_noise_c(prf, k, vec1, KYBER_CBD_ETA2, vec2, KYBER_CBD_ETA2, poly, seed); } #endif @@ -3609,7 +4105,7 @@ int kyber_get_noise(KYBER_PRF_T* prf, int kp, sword16* vec1, else #endif #if defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) - if (kp == KYBER1024_K) { + if (k == KYBER1024_K) { #if defined(WOLFSSL_ARMASM) && defined(__aarch64__) ret = kyber_get_noise_k4_aarch64(vec1, vec2, poly, seed); #else @@ -3621,7 +4117,7 @@ int kyber_get_noise(KYBER_PRF_T* prf, int kp, sword16* vec1, else #endif { - ret = kyber_get_noise_c(prf, kp, vec1, KYBER_CBD_ETA2, vec2, + ret = kyber_get_noise_c(prf, k, vec1, KYBER_CBD_ETA2, vec2, KYBER_CBD_ETA2, poly, seed); } #endif @@ -3643,14 +4139,14 @@ int kyber_get_noise(KYBER_PRF_T* prf, int kp, sword16* vec1, * distribution. * * @param [in, out] prf Pseudo-random function object. - * @param [in] kp Number of polynomials in vector. + * @param [in] k Number of polynomials in vector. * @param [out] vec2 Second Vector of polynomials. * @param [in] seed Seed to use when calculating random. * @param [in] i Index of vector to generate. * @param [in] make Indicates generation is for making a key. * @return 0 on success. */ -static int kyber_get_noise_i(KYBER_PRF_T* prf, int kp, sword16* vec2, +static int kyber_get_noise_i(KYBER_PRF_T* prf, int k, sword16* vec2, byte* seed, int i, int make) { int ret; @@ -3660,9 +4156,9 @@ static int kyber_get_noise_i(KYBER_PRF_T* prf, int kp, sword16* vec2, kyber_prf_init(prf); /* Set index of polynomial of second vector into seed. */ - seed[KYBER_SYM_SZ] = kp + i; + seed[KYBER_SYM_SZ] = k + i; #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) - if ((kp == KYBER512_K) && make) { + if ((k == KYBER512_K) && make) { ret = kyber_get_noise_eta1_c(prf, vec2, seed, KYBER_CBD_ETA3); } else @@ -3735,6 +4231,8 @@ int kyber_cmp(const byte* a, const byte* b, int sz) #if !defined(WOLFSSL_ARMASM) /* Conditional subtraction of q to each coefficient of a polynomial. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [in, out] p Polynomial. */ @@ -3751,14 +4249,32 @@ static KYBER_NOINLINE void kyber_csubq_c(sword16* p) #elif defined(__aarch64__) +/* Conditional subtraction of q to each coefficient of a polynomial. + * + * FIPS 203, Section 4.2.1, Compression and decompression + * + * @param [in, out] p Polynomial. + */ #define kyber_csubq_c kyber_csubq_neon #elif defined(WOLFSSL_ARMASM_THUMB2) +/* Conditional subtraction of q to each coefficient of a polynomial. + * + * FIPS 203, Section 4.2.1, Compression and decompression + * + * @param [in, out] p Polynomial. + */ #define kyber_csubq_c kyber_thumb2_csubq #else +/* Conditional subtraction of q to each coefficient of a polynomial. + * + * FIPS 203, Section 4.2.1, Compression and decompression + * + * @param [in, out] p Polynomial. + */ #define kyber_csubq_c kyber_arm32_csubq #endif @@ -3771,6 +4287,8 @@ static KYBER_NOINLINE void kyber_csubq_c(sword16* p) * * Uses div operator that may be slow. * + * FIPS 203, Section 4.2.1, Compression and decompression + * * @param [in] v Vector of polynomials. * @param [in] i Index of polynomial in vector. * @param [in] j Index into polynomial. @@ -3786,6 +4304,8 @@ static KYBER_NOINLINE void kyber_csubq_c(sword16* p) * * Uses mul instead of div. * + * FIPS 203, Section 4.2.1, Compression and decompression + * * @param [in] v Vector of polynomials. * @param [in] i Index of polynomial in vector. * @param [in] j Index into polynomial. @@ -3799,6 +4319,8 @@ static KYBER_NOINLINE void kyber_csubq_c(sword16* p) * * Uses mul instead of div. * + * FIPS 203, Section 4.2.1, Compression and decompression + * * @param [in] v Vector of polynomials. * @param [in] i Index of polynomial in vector. * @param [in] j Index into polynomial. @@ -3832,6 +4354,8 @@ static KYBER_NOINLINE void kyber_csubq_c(sword16* p) * * Uses mul instead of div. * + * FIPS 203, Section 4.2.1, Compression and decompression + * * @param [in] v Vector of polynomials. * @param [in] i Index of polynomial in vector. * @param [in] j Index into polynomial. @@ -3846,6 +4370,8 @@ static KYBER_NOINLINE void kyber_csubq_c(sword16* p) * Uses mul instead of div. * Only works for values in range: 0..3228 * + * FIPS 203, Section 4.2.1, Compression and decompression + * * @param [in] v Vector of polynomials. * @param [in] i Index of polynomial in vector. * @param [in] j Index into polynomial. @@ -3857,37 +4383,41 @@ static KYBER_NOINLINE void kyber_csubq_c(sword16* p) #endif /* CONV_WITH_DIV */ +#if !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) || \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) || \ defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) /* Compress the vector of polynomials into a byte array with 10 bits each. * - * @param [out] b Array of bytes. - * @param [in] v Vector of polynomials. - * @param [in] kp Number of polynomials in vector. + * FIPS 203, Section 4.2.1, Compression and decompression + * + * @param [out] b Array of bytes. + * @param [in] v Vector of polynomials. + * @param [in] k Number of polynomials in vector. */ -static void kyber_vec_compress_10_c(byte* r, sword16* v, unsigned int kp) +static void kyber_vec_compress_10_c(byte* r, sword16* v, unsigned int k) { unsigned int i; unsigned int j; - for (i = 0; i < kp; i++) { + for (i = 0; i < k; i++) { /* Reduce each coefficient to mod q. */ kyber_csubq_c(v + i * KYBER_N); /* All values are now positive. */ } /* Each polynomial. */ - for (i = 0; i < kp; i++) { + for (i = 0; i < k; i++) { #if defined(WOLFSSL_SMALL_STACK) || defined(WOLFSSL_KYBER_NO_LARGE_CODE) || \ defined(BIG_ENDIAN_ORDER) /* Each 4 polynomial coefficients. */ for (j = 0; j < KYBER_N; j += 4) { #ifdef WOLFSSL_KYBER_SMALL - unsigned int k; + unsigned int l; sword16 t[4]; /* Compress four polynomial values to 10 bits each. */ - for (k = 0; k < 4; k++) { - t[k] = TO_COMP_WORD_10(v, i, j, k); + for (l = 0; l < 4; l++) { + t[l] = TO_COMP_WORD_10(v, i, j, l); } /* Pack four 10-bit values into byte array. */ @@ -3957,27 +4487,31 @@ static void kyber_vec_compress_10_c(byte* r, sword16* v, unsigned int kp) /* Compress the vector of polynomials into a byte array with 10 bits each. * - * @param [out] b Array of bytes. - * @param [in] v Vector of polynomials. - * @param [in] kp Number of polynomials in vector. + * FIPS 203, Section 4.2.1, Compression and decompression + * + * @param [out] b Array of bytes. + * @param [in] v Vector of polynomials. + * @param [in] k Number of polynomials in vector. */ -void kyber_vec_compress_10(byte* r, sword16* v, unsigned int kp) +void kyber_vec_compress_10(byte* r, sword16* v, unsigned int k) { #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { - kyber_compress_10_avx2(r, v, kp); + kyber_compress_10_avx2(r, v, k); RESTORE_VECTOR_REGISTERS(); } else #endif { - kyber_vec_compress_10_c(r, v, kp); + kyber_vec_compress_10_c(r, v, k); } } #endif #if defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) /* Compress the vector of polynomials into a byte array with 11 bits each. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [out] b Array of bytes. * @param [in] v Vector of polynomials. @@ -4051,6 +4585,8 @@ static void kyber_vec_compress_11_c(byte* r, sword16* v) } /* Compress the vector of polynomials into a byte array with 11 bits each. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [out] b Array of bytes. * @param [in] v Vector of polynomials. @@ -4069,8 +4605,12 @@ void kyber_vec_compress_11(byte* r, sword16* v) } } #endif +#endif /* !WOLFSSL_KYBER_NO_ENCAPSULATE || !WOLFSSL_KYBER_NO_DECAPSULATE */ +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE /* Decompress a 10 bit value. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [in] v Vector of polynomials. * @param [in] i Index of polynomial in vector. @@ -4084,6 +4624,8 @@ void kyber_vec_compress_11(byte* r, sword16* v) (word16)((((word32)((t) & 0x3ff) * KYBER_Q) + 512) >> 10) /* Decompress an 11 bit value. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [in] v Vector of polynomials. * @param [in] i Index of polynomial in vector. @@ -4100,21 +4642,22 @@ void kyber_vec_compress_11(byte* r, sword16* v) defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) /* Decompress the byte array of packed 10 bits into vector of polynomials. * - * @param [out] v Vector of polynomials. - * @param [in] b Array of bytes. - * @param [in] kp Number of polynomials in vector. + * FIPS 203, Section 4.2.1, Compression and decompression + * + * @param [out] v Vector of polynomials. + * @param [in] b Array of bytes. + * @param [in] k Number of polynomials in vector. */ -static void kyber_vec_decompress_10_c(sword16* v, const unsigned char* b, - unsigned int kp) +static void kyber_vec_decompress_10_c(sword16* v, const byte* b, unsigned int k) { unsigned int i; unsigned int j; #ifdef WOLFSSL_KYBER_SMALL - unsigned int k; + unsigned int l; #endif /* Each polynomial. */ - for (i = 0; i < kp; i++) { + for (i = 0; i < k; i++) { /* Each 4 polynomial coefficients. */ for (j = 0; j < KYBER_N / 4; j++) { #ifdef WOLFSSL_KYBER_SMALL @@ -4127,8 +4670,8 @@ static void kyber_vec_decompress_10_c(sword16* v, const unsigned char* b, b += 5; /* Decompress 4 values. */ - for (k = 0; k < 4; k++) { - DECOMP_10(v, i, j, k, t[k]); + for (l = 0; l < 4; l++) { + DECOMP_10(v, i, j, l, t[l]); } #else /* Extract out 4 values of 10 bits each. */ @@ -4150,37 +4693,40 @@ static void kyber_vec_decompress_10_c(sword16* v, const unsigned char* b, /* Decompress the byte array of packed 10 bits into vector of polynomials. * - * @param [out] v Vector of polynomials. - * @param [in] b Array of bytes. - * @param [in] kp Number of polynomials in vector. + * FIPS 203, Section 4.2.1, Compression and decompression + * + * @param [out] v Vector of polynomials. + * @param [in] b Array of bytes. + * @param [in] k Number of polynomials in vector. */ -void kyber_vec_decompress_10(sword16* v, const unsigned char* b, - unsigned int kp) +void kyber_vec_decompress_10(sword16* v, const byte* b, unsigned int k) { #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { - kyber_decompress_10_avx2(v, b, kp); + kyber_decompress_10_avx2(v, b, k); RESTORE_VECTOR_REGISTERS(); } else #endif { - kyber_vec_decompress_10_c(v, b, kp); + kyber_vec_decompress_10_c(v, b, k); } } #endif #if defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) /* Decompress the byte array of packed 11 bits into vector of polynomials. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [out] v Vector of polynomials. * @param [in] b Array of bytes. */ -static void kyber_vec_decompress_11_c(sword16* v, const unsigned char* b) +static void kyber_vec_decompress_11_c(sword16* v, const byte* b) { unsigned int i; unsigned int j; #ifdef WOLFSSL_KYBER_SMALL - unsigned int k; + unsigned int l; #endif /* Each polynomial. */ @@ -4203,8 +4749,8 @@ static void kyber_vec_decompress_11_c(sword16* v, const unsigned char* b) b += 11; /* Decompress 8 values. */ - for (k = 0; k < 8; k++) { - DECOMP_11(v, i, j, k, t[k]); + for (l = 0; l < 8; l++) { + DECOMP_11(v, i, j, l, t[l]); } #else /* Extract out 8 values of 11 bits each. */ @@ -4235,11 +4781,13 @@ static void kyber_vec_decompress_11_c(sword16* v, const unsigned char* b) } /* Decompress the byte array of packed 11 bits into vector of polynomials. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [out] v Vector of polynomials. * @param [in] b Array of bytes. */ -void kyber_vec_decompress_11(sword16* v, const unsigned char* b) +void kyber_vec_decompress_11(sword16* v, const byte* b) { #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { @@ -4253,6 +4801,7 @@ void kyber_vec_decompress_11(sword16* v, const unsigned char* b) } } #endif +#endif /* !WOLFSSL_KYBER_NO_DECAPSULATE */ #ifdef CONV_WITH_DIV @@ -4260,6 +4809,8 @@ void kyber_vec_decompress_11(sword16* v, const unsigned char* b) * * Uses div operator that may be slow. * + * FIPS 203, Section 4.2.1, Compression and decompression + * * @param [in] v Vector of polynomials. * @param [in] i Index into polynomial. * @param [in] j Offset from indices. @@ -4274,6 +4825,8 @@ void kyber_vec_decompress_11(sword16* v, const unsigned char* b) * * Uses mul instead of div. * + * FIPS 203, Section 4.2.1, Compression and decompression + * * @param [in] p Polynomial. * @param [in] i Index into polynomial. * @param [in] j Offset from indices. @@ -4286,6 +4839,8 @@ void kyber_vec_decompress_11(sword16* v, const unsigned char* b) * * Uses mul instead of div. * + * FIPS 203, Section 4.2.1, Compression and decompression + * * @param [in] p Polynomial. * @param [in] i Index into polynomial. * @param [in] j Offset from indices. @@ -4310,6 +4865,8 @@ void kyber_vec_decompress_11(sword16* v, const unsigned char* b) * * Uses mul instead of div. * + * FIPS 203, Section 4.2.1, Compression and decompression + * * @param [in] p Polynomial. * @param [in] i Index into polynomial. * @param [in] j Offset from indices. @@ -4322,6 +4879,8 @@ void kyber_vec_decompress_11(sword16* v, const unsigned char* b) * * Uses mul instead of div. * + * FIPS 203, Section 4.2.1, Compression and decompression + * * @param [in] p Polynomial. * @param [in] i Index into polynomial. * @param [in] j Offset from indices. @@ -4332,9 +4891,13 @@ void kyber_vec_decompress_11(sword16* v, const unsigned char* b) #endif /* CONV_WITH_DIV */ +#if !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) || \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) || \ defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) /* Compress a polynomial into byte array - on coefficients into 4 bits. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [out] b Array of bytes. * @param [in] p Polynomial. @@ -4387,6 +4950,8 @@ static void kyber_compress_4_c(byte* b, sword16* p) } /* Compress a polynomial into byte array - on coefficients into 4 bits. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [out] b Array of bytes. * @param [in] p Polynomial. @@ -4407,6 +4972,8 @@ void kyber_compress_4(byte* b, sword16* p) #endif #if defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) /* Compress a polynomial into byte array - on coefficients into 5 bits. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [out] b Array of bytes. * @param [in] p Polynomial. @@ -4461,6 +5028,8 @@ static void kyber_compress_5_c(byte* b, sword16* p) } /* Compress a polynomial into byte array - on coefficients into 5 bits. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [out] b Array of bytes. * @param [in] p Polynomial. @@ -4479,8 +5048,12 @@ void kyber_compress_5(byte* b, sword16* p) } } #endif +#endif /* !WOLFSSL_KYBER_NO_ENCAPSULATE || !WOLFSSL_KYBER_NO_DECAPSULATE */ +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE /* Decompress a 4 bit value. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [in] p Polynomial. * @param [in] i Index into polynomial. @@ -4492,6 +5065,8 @@ void kyber_compress_5(byte* b, sword16* p) p[(i) + (j)] = ((word16)((t) * KYBER_Q) + 8) >> 4 /* Decompress a 5 bit value. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [in] p Polynomial. * @param [in] i Index into polynomial. @@ -4505,11 +5080,13 @@ void kyber_compress_5(byte* b, sword16* p) #if defined(WOLFSSL_KYBER512) || defined(WOLFSSL_WC_ML_KEM_512) || \ defined(WOLFSSL_KYBER768) || defined(WOLFSSL_WC_ML_KEM_768) /* Decompress the byte array of packed 4 bits into polynomial. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [out] p Polynomial. * @param [in] b Array of bytes. */ -static void kyber_decompress_4_c(sword16* p, const unsigned char* b) +static void kyber_decompress_4_c(sword16* p, const byte* b) { unsigned int i; @@ -4523,11 +5100,13 @@ static void kyber_decompress_4_c(sword16* p, const unsigned char* b) } /* Decompress the byte array of packed 4 bits into polynomial. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [out] p Polynomial. * @param [in] b Array of bytes. */ -void kyber_decompress_4(sword16* p, const unsigned char* b) +void kyber_decompress_4(sword16* p, const byte* b) { #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { @@ -4543,11 +5122,13 @@ void kyber_decompress_4(sword16* p, const unsigned char* b) #endif #if defined(WOLFSSL_KYBER1024) || defined(WOLFSSL_WC_ML_KEM_1024) /* Decompress the byte array of packed 5 bits into polynomial. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [out] p Polynomial. * @param [in] b Array of bytes. */ -static void kyber_decompress_5_c(sword16* p, const unsigned char* b) +static void kyber_decompress_5_c(sword16* p, const byte* b) { unsigned int i; @@ -4598,11 +5179,13 @@ static void kyber_decompress_5_c(sword16* p, const unsigned char* b) } /* Decompress the byte array of packed 5 bits into polynomial. + * + * FIPS 203, Section 4.2.1, Compression and decompression * * @param [out] p Polynomial. * @param [in] b Array of bytes. */ -void kyber_decompress_5(sword16* p, const unsigned char* b) +void kyber_decompress_5(sword16* p, const byte* b) { #ifdef USE_INTEL_SPEEDUP if (IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { @@ -4616,16 +5199,21 @@ void kyber_decompress_5(sword16* p, const unsigned char* b) } } #endif +#endif /* !WOLFSSL_KYBER_NO_DECAPSULATE */ /******************************************************************************/ #if !(defined(__aarch64__) && defined(WOLFSSL_ARMASM)) +#if !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) || \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) /* Convert bit from byte to 0 or (KYBER_Q + 1) / 2. * * Constant time implementation. * XOR in kyber_opt_blocker to ensure optimizer doesn't know what will be ANDed * with KYBER_Q_1_HALF and can't optimize to non-constant time code. * + * FIPS 203, Algorithm 6: ByteDecode_d(B) + * * @param [out] p Polynomial to hold converted value. * @param [in] msg Message to get bit from byte from. * @param [in] i Index of byte from message. @@ -4636,6 +5224,8 @@ void kyber_decompress_5(sword16* p, const unsigned char* b) kyber_opt_blocker) & KYBER_Q_1_HALF) /* Convert message to polynomial. + * + * FIPS 203, Algorithm 6: ByteDecode_d(B) * * @param [out] p Polynomial. * @param [in] msg Message as a byte array. @@ -4666,6 +5256,8 @@ static void kyber_from_msg_c(sword16* p, const byte* msg) } /* Convert message to polynomial. + * + * FIPS 203, Algorithm 6: ByteDecode_d(B) * * @param [out] p Polynomial. * @param [in] msg Message as a byte array. @@ -4683,13 +5275,17 @@ void kyber_from_msg(sword16* p, const byte* msg) kyber_from_msg_c(p, msg); } } +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE #ifdef CONV_WITH_DIV /* Convert to value to bit. * * Uses div operator that may be slow. * + * FIPS 203, Algorithm 6: ByteEncode_d(F) + * * @param [out] m Message. * @param [in] p Polynomial. * @param [in] i Index of byte in message. @@ -4711,6 +5307,8 @@ void kyber_from_msg(sword16* p, const byte* msg) * * Uses mul instead of div. * + * FIPS 203, Algorithm 6: ByteEncode_d(F) + * * @param [out] m Message. * @param [in] p Polynomial. * @param [in] i Index of byte in message. @@ -4722,6 +5320,8 @@ void kyber_from_msg(sword16* p, const byte* msg) #endif /* CONV_WITH_DIV */ /* Convert polynomial to message. + * + * FIPS 203, Algorithm 6: ByteEncode_d(F) * * @param [out] msg Message as a byte array. * @param [in] p Polynomial. @@ -4756,6 +5356,8 @@ static void kyber_to_msg_c(byte* msg, sword16* p) } /* Convert polynomial to message. + * + * FIPS 203, Algorithm 6: ByteEncode_d(F) * * @param [out] msg Message as a byte array. * @param [in] p Polynomial. @@ -4774,8 +5376,13 @@ void kyber_to_msg(byte* msg, sword16* p) kyber_to_msg_c(msg, p); } } +#endif /* !WOLFSSL_KYBER_NO_DECAPSULATE */ #else +#if !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) || \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) /* Convert message to polynomial. + * + * FIPS 203, Algorithm 6: ByteDecode_d(B) * * @param [out] p Polynomial. * @param [in] msg Message as a byte array. @@ -4784,8 +5391,12 @@ void kyber_from_msg(sword16* p, const byte* msg) { kyber_from_msg_neon(p, msg); } +#endif /* !WOLFSSL_KYBER_NO_ENCAPSULATE || !WOLFSSL_KYBER_NO_DECAPSULATE */ +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE /* Convert polynomial to message. + * + * FIPS 203, Algorithm 6: ByteEncode_d(F) * * @param [out] msg Message as a byte array. * @param [in] p Polynomial. @@ -4794,7 +5405,8 @@ void kyber_to_msg(byte* msg, sword16* p) { kyber_to_msg_neon(msg, p); } -#endif +#endif /* WOLFSSL_KYBER_NO_DECAPSULATE */ +#endif /* !(__aarch64__ && WOLFSSL_ARMASM) */ /******************************************************************************/ @@ -4803,6 +5415,8 @@ void kyber_to_msg(byte* msg, sword16* p) * Consecutive 12 bits hold each coefficient of polynomial. * Used in decoding private and public keys. * + * FIPS 203, Algorithm 6: ByteDecode_d(B) + * * @param [out] p Vector of polynomials. * @param [in] b Array of bytes. * @param [in] k Number of polynomials in vector. @@ -4829,6 +5443,8 @@ static void kyber_from_bytes_c(sword16* p, const byte* b, int k) * Consecutive 12 bits hold each coefficient of polynomial. * Used in decoding private and public keys. * + * FIPS 203, Algorithm 6: ByteDecode_d(B) + * * @param [out] p Vector of polynomials. * @param [in] b Array of bytes. * @param [in] k Number of polynomials in vector. @@ -4859,6 +5475,8 @@ void kyber_from_bytes(sword16* p, const byte* b, int k) * Consecutive 12 bits hold each coefficient of polynomial. * Used in encoding private and public keys. * + * FIPS 203, Algorithm 6: ByteEncode_d(F) + * * @param [out] b Array of bytes. * @param [in] p Polynomial. * @param [in] k Number of polynomials in vector. @@ -4890,6 +5508,8 @@ static void kyber_to_bytes_c(byte* b, sword16* p, int k) * Consecutive 12 bits hold each coefficient of polynomial. * Used in encoding private and public keys. * + * FIPS 203, Algorithm 6: ByteEncode_d(F) + * * @param [out] b Array of bytes. * @param [in] p Polynomial. * @param [in] k Number of polynomials in vector. diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index f57cc3efa..58b62023f 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -38639,18 +38639,30 @@ static wc_test_ret_t kyber512_kat(void) wc_test_ret_t ret; #ifdef WOLFSSL_SMALL_STACK KyberKey *key = NULL; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY byte *priv = NULL; byte *pub = NULL; +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE byte *ct = NULL; byte *ss = NULL; +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE byte *ss_dec = NULL; +#endif #else KyberKey key[1]; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY byte priv[KYBER512_PRIVATE_KEY_SIZE]; byte pub[KYBER512_PUBLIC_KEY_SIZE]; +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE byte ct[KYBER512_CIPHER_TEXT_SIZE]; byte ss[KYBER_SS_SZ]; +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE byte ss_dec[KYBER_SS_SZ]; +#endif #endif int key_inited = 0; WOLFSSL_SMALL_STACK_STATIC const byte kyber512_rand[] = { @@ -39513,20 +39525,31 @@ static wc_test_ret_t kyber512_kat(void) #ifdef WOLFSSL_SMALL_STACK key = (KyberKey *)XMALLOC(sizeof(KyberKey), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (key == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY priv = (byte *)XMALLOC(KYBER512_PRIVATE_KEY_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); pub = (byte *)XMALLOC(KYBER512_PUBLIC_KEY_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (pub == NULL || priv == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE ct = (byte *)XMALLOC(KYBER512_CIPHER_TEXT_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); ss = (byte *)XMALLOC(KYBER_SS_SZ, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (ct == NULL || ss == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE ss_dec = (byte *)XMALLOC(KYBER_SS_SZ, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - - if (! (key && priv && pub && ct && ss && ss_dec)) + if (ss_dec == NULL) ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); #endif +#endif #ifdef WOLFSSL_KYBER_ORIGINAL ret = wc_KyberKey_Init(KYBER512, key, HEAP_HINT, INVALID_DEVID); @@ -39535,6 +39558,7 @@ static wc_test_ret_t kyber512_kat(void) else key_inited = 1; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY ret = wc_KyberKey_MakeKeyWithRandom(key, kyber512_rand, sizeof(kyber512_rand)); if (ret != 0) @@ -39553,7 +39577,16 @@ static wc_test_ret_t kyber512_kat(void) if (XMEMCMP(priv, kyber512_sk, sizeof(kyber512_sk)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber512_rand; + (void)kyber512_pk; + ret = wc_KyberKey_DecodePrivateKey(key, kyber512_sk, + KYBER512_PRIVATE_KEY_SIZE); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE ret = wc_KyberKey_EncapsulateWithRandom(key, ct, ss, kyber512enc_rand, sizeof(kyber512enc_rand)); if (ret != 0) @@ -39564,13 +39597,22 @@ static wc_test_ret_t kyber512_kat(void) if (XMEMCMP(ss, kyber512_ss, sizeof(kyber512_ss)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber512enc_rand; +#endif - ret = wc_KyberKey_Decapsulate(key, ss_dec, ct, sizeof(kyber512_ct)); +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE + ret = wc_KyberKey_Decapsulate(key, ss_dec, kyber512_ct, + sizeof(kyber512_ct)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (XMEMCMP(ss_dec, kyber512_ss, sizeof(kyber512_ss)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber512_ct; + (void)kyber512_ss; +#endif #endif #ifndef WOLFSSL_NO_ML_KEM ret = wc_KyberKey_Init(WC_ML_KEM_512, key, HEAP_HINT, INVALID_DEVID); @@ -39579,6 +39621,7 @@ static wc_test_ret_t kyber512_kat(void) else key_inited = 1; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY ret = wc_KyberKey_MakeKeyWithRandom(key, kyber512_rand, sizeof(kyber512_rand)); if (ret != 0) @@ -39598,7 +39641,16 @@ static wc_test_ret_t kyber512_kat(void) if (XMEMCMP(priv, ml_kem_512_sk, sizeof(ml_kem_512_sk)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber512_rand; + (void)ml_kem_512_pk; + ret = wc_KyberKey_DecodePrivateKey(key, ml_kem_512_sk, + WC_ML_KEM_512_PRIVATE_KEY_SIZE); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE ret = wc_KyberKey_EncapsulateWithRandom(key, ct, ss, kyber512enc_rand, sizeof(kyber512enc_rand)); if (ret != 0) @@ -39609,13 +39661,22 @@ static wc_test_ret_t kyber512_kat(void) if (XMEMCMP(ss, ml_kem_512_ss, sizeof(ml_kem_512_ss)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber512enc_rand; +#endif - ret = wc_KyberKey_Decapsulate(key, ss_dec, ct, sizeof(ml_kem_512_ct)); +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE + ret = wc_KyberKey_Decapsulate(key, ss_dec, ml_kem_512_ct, + sizeof(ml_kem_512_ct)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (XMEMCMP(ss_dec, ml_kem_512_ss, sizeof(ml_kem_512_ss)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)ml_kem_512_ct; + (void)ml_kem_512_ss; +#endif #endif out: @@ -39625,11 +39686,17 @@ out: #ifdef WOLFSSL_SMALL_STACK XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE XFREE(ct, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(ss, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE XFREE(ss_dec, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#endif #endif return ret; @@ -39642,18 +39709,30 @@ static wc_test_ret_t kyber768_kat(void) wc_test_ret_t ret; #ifdef WOLFSSL_SMALL_STACK KyberKey *key = NULL; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY byte *priv = NULL; byte *pub = NULL; +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE byte *ct = NULL; byte *ss = NULL; +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE byte *ss_dec = NULL; +#endif #else KyberKey key[1]; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY byte priv[KYBER768_PRIVATE_KEY_SIZE]; byte pub[KYBER768_PUBLIC_KEY_SIZE]; +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE byte ct[KYBER768_CIPHER_TEXT_SIZE]; byte ss[KYBER_SS_SZ]; +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE byte ss_dec[KYBER_SS_SZ]; +#endif #endif int key_inited = 0; WOLFSSL_SMALL_STACK_STATIC const byte kyber768_rand[] = { @@ -40885,20 +40964,31 @@ static wc_test_ret_t kyber768_kat(void) #ifdef WOLFSSL_SMALL_STACK key = (KyberKey *)XMALLOC(sizeof(KyberKey), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (key == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY priv = (byte *)XMALLOC(KYBER768_PRIVATE_KEY_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); pub = (byte *)XMALLOC(KYBER768_PUBLIC_KEY_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (priv == NULL || pub == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE ct = (byte *)XMALLOC(KYBER768_CIPHER_TEXT_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); ss = (byte *)XMALLOC(KYBER_SS_SZ, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (ct == NULL || ss == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE ss_dec = (byte *)XMALLOC(KYBER_SS_SZ, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - - if (! (key && priv && pub && ct && ss && ss_dec)) + if (ss_dec == NULL) ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); #endif +#endif #ifdef WOLFSSL_KYBER_ORIGINAL ret = wc_KyberKey_Init(KYBER768, key, HEAP_HINT, INVALID_DEVID); @@ -40907,6 +40997,7 @@ static wc_test_ret_t kyber768_kat(void) else key_inited = 1; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY ret = wc_KyberKey_MakeKeyWithRandom(key, kyber768_rand, sizeof(kyber768_rand)); if (ret != 0) @@ -40925,7 +41016,16 @@ static wc_test_ret_t kyber768_kat(void) if (XMEMCMP(priv, kyber768_sk, sizeof(kyber768_sk)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber768_rand; + (void)kyber768_pk; + ret = wc_KyberKey_DecodePrivateKey(key, kyber768_sk, + KYBER768_PRIVATE_KEY_SIZE); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE ret = wc_KyberKey_EncapsulateWithRandom(key, ct, ss, kyber768enc_rand, sizeof(kyber768enc_rand)); if (ret != 0) @@ -40936,13 +41036,22 @@ static wc_test_ret_t kyber768_kat(void) if (XMEMCMP(ss, kyber768_ss, sizeof(kyber768_ss)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber768enc_rand; +#endif - ret = wc_KyberKey_Decapsulate(key, ss_dec, ct, sizeof(kyber768_ct)); +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE + ret = wc_KyberKey_Decapsulate(key, ss_dec, kyber768_ct, + sizeof(kyber768_ct)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (XMEMCMP(ss_dec, kyber768_ss, sizeof(kyber768_ss)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber768_ct; + (void)kyber768_ss; +#endif #endif #ifndef WOLFSSL_NO_ML_KEM ret = wc_KyberKey_Init(WC_ML_KEM_768, key, HEAP_HINT, INVALID_DEVID); @@ -40951,6 +41060,7 @@ static wc_test_ret_t kyber768_kat(void) else key_inited = 1; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY ret = wc_KyberKey_MakeKeyWithRandom(key, kyber768_rand, sizeof(kyber768_rand)); if (ret != 0) @@ -40970,7 +41080,16 @@ static wc_test_ret_t kyber768_kat(void) if (XMEMCMP(priv, ml_kem_768_sk, sizeof(ml_kem_768_sk)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber768_rand; + (void)ml_kem_768_pk; + ret = wc_KyberKey_DecodePrivateKey(key, ml_kem_768_sk, + WC_ML_KEM_768_PRIVATE_KEY_SIZE); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE ret = wc_KyberKey_EncapsulateWithRandom(key, ct, ss, kyber768enc_rand, sizeof(kyber768enc_rand)); if (ret != 0) @@ -40981,13 +41100,22 @@ static wc_test_ret_t kyber768_kat(void) if (XMEMCMP(ss, ml_kem_768_ss, sizeof(ml_kem_768_ss)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber768enc_rand; +#endif - ret = wc_KyberKey_Decapsulate(key, ss_dec, ct, sizeof(ml_kem_768_ct)); +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE + ret = wc_KyberKey_Decapsulate(key, ss_dec, ml_kem_768_ct, + sizeof(ml_kem_768_ct)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (XMEMCMP(ss_dec, ml_kem_768_ss, sizeof(ml_kem_768_ss)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)ml_kem_768_ct; + (void)ml_kem_768_ss; +#endif #endif out: @@ -40997,11 +41125,17 @@ out: #ifdef WOLFSSL_SMALL_STACK XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE XFREE(ct, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(ss, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE XFREE(ss_dec, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#endif #endif return ret; @@ -41014,18 +41148,30 @@ static wc_test_ret_t kyber1024_kat(void) wc_test_ret_t ret; #ifdef WOLFSSL_SMALL_STACK KyberKey *key = NULL; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY byte *priv = NULL; byte *pub = NULL; +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE byte *ct = NULL; byte *ss = NULL; +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE byte *ss_dec = NULL; +#endif #else KyberKey key[1]; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY byte priv[KYBER1024_PRIVATE_KEY_SIZE]; byte pub[KYBER1024_PUBLIC_KEY_SIZE]; +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE byte ct[KYBER1024_CIPHER_TEXT_SIZE]; byte ss[KYBER_SS_SZ]; +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE byte ss_dec[KYBER_SS_SZ]; +#endif #endif int key_inited = 0; WOLFSSL_SMALL_STACK_STATIC const byte kyber1024_rand[] = { @@ -42664,20 +42810,31 @@ static wc_test_ret_t kyber1024_kat(void) #ifdef WOLFSSL_SMALL_STACK key = (KyberKey *)XMALLOC(sizeof(KyberKey), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (key == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY priv = (byte *)XMALLOC(KYBER1024_PRIVATE_KEY_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); pub = (byte *)XMALLOC(KYBER1024_PUBLIC_KEY_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (priv == NULL || pub == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE ct = (byte *)XMALLOC(KYBER1024_CIPHER_TEXT_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); ss = (byte *)XMALLOC(KYBER_SS_SZ, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (ct == NULL || ss == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE ss_dec = (byte *)XMALLOC(KYBER_SS_SZ, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - - if (! (key && priv && pub && ct && ss && ss_dec)) + if (ss_dec == NULL) ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); #endif +#endif #ifdef WOLFSSL_KYBER_ORIGINAL ret = wc_KyberKey_Init(KYBER1024, key, HEAP_HINT, INVALID_DEVID); @@ -42686,6 +42843,7 @@ static wc_test_ret_t kyber1024_kat(void) else key_inited = 1; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY ret = wc_KyberKey_MakeKeyWithRandom(key, kyber1024_rand, sizeof(kyber1024_rand)); if (ret != 0) @@ -42704,7 +42862,16 @@ static wc_test_ret_t kyber1024_kat(void) if (XMEMCMP(priv, kyber1024_sk, sizeof(kyber1024_sk)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber1024_rand; + (void)kyber1024_pk; + ret = wc_KyberKey_DecodePrivateKey(key, kyber1024_sk, + KYBER1024_PRIVATE_KEY_SIZE); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE ret = wc_KyberKey_EncapsulateWithRandom(key, ct, ss, kyber1024enc_rand, sizeof(kyber1024enc_rand)); if (ret != 0) @@ -42715,13 +42882,22 @@ static wc_test_ret_t kyber1024_kat(void) if (XMEMCMP(ss, kyber1024_ss, sizeof(kyber1024_ss)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber1024enc_rand; +#endif - ret = wc_KyberKey_Decapsulate(key, ss_dec, ct, sizeof(kyber1024_ct)); +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE + ret = wc_KyberKey_Decapsulate(key, ss_dec, kyber1024_ct, + sizeof(kyber1024_ct)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (XMEMCMP(ss_dec, kyber1024_ss, sizeof(kyber1024_ss)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber1024_ct; + (void)kyber1024_ss; +#endif #endif #ifndef WOLFSSL_NO_ML_KEM ret = wc_KyberKey_Init(WC_ML_KEM_1024, key, HEAP_HINT, INVALID_DEVID); @@ -42730,6 +42906,7 @@ static wc_test_ret_t kyber1024_kat(void) else key_inited = 1; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY ret = wc_KyberKey_MakeKeyWithRandom(key, kyber1024_rand, sizeof(kyber1024_rand)); if (ret != 0) @@ -42749,7 +42926,16 @@ static wc_test_ret_t kyber1024_kat(void) if (XMEMCMP(priv, ml_kem_1024_sk, sizeof(ml_kem_1024_sk)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber1024_rand; + (void)ml_kem_1024_pk; + ret = wc_KyberKey_DecodePrivateKey(key, ml_kem_1024_sk, + WC_ML_KEM_1024_PRIVATE_KEY_SIZE); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE ret = wc_KyberKey_EncapsulateWithRandom(key, ct, ss, kyber1024enc_rand, sizeof(kyber1024enc_rand)); if (ret != 0) @@ -42760,13 +42946,22 @@ static wc_test_ret_t kyber1024_kat(void) if (XMEMCMP(ss, ml_kem_1024_ss, sizeof(ml_kem_1024_ss)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)kyber1024enc_rand; +#endif - ret = wc_KyberKey_Decapsulate(key, ss_dec, ct, sizeof(ml_kem_1024_ct)); +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE + ret = wc_KyberKey_Decapsulate(key, ss_dec, ml_kem_1024_ct, + sizeof(ml_kem_1024_ct)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (XMEMCMP(ss_dec, ml_kem_1024_ss, sizeof(ml_kem_1024_ss)) != 0) ERROR_OUT(WC_TEST_RET_ENC_NC, out); +#else + (void)ml_kem_1024_ct; + (void)ml_kem_1024_ss; +#endif #endif out: @@ -42776,11 +42971,17 @@ out: #ifdef WOLFSSL_SMALL_STACK XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#endif +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE XFREE(ct, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(ss, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#endif +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE XFREE(ss_dec, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#endif #endif return ret; @@ -42795,22 +42996,34 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t kyber_test(void) int i; #ifdef WOLFSSL_SMALL_STACK KyberKey *key = NULL; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY byte *priv = NULL; byte *pub = NULL; byte *priv2 = NULL; byte *pub2 = NULL; +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE byte *ct = NULL; byte *ss = NULL; +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE byte *ss_dec = NULL; +#endif +#endif +#endif #else KyberKey key[1]; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY byte priv[KYBER_MAX_PRIVATE_KEY_SIZE]; byte pub[KYBER_MAX_PUBLIC_KEY_SIZE]; byte priv2[KYBER_MAX_PRIVATE_KEY_SIZE]; byte pub2[KYBER_MAX_PUBLIC_KEY_SIZE]; +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE byte ct[KYBER_MAX_CIPHER_TEXT_SIZE]; byte ss[KYBER_SS_SZ]; +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE byte ss_dec[KYBER_SS_SZ]; +#endif +#endif +#endif #endif int key_inited = 0; static const int testData[][4] = { @@ -42848,24 +43061,43 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t kyber_test(void) #ifdef WOLFSSL_SMALL_STACK key = (KyberKey *)XMALLOC(sizeof(KyberKey), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (key == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY priv = (byte *)XMALLOC(KYBER_MAX_PRIVATE_KEY_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (priv == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); pub = (byte *)XMALLOC(KYBER_MAX_PUBLIC_KEY_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (pub == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); priv2 = (byte *)XMALLOC(KYBER_MAX_PRIVATE_KEY_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (priv2 == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); pub2 = (byte *)XMALLOC(KYBER_MAX_PUBLIC_KEY_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (pub2 == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE ct = (byte *)XMALLOC(KYBER_MAX_CIPHER_TEXT_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (ct == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); ss = (byte *)XMALLOC(KYBER_SS_SZ, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + if (ss == NULL) + ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE ss_dec = (byte *)XMALLOC(KYBER_SS_SZ, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - - if (! (key && priv && pub && priv2 && pub2 && ct && ss && ss_dec)) + if (ss_dec == NULL) ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); #endif +#endif +#endif +#endif #ifndef HAVE_FIPS ret = wc_InitRng_ex(&rng, HEAP_HINT, INVALID_DEVID); @@ -42882,6 +43114,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t kyber_test(void) else key_inited = 1; +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY ret = wc_KyberKey_MakeKey(key, &rng); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_I(i), out); @@ -42902,9 +43135,11 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t kyber_test(void) if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_I(i), out); +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE ret = wc_KyberKey_Encapsulate(key, ct, ss, &rng); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_I(i), out); +#endif ret = wc_KyberKey_EncodePublicKey(key, pub2, testData[i][2]); if (ret != 0) @@ -42921,12 +43156,15 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t kyber_test(void) if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_I(i), out); +#if !defined(WOLFSSL_KYBER_NO_ENCAPSULATE) && \ + !defined(WOLFSSL_KYBER_NO_DECAPSULATE) ret = wc_KyberKey_Decapsulate(key, ss_dec, ct, testData[i][3]); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_I(i), out); if (XMEMCMP(ss, ss_dec, KYBER_SS_SZ) != 0) ERROR_OUT(WC_TEST_RET_ENC_I(i), out); +#endif ret = wc_KyberKey_EncodePrivateKey(key, priv2, testData[i][1]); if (ret != 0) @@ -42934,6 +43172,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t kyber_test(void) if (XMEMCMP(priv, priv2, testData[i][2]) != 0) ERROR_OUT(WC_TEST_RET_ENC_I(i), out); +#endif } wc_FreeRng(&rng); @@ -42963,13 +43202,19 @@ out: #ifdef WOLFSSL_SMALL_STACK XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#ifndef WOLFSSL_KYBER_NO_MAKE_KEY XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(priv2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(pub2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#ifndef WOLFSSL_KYBER_NO_ENCAPSULATE XFREE(ct, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(ss, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#ifndef WOLFSSL_KYBER_NO_DECAPSULATE XFREE(ss_dec, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); +#endif +#endif +#endif #endif return ret; diff --git a/wolfssl/wolfcrypt/kyber.h b/wolfssl/wolfcrypt/kyber.h index e827ace9a..5eb5f1d47 100644 --- a/wolfssl/wolfcrypt/kyber.h +++ b/wolfssl/wolfcrypt/kyber.h @@ -33,14 +33,21 @@ /* Define algorithm type when not excluded. */ -#ifndef WOLFSSL_NO_KYBER512 -#define WOLFSSL_KYBER512 -#endif -#ifndef WOLFSSL_NO_KYBER768 -#define WOLFSSL_KYBER768 -#endif -#ifndef WOLFSSL_NO_KYBER1024 -#define WOLFSSL_KYBER1024 +#ifdef WOLFSSL_KYBER_ORIGINAL + #ifndef WOLFSSL_NO_KYBER512 + #define WOLFSSL_KYBER512 + #endif + #ifndef WOLFSSL_NO_KYBER768 + #define WOLFSSL_KYBER768 + #endif + #ifndef WOLFSSL_NO_KYBER1024 + #define WOLFSSL_KYBER1024 + #endif + + #if !defined(WOLFSSL_KYBER512) && !defined(WOLFSSL_KYBER768) && \ + !defined(WOLFSSL_KYBER1024) + #error "No Kyber key size chosen." + #endif #endif @@ -58,7 +65,6 @@ /* Kyber-512 parameters */ -#ifdef WOLFSSL_KYBER512 /* Number of polynomials in a vector and vectors in a matrix. */ #define KYBER512_K 2 @@ -80,10 +86,8 @@ /* Cipher text size. */ #define KYBER512_CIPHER_TEXT_SIZE \ (KYBER512_POLY_VEC_COMPRESSED_SZ + KYBER512_POLY_COMPRESSED_SZ) -#endif /* WOLFSSL_KYBER512 */ /* Kyber-768 parameters */ -#ifdef WOLFSSL_KYBER768 /* Number of polynomials in a vector and vectors in a matrix. */ #define KYBER768_K 3 @@ -105,10 +109,8 @@ /* Cipher text size. */ #define KYBER768_CIPHER_TEXT_SIZE \ (KYBER768_POLY_VEC_COMPRESSED_SZ + KYBER768_POLY_COMPRESSED_SZ) -#endif /* WOLFSSL_KYBER768 */ /* Kyber-1024 parameters */ -#ifdef WOLFSSL_KYBER1024 /* Number of polynomials in a vector and vectors in a matrix. */ #define KYBER1024_K 4 @@ -130,7 +132,6 @@ /* Cipher text size. */ #define KYBER1024_CIPHER_TEXT_SIZE \ (KYBER1024_POLY_VEC_COMPRESSED_SZ + KYBER1024_POLY_COMPRESSED_SZ) -#endif /* WOLFSSL_KYBER1024 */ /* Maximum dimensions and sizes of supported key types. */ @@ -144,7 +145,7 @@ #define KYBER_MAX_PRIVATE_KEY_SIZE KYBER768_PRIVATE_KEY_SIZE #define KYBER_MAX_PUBLIC_KEY_SIZE KYBER768_PUBLIC_KEY_SIZE #define KYBER_MAX_CIPHER_TEXT_SIZE KYBER768_CIPHER_TEXT_SIZE -#else +#elif defined(WOLFSSL_KYBER512) #define KYBER_MAX_K KYBER512_K #define KYBER_MAX_PRIVATE_KEY_SIZE KYBER512_PRIVATE_KEY_SIZE #define KYBER_MAX_PUBLIC_KEY_SIZE KYBER512_PUBLIC_KEY_SIZE @@ -220,43 +221,113 @@ WOLFSSL_API int wc_KyberKey_EncodePublicKey(KyberKey* key, unsigned char* out, -#if !defined(WOLFSSL_NO_ML_KEM_512) && !defined(WOLFSSL_NO_ML_KEM) -#define WOLFSSL_WC_ML_KEM_512 -#endif -#if !defined(WOLFSSL_NO_ML_KEM_768) && !defined(WOLFSSL_NO_ML_KEM) -#define WOLFSSL_WC_ML_KEM_768 -#endif -#if !defined(WOLFSSL_NO_ML_KEM_1024) && !defined(WOLFSSL_NO_ML_KEM) -#define WOLFSSL_WC_ML_KEM_1024 +#ifndef WOLFSSL_NO_ML_KEM + #if !defined(WOLFSSL_NO_ML_KEM_512) + #define WOLFSSL_WC_ML_KEM_512 + #endif + #if !defined(WOLFSSL_NO_ML_KEM_768) + #define WOLFSSL_WC_ML_KEM_768 + #endif + #if !defined(WOLFSSL_NO_ML_KEM_1024) + #define WOLFSSL_WC_ML_KEM_1024 + #endif + + #if !defined(WOLFSSL_WC_ML_KEM_512) && !defined(WOLFSSL_WC_ML_KEM_768) && \ + !defined(WOLFSSL_WC_ML_KEM_1024) + #error "No ML-KEM key size chosen." + #endif #endif #ifdef WOLFSSL_WC_ML_KEM_512 -#define WC_ML_KEM_512_K KYBER512_K -#define WC_ML_KEM_512_PUBLIC_KEY_SIZE KYBER512_PUBLIC_KEY_SIZE -#define WC_ML_KEM_512_PRIVATE_KEY_SIZE KYBER512_PRIVATE_KEY_SIZE -#define WC_ML_KEM_512_CIPHER_TEXT_SIZE KYBER512_CIPHER_TEXT_SIZE -#define WC_ML_KEM_512_POLY_VEC_COMPRESSED_SZ \ - KYBER512_POLY_VEC_COMPRESSED_SZ +#define WC_ML_KEM_512_K 2 +/* Size of a polynomial vector. */ +#define WC_ML_KEM_512_POLY_VEC_SZ KYBER_POLY_VEC_SZ(WC_ML_KEM_512_K) +/* Size of a compressed polynomial based on bits per coefficient. */ +#define WC_ML_KEM_512_POLY_COMPRESSED_SZ KYBER_POLY_COMPRESSED_SZ(4) +/* Size of a compressed vector polynomial based on dimensions and bits per + * coefficient. */ +#define WC_ML_KEM_512_POLY_VEC_COMPRESSED_SZ \ + KYBER_POLY_VEC_COMPRESSED_SZ(WC_ML_KEM_512_K, 10) + +/* Public key size. */ +#define WC_ML_KEM_512_PUBLIC_KEY_SIZE \ + (WC_ML_KEM_512_POLY_VEC_SZ + KYBER_SYM_SZ) +/* Private key size. */ +#define WC_ML_KEM_512_PRIVATE_KEY_SIZE \ + (WC_ML_KEM_512_POLY_VEC_SZ + WC_ML_KEM_512_PUBLIC_KEY_SIZE + \ + 2 * KYBER_SYM_SZ) +/* Cipher text size. */ +#define WC_ML_KEM_512_CIPHER_TEXT_SIZE \ + (WC_ML_KEM_512_POLY_VEC_COMPRESSED_SZ + WC_ML_KEM_512_POLY_COMPRESSED_SZ) #endif #ifdef WOLFSSL_WC_ML_KEM_768 -#define WC_ML_KEM_768_K KYBER768_K -#define WC_ML_KEM_768_PUBLIC_KEY_SIZE KYBER768_PUBLIC_KEY_SIZE -#define WC_ML_KEM_768_PRIVATE_KEY_SIZE KYBER768_PRIVATE_KEY_SIZE -#define WC_ML_KEM_768_CIPHER_TEXT_SIZE KYBER768_CIPHER_TEXT_SIZE -#define WC_ML_KEM_768_POLY_VEC_COMPRESSED_SZ \ - KYBER768_POLY_VEC_COMPRESSED_SZ +#define WC_ML_KEM_768_K 3 + +/* Size of a polynomial vector. */ +#define WC_ML_KEM_768_POLY_VEC_SZ KYBER_POLY_VEC_SZ(WC_ML_KEM_768_K) +/* Size of a compressed polynomial based on bits per coefficient. */ +#define WC_ML_KEM_768_POLY_COMPRESSED_SZ KYBER_POLY_COMPRESSED_SZ(4) +/* Size of a compressed vector polynomial based on dimensions and bits per + * coefficient. */ +#define WC_ML_KEM_768_POLY_VEC_COMPRESSED_SZ \ + KYBER_POLY_VEC_COMPRESSED_SZ(WC_ML_KEM_768_K, 10) + +/* Public key size. */ +#define WC_ML_KEM_768_PUBLIC_KEY_SIZE \ + (WC_ML_KEM_768_POLY_VEC_SZ + KYBER_SYM_SZ) +/* Private key size. */ +#define WC_ML_KEM_768_PRIVATE_KEY_SIZE \ + (WC_ML_KEM_768_POLY_VEC_SZ + WC_ML_KEM_768_PUBLIC_KEY_SIZE + \ + 2 * KYBER_SYM_SZ) +/* Cipher text size. */ +#define WC_ML_KEM_768_CIPHER_TEXT_SIZE \ + (WC_ML_KEM_768_POLY_VEC_COMPRESSED_SZ + WC_ML_KEM_768_POLY_COMPRESSED_SZ) #endif #ifdef WOLFSSL_WC_ML_KEM_1024 -#define WC_ML_KEM_1024_K KYBER1024_K -#define WC_ML_KEM_1024_PUBLIC_KEY_SIZE KYBER1024_PUBLIC_KEY_SIZE -#define WC_ML_KEM_1024_PRIVATE_KEY_SIZE KYBER1024_PRIVATE_KEY_SIZE -#define WC_ML_KEM_1024_CIPHER_TEXT_SIZE KYBER1024_CIPHER_TEXT_SIZE +#define WC_ML_KEM_1024_K 4 + +/* Size of a polynomial vector. */ +#define WC_ML_KEM_1024_POLY_VEC_SZ KYBER_POLY_VEC_SZ(WC_ML_KEM_1024_K) +/* Size of a compressed polynomial based on bits per coefficient. */ +#define WC_ML_KEM_1024_POLY_COMPRESSED_SZ KYBER_POLY_COMPRESSED_SZ(5) +/* Size of a compressed vector polynomial based on dimensions and bits per + * coefficient. */ #define WC_ML_KEM_1024_POLY_VEC_COMPRESSED_SZ \ - KYBER1024_POLY_VEC_COMPRESSED_SZ + KYBER_POLY_VEC_COMPRESSED_SZ(WC_ML_KEM_1024_K, 11) + +/* Public key size. */ +#define WC_ML_KEM_1024_PUBLIC_KEY_SIZE \ + (WC_ML_KEM_1024_POLY_VEC_SZ + KYBER_SYM_SZ) +/* Private key size. */ +#define WC_ML_KEM_1024_PRIVATE_KEY_SIZE \ + (WC_ML_KEM_1024_POLY_VEC_SZ + WC_ML_KEM_1024_PUBLIC_KEY_SIZE + \ + 2 * KYBER_SYM_SZ) +/* Cipher text size. */ +#define WC_ML_KEM_1024_CIPHER_TEXT_SIZE \ + (WC_ML_KEM_1024_POLY_VEC_COMPRESSED_SZ + WC_ML_KEM_1024_POLY_COMPRESSED_SZ) #endif +#ifndef KYBER_MAX_K +#ifdef WOLFSSL_WC_ML_KEM_1024 +#define KYBER_MAX_K WC_ML_KEM_1024_K +#define KYBER_MAX_PRIVATE_KEY_SIZE WC_ML_KEM_1024_PRIVATE_KEY_SIZE +#define KYBER_MAX_PUBLIC_KEY_SIZE WC_ML_KEM_1024_PUBLIC_KEY_SIZE +#define KYBER_MAX_CIPHER_TEXT_SIZE WC_ML_KEM_1024_CIPHER_TEXT_SIZE +#elif defined(WOLFSSL_WC_ML_KEM_768) +#define KYBER_MAX_K WC_ML_KEM_768_K +#define KYBER_MAX_PRIVATE_KEY_SIZE WC_ML_KEM_768_PRIVATE_KEY_SIZE +#define KYBER_MAX_PUBLIC_KEY_SIZE WC_ML_KEM_768_PUBLIC_KEY_SIZE +#define KYBER_MAX_CIPHER_TEXT_SIZE WC_ML_KEM_768_CIPHER_TEXT_SIZE +#elif defined(WOLFSSL_WC_ML_KEM_512) +#define KYBER_MAX_K WC_ML_KEM_512_K +#define KYBER_MAX_PRIVATE_KEY_SIZE WC_ML_KEM_512_PRIVATE_KEY_SIZE +#define KYBER_MAX_PUBLIC_KEY_SIZE WC_ML_KEM_512_PUBLIC_KEY_SIZE +#define KYBER_MAX_CIPHER_TEXT_SIZE WC_ML_KEM_512_CIPHER_TEXT_SIZE +#endif +#endif /* KYBER_MAX_K */ + #define WC_ML_KEM_MAX_K KYBER_MAX_K #define WC_ML_KEM_MAX_PRIVATE_KEY_SIZE KYBER_MAX_PRIVATE_KEY_SIZE #define WC_ML_KEM_MAX_PUBLIC_KEY_SIZE KYBER_MAX_PUBLIC_KEY_SIZE diff --git a/wolfssl/wolfcrypt/wc_kyber.h b/wolfssl/wolfcrypt/wc_kyber.h index 9b9163d0e..dab942da3 100644 --- a/wolfssl/wolfcrypt/wc_kyber.h +++ b/wolfssl/wolfcrypt/wc_kyber.h @@ -44,18 +44,6 @@ #define KYBER_NOINLINE #endif -/* Define algorithm type when not excluded. */ - -#ifndef WOLFSSL_NO_KYBER512 -#define WOLFSSL_KYBER512 -#endif -#ifndef WOLFSSL_NO_KYBER768 -#define WOLFSSL_KYBER768 -#endif -#ifndef WOLFSSL_NO_KYBER1024 -#define WOLFSSL_KYBER1024 -#endif - enum { /* Flags of Kyber keys. */ KYBER_FLAG_PRIV_SET = 0x0001,