diff --git a/configure.ac b/configure.ac index cc33757cf..9a841d2a6 100644 --- a/configure.ac +++ b/configure.ac @@ -963,6 +963,134 @@ then fi +# liboqs +ENABLED_LIBOQS="no" +tryliboqsdir="" +AC_ARG_WITH([liboqs], + [AS_HELP_STRING([--with-liboqs=PATH],[Path to liboqs install (default /usr/local) EXPERIMENTAL!])], + [ + AC_MSG_CHECKING([for liboqs]) + CPPFLAGS="$CPPFLAGS -DHAVE_LIBOQS -DHAVE_TLS_EXTENSIONS" + LIBS="$LIBS -loqs" + + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ OQS_init(); ]])], [ liboqs_linked=yes ],[ liboqs_linked=no ]) + + if test "x$liboqs_linked" = "xno" ; then + if test "x$withval" != "xno" ; then + tryliboqsdir=$withval + fi + if test "x$withval" = "xyes" ; then + tryliboqsdir="/usr/local" + fi + + LDFLAGS="$AM_LDFLAGS $LDFLAGS -L$tryliboqsdir/lib" + CPPFLAGS="$CPPFLAGS -I$tryliboqsdir/include" + + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ OQS_init(); ]])], [ liboqs_linked=yes ],[ liboqs_linked=no ]) + + if test "x$liboqs_linked" = "xno" ; then + AC_MSG_ERROR([liboqs isn't found. + If it's already installed, specify its path using --with-liboqs=/dir/]) + fi + AC_MSG_RESULT([yes]) + AM_LDFLAGS="$AM_LDFLAGS -L$tryliboqsdir/lib" + else + AC_MSG_RESULT([yes]) + fi + + if test "x$ENABLED_OPENSSLEXTRA" = "xno" && test "x$ENABLED_OPENSSLCOEXIST" = "xno" + then + ENABLED_OPENSSLEXTRA="yes" + AM_CFLAGS="$AM_CFLAGS -DOPENSSL_EXTRA" + fi + + AM_CFLAGS="$AM_CFLAGS -DHAVE_LIBOQS -DHAVE_TLS_EXTENSIONS" + ENABLED_LIBOQS="yes" + ] +) + + +# KYBER +# Used: +# - SHA3, Shake128 and Shake256, or +# - SHA256, SHA512, AES-CTR +AC_ARG_ENABLE([kyber], + [AS_HELP_STRING([--enable-kyber],[Enable KYBER (default: disabled)])], + [ ENABLED_KYBER=$enableval ], + [ ENABLED_KYBER=no ] + ) + +ENABLED_WC_KYBER=no +for v in `echo $ENABLED_KYBER | tr "," " "` +do + case $v in + yes | all) + ENABLED_KYBER512=yes + ENABLED_KYBER768=yes + ENABLED_KYBER1024=yes + ;; + no) + ;; + wolfssl) + ENABLED_WC_KYBER=yes + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_WC_KYBER" + ;; + 90s) + ENABLED_KYBER_90S=yes + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_KYBER_90S" + ;; + small) + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_KYBER_SMALL" + ;; + 512) + ENABLED_KYBER512=yes + ;; + 768) + ENABLED_KYBER768=yes + ;; + 1024) + ENABLED_KYBER1024=yes + ;; + *) + AC_MSG_ERROR([Invalid choice for KYBER []: $ENABLED_KYBER.]) + break;; + esac +done + +if test "$ENABLED_KYBER" != "no" +then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_HAVE_KYBER" + if test "$ENABLED_WC_KYBER" = "yes" + then + if test "$ENABLED_KYBER512" = ""; then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_NO_KYBER512" + fi + if test "$ENABLED_KYBER768" = ""; then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_NO_KYBER768" + fi + if test "$ENABLED_KYBER1024" = ""; then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_NO_KYBER1024" + fi + + if test "$ENABLED_KYBER_90S" != "yes"; then + test "$enable_sha3" = "" && enable_sha3=yes + test "$enable_shake128" = "" && enable_shake128=yes + test "$enable_shake256" = "" && enable_shake256=yes + else + test "$enable_sha256" = "" && enable_sha256=yes + test "$enable_sha512" = "" && enable_sha512=yes + test "$enable_aesctr" = "" && enable_aesctr=yes + fi + else + # Default is to use liboqs. Make sure its enabled. + if test "$ENABLED_LIBOQS" = "no"; then + AC_MSG_ERROR([The default implementation for kyber is liboqs. + Please use --with-liboqs.]) + fi + fi +fi + + # SINGLE THREADED AC_ARG_ENABLE([singlethreaded], [AS_HELP_STRING([--enable-singlethreaded],[Enable wolfSSL single threaded (default: disabled)])], @@ -3068,7 +3196,6 @@ then fi - # FP ECC, Fixed Point cache ECC AC_ARG_ENABLE([fpecc], [AS_HELP_STRING([--enable-fpecc],[Enable Fixed Point cache ECC (default: disabled)])], @@ -4533,52 +4660,6 @@ then AC_MSG_ERROR([cannot enable user crypto and fips, user crypto posibility of using code in fips boundary.]) fi -# liboqs -ENABLED_LIBOQS="no" -tryliboqsdir="" -AC_ARG_WITH([liboqs], - [AS_HELP_STRING([--with-liboqs=PATH],[Path to liboqs install (default /usr/local) EXPERIMENTAL!])], - [ - AC_MSG_CHECKING([for liboqs]) - CPPFLAGS="$CPPFLAGS -DHAVE_LIBOQS -DHAVE_TLS_EXTENSIONS" - LIBS="$LIBS -loqs" - - AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ OQS_init(); ]])], [ liboqs_linked=yes ],[ liboqs_linked=no ]) - - if test "x$liboqs_linked" = "xno" ; then - if test "x$withval" != "xno" ; then - tryliboqsdir=$withval - fi - if test "x$withval" = "xyes" ; then - tryliboqsdir="/usr/local" - fi - - LDFLAGS="$AM_LDFLAGS $LDFLAGS -L$tryliboqsdir/lib" - CPPFLAGS="$CPPFLAGS -I$tryliboqsdir/include" - - AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ OQS_init(); ]])], [ liboqs_linked=yes ],[ liboqs_linked=no ]) - - if test "x$liboqs_linked" = "xno" ; then - AC_MSG_ERROR([liboqs isn't found. - If it's already installed, specify its path using --with-liboqs=/dir/]) - fi - AC_MSG_RESULT([yes]) - AM_LDFLAGS="$AM_LDFLAGS -L$tryliboqsdir/lib" - else - AC_MSG_RESULT([yes]) - fi - - if test "x$ENABLED_OPENSSLEXTRA" = "xno" && test "x$ENABLED_OPENSSLCOEXIST" = "xno" - then - ENABLED_OPENSSLEXTRA="yes" - AM_CFLAGS="$AM_CFLAGS -DOPENSSL_EXTRA" - fi - - AM_CFLAGS="$AM_CFLAGS -DHAVE_LIBOQS -DHAVE_TLS_EXTENSIONS" - ENABLED_LIBOQS="yes" - ] -) - # Whitewood netRandom client library ENABLED_WNR="no" trywnrdir="" @@ -8042,6 +8123,7 @@ AM_CONDITIONAL([BUILD_FE448], [test "x$ENABLED_FE448" = "xyes" || test "x$ENABLE AM_CONDITIONAL([BUILD_GE448], [test "x$ENABLED_GE448" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"]) AM_CONDITIONAL([BUILD_CURVE448],[test "x$ENABLED_CURVE448" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"]) AM_CONDITIONAL([BUILD_CURVE448_SMALL],[test "x$ENABLED_CURVE448_SMALL" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"]) +AM_CONDITIONAL([BUILD_WC_KYBER],[test "x$ENABLED_WC_KYBER" != "xno" || test "x$ENABLED_USERSETTINGS" = "xyes"]) AM_CONDITIONAL([BUILD_ECCSI],[test "x$ENABLED_ECCSI" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"]) AM_CONDITIONAL([BUILD_SAKKE],[test "x$ENABLED_SAKKE" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"]) AM_CONDITIONAL([BUILD_MEMORY],[test "x$ENABLED_MEMORY" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"]) @@ -8443,14 +8525,16 @@ echo " * DH Default Parameters: $ENABLED_DHDEFAULTPARAMS" echo " * ECC: $ENABLED_ECC" echo " * ECC Custom Curves: $ENABLED_ECCCUSTCURVES" echo " * ECC Minimum Bits: $ENABLED_ECCMINSZ" +echo " * FPECC: $ENABLED_FPECC" +echo " * ECC_ENCRYPT: $ENABLED_ECC_ENCRYPT" echo " * CURVE25519: $ENABLED_CURVE25519" echo " * ED25519: $ENABLED_ED25519" echo " * ED25519 streaming: $ENABLED_ED25519_STREAM" echo " * CURVE448: $ENABLED_CURVE448" echo " * ED448: $ENABLED_ED448" echo " * ED448 streaming: $ENABLED_ED448_STREAM" -echo " * FPECC: $ENABLED_FPECC" -echo " * ECC_ENCRYPT: $ENABLED_ECC_ENCRYPT" +echo " * KYBER: $ENABLED_KYBER" +echo " * KYBER wolfSSL impl: $ENABLED_WC_KYBER" echo " * ECCSI $ENABLED_ECCSI" echo " * SAKKE $ENABLED_SAKKE" echo " * ASN: $ENABLED_ASN" diff --git a/src/include.am b/src/include.am index ab12ae4e9..fa8a66b07 100644 --- a/src/include.am +++ b/src/include.am @@ -104,6 +104,14 @@ if BUILD_ECC src_libwolfssl_la_SOURCES += wolfcrypt/src/ecc.c endif +if BUILD_WC_KYBER +src_libwolfssl_la_SOURCES += wolfcrypt/src/wc_kyber.c +src_libwolfssl_la_SOURCES += wolfcrypt/src/wc_kyber_poly.c +if BUILD_INTELASM +src_libwolfssl_la_SOURCES += wolfcrypt/src/wc_kyber_asm.S +endif +endif + if BUILD_AES src_libwolfssl_la_SOURCES += wolfcrypt/src/aes.c endif @@ -185,6 +193,14 @@ if BUILD_ECC src_libwolfssl_la_SOURCES += wolfcrypt/src/ecc.c endif +if BUILD_WC_KYBER +src_libwolfssl_la_SOURCES += wolfcrypt/src/wc_kyber.c +src_libwolfssl_la_SOURCES += wolfcrypt/src/wc_kyber_poly.c +if BUILD_INTELASM +src_libwolfssl_la_SOURCES += wolfcrypt/src/wc_kyber_asm.S +endif +endif + if BUILD_AES src_libwolfssl_la_SOURCES += wolfcrypt/src/aes.c if BUILD_ARMASM @@ -587,6 +603,14 @@ src_libwolfssl_la_SOURCES += wolfcrypt/src/sakke.c endif endif +if BUILD_WC_KYBER +src_libwolfssl_la_SOURCES += wolfcrypt/src/wc_kyber.c +src_libwolfssl_la_SOURCES += wolfcrypt/src/wc_kyber_poly.c +if BUILD_INTELASM +src_libwolfssl_la_SOURCES += wolfcrypt/src/wc_kyber_asm.S +endif +endif + if BUILD_CURVE25519 src_libwolfssl_la_SOURCES += wolfcrypt/src/curve25519.c endif @@ -663,6 +687,7 @@ if BUILD_LIBOQS src_libwolfssl_la_SOURCES += wolfcrypt/src/falcon.c src_libwolfssl_la_SOURCES += wolfcrypt/src/dilithium.c src_libwolfssl_la_SOURCES += wolfcrypt/src/sphincs.c +src_libwolfssl_la_SOURCES += wolfcrypt/src/ext_kyber.c endif if BUILD_LIBZ diff --git a/src/internal.c b/src/internal.c index b5f70c7e8..fc96dfae4 100644 --- a/src/internal.c +++ b/src/internal.c @@ -7629,7 +7629,7 @@ void SSL_ResourceFree(WOLFSSL* ssl) } #endif #endif -#ifdef HAVE_PQC +#if defined(HAVE_PQC) && defined(HAVE_FALCON) FreeKey(ssl, DYNAMIC_TYPE_FALCON, (void**)&ssl->peerFalconKey); ssl->peerFalconKeyPresent = 0; #endif @@ -7864,7 +7864,7 @@ void FreeHandshakeResources(WOLFSSL* ssl) FreeKey(ssl, DYNAMIC_TYPE_ED448, (void**)&ssl->peerEd448Key); ssl->peerEd448KeyPresent = 0; #endif /* HAVE_ED448 */ -#ifdef HAVE_PQC +#if defined(HAVE_PQC) && defined(HAVE_FALCON) FreeKey(ssl, DYNAMIC_TYPE_FALCON, (void**)&ssl->peerFalconKey); ssl->peerFalconKeyPresent = 0; #endif /* HAVE_PQC */ diff --git a/src/ssl.c b/src/ssl.c index 2921bc494..ae906b848 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -225,6 +225,7 @@ const WOLF_EC_NIST_NAME kNistCurves[] = { {XSTR_SIZEOF("KYBER_LEVEL1"), "KYBER_LEVEL1", WOLFSSL_KYBER_LEVEL1}, {XSTR_SIZEOF("KYBER_LEVEL3"), "KYBER_LEVEL3", WOLFSSL_KYBER_LEVEL3}, {XSTR_SIZEOF("KYBER_LEVEL5"), "KYBER_LEVEL5", WOLFSSL_KYBER_LEVEL5}, +#ifdef HAVE_LIBOQS {XSTR_SIZEOF("NTRU_HPS_LEVEL1"), "NTRU_HPS_LEVEL1", WOLFSSL_NTRU_HPS_LEVEL1}, {XSTR_SIZEOF("NTRU_HPS_LEVEL3"), "NTRU_HPS_LEVEL3", WOLFSSL_NTRU_HPS_LEVEL3}, {XSTR_SIZEOF("NTRU_HPS_LEVEL5"), "NTRU_HPS_LEVEL5", WOLFSSL_NTRU_HPS_LEVEL5}, @@ -248,6 +249,7 @@ const WOLF_EC_NIST_NAME kNistCurves[] = { {XSTR_SIZEOF("P256_KYBER_90S_LEVEL1"), "P256_KYBER_90S_LEVEL1", WOLFSSL_P256_KYBER_90S_LEVEL1}, {XSTR_SIZEOF("P384_KYBER_90S_LEVEL3"), "P384_KYBER_90S_LEVEL3", WOLFSSL_P384_KYBER_90S_LEVEL3}, {XSTR_SIZEOF("P521_KYBER_90S_LEVEL5"), "P521_KYBER_90S_LEVEL5", WOLFSSL_P521_KYBER_90S_LEVEL5}, +#endif #endif {0, NULL, 0}, }; @@ -2879,6 +2881,7 @@ static int isValidCurveGroup(word16 name) case WOLFSSL_KYBER_LEVEL1: case WOLFSSL_KYBER_LEVEL3: case WOLFSSL_KYBER_LEVEL5: + #ifdef HAVE_LIBOQS case WOLFSSL_NTRU_HPS_LEVEL1: case WOLFSSL_NTRU_HPS_LEVEL3: case WOLFSSL_NTRU_HPS_LEVEL5: @@ -2902,6 +2905,7 @@ static int isValidCurveGroup(word16 name) case WOLFSSL_P256_KYBER_90S_LEVEL1: case WOLFSSL_P384_KYBER_90S_LEVEL3: case WOLFSSL_P521_KYBER_90S_LEVEL5: + #endif #endif return 1; @@ -6689,7 +6693,7 @@ int ProcessBuffer(WOLFSSL_CTX* ctx, const unsigned char* buff, } #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) || \ - defined(HAVE_PQC) || !defined(NO_RSA) + (defined(HAVE_PQC) && defined(HAVE_LIBOQS)) || !defined(NO_RSA) if (ssl) { #if defined(HAVE_ECC) || defined(HAVE_ED25519) || \ (defined(HAVE_CURVE448) && defined(HAVE_ED448)) @@ -20754,6 +20758,19 @@ const char* wolfSSL_get_curve_name(WOLFSSL* ssl) #elif defined(HAVE_PQM4) case WOLFSSL_KYBER_LEVEL1: return "KYBER_LEVEL1"; +#elif defined(WOLFSSL_WC_KYBER) + #ifdef WOLFSSL_KYBER512 + case WOLFSSL_KYBER_LEVEL1: + return "KYBER_LEVEL1"; + #endif + #ifdef WOLFSSL_KYBER768 + case WOLFSSL_KYBER_LEVEL3: + return "KYBER_LEVEL3"; + #endif + #ifdef WOLFSSL_KYBER1024 + case WOLFSSL_KYBER_LEVEL5: + return "KYBER_LEVEL5"; + #endif #endif } } diff --git a/src/tls.c b/src/tls.c index 8a4f3dc19..8c0c8bbd1 100644 --- a/src/tls.c +++ b/src/tls.c @@ -49,14 +49,21 @@ #include #endif #ifdef HAVE_PQC -#ifdef HAVE_LIBOQS +#ifdef WOLFSSL_HAVE_KYBER + #include +#ifdef WOLFSSL_WC_KYBER + #include +#elif defined(HAVE_LIBOQS) #include + #include #elif defined(HAVE_PQM4) #include "api_kyber.h" #define PQM4_PUBLIC_KEY_LENGTH CRYPTO_PUBLICKEYBYTES #define PQM4_PRIVATE_KEY_LENGTH CRYPTO_SECRETKEYBYTES #define PQM4_SHARED_SECRET_LENGTH CRYPTO_BYTES #define PQM4_CIPHERTEXT_LENGTH CRYPTO_CIPHERTEXTBYTES + #include +#endif #endif #endif @@ -7055,7 +7062,35 @@ static int TLSX_KeyShare_GenEccKey(WOLFSSL *ssl, KeyShareEntry* kse) } #ifdef HAVE_PQC -#ifdef HAVE_LIBOQS +#ifdef WOLFSSL_WC_KYBER +static int kyber_id2type(int id, int *type) +{ + int ret = 0; + + switch (id) { + #ifdef WOLFSSL_KYBER512 + case WOLFSSL_KYBER_LEVEL1: + *type = KYBER512; + break; + #endif + #ifdef WOLFSSL_KYBER768 + case WOLFSSL_KYBER_LEVEL3: + *type = KYBER768; + break; + #endif + #ifdef WOLFSSL_KYBER1024 + case WOLFSSL_KYBER_LEVEL5: + *type = KYBER1024; + break; + #endif + default: + ret = NOT_COMPILED_IN; + break; + } + + return ret; +} +#elif defined(HAVE_LIBOQS) /* Transform a group ID into an OQS Algorithm name as a string. */ static const char* OQS_ID2name(int id) { @@ -7152,7 +7187,120 @@ static void findEccPqc(int *ecc, int *pqc, int group) * kse The key share entry object. * returns 0 on success, otherwise failure. */ -#ifdef HAVE_LIBOQS +#ifdef WOLFSSL_WC_KYBER +static int TLSX_KeyShare_GenPqcKey(WOLFSSL *ssl, KeyShareEntry* kse) +{ + int ret = 0; + int type = 0; + KyberKey kem[1]; + byte* pubKey = NULL; + byte* privKey = NULL; + KeyShareEntry *ecc_kse = NULL; + int oqs_group = 0; + int ecc_group = 0; + word32 privSz = 0; + word32 pubSz = 0; + + findEccPqc(&ecc_group, &oqs_group, kse->group); + ret = kyber_id2type(oqs_group, &type); + if (ret == NOT_COMPILED_IN) { + WOLFSSL_MSG("Invalid Kyber algorithm specified."); + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + ret = wc_KyberKey_Init(type, kem, ssl->heap, ssl->devId); + if (ret != 0) { + WOLFSSL_MSG("Failed to intialize Kyber Key."); + } + } + + if (ret == 0) { + ecc_kse = (KeyShareEntry*)XMALLOC(sizeof(*ecc_kse), ssl->heap, + DYNAMIC_TYPE_TLSX); + if (ecc_kse == NULL) { + WOLFSSL_MSG("ecc_kse memory allocation failure"); + ret = MEMORY_ERROR; + } + } + + 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) { + ecc_kse->group = ecc_group; + ret = TLSX_KeyShare_GenEccKey(ssl, ecc_kse); + /* If fail, no error message, TLSX_KeyShare_GenEccKey will do it. */ + } + + if (ret == 0) { + pubKey = (byte*)XMALLOC(ecc_kse->pubKeyLen + pubSz, ssl->heap, + DYNAMIC_TYPE_PUBLIC_KEY); + if (pubKey == NULL) { + WOLFSSL_MSG("pubkey memory allocation failure"); + ret = MEMORY_ERROR; + } + } + + 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) { + WOLFSSL_MSG("lKyber keygen failure"); + } + } + if (ret == 0) { + ret = wc_KyberKey_EncodePublicKey(kem, pubKey + ecc_kse->pubKeyLen, + pubSz); + } + if (ret == 0) { + ret = wc_KyberKey_EncodePrivateKey(kem, privKey, privSz); + } + if (ret == 0) { + XMEMCPY(pubKey, ecc_kse->pubKey, ecc_kse->pubKeyLen); + kse->pubKey = pubKey; + kse->pubKeyLen = ecc_kse->pubKeyLen + pubSz; + pubKey = NULL; + + /* Note we are saving the OQS private key and ECC private key + * separately. That's because the ECC private key is not simply a + * buffer. Its is an ecc_key struct. + */ + kse->privKey = privKey; + privKey = NULL; + + kse->key = ecc_kse->key; + ecc_kse->key = NULL; + } + +#ifdef WOLFSSL_DEBUG_TLS + WOLFSSL_MSG("Public Kyber Key"); + WOLFSSL_BUFFER(kse->pubKey, kse->pubKeyLen ); +#endif + + wc_KyberKey_Free(kem); + TLSX_KeyShare_FreeAll(ecc_kse, ssl->heap); + if (pubKey != NULL) + XFREE(pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); + if (privKey != NULL) + XFREE(privKey, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); + + return ret; +} +#elif defined(HAVE_LIBOQS) static int TLSX_KeyShare_GenPqcKey(WOLFSSL *ssl, KeyShareEntry* kse) { int ret = 0; @@ -7940,7 +8088,174 @@ static int TLSX_KeyShare_ProcessEcc(WOLFSSL* ssl, KeyShareEntry* keyShareEntry) } #ifdef HAVE_PQC -#ifdef HAVE_LIBOQS +#ifdef WOLFSSL_WC_KYBER +/* Process the Kyber key share extension on the client side. + * + * ssl The SSL/TLS object. + * keyShareEntry The key share entry object to use to calculate shared secret. + * returns 0 on success and other values indicate failure. + */ +static int TLSX_KeyShare_ProcessPqc(WOLFSSL* ssl, KeyShareEntry* keyShareEntry) +{ + int ret = 0; + int type; + KyberKey kem[1]; + 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; + + if (keyShareEntry->ke == NULL) { + WOLFSSL_MSG("Invalid OQS algorithm specified."); + return BAD_FUNC_ARG; + } + + if (ssl->options.side == WOLFSSL_SERVER_END) { + /* I am the server, the shared secret has already been generated and + * is in keyShareEntry->ke; copy it to the pre-master secret + * pre-allocated buffer. */ + if (keyShareEntry->keLen > ENCRYPT_LEN) { + WOLFSSL_MSG("shared secret is too long."); + return LENGTH_ERROR; + } + + XMEMCPY(ssl->arrays->preMasterSecret, keyShareEntry->ke, + keyShareEntry->keLen); + ssl->arrays->preMasterSz = keyShareEntry->keLen; + XFREE(keyShareEntry->ke, sl->heap, DYNAMIC_TYPE_SECRET) + keyShareEntry->ke = NULL; + keyShareEntry->keLen = 0; + return 0; + } + + /* I am the client, the ciphertext is in keyShareEntry->ke */ + findEccPqc(&ecc_group, &oqs_group, keyShareEntry->group); + + ret = kyber_id2type(oqs_group, &type); + if (ret != 0) { + WOLFSSL_MSG("Invalid OQS algorithm specified."); + ret = BAD_FUNC_ARG; + } + if (ret == 0) { + ret = wc_KyberKey_Init(type, kem, ssl->heap, INVALID_DEVID); + if (ret != 0) { + WOLFSSL_MSG("Error creating Kyber KEM"); + } + } + + if (ret == 0) { + ret = wc_KyberKey_SharedSecretSize(kem, &ssSz); + } + if (ret == 0) { + sharedSecretLen = ssSz; + switch (ecc_group) { + case WOLFSSL_ECC_SECP256R1: + sharedSecretLen += 32; + outlen = 32; + break; + case WOLFSSL_ECC_SECP384R1: + sharedSecretLen += 48; + outlen = 48; + break; + case WOLFSSL_ECC_SECP521R1: + sharedSecretLen += 66; + outlen = 66; + break; + default: + break; + } + + ret = wc_ecc_init_ex(&eccpubkey, ssl->heap, ssl->devId); + if (ret != 0) { + WOLFSSL_MSG("Memory allocation error."); + ret = MEMORY_E; + } + } + if (ret == 0) { + sharedSecret = (byte*)XMALLOC(sharedSecretLen, ssl->heap, + DYNAMIC_TYPE_TLSX); + if (sharedSecret == NULL) { + WOLFSSL_MSG("Memory allocation error."); + ret = MEMORY_E; + } + } + if (ret == 0) { + ret = wc_KyberKey_CipherTextSize(kem, &ctSz); + } + if (ret == 0) { + ret = wc_KyberKey_PrivateKeySize(kem, &privSz); + } + if (ret == 0) { + ret = wc_KyberKey_DecodePrivateKey(kem, keyShareEntry->privKey, privSz); + } + if (ret == 0) { + ret = wc_KyberKey_Decapsulate(kem, sharedSecret + outlen, + keyShareEntry->ke + keyShareEntry->keLen - ctSz, ctSz); + if (ret != 0) { + WOLFSSL_MSG("wc_KyberKey decapsulation failure."); + ret = BAD_FUNC_ARG; + } + } + + if (ecc_group != 0) { + if (ret == 0) { + /* Point is validated by import function. */ + ret = wc_ecc_import_x963(keyShareEntry->ke, + keyShareEntry->keLen - ctSz, + &eccpubkey); + if (ret != 0) { + WOLFSSL_MSG("ECC Public key import error."); + } + } + +#if defined(ECC_TIMING_RESISTANT) && (!defined(HAVE_FIPS) || \ + (!defined(HAVE_FIPS_VERSION) || (HAVE_FIPS_VERSION != 2))) && \ + !defined(HAVE_SELFTEST) + if (ret == 0) { + ret = wc_ecc_set_rng(keyShareEntry->key, ssl->rng); + if (ret != 0) { + WOLFSSL_MSG("Failure to set the ECC private key RNG."); + } + } +#endif + + if (ret == 0) { + PRIVATE_KEY_UNLOCK(); + ret = wc_ecc_shared_secret(keyShareEntry->key, &eccpubkey, + sharedSecret, &outlen); + PRIVATE_KEY_LOCK(); + if (outlen != sharedSecretLen - ssSz) { + WOLFSSL_MSG("ECC shared secret derivation error."); + ret = BAD_FUNC_ARG; + } + } + } + if ((ret == 0) && (sharedSecretLen > ENCRYPT_LEN)) { + WOLFSSL_MSG("shared secret is too long."); + ret = LENGTH_ERROR; + } + + if (ret == 0) { + /* Copy the shared secret to the pre-master secret pre-allocated + * buffer. */ + XMEMCPY(ssl->arrays->preMasterSecret, sharedSecret, sharedSecretLen); + ssl->arrays->preMasterSz = (word32) sharedSecretLen; + } + + if (sharedSecret != NULL) { + XFREE(sharedSecret, ssl->heap, DYNAMIC_TYPE_SECRET); + } + + wc_ecc_free(&eccpubkey); + wc_KyberKey_Free(kem); + return ret; +} +#elif defined(HAVE_LIBOQS) /* Process the liboqs key share extension on the client side. * * ssl The SSL/TLS object. @@ -8570,10 +8885,171 @@ static int TLSX_KeyShare_New(KeyShareEntry** list, int group, void *heap, } #ifdef HAVE_PQC -#ifdef HAVE_LIBOQS +#ifdef WOLFSSL_WC_KYBER +static int server_generate_pqc_ciphertext(WOLFSSL* ssl, + KeyShareEntry* keyShareEntry, byte* data, word16 len) +{ + /* I am the server. The data parameter is the client's public key. I need + * to generate the public information (AKA ciphertext) and shared secret + * here. Note the "public information" is equivalent to a the public key in + * key exchange parlance. That's why it is being assigned to pubKey. + */ + int type; + KyberKey kem[1]; + byte* sharedSecret = NULL; + byte* ciphertext = NULL; + int ret = 0; + int oqs_group = 0; + int ecc_group = 0; + KeyShareEntry *ecc_kse = NULL; + ecc_key eccpubkey; + word32 outlen = 0; + word32 pubSz = 0; + word32 ctSz = 0; + word32 ssSz = 0; + + findEccPqc(&ecc_group, &oqs_group, keyShareEntry->group); + ret = kyber_id2type(oqs_group, &type); + if (ret != 0) { + WOLFSSL_MSG("Invalid Kyber algorithm specified."); + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + ret = wc_ecc_init_ex(&eccpubkey, ssl->heap, ssl->devId); + if (ret != 0) { + WOLFSSL_MSG("Could not do ECC public key initialization."); + ret = MEMORY_E; + } + } + if (ret == 0) { + ecc_kse = (KeyShareEntry*)XMALLOC(sizeof(*ecc_kse), ssl->heap, + DYNAMIC_TYPE_TLSX); + if (ecc_kse == NULL) { + WOLFSSL_MSG("ecc_kse memory allocation failure"); + ret = MEMORY_ERROR; + } + } + + if (ret == 0) { + XMEMSET(ecc_kse, 0, sizeof(*ecc_kse)); + } + + if (ret == 0 && ecc_group != 0) { + ecc_kse->group = ecc_group; + ret = TLSX_KeyShare_GenEccKey(ssl, ecc_kse); + if (ret != 0) { + /* No message, TLSX_KeyShare_GenEccKey() will do it. */ + return ret; + } + ret = 0; + } + + if (ret == 0) { + ret = wc_KyberKey_Init(type, kem, ssl->heap, INVALID_DEVID); + if (ret == 0) { + WOLFSSL_MSG("Error creating Kyber KEM"); + } + } + if (ret == 0) { + ret = wc_KyberKey_PublicKeySize(kem, &pubSz); + } + if (ret == 0) { + ret = wc_KyberKey_CipherTextSize(kem, &ctSz); + } + if (ret == 0) { + ret = wc_KyberKey_SharedSecretSize(kem, &ssSz); + } + + if (ret == 0 && len != pubSz + ecc_kse->pubKeyLen) { + WOLFSSL_MSG("Invalid public key."); + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + sharedSecret = (byte*)XMALLOC(ecc_kse->keyLen + ssSz, ssl->heap, + DYNAMIC_TYPE_TLSX); + ciphertext = (byte*)XMALLOC(ecc_kse->pubKeyLen + ctSz, ssl->heap, + DYNAMIC_TYPE_TLSX); + + if (sharedSecret == NULL || ciphertext == NULL) { + WOLFSSL_MSG("Ciphertext/shared secret memory allocation failure."); + ret = MEMORY_E; + } + } + + if (ecc_group != 0) { + if (ret == 0) { + /* Point is validated by import function. */ + ret = wc_ecc_import_x963(data, len - pubSz, &eccpubkey); + if (ret != 0) { + WOLFSSL_MSG("Bad ECC public key."); + } + } + +#if defined(ECC_TIMING_RESISTANT) && (!defined(HAVE_FIPS) || \ + (!defined(HAVE_FIPS_VERSION) || (HAVE_FIPS_VERSION != 2))) && \ + !defined(HAVE_SELFTEST) + if (ret == 0) { + ret = wc_ecc_set_rng(ecc_kse->key, ssl->rng); + } +#endif + + if (ret == 0) { + outlen = ecc_kse->keyLen; + PRIVATE_KEY_UNLOCK(); + ret = wc_ecc_shared_secret(ecc_kse->key, &eccpubkey, + sharedSecret, + &outlen); + PRIVATE_KEY_LOCK(); + if (outlen != ecc_kse->keyLen) { + WOLFSSL_MSG("Data length mismatch."); + ret = BAD_FUNC_ARG; + } + } + } + + if (ret == 0) { + ret = wc_KyberKey_DecodePublicKey(kem, data + ecc_kse->pubKeyLen, + pubSz); + } + if (ret == 0) { + ret = wc_KyberKey_Encapsulate(kem, ciphertext + ecc_kse->pubKeyLen, + sharedSecret + outlen, ssl->rng); + if (ret != 0) { + WOLFSSL_MSG("wc_KyberKey encapsulation failure."); + } + } + + if (ret == 0) { + if (keyShareEntry->ke != NULL) { + XFREE(keyShareEntry->ke, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); + } + + keyShareEntry->ke = sharedSecret; + keyShareEntry->keLen = outlen + ssSz; + sharedSecret = NULL; + + XMEMCPY(ciphertext, ecc_kse->pubKey, ecc_kse->pubKeyLen); + keyShareEntry->pubKey = ciphertext; + keyShareEntry->pubKeyLen = (word32)(ecc_kse->pubKeyLen + ctSz); + ciphertext = NULL; + } + + TLSX_KeyShare_FreeAll(ecc_kse, ssl->heap); + if (sharedSecret != NULL) + XFREE(sharedSecret, ssl->heap, DYNAMIC_TYPE_TLSX); + if (ciphertext != NULL) + XFREE(ciphertext, ssl->heap, DYNAMIC_TYPE_TLSX); + wc_ecc_free(&eccpubkey); + wc_KyberKey_Free(kem); + return ret; +} +#elif defined(HAVE_LIBOQS) static int server_generate_pqc_ciphertext(WOLFSSL* ssl, KeyShareEntry* keyShareEntry, - byte* data, word16 len) { + byte* data, word16 len) +{ /* I am the server. The data parameter is the client's public key. I need * to generate the public information (AKA ciphertext) and shared secret * here. Note the "public information" is equivalent to a the public key in @@ -8723,7 +9199,8 @@ static int server_generate_pqc_ciphertext(WOLFSSL* ssl, #elif defined(HAVE_PQM4) static int server_generate_pqc_ciphertext(WOLFSSL* ssl, KeyShareEntry* keyShareEntry, - byte* data, word16 len) { + byte* data, word16 len) +{ /* I am the server. The data parameter is the client's public key. I need * to generate the public information (AKA ciphertext) and shared secret * here. Note the "public information" is equivalent to a the public key in @@ -9061,7 +9538,18 @@ static int TLSX_KeyShare_IsSupported(int namedGroup) #endif #endif #ifdef HAVE_PQC - #ifdef HAVE_LIBOQS + #ifdef WOLFSSL_WC_KYBER + #ifdef WOLFSSL_KYBER512 + case WOLFSSL_KYBER_LEVEL1: + #endif + #ifdef WOLFSSL_KYBER768 + case WOLFSSL_KYBER_LEVEL3: + #endif + #ifdef WOLFSSL_KYBER1024 + case WOLFSSL_KYBER_LEVEL5: + #endif + break; + #elif defined(HAVE_LIBOQS) case WOLFSSL_KYBER_LEVEL1: case WOLFSSL_KYBER_LEVEL3: case WOLFSSL_KYBER_LEVEL5: @@ -9167,9 +9655,22 @@ static int TLSX_KeyShare_GroupRank(WOLFSSL* ssl, int group) /* For the liboqs groups we need to do a runtime check because * liboqs could be compiled to make an algorithm unavailable. */ + #ifdef WOLFSSL_WC_KYBER + #ifdef WOLFSSL_KYBER512 + if (TLSX_KeyShare_IsSupported(WOLFSSL_KYBER_LEVEL1)) + ssl->group[ssl->numGroups++] = WOLFSSL_KYBER_LEVEL1; + #endif + #ifdef WOLFSSL_KYBER768 + if (TLSX_KeyShare_IsSupported(WOLFSSL_KYBER_LEVEL3)) + ssl->group[ssl->numGroups++] = WOLFSSL_KYBER_LEVEL3; + #endif + #ifdef WOLFSSL_KYBER1024 + if (TLSX_KeyShare_IsSupported(WOLFSSL_KYBER_LEVEL5)) + ssl->group[ssl->numGroups++] = WOLFSSL_KYBER_LEVEL5; + #endif + #elif defined(HAVE_LIBOQS) if (TLSX_KeyShare_IsSupported(WOLFSSL_KYBER_LEVEL1)) ssl->group[ssl->numGroups++] = WOLFSSL_KYBER_LEVEL1; - #ifdef HAVE_LIBOQS if (TLSX_KeyShare_IsSupported(WOLFSSL_KYBER_LEVEL3)) ssl->group[ssl->numGroups++] = WOLFSSL_KYBER_LEVEL3; if (TLSX_KeyShare_IsSupported(WOLFSSL_KYBER_LEVEL5)) @@ -9220,6 +9721,9 @@ static int TLSX_KeyShare_GroupRank(WOLFSSL* ssl, int group) ssl->group[ssl->numGroups++] = WOLFSSL_P384_KYBER_90S_LEVEL3; if (TLSX_KeyShare_IsSupported(WOLFSSL_P521_KYBER_90S_LEVEL5)) ssl->group[ssl->numGroups++] = WOLFSSL_P521_KYBER_90S_LEVEL5; + #elif defined(HAVE_PQM4) + if (TLSX_KeyShare_IsSupported(WOLFSSL_KYBER_LEVEL1)) + ssl->group[ssl->numGroups++] = WOLFSSL_KYBER_LEVEL1; #endif /* HAVE_LIBOQS */ #endif /* HAVE_PQC */ } @@ -11233,8 +11737,24 @@ static int TLSX_PopulateSupportedGroups(WOLFSSL* ssl, TLSX** extensions) #endif #ifdef HAVE_PQC +#ifdef WOLFSSL_WC_KYBER +#ifdef WOLFSSL_KYBER512 + if (ret == WOLFSSL_SUCCESS) + ret = TLSX_UseSupportedCurve(extensions, WOLFSSL_KYBER_LEVEL1, + ssl->heap); +#endif +#ifdef WOLFSSL_KYBER768 + if (ret == WOLFSSL_SUCCESS) + ret = TLSX_UseSupportedCurve(extensions, WOLFSSL_KYBER_LEVEL3, + ssl->heap); +#endif +#ifdef WOLFSSL_KYBER768 + if (ret == WOLFSSL_SUCCESS) + ret = TLSX_UseSupportedCurve(extensions, WOLFSSL_KYBER_LEVEL5, + ssl->heap); +#endif +#elif defined(HAVE_LIBOQS) ret = TLSX_UseSupportedCurve(extensions, WOLFSSL_KYBER_LEVEL1, ssl->heap); -#if HAVE_LIBOQS if (ret == WOLFSSL_SUCCESS) ret = TLSX_UseSupportedCurve(extensions, WOLFSSL_KYBER_LEVEL3, ssl->heap); @@ -11310,7 +11830,8 @@ static int TLSX_PopulateSupportedGroups(WOLFSSL* ssl, TLSX** extensions) if (ret == WOLFSSL_SUCCESS) ret = TLSX_UseSupportedCurve(extensions, WOLFSSL_P521_KYBER_90S_LEVEL5, ssl->heap); - +#elif defined(HAVE_PQM4) + ret = TLSX_UseSupportedCurve(extensions, WOLFSSL_KYBER_LEVEL1, ssl->heap); #endif /* HAVE_LIBOQS */ #endif /* HAVE_PQC */ diff --git a/tests/api.c b/tests/api.c index cce198927..3864b776c 100644 --- a/tests/api.c +++ b/tests/api.c @@ -50380,7 +50380,11 @@ static int test_tls13_apis(void) #if defined(HAVE_ECC) && defined(HAVE_SUPPORTED_CURVES) int groups[2] = { WOLFSSL_ECC_SECP256R1, #ifdef HAVE_PQC + #ifndef WOLFSSL_WC_KYBER WOLFSSL_SABER_LEVEL3 + #else + WOLFSSL_KYBER_LEVEL1 + #endif #else WOLFSSL_ECC_SECP256R1 #endif @@ -50402,7 +50406,11 @@ static int test_tls13_apis(void) #if (!defined(NO_ECC256) || defined(HAVE_ALL_CURVES)) && ECC_MIN_KEY_SZ <= 256 "P-256" #ifdef HAVE_PQC + #ifndef WOLFSSL_WC_KYBER ":P256_SABER_LEVEL1" + #else + ":P256_KYBER_LEVEL1" + #endif #endif #endif #ifdef HAVE_PQC diff --git a/tests/include.am b/tests/include.am index 825367b89..6990c0a27 100644 --- a/tests/include.am +++ b/tests/include.am @@ -27,6 +27,7 @@ EXTRA_DIST += tests/unit.h \ tests/test-tls13-ecc.conf \ tests/test-tls13-psk.conf \ tests/test-tls13-pq.conf \ + tests/test-tls13-pq-2.conf \ tests/test-psk.conf \ tests/test-psk-no-id.conf \ tests/test-psk-no-id-sha2.conf \ diff --git a/tests/suites.c b/tests/suites.c index 56c2186bd..dc46a4b41 100644 --- a/tests/suites.c +++ b/tests/suites.c @@ -914,6 +914,17 @@ int SuiteTest(int argc, char** argv) args.return_code = EXIT_FAILURE; goto exit; } + #ifdef HAVE_LIBOQS + /* add TLSv13 pq tests */ + XSTRLCPY(argv0[1], "tests/test-tls13-pq-2.conf", sizeof(argv0[1])); + printf("starting TLSv13 post-quantum groups tests\n"); + test_harness(&args); + if (args.return_code != 0) { + printf("error from script %d\n", args.return_code); + args.return_code = EXIT_FAILURE; + goto exit; + } + #endif #endif #endif #if defined(WC_RSA_PSS) && (!defined(HAVE_FIPS) || \ diff --git a/tests/test-tls13-pq-2.conf b/tests/test-tls13-pq-2.conf new file mode 100644 index 000000000..60a1ada94 --- /dev/null +++ b/tests/test-tls13-pq-2.conf @@ -0,0 +1,230 @@ +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc KYBER_90S_LEVEL1 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc KYBER_90S_LEVEL1 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc KYBER_90S_LEVEL3 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc KYBER_90S_LEVEL3 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc KYBER_90S_LEVEL5 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc KYBER_90S_LEVEL5 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc NTRU_HPS_LEVEL1 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc NTRU_HPS_LEVEL1 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc NTRU_HPS_LEVEL3 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc NTRU_HPS_LEVEL3 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc NTRU_HPS_LEVEL5 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc NTRU_HPS_LEVEL5 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc NTRU_HRSS_LEVEL3 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc NTRU_HRSS_LEVEL3 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc SABER_LEVEL1 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc SABER_LEVEL1 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc SABER_LEVEL3 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc SABER_LEVEL3 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc SABER_LEVEL5 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc SABER_LEVEL5 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P256_NTRU_HPS_LEVEL1 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P256_NTRU_HPS_LEVEL1 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P384_NTRU_HPS_LEVEL3 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P384_NTRU_HPS_LEVEL3 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P521_NTRU_HPS_LEVEL5 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P521_NTRU_HPS_LEVEL5 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P384_NTRU_HRSS_LEVEL3 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P384_NTRU_HRSS_LEVEL3 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P256_SABER_LEVEL1 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P256_SABER_LEVEL1 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P384_SABER_LEVEL3 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P384_SABER_LEVEL3 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P521_SABER_LEVEL5 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P521_SABER_LEVEL5 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P256_KYBER_LEVEL1 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P256_KYBER_LEVEL1 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P384_KYBER_LEVEL3 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P384_KYBER_LEVEL3 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P521_KYBER_LEVEL5 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P521_KYBER_LEVEL5 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P256_KYBER_90S_LEVEL1 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P256_KYBER_90S_LEVEL1 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P384_KYBER_90S_LEVEL3 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P384_KYBER_90S_LEVEL3 + +# server TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P521_KYBER_90S_LEVEL5 + +# client TLSv1.3 with post-quantum group +-v 4 +-l TLS13-AES256-GCM-SHA384 +--pqc P521_KYBER_90S_LEVEL5 + diff --git a/tests/test-tls13-pq.conf b/tests/test-tls13-pq.conf index a3f2a6af8..9d2b218de 100644 --- a/tests/test-tls13-pq.conf +++ b/tests/test-tls13-pq.conf @@ -28,233 +28,3 @@ -l TLS13-AES256-GCM-SHA384 --pqc KYBER_LEVEL5 -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc KYBER_90S_LEVEL1 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc KYBER_90S_LEVEL1 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc KYBER_90S_LEVEL3 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc KYBER_90S_LEVEL3 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc KYBER_90S_LEVEL5 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc KYBER_90S_LEVEL5 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc NTRU_HPS_LEVEL1 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc NTRU_HPS_LEVEL1 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc NTRU_HPS_LEVEL3 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc NTRU_HPS_LEVEL3 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc NTRU_HPS_LEVEL5 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc NTRU_HPS_LEVEL5 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc NTRU_HRSS_LEVEL3 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc NTRU_HRSS_LEVEL3 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc SABER_LEVEL1 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc SABER_LEVEL1 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc SABER_LEVEL3 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc SABER_LEVEL3 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc SABER_LEVEL5 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc SABER_LEVEL5 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P256_NTRU_HPS_LEVEL1 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P256_NTRU_HPS_LEVEL1 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P384_NTRU_HPS_LEVEL3 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P384_NTRU_HPS_LEVEL3 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P521_NTRU_HPS_LEVEL5 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P521_NTRU_HPS_LEVEL5 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P384_NTRU_HRSS_LEVEL3 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P384_NTRU_HRSS_LEVEL3 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P256_SABER_LEVEL1 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P256_SABER_LEVEL1 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P384_SABER_LEVEL3 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P384_SABER_LEVEL3 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P521_SABER_LEVEL5 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P521_SABER_LEVEL5 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P256_KYBER_LEVEL1 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P256_KYBER_LEVEL1 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P384_KYBER_LEVEL3 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P384_KYBER_LEVEL3 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P521_KYBER_LEVEL5 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P521_KYBER_LEVEL5 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P256_KYBER_90S_LEVEL1 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P256_KYBER_90S_LEVEL1 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P384_KYBER_90S_LEVEL3 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P384_KYBER_90S_LEVEL3 - -# server TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P521_KYBER_90S_LEVEL5 - -# client TLSv1.3 with post-quantum group --v 4 --l TLS13-AES256-GCM-SHA384 ---pqc P521_KYBER_90S_LEVEL5 - diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index 3eb3f5902..282069f7d 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -254,6 +254,12 @@ #ifdef HAVE_ED448 #include #endif +#ifdef WOLFSSL_HAVE_KYBER + #include +#ifdef WOLFSSL_WC_KYBER + #include +#endif +#endif #ifdef WOLFCRYPT_HAVE_ECCSI #include #endif @@ -263,6 +269,7 @@ #ifdef HAVE_LIBOQS #include #include + #include #endif #if defined(HAVE_PQC) @@ -284,6 +291,7 @@ #define PQM4_SHARED_SECRET_LENGTH CRYPTO_BYTES #define PQM4_CIPHERTEXT_LENGTH CRYPTO_CIPHERTEXTBYTES typedef char OQS_KEM; + #include #endif #include @@ -431,6 +439,7 @@ #define BENCH_RSA 0x00000002 #define BENCH_RSA_SZ 0x00000004 #define BENCH_DH 0x00000010 +#define BENCH_KYBER 0x00000020 #define BENCH_ECC_MAKEKEY 0x00001000 #define BENCH_ECC 0x00002000 #define BENCH_ECC_ENCRYPT 0x00004000 @@ -694,6 +703,9 @@ static const bench_alg bench_asym_opt[] = { #ifndef NO_DH { "-dh", BENCH_DH }, #endif +#ifdef WOLFSSL_HAVE_KYBER + { "-kyber", BENCH_KYBER }, +#endif #ifdef HAVE_ECC { "-ecc-kg", BENCH_ECC_MAKEKEY }, { "-ecc", BENCH_ECC }, @@ -753,7 +765,7 @@ static const bench_alg bench_other_opt[] = { #endif /* !WOLFSSL_BENCHMARK_ALL && !NO_MAIN_DRIVER */ -#if defined(HAVE_PQC) +#if defined(HAVE_PQC) && (defined(HAVE_LIBOQS) || defined(HAVE_PQM4)) /* The post-quantum-specific mapping of command line option to bit values and * OQS name. */ typedef struct bench_pq_alg { @@ -934,13 +946,14 @@ static const char* bench_result_words1[][4] = { defined(HAVE_ECC) || !defined(NO_DH) || defined(HAVE_ECC_ENCRYPT) || \ defined(HAVE_CURVE25519) || defined(HAVE_CURVE25519_SHARED_SECRET) || \ defined(HAVE_ED25519) || defined(HAVE_CURVE448) || \ - defined(HAVE_CURVE448_SHARED_SECRET) || defined(HAVE_ED448) + defined(HAVE_CURVE448_SHARED_SECRET) || defined(HAVE_ED448) || \ + defined(WOLFSSL_HAVE_KYBER) -static const char* bench_desc_words[][14] = { - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 */ - {"public", "private", "key gen", "agree" , "sign", "verify", "encryption", "decryption", "rsk gen", "encap", "derive", "valid", "pair gen", NULL}, /* 0 English */ +static const char* bench_desc_words[][15] = { + /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */ + {"public", "private", "key gen", "agree" , "sign", "verify", "encryption", "decryption", "rsk gen", "encap", "derive", "valid", "pair gen", "decap", NULL}, /* 0 English */ #ifndef NO_MULTIBYTE_PRINT - {"公開鍵", "秘密鍵" ,"鍵生成" , "鍵共有" , "署名", "検証" , "暗号化" , "復号化" , "rsk gen", "encap", "derive", "valid", "pair gen", NULL}, /* 1 Japanese */ + {"公開鍵", "秘密鍵" ,"鍵生成" , "鍵共有" , "署名", "検証" , "暗号化" , "復号化" , "rsk gen", "encap", "derive", "valid", "pair gen", "decap", NULL}, /* 1 Japanese */ #endif }; @@ -1061,7 +1074,8 @@ static const char* bench_desc_words[][14] = { #if (!defined(NO_RSA) && !defined(WOLFSSL_RSA_VERIFY_ONLY) && !defined(WC_NO_RNG)) \ || !defined(NO_DH) || defined(WOLFSSL_KEY_GEN) || defined(HAVE_ECC) \ || defined(HAVE_CURVE25519) || defined(HAVE_ED25519) \ - || defined(HAVE_CURVE448) || defined(HAVE_ED448) + || defined(HAVE_CURVE448) || defined(HAVE_ED448) \ + || defined(WOLFSSL_HAVE_KYBER) #define HAVE_LOCAL_RNG static THREAD_LS_T WC_RNG gRng; #define GLOBAL_RNG &gRng @@ -1072,14 +1086,16 @@ static const char* bench_desc_words[][14] = { #if defined(HAVE_ED25519) || defined(HAVE_CURVE25519) || \ defined(HAVE_CURVE448) || defined(HAVE_ED448) || \ defined(HAVE_ECC) || !defined(NO_DH) || \ - !defined(NO_RSA) || defined(HAVE_SCRYPT) + !defined(NO_RSA) || defined(HAVE_SCRYPT) || \ + defined(WOLFSSL_HAVE_KYBER) #define BENCH_ASYM #endif #if defined(BENCH_ASYM) #if defined(HAVE_ECC) || !defined(NO_RSA) || !defined(NO_DH) || \ defined(HAVE_CURVE25519) || defined(HAVE_ED25519) || \ - defined(HAVE_CURVE448) || defined(HAVE_ED448) + defined(HAVE_CURVE448) || defined(HAVE_ED448) || \ + defined(WOLFSSL_HAVE_KYBER) static const char* bench_result_words2[][5] = { { "ops took", "sec" , "avg" , "ops/sec", NULL }, /* 0 English */ #ifndef NO_MULTIBYTE_PRINT @@ -1644,7 +1660,8 @@ static void bench_stats_sym_finish(const char* desc, int useDeviceID, int count, #ifdef BENCH_ASYM #if defined(HAVE_ECC) || !defined(NO_RSA) || !defined(NO_DH) || \ defined(HAVE_CURVE25519) || defined(HAVE_ED25519) || \ - defined(HAVE_CURVE448) || defined(HAVE_ED448) + defined(HAVE_CURVE448) || defined(HAVE_ED448) || \ + defined(WOLFSSL_HAVE_KYBER) static void bench_stats_asym_finish(const char* algo, int strength, const char* desc, int useDeviceID, int count, double start, int ret) { @@ -1690,7 +1707,7 @@ static void bench_stats_asym_finish(const char* algo, int strength, } #endif -#if defined(HAVE_PQC) +#if defined(HAVE_PQC) && (defined(HAVE_LIBOQS) || defined(HAVE_PQM4)) static void bench_stats_pq_asym_finish(const char* algo, int useDeviceID, int count, double start, int ret) { @@ -2261,6 +2278,20 @@ static void* benchmarks_do(void* args) } #endif +#ifdef WOLFSSL_HAVE_KYBER + if (bench_all || (bench_asym_algs & BENCH_KYBER)) { + #ifdef WOLFSSL_KYBER512 + bench_kyber(KYBER512); + #endif + #ifdef WOLFSSL_KYBER768 + bench_kyber(KYBER768); + #endif + #ifdef WOLFSSL_KYBER1024 + bench_kyber(KYBER1024); + #endif + } +#endif + #ifdef HAVE_ECC if (bench_all || (bench_asym_algs & BENCH_ECC_MAKEKEY) || (bench_asym_algs & BENCH_ECC) || @@ -2371,7 +2402,7 @@ static void* benchmarks_do(void* args) #endif #endif -#if defined(HAVE_PQC) +#if defined(HAVE_PQC) && (defined(HAVE_LIBOQS) || defined(HAVE_PQM4)) if (bench_all || (bench_pq_asym_algs & BENCH_KYBER_LEVEL1_KEYGEN)) bench_pqcKemKeygen(BENCH_KYBER_LEVEL1_KEYGEN); if (bench_all || (bench_pq_asym_algs & BENCH_KYBER_LEVEL1_ENCAP)) @@ -6135,6 +6166,128 @@ exit: } #endif /* !NO_DH */ +#ifdef WOLFSSL_HAVE_KYBER +static void bench_kyber_keygen(int type, const char* name, int keySize, + KyberKey* key) +{ + int ret = 0, times, count, pending = 0; + double start; + const char**desc = bench_desc_words[lng_index]; + + /* KYBER Make Key */ + bench_stats_start(&count, &start); + do { + /* while free pending slots in queue, submit ops */ + for (times = 0; times < agreeTimes || pending > 0; times++) { + wc_KyberKey_Free(key); + ret = wc_KyberKey_Init(type, key, HEAP_HINT, INVALID_DEVID); + if (ret != 0) + goto exit; + +#ifdef KYBER_NONDETERMINISTIC + ret = wc_KyberKey_MakeKey(key, &gRng); +#else + unsigned char rand[KYBER_MAKEKEY_RAND_SZ] = {0,}; + ret = wc_KyberKey_MakeKeyWithRandom(key, rand, sizeof(rand)); +#endif + if (ret != 0) + goto exit; + } /* for times */ + count += times; + } + while (bench_stats_sym_check(start)); + +exit: + bench_stats_asym_finish(name, keySize, desc[2], 0, count, start, ret); +} + +static void bench_kyber_encap(const char* name, int keySize, KyberKey* key) +{ + int ret = 0, times, count, pending = 0; + double start; + const char**desc = bench_desc_words[lng_index]; + byte ct[KYBER_MAX_CIPHER_TEXT_SIZE]; + byte ss[KYBER_SS_SZ]; + word32 ctSz; + + ret = wc_KyberKey_CipherTextSize(key, &ctSz); + if (ret != 0) { + return; + } + + /* KYBER Encapsulate */ + bench_stats_start(&count, &start); + do { + /* while free pending slots in queue, submit ops */ + for (times = 0; times < agreeTimes || pending > 0; times++) { +#ifdef KYBER_NONDETERMINISTIC + ret = wc_KyberKey_Encapsulate(key, ct, ss, &gRng); +#else + unsigned char rand[KYBER_ENC_RAND_SZ] = {0,}; + ret = wc_KyberKey_EncapsulateWithRandom(key, ct, ss, rand, + sizeof(rand)); +#endif + if (ret != 0) + goto exit_encap; + } /* for times */ + count += times; + } + while (bench_stats_sym_check(start)); + +exit_encap: + bench_stats_asym_finish(name, keySize, desc[9], 0, count, start, ret); + + /* KYBER Decapsulate */ + bench_stats_start(&count, &start); + do { + /* while free pending slots in queue, submit ops */ + for (times = 0; times < agreeTimes || pending > 0; times++) { + ret = wc_KyberKey_Decapsulate(key, ss, ct, ctSz); + if (ret != 0) + goto exit_decap; + } /* for times */ + count += times; + } + while (bench_stats_sym_check(start)); + +exit_decap: + bench_stats_asym_finish(name, keySize, desc[13], 0, count, start, ret); +} + +void bench_kyber(int type) +{ + KyberKey key; + const char* name = NULL; + int keySize = 0; + + switch (type) { +#ifdef WOLFSSL_KYBER512 + case KYBER512: + name = "KYBER512 "; + keySize = 128; + break; +#endif +#ifdef WOLFSSL_KYBER768 + case KYBER768: + name = "KYBER768 "; + keySize = 192; + break; +#endif +#ifdef WOLFSSL_KYBER1024 + case KYBER1024: + name = "KYBER1024"; + keySize = 256; + break; +#endif + } + + bench_kyber_keygen(type, name, keySize, &key); + bench_kyber_encap(name, keySize, &key); + + wc_KyberKey_Free(&key); +} +#endif + #ifdef HAVE_ECC /* +8 for 'ECDSA [%s]' and null terminator */ @@ -7285,7 +7438,7 @@ void bench_sakke(void) #endif /* WOLFCRYPT_SAKKE_CLIENT */ #endif /* WOLFCRYPT_HAVE_SAKKE */ -#if defined(HAVE_PQC) +#if defined(HAVE_PQC) && (defined(HAVE_LIBOQS) || defined(HAVE_PQM4)) static void bench_pqcKemInit(word32 alg, byte **priv_key, byte **pub_key, const char **wolf_name, OQS_KEM **kem) { @@ -8188,7 +8341,7 @@ static void Usage(void) for (i=0; bench_other_opt[i].str != NULL; i++) print_alg(bench_other_opt[i].str + 1, &line); printf("\n "); -#if defined(HAVE_PQC) +#if defined(HAVE_PQC) && (defined(HAVE_LIBOQS) || defined(HAVE_PQM4)) line = 13; for (i=0; bench_pq_asym_opt[i].str != NULL; i++) print_alg(bench_pq_asym_opt[i].str + 1, &line); @@ -8365,7 +8518,7 @@ int main(int argc, char** argv) optMatched = 1; } } - #if defined(HAVE_PQC) + #if defined(HAVE_PQC) && (defined(HAVE_LIBOQS) || defined(HAVE_PQM4)) /* Known asymmetric post-quantum algorithms */ for (i=0; !optMatched && bench_pq_asym_opt[i].str != NULL; i++) { if (string_matches(argv[1], bench_pq_asym_opt[i].str)) { @@ -8376,10 +8529,14 @@ int main(int argc, char** argv) } #if defined(HAVE_LIBOQS) /* Both bench_pq_asym_opt and bench_pq_asym_opt2 are looking for - * -pq, so we need to reset optMatched in case it was set to 1 just - * above. */ - optMatched = 0; - for (i=0; !optMatched && bench_pq_asym_opt2[i].str != NULL; i++) { + * -pq, so we need to do a special case for -pq since optMatched + * was set to 1 just above. */ + if (string_matches(argv[1], bench_pq_asym_opt[0].str)) { + bench_pq_asym_algs2 |= bench_pq_asym_opt2[0].val; + bench_all = 0; + optMatched = 1; + } + for (i=1; !optMatched && bench_pq_asym_opt2[i].str != NULL; i++) { if (string_matches(argv[1], bench_pq_asym_opt2[i].str)) { bench_pq_asym_algs2 |= bench_pq_asym_opt2[i].val; bench_all = 0; diff --git a/wolfcrypt/benchmark/benchmark.h b/wolfcrypt/benchmark/benchmark.h index e24f073db..341c021ee 100644 --- a/wolfcrypt/benchmark/benchmark.h +++ b/wolfcrypt/benchmark/benchmark.h @@ -85,6 +85,7 @@ void bench_rsaKeyGen_size(int useDeviceID, int keySz); void bench_rsa(int useDeviceID); void bench_rsa_key(int useDeviceID, int keySz); void bench_dh(int useDeviceID); +void bench_kyber(int type); void bench_ecc_curve(int curveId); void bench_eccMakeKey(int useDeviceID, int curveId); void bench_ecc(int useDeviceID, int curveId); diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index 43fea6399..410c213f9 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -5698,7 +5698,7 @@ static int GetOID(const byte* input, word32* inOutIdx, word32* oid, actualOidSz = (word32)length; #endif /* NO_VERIFY_OID */ -#ifdef HAVE_PQC +#if defined(HAVE_PQC) && defined(HAVE_LIBOQS) /* Since we are summing it up, there could be collisions...and indeed there * are: * @@ -11269,7 +11269,8 @@ static int GetCertHeader(DecodedCert* cert) } #endif -#if defined(HAVE_ED25519) || defined(HAVE_ED448) || defined(HAVE_PQC) +#if defined(HAVE_ED25519) || defined(HAVE_ED448) || (defined(HAVE_PQC) && \ + defined(HAVE_LIBOQS)) /* Store the key data under the BIT_STRING in dynamicly allocated data. * * @param [in, out] cert Certificate object. @@ -11761,7 +11762,7 @@ static int GetCertKey(DecodedCert* cert, const byte* source, word32* inOutIdx, ret = StoreKey(cert, source, &srcIdx, maxIdx); break; #endif /* HAVE_ED448 */ - #ifdef HAVE_PQC + #if defined(HAVE_PQC) && defined(HAVE_LIBOQS) #ifdef HAVE_FALCON case FALCON_LEVEL1k: cert->pkCurveOID = FALCON_LEVEL1k; diff --git a/wolfcrypt/src/ext_kyber.c b/wolfcrypt/src/ext_kyber.c new file mode 100644 index 000000000..83435d291 --- /dev/null +++ b/wolfcrypt/src/ext_kyber.c @@ -0,0 +1,690 @@ +/* ext_kyber.c + * + * Copyright (C) 2006-2022 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 + +#include +#include +#include + +#if defined(WOLFSSL_KYBER_90S) && defined(HAVE_PQM4) +#error "KYBER-90s is not supported when building PQM4" +#endif + +#ifdef WOLFSSL_HAVE_KYBER + +#ifdef NO_INLINE + #include +#else + #define WOLFSSL_MISC_INCLUDED + #include +#endif + +#if defined (HAVE_LIBOQS) +static const char* OQS_ID2name(int id) { + switch (id) { +#ifdef WOLFSSL_KYBER_90S + case KYBER_LEVEL1: return OQS_KEM_alg_kyber_512_90s; + case KYBER_LEVEL3: return OQS_KEM_alg_kyber_768_90s; + case KYBER_LEVEL5: return OQS_KEM_alg_kyber_1024_90s; +#else + case KYBER_LEVEL1: return OQS_KEM_alg_kyber_512; + case KYBER_LEVEL3: return OQS_KEM_alg_kyber_768; + case KYBER_LEVEL5: return OQS_KEM_alg_kyber_1024; +#endif + default: break; + } + return NULL; +} +#endif + +/******************************************************************************/ +/* Initializer and cleanup functions. */ + +/** + * Initialize the Kyber key. + * + * @param [in] type Type of key: KYBER512, KYBER768, KYBER1024. + * @param [out] key Kyber key object to initialize. + * @param [in] heap Dynamic memory hint. + * @param [in] devId Device Id. + * @return 0 on success. + * @return BAD_FUNC_ARG when key is NULL or type is unrecognized. + * @return NOT_COMPILED_IN when key type is not supported. + */ +int wc_KyberKey_Init(int type, KyberKey* key, void* heap, int devId) +{ + int ret = 0; + + /* Validate key. */ + if (key == NULL) { + ret = BAD_FUNC_ARG; + } + if (ret == 0) { + /* Validate type. */ + switch (type) { + case KYBER_LEVEL1: +#ifdef HAVE_LIBOQS + case KYBER_LEVEL3: + case KYBER_LEVEL5: +#endif /* HAVE_LIBOQS */ + break; + default: + /* No other values supported. */ + ret = BAD_FUNC_ARG; + break; + } + } + if (ret == 0) { + /* Zero out all data. */ + XMEMSET(key, 0, sizeof(*key)); + + /* Keep type for parameters. */ + key->type = type; + } + + (void)devId; + (void)heap; + + return ret; +} + +/** + * Free the Kyber key object. + * + * @param [in, out] key Kyber key object to dispose of. + */ +void wc_KyberKey_Free(KyberKey* key) +{ + if (key != NULL) { + /* Ensure all private data is zeroed. */ + ForceZero(key, sizeof(*key)); + } +} + +/******************************************************************************/ +/* Data size getters. */ + +/** + * Get the size in bytes of encoded private key for the key. + * + * @param [in] key Kyber key object. + * @param [out] len Length of encoded private key in bytes. + * @return 0 on success. + * @return BAD_FUNC_ARG when key or len is NULL. + * @return NOT_COMPILED_IN when key type is not supported. + */ +int wc_KyberKey_PrivateKeySize(KyberKey* key, word32* len) +{ + int ret = 0; + + /* Validate parameters. */ + if ((key == NULL) || (len == NULL)) { + ret = BAD_FUNC_ARG; + } + +#ifdef HAVE_LIBOQS + /* NOTE: SHAKE and AES variants have the same length private key. */ + if (ret == 0) { + switch (key->type) { + case KYBER_LEVEL1: + *len = OQS_KEM_kyber_512_length_secret_key; + break; + case KYBER_LEVEL3: + *len = OQS_KEM_kyber_768_length_secret_key; + break; + case KYBER_LEVEL5: + *len = OQS_KEM_kyber_1024_length_secret_key; + break; + default: + /* No other values supported. */ + ret = BAD_FUNC_ARG; + break; + } + } +#endif /* HAVE_LIBOQS */ +#ifdef HAVE_PQM4 + (void)key; + if (ret == 0) { + *len = PQM4_PRIVATE_KEY_LENGTH; + } +#endif /* HAVE_PQM4 */ + + return ret; +} + +/** + * Get the size in bytes of encoded public key for the key. + * + * @param [in] key Kyber key object. + * @param [out] len Length of encoded public key in bytes. + * @return 0 on success. + * @return BAD_FUNC_ARG when key or len is NULL. + * @return NOT_COMPILED_IN when key type is not supported. + */ +int wc_KyberKey_PublicKeySize(KyberKey* key, word32* len) +{ + int ret = 0; + + /* Validate parameters. */ + if ((key == NULL) || (len == NULL)) { + ret = BAD_FUNC_ARG; + } + +#ifdef HAVE_LIBOQS + /* NOTE: SHAKE and AES variants have the same length public key. */ + if (ret == 0) { + switch (key->type) { + case KYBER_LEVEL1: + *len = OQS_KEM_kyber_512_length_public_key; + break; + case KYBER_LEVEL3: + *len = OQS_KEM_kyber_768_length_public_key; + break; + case KYBER_LEVEL5: + *len = OQS_KEM_kyber_1024_length_public_key; + break; + default: + /* No other values supported. */ + ret = BAD_FUNC_ARG; + break; + } + } +#endif /* HAVE_LIBOQS */ +#ifdef HAVE_PQM4 + (void)key; + if (ret == 0) { + *len = PQM4_PUBLIC_KEY_LENGTH; + } +#endif /* HAVE_PQM4 */ + + return ret; +} + +/** + * Get the size in bytes of cipher text for key. + * + * @param [in] key Kyber key object. + * @param [out] len Length of cipher text in bytes. + * @return 0 on success. + * @return BAD_FUNC_ARG when key or len is NULL. + * @return NOT_COMPILED_IN when key type is not supported. + */ +int wc_KyberKey_CipherTextSize(KyberKey* key, word32* len) +{ + int ret = 0; + + /* Validate parameters. */ + if ((key == NULL) || (len == NULL)) { + ret = BAD_FUNC_ARG; + } + +#ifdef HAVE_LIBOQS + /* NOTE: SHAKE and AES variants have the same length ciphertext. */ + if (ret == 0) { + switch (key->type) { + case KYBER_LEVEL1: + *len = OQS_KEM_kyber_512_length_ciphertext; + break; + case KYBER_LEVEL3: + *len = OQS_KEM_kyber_768_length_ciphertext; + break; + case KYBER_LEVEL5: + *len = OQS_KEM_kyber_1024_length_ciphertext; + break; + default: + /* No other values supported. */ + ret = BAD_FUNC_ARG; + break; + } + } +#endif /* HAVE_LIBOQS */ +#ifdef HAVE_PQM4 + (void)key; + if (ret == 0) { + *len = PQM4_CIPHERTEXT_LENGTH; + } +#endif /* HAVE_PQM4 */ + + return ret; +} + +/** + * Size of a shared secret in bytes. Always KYBER_SS_SZ. + * + * @param [in] key Kyber key object. Not used. + * @param [out] Size of the shared secret created with a Kyber key. + * @return 0 on success. + * @return 0 to indicate success. + */ +int wc_KyberKey_SharedSecretSize(KyberKey* key, word32* len) +{ + (void)key; + /* Validate parameters. */ + if (len == NULL) { + return BAD_FUNC_ARG; + } + + *len = KYBER_SS_SZ; + + return 0; +} + +/******************************************************************************/ +/* Cryptographic operations. */ + +/** + * Make a Kyber key object using a random number generator. + * + * NOTE: rng is ignored. OQS and PQM4 don't use our RNG. + * + * @param [in, out] key Kyber key ovject. + * @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. + */ +int wc_KyberKey_MakeKey(KyberKey* key, WC_RNG* rng) +{ + int ret = 0; + const char* algName = NULL; + OQS_KEM *kem = NULL; + (void)rng; + + /* Validate parameter. */ + if (key == NULL) { + return BAD_FUNC_ARG; + } + +#ifdef HAVE_LIBOQS + if (ret == 0) { + algName = OQS_ID2name(key->type); + if (algName == NULL) { + ret = BAD_FUNC_ARG; + } + } + + if (ret == 0) { + algName = OQS_ID2name(key->type); + if (algName == NULL) { + ret = BAD_FUNC_ARG; + } + } + if (ret == 0) { + kem = OQS_KEM_new(algName); + if (kem == NULL) { + ret = BAD_FUNC_ARG; + } + } + if (ret == 0) { + if (OQS_KEM_keypair(kem, key->pub, key->priv) != + OQS_SUCCESS) { + ret = BAD_FUNC_ARG; + } + } +#endif /* HAVE_LIBOQS */ +#ifdef HAVE_PQM4 + if (ret == 0) { + if (crypto_kem_keypair(key->pub, key->priv) != 0) { + WOLFSSL_MSG("PQM4 keygen failure"); + ret = BAD_FUNC_ARG; + } + } +#endif /* HAVE_PQM4 */ + + if (ret != 0) { + ForceZero(key, sizeof(*key)); + } + + OQS_KEM_free(kem); + + return ret; +} + +/** + * Make a Kyber key object using random data. + * + * @param [in, out] key Kyber key ovject. + * @param [in] rng Random number generator. + * @return 0 on success. + * @return BAD_FUNC_ARG when key or rand is NULL. + * @return BUFFER_E when length is not KYBER_MAKEKEY_RAND_SZ. + * @return NOT_COMPILED_IN when key type is not supported. + * @return MEMORY_E when dynamic memory allocation failed. + */ +int wc_KyberKey_MakeKeyWithRandom(KyberKey* key, const unsigned char* rand, + int len) +{ + (void)rand; + (void)len; + /* OQS and PQM4 don't support external randomness. */ + return wc_KyberKey_MakeKey(key, NULL); +} + +/** + * Encapsulate with random number generator and derive secret. + * + * @param [in] key Kyber key object. + * @param [out] ct Cipher text. + * @param [out] ss 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, + WC_RNG* rng) +{ + int ret = 0; + const char * algName = NULL; + OQS_KEM *kem = NULL; + (void)rng; + + /* Validate parameters. */ + if ((key == NULL) || (ct == NULL) || (ss == NULL)) { + ret = BAD_FUNC_ARG; + } + +#ifdef HAVE_LIBOQS + if (ret == 0) { + algName = OQS_ID2name(key->type); + if (algName == NULL) { + ret = BAD_FUNC_ARG; + } + } + if (ret == 0) { + kem = OQS_KEM_new(algName); + if (kem == NULL) { + ret = BAD_FUNC_ARG; + } + } + if (ret == 0) { + if (OQS_KEM_encaps(kem, ct, ss, key->pub) != OQS_SUCCESS) { + ret = BAD_FUNC_ARG; + } + } +#endif /* HAVE_LIBOQS */ +#ifdef HAVE_PQM4 + if (ret == 0) { + if (crypto_kem_enc(ct, ss, key->pub) != 0) { + WOLFSSL_MSG("PQM4 Encapsulation failure."); + ret = BAD_FUNC_ARG; + } + } +#endif /* HAVE_PQM4 */ + + OQS_KEM_free(kem); + + 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. + * @return 0 on success. + * @return BAD_FUNC_ARG when key, ct, ss 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) +{ + (void)rand; + (void)len; + /* OQS and PQM4 don't support external randomness. */ + return wc_KyberKey_Encapsulate(key, ct, ss, NULL); +} + +/** + * Decapsulate the cipher text to calculate the shared secret. + * + * Validates the cipher text by encapsulating and comparing with data passed in. + * + * @param [in] key Kyber key object. + * @param [out] ss Shared secret. + * @param [in] ct Cipher text. + * @param [in] len Length of cipher text. + * @return 0 on success. + * @return BAD_FUNC_ARG when key, ss or cr are NULL. + * @return NOT_COMPILED_IN when key type is not supported. + * @return BUFFER_E when len is not the length of cipher text for the key type. + * @return MEMORY_E when dynamic memory allocation failed. + */ +int wc_KyberKey_Decapsulate(KyberKey* key, unsigned char* ss, + const unsigned char* ct, word32 len) +{ + int ret = 0; + const char * algName = NULL; + word32 ctlen = 0; + OQS_KEM *kem = NULL; + + /* Validate parameters. */ + if ((key == NULL) || (ss == NULL) || (ct == NULL)) { + ret = BAD_FUNC_ARG; + } + if (ret == 0) { + ret = wc_KyberKey_CipherTextSize(key, &ctlen); + } + if ((ret == 0) && (len != ctlen)) { + ret = BUFFER_E; + } + +#ifdef HAVE_LIBOQS + if (ret == 0) { + algName = OQS_ID2name(key->type); + if (algName == NULL) { + ret = BAD_FUNC_ARG; + } + } + if (ret == 0) { + kem = OQS_KEM_new(algName); + if (kem == NULL) { + ret = BAD_FUNC_ARG; + } + } + if (ret == 0) { + if (OQS_KEM_decaps(kem, ss, ct, key->priv) != OQS_SUCCESS) { + ret = BAD_FUNC_ARG; + } + } +#endif /* HAVE_LIBOQS */ +#ifdef HAVE_PQM4 + if (ret == 0) { + if (crypto_kem_enc(ss, ct, key->priv) != 0) { + WOLFSSL_MSG("PQM4 Decapsulation failure."); + ret = BAD_FUNC_ARG; + } + } +#endif /* HAVE_PQM4 */ + + OQS_KEM_free(kem); + + return ret; + +} + +/******************************************************************************/ +/* Encoding and decoding functions. */ + +/** + * Decode the private key. + * + * We store the whole thing in the private key buffer. Note this means we cannot + * do the encapsulation operation with the private key. But generally speaking + * this is never done. + * + * @param [in, out] key Kyber key object. + * @param [in] in Buffer holding encoded key. + * @param [in] len Length of data in buffer. + * @return 0 on success. + * @return BAD_FUNC_ARG when key ot in is NULL. + * @return NOT_COMPILED_IN when key type is not supported. + * @return BUFFER_E when len is not the correct size. + */ +int wc_KyberKey_DecodePrivateKey(KyberKey* key, unsigned char* in, word32 len) +{ + int ret = 0; + word32 privLen = 0; + + /* Validate parameters. */ + if ((key == NULL) || (in == NULL)) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + ret = wc_KyberKey_PrivateKeySize(key, &privLen); + } + + /* Ensure the data is the correct length for the key type. */ + if ((ret == 0) && (len != privLen)) { + ret = BUFFER_E; + } + + if (ret == 0) { + XMEMCPY(key->priv, in, privLen); + } + + return ret; +} + +/** + * Decode public key. + * + * We store the whole thing in the public key buffer. + * + * @param [in, out] key Kyber key object. + * @param [in] in Buffer holding encoded key. + * @param [in] len Length of data in buffer. + * @return 0 on success. + * @return BAD_FUNC_ARG when key or in is NULL. + * @return NOT_COMPILED_IN when key type is not supported. + * @return BUFFER_E when len is not the correct size. + */ +int wc_KyberKey_DecodePublicKey(KyberKey* key, unsigned char* in, word32 len) +{ + int ret = 0; + word32 pubLen = 0; + + /* Validate parameters. */ + if ((key == NULL) || (in == NULL)) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + ret = wc_KyberKey_PublicKeySize(key, &pubLen); + } + + /* Ensure the data is the correct length for the key type. */ + if ((ret == 0) && (len != pubLen)) { + ret = BUFFER_E; + } + + if (ret == 0) { + XMEMCPY(key->pub, in, pubLen); + } + + return ret; +} + +/** + * Encode the private key. + * + * We stored it as a blob so we can just copy it over. + * + * @param [in] key Kyber key object. + * @param [out] out Buffer to hold data. + * @param [in] len Size of buffer in bytes. + * @return 0 on success. + * @return BAD_FUNC_ARG when key or out is NULL or private/public key not + * available. + * @return NOT_COMPILED_IN when key type is not supported. + */ +int wc_KyberKey_EncodePrivateKey(KyberKey* key, unsigned char* out, word32 len) +{ + int ret = 0; + unsigned int privLen = 0; + + if ((key == NULL) || (out == NULL)) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + ret = wc_KyberKey_PrivateKeySize(key, &privLen); + } + + /* Check buffer is big enough for encoding. */ + if ((ret == 0) && (len != privLen)) { + ret = BUFFER_E; + } + + if (ret == 0) { + XMEMCPY(out, key->priv, privLen); + } + + return ret; +} + +/** + * Encode the public key. + * + * We stored it as a blob so we can just copy it over. + * + * @param [in] key Kyber key object. + * @param [out] out Buffer to hold data. + * @param [in] len Size of buffer in bytes. + * @return 0 on success. + * @return BAD_FUNC_ARG when key or out is NULL or public key not available. + * @return NOT_COMPILED_IN when key type is not supported. + */ +int wc_KyberKey_EncodePublicKey(KyberKey* key, unsigned char* out, word32 len) +{ + int ret = 0; + unsigned int pubLen = 0; + + if ((key == NULL) || (out == NULL)) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + ret = wc_KyberKey_PublicKeySize(key, &pubLen); + } + + /* Check buffer is big enough for encoding. */ + if ((ret == 0) && (len != pubLen)) { + ret = BUFFER_E; + } + + if (ret == 0) { + XMEMCPY(out, key->pub, pubLen); + } + + return ret; +} + +#endif /* WOLFSSL_HAVE_KYBER */ diff --git a/wolfcrypt/src/wc_kyber.c b/wolfcrypt/src/wc_kyber.c new file mode 100644 index 000000000..62c3ed811 --- /dev/null +++ b/wolfcrypt/src/wc_kyber.c @@ -0,0 +1,3 @@ + +#error "Contact wolfSSL to get the implementation of this file" + diff --git a/wolfcrypt/src/wc_kyber_asm.S b/wolfcrypt/src/wc_kyber_asm.S new file mode 100644 index 000000000..62c3ed811 --- /dev/null +++ b/wolfcrypt/src/wc_kyber_asm.S @@ -0,0 +1,3 @@ + +#error "Contact wolfSSL to get the implementation of this file" + diff --git a/wolfcrypt/src/wc_kyber_poly.c b/wolfcrypt/src/wc_kyber_poly.c new file mode 100644 index 000000000..62c3ed811 --- /dev/null +++ b/wolfcrypt/src/wc_kyber_poly.c @@ -0,0 +1,3 @@ + +#error "Contact wolfSSL to get the implementation of this file" + diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index ef3b5adba..60be38ba1 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -266,6 +266,15 @@ #ifdef HAVE_ED448 #include #endif +#ifdef WOLFSSL_HAVE_KYBER + #include +#ifdef WOLFSSL_WC_KYBER + #include +#endif +#if defined(HAVE_LIBOQS) || defined(HAVE_PQM4) + #include +#endif +#endif #ifdef WOLFCRYPT_HAVE_ECCSI #include #endif @@ -501,6 +510,9 @@ WOLFSSL_TEST_SUBROUTINE int scrypt_test(void); #ifdef HAVE_ED448 WOLFSSL_TEST_SUBROUTINE int ed448_test(void); #endif +#ifdef WOLFSSL_HAVE_KYBER + WOLFSSL_TEST_SUBROUTINE int kyber_test(void); +#endif #ifdef WOLFCRYPT_HAVE_ECCSI WOLFSSL_TEST_SUBROUTINE int eccsi_test(void); #endif @@ -1344,6 +1356,13 @@ options: [-s max_relative_stack_bytes] [-m max_relative_heap_memory_bytes]\n\ TEST_PASS("ED448 test passed!\n"); #endif +#ifdef WOLFSSL_HAVE_KYBER + if ( (ret = kyber_test()) != 0) + return err_sys("KYBER test failed!\n", ret); + else + TEST_PASS("KYBER test passed!\n"); +#endif + #ifdef WOLFCRYPT_HAVE_ECCSI if ( (ret = eccsi_test()) != 0) return err_sys("ECCSI test failed!\n", ret); @@ -29838,6 +29857,3977 @@ WOLFSSL_TEST_SUBROUTINE int ed448_test(void) } #endif /* HAVE_ED448 */ +#ifdef WOLFSSL_HAVE_KYBER +#ifdef WOLFSSL_WC_KYBER /* OQS and PQM4 do not support KATs */ +#ifdef WOLFSSL_KYBER512 +static int kyber512_kat(void) +{ + KyberKey key; + int ret; + byte priv[KYBER512_PRIVATE_KEY_SIZE]; + byte pub[KYBER512_PUBLIC_KEY_SIZE]; + byte ct[KYBER512_CIPHER_TEXT_SIZE]; + byte ss[KYBER_SS_SZ]; + byte ss_dec[KYBER_SS_SZ]; + const byte kyber512_rand[] = { + 0x7c, 0x99, 0x35, 0xa0, 0xb0, 0x76, 0x94, 0xaa, + 0x0c, 0x6d, 0x10, 0xe4, 0xdb, 0x6b, 0x1a, 0xdd, + 0x2f, 0xd8, 0x1a, 0x25, 0xcc, 0xb1, 0x48, 0x03, + 0x2d, 0xcd, 0x73, 0x99, 0x36, 0x73, 0x7f, 0x2d, + 0x86, 0x26, 0xED, 0x79, 0xD4, 0x51, 0x14, 0x08, + 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, + 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, + 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F + }; + const byte kyber512enc_rand[] = { + 0x14, 0x7c, 0x03, 0xf7, 0xa5, 0xbe, 0xbb, 0xa4, + 0x06, 0xc8, 0xfa, 0xe1, 0x87, 0x4d, 0x7f, 0x13, + 0xc8, 0x0e, 0xfe, 0x79, 0xa3, 0xa9, 0xa8, 0x74, + 0xcc, 0x09, 0xfe, 0x76, 0xf6, 0x99, 0x76, 0x15 + }; +#ifndef WOLFSSL_KYBER_90S + const byte kyber512_pk[] = { + 0x11, 0x5A, 0xCE, 0x0E, 0x64, 0x67, 0x7C, 0xBB, + 0x7D, 0xCF, 0xC9, 0x3C, 0x16, 0xD3, 0xA3, 0x05, + 0xF6, 0x76, 0x15, 0xA4, 0x88, 0xD7, 0x11, 0xAA, + 0x56, 0x69, 0x8C, 0x56, 0x63, 0xAB, 0x7A, 0xC9, + 0xCE, 0x66, 0xD5, 0x47, 0xC0, 0x59, 0x5F, 0x98, + 0xA4, 0x3F, 0x46, 0x50, 0xBB, 0xE0, 0x8C, 0x36, + 0x4D, 0x97, 0x67, 0x89, 0x11, 0x7D, 0x34, 0xF6, + 0xAE, 0x51, 0xAC, 0x06, 0x3C, 0xB5, 0x5C, 0x6C, + 0xA3, 0x25, 0x58, 0x22, 0x7D, 0xFE, 0xF8, 0x07, + 0xD1, 0x9C, 0x30, 0xDE, 0x41, 0x44, 0x24, 0x09, + 0x7F, 0x6A, 0xA2, 0x36, 0xA1, 0x05, 0x3B, 0x4A, + 0x07, 0xA7, 0x6B, 0xE3, 0x72, 0xA5, 0xC6, 0xB6, + 0x00, 0x27, 0x91, 0xEB, 0xE0, 0xAF, 0xDA, 0xF5, + 0x4E, 0x1C, 0xA2, 0x37, 0xFF, 0x54, 0x5B, 0xA6, + 0x83, 0x43, 0xE7, 0x45, 0xC0, 0x4A, 0xD1, 0x63, + 0x9D, 0xBC, 0x59, 0x03, 0x46, 0xB6, 0xB9, 0x56, + 0x9B, 0x56, 0xDB, 0xBF, 0xE5, 0x31, 0x51, 0x91, + 0x30, 0x66, 0xE5, 0xC8, 0x55, 0x27, 0xDC, 0x94, + 0x68, 0x11, 0x0A, 0x13, 0x6A, 0x41, 0x14, 0x97, + 0xC2, 0x27, 0xDC, 0xB8, 0xC9, 0xB2, 0x55, 0x70, + 0xB7, 0xA0, 0xE4, 0x2A, 0xAD, 0xA6, 0x70, 0x9F, + 0x23, 0x20, 0x8F, 0x5D, 0x49, 0x6E, 0xBA, 0xB7, + 0x84, 0x3F, 0x64, 0x83, 0xBF, 0x0C, 0x0C, 0x73, + 0xA4, 0x02, 0x96, 0xEC, 0x2C, 0x64, 0x40, 0x00, + 0x13, 0x94, 0xC9, 0x9C, 0xA1, 0x73, 0xD5, 0xC7, + 0x75, 0xB7, 0xF4, 0x15, 0xD0, 0x2A, 0x5A, 0x26, + 0xA0, 0x74, 0x07, 0x91, 0x85, 0x87, 0xC4, 0x11, + 0x69, 0xF2, 0xB7, 0x17, 0x87, 0x55, 0xAC, 0xC2, + 0x7F, 0xC8, 0xB1, 0x9C, 0x4C, 0x4B, 0x3F, 0xCD, + 0x41, 0x05, 0x3F, 0x2C, 0x74, 0xC8, 0xA1, 0x0A, + 0x83, 0x21, 0x24, 0x1B, 0x28, 0x02, 0x43, 0x28, + 0x75, 0xAE, 0x80, 0x8B, 0x9E, 0xF1, 0x36, 0x5C, + 0x7B, 0x8A, 0x52, 0x90, 0x2F, 0x13, 0x17, 0xBA, + 0x2F, 0xB0, 0x26, 0x9F, 0x47, 0x93, 0x06, 0x72, + 0x10, 0x7B, 0x47, 0x26, 0xFE, 0xF6, 0x45, 0x47, + 0x39, 0x4D, 0x33, 0x20, 0xC8, 0xF1, 0x20, 0xB3, + 0xC2, 0xF4, 0x72, 0x5B, 0x03, 0x05, 0xFA, 0xB8, + 0x8C, 0xC7, 0x98, 0x1F, 0xCB, 0x09, 0xA7, 0x6A, + 0x1C, 0xBF, 0x7F, 0x17, 0x9F, 0x43, 0xBB, 0x0A, + 0x4C, 0x8B, 0x05, 0x90, 0x85, 0x7F, 0x1E, 0x69, + 0x70, 0x84, 0x66, 0xC7, 0xF8, 0x60, 0x73, 0x91, + 0xE7, 0xBC, 0x52, 0x68, 0xBF, 0xD3, 0xD7, 0xA1, + 0xDF, 0xFC, 0xB4, 0xEC, 0xA2, 0xA1, 0xC9, 0xB5, + 0x97, 0x59, 0x30, 0x13, 0xD5, 0xFC, 0x42, 0x02, + 0xEC, 0x2B, 0x74, 0xE5, 0x7A, 0xB7, 0x6B, 0xBC, + 0xF3, 0x63, 0x2B, 0xBA, 0xF9, 0x7C, 0xDC, 0x41, + 0x8A, 0x6F, 0x16, 0x39, 0x28, 0x38, 0xCA, 0x9B, + 0xF4, 0x5D, 0xDF, 0x02, 0x37, 0x77, 0xB7, 0x56, + 0x18, 0x33, 0xC1, 0x05, 0x19, 0x0F, 0x94, 0xF3, + 0x02, 0xC5, 0x9B, 0x53, 0x19, 0x00, 0xBB, 0xC8, + 0x16, 0x36, 0x1F, 0xAA, 0x5B, 0x33, 0x80, 0xCA, + 0x3A, 0x89, 0x31, 0x04, 0xCA, 0x73, 0x88, 0xB1, + 0x85, 0x67, 0x1B, 0x3E, 0x5F, 0xE3, 0x79, 0x0E, + 0x9A, 0x62, 0x6E, 0xC4, 0x6D, 0x9B, 0x0B, 0x33, + 0xC7, 0xA4, 0x19, 0xAF, 0x7B, 0x32, 0xB6, 0x85, + 0x98, 0x94, 0xF5, 0x75, 0xD8, 0x2A, 0xC5, 0x45, + 0x6B, 0x54, 0x90, 0xA7, 0xAF, 0x8F, 0xE6, 0x10, + 0x46, 0x36, 0x05, 0x89, 0xEC, 0xBA, 0x72, 0x44, + 0x23, 0x6F, 0x41, 0x23, 0x11, 0x6B, 0x61, 0x74, + 0xAA, 0x17, 0x92, 0x49, 0xA4, 0x91, 0x95, 0xB3, + 0x56, 0xC7, 0x2F, 0xC6, 0x64, 0x1F, 0x02, 0x51, + 0x81, 0x2E, 0xAA, 0x98, 0x57, 0x0B, 0x04, 0x66, + 0x99, 0x07, 0x0E, 0x08, 0x19, 0xDC, 0x27, 0x13, + 0xF4, 0x69, 0x13, 0x7D, 0xFC, 0x6A, 0x3D, 0x7B, + 0x92, 0xB2, 0x98, 0x99, 0x5E, 0xE7, 0x80, 0x36, + 0x91, 0x53, 0xAC, 0x36, 0x6B, 0x06, 0xD7, 0x24, + 0x9C, 0xD0, 0x9E, 0x1B, 0x33, 0x78, 0xFB, 0x04, + 0x39, 0x9C, 0xEC, 0xB8, 0x65, 0x05, 0x81, 0xD6, + 0x37, 0xC7, 0x9A, 0xE6, 0x7D, 0x6F, 0x2C, 0xAF, + 0x6A, 0xBA, 0xCF, 0x59, 0x81, 0x59, 0xA7, 0x79, + 0x2C, 0xB3, 0xC9, 0x71, 0xD1, 0x49, 0x9D, 0x23, + 0x73, 0xAD, 0x20, 0xF6, 0x3F, 0x03, 0xBB, 0x59, + 0xED, 0x13, 0x73, 0x84, 0xAC, 0x61, 0xA7, 0x15, + 0x51, 0x43, 0xB8, 0xCA, 0x49, 0x32, 0x61, 0x2E, + 0xC9, 0x15, 0xE4, 0xCA, 0x34, 0x6A, 0x9B, 0xCE, + 0x5D, 0xD6, 0x04, 0x17, 0xC6, 0xB2, 0xA8, 0x9B, + 0x1C, 0xC4, 0x35, 0x64, 0x3F, 0x87, 0x5B, 0xDC, + 0x5A, 0x7E, 0x5B, 0x34, 0x81, 0xCF, 0x91, 0x9E, + 0xA0, 0x91, 0x72, 0xFE, 0xBC, 0x46, 0xD4, 0xFC, + 0x3F, 0xB0, 0xCB, 0x95, 0x91, 0x70, 0x4E, 0xE2, + 0xDB, 0xB6, 0x18, 0x44, 0xB2, 0xF3, 0x31, 0x4A, + 0x06, 0xBB, 0x6C, 0x6D, 0x34, 0x00, 0x5E, 0x48, + 0x5C, 0xE6, 0x67, 0xBD, 0xC7, 0xD0, 0x98, 0x58, + 0x69, 0x28, 0xD2, 0xD9, 0x13, 0x40, 0xF0, 0x04, + 0x19, 0xEA, 0x40, 0x13, 0x51, 0xA2, 0x40, 0xA0, + 0xB0, 0x41, 0x05, 0x8B, 0xEF, 0xB0, 0xC2, 0xFD, + 0x32, 0x64, 0x5B, 0x7A, 0x2D, 0xF8, 0xF5, 0xCB, + 0xFD, 0x87, 0x33, 0x27, 0xC9, 0x78, 0xD7, 0xB3, + 0x51, 0xA2, 0x80, 0x88, 0x43, 0x88, 0x37, 0x02, + 0x4C, 0x52, 0xB9, 0xC2, 0x95, 0xCD, 0x71, 0x36, + 0x46, 0xFB, 0x5D, 0x6C, 0x0C, 0xCF, 0xB4, 0x70, + 0x73, 0x4A, 0xC2, 0xB2, 0xBC, 0x81, 0x23, 0xC2, + 0xC1, 0x3D, 0xF6, 0x93, 0x8E, 0x92, 0x45, 0x5A, + 0x86, 0x26, 0x39, 0xFE, 0xB8, 0xA6, 0x4B, 0x85, + 0x16, 0x3E, 0x32, 0x70, 0x7E, 0x03, 0x7B, 0x38, + 0xD8, 0xAC, 0x39, 0x22, 0xB4, 0x51, 0x87, 0xBB, + 0x65, 0xEA, 0xFD, 0x46, 0x5F, 0xC6, 0x4A, 0x0C, + 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, + 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, + 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22 + }; + const byte kyber512_sk[] = { + 0x6C, 0x89, 0x2B, 0x02, 0x97, 0xA9, 0xC7, 0x64, + 0x14, 0x93, 0xF8, 0x7D, 0xAF, 0x35, 0x33, 0xEE, + 0xD6, 0x1F, 0x07, 0xF4, 0x65, 0x20, 0x66, 0x33, + 0x7E, 0xD7, 0x40, 0x46, 0xDC, 0xC7, 0x1B, 0xA0, + 0x3F, 0x30, 0x96, 0x01, 0x03, 0x16, 0x1F, 0x7D, + 0xEB, 0x53, 0xA7, 0x1B, 0x11, 0x61, 0x72, 0x63, + 0xFE, 0x2A, 0x80, 0x97, 0x69, 0xCE, 0x6D, 0x70, + 0xA8, 0x5F, 0xE6, 0x00, 0xEC, 0xE2, 0x9D, 0x7F, + 0x36, 0xA1, 0x6D, 0x33, 0x1B, 0x8B, 0x2A, 0x9E, + 0x1D, 0xB8, 0xC0, 0x90, 0x74, 0x2D, 0xF0, 0x73, + 0x9F, 0xF0, 0x60, 0xCE, 0xB4, 0xEC, 0xC5, 0xAB, + 0x1C, 0x5E, 0x55, 0xAC, 0x97, 0xBB, 0x66, 0xA7, + 0xF8, 0x95, 0x10, 0x5D, 0x57, 0x78, 0x2B, 0x22, + 0x95, 0x38, 0xE3, 0x42, 0x15, 0x44, 0xA3, 0x42, + 0x14, 0x08, 0xDB, 0xF4, 0x49, 0x10, 0x93, 0x4C, + 0xC4, 0x23, 0x77, 0x4F, 0x16, 0x76, 0xFF, 0x1C, + 0x30, 0x6F, 0x97, 0x55, 0x5F, 0x57, 0xB4, 0xAE, + 0xD7, 0xA6, 0xBA, 0xB9, 0x50, 0xA8, 0x16, 0x3C, + 0x8D, 0x31, 0x8D, 0xEA, 0x62, 0x75, 0x1B, 0xD6, + 0xAB, 0xC5, 0x06, 0x9C, 0x06, 0xC8, 0x8F, 0x33, + 0x00, 0x26, 0xA1, 0x98, 0x06, 0xA0, 0x3B, 0x97, + 0xA7, 0x69, 0x6B, 0x56, 0xDA, 0x21, 0x82, 0x7B, + 0xB4, 0xE8, 0xDC, 0x03, 0x11, 0x52, 0xB4, 0x1B, + 0x89, 0x2A, 0x9E, 0x99, 0xAD, 0xF6, 0xE1, 0x96, + 0x3E, 0x96, 0x57, 0x88, 0x28, 0x15, 0x4F, 0x46, + 0x70, 0x33, 0x84, 0x69, 0x20, 0xFB, 0xB4, 0xB8, + 0x05, 0x44, 0xE7, 0xE8, 0xA8, 0x1A, 0xE9, 0x63, + 0xCF, 0x36, 0x8C, 0x9B, 0xA0, 0x37, 0xA8, 0xC2, + 0xAD, 0x62, 0xE3, 0x2B, 0x6E, 0x61, 0xC9, 0x1D, + 0x75, 0xCE, 0x00, 0x5A, 0xB3, 0x0F, 0x80, 0x99, + 0xA1, 0xF2, 0x9D, 0x7B, 0x63, 0x05, 0xB4, 0xDC, + 0x06, 0xE2, 0x56, 0x80, 0xBB, 0x00, 0x99, 0x2F, + 0x71, 0x7F, 0xE6, 0xC1, 0x15, 0xA8, 0x08, 0x42, + 0x31, 0xCC, 0x79, 0xDD, 0x70, 0x0E, 0xA6, 0x91, + 0x2A, 0xC7, 0xFA, 0x0D, 0x93, 0x7B, 0xB6, 0xA7, + 0x56, 0x66, 0x22, 0x30, 0x47, 0x0C, 0x18, 0x9B, + 0x5A, 0xA1, 0x65, 0x3D, 0xEB, 0x93, 0x7D, 0x5A, + 0x9C, 0x25, 0xA2, 0x1D, 0x93, 0xB1, 0x90, 0x74, + 0xFC, 0x23, 0x9D, 0x81, 0x53, 0x53, 0x97, 0x97, + 0xC7, 0xD4, 0xAB, 0x62, 0x64, 0x9D, 0x76, 0xAA, + 0x55, 0x37, 0x36, 0xA9, 0x49, 0x02, 0x2C, 0x22, + 0xC5, 0x2B, 0xAE, 0xEC, 0x60, 0x5B, 0x32, 0xCE, + 0x9E, 0x5B, 0x93, 0x84, 0x90, 0x35, 0x58, 0xCA, + 0x9D, 0x6A, 0x3A, 0xBA, 0x90, 0x42, 0x3E, 0xED, + 0xA0, 0x1C, 0x94, 0x19, 0x8B, 0x19, 0x2A, 0x8B, + 0xA9, 0x06, 0x34, 0x97, 0xA0, 0xC5, 0x01, 0x33, + 0x07, 0xDD, 0xD8, 0x63, 0x52, 0x64, 0x71, 0xA4, + 0xD9, 0x95, 0x23, 0xEB, 0x41, 0x7F, 0x29, 0x1A, + 0xAC, 0x0C, 0x3A, 0x58, 0x1B, 0x6D, 0xA0, 0x07, + 0x32, 0xE5, 0xE8, 0x1B, 0x1F, 0x7C, 0x87, 0x9B, + 0x16, 0x93, 0xC1, 0x3B, 0x6F, 0x9F, 0x79, 0x31, + 0x62, 0x24, 0x29, 0xE5, 0x42, 0xAF, 0x40, 0x69, + 0x22, 0x2F, 0x04, 0x55, 0x44, 0xE0, 0xCC, 0x4F, + 0xB2, 0x4D, 0x44, 0x48, 0xCF, 0x2C, 0x65, 0x96, + 0xF5, 0xCB, 0x08, 0x62, 0x4B, 0x11, 0x85, 0x01, + 0x3B, 0x6B, 0x02, 0x08, 0x92, 0xF9, 0x6B, 0xDF, + 0xD4, 0xAD, 0xA9, 0x17, 0x9D, 0xE7, 0x27, 0xB8, + 0xD9, 0x42, 0x6E, 0x09, 0x96, 0xB5, 0xD3, 0x49, + 0x48, 0xCE, 0x02, 0xD0, 0xC3, 0x69, 0xB3, 0x7C, + 0xBB, 0x54, 0xD3, 0x47, 0x9E, 0xD8, 0xB5, 0x82, + 0xE9, 0xE7, 0x28, 0x92, 0x9B, 0x4C, 0x71, 0xC9, + 0xBE, 0x11, 0xD4, 0x5B, 0x20, 0xC4, 0xBD, 0xC3, + 0xC7, 0x43, 0x13, 0x22, 0x3F, 0x58, 0x27, 0x4E, + 0x8B, 0xA5, 0x24, 0x44, 0x47, 0xC4, 0x95, 0x95, + 0x0B, 0x84, 0xCB, 0x0C, 0x3C, 0x27, 0x36, 0x40, + 0x10, 0x8A, 0x33, 0x97, 0x94, 0x45, 0x73, 0x27, + 0x93, 0x28, 0x99, 0x6C, 0xDC, 0x0C, 0x91, 0x3C, + 0x95, 0x8A, 0xD6, 0x20, 0xBA, 0x8B, 0x5E, 0x5E, + 0xCB, 0xBB, 0x7E, 0x13, 0xCB, 0x9C, 0x70, 0xBD, + 0x5A, 0xB3, 0x0E, 0xB7, 0x48, 0x8C, 0x97, 0x00, + 0x1C, 0x20, 0x49, 0x8F, 0x1D, 0x7C, 0xC0, 0x6D, + 0xA7, 0x6B, 0xF5, 0x20, 0xC6, 0x58, 0xCC, 0xAD, + 0xFA, 0x29, 0x56, 0x42, 0x45, 0x57, 0xAB, 0xEA, + 0x8A, 0xB8, 0x92, 0x39, 0xC1, 0x78, 0x33, 0xDC, + 0x3A, 0x49, 0xB3, 0x6A, 0x9A, 0xE9, 0xA4, 0x86, + 0x94, 0x05, 0x40, 0xEB, 0x44, 0x4F, 0x97, 0x15, + 0x23, 0x57, 0xE0, 0x20, 0x35, 0x93, 0x9D, 0x75, + 0xA3, 0xC0, 0x25, 0xF4, 0x1A, 0x40, 0x08, 0x23, + 0x82, 0xA0, 0x73, 0x3C, 0x39, 0xB0, 0x62, 0x2B, + 0x74, 0x0E, 0x40, 0x75, 0x92, 0xC6, 0x2E, 0xCA, + 0xEB, 0x14, 0x32, 0xC4, 0x45, 0xB3, 0x70, 0x3A, + 0x86, 0xF6, 0x98, 0x1A, 0x27, 0x81, 0x57, 0xEA, + 0x95, 0xA6, 0xE9, 0x2D, 0x55, 0xE4, 0xB9, 0x72, + 0xF9, 0x36, 0xC2, 0xF0, 0xA6, 0x58, 0x28, 0x0E, + 0xA2, 0xB0, 0x7A, 0x48, 0x99, 0x2D, 0xF8, 0x93, + 0x7E, 0x0A, 0x2A, 0xC1, 0xDC, 0xC9, 0x74, 0xFE, + 0x00, 0xAA, 0xE1, 0xF5, 0x61, 0xFA, 0x25, 0x8E, + 0x2D, 0x25, 0x9C, 0x3E, 0x86, 0x1D, 0xCE, 0x23, + 0x60, 0x39, 0x12, 0x76, 0x06, 0xFC, 0x1C, 0xE0, + 0x09, 0x00, 0x3A, 0x7B, 0xAC, 0x94, 0x21, 0x01, + 0xDC, 0xB8, 0x22, 0xB1, 0xF3, 0xC1, 0x2B, 0xF7, + 0x32, 0x38, 0xF5, 0x46, 0xE0, 0x1C, 0x36, 0xB5, + 0xA6, 0x93, 0x61, 0x92, 0x99, 0x5C, 0xC6, 0x9C, + 0x63, 0x23, 0x74, 0x09, 0xCB, 0x53, 0xC2, 0xE3, + 0x5D, 0x74, 0x89, 0x0D, 0x18, 0x88, 0x53, 0x76, + 0xFA, 0x55, 0x03, 0xB1, 0x07, 0xA2, 0xA3, 0x92, + 0x11, 0x5A, 0xCE, 0x0E, 0x64, 0x67, 0x7C, 0xBB, + 0x7D, 0xCF, 0xC9, 0x3C, 0x16, 0xD3, 0xA3, 0x05, + 0xF6, 0x76, 0x15, 0xA4, 0x88, 0xD7, 0x11, 0xAA, + 0x56, 0x69, 0x8C, 0x56, 0x63, 0xAB, 0x7A, 0xC9, + 0xCE, 0x66, 0xD5, 0x47, 0xC0, 0x59, 0x5F, 0x98, + 0xA4, 0x3F, 0x46, 0x50, 0xBB, 0xE0, 0x8C, 0x36, + 0x4D, 0x97, 0x67, 0x89, 0x11, 0x7D, 0x34, 0xF6, + 0xAE, 0x51, 0xAC, 0x06, 0x3C, 0xB5, 0x5C, 0x6C, + 0xA3, 0x25, 0x58, 0x22, 0x7D, 0xFE, 0xF8, 0x07, + 0xD1, 0x9C, 0x30, 0xDE, 0x41, 0x44, 0x24, 0x09, + 0x7F, 0x6A, 0xA2, 0x36, 0xA1, 0x05, 0x3B, 0x4A, + 0x07, 0xA7, 0x6B, 0xE3, 0x72, 0xA5, 0xC6, 0xB6, + 0x00, 0x27, 0x91, 0xEB, 0xE0, 0xAF, 0xDA, 0xF5, + 0x4E, 0x1C, 0xA2, 0x37, 0xFF, 0x54, 0x5B, 0xA6, + 0x83, 0x43, 0xE7, 0x45, 0xC0, 0x4A, 0xD1, 0x63, + 0x9D, 0xBC, 0x59, 0x03, 0x46, 0xB6, 0xB9, 0x56, + 0x9B, 0x56, 0xDB, 0xBF, 0xE5, 0x31, 0x51, 0x91, + 0x30, 0x66, 0xE5, 0xC8, 0x55, 0x27, 0xDC, 0x94, + 0x68, 0x11, 0x0A, 0x13, 0x6A, 0x41, 0x14, 0x97, + 0xC2, 0x27, 0xDC, 0xB8, 0xC9, 0xB2, 0x55, 0x70, + 0xB7, 0xA0, 0xE4, 0x2A, 0xAD, 0xA6, 0x70, 0x9F, + 0x23, 0x20, 0x8F, 0x5D, 0x49, 0x6E, 0xBA, 0xB7, + 0x84, 0x3F, 0x64, 0x83, 0xBF, 0x0C, 0x0C, 0x73, + 0xA4, 0x02, 0x96, 0xEC, 0x2C, 0x64, 0x40, 0x00, + 0x13, 0x94, 0xC9, 0x9C, 0xA1, 0x73, 0xD5, 0xC7, + 0x75, 0xB7, 0xF4, 0x15, 0xD0, 0x2A, 0x5A, 0x26, + 0xA0, 0x74, 0x07, 0x91, 0x85, 0x87, 0xC4, 0x11, + 0x69, 0xF2, 0xB7, 0x17, 0x87, 0x55, 0xAC, 0xC2, + 0x7F, 0xC8, 0xB1, 0x9C, 0x4C, 0x4B, 0x3F, 0xCD, + 0x41, 0x05, 0x3F, 0x2C, 0x74, 0xC8, 0xA1, 0x0A, + 0x83, 0x21, 0x24, 0x1B, 0x28, 0x02, 0x43, 0x28, + 0x75, 0xAE, 0x80, 0x8B, 0x9E, 0xF1, 0x36, 0x5C, + 0x7B, 0x8A, 0x52, 0x90, 0x2F, 0x13, 0x17, 0xBA, + 0x2F, 0xB0, 0x26, 0x9F, 0x47, 0x93, 0x06, 0x72, + 0x10, 0x7B, 0x47, 0x26, 0xFE, 0xF6, 0x45, 0x47, + 0x39, 0x4D, 0x33, 0x20, 0xC8, 0xF1, 0x20, 0xB3, + 0xC2, 0xF4, 0x72, 0x5B, 0x03, 0x05, 0xFA, 0xB8, + 0x8C, 0xC7, 0x98, 0x1F, 0xCB, 0x09, 0xA7, 0x6A, + 0x1C, 0xBF, 0x7F, 0x17, 0x9F, 0x43, 0xBB, 0x0A, + 0x4C, 0x8B, 0x05, 0x90, 0x85, 0x7F, 0x1E, 0x69, + 0x70, 0x84, 0x66, 0xC7, 0xF8, 0x60, 0x73, 0x91, + 0xE7, 0xBC, 0x52, 0x68, 0xBF, 0xD3, 0xD7, 0xA1, + 0xDF, 0xFC, 0xB4, 0xEC, 0xA2, 0xA1, 0xC9, 0xB5, + 0x97, 0x59, 0x30, 0x13, 0xD5, 0xFC, 0x42, 0x02, + 0xEC, 0x2B, 0x74, 0xE5, 0x7A, 0xB7, 0x6B, 0xBC, + 0xF3, 0x63, 0x2B, 0xBA, 0xF9, 0x7C, 0xDC, 0x41, + 0x8A, 0x6F, 0x16, 0x39, 0x28, 0x38, 0xCA, 0x9B, + 0xF4, 0x5D, 0xDF, 0x02, 0x37, 0x77, 0xB7, 0x56, + 0x18, 0x33, 0xC1, 0x05, 0x19, 0x0F, 0x94, 0xF3, + 0x02, 0xC5, 0x9B, 0x53, 0x19, 0x00, 0xBB, 0xC8, + 0x16, 0x36, 0x1F, 0xAA, 0x5B, 0x33, 0x80, 0xCA, + 0x3A, 0x89, 0x31, 0x04, 0xCA, 0x73, 0x88, 0xB1, + 0x85, 0x67, 0x1B, 0x3E, 0x5F, 0xE3, 0x79, 0x0E, + 0x9A, 0x62, 0x6E, 0xC4, 0x6D, 0x9B, 0x0B, 0x33, + 0xC7, 0xA4, 0x19, 0xAF, 0x7B, 0x32, 0xB6, 0x85, + 0x98, 0x94, 0xF5, 0x75, 0xD8, 0x2A, 0xC5, 0x45, + 0x6B, 0x54, 0x90, 0xA7, 0xAF, 0x8F, 0xE6, 0x10, + 0x46, 0x36, 0x05, 0x89, 0xEC, 0xBA, 0x72, 0x44, + 0x23, 0x6F, 0x41, 0x23, 0x11, 0x6B, 0x61, 0x74, + 0xAA, 0x17, 0x92, 0x49, 0xA4, 0x91, 0x95, 0xB3, + 0x56, 0xC7, 0x2F, 0xC6, 0x64, 0x1F, 0x02, 0x51, + 0x81, 0x2E, 0xAA, 0x98, 0x57, 0x0B, 0x04, 0x66, + 0x99, 0x07, 0x0E, 0x08, 0x19, 0xDC, 0x27, 0x13, + 0xF4, 0x69, 0x13, 0x7D, 0xFC, 0x6A, 0x3D, 0x7B, + 0x92, 0xB2, 0x98, 0x99, 0x5E, 0xE7, 0x80, 0x36, + 0x91, 0x53, 0xAC, 0x36, 0x6B, 0x06, 0xD7, 0x24, + 0x9C, 0xD0, 0x9E, 0x1B, 0x33, 0x78, 0xFB, 0x04, + 0x39, 0x9C, 0xEC, 0xB8, 0x65, 0x05, 0x81, 0xD6, + 0x37, 0xC7, 0x9A, 0xE6, 0x7D, 0x6F, 0x2C, 0xAF, + 0x6A, 0xBA, 0xCF, 0x59, 0x81, 0x59, 0xA7, 0x79, + 0x2C, 0xB3, 0xC9, 0x71, 0xD1, 0x49, 0x9D, 0x23, + 0x73, 0xAD, 0x20, 0xF6, 0x3F, 0x03, 0xBB, 0x59, + 0xED, 0x13, 0x73, 0x84, 0xAC, 0x61, 0xA7, 0x15, + 0x51, 0x43, 0xB8, 0xCA, 0x49, 0x32, 0x61, 0x2E, + 0xC9, 0x15, 0xE4, 0xCA, 0x34, 0x6A, 0x9B, 0xCE, + 0x5D, 0xD6, 0x04, 0x17, 0xC6, 0xB2, 0xA8, 0x9B, + 0x1C, 0xC4, 0x35, 0x64, 0x3F, 0x87, 0x5B, 0xDC, + 0x5A, 0x7E, 0x5B, 0x34, 0x81, 0xCF, 0x91, 0x9E, + 0xA0, 0x91, 0x72, 0xFE, 0xBC, 0x46, 0xD4, 0xFC, + 0x3F, 0xB0, 0xCB, 0x95, 0x91, 0x70, 0x4E, 0xE2, + 0xDB, 0xB6, 0x18, 0x44, 0xB2, 0xF3, 0x31, 0x4A, + 0x06, 0xBB, 0x6C, 0x6D, 0x34, 0x00, 0x5E, 0x48, + 0x5C, 0xE6, 0x67, 0xBD, 0xC7, 0xD0, 0x98, 0x58, + 0x69, 0x28, 0xD2, 0xD9, 0x13, 0x40, 0xF0, 0x04, + 0x19, 0xEA, 0x40, 0x13, 0x51, 0xA2, 0x40, 0xA0, + 0xB0, 0x41, 0x05, 0x8B, 0xEF, 0xB0, 0xC2, 0xFD, + 0x32, 0x64, 0x5B, 0x7A, 0x2D, 0xF8, 0xF5, 0xCB, + 0xFD, 0x87, 0x33, 0x27, 0xC9, 0x78, 0xD7, 0xB3, + 0x51, 0xA2, 0x80, 0x88, 0x43, 0x88, 0x37, 0x02, + 0x4C, 0x52, 0xB9, 0xC2, 0x95, 0xCD, 0x71, 0x36, + 0x46, 0xFB, 0x5D, 0x6C, 0x0C, 0xCF, 0xB4, 0x70, + 0x73, 0x4A, 0xC2, 0xB2, 0xBC, 0x81, 0x23, 0xC2, + 0xC1, 0x3D, 0xF6, 0x93, 0x8E, 0x92, 0x45, 0x5A, + 0x86, 0x26, 0x39, 0xFE, 0xB8, 0xA6, 0x4B, 0x85, + 0x16, 0x3E, 0x32, 0x70, 0x7E, 0x03, 0x7B, 0x38, + 0xD8, 0xAC, 0x39, 0x22, 0xB4, 0x51, 0x87, 0xBB, + 0x65, 0xEA, 0xFD, 0x46, 0x5F, 0xC6, 0x4A, 0x0C, + 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, + 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, + 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22, + 0x7F, 0xFA, 0xD1, 0xBC, 0x8A, 0xF7, 0x3B, 0x7E, + 0x87, 0x49, 0x56, 0xB8, 0x1C, 0x2A, 0x2E, 0xF0, + 0xBF, 0xAB, 0xE8, 0xDC, 0x93, 0xD7, 0x7B, 0x2F, + 0xBC, 0x9E, 0x0C, 0x64, 0xEF, 0xA0, 0x1E, 0x84, + 0x86, 0x26, 0xED, 0x79, 0xD4, 0x51, 0x14, 0x08, + 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, + 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, + 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F + }; + const byte kyber512_ct[] = { + 0xED, 0xF2, 0x41, 0x45, 0xE4, 0x3B, 0x4F, 0x6D, + 0xC6, 0xBF, 0x83, 0x32, 0xF5, 0x4E, 0x02, 0xCA, + 0xB0, 0x2D, 0xBF, 0x3B, 0x56, 0x05, 0xDD, 0xC9, + 0x0A, 0x15, 0xC8, 0x86, 0xAD, 0x3E, 0xD4, 0x89, + 0x46, 0x26, 0x99, 0xE4, 0xAB, 0xED, 0x44, 0x35, + 0x0B, 0xC3, 0x75, 0x7E, 0x26, 0x96, 0xFB, 0xFB, + 0x25, 0x34, 0x41, 0x2E, 0x8D, 0xD2, 0x01, 0xF1, + 0xE4, 0x54, 0x0A, 0x39, 0x70, 0xB0, 0x55, 0xFE, + 0x3B, 0x0B, 0xEC, 0x3A, 0x71, 0xF9, 0xE1, 0x15, + 0xB3, 0xF9, 0xF3, 0x91, 0x02, 0x06, 0x5B, 0x1C, + 0xCA, 0x83, 0x14, 0xDC, 0xC7, 0x95, 0xE3, 0xC0, + 0xE8, 0xFA, 0x98, 0xEE, 0x83, 0xCA, 0x66, 0x28, + 0x45, 0x70, 0x28, 0xA4, 0xD0, 0x9E, 0x83, 0x9E, + 0x55, 0x48, 0x62, 0xCF, 0x0B, 0x7B, 0xF5, 0x6C, + 0x5C, 0x0A, 0x82, 0x9E, 0x86, 0x57, 0x94, 0x79, + 0x45, 0xFE, 0x9C, 0x22, 0x56, 0x4F, 0xBA, 0xEB, + 0xC1, 0xB3, 0xAF, 0x35, 0x0D, 0x79, 0x55, 0x50, + 0x8A, 0x26, 0xD8, 0xA8, 0xEB, 0x54, 0x7B, 0x8B, + 0x1A, 0x2C, 0xF0, 0x3C, 0xCA, 0x1A, 0xAB, 0xCE, + 0x6C, 0x34, 0x97, 0x78, 0x3B, 0x64, 0x65, 0xBA, + 0x0B, 0x6E, 0x7A, 0xCB, 0xA8, 0x21, 0x19, 0x51, + 0x24, 0xAE, 0xF0, 0x9E, 0x62, 0x83, 0x82, 0xA1, + 0xF9, 0x14, 0x04, 0x3B, 0xE7, 0x09, 0x6E, 0x95, + 0x2C, 0xBC, 0x4F, 0xB4, 0xAF, 0xED, 0x13, 0x60, + 0x90, 0x46, 0x11, 0x7C, 0x01, 0x1F, 0xD7, 0x41, + 0xEE, 0x28, 0x6C, 0x83, 0x77, 0x16, 0x90, 0xF0, + 0xAE, 0xB5, 0x0D, 0xA0, 0xD7, 0x12, 0x85, 0xA1, + 0x79, 0xB2, 0x15, 0xC6, 0x03, 0x6D, 0xEB, 0x78, + 0x0F, 0x4D, 0x16, 0x76, 0x9F, 0x72, 0xDE, 0x16, + 0xFD, 0xAD, 0xAC, 0x73, 0xBE, 0xFA, 0x5B, 0xEF, + 0x89, 0x43, 0x19, 0x7F, 0x44, 0xC5, 0x95, 0x89, + 0xDC, 0x9F, 0x49, 0x73, 0xDE, 0x14, 0x50, 0xBA, + 0x1D, 0x0C, 0x32, 0x90, 0xD6, 0xB1, 0xD6, 0x83, + 0xF2, 0x94, 0xE7, 0x59, 0xC9, 0x54, 0xAB, 0xE8, + 0xA7, 0xDA, 0x5B, 0x10, 0x54, 0xFD, 0x6D, 0x21, + 0x32, 0x9B, 0x8E, 0x73, 0xD3, 0x75, 0x6A, 0xFD, + 0xA0, 0xDC, 0xB1, 0xFC, 0x8B, 0x15, 0x82, 0xD1, + 0xF9, 0x0C, 0xF2, 0x75, 0xA1, 0x02, 0xAB, 0xC6, + 0xAC, 0x69, 0x9D, 0xF0, 0xC5, 0x87, 0x0E, 0x50, + 0xA1, 0xF9, 0x89, 0xE4, 0xE6, 0x24, 0x1B, 0x60, + 0xAA, 0xA2, 0xEC, 0xF9, 0xE8, 0xE3, 0x3E, 0x0F, + 0xFC, 0xF4, 0x0F, 0xE8, 0x31, 0xE8, 0xFD, 0xC2, + 0xE8, 0x3B, 0x52, 0xCA, 0x7A, 0xB6, 0xD9, 0x3F, + 0x14, 0x6D, 0x29, 0xDC, 0xA5, 0x3C, 0x7D, 0xA1, + 0xDB, 0x4A, 0xC4, 0xF2, 0xDB, 0x39, 0xEA, 0x12, + 0x0D, 0x90, 0xFA, 0x60, 0xF4, 0xD4, 0x37, 0xC6, + 0xD0, 0x0E, 0xF4, 0x83, 0xBC, 0x94, 0xA3, 0x17, + 0x5C, 0xDA, 0x16, 0x3F, 0xC1, 0xC2, 0x82, 0x8B, + 0xE4, 0xDB, 0xD6, 0x43, 0x05, 0x07, 0xB5, 0x84, + 0xBB, 0x51, 0x77, 0xE1, 0x71, 0xB8, 0xDD, 0xA9, + 0xA4, 0x29, 0x3C, 0x32, 0x00, 0x29, 0x5C, 0x80, + 0x3A, 0x86, 0x5D, 0x6D, 0x21, 0x66, 0xF6, 0x6B, + 0xA5, 0x40, 0x1F, 0xB7, 0xA0, 0xE8, 0x53, 0x16, + 0x86, 0x00, 0xA2, 0x94, 0x84, 0x37, 0xE0, 0x36, + 0xE3, 0xBF, 0x19, 0xE1, 0x2F, 0xD3, 0xF2, 0xA2, + 0xB8, 0xB3, 0x43, 0xF7, 0x84, 0x24, 0x8E, 0x8D, + 0x68, 0x5E, 0xB0, 0xAF, 0xDE, 0x63, 0x15, 0x33, + 0x87, 0x30, 0xE7, 0xA1, 0x00, 0x1C, 0x27, 0xD8, + 0xD2, 0xA7, 0x6F, 0xA6, 0x9D, 0x15, 0x7B, 0xA1, + 0xAC, 0x7A, 0xD5, 0x6D, 0xA5, 0xA8, 0xC7, 0x0F, + 0xE4, 0xB5, 0xB8, 0xD7, 0x86, 0xDC, 0x6F, 0xC0, + 0x56, 0x6B, 0xA8, 0xE1, 0xB8, 0x81, 0x63, 0x34, + 0xD3, 0x2A, 0x3F, 0xB1, 0xCE, 0x7D, 0x4D, 0x5E, + 0x4C, 0x33, 0x2A, 0xF7, 0xB0, 0x03, 0xD0, 0x91, + 0x74, 0x1A, 0x3D, 0x5C, 0x96, 0x52, 0x92, 0x25, + 0x5D, 0xFF, 0x8E, 0xD2, 0xBB, 0xF1, 0xF9, 0x11, + 0x6B, 0xE5, 0x0C, 0x17, 0xB8, 0xE5, 0x48, 0x74, + 0x8A, 0xD4, 0xB2, 0xE9, 0x57, 0xBB, 0xD1, 0x95, + 0x34, 0x82, 0xA2, 0xE1, 0x71, 0x8C, 0xEC, 0x66, + 0xCD, 0x2C, 0x81, 0xF5, 0x72, 0xD5, 0x52, 0xB7, + 0x18, 0x78, 0x85, 0xE6, 0xB8, 0x94, 0x3D, 0x64, + 0x31, 0x41, 0x3C, 0x59, 0xEB, 0xB7, 0xE0, 0x36, + 0x04, 0x84, 0x90, 0xBE, 0x52, 0x89, 0xE9, 0x5B, + 0x20, 0xA8, 0x9E, 0x8B, 0x15, 0x9F, 0x61, 0xA9, + 0xA9, 0x88, 0x6E, 0x14, 0x75, 0x68, 0xF4, 0xC9, + 0x02, 0x1F, 0x36, 0x2F, 0x02, 0x68, 0x8A, 0x1C, + 0x8C, 0x3B, 0xB0, 0xD2, 0x40, 0x86, 0x88, 0x0E, + 0x55, 0xB6, 0xED, 0xB4, 0x3F, 0x37, 0x45, 0xD2, + 0xC1, 0x66, 0xDC, 0x1C, 0xB7, 0x43, 0xC7, 0x6F, + 0xE6, 0xBE, 0x52, 0x3A, 0x89, 0x3C, 0xC7, 0x64, + 0xD1, 0x64, 0x35, 0xC3, 0x78, 0x51, 0x25, 0x2A, + 0x81, 0xE2, 0xFF, 0xBA, 0x0F, 0x18, 0x97, 0x1A, + 0x3D, 0xEE, 0x37, 0xD4, 0x87, 0x7C, 0xB9, 0x28, + 0xE3, 0x6E, 0x52, 0x35, 0x03, 0x7A, 0x6B, 0x20, + 0x57, 0x89, 0x7D, 0x51, 0x8A, 0x5F, 0x0E, 0x34, + 0x8E, 0x3A, 0xB6, 0xD5, 0xB5, 0x2D, 0xFC, 0x60, + 0x75, 0x7F, 0x3B, 0x41, 0xA4, 0xFE, 0xC7, 0x82, + 0x8F, 0x1D, 0xEE, 0xAF, 0x45, 0x87, 0xCC, 0xC8, + 0xEA, 0xDF, 0x64, 0x7F, 0x4D, 0x20, 0x3B, 0x2F, + 0xAA, 0x05, 0xA6, 0x49, 0xB5, 0x82, 0x34, 0x0C, + 0xB4, 0xCA, 0xCE, 0x57, 0xA3, 0x07, 0x11, 0xBE, + 0x75, 0x2F, 0xAC, 0xF0, 0x22, 0x7D, 0x0A, 0x80, + 0xC4, 0x12, 0x84, 0x42, 0xDD, 0xC5, 0x44, 0xBE, + 0x80, 0x5B, 0x9C, 0xFE, 0x8F, 0xE9, 0xB1, 0x23, + 0x7C, 0x80, 0xF9, 0x67, 0x87, 0xCD, 0x92, 0x81, + 0xCC, 0xF2, 0x70, 0xC1, 0xAF, 0xC0, 0x67, 0x0D + }; + const byte kyber512_ss[] = { + 0x0A, 0x69, 0x25, 0x67, 0x6F, 0x24, 0xB2, 0x2C, + 0x28, 0x6F, 0x4C, 0x81, 0xA4, 0x22, 0x4C, 0xEC, + 0x50, 0x6C, 0x9B, 0x25, 0x7D, 0x48, 0x0E, 0x02, + 0xE3, 0xB4, 0x9F, 0x44, 0xCA, 0xA3, 0x23, 0x7F + }; +#else + const byte kyber512_pk[] = { + 0x68, 0xD6, 0x83, 0xF6, 0x01, 0x8F, 0xCB, 0x38, + 0x71, 0xC0, 0x64, 0x0A, 0xD1, 0x7B, 0x7E, 0x80, + 0x02, 0x93, 0xC9, 0xF6, 0x36, 0xC1, 0xE2, 0x09, + 0x10, 0x34, 0x25, 0xAD, 0x72, 0x26, 0xDD, 0x13, + 0x90, 0x41, 0xFA, 0x84, 0x9F, 0x8C, 0x2F, 0xED, + 0x18, 0xAB, 0xEF, 0xF5, 0x2A, 0xE0, 0xB6, 0x06, + 0x86, 0x13, 0xBA, 0x05, 0x73, 0x09, 0x3D, 0xE8, + 0xAC, 0xC8, 0x56, 0x19, 0x80, 0x62, 0xCD, 0x38, + 0xDC, 0x0F, 0x80, 0x05, 0x6B, 0x8D, 0x1C, 0x42, + 0xDF, 0xA3, 0x2C, 0x4C, 0xA4, 0x0E, 0x8C, 0x57, + 0x03, 0xF3, 0x13, 0xBA, 0x5F, 0xD0, 0x5C, 0x1E, + 0x75, 0xC3, 0x78, 0xD7, 0x04, 0x77, 0x62, 0x1A, + 0xF3, 0xA0, 0x8E, 0x52, 0x0A, 0x16, 0x05, 0xC4, + 0x89, 0x42, 0x2C, 0x97, 0xD0, 0xD9, 0x2E, 0x43, + 0x12, 0xBB, 0xEF, 0xB6, 0xC0, 0x18, 0x7A, 0x45, + 0xF9, 0x24, 0x6B, 0xF8, 0xEB, 0xA6, 0x2C, 0x04, + 0x7F, 0x8C, 0xB2, 0x42, 0x17, 0xB2, 0x01, 0x78, + 0xBB, 0x09, 0x5E, 0x59, 0x63, 0x6B, 0xCB, 0xA9, + 0x13, 0x73, 0x52, 0x65, 0xC7, 0xA0, 0x90, 0x06, + 0x12, 0xEF, 0x16, 0x41, 0xC9, 0xE1, 0x4D, 0x7D, + 0x89, 0x15, 0xE3, 0xC8, 0x83, 0xB7, 0x50, 0x68, + 0xA9, 0xB1, 0x3B, 0x0C, 0xF0, 0xA1, 0x32, 0x8A, + 0x3E, 0xC5, 0xD6, 0x00, 0x1E, 0xE9, 0x6D, 0x01, + 0x05, 0x6C, 0x25, 0x09, 0xC2, 0x16, 0x51, 0x4D, + 0xA5, 0x24, 0x61, 0xF7, 0xCA, 0x6A, 0xC4, 0x1A, + 0x2C, 0x0E, 0x35, 0x2B, 0x53, 0x63, 0x68, 0x99, + 0xD0, 0x65, 0xBD, 0xF2, 0xBF, 0x14, 0xF5, 0x35, + 0xFC, 0xE9, 0x42, 0x93, 0x9B, 0x6B, 0x4B, 0x97, + 0x72, 0x04, 0xD6, 0x29, 0xA6, 0x24, 0x1F, 0xFD, + 0x99, 0x94, 0x6A, 0x70, 0xBC, 0xA8, 0x91, 0x2B, + 0x1D, 0xFA, 0x61, 0x4A, 0xE9, 0x91, 0x3C, 0xB3, + 0x65, 0x63, 0x04, 0x7F, 0x9F, 0xA0, 0xA6, 0x48, + 0x7B, 0xA4, 0x10, 0x19, 0x5F, 0x56, 0x17, 0x58, + 0x84, 0x41, 0xC6, 0xA1, 0xA1, 0x50, 0x78, 0xBA, + 0x60, 0x93, 0x36, 0x79, 0x64, 0xD2, 0x5F, 0x19, + 0xD7, 0x15, 0x1A, 0xE0, 0x9F, 0xAF, 0xA6, 0xA4, + 0xCB, 0x63, 0x09, 0x40, 0xC5, 0x8F, 0x88, 0xEB, + 0x77, 0x8B, 0xFA, 0x44, 0xD7, 0x3B, 0x30, 0x63, + 0x74, 0x46, 0x8A, 0xBB, 0x8B, 0x56, 0x16, 0x0D, + 0x49, 0xA2, 0x4E, 0x6F, 0x43, 0x2B, 0xBF, 0xE8, + 0x8D, 0xE0, 0xC5, 0x6E, 0x9A, 0xE2, 0x13, 0x23, + 0xF1, 0x2D, 0xEE, 0xFC, 0xAF, 0x32, 0xF6, 0x8C, + 0x46, 0x21, 0x2F, 0xE3, 0x68, 0x3F, 0xB0, 0x48, + 0xB7, 0xE2, 0x4C, 0xB8, 0x17, 0xF8, 0x7E, 0xC4, + 0xA4, 0x2F, 0xE1, 0x1B, 0x21, 0xEA, 0x54, 0x4E, + 0xB7, 0xD4, 0x82, 0x89, 0xAA, 0xB4, 0xB3, 0x9C, + 0x57, 0x8F, 0xF3, 0x21, 0xFF, 0xEA, 0x57, 0xE9, + 0xD8, 0x81, 0x04, 0x9A, 0x1F, 0x92, 0xB7, 0x4A, + 0xFC, 0xB5, 0x5B, 0xA5, 0x29, 0x1F, 0xF5, 0x25, + 0x5D, 0x91, 0x11, 0xAA, 0x01, 0x08, 0x52, 0x5A, + 0xA3, 0x65, 0x33, 0xB4, 0xC2, 0xF0, 0x0C, 0x49, + 0x73, 0x07, 0x75, 0x67, 0x5C, 0x17, 0x8F, 0xE2, + 0x80, 0x83, 0x0B, 0xBC, 0x0A, 0xDA, 0x08, 0xC3, + 0xB3, 0x55, 0x19, 0x90, 0x78, 0x4F, 0xD5, 0x5A, + 0x12, 0x8B, 0x6A, 0x29, 0xF9, 0xB7, 0xA0, 0xF1, + 0x68, 0xD5, 0xC2, 0x9D, 0xEC, 0xC9, 0x63, 0x82, + 0x83, 0x9A, 0xCD, 0xEA, 0x32, 0xA8, 0xD4, 0x90, + 0x48, 0xFC, 0x47, 0x1D, 0x9B, 0x23, 0xB3, 0xAC, + 0xBE, 0x7D, 0x16, 0x94, 0x4A, 0xF6, 0x5A, 0x0B, + 0x76, 0x2D, 0xFF, 0xBA, 0x03, 0xA5, 0x25, 0xCB, + 0x69, 0x9B, 0x03, 0xB0, 0x7A, 0x2C, 0xFE, 0x55, + 0x22, 0x1E, 0x52, 0x68, 0x8A, 0xA2, 0xBF, 0xCB, + 0x8A, 0xA7, 0x3D, 0x75, 0x22, 0x28, 0x29, 0x88, + 0x8F, 0xA7, 0xC9, 0x97, 0x2A, 0xCD, 0x04, 0x01, + 0x60, 0xC1, 0x43, 0x25, 0x07, 0x78, 0x65, 0x00, + 0x08, 0x8A, 0x0A, 0xD5, 0x09, 0xC4, 0x45, 0xBB, + 0x5B, 0xF1, 0xCF, 0x40, 0x92, 0xAA, 0x74, 0xE1, + 0x50, 0x34, 0x30, 0x07, 0xE9, 0x00, 0x16, 0xA2, + 0xF4, 0xBD, 0x6A, 0xE8, 0x6A, 0x71, 0x76, 0x37, + 0xED, 0x5C, 0x7C, 0x9E, 0x1C, 0xCD, 0x4C, 0x78, + 0xAF, 0xA2, 0x74, 0xA5, 0x66, 0xB1, 0x7E, 0x5F, + 0xC4, 0x33, 0x26, 0x7C, 0x40, 0xBD, 0x16, 0x40, + 0x3C, 0x53, 0x2C, 0x2B, 0x9A, 0xBF, 0xA0, 0xC6, + 0x25, 0x1B, 0x8A, 0xAD, 0x27, 0xB8, 0x97, 0x3D, + 0x54, 0x87, 0x0B, 0x50, 0xB9, 0xDE, 0x37, 0xAE, + 0x5F, 0xA5, 0x6F, 0x79, 0xF9, 0x75, 0x77, 0xE6, + 0x35, 0xC7, 0x03, 0xBC, 0xBB, 0x02, 0x82, 0x67, + 0xB5, 0x44, 0x87, 0x96, 0xA0, 0xDC, 0xE0, 0x34, + 0xE2, 0xCB, 0xBB, 0x09, 0x27, 0x6F, 0x49, 0x50, + 0xBE, 0x02, 0x23, 0xCC, 0x97, 0xC0, 0x0A, 0x66, + 0xBB, 0x32, 0x1B, 0x11, 0x4D, 0x5F, 0xB1, 0xBB, + 0x5A, 0x6C, 0x97, 0x3C, 0xEC, 0x1B, 0x53, 0xDB, + 0x26, 0x30, 0x81, 0x44, 0x74, 0x76, 0x99, 0x3E, + 0x68, 0x18, 0xA6, 0xD6, 0xCE, 0x4D, 0x05, 0x61, + 0xFD, 0xBA, 0x94, 0x1B, 0xD9, 0xBE, 0x17, 0x41, + 0x6B, 0xEA, 0xBB, 0x51, 0x1C, 0x61, 0xCD, 0xA4, + 0x12, 0x3D, 0x45, 0xB0, 0x09, 0xEA, 0x6C, 0x09, + 0xAD, 0x78, 0x09, 0xD4, 0x52, 0xBE, 0x93, 0x42, + 0x9E, 0x05, 0x39, 0x41, 0xBB, 0xA9, 0xB0, 0x65, + 0x99, 0x61, 0xBB, 0x02, 0x16, 0x60, 0x08, 0x7C, + 0xCD, 0x6C, 0x6E, 0x0D, 0xEA, 0xA6, 0xBE, 0xE5, + 0x87, 0x19, 0x3C, 0x4E, 0x1C, 0x13, 0x20, 0x04, + 0x5C, 0xB5, 0x09, 0xC7, 0xC0, 0x58, 0x4C, 0x43, + 0xCD, 0x65, 0x0F, 0xD7, 0x82, 0x65, 0x20, 0x24, + 0x36, 0xC7, 0xC9, 0x31, 0x75, 0xFB, 0xCB, 0x3B, + 0x55, 0x69, 0x4A, 0xB9, 0xB8, 0xAE, 0x99, 0xC2, + 0x69, 0x2D, 0x3C, 0x8E, 0x8C, 0x73, 0x9F, 0xB3, + 0x78, 0x27, 0x74, 0x15, 0x61, 0xD5, 0xE7, 0x66, + 0x67, 0x51, 0x82, 0xFF, 0x83, 0xC9, 0x1C, 0xF0, + 0x33, 0x65, 0x88, 0x23, 0xD8, 0xFA, 0x91, 0xE1 + }; + const byte kyber512_sk[] = { + 0xD3, 0xBA, 0x7A, 0x3B, 0x91, 0x56, 0x15, 0x32, + 0x1E, 0xD4, 0xE4, 0x19, 0x6B, 0xC7, 0x34, 0xD0, + 0x75, 0xB7, 0x40, 0x56, 0xC9, 0x7C, 0x83, 0x00, + 0x78, 0xF0, 0x28, 0xDD, 0xB3, 0x4E, 0xEF, 0x76, + 0x9A, 0x22, 0x31, 0xC6, 0x60, 0x05, 0x9A, 0x56, + 0xA0, 0x9A, 0x64, 0x10, 0x8C, 0x7C, 0x0B, 0xC4, + 0x8B, 0x0A, 0x5E, 0xD3, 0x47, 0xA4, 0xA8, 0xBC, + 0x7D, 0xA1, 0x70, 0x74, 0xF4, 0xE3, 0x3E, 0x8A, + 0x13, 0x0B, 0x2F, 0x67, 0x64, 0x74, 0x63, 0x50, + 0x0B, 0x50, 0x1E, 0x8C, 0x41, 0x42, 0x8C, 0x87, + 0x85, 0x63, 0x19, 0x6C, 0x99, 0x40, 0x2B, 0x1F, + 0x4A, 0x17, 0x9E, 0x18, 0xC2, 0xF8, 0x8B, 0xA5, + 0x75, 0xD1, 0x5C, 0xF2, 0xF0, 0xA8, 0xDC, 0x3C, + 0x8A, 0x28, 0x2B, 0x3E, 0xF1, 0x18, 0x1F, 0xAA, + 0x28, 0x9B, 0x81, 0xF0, 0xA9, 0xBE, 0x47, 0xC3, + 0xFA, 0xFC, 0xCB, 0x18, 0xAC, 0x08, 0xF8, 0x6C, + 0xA2, 0xF3, 0xBB, 0x06, 0x99, 0xE5, 0x7E, 0xAD, + 0x61, 0x0E, 0x6A, 0xA7, 0x02, 0xD1, 0x09, 0xC4, + 0xF5, 0x04, 0x33, 0xA4, 0x74, 0x2B, 0x74, 0xDC, + 0x75, 0x27, 0x8B, 0x22, 0x46, 0xA8, 0xC1, 0xE4, + 0xC3, 0x73, 0xDC, 0x03, 0x85, 0x17, 0xB4, 0x8A, + 0x0B, 0xDC, 0xB3, 0xB3, 0xB1, 0x9F, 0x5F, 0xFA, + 0xBD, 0x65, 0x11, 0xAA, 0xD5, 0x4C, 0xCE, 0xB6, + 0x3C, 0xB9, 0x40, 0xCC, 0xB3, 0xF9, 0x40, 0x75, + 0xDF, 0x03, 0x19, 0x7D, 0x81, 0xAD, 0x2D, 0x8A, + 0x8D, 0x35, 0xBC, 0x01, 0x1C, 0xCA, 0xCF, 0xE5, + 0xB0, 0xA8, 0x21, 0xC1, 0xAD, 0x04, 0x6B, 0xC2, + 0x0B, 0xD4, 0x48, 0xAB, 0x98, 0xAE, 0x49, 0x46, + 0x7F, 0xA7, 0xA2, 0xCB, 0x2B, 0xF1, 0x30, 0x32, + 0xA1, 0x3E, 0x98, 0x65, 0x08, 0x10, 0x0A, 0x22, + 0x1D, 0x55, 0xAD, 0x97, 0x91, 0xAE, 0x47, 0x37, + 0x91, 0xCA, 0xA3, 0x18, 0x91, 0x5B, 0x58, 0x3F, + 0xD4, 0x73, 0x91, 0xC2, 0x31, 0xD9, 0x0B, 0xB7, + 0x29, 0xB2, 0x06, 0x2A, 0x0A, 0xC4, 0x30, 0x91, + 0xAF, 0x14, 0x05, 0x02, 0xB0, 0x62, 0x42, 0xFD, + 0x65, 0x04, 0xFB, 0x74, 0x9C, 0x20, 0x93, 0xCD, + 0x78, 0x00, 0x63, 0x4B, 0x48, 0xBA, 0xFC, 0xE0, + 0xB1, 0xDC, 0x22, 0x2A, 0x42, 0xB9, 0x70, 0xB7, + 0x34, 0x26, 0x02, 0x1B, 0xC0, 0x8F, 0xE7, 0x10, + 0x98, 0x6B, 0x3E, 0xD6, 0x47, 0x9C, 0x21, 0xEB, + 0xBB, 0x9D, 0x94, 0x6D, 0x13, 0x3A, 0x97, 0x55, + 0xB7, 0x33, 0xB0, 0xBA, 0x79, 0x5D, 0x34, 0xAA, + 0x2C, 0x43, 0x6E, 0xB3, 0x04, 0x87, 0xFE, 0x19, + 0x3C, 0xDE, 0x86, 0xC7, 0x54, 0x00, 0x14, 0x85, + 0x48, 0x4C, 0x4D, 0x28, 0x89, 0xD9, 0x67, 0x66, + 0x7E, 0xD1, 0x72, 0xAB, 0xE4, 0x52, 0x5C, 0x05, + 0xA7, 0xE9, 0x53, 0x8E, 0x1B, 0x0C, 0x38, 0xBE, + 0x40, 0x7D, 0x3F, 0x09, 0x72, 0xEA, 0x82, 0xB9, + 0xA7, 0xB1, 0x55, 0x0B, 0x2A, 0x20, 0x68, 0xFA, + 0x80, 0x56, 0x86, 0xB2, 0x7F, 0x50, 0xAD, 0xCC, + 0x47, 0x30, 0xCA, 0xF9, 0x04, 0x28, 0x74, 0x11, + 0xED, 0xB4, 0x82, 0x46, 0x36, 0x6C, 0x4B, 0x02, + 0xB7, 0x95, 0x96, 0x69, 0x81, 0x56, 0xA0, 0xE4, + 0x89, 0x65, 0x2D, 0xA5, 0xC2, 0x2B, 0x51, 0x24, + 0xD7, 0x90, 0x33, 0xD9, 0x84, 0x0D, 0x51, 0x93, + 0x39, 0xF2, 0xA9, 0x90, 0x72, 0x1C, 0x73, 0x1B, + 0x02, 0xC2, 0x36, 0xBC, 0x72, 0x8C, 0x22, 0x61, + 0xFF, 0x18, 0x18, 0xA3, 0x8A, 0x4D, 0x39, 0x54, + 0x61, 0xAE, 0x20, 0xC4, 0x2E, 0x12, 0xB0, 0x1C, + 0xBC, 0x85, 0xFE, 0xC8, 0x9E, 0x9F, 0x75, 0x9D, + 0x20, 0xE3, 0x87, 0x4F, 0x37, 0x16, 0x0E, 0x19, + 0x5C, 0x4C, 0x61, 0x47, 0x54, 0xC5, 0x93, 0x03, + 0xD0, 0x9B, 0x27, 0x76, 0xAE, 0xF6, 0x8C, 0x5B, + 0xF6, 0x1C, 0x4B, 0x50, 0x47, 0x42, 0x41, 0x3A, + 0xC3, 0xD7, 0xC4, 0x95, 0x7C, 0x47, 0x0B, 0xC2, + 0x9A, 0x72, 0x2C, 0xC3, 0x7F, 0xB2, 0xB2, 0x30, + 0x45, 0x7A, 0x3A, 0x98, 0x8A, 0xBE, 0x48, 0x96, + 0x71, 0x70, 0x54, 0x4F, 0xD2, 0x57, 0xBB, 0x89, + 0xEC, 0xC3, 0x13, 0xF1, 0xBD, 0x33, 0x10, 0xCA, + 0x37, 0xB0, 0x2D, 0x6E, 0x97, 0x07, 0xCA, 0x91, + 0xB6, 0x25, 0x97, 0x7B, 0xED, 0xB3, 0x1B, 0xA8, + 0x27, 0x48, 0xEE, 0x31, 0xAF, 0x2B, 0xC7, 0x62, + 0x92, 0xA7, 0x2B, 0xCF, 0xA0, 0x46, 0xE9, 0x31, + 0x48, 0xBE, 0x8C, 0x83, 0xB2, 0x58, 0x50, 0x7D, + 0x96, 0x6F, 0x14, 0xD2, 0x02, 0x81, 0xA3, 0x33, + 0x3E, 0x69, 0xAB, 0x78, 0x60, 0x0D, 0x3F, 0x3B, + 0x6B, 0xAF, 0x7A, 0xC9, 0xAC, 0xEA, 0xB5, 0x5B, + 0xB2, 0x0C, 0xE7, 0x5C, 0x13, 0x47, 0x4A, 0x67, + 0x8E, 0x7C, 0x60, 0xC0, 0x81, 0x87, 0x1E, 0xF3, + 0x3C, 0xA9, 0xEC, 0x6C, 0xD6, 0xA3, 0x64, 0x3B, + 0x6A, 0x41, 0x60, 0xF8, 0x3A, 0x27, 0x8C, 0x21, + 0x0C, 0xA2, 0xBC, 0xB9, 0xE0, 0x12, 0x27, 0x01, + 0xC9, 0xAD, 0xF0, 0x45, 0x8E, 0xF4, 0x71, 0x9F, + 0xB5, 0xB4, 0x01, 0xB3, 0xB5, 0x16, 0xE1, 0xAD, + 0x25, 0xD7, 0xA4, 0x84, 0xA6, 0x3E, 0xE4, 0x1A, + 0x81, 0x44, 0xE1, 0xAA, 0x38, 0x8A, 0xC8, 0xAE, + 0x69, 0x00, 0xCE, 0x87, 0x9E, 0x9F, 0xD7, 0x4F, + 0x47, 0xC7, 0x30, 0x78, 0xCC, 0x6E, 0x85, 0xC7, + 0x64, 0x15, 0x0C, 0x00, 0x3A, 0x58, 0x70, 0x56, + 0x97, 0x33, 0xDA, 0x66, 0x8B, 0xDA, 0x15, 0xC5, + 0xA2, 0x69, 0x9D, 0x38, 0x25, 0x82, 0x6B, 0x36, + 0x98, 0x5A, 0x51, 0x08, 0x51, 0x0B, 0x6F, 0xC3, + 0x65, 0x4B, 0x17, 0x51, 0x02, 0xA4, 0xD9, 0x06, + 0x14, 0x47, 0xA7, 0x8B, 0xA9, 0x39, 0x40, 0x8B, + 0x9A, 0x94, 0x57, 0x61, 0xEC, 0x0C, 0x24, 0x6F, + 0x8A, 0x64, 0x18, 0xF6, 0x2F, 0x1E, 0xA3, 0x00, + 0x68, 0xD6, 0x83, 0xF6, 0x01, 0x8F, 0xCB, 0x38, + 0x71, 0xC0, 0x64, 0x0A, 0xD1, 0x7B, 0x7E, 0x80, + 0x02, 0x93, 0xC9, 0xF6, 0x36, 0xC1, 0xE2, 0x09, + 0x10, 0x34, 0x25, 0xAD, 0x72, 0x26, 0xDD, 0x13, + 0x90, 0x41, 0xFA, 0x84, 0x9F, 0x8C, 0x2F, 0xED, + 0x18, 0xAB, 0xEF, 0xF5, 0x2A, 0xE0, 0xB6, 0x06, + 0x86, 0x13, 0xBA, 0x05, 0x73, 0x09, 0x3D, 0xE8, + 0xAC, 0xC8, 0x56, 0x19, 0x80, 0x62, 0xCD, 0x38, + 0xDC, 0x0F, 0x80, 0x05, 0x6B, 0x8D, 0x1C, 0x42, + 0xDF, 0xA3, 0x2C, 0x4C, 0xA4, 0x0E, 0x8C, 0x57, + 0x03, 0xF3, 0x13, 0xBA, 0x5F, 0xD0, 0x5C, 0x1E, + 0x75, 0xC3, 0x78, 0xD7, 0x04, 0x77, 0x62, 0x1A, + 0xF3, 0xA0, 0x8E, 0x52, 0x0A, 0x16, 0x05, 0xC4, + 0x89, 0x42, 0x2C, 0x97, 0xD0, 0xD9, 0x2E, 0x43, + 0x12, 0xBB, 0xEF, 0xB6, 0xC0, 0x18, 0x7A, 0x45, + 0xF9, 0x24, 0x6B, 0xF8, 0xEB, 0xA6, 0x2C, 0x04, + 0x7F, 0x8C, 0xB2, 0x42, 0x17, 0xB2, 0x01, 0x78, + 0xBB, 0x09, 0x5E, 0x59, 0x63, 0x6B, 0xCB, 0xA9, + 0x13, 0x73, 0x52, 0x65, 0xC7, 0xA0, 0x90, 0x06, + 0x12, 0xEF, 0x16, 0x41, 0xC9, 0xE1, 0x4D, 0x7D, + 0x89, 0x15, 0xE3, 0xC8, 0x83, 0xB7, 0x50, 0x68, + 0xA9, 0xB1, 0x3B, 0x0C, 0xF0, 0xA1, 0x32, 0x8A, + 0x3E, 0xC5, 0xD6, 0x00, 0x1E, 0xE9, 0x6D, 0x01, + 0x05, 0x6C, 0x25, 0x09, 0xC2, 0x16, 0x51, 0x4D, + 0xA5, 0x24, 0x61, 0xF7, 0xCA, 0x6A, 0xC4, 0x1A, + 0x2C, 0x0E, 0x35, 0x2B, 0x53, 0x63, 0x68, 0x99, + 0xD0, 0x65, 0xBD, 0xF2, 0xBF, 0x14, 0xF5, 0x35, + 0xFC, 0xE9, 0x42, 0x93, 0x9B, 0x6B, 0x4B, 0x97, + 0x72, 0x04, 0xD6, 0x29, 0xA6, 0x24, 0x1F, 0xFD, + 0x99, 0x94, 0x6A, 0x70, 0xBC, 0xA8, 0x91, 0x2B, + 0x1D, 0xFA, 0x61, 0x4A, 0xE9, 0x91, 0x3C, 0xB3, + 0x65, 0x63, 0x04, 0x7F, 0x9F, 0xA0, 0xA6, 0x48, + 0x7B, 0xA4, 0x10, 0x19, 0x5F, 0x56, 0x17, 0x58, + 0x84, 0x41, 0xC6, 0xA1, 0xA1, 0x50, 0x78, 0xBA, + 0x60, 0x93, 0x36, 0x79, 0x64, 0xD2, 0x5F, 0x19, + 0xD7, 0x15, 0x1A, 0xE0, 0x9F, 0xAF, 0xA6, 0xA4, + 0xCB, 0x63, 0x09, 0x40, 0xC5, 0x8F, 0x88, 0xEB, + 0x77, 0x8B, 0xFA, 0x44, 0xD7, 0x3B, 0x30, 0x63, + 0x74, 0x46, 0x8A, 0xBB, 0x8B, 0x56, 0x16, 0x0D, + 0x49, 0xA2, 0x4E, 0x6F, 0x43, 0x2B, 0xBF, 0xE8, + 0x8D, 0xE0, 0xC5, 0x6E, 0x9A, 0xE2, 0x13, 0x23, + 0xF1, 0x2D, 0xEE, 0xFC, 0xAF, 0x32, 0xF6, 0x8C, + 0x46, 0x21, 0x2F, 0xE3, 0x68, 0x3F, 0xB0, 0x48, + 0xB7, 0xE2, 0x4C, 0xB8, 0x17, 0xF8, 0x7E, 0xC4, + 0xA4, 0x2F, 0xE1, 0x1B, 0x21, 0xEA, 0x54, 0x4E, + 0xB7, 0xD4, 0x82, 0x89, 0xAA, 0xB4, 0xB3, 0x9C, + 0x57, 0x8F, 0xF3, 0x21, 0xFF, 0xEA, 0x57, 0xE9, + 0xD8, 0x81, 0x04, 0x9A, 0x1F, 0x92, 0xB7, 0x4A, + 0xFC, 0xB5, 0x5B, 0xA5, 0x29, 0x1F, 0xF5, 0x25, + 0x5D, 0x91, 0x11, 0xAA, 0x01, 0x08, 0x52, 0x5A, + 0xA3, 0x65, 0x33, 0xB4, 0xC2, 0xF0, 0x0C, 0x49, + 0x73, 0x07, 0x75, 0x67, 0x5C, 0x17, 0x8F, 0xE2, + 0x80, 0x83, 0x0B, 0xBC, 0x0A, 0xDA, 0x08, 0xC3, + 0xB3, 0x55, 0x19, 0x90, 0x78, 0x4F, 0xD5, 0x5A, + 0x12, 0x8B, 0x6A, 0x29, 0xF9, 0xB7, 0xA0, 0xF1, + 0x68, 0xD5, 0xC2, 0x9D, 0xEC, 0xC9, 0x63, 0x82, + 0x83, 0x9A, 0xCD, 0xEA, 0x32, 0xA8, 0xD4, 0x90, + 0x48, 0xFC, 0x47, 0x1D, 0x9B, 0x23, 0xB3, 0xAC, + 0xBE, 0x7D, 0x16, 0x94, 0x4A, 0xF6, 0x5A, 0x0B, + 0x76, 0x2D, 0xFF, 0xBA, 0x03, 0xA5, 0x25, 0xCB, + 0x69, 0x9B, 0x03, 0xB0, 0x7A, 0x2C, 0xFE, 0x55, + 0x22, 0x1E, 0x52, 0x68, 0x8A, 0xA2, 0xBF, 0xCB, + 0x8A, 0xA7, 0x3D, 0x75, 0x22, 0x28, 0x29, 0x88, + 0x8F, 0xA7, 0xC9, 0x97, 0x2A, 0xCD, 0x04, 0x01, + 0x60, 0xC1, 0x43, 0x25, 0x07, 0x78, 0x65, 0x00, + 0x08, 0x8A, 0x0A, 0xD5, 0x09, 0xC4, 0x45, 0xBB, + 0x5B, 0xF1, 0xCF, 0x40, 0x92, 0xAA, 0x74, 0xE1, + 0x50, 0x34, 0x30, 0x07, 0xE9, 0x00, 0x16, 0xA2, + 0xF4, 0xBD, 0x6A, 0xE8, 0x6A, 0x71, 0x76, 0x37, + 0xED, 0x5C, 0x7C, 0x9E, 0x1C, 0xCD, 0x4C, 0x78, + 0xAF, 0xA2, 0x74, 0xA5, 0x66, 0xB1, 0x7E, 0x5F, + 0xC4, 0x33, 0x26, 0x7C, 0x40, 0xBD, 0x16, 0x40, + 0x3C, 0x53, 0x2C, 0x2B, 0x9A, 0xBF, 0xA0, 0xC6, + 0x25, 0x1B, 0x8A, 0xAD, 0x27, 0xB8, 0x97, 0x3D, + 0x54, 0x87, 0x0B, 0x50, 0xB9, 0xDE, 0x37, 0xAE, + 0x5F, 0xA5, 0x6F, 0x79, 0xF9, 0x75, 0x77, 0xE6, + 0x35, 0xC7, 0x03, 0xBC, 0xBB, 0x02, 0x82, 0x67, + 0xB5, 0x44, 0x87, 0x96, 0xA0, 0xDC, 0xE0, 0x34, + 0xE2, 0xCB, 0xBB, 0x09, 0x27, 0x6F, 0x49, 0x50, + 0xBE, 0x02, 0x23, 0xCC, 0x97, 0xC0, 0x0A, 0x66, + 0xBB, 0x32, 0x1B, 0x11, 0x4D, 0x5F, 0xB1, 0xBB, + 0x5A, 0x6C, 0x97, 0x3C, 0xEC, 0x1B, 0x53, 0xDB, + 0x26, 0x30, 0x81, 0x44, 0x74, 0x76, 0x99, 0x3E, + 0x68, 0x18, 0xA6, 0xD6, 0xCE, 0x4D, 0x05, 0x61, + 0xFD, 0xBA, 0x94, 0x1B, 0xD9, 0xBE, 0x17, 0x41, + 0x6B, 0xEA, 0xBB, 0x51, 0x1C, 0x61, 0xCD, 0xA4, + 0x12, 0x3D, 0x45, 0xB0, 0x09, 0xEA, 0x6C, 0x09, + 0xAD, 0x78, 0x09, 0xD4, 0x52, 0xBE, 0x93, 0x42, + 0x9E, 0x05, 0x39, 0x41, 0xBB, 0xA9, 0xB0, 0x65, + 0x99, 0x61, 0xBB, 0x02, 0x16, 0x60, 0x08, 0x7C, + 0xCD, 0x6C, 0x6E, 0x0D, 0xEA, 0xA6, 0xBE, 0xE5, + 0x87, 0x19, 0x3C, 0x4E, 0x1C, 0x13, 0x20, 0x04, + 0x5C, 0xB5, 0x09, 0xC7, 0xC0, 0x58, 0x4C, 0x43, + 0xCD, 0x65, 0x0F, 0xD7, 0x82, 0x65, 0x20, 0x24, + 0x36, 0xC7, 0xC9, 0x31, 0x75, 0xFB, 0xCB, 0x3B, + 0x55, 0x69, 0x4A, 0xB9, 0xB8, 0xAE, 0x99, 0xC2, + 0x69, 0x2D, 0x3C, 0x8E, 0x8C, 0x73, 0x9F, 0xB3, + 0x78, 0x27, 0x74, 0x15, 0x61, 0xD5, 0xE7, 0x66, + 0x67, 0x51, 0x82, 0xFF, 0x83, 0xC9, 0x1C, 0xF0, + 0x33, 0x65, 0x88, 0x23, 0xD8, 0xFA, 0x91, 0xE1, + 0xC1, 0xC0, 0x8E, 0xFF, 0x2A, 0xB6, 0xE2, 0xAF, + 0x9F, 0x29, 0xA6, 0x32, 0xC5, 0x93, 0x32, 0xE9, + 0xA6, 0x1B, 0x63, 0x14, 0x6E, 0x8A, 0xC3, 0x5E, + 0xF3, 0xD3, 0xC4, 0x5A, 0x10, 0x10, 0xAC, 0xE2, + 0x86, 0x26, 0xED, 0x79, 0xD4, 0x51, 0x14, 0x08, + 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, + 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, + 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F + }; + const byte kyber512_ct[] = { + 0x58, 0x56, 0xAE, 0x75, 0x76, 0x21, 0xFD, 0x94, + 0x9B, 0xA5, 0x49, 0xD2, 0x49, 0x70, 0x52, 0x5F, + 0x17, 0x95, 0x60, 0xE3, 0x24, 0xF7, 0x1B, 0x3C, + 0x1F, 0xDC, 0xFC, 0xAF, 0x92, 0xFD, 0x7F, 0xED, + 0x6B, 0x35, 0x1F, 0x0D, 0xA4, 0x1C, 0x98, 0x51, + 0x24, 0x9F, 0x6E, 0x63, 0xB7, 0xBC, 0xE3, 0x4F, + 0xD4, 0x9C, 0x97, 0x70, 0x58, 0x8B, 0x94, 0x2D, + 0x1B, 0x51, 0x69, 0x57, 0xDB, 0x3A, 0xE9, 0x7C, + 0x5F, 0x94, 0x51, 0x8D, 0x40, 0xF5, 0x4B, 0x5B, + 0x78, 0xE1, 0xF3, 0x8F, 0x8D, 0x61, 0x27, 0xA5, + 0xD0, 0xD5, 0xD4, 0x24, 0x29, 0xEA, 0x79, 0x62, + 0x13, 0xC0, 0x77, 0x2D, 0x5C, 0x9B, 0x99, 0x2C, + 0xEC, 0x72, 0x1B, 0x52, 0x17, 0xB6, 0x91, 0x7F, + 0xF8, 0xC0, 0xCC, 0xBB, 0xCC, 0xFE, 0x13, 0x4B, + 0xD8, 0x9A, 0x99, 0x48, 0x0B, 0x95, 0x66, 0xE4, + 0x69, 0x60, 0xBD, 0x21, 0x8C, 0xAC, 0x2D, 0xDD, + 0x58, 0x00, 0xB0, 0x83, 0x01, 0x9F, 0x09, 0x42, + 0x0E, 0x8B, 0xA2, 0x8E, 0x1E, 0x4D, 0xCC, 0x51, + 0xD4, 0xF5, 0xF9, 0x57, 0xD4, 0x57, 0x5B, 0xC3, + 0x2C, 0xF3, 0xDD, 0x08, 0x15, 0xD7, 0xE1, 0xEC, + 0xDA, 0x47, 0x44, 0x3B, 0x34, 0xCD, 0x88, 0x68, + 0xE7, 0x39, 0xD1, 0x57, 0x90, 0x29, 0x37, 0x12, + 0xBF, 0xF0, 0x89, 0x19, 0x8D, 0xFF, 0xA8, 0x42, + 0xD9, 0x5C, 0x03, 0x68, 0x49, 0x6C, 0x3E, 0x7D, + 0xFA, 0x06, 0xC8, 0x99, 0x9B, 0x9A, 0xEA, 0x3B, + 0x09, 0xC6, 0xD3, 0x62, 0x80, 0xF7, 0x6D, 0xD9, + 0xC8, 0xC1, 0x58, 0x53, 0xB4, 0x5E, 0xBC, 0xCA, + 0x5E, 0xC8, 0xF9, 0xB1, 0xF5, 0x7C, 0xFA, 0x6A, + 0x60, 0x19, 0xA0, 0x52, 0xCD, 0x9D, 0xD9, 0x5F, + 0x6F, 0x25, 0x97, 0x3D, 0xFA, 0xB9, 0x79, 0x7B, + 0x3F, 0xDB, 0xDC, 0x2C, 0xEF, 0xCE, 0x8B, 0x0B, + 0x35, 0x33, 0xA3, 0xA8, 0x54, 0x96, 0xA4, 0x11, + 0x09, 0xF6, 0x14, 0xB0, 0x53, 0xB0, 0x8E, 0x48, + 0xFE, 0xA9, 0x2F, 0xA5, 0x61, 0x07, 0xB5, 0x24, + 0xDD, 0x28, 0x77, 0x93, 0xA0, 0x24, 0x50, 0x03, + 0xEA, 0x35, 0xA0, 0x4E, 0x03, 0xEA, 0x59, 0x3D, + 0xAA, 0xFE, 0x31, 0x24, 0xB1, 0x7D, 0x0F, 0x2D, + 0xC3, 0xBE, 0xAE, 0xD3, 0x48, 0xD8, 0x96, 0xD1, + 0x65, 0xE5, 0x24, 0x08, 0x67, 0xA2, 0xCB, 0x72, + 0x3A, 0xA3, 0x88, 0x62, 0xC0, 0x47, 0x45, 0x75, + 0x40, 0xB4, 0xA4, 0xC0, 0x06, 0xF8, 0x22, 0xBE, + 0xEF, 0xB6, 0xF2, 0x75, 0xF5, 0x82, 0x8D, 0x3B, + 0x79, 0xC5, 0x3F, 0x87, 0x5E, 0x3C, 0x5B, 0xD4, + 0xA7, 0x66, 0x5C, 0xD1, 0x0C, 0xFA, 0x25, 0x1B, + 0x79, 0xE7, 0x6D, 0x26, 0xC5, 0xDB, 0x24, 0x25, + 0x72, 0xE5, 0xD8, 0x11, 0xC4, 0x60, 0x04, 0xB0, + 0xCC, 0xAB, 0x1C, 0xE5, 0x00, 0x2C, 0xA1, 0xDE, + 0x61, 0x4F, 0x31, 0x0B, 0x30, 0x9D, 0xFA, 0x75, + 0x63, 0xD0, 0x66, 0x23, 0x03, 0x6C, 0x7C, 0x26, + 0x17, 0x96, 0x40, 0x26, 0x45, 0x03, 0x60, 0xEF, + 0x52, 0x5B, 0x1B, 0xE7, 0xD8, 0x16, 0xEA, 0x1D, + 0xDF, 0xA1, 0x07, 0x15, 0xA1, 0x14, 0x86, 0x9E, + 0x62, 0x70, 0xC0, 0x3C, 0xDC, 0x58, 0x52, 0xD7, + 0x20, 0x46, 0x81, 0xB0, 0xF4, 0xD1, 0xB2, 0xA3, + 0x88, 0xAC, 0x06, 0x1B, 0x99, 0xAE, 0x0C, 0x01, + 0x1A, 0xFF, 0x0D, 0x3D, 0x89, 0x6B, 0xFF, 0xE6, + 0x27, 0x2D, 0xCF, 0x30, 0x9B, 0xB4, 0xF8, 0x6E, + 0xF4, 0xB5, 0x8B, 0xA8, 0xF4, 0xA1, 0x41, 0x15, + 0x38, 0x83, 0x4B, 0xAE, 0x55, 0x22, 0xBB, 0x51, + 0x3B, 0xF3, 0x56, 0xA5, 0x20, 0x3F, 0xE8, 0xAA, + 0x57, 0x5A, 0xCC, 0xD0, 0x94, 0xC9, 0x55, 0x2C, + 0xC7, 0xB6, 0x40, 0x75, 0x2C, 0xDE, 0x80, 0xD1, + 0x5F, 0x7F, 0x6B, 0xE0, 0x88, 0xA1, 0x2C, 0x5C, + 0x58, 0x47, 0xDD, 0x56, 0xCA, 0x66, 0x26, 0x7C, + 0x08, 0xDC, 0xD5, 0x16, 0x70, 0x6F, 0x3A, 0xE9, + 0x0F, 0x17, 0xA7, 0x42, 0x6A, 0x1B, 0x24, 0x44, + 0x05, 0x6E, 0x89, 0x5B, 0x77, 0x6C, 0x1E, 0x7A, + 0xE1, 0x65, 0xE4, 0xE9, 0x5D, 0x62, 0x0B, 0x20, + 0x54, 0xE5, 0x00, 0x5C, 0x62, 0x2C, 0x97, 0x03, + 0x4F, 0x96, 0x39, 0x14, 0x28, 0x0A, 0x0A, 0x06, + 0x2C, 0x2A, 0x63, 0x0E, 0x65, 0xCF, 0x64, 0xF2, + 0xD7, 0x0C, 0xD6, 0x0F, 0xE1, 0x57, 0xE3, 0x20, + 0xB7, 0xE2, 0xD6, 0x33, 0x2C, 0xDB, 0x73, 0x5E, + 0xA9, 0x8B, 0xEB, 0x1E, 0x2E, 0x01, 0x5C, 0x0A, + 0x2B, 0x33, 0xD7, 0x0F, 0xE7, 0x68, 0xF1, 0x77, + 0xE6, 0x23, 0x91, 0x04, 0x88, 0xE8, 0xBB, 0x2F, + 0x83, 0x83, 0xE3, 0xE4, 0xA6, 0xE0, 0xFC, 0xA1, + 0x11, 0xF0, 0xA0, 0x2E, 0x57, 0x3B, 0xFB, 0x38, + 0xBC, 0x34, 0x73, 0x47, 0x08, 0x11, 0x62, 0x08, + 0xCA, 0x3E, 0x82, 0xEF, 0xE5, 0xC2, 0x15, 0x44, + 0x3D, 0x3F, 0xE9, 0x46, 0x3B, 0x61, 0x4D, 0xA1, + 0x7A, 0x09, 0x29, 0x37, 0xFB, 0x9C, 0xCB, 0xCE, + 0xE9, 0xC8, 0x84, 0x01, 0xCD, 0xC3, 0x55, 0x7E, + 0xF5, 0xBF, 0xFE, 0x89, 0x45, 0x2C, 0x42, 0x1A, + 0x6E, 0x8C, 0xB0, 0x0D, 0xA5, 0x00, 0xDB, 0x90, + 0x94, 0xA9, 0x92, 0xD5, 0x76, 0xAA, 0xCB, 0x2D, + 0x17, 0xB5, 0xF5, 0xEA, 0x5B, 0xC4, 0x58, 0x8E, + 0x2B, 0x2E, 0x08, 0x76, 0x9D, 0x62, 0x6C, 0x00, + 0x98, 0x0D, 0x51, 0x63, 0x9A, 0x43, 0xA0, 0xD0, + 0xEA, 0x5C, 0xCC, 0x26, 0x9E, 0x86, 0x8C, 0x1E, + 0xB1, 0xEE, 0xC8, 0x08, 0xCE, 0x64, 0x20, 0x8C, + 0x6B, 0xA0, 0x73, 0x5A, 0x0B, 0x42, 0x06, 0xB1, + 0x08, 0x28, 0xCE, 0x9B, 0x5E, 0x51, 0xCD, 0x5F, + 0x0E, 0xA5, 0x77, 0x7D, 0x0B, 0x7A, 0xCF, 0x14, + 0x42, 0xC9, 0xAA, 0xCC, 0x3E, 0x80, 0x87, 0x8C, + 0x4D, 0x7D, 0x3B, 0x6F, 0xDC, 0x56, 0xEF, 0x17 + }; + const byte kyber512_ss[] = { + 0x0C, 0x92, 0x39, 0xC7, 0x70, 0x5D, 0x63, 0x91, + 0x51, 0xAD, 0x1B, 0xCA, 0xDF, 0x58, 0xBD, 0x99, + 0x91, 0x0B, 0x7A, 0x12, 0x44, 0x99, 0x17, 0x21, + 0x13, 0x22, 0x8B, 0x4C, 0x75, 0xF8, 0x22, 0xE1 + }; +#endif + + ret = wc_KyberKey_Init(KYBER512, &key, HEAP_HINT, INVALID_DEVID); + if (ret != 0) + return -20101; + + ret = wc_KyberKey_MakeKeyWithRandom(&key, kyber512_rand, + sizeof(kyber512_rand)); + if (ret != 0) + return -20102; + + ret = wc_KyberKey_EncodePublicKey(&key, pub, sizeof(pub)); + if (ret != 0) + return -20103; + + ret = wc_KyberKey_EncodePrivateKey(&key, priv, sizeof(priv)); + if (ret != 0) + return -20104; + + if (XMEMCMP(pub, kyber512_pk, sizeof(kyber512_pk)) != 0) + return -20105; + + if (XMEMCMP(priv, kyber512_sk, sizeof(kyber512_sk)) != 0) + return -20106; + + ret = wc_KyberKey_EncapsulateWithRandom(&key, ct, ss, kyber512enc_rand, + sizeof(kyber512enc_rand)); + if (ret != 0) + return -20107; + + if (XMEMCMP(ct, kyber512_ct, sizeof(kyber512_ct)) != 0) + return -20108; + + if (XMEMCMP(ss, kyber512_ss, sizeof(kyber512_ss)) != 0) + return -20109; + + ret = wc_KyberKey_Decapsulate(&key, ss_dec, ct, sizeof(kyber512_ct)); + if (ret != 0) + return -20110; + + if (XMEMCMP(ss_dec, kyber512_ss, sizeof(kyber512_ss)) != 0) + return -20111; + + wc_KyberKey_Free(&key); + + return 0; +} +#endif /* WOLFSSL_KYBER512 */ + +#ifdef WOLFSSL_KYBER768 +static int kyber768_kat(void) +{ + KyberKey key; + int ret; + byte priv[KYBER768_PRIVATE_KEY_SIZE]; + byte pub[KYBER768_PUBLIC_KEY_SIZE]; + byte ct[KYBER768_CIPHER_TEXT_SIZE]; + byte ss[KYBER_SS_SZ]; + byte ss_dec[KYBER_SS_SZ]; + const byte kyber768_rand[] = { + 0x7c, 0x99, 0x35, 0xa0, 0xb0, 0x76, 0x94, 0xaa, + 0x0c, 0x6d, 0x10, 0xe4, 0xdb, 0x6b, 0x1a, 0xdd, + 0x2f, 0xd8, 0x1a, 0x25, 0xcc, 0xb1, 0x48, 0x03, + 0x2d, 0xcd, 0x73, 0x99, 0x36, 0x73, 0x7f, 0x2d, + 0x86, 0x26, 0xED, 0x79, 0xD4, 0x51, 0x14, 0x08, + 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, + 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, + 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F + }; + const byte kyber768enc_rand[] = { + 0x14, 0x7c, 0x03, 0xf7, 0xa5, 0xbe, 0xbb, 0xa4, + 0x06, 0xc8, 0xfa, 0xe1, 0x87, 0x4d, 0x7f, 0x13, + 0xc8, 0x0e, 0xfe, 0x79, 0xa3, 0xa9, 0xa8, 0x74, + 0xcc, 0x09, 0xfe, 0x76, 0xf6, 0x99, 0x76, 0x15 + }; +#ifndef WOLFSSL_KYBER_90S + const byte kyber768_pk[] = { + 0xA7, 0x2C, 0x2D, 0x9C, 0x84, 0x3E, 0xE9, 0xF8, + 0x31, 0x3E, 0xCC, 0x7F, 0x86, 0xD6, 0x29, 0x4D, + 0x59, 0x15, 0x9D, 0x9A, 0x87, 0x9A, 0x54, 0x2E, + 0x26, 0x09, 0x22, 0xAD, 0xF9, 0x99, 0x05, 0x1C, + 0xC4, 0x52, 0x00, 0xC9, 0xFF, 0xDB, 0x60, 0x44, + 0x9C, 0x49, 0x46, 0x59, 0x79, 0x27, 0x23, 0x67, + 0xC0, 0x83, 0xA7, 0xD6, 0x26, 0x7A, 0x3E, 0xD7, + 0xA7, 0xFD, 0x47, 0x95, 0x7C, 0x21, 0x93, 0x27, + 0xF7, 0xCA, 0x73, 0xA4, 0x00, 0x7E, 0x16, 0x27, + 0xF0, 0x0B, 0x11, 0xCC, 0x80, 0x57, 0x3C, 0x15, + 0xAE, 0xE6, 0x64, 0x0F, 0xB8, 0x56, 0x2D, 0xFA, + 0x6B, 0x24, 0x0C, 0xA0, 0xAD, 0x35, 0x1A, 0xC4, + 0xAC, 0x15, 0x5B, 0x96, 0xC1, 0x4C, 0x8A, 0xB1, + 0x3D, 0xD2, 0x62, 0xCD, 0xFD, 0x51, 0xC4, 0xBB, + 0x55, 0x72, 0xFD, 0x61, 0x65, 0x53, 0xD1, 0x7B, + 0xDD, 0x43, 0x0A, 0xCB, 0xEA, 0x3E, 0x95, 0xF0, + 0xB6, 0x98, 0xD6, 0x69, 0x90, 0xAB, 0x51, 0xE5, + 0xD0, 0x37, 0x83, 0xA8, 0xB3, 0xD2, 0x78, 0xA5, + 0x72, 0x04, 0x54, 0xCF, 0x96, 0x95, 0xCF, 0xDC, + 0xA0, 0x84, 0x85, 0xBA, 0x09, 0x9C, 0x51, 0xCD, + 0x92, 0xA7, 0xEA, 0x75, 0x87, 0xC1, 0xD1, 0x5C, + 0x28, 0xE6, 0x09, 0xA8, 0x18, 0x52, 0x60, 0x1B, + 0x06, 0x04, 0x01, 0x06, 0x79, 0xAA, 0x48, 0x2D, + 0x51, 0x26, 0x1E, 0xC3, 0x6E, 0x36, 0xB8, 0x71, + 0x96, 0x76, 0x21, 0x7F, 0xD7, 0x4C, 0x54, 0x78, + 0x64, 0x88, 0xF4, 0xB4, 0x96, 0x9C, 0x05, 0xA8, + 0xBA, 0x27, 0xCA, 0x3A, 0x77, 0xCC, 0xE7, 0x3B, + 0x96, 0x59, 0x23, 0xCA, 0x55, 0x4E, 0x42, 0x2B, + 0x9B, 0x61, 0xF4, 0x75, 0x46, 0x41, 0x60, 0x8A, + 0xC1, 0x6C, 0x9B, 0x85, 0x87, 0xA3, 0x2C, 0x1C, + 0x5D, 0xD7, 0x88, 0xF8, 0x8B, 0x36, 0xB7, 0x17, + 0xA4, 0x69, 0x65, 0x63, 0x5D, 0xEB, 0x67, 0xF4, + 0x5B, 0x12, 0x9B, 0x99, 0x07, 0x09, 0x09, 0xC9, + 0x3E, 0xB8, 0x0B, 0x42, 0xC2, 0xB3, 0xF3, 0xF7, + 0x03, 0x43, 0xA7, 0xCF, 0x37, 0xE8, 0x52, 0x0E, + 0x7B, 0xCF, 0xC4, 0x16, 0xAC, 0xA4, 0xF1, 0x8C, + 0x79, 0x81, 0x26, 0x2B, 0xA2, 0xBF, 0xC7, 0x56, + 0xAE, 0x03, 0x27, 0x8F, 0x0E, 0xC6, 0x6D, 0xC2, + 0x05, 0x76, 0x96, 0x82, 0x4B, 0xA6, 0x76, 0x98, + 0x65, 0xA6, 0x01, 0xD7, 0x14, 0x8E, 0xF6, 0xF5, + 0x4E, 0x5A, 0xF5, 0x68, 0x6A, 0xA2, 0x90, 0x6F, + 0x99, 0x4C, 0xE3, 0x8A, 0x5E, 0x0B, 0x93, 0x8F, + 0x23, 0x90, 0x07, 0x00, 0x30, 0x22, 0xC0, 0x33, + 0x92, 0xDF, 0x34, 0x01, 0xB1, 0xE4, 0xA3, 0xA7, + 0xEB, 0xC6, 0x16, 0x14, 0x49, 0xF7, 0x33, 0x74, + 0xC8, 0xB0, 0x14, 0x03, 0x69, 0x34, 0x3D, 0x92, + 0x95, 0xFD, 0xF5, 0x11, 0x84, 0x5C, 0x4A, 0x46, + 0xEB, 0xAA, 0xB6, 0xCA, 0x54, 0x92, 0xF6, 0x80, + 0x0B, 0x98, 0xC0, 0xCC, 0x80, 0x36, 0x53, 0xA4, + 0xB1, 0xD6, 0xE6, 0xAA, 0xED, 0x19, 0x32, 0xBA, + 0xCC, 0x5F, 0xEF, 0xAA, 0x81, 0x8B, 0xA5, 0x02, + 0x85, 0x9B, 0xA5, 0x49, 0x4C, 0x5F, 0x54, 0x02, + 0xC8, 0x53, 0x6A, 0x9C, 0x4C, 0x18, 0x88, 0x15, + 0x06, 0x17, 0xF8, 0x00, 0x98, 0xF6, 0xB2, 0xA9, + 0x9C, 0x39, 0xBC, 0x5D, 0xC7, 0xCF, 0x3B, 0x59, + 0x00, 0xA2, 0x13, 0x29, 0xAB, 0x59, 0x05, 0x3A, + 0xBA, 0xA6, 0x4E, 0xD1, 0x63, 0xE8, 0x59, 0xA8, + 0xB3, 0xB3, 0xCA, 0x33, 0x59, 0xB7, 0x50, 0xCC, + 0xC3, 0xE7, 0x10, 0xC7, 0xAC, 0x43, 0xC8, 0x19, + 0x1C, 0xB5, 0xD6, 0x88, 0x70, 0xC0, 0x63, 0x91, + 0xC0, 0xCB, 0x8A, 0xEC, 0x72, 0xB8, 0x97, 0xAC, + 0x6B, 0xE7, 0xFB, 0xAA, 0xCC, 0x67, 0x6E, 0xD6, + 0x63, 0x14, 0xC8, 0x36, 0x30, 0xE8, 0x94, 0x48, + 0xC8, 0x8A, 0x1D, 0xF0, 0x4A, 0xCE, 0xB2, 0x3A, + 0xBF, 0x2E, 0x40, 0x9E, 0xF3, 0x33, 0xC6, 0x22, + 0x28, 0x9C, 0x18, 0xA2, 0x13, 0x4E, 0x65, 0x0C, + 0x45, 0x25, 0x7E, 0x47, 0x47, 0x5F, 0xA3, 0x3A, + 0xA5, 0x37, 0xA5, 0xA8, 0xF7, 0x68, 0x02, 0x14, + 0x71, 0x6C, 0x50, 0xD4, 0x70, 0xE3, 0x28, 0x49, + 0x63, 0xCA, 0x64, 0xF5, 0x46, 0x77, 0xAE, 0xC5, + 0x4B, 0x52, 0x72, 0x16, 0x2B, 0xF5, 0x2B, 0xC8, + 0x14, 0x2E, 0x1D, 0x41, 0x83, 0xFC, 0x01, 0x74, + 0x54, 0xA6, 0xB5, 0xA4, 0x96, 0x83, 0x17, 0x59, + 0x06, 0x40, 0x24, 0x74, 0x59, 0x78, 0xCB, 0xD5, + 0x1A, 0x6C, 0xED, 0xC8, 0x95, 0x5D, 0xE4, 0xCC, + 0x6D, 0x36, 0x36, 0x70, 0xA4, 0x74, 0x66, 0xE8, + 0x2B, 0xE5, 0xC2, 0x36, 0x03, 0xA1, 0x7B, 0xF2, + 0x2A, 0xCD, 0xB7, 0xCC, 0x98, 0x4A, 0xF0, 0x8C, + 0x87, 0xE1, 0x4E, 0x27, 0x75, 0x3C, 0xF5, 0x87, + 0xA8, 0xEC, 0x34, 0x47, 0xE6, 0x2C, 0x64, 0x9E, + 0x88, 0x7A, 0x67, 0xC3, 0x6C, 0x9C, 0xE9, 0x87, + 0x21, 0xB6, 0x97, 0x21, 0x32, 0x75, 0x64, 0x6B, + 0x19, 0x4F, 0x36, 0x75, 0x86, 0x73, 0xA8, 0xED, + 0x11, 0x28, 0x44, 0x55, 0xAF, 0xC7, 0xA8, 0x52, + 0x9F, 0x69, 0xC9, 0x7A, 0x3C, 0x2D, 0x7B, 0x8C, + 0x63, 0x6C, 0x0B, 0xA5, 0x56, 0x14, 0xB7, 0x68, + 0xE6, 0x24, 0xE7, 0x12, 0x93, 0x0F, 0x77, 0x61, + 0x69, 0xB0, 0x17, 0x15, 0x72, 0x53, 0x51, 0xBC, + 0x74, 0xB4, 0x73, 0x95, 0xED, 0x52, 0xB2, 0x5A, + 0x13, 0x13, 0xC9, 0x51, 0x64, 0x81, 0x4C, 0x34, + 0xC9, 0x79, 0xCB, 0xDF, 0xAB, 0x85, 0x95, 0x46, + 0x62, 0xCA, 0xB4, 0x85, 0xE7, 0x50, 0x87, 0xA9, + 0x8C, 0xC7, 0x4B, 0xB8, 0x2C, 0xA2, 0xD1, 0xB5, + 0xBF, 0x28, 0x03, 0x23, 0x84, 0x80, 0x63, 0x8C, + 0x40, 0xE9, 0x0B, 0x43, 0xC7, 0x46, 0x0E, 0x7A, + 0xA9, 0x17, 0xF0, 0x10, 0x15, 0x1F, 0xAB, 0x11, + 0x69, 0x98, 0x7B, 0x37, 0x2A, 0xBB, 0x59, 0x27, + 0x1F, 0x70, 0x06, 0xC2, 0x4E, 0x60, 0x23, 0x6B, + 0x84, 0xB9, 0xDD, 0xD6, 0x00, 0x62, 0x37, 0x04, + 0x25, 0x46, 0x17, 0xFB, 0x49, 0x8D, 0x89, 0xE5, + 0x8B, 0x03, 0x68, 0xBC, 0xB2, 0x10, 0x3E, 0x79, + 0x35, 0x3E, 0xB5, 0x87, 0x86, 0x0C, 0x14, 0x22, + 0xE4, 0x76, 0x16, 0x2E, 0x42, 0x5B, 0xC2, 0x38, + 0x1D, 0xB8, 0x2C, 0x65, 0x92, 0x73, 0x7E, 0x1D, + 0xD6, 0x02, 0x86, 0x4B, 0x01, 0x67, 0xA7, 0x1E, + 0xC1, 0xF2, 0x23, 0x30, 0x5C, 0x02, 0xFE, 0x25, + 0x05, 0x2A, 0xF2, 0xB3, 0xB5, 0xA5, 0x5A, 0x0D, + 0x7A, 0x20, 0x22, 0xD9, 0xA7, 0x98, 0xDC, 0x0C, + 0x58, 0x74, 0xA9, 0x87, 0x02, 0xAA, 0xF4, 0x05, + 0x4C, 0x5D, 0x80, 0x33, 0x8A, 0x52, 0x48, 0xB5, + 0xB7, 0xBD, 0x09, 0xC5, 0x3B, 0x5E, 0x2A, 0x08, + 0x4B, 0x04, 0x7D, 0x27, 0x7A, 0x86, 0x1B, 0x1A, + 0x73, 0xBB, 0x51, 0x48, 0x8D, 0xE0, 0x4E, 0xF5, + 0x73, 0xC8, 0x52, 0x30, 0xA0, 0x47, 0x0B, 0x73, + 0x17, 0x5C, 0x9F, 0xA5, 0x05, 0x94, 0xF6, 0x6A, + 0x5F, 0x50, 0xB4, 0x15, 0x00, 0x54, 0xC9, 0x3B, + 0x68, 0x18, 0x6F, 0x8B, 0x5C, 0xBC, 0x49, 0x31, + 0x6C, 0x85, 0x48, 0xA6, 0x42, 0xB2, 0xB3, 0x6A, + 0x1D, 0x45, 0x4C, 0x74, 0x89, 0xAC, 0x33, 0xB2, + 0xD2, 0xCE, 0x66, 0x68, 0x09, 0x67, 0x82, 0xA2, + 0xC1, 0xE0, 0x86, 0x6D, 0x21, 0xA6, 0x5E, 0x16, + 0xB5, 0x85, 0xE7, 0xAF, 0x86, 0x18, 0xBD, 0xF3, + 0x18, 0x4C, 0x19, 0x86, 0x87, 0x85, 0x08, 0x91, + 0x72, 0x77, 0xB9, 0x3E, 0x10, 0x70, 0x6B, 0x16, + 0x14, 0x97, 0x2B, 0x2A, 0x94, 0xC7, 0x31, 0x0F, + 0xE9, 0xC7, 0x08, 0xC2, 0x31, 0xA1, 0xA8, 0xAC, + 0x8D, 0x93, 0x14, 0xA5, 0x29, 0xA9, 0x7F, 0x46, + 0x9B, 0xF6, 0x49, 0x62, 0xD8, 0x20, 0x64, 0x84, + 0x43, 0x09, 0x9A, 0x07, 0x6D, 0x55, 0xD4, 0xCE, + 0xA8, 0x24, 0xA5, 0x83, 0x04, 0x84, 0x4F, 0x99, + 0x49, 0x7C, 0x10, 0xA2, 0x51, 0x48, 0x61, 0x8A, + 0x31, 0x5D, 0x72, 0xCA, 0x85, 0x7D, 0x1B, 0x04, + 0xD5, 0x75, 0xB9, 0x4F, 0x85, 0xC0, 0x1D, 0x19, + 0xBE, 0xF2, 0x11, 0xBF, 0x0A, 0xA3, 0x36, 0x2E, + 0x70, 0x41, 0xFD, 0x16, 0x59, 0x6D, 0x80, 0x8E, + 0x86, 0x7B, 0x44, 0xC4, 0xC0, 0x0D, 0x1C, 0xDA, + 0x34, 0x18, 0x96, 0x77, 0x17, 0xF1, 0x47, 0xD0, + 0xEB, 0x21, 0xB4, 0x2A, 0xAE, 0xE7, 0x4A, 0xC3, + 0x5D, 0x0B, 0x92, 0x41, 0x4B, 0x95, 0x85, 0x31, + 0xAA, 0xDF, 0x46, 0x3E, 0xC6, 0x30, 0x5A, 0xE5, + 0xEC, 0xAF, 0x79, 0x17, 0x40, 0x02, 0xF2, 0x6D, + 0xDE, 0xCC, 0x81, 0x3B, 0xF3, 0x26, 0x72, 0xE8, + 0x52, 0x9D, 0x95, 0xA4, 0xE7, 0x30, 0xA7, 0xAB, + 0x4A, 0x3E, 0x8F, 0x8A, 0x8A, 0xF9, 0x79, 0xA6, + 0x65, 0xEA, 0xFD, 0x46, 0x5F, 0xC6, 0x4A, 0x0C, + 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, + 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, + 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22 + }; + const byte kyber768_sk[] = { + 0x07, 0x63, 0x8F, 0xB6, 0x98, 0x68, 0xF3, 0xD3, + 0x20, 0xE5, 0x86, 0x2B, 0xD9, 0x69, 0x33, 0xFE, + 0xB3, 0x11, 0xB3, 0x62, 0x09, 0x3C, 0x9B, 0x5D, + 0x50, 0x17, 0x0B, 0xCE, 0xD4, 0x3F, 0x1B, 0x53, + 0x6D, 0x9A, 0x20, 0x4B, 0xB1, 0xF2, 0x26, 0x95, + 0x95, 0x0B, 0xA1, 0xF2, 0xA9, 0xE8, 0xEB, 0x82, + 0x8B, 0x28, 0x44, 0x88, 0x76, 0x0B, 0x3F, 0xC8, + 0x4F, 0xAB, 0xA0, 0x42, 0x75, 0xD5, 0x62, 0x8E, + 0x39, 0xC5, 0xB2, 0x47, 0x13, 0x74, 0x28, 0x3C, + 0x50, 0x32, 0x99, 0xC0, 0xAB, 0x49, 0xB6, 0x6B, + 0x8B, 0xBB, 0x56, 0xA4, 0x18, 0x66, 0x24, 0xF9, + 0x19, 0xA2, 0xBA, 0x59, 0xBB, 0x08, 0xD8, 0x55, + 0x18, 0x80, 0xC2, 0xBE, 0xFC, 0x4F, 0x87, 0xF2, + 0x5F, 0x59, 0xAB, 0x58, 0x7A, 0x79, 0xC3, 0x27, + 0xD7, 0x92, 0xD5, 0x4C, 0x97, 0x4A, 0x69, 0x26, + 0x2F, 0xF8, 0xA7, 0x89, 0x38, 0x28, 0x9E, 0x9A, + 0x87, 0xB6, 0x88, 0xB0, 0x83, 0xE0, 0x59, 0x5F, + 0xE2, 0x18, 0xB6, 0xBB, 0x15, 0x05, 0x94, 0x1C, + 0xE2, 0xE8, 0x1A, 0x5A, 0x64, 0xC5, 0xAA, 0xC6, + 0x04, 0x17, 0x25, 0x69, 0x85, 0x34, 0x9E, 0xE4, + 0x7A, 0x52, 0x42, 0x0A, 0x5F, 0x97, 0x47, 0x7B, + 0x72, 0x36, 0xAC, 0x76, 0xBC, 0x70, 0xE8, 0x28, + 0x87, 0x29, 0x28, 0x7E, 0xE3, 0xE3, 0x4A, 0x3D, + 0xBC, 0x36, 0x83, 0xC0, 0xB7, 0xB1, 0x00, 0x29, + 0xFC, 0x20, 0x34, 0x18, 0x53, 0x7E, 0x74, 0x66, + 0xBA, 0x63, 0x85, 0xA8, 0xFF, 0x30, 0x1E, 0xE1, + 0x27, 0x08, 0xF8, 0x2A, 0xAA, 0x1E, 0x38, 0x0F, + 0xC7, 0xA8, 0x8F, 0x8F, 0x20, 0x5A, 0xB7, 0xE8, + 0x8D, 0x7E, 0x95, 0x95, 0x2A, 0x55, 0xBA, 0x20, + 0xD0, 0x9B, 0x79, 0xA4, 0x71, 0x41, 0xD6, 0x2B, + 0xF6, 0xEB, 0x7D, 0xD3, 0x07, 0xB0, 0x8E, 0xCA, + 0x13, 0xA5, 0xBC, 0x5F, 0x6B, 0x68, 0x58, 0x1C, + 0x68, 0x65, 0xB2, 0x7B, 0xBC, 0xDD, 0xAB, 0x14, + 0x2F, 0x4B, 0x2C, 0xBF, 0xF4, 0x88, 0xC8, 0xA2, + 0x27, 0x05, 0xFA, 0xA9, 0x8A, 0x2B, 0x9E, 0xEA, + 0x35, 0x30, 0xC7, 0x66, 0x62, 0x33, 0x5C, 0xC7, + 0xEA, 0x3A, 0x00, 0x77, 0x77, 0x25, 0xEB, 0xCC, + 0xCD, 0x2A, 0x46, 0x36, 0xB2, 0xD9, 0x12, 0x2F, + 0xF3, 0xAB, 0x77, 0x12, 0x3C, 0xE0, 0x88, 0x3C, + 0x19, 0x11, 0x11, 0x5E, 0x50, 0xC9, 0xE8, 0xA9, + 0x41, 0x94, 0xE4, 0x8D, 0xD0, 0xD0, 0x9C, 0xFF, + 0xB3, 0xAD, 0xCD, 0x2C, 0x1E, 0x92, 0x43, 0x09, + 0x03, 0xD0, 0x7A, 0xDB, 0xF0, 0x05, 0x32, 0x03, + 0x15, 0x75, 0xAA, 0x7F, 0x9E, 0x7B, 0x5A, 0x1F, + 0x33, 0x62, 0xDE, 0xC9, 0x36, 0xD4, 0x04, 0x3C, + 0x05, 0xF2, 0x47, 0x6C, 0x07, 0x57, 0x8B, 0xC9, + 0xCB, 0xAF, 0x2A, 0xB4, 0xE3, 0x82, 0x72, 0x7A, + 0xD4, 0x16, 0x86, 0xA9, 0x6B, 0x25, 0x48, 0x82, + 0x0B, 0xB0, 0x3B, 0x32, 0xF1, 0x1B, 0x28, 0x11, + 0xAD, 0x62, 0xF4, 0x89, 0xE9, 0x51, 0x63, 0x2A, + 0xBA, 0x0D, 0x1D, 0xF8, 0x96, 0x80, 0xCC, 0x8A, + 0x8B, 0x53, 0xB4, 0x81, 0xD9, 0x2A, 0x68, 0xD7, + 0x0B, 0x4E, 0xA1, 0xC3, 0xA6, 0xA5, 0x61, 0xC0, + 0x69, 0x28, 0x82, 0xB5, 0xCA, 0x8C, 0xC9, 0x42, + 0xA8, 0xD4, 0x95, 0xAF, 0xCB, 0x06, 0xDE, 0x89, + 0x49, 0x8F, 0xB9, 0x35, 0xB7, 0x75, 0x90, 0x8F, + 0xE7, 0xA0, 0x3E, 0x32, 0x4D, 0x54, 0xCC, 0x19, + 0xD4, 0xE1, 0xAA, 0xBD, 0x35, 0x93, 0xB3, 0x8B, + 0x19, 0xEE, 0x13, 0x88, 0xFE, 0x49, 0x2B, 0x43, + 0x12, 0x7E, 0x5A, 0x50, 0x42, 0x53, 0x78, 0x6A, + 0x0D, 0x69, 0xAD, 0x32, 0x60, 0x1C, 0x28, 0xE2, + 0xC8, 0x85, 0x04, 0xA5, 0xBA, 0x59, 0x97, 0x06, + 0x02, 0x3A, 0x61, 0x36, 0x3E, 0x17, 0xC6, 0xB9, + 0xBB, 0x59, 0xBD, 0xC6, 0x97, 0x45, 0x2C, 0xD0, + 0x59, 0x45, 0x19, 0x83, 0xD7, 0x38, 0xCA, 0x3F, + 0xD0, 0x34, 0xE3, 0xF5, 0x98, 0x88, 0x54, 0xCA, + 0x05, 0x03, 0x1D, 0xB0, 0x96, 0x11, 0x49, 0x89, + 0x88, 0x19, 0x7C, 0x6B, 0x30, 0xD2, 0x58, 0xDF, + 0xE2, 0x62, 0x65, 0x54, 0x1C, 0x89, 0xA4, 0xB3, + 0x1D, 0x68, 0x64, 0xE9, 0x38, 0x9B, 0x03, 0xCB, + 0x74, 0xF7, 0xEC, 0x43, 0x23, 0xFB, 0x94, 0x21, + 0xA4, 0xB9, 0x79, 0x0A, 0x26, 0xD1, 0x7B, 0x03, + 0x98, 0xA2, 0x67, 0x67, 0x35, 0x09, 0x09, 0xF8, + 0x4D, 0x57, 0xB6, 0x69, 0x4D, 0xF8, 0x30, 0x66, + 0x4C, 0xA8, 0xB3, 0xC3, 0xC0, 0x3E, 0xD2, 0xAE, + 0x67, 0xB8, 0x90, 0x06, 0x86, 0x8A, 0x68, 0x52, + 0x7C, 0xCD, 0x66, 0x64, 0x59, 0xAB, 0x7F, 0x05, + 0x66, 0x71, 0x00, 0x0C, 0x61, 0x64, 0xD3, 0xA7, + 0xF2, 0x66, 0xA1, 0x4D, 0x97, 0xCB, 0xD7, 0x00, + 0x4D, 0x6C, 0x92, 0xCA, 0xCA, 0x77, 0x0B, 0x84, + 0x4A, 0x4F, 0xA9, 0xB1, 0x82, 0xE7, 0xB1, 0x8C, + 0xA8, 0x85, 0x08, 0x2A, 0xC5, 0x64, 0x6F, 0xCB, + 0x4A, 0x14, 0xE1, 0x68, 0x5F, 0xEB, 0x0C, 0x9C, + 0xE3, 0x37, 0x2A, 0xB9, 0x53, 0x65, 0xC0, 0x4F, + 0xD8, 0x30, 0x84, 0xF8, 0x0A, 0x23, 0xFF, 0x10, + 0xA0, 0x5B, 0xF1, 0x5F, 0x7F, 0xA5, 0xAC, 0xC6, + 0xC0, 0xCB, 0x46, 0x2C, 0x33, 0xCA, 0x52, 0x4F, + 0xA6, 0xB8, 0xBB, 0x35, 0x90, 0x43, 0xBA, 0x68, + 0x60, 0x9E, 0xAA, 0x25, 0x36, 0xE8, 0x1D, 0x08, + 0x46, 0x3B, 0x19, 0x65, 0x3B, 0x54, 0x35, 0xBA, + 0x94, 0x6C, 0x9A, 0xDD, 0xEB, 0x20, 0x2B, 0x04, + 0xB0, 0x31, 0xCC, 0x96, 0x0D, 0xCC, 0x12, 0xE4, + 0x51, 0x8D, 0x42, 0x8B, 0x32, 0xB2, 0x57, 0xA4, + 0xFC, 0x73, 0x13, 0xD3, 0xA7, 0x98, 0x0D, 0x80, + 0x08, 0x2E, 0x93, 0x4F, 0x9D, 0x95, 0xC3, 0x2B, + 0x0A, 0x01, 0x91, 0xA2, 0x36, 0x04, 0x38, 0x4D, + 0xD9, 0xE0, 0x79, 0xBB, 0xBA, 0xA2, 0x66, 0xD1, + 0x4C, 0x3F, 0x75, 0x6B, 0x9F, 0x21, 0x33, 0x10, + 0x74, 0x33, 0xA4, 0xE8, 0x3F, 0xA7, 0x18, 0x72, + 0x82, 0xA8, 0x09, 0x20, 0x3A, 0x4F, 0xAF, 0x84, + 0x18, 0x51, 0x83, 0x3D, 0x12, 0x1A, 0xC3, 0x83, + 0x84, 0x3A, 0x5E, 0x55, 0xBC, 0x23, 0x81, 0x42, + 0x5E, 0x16, 0xC7, 0xDB, 0x4C, 0xC9, 0xAB, 0x5C, + 0x1B, 0x0D, 0x91, 0xA4, 0x7E, 0x2B, 0x8D, 0xE0, + 0xE5, 0x82, 0xC8, 0x6B, 0x6B, 0x0D, 0x90, 0x7B, + 0xB3, 0x60, 0xB9, 0x7F, 0x40, 0xAB, 0x5D, 0x03, + 0x8F, 0x6B, 0x75, 0xC8, 0x14, 0xB2, 0x7D, 0x9B, + 0x96, 0x8D, 0x41, 0x98, 0x32, 0xBC, 0x8C, 0x2B, + 0xEE, 0x60, 0x5E, 0xF6, 0xE5, 0x05, 0x9D, 0x33, + 0x10, 0x0D, 0x90, 0x48, 0x5D, 0x37, 0x84, 0x50, + 0x01, 0x42, 0x21, 0x73, 0x6C, 0x07, 0x40, 0x7C, + 0xAC, 0x26, 0x04, 0x08, 0xAA, 0x64, 0x92, 0x66, + 0x19, 0x78, 0x8B, 0x86, 0x01, 0xC2, 0xA7, 0x52, + 0xD1, 0xA6, 0xCB, 0xF8, 0x20, 0xD7, 0xC7, 0xA0, + 0x47, 0x16, 0x20, 0x32, 0x25, 0xB3, 0x89, 0x5B, + 0x93, 0x42, 0xD1, 0x47, 0xA8, 0x18, 0x5C, 0xFC, + 0x1B, 0xB6, 0x5B, 0xA0, 0x6B, 0x41, 0x42, 0x33, + 0x99, 0x03, 0xC0, 0xAC, 0x46, 0x51, 0x38, 0x5B, + 0x45, 0xD9, 0x8A, 0x8B, 0x19, 0xD2, 0x8C, 0xD6, + 0xBA, 0xB0, 0x88, 0x78, 0x7F, 0x7E, 0xE1, 0xB1, + 0x24, 0x61, 0x76, 0x6B, 0x43, 0xCB, 0xCC, 0xB9, + 0x64, 0x34, 0x42, 0x7D, 0x93, 0xC0, 0x65, 0x55, + 0x06, 0x88, 0xF6, 0x94, 0x8E, 0xD1, 0xB5, 0x47, + 0x5A, 0x42, 0x5F, 0x1B, 0x85, 0x20, 0x9D, 0x06, + 0x1C, 0x08, 0xB5, 0x6C, 0x1C, 0xC0, 0x69, 0xF6, + 0xC0, 0xA7, 0xC6, 0xF2, 0x93, 0x58, 0xCA, 0xB9, + 0x11, 0x08, 0x77, 0x32, 0xA6, 0x49, 0xD2, 0x7C, + 0x9B, 0x98, 0xF9, 0xA4, 0x88, 0x79, 0x38, 0x7D, + 0x9B, 0x00, 0xC2, 0x59, 0x59, 0xA7, 0x16, 0x54, + 0xD6, 0xF6, 0xA9, 0x46, 0x16, 0x45, 0x13, 0xE4, + 0x7A, 0x75, 0xD0, 0x05, 0x98, 0x6C, 0x23, 0x63, + 0xC0, 0x9F, 0x6B, 0x53, 0x7E, 0xCA, 0x78, 0xB9, + 0x30, 0x3A, 0x5F, 0xA4, 0x57, 0x60, 0x8A, 0x58, + 0x6A, 0x65, 0x3A, 0x34, 0x7D, 0xB0, 0x4D, 0xFC, + 0xC1, 0x91, 0x75, 0xB3, 0xA3, 0x01, 0x17, 0x25, + 0x36, 0x06, 0x2A, 0x65, 0x8A, 0x95, 0x27, 0x75, + 0x70, 0xC8, 0x85, 0x2C, 0xA8, 0x97, 0x3F, 0x4A, + 0xE1, 0x23, 0xA3, 0x34, 0x04, 0x7D, 0xD7, 0x11, + 0xC8, 0x92, 0x7A, 0x63, 0x4A, 0x03, 0x38, 0x8A, + 0x52, 0x7B, 0x03, 0x4B, 0xF7, 0xA8, 0x17, 0x0F, + 0xA7, 0x02, 0xC1, 0xF7, 0xC2, 0x3E, 0xC3, 0x2D, + 0x18, 0xA2, 0x37, 0x48, 0x90, 0xBE, 0x9C, 0x78, + 0x7A, 0x94, 0x09, 0xC8, 0x2D, 0x19, 0x2C, 0x4B, + 0xB7, 0x05, 0xA2, 0xF9, 0x96, 0xCE, 0x40, 0x5D, + 0xA7, 0x2C, 0x2D, 0x9C, 0x84, 0x3E, 0xE9, 0xF8, + 0x31, 0x3E, 0xCC, 0x7F, 0x86, 0xD6, 0x29, 0x4D, + 0x59, 0x15, 0x9D, 0x9A, 0x87, 0x9A, 0x54, 0x2E, + 0x26, 0x09, 0x22, 0xAD, 0xF9, 0x99, 0x05, 0x1C, + 0xC4, 0x52, 0x00, 0xC9, 0xFF, 0xDB, 0x60, 0x44, + 0x9C, 0x49, 0x46, 0x59, 0x79, 0x27, 0x23, 0x67, + 0xC0, 0x83, 0xA7, 0xD6, 0x26, 0x7A, 0x3E, 0xD7, + 0xA7, 0xFD, 0x47, 0x95, 0x7C, 0x21, 0x93, 0x27, + 0xF7, 0xCA, 0x73, 0xA4, 0x00, 0x7E, 0x16, 0x27, + 0xF0, 0x0B, 0x11, 0xCC, 0x80, 0x57, 0x3C, 0x15, + 0xAE, 0xE6, 0x64, 0x0F, 0xB8, 0x56, 0x2D, 0xFA, + 0x6B, 0x24, 0x0C, 0xA0, 0xAD, 0x35, 0x1A, 0xC4, + 0xAC, 0x15, 0x5B, 0x96, 0xC1, 0x4C, 0x8A, 0xB1, + 0x3D, 0xD2, 0x62, 0xCD, 0xFD, 0x51, 0xC4, 0xBB, + 0x55, 0x72, 0xFD, 0x61, 0x65, 0x53, 0xD1, 0x7B, + 0xDD, 0x43, 0x0A, 0xCB, 0xEA, 0x3E, 0x95, 0xF0, + 0xB6, 0x98, 0xD6, 0x69, 0x90, 0xAB, 0x51, 0xE5, + 0xD0, 0x37, 0x83, 0xA8, 0xB3, 0xD2, 0x78, 0xA5, + 0x72, 0x04, 0x54, 0xCF, 0x96, 0x95, 0xCF, 0xDC, + 0xA0, 0x84, 0x85, 0xBA, 0x09, 0x9C, 0x51, 0xCD, + 0x92, 0xA7, 0xEA, 0x75, 0x87, 0xC1, 0xD1, 0x5C, + 0x28, 0xE6, 0x09, 0xA8, 0x18, 0x52, 0x60, 0x1B, + 0x06, 0x04, 0x01, 0x06, 0x79, 0xAA, 0x48, 0x2D, + 0x51, 0x26, 0x1E, 0xC3, 0x6E, 0x36, 0xB8, 0x71, + 0x96, 0x76, 0x21, 0x7F, 0xD7, 0x4C, 0x54, 0x78, + 0x64, 0x88, 0xF4, 0xB4, 0x96, 0x9C, 0x05, 0xA8, + 0xBA, 0x27, 0xCA, 0x3A, 0x77, 0xCC, 0xE7, 0x3B, + 0x96, 0x59, 0x23, 0xCA, 0x55, 0x4E, 0x42, 0x2B, + 0x9B, 0x61, 0xF4, 0x75, 0x46, 0x41, 0x60, 0x8A, + 0xC1, 0x6C, 0x9B, 0x85, 0x87, 0xA3, 0x2C, 0x1C, + 0x5D, 0xD7, 0x88, 0xF8, 0x8B, 0x36, 0xB7, 0x17, + 0xA4, 0x69, 0x65, 0x63, 0x5D, 0xEB, 0x67, 0xF4, + 0x5B, 0x12, 0x9B, 0x99, 0x07, 0x09, 0x09, 0xC9, + 0x3E, 0xB8, 0x0B, 0x42, 0xC2, 0xB3, 0xF3, 0xF7, + 0x03, 0x43, 0xA7, 0xCF, 0x37, 0xE8, 0x52, 0x0E, + 0x7B, 0xCF, 0xC4, 0x16, 0xAC, 0xA4, 0xF1, 0x8C, + 0x79, 0x81, 0x26, 0x2B, 0xA2, 0xBF, 0xC7, 0x56, + 0xAE, 0x03, 0x27, 0x8F, 0x0E, 0xC6, 0x6D, 0xC2, + 0x05, 0x76, 0x96, 0x82, 0x4B, 0xA6, 0x76, 0x98, + 0x65, 0xA6, 0x01, 0xD7, 0x14, 0x8E, 0xF6, 0xF5, + 0x4E, 0x5A, 0xF5, 0x68, 0x6A, 0xA2, 0x90, 0x6F, + 0x99, 0x4C, 0xE3, 0x8A, 0x5E, 0x0B, 0x93, 0x8F, + 0x23, 0x90, 0x07, 0x00, 0x30, 0x22, 0xC0, 0x33, + 0x92, 0xDF, 0x34, 0x01, 0xB1, 0xE4, 0xA3, 0xA7, + 0xEB, 0xC6, 0x16, 0x14, 0x49, 0xF7, 0x33, 0x74, + 0xC8, 0xB0, 0x14, 0x03, 0x69, 0x34, 0x3D, 0x92, + 0x95, 0xFD, 0xF5, 0x11, 0x84, 0x5C, 0x4A, 0x46, + 0xEB, 0xAA, 0xB6, 0xCA, 0x54, 0x92, 0xF6, 0x80, + 0x0B, 0x98, 0xC0, 0xCC, 0x80, 0x36, 0x53, 0xA4, + 0xB1, 0xD6, 0xE6, 0xAA, 0xED, 0x19, 0x32, 0xBA, + 0xCC, 0x5F, 0xEF, 0xAA, 0x81, 0x8B, 0xA5, 0x02, + 0x85, 0x9B, 0xA5, 0x49, 0x4C, 0x5F, 0x54, 0x02, + 0xC8, 0x53, 0x6A, 0x9C, 0x4C, 0x18, 0x88, 0x15, + 0x06, 0x17, 0xF8, 0x00, 0x98, 0xF6, 0xB2, 0xA9, + 0x9C, 0x39, 0xBC, 0x5D, 0xC7, 0xCF, 0x3B, 0x59, + 0x00, 0xA2, 0x13, 0x29, 0xAB, 0x59, 0x05, 0x3A, + 0xBA, 0xA6, 0x4E, 0xD1, 0x63, 0xE8, 0x59, 0xA8, + 0xB3, 0xB3, 0xCA, 0x33, 0x59, 0xB7, 0x50, 0xCC, + 0xC3, 0xE7, 0x10, 0xC7, 0xAC, 0x43, 0xC8, 0x19, + 0x1C, 0xB5, 0xD6, 0x88, 0x70, 0xC0, 0x63, 0x91, + 0xC0, 0xCB, 0x8A, 0xEC, 0x72, 0xB8, 0x97, 0xAC, + 0x6B, 0xE7, 0xFB, 0xAA, 0xCC, 0x67, 0x6E, 0xD6, + 0x63, 0x14, 0xC8, 0x36, 0x30, 0xE8, 0x94, 0x48, + 0xC8, 0x8A, 0x1D, 0xF0, 0x4A, 0xCE, 0xB2, 0x3A, + 0xBF, 0x2E, 0x40, 0x9E, 0xF3, 0x33, 0xC6, 0x22, + 0x28, 0x9C, 0x18, 0xA2, 0x13, 0x4E, 0x65, 0x0C, + 0x45, 0x25, 0x7E, 0x47, 0x47, 0x5F, 0xA3, 0x3A, + 0xA5, 0x37, 0xA5, 0xA8, 0xF7, 0x68, 0x02, 0x14, + 0x71, 0x6C, 0x50, 0xD4, 0x70, 0xE3, 0x28, 0x49, + 0x63, 0xCA, 0x64, 0xF5, 0x46, 0x77, 0xAE, 0xC5, + 0x4B, 0x52, 0x72, 0x16, 0x2B, 0xF5, 0x2B, 0xC8, + 0x14, 0x2E, 0x1D, 0x41, 0x83, 0xFC, 0x01, 0x74, + 0x54, 0xA6, 0xB5, 0xA4, 0x96, 0x83, 0x17, 0x59, + 0x06, 0x40, 0x24, 0x74, 0x59, 0x78, 0xCB, 0xD5, + 0x1A, 0x6C, 0xED, 0xC8, 0x95, 0x5D, 0xE4, 0xCC, + 0x6D, 0x36, 0x36, 0x70, 0xA4, 0x74, 0x66, 0xE8, + 0x2B, 0xE5, 0xC2, 0x36, 0x03, 0xA1, 0x7B, 0xF2, + 0x2A, 0xCD, 0xB7, 0xCC, 0x98, 0x4A, 0xF0, 0x8C, + 0x87, 0xE1, 0x4E, 0x27, 0x75, 0x3C, 0xF5, 0x87, + 0xA8, 0xEC, 0x34, 0x47, 0xE6, 0x2C, 0x64, 0x9E, + 0x88, 0x7A, 0x67, 0xC3, 0x6C, 0x9C, 0xE9, 0x87, + 0x21, 0xB6, 0x97, 0x21, 0x32, 0x75, 0x64, 0x6B, + 0x19, 0x4F, 0x36, 0x75, 0x86, 0x73, 0xA8, 0xED, + 0x11, 0x28, 0x44, 0x55, 0xAF, 0xC7, 0xA8, 0x52, + 0x9F, 0x69, 0xC9, 0x7A, 0x3C, 0x2D, 0x7B, 0x8C, + 0x63, 0x6C, 0x0B, 0xA5, 0x56, 0x14, 0xB7, 0x68, + 0xE6, 0x24, 0xE7, 0x12, 0x93, 0x0F, 0x77, 0x61, + 0x69, 0xB0, 0x17, 0x15, 0x72, 0x53, 0x51, 0xBC, + 0x74, 0xB4, 0x73, 0x95, 0xED, 0x52, 0xB2, 0x5A, + 0x13, 0x13, 0xC9, 0x51, 0x64, 0x81, 0x4C, 0x34, + 0xC9, 0x79, 0xCB, 0xDF, 0xAB, 0x85, 0x95, 0x46, + 0x62, 0xCA, 0xB4, 0x85, 0xE7, 0x50, 0x87, 0xA9, + 0x8C, 0xC7, 0x4B, 0xB8, 0x2C, 0xA2, 0xD1, 0xB5, + 0xBF, 0x28, 0x03, 0x23, 0x84, 0x80, 0x63, 0x8C, + 0x40, 0xE9, 0x0B, 0x43, 0xC7, 0x46, 0x0E, 0x7A, + 0xA9, 0x17, 0xF0, 0x10, 0x15, 0x1F, 0xAB, 0x11, + 0x69, 0x98, 0x7B, 0x37, 0x2A, 0xBB, 0x59, 0x27, + 0x1F, 0x70, 0x06, 0xC2, 0x4E, 0x60, 0x23, 0x6B, + 0x84, 0xB9, 0xDD, 0xD6, 0x00, 0x62, 0x37, 0x04, + 0x25, 0x46, 0x17, 0xFB, 0x49, 0x8D, 0x89, 0xE5, + 0x8B, 0x03, 0x68, 0xBC, 0xB2, 0x10, 0x3E, 0x79, + 0x35, 0x3E, 0xB5, 0x87, 0x86, 0x0C, 0x14, 0x22, + 0xE4, 0x76, 0x16, 0x2E, 0x42, 0x5B, 0xC2, 0x38, + 0x1D, 0xB8, 0x2C, 0x65, 0x92, 0x73, 0x7E, 0x1D, + 0xD6, 0x02, 0x86, 0x4B, 0x01, 0x67, 0xA7, 0x1E, + 0xC1, 0xF2, 0x23, 0x30, 0x5C, 0x02, 0xFE, 0x25, + 0x05, 0x2A, 0xF2, 0xB3, 0xB5, 0xA5, 0x5A, 0x0D, + 0x7A, 0x20, 0x22, 0xD9, 0xA7, 0x98, 0xDC, 0x0C, + 0x58, 0x74, 0xA9, 0x87, 0x02, 0xAA, 0xF4, 0x05, + 0x4C, 0x5D, 0x80, 0x33, 0x8A, 0x52, 0x48, 0xB5, + 0xB7, 0xBD, 0x09, 0xC5, 0x3B, 0x5E, 0x2A, 0x08, + 0x4B, 0x04, 0x7D, 0x27, 0x7A, 0x86, 0x1B, 0x1A, + 0x73, 0xBB, 0x51, 0x48, 0x8D, 0xE0, 0x4E, 0xF5, + 0x73, 0xC8, 0x52, 0x30, 0xA0, 0x47, 0x0B, 0x73, + 0x17, 0x5C, 0x9F, 0xA5, 0x05, 0x94, 0xF6, 0x6A, + 0x5F, 0x50, 0xB4, 0x15, 0x00, 0x54, 0xC9, 0x3B, + 0x68, 0x18, 0x6F, 0x8B, 0x5C, 0xBC, 0x49, 0x31, + 0x6C, 0x85, 0x48, 0xA6, 0x42, 0xB2, 0xB3, 0x6A, + 0x1D, 0x45, 0x4C, 0x74, 0x89, 0xAC, 0x33, 0xB2, + 0xD2, 0xCE, 0x66, 0x68, 0x09, 0x67, 0x82, 0xA2, + 0xC1, 0xE0, 0x86, 0x6D, 0x21, 0xA6, 0x5E, 0x16, + 0xB5, 0x85, 0xE7, 0xAF, 0x86, 0x18, 0xBD, 0xF3, + 0x18, 0x4C, 0x19, 0x86, 0x87, 0x85, 0x08, 0x91, + 0x72, 0x77, 0xB9, 0x3E, 0x10, 0x70, 0x6B, 0x16, + 0x14, 0x97, 0x2B, 0x2A, 0x94, 0xC7, 0x31, 0x0F, + 0xE9, 0xC7, 0x08, 0xC2, 0x31, 0xA1, 0xA8, 0xAC, + 0x8D, 0x93, 0x14, 0xA5, 0x29, 0xA9, 0x7F, 0x46, + 0x9B, 0xF6, 0x49, 0x62, 0xD8, 0x20, 0x64, 0x84, + 0x43, 0x09, 0x9A, 0x07, 0x6D, 0x55, 0xD4, 0xCE, + 0xA8, 0x24, 0xA5, 0x83, 0x04, 0x84, 0x4F, 0x99, + 0x49, 0x7C, 0x10, 0xA2, 0x51, 0x48, 0x61, 0x8A, + 0x31, 0x5D, 0x72, 0xCA, 0x85, 0x7D, 0x1B, 0x04, + 0xD5, 0x75, 0xB9, 0x4F, 0x85, 0xC0, 0x1D, 0x19, + 0xBE, 0xF2, 0x11, 0xBF, 0x0A, 0xA3, 0x36, 0x2E, + 0x70, 0x41, 0xFD, 0x16, 0x59, 0x6D, 0x80, 0x8E, + 0x86, 0x7B, 0x44, 0xC4, 0xC0, 0x0D, 0x1C, 0xDA, + 0x34, 0x18, 0x96, 0x77, 0x17, 0xF1, 0x47, 0xD0, + 0xEB, 0x21, 0xB4, 0x2A, 0xAE, 0xE7, 0x4A, 0xC3, + 0x5D, 0x0B, 0x92, 0x41, 0x4B, 0x95, 0x85, 0x31, + 0xAA, 0xDF, 0x46, 0x3E, 0xC6, 0x30, 0x5A, 0xE5, + 0xEC, 0xAF, 0x79, 0x17, 0x40, 0x02, 0xF2, 0x6D, + 0xDE, 0xCC, 0x81, 0x3B, 0xF3, 0x26, 0x72, 0xE8, + 0x52, 0x9D, 0x95, 0xA4, 0xE7, 0x30, 0xA7, 0xAB, + 0x4A, 0x3E, 0x8F, 0x8A, 0x8A, 0xF9, 0x79, 0xA6, + 0x65, 0xEA, 0xFD, 0x46, 0x5F, 0xC6, 0x4A, 0x0C, + 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, + 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, + 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22, + 0xD4, 0xEC, 0x14, 0x3B, 0x50, 0xF0, 0x14, 0x23, + 0xB1, 0x77, 0x89, 0x5E, 0xDE, 0xE2, 0x2B, 0xB7, + 0x39, 0xF6, 0x47, 0xEC, 0xF8, 0x5F, 0x50, 0xBC, + 0x25, 0xEF, 0x7B, 0x5A, 0x72, 0x5D, 0xEE, 0x86, + 0x86, 0x26, 0xED, 0x79, 0xD4, 0x51, 0x14, 0x08, + 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, + 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, + 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F + }; + const byte kyber768_ct[] = { + 0xB5, 0x2C, 0x56, 0xB9, 0x2A, 0x4B, 0x7C, 0xE9, + 0xE4, 0xCB, 0x7C, 0x5B, 0x1B, 0x16, 0x31, 0x67, + 0xA8, 0xA1, 0x67, 0x5B, 0x2F, 0xDE, 0xF8, 0x4A, + 0x5B, 0x67, 0xCA, 0x15, 0xDB, 0x69, 0x4C, 0x9F, + 0x11, 0xBD, 0x02, 0x7C, 0x30, 0xAE, 0x22, 0xEC, + 0x92, 0x1A, 0x1D, 0x91, 0x15, 0x99, 0xAF, 0x05, + 0x85, 0xE4, 0x8D, 0x20, 0xDA, 0x70, 0xDF, 0x9F, + 0x39, 0xE3, 0x2E, 0xF9, 0x5D, 0x4C, 0x8F, 0x44, + 0xBF, 0xEF, 0xDA, 0xA5, 0xDA, 0x64, 0xF1, 0x05, + 0x46, 0x31, 0xD0, 0x4D, 0x6D, 0x3C, 0xFD, 0x0A, + 0x54, 0x0D, 0xD7, 0xBA, 0x38, 0x86, 0xE4, 0xB5, + 0xF1, 0x3E, 0x87, 0x87, 0x88, 0x60, 0x4C, 0x95, + 0xC0, 0x96, 0xEA, 0xB3, 0x91, 0x9F, 0x42, 0x75, + 0x21, 0x41, 0x9A, 0x94, 0x6C, 0x26, 0xCC, 0x04, + 0x14, 0x75, 0xD7, 0x12, 0x4C, 0xDC, 0x01, 0xD0, + 0x37, 0x3E, 0x5B, 0x09, 0xC7, 0xA7, 0x06, 0x03, + 0xCF, 0xDB, 0x4F, 0xB3, 0x40, 0x50, 0x23, 0xF2, + 0x26, 0x4D, 0xC3, 0xF9, 0x83, 0xC4, 0xFC, 0x02, + 0xA2, 0xD1, 0xB2, 0x68, 0xF2, 0x20, 0x8A, 0x1F, + 0x6E, 0x2A, 0x62, 0x09, 0xBF, 0xF1, 0x2F, 0x6F, + 0x46, 0x5F, 0x0B, 0x06, 0x9C, 0x3A, 0x7F, 0x84, + 0xF6, 0x06, 0xD8, 0xA9, 0x40, 0x64, 0x00, 0x3D, + 0x6E, 0xC1, 0x14, 0xC8, 0xE8, 0x08, 0xD3, 0x05, + 0x38, 0x84, 0xC1, 0xD5, 0xA1, 0x42, 0xFB, 0xF2, + 0x01, 0x12, 0xEB, 0x36, 0x0F, 0xDA, 0x3F, 0x0F, + 0x28, 0xB1, 0x72, 0xAE, 0x50, 0xF5, 0xE7, 0xD8, + 0x38, 0x01, 0xFB, 0x3F, 0x00, 0x64, 0xB6, 0x87, + 0x18, 0x70, 0x74, 0xBD, 0x7F, 0xE3, 0x0E, 0xDD, + 0xAA, 0x33, 0x4C, 0xF8, 0xFC, 0x04, 0xFA, 0x8C, + 0xED, 0x89, 0x9C, 0xEA, 0xDE, 0x4B, 0x4F, 0x28, + 0xB6, 0x83, 0x72, 0xBA, 0xF9, 0x8F, 0xF4, 0x82, + 0xA4, 0x15, 0xB7, 0x31, 0x15, 0x5B, 0x75, 0xCE, + 0xB9, 0x76, 0xBE, 0x0E, 0xA0, 0x28, 0x5B, 0xA0, + 0x1A, 0x27, 0xF1, 0x85, 0x7A, 0x8F, 0xB3, 0x77, + 0xA3, 0xAE, 0x0C, 0x23, 0xB2, 0xAA, 0x9A, 0x07, + 0x9B, 0xFA, 0xBF, 0xF0, 0xD5, 0xB2, 0xF1, 0xCD, + 0x9B, 0x71, 0x8B, 0xEA, 0x03, 0xC4, 0x2F, 0x34, + 0x3A, 0x39, 0xB4, 0xF1, 0x42, 0xD0, 0x1A, 0xD8, + 0xAC, 0xBB, 0x50, 0xE3, 0x88, 0x53, 0xCF, 0x9A, + 0x50, 0xC8, 0xB4, 0x4C, 0x3C, 0xF6, 0x71, 0xA4, + 0xA9, 0x04, 0x3B, 0x26, 0xDD, 0xBB, 0x24, 0x95, + 0x9A, 0xD6, 0x71, 0x5C, 0x08, 0x52, 0x18, 0x55, + 0xC7, 0x9A, 0x23, 0xB9, 0xC3, 0xD6, 0x47, 0x17, + 0x49, 0xC4, 0x07, 0x25, 0xBD, 0xD5, 0xC2, 0x77, + 0x6D, 0x43, 0xAE, 0xD2, 0x02, 0x04, 0xBA, 0xA1, + 0x41, 0xEF, 0xB3, 0x30, 0x49, 0x17, 0x47, 0x4B, + 0x7F, 0x9F, 0x7A, 0x4B, 0x08, 0xB1, 0xA9, 0x3D, + 0xAE, 0xD9, 0x8C, 0x67, 0x49, 0x53, 0x59, 0xD3, + 0x7D, 0x67, 0xF7, 0x43, 0x8B, 0xEE, 0x5E, 0x43, + 0x58, 0x56, 0x34, 0xB2, 0x6C, 0x6B, 0x38, 0x10, + 0xD7, 0xCD, 0xCB, 0xC0, 0xF6, 0xEB, 0x87, 0x7A, + 0x60, 0x87, 0xE6, 0x8A, 0xCB, 0x84, 0x80, 0xD3, + 0xA8, 0xCF, 0x69, 0x00, 0x44, 0x7E, 0x49, 0xB4, + 0x17, 0xF1, 0x5A, 0x53, 0xB6, 0x07, 0xA0, 0xE2, + 0x16, 0xB8, 0x55, 0x97, 0x0D, 0x37, 0x40, 0x68, + 0x70, 0xB4, 0x56, 0x87, 0x22, 0xDA, 0x77, 0xA4, + 0x08, 0x47, 0x03, 0x81, 0x67, 0x84, 0xE2, 0xF1, + 0x6B, 0xED, 0x18, 0x99, 0x65, 0x32, 0xC5, 0xD8, + 0xB7, 0xF5, 0xD2, 0x14, 0x46, 0x4E, 0x5F, 0x3F, + 0x6E, 0x90, 0x58, 0x67, 0xB0, 0xCE, 0x11, 0x9E, + 0x25, 0x2A, 0x66, 0x71, 0x32, 0x53, 0x54, 0x46, + 0x85, 0xD2, 0x08, 0xE1, 0x72, 0x39, 0x08, 0xA0, + 0xCE, 0x97, 0x83, 0x46, 0x52, 0xE0, 0x8A, 0xE7, + 0xBD, 0xC8, 0x81, 0xA1, 0x31, 0xB7, 0x3C, 0x71, + 0xE8, 0x4D, 0x20, 0xD6, 0x8F, 0xDE, 0xFF, 0x4F, + 0x5D, 0x70, 0xCD, 0x1A, 0xF5, 0x7B, 0x78, 0xE3, + 0x49, 0x1A, 0x98, 0x65, 0x94, 0x23, 0x21, 0x80, + 0x0A, 0x20, 0x3C, 0x05, 0xED, 0x1F, 0xEE, 0xB5, + 0xA2, 0x8E, 0x58, 0x4E, 0x19, 0xF6, 0x53, 0x5E, + 0x7F, 0x84, 0xE4, 0xA2, 0x4F, 0x84, 0xA7, 0x2D, + 0xCA, 0xF5, 0x64, 0x8B, 0x4A, 0x42, 0x35, 0xDD, + 0x66, 0x44, 0x64, 0x48, 0x2F, 0x03, 0x17, 0x6E, + 0x88, 0x8C, 0x28, 0xBF, 0xC6, 0xC1, 0xCB, 0x23, + 0x8C, 0xFF, 0xA3, 0x5A, 0x32, 0x1E, 0x71, 0x79, + 0x1D, 0x9E, 0xA8, 0xED, 0x08, 0x78, 0xC6, 0x11, + 0x21, 0xBF, 0x8D, 0x2A, 0x4A, 0xB2, 0xC1, 0xA5, + 0xE1, 0x20, 0xBC, 0x40, 0xAB, 0xB1, 0x89, 0x2D, + 0x17, 0x15, 0x09, 0x0A, 0x0E, 0xE4, 0x82, 0x52, + 0xCA, 0x29, 0x7A, 0x99, 0xAA, 0x0E, 0x51, 0x0C, + 0xF2, 0x6B, 0x1A, 0xDD, 0x06, 0xCA, 0x54, 0x3E, + 0x1C, 0x5D, 0x6B, 0xDC, 0xD3, 0xB9, 0xC5, 0x85, + 0xC8, 0x53, 0x80, 0x45, 0xDB, 0x5C, 0x25, 0x2E, + 0xC3, 0xC8, 0xC3, 0xC9, 0x54, 0xD9, 0xBE, 0x59, + 0x07, 0x09, 0x4A, 0x89, 0x4E, 0x60, 0xEA, 0xB4, + 0x35, 0x38, 0xCF, 0xEE, 0x82, 0xE8, 0xFF, 0xC0, + 0x79, 0x1B, 0x0D, 0x0F, 0x43, 0xAC, 0x16, 0x27, + 0x83, 0x0A, 0x61, 0xD5, 0x6D, 0xAD, 0x96, 0xC6, + 0x29, 0x58, 0xB0, 0xDE, 0x78, 0x0B, 0x78, 0xBD, + 0x47, 0xA6, 0x04, 0x55, 0x0D, 0xAB, 0x83, 0xFF, + 0xF2, 0x27, 0xC3, 0x24, 0x04, 0x94, 0x71, 0xF3, + 0x52, 0x48, 0xCF, 0xB8, 0x49, 0xB2, 0x57, 0x24, + 0xFF, 0x70, 0x4D, 0x52, 0x77, 0xAA, 0x35, 0x2D, + 0x55, 0x09, 0x58, 0xBE, 0x3B, 0x23, 0x7D, 0xFF, + 0x47, 0x3E, 0xC2, 0xAD, 0xBA, 0xEA, 0x48, 0xCA, + 0x26, 0x58, 0xAE, 0xFC, 0xC7, 0x7B, 0xBD, 0x42, + 0x64, 0xAB, 0x37, 0x4D, 0x70, 0xEA, 0xE5, 0xB9, + 0x64, 0x41, 0x6C, 0xE8, 0x22, 0x6A, 0x7E, 0x32, + 0x55, 0xA0, 0xF8, 0xD7, 0xE2, 0xAD, 0xCA, 0x06, + 0x2B, 0xCD, 0x6D, 0x78, 0xD6, 0x0D, 0x1B, 0x32, + 0xE1, 0x14, 0x05, 0xBE, 0x54, 0xB6, 0x6E, 0xF0, + 0xFD, 0xDD, 0x56, 0x77, 0x02, 0xA3, 0xBC, 0xCF, + 0xED, 0xE3, 0xC5, 0x84, 0x70, 0x12, 0x69, 0xED, + 0x14, 0x80, 0x9F, 0x06, 0xF8, 0x96, 0x83, 0x56, + 0xBB, 0x92, 0x67, 0xFE, 0x86, 0xE5, 0x14, 0x25, + 0x2E, 0x88, 0xBB, 0x5C, 0x30, 0xA7, 0xEC, 0xB3, + 0xD0, 0xE6, 0x21, 0x02, 0x1E, 0xE0, 0xFB, 0xF7, + 0x87, 0x1B, 0x09, 0x34, 0x2B, 0xF8, 0x4F, 0x55, + 0xC9, 0x7E, 0xAF, 0x86, 0xC4, 0x81, 0x89, 0xC7, + 0xFF, 0x4D, 0xF3, 0x89, 0xF0, 0x77, 0xE2, 0x80, + 0x6E, 0x5F, 0xA7, 0x3B, 0x3E, 0x94, 0x58, 0xA1, + 0x6C, 0x7E, 0x27, 0x5F, 0x4F, 0x60, 0x22, 0x75, + 0x58, 0x0E, 0xB7, 0xB7, 0x13, 0x5F, 0xB5, 0x37, + 0xFA, 0x0C, 0xD9, 0x5D, 0x6E, 0xA5, 0x8C, 0x10, + 0x8C, 0xD8, 0x94, 0x3D, 0x70, 0xC1, 0x64, 0x31, + 0x11, 0xF4, 0xF0, 0x1C, 0xA8, 0xA8, 0x27, 0x6A, + 0x90, 0x26, 0x66, 0xED, 0x81, 0xB7, 0x8D, 0x16, + 0x8B, 0x00, 0x6F, 0x16, 0xAA, 0xA3, 0xD8, 0xE4, + 0xCE, 0x4F, 0x4D, 0x0F, 0xB0, 0x99, 0x7E, 0x41, + 0xAE, 0xFF, 0xB5, 0xB3, 0xDA, 0xA8, 0x38, 0x73, + 0x2F, 0x35, 0x73, 0x49, 0x44, 0x7F, 0x38, 0x77, + 0x76, 0xC7, 0x93, 0xC0, 0x47, 0x9D, 0xE9, 0xE9, + 0x94, 0x98, 0xCC, 0x35, 0x6F, 0xDB, 0x00, 0x75, + 0xA7, 0x03, 0xF2, 0x3C, 0x55, 0xD4, 0x7B, 0x55, + 0x0E, 0xC8, 0x9B, 0x02, 0xAD, 0xE8, 0x93, 0x29, + 0x08, 0x6A, 0x50, 0x84, 0x34, 0x56, 0xFE, 0xDC, + 0x37, 0x88, 0xAC, 0x8D, 0x97, 0x23, 0x3C, 0x54, + 0x56, 0x04, 0x67, 0xEE, 0x1D, 0x0F, 0x02, 0x4B, + 0x18, 0x42, 0x8F, 0x0D, 0x73, 0xB3, 0x0E, 0x19, + 0xF5, 0xC6, 0x3B, 0x9A, 0xBF, 0x11, 0x41, 0x5B, + 0xEA, 0x4D, 0x01, 0x70, 0x13, 0x0B, 0xAA, 0xBD, + 0x33, 0xC0, 0x5E, 0x65, 0x24, 0xE5, 0xFB, 0x55, + 0x81, 0xB2, 0x2B, 0x04, 0x33, 0x34, 0x22, 0x48, + 0x26, 0x6D, 0x0F, 0x10, 0x53, 0xB2, 0x45, 0xCC, + 0x24, 0x62, 0xDC, 0x44, 0xD3, 0x49, 0x65, 0x10, + 0x24, 0x82, 0xA8, 0xED, 0x9E, 0x4E, 0x96, 0x4D, + 0x56, 0x83, 0xE5, 0xD4, 0x5D, 0x0C, 0x82, 0x69 + }; + const byte kyber768_ss[] = { + 0x91, 0x4C, 0xB6, 0x7F, 0xE5, 0xC3, 0x8E, 0x73, + 0xBF, 0x74, 0x18, 0x1C, 0x0A, 0xC5, 0x04, 0x28, + 0xDE, 0xDF, 0x77, 0x50, 0xA9, 0x80, 0x58, 0xF7, + 0xD5, 0x36, 0x70, 0x87, 0x74, 0x53, 0x5B, 0x29 + }; +#else + const byte kyber768_pk[] = { + 0x86, 0x1A, 0xCF, 0x24, 0x57, 0x9D, 0x8E, 0xE8, + 0x94, 0x63, 0xB4, 0x78, 0xE2, 0xE9, 0x53, 0xC7, + 0xD5, 0xCD, 0xA4, 0xD3, 0x07, 0xD1, 0x68, 0xCF, + 0xC6, 0x79, 0xB1, 0xA3, 0x79, 0x1F, 0x05, 0x83, + 0x82, 0x86, 0x0B, 0x1C, 0x77, 0x52, 0x87, 0x89, + 0xC6, 0x96, 0x4B, 0xCC, 0x40, 0x8A, 0x21, 0xCA, + 0x4E, 0x42, 0x8F, 0xE7, 0x33, 0x9F, 0x7C, 0x08, + 0x76, 0xA8, 0x58, 0xAB, 0xA9, 0x44, 0xB7, 0x3F, + 0x9C, 0xC9, 0xB8, 0xAC, 0xC4, 0xB7, 0x9A, 0x9F, + 0x72, 0xF7, 0xA0, 0x47, 0x72, 0x57, 0xB9, 0xF3, + 0x26, 0xE4, 0x4C, 0x2C, 0x5F, 0x8B, 0x8A, 0x17, + 0x58, 0x81, 0x42, 0xB0, 0x91, 0xA3, 0x12, 0x31, + 0xD0, 0x98, 0xB0, 0x57, 0x30, 0x45, 0x62, 0x90, + 0x6E, 0x96, 0x05, 0x47, 0x3D, 0x28, 0xB7, 0xB4, + 0x33, 0x2A, 0xB4, 0x49, 0x82, 0x48, 0x7B, 0x04, + 0x9E, 0x41, 0x93, 0x74, 0xA4, 0x8E, 0xAC, 0x6A, + 0xB8, 0xCB, 0x42, 0x6D, 0x13, 0xA4, 0x86, 0x28, + 0x28, 0x43, 0x02, 0xFB, 0x72, 0x71, 0xD1, 0x54, + 0xCA, 0x09, 0x06, 0xD8, 0xE2, 0x0F, 0x1D, 0x97, + 0xBE, 0x9C, 0x82, 0x2E, 0x78, 0x83, 0x79, 0x32, + 0xEB, 0x28, 0xEE, 0xB0, 0x83, 0x71, 0xBB, 0xC6, + 0x3A, 0x7A, 0x96, 0x6C, 0xAC, 0x7A, 0x05, 0xB5, + 0x50, 0x3C, 0x55, 0x1A, 0xEF, 0x80, 0x15, 0x14, + 0xE1, 0x6A, 0xF6, 0x81, 0x02, 0x64, 0x6C, 0x66, + 0x9D, 0xD8, 0xA7, 0xE8, 0xA4, 0x11, 0x39, 0x54, + 0x62, 0xC7, 0xD4, 0x83, 0x8B, 0x91, 0x96, 0x96, + 0x54, 0x16, 0x59, 0x2B, 0xCF, 0xAC, 0x97, 0x87, + 0x0C, 0x23, 0x58, 0xA8, 0x59, 0x5B, 0x2F, 0x43, + 0x55, 0xF0, 0xFA, 0x10, 0x43, 0xA1, 0x1F, 0x62, + 0x86, 0x2F, 0xD5, 0xD9, 0x7A, 0x9D, 0xE2, 0x1B, + 0xD3, 0x39, 0x85, 0x5E, 0x17, 0x8C, 0x97, 0xD3, + 0x77, 0xD1, 0xD1, 0x46, 0xEC, 0x6A, 0x96, 0xE4, + 0xFB, 0xB7, 0x15, 0xC4, 0xC0, 0x22, 0x84, 0x55, + 0xBB, 0x64, 0xA3, 0x88, 0xDC, 0xC4, 0xD3, 0x91, + 0x3A, 0x76, 0x09, 0x57, 0xD1, 0xA6, 0x9F, 0xEA, + 0xAA, 0x08, 0x92, 0x29, 0xB8, 0xCA, 0xD0, 0xBC, + 0xC9, 0x38, 0xC7, 0x80, 0x69, 0x8A, 0x5C, 0xE1, + 0x9B, 0xC5, 0x21, 0x44, 0xDB, 0x46, 0x3B, 0x6D, + 0x55, 0x4F, 0xC4, 0xEC, 0x5E, 0x18, 0x64, 0xC4, + 0xC6, 0x88, 0x75, 0x97, 0x50, 0x0F, 0x40, 0x94, + 0x18, 0xB3, 0xA3, 0x3F, 0x2C, 0x88, 0xB2, 0x6E, + 0xD9, 0x83, 0x1D, 0xB4, 0x65, 0x08, 0xE8, 0x9F, + 0x8C, 0x33, 0x5B, 0xE1, 0x94, 0x56, 0x12, 0x05, + 0x22, 0xA8, 0xB4, 0x43, 0xFE, 0xF2, 0x1A, 0x7B, + 0xC3, 0x05, 0x9A, 0xFB, 0x4A, 0xAA, 0xD5, 0x0E, + 0x6C, 0x72, 0x8B, 0xEA, 0x8A, 0xC5, 0xDC, 0x7C, + 0x6D, 0x06, 0x94, 0x76, 0x03, 0x51, 0x0A, 0x84, + 0x90, 0xAF, 0xCE, 0x30, 0x4D, 0x57, 0xA7, 0x25, + 0xC4, 0x3B, 0x5A, 0xA3, 0x71, 0x3B, 0xA0, 0x44, + 0x98, 0x75, 0xE5, 0x67, 0x55, 0x13, 0x22, 0x60, + 0x54, 0x63, 0x6C, 0xF8, 0x9E, 0x59, 0x5A, 0xC5, + 0xAE, 0xE5, 0x66, 0x78, 0x4B, 0x80, 0xFA, 0x39, + 0x64, 0x0B, 0x74, 0x0F, 0x47, 0x12, 0x22, 0x60, + 0x25, 0x11, 0x00, 0xFA, 0x8E, 0xE0, 0xF1, 0x65, + 0x27, 0x11, 0x40, 0x0C, 0x68, 0x16, 0x38, 0x3C, + 0xC5, 0xE6, 0xDA, 0xB7, 0x9C, 0xDC, 0x3E, 0x41, + 0x98, 0x37, 0x48, 0x15, 0xB2, 0xBB, 0xA2, 0x0E, + 0xFC, 0x14, 0x25, 0xCE, 0xD1, 0x9B, 0x60, 0x19, + 0x77, 0x08, 0x08, 0x00, 0xCF, 0x54, 0x9C, 0xC4, + 0x80, 0x7D, 0xE6, 0xCA, 0x84, 0xE5, 0xD3, 0xC2, + 0xCF, 0x8B, 0x11, 0xEB, 0x68, 0x56, 0xE7, 0x1C, + 0x6B, 0xA5, 0xD2, 0x96, 0x45, 0x46, 0xAA, 0x0C, + 0x82, 0x53, 0x10, 0xF7, 0x79, 0xED, 0x69, 0x53, + 0xD9, 0x22, 0x5E, 0x11, 0xF0, 0x57, 0x93, 0x48, + 0x4C, 0x6B, 0x47, 0xB6, 0xE3, 0xD0, 0x4A, 0x4B, + 0x27, 0xB7, 0x86, 0x71, 0x46, 0xF6, 0xA0, 0x64, + 0xB9, 0x8B, 0x8B, 0xDD, 0x2B, 0x69, 0x94, 0xBA, + 0x20, 0xF8, 0x14, 0x95, 0xB3, 0x74, 0x1C, 0xE1, + 0xD3, 0x07, 0xE5, 0xEC, 0x0A, 0x7C, 0x20, 0x20, + 0x2B, 0x81, 0xA1, 0x04, 0x02, 0x83, 0x4D, 0x23, + 0x83, 0xEC, 0xB2, 0x33, 0x3B, 0x2C, 0x93, 0xD6, + 0xC4, 0x37, 0xC3, 0x17, 0x58, 0xDF, 0x92, 0x21, + 0xA3, 0xFA, 0x60, 0x24, 0x81, 0x29, 0x29, 0x62, + 0x81, 0x17, 0xCB, 0xC4, 0x79, 0x22, 0x76, 0xDA, + 0x84, 0x0F, 0xAB, 0x37, 0x03, 0x54, 0x65, 0x23, + 0x0C, 0x7A, 0x79, 0xEB, 0xB1, 0xA8, 0xC2, 0xB4, + 0x49, 0x0C, 0x2C, 0x1C, 0xB8, 0xE8, 0xB5, 0x73, + 0x5B, 0xC0, 0x72, 0xFC, 0x4D, 0x0F, 0x02, 0xB5, + 0x5B, 0x01, 0x3A, 0x53, 0x86, 0x4B, 0x82, 0x5A, + 0x85, 0xE9, 0x52, 0x03, 0x76, 0xC4, 0x4A, 0x9D, + 0xBA, 0x2C, 0xE9, 0x06, 0x8F, 0x25, 0x7A, 0x11, + 0xCF, 0xB6, 0x46, 0x6A, 0xC5, 0xAB, 0xBC, 0x85, + 0xCE, 0x80, 0x0A, 0x13, 0xB9, 0x64, 0x4D, 0x6E, + 0x04, 0x70, 0x1D, 0x23, 0xA9, 0x9A, 0x7C, 0x1A, + 0x5A, 0xEA, 0xBE, 0x2D, 0xB1, 0x34, 0x16, 0xD0, + 0xC3, 0x5C, 0x6C, 0x04, 0x98, 0x8B, 0x39, 0x91, + 0x6C, 0x46, 0x67, 0x6C, 0x66, 0x51, 0xF3, 0x5E, + 0xC2, 0x28, 0x13, 0xCF, 0xE3, 0x84, 0x40, 0x69, + 0x2F, 0x43, 0x29, 0xC5, 0x85, 0x03, 0x27, 0x30, + 0xC6, 0x94, 0xF2, 0xB2, 0x41, 0x03, 0xFB, 0x78, + 0xE4, 0x3A, 0x49, 0x52, 0x70, 0x03, 0xF4, 0xFA, + 0x5B, 0x73, 0x49, 0x2A, 0x50, 0x71, 0x83, 0x55, + 0x36, 0x26, 0x78, 0x26, 0x97, 0x37, 0x65, 0x7B, + 0x7A, 0x24, 0x03, 0xD4, 0x15, 0x09, 0xD6, 0xEC, + 0x9E, 0x51, 0x65, 0x51, 0x95, 0x56, 0xCB, 0x94, + 0x92, 0xCD, 0x6D, 0x04, 0x6F, 0x2B, 0x4C, 0x91, + 0x4A, 0xF6, 0x3C, 0xBF, 0xCC, 0xA0, 0xB4, 0xCC, + 0x44, 0x6A, 0x54, 0x69, 0x54, 0x59, 0x41, 0x66, + 0x8A, 0xBD, 0x9A, 0x26, 0x7A, 0xF2, 0x41, 0x28, + 0x33, 0xD9, 0x67, 0xB8, 0xAB, 0xB4, 0x34, 0xD7, + 0xA0, 0xAF, 0x5C, 0xAB, 0x11, 0x34, 0xB0, 0x9E, + 0xDB, 0x7A, 0xA1, 0xC1, 0x60, 0x0A, 0xF1, 0x5E, + 0xF6, 0x15, 0x27, 0xC8, 0xC1, 0xA1, 0x59, 0x40, + 0xCA, 0xB1, 0x60, 0x35, 0xF0, 0x5C, 0x71, 0x77, + 0x15, 0x90, 0x9D, 0x73, 0x2D, 0x1E, 0x9B, 0x4C, + 0x59, 0x2B, 0xB3, 0x86, 0xA5, 0xC1, 0xF3, 0xB9, + 0x89, 0x17, 0x58, 0x82, 0x05, 0xD2, 0xA8, 0xB5, + 0x03, 0x8A, 0x52, 0x4B, 0x99, 0x52, 0xD5, 0x9D, + 0x85, 0xDB, 0x27, 0x3C, 0xA1, 0xA7, 0x87, 0xF0, + 0x1F, 0x9B, 0xCB, 0x07, 0xDA, 0xC3, 0x3B, 0xC4, + 0xF0, 0xB4, 0x33, 0x36, 0x38, 0xCD, 0x3A, 0x60, + 0x1D, 0x35, 0x63, 0xF3, 0x53, 0xB5, 0xDF, 0xAA, + 0xA6, 0x2C, 0x68, 0xBF, 0x92, 0xA4, 0x79, 0xD8, + 0xB9, 0x4F, 0x81, 0x54, 0x31, 0x72, 0xB8, 0x36, + 0x26, 0xCC, 0x3B, 0x48, 0x72, 0x76, 0xAA, 0x5C, + 0xCB, 0x4D, 0x10, 0xBB, 0x18, 0xC9, 0x9F, 0x48, + 0x2A, 0x88, 0x26, 0x1C, 0x21, 0xA7, 0x90, 0x0F, + 0x60, 0x73, 0xB7, 0x06, 0xAC, 0xC5, 0xD2, 0xD7, + 0x54, 0x10, 0xB3, 0xA8, 0x84, 0x06, 0x95, 0x87, + 0x2B, 0xAC, 0xC8, 0xAA, 0x36, 0x60, 0xA4, 0x7D, + 0x6B, 0x7A, 0x5A, 0xA7, 0x9A, 0x5D, 0x28, 0xB2, + 0x6B, 0xFF, 0x80, 0x63, 0x14, 0xE6, 0x92, 0x93, + 0x30, 0x4A, 0xD0, 0x13, 0xB4, 0xE6, 0x75, 0xAE, + 0x62, 0x0B, 0x52, 0xEF, 0x30, 0x79, 0x00, 0x33, + 0xCC, 0x42, 0x78, 0xC0, 0x38, 0x50, 0xB4, 0xE6, + 0x0B, 0x39, 0x63, 0x46, 0x11, 0xDC, 0x3A, 0x5F, + 0x4C, 0x79, 0x66, 0xA9, 0xF4, 0x92, 0x0B, 0xF7, + 0x08, 0xBA, 0x8A, 0x01, 0x49, 0x1C, 0x7C, 0xEC, + 0x97, 0x40, 0xFA, 0x97, 0x6E, 0x8E, 0x76, 0x13, + 0x00, 0x60, 0x5F, 0x75, 0x20, 0x88, 0x56, 0x56, + 0x5F, 0x4F, 0x55, 0x60, 0x8F, 0x61, 0x37, 0x92, + 0x99, 0xA6, 0x4C, 0x96, 0x6B, 0xAD, 0x4A, 0x0E, + 0x87, 0x92, 0xAD, 0x3D, 0x46, 0x86, 0x41, 0x28, + 0x37, 0x61, 0xA5, 0x39, 0x99, 0x25, 0x86, 0x63, + 0x30, 0xB5, 0xBA, 0x37, 0x07, 0xE8, 0x54, 0xA6, + 0x3F, 0xE7, 0xAA, 0x7F, 0x81, 0x1A, 0xA4, 0x57, + 0x54, 0x08, 0xC8, 0xC2, 0x06, 0xBB, 0x39, 0x53, + 0xA7, 0x66, 0x29, 0x9A, 0x5C, 0x26, 0xC6, 0x7A, + 0x4E, 0x58, 0x21, 0x05, 0x79, 0xB3, 0x10, 0xF7, + 0x99, 0xB0, 0x97, 0x9B, 0xB9, 0x45, 0x8A, 0xEC, + 0x21, 0x50, 0xAD, 0x27, 0x3F, 0xEB, 0xCB, 0x3E, + 0xF3, 0xB6, 0x0B, 0x38, 0x56, 0xA7, 0x16, 0xB9, + 0x78, 0x3D, 0xF8, 0x08, 0xC6, 0x9C, 0x06, 0x12, + 0xA0, 0x9E, 0xA5, 0x93, 0x16, 0x64, 0x65, 0x87, + 0x69, 0x2D, 0x3C, 0x8E, 0x8C, 0x73, 0x9F, 0xB3, + 0x78, 0x27, 0x74, 0x15, 0x61, 0xD5, 0xE7, 0x66, + 0x67, 0x51, 0x82, 0xFF, 0x83, 0xC9, 0x1C, 0xF0, + 0x33, 0x65, 0x88, 0x23, 0xD8, 0xFA, 0x91, 0xE1 + }; + const byte kyber768_sk[] = { + 0x1B, 0xD1, 0x97, 0x95, 0x10, 0xBC, 0xE5, 0x03, + 0x1C, 0x0F, 0x99, 0x1D, 0xE0, 0x82, 0xC3, 0x89, + 0xA1, 0xBD, 0x15, 0x57, 0x19, 0x1D, 0x81, 0x03, + 0xBD, 0xCC, 0x04, 0xC1, 0x98, 0xAE, 0x3E, 0x95, + 0x95, 0xFD, 0xB6, 0x57, 0xB5, 0xC6, 0x39, 0x97, + 0x95, 0x79, 0xAE, 0x13, 0x5B, 0x11, 0xE2, 0x4D, + 0x36, 0xE5, 0x49, 0x44, 0x67, 0x83, 0x2E, 0x6A, + 0x8A, 0x46, 0xAA, 0x8F, 0x9F, 0xF9, 0x87, 0x4A, + 0x16, 0x00, 0x27, 0x84, 0x07, 0x71, 0x56, 0x2D, + 0x74, 0x61, 0xB1, 0x6C, 0x61, 0x87, 0xF3, 0xC2, + 0xC1, 0x9C, 0x9C, 0x8F, 0xE6, 0x41, 0x49, 0x7D, + 0x8A, 0x15, 0x5C, 0x51, 0x15, 0x7D, 0x91, 0x35, + 0xD9, 0xB4, 0x5D, 0x3C, 0x7C, 0x4C, 0xB1, 0x82, + 0x31, 0x8C, 0x11, 0xAD, 0x08, 0xB3, 0x9F, 0xAC, + 0x04, 0x15, 0xE6, 0xE2, 0x6D, 0xB3, 0x43, 0x91, + 0xDE, 0xC2, 0x47, 0x1B, 0x30, 0x3C, 0x05, 0x05, + 0xB6, 0xFE, 0x45, 0x6E, 0x81, 0x50, 0x21, 0xE8, + 0x2B, 0x5F, 0x2D, 0x16, 0x6F, 0xDF, 0xB5, 0xB9, + 0x23, 0xC8, 0x3A, 0x61, 0x67, 0x30, 0x28, 0xF0, + 0xBA, 0xE0, 0x28, 0x08, 0x9F, 0x47, 0x61, 0x67, + 0xE5, 0x75, 0x6C, 0xAA, 0x3E, 0xE0, 0xF1, 0x89, + 0xC6, 0x47, 0x81, 0xC7, 0x49, 0x27, 0xBC, 0xDB, + 0x67, 0xE7, 0x75, 0xCC, 0xA8, 0x5B, 0x44, 0xB8, + 0x8B, 0x10, 0x61, 0xD8, 0x96, 0x3F, 0xE4, 0x0B, + 0x1F, 0xB4, 0x34, 0x68, 0x20, 0x09, 0x0E, 0x5C, + 0x0B, 0x7C, 0x49, 0x08, 0x89, 0x33, 0xAD, 0xE3, + 0x82, 0x96, 0x88, 0x6C, 0x43, 0x45, 0x65, 0x7C, + 0x3F, 0x07, 0xCF, 0x1A, 0xE9, 0x76, 0xE6, 0xBA, + 0x77, 0x7E, 0xF0, 0x1F, 0xB9, 0xC3, 0xB0, 0xDC, + 0xF0, 0x58, 0x3A, 0xE5, 0x44, 0xCD, 0x80, 0x3A, + 0xC1, 0x39, 0xCA, 0x61, 0x9B, 0x8D, 0xCA, 0x13, + 0x1C, 0xD2, 0x73, 0xCE, 0xCB, 0x65, 0xBC, 0xEF, + 0x00, 0x29, 0x95, 0x12, 0xB0, 0x21, 0xBA, 0x1B, + 0x2F, 0xF2, 0x08, 0xEE, 0xBB, 0x08, 0xA6, 0x28, + 0x7E, 0xC4, 0x4C, 0x21, 0x7D, 0x94, 0x76, 0x40, + 0x42, 0x5C, 0x0E, 0x97, 0x13, 0x44, 0x5B, 0xC5, + 0x2B, 0xC3, 0xCD, 0x66, 0x01, 0x2C, 0x8C, 0xB7, + 0x10, 0xA2, 0xE8, 0xAD, 0x5F, 0xC5, 0x1C, 0x5B, + 0x71, 0xCE, 0x69, 0xE9, 0x6A, 0x22, 0x06, 0x6F, + 0x74, 0x4B, 0xBA, 0xB6, 0x47, 0x2F, 0xEF, 0x3A, + 0x5B, 0xCF, 0xD6, 0x1D, 0xF1, 0xF8, 0x6A, 0x95, + 0x64, 0x80, 0x03, 0x1A, 0x99, 0x0E, 0xE0, 0x7D, + 0xE5, 0x04, 0x5E, 0xBC, 0x49, 0x8F, 0x2D, 0x3A, + 0xBD, 0xE3, 0x28, 0xC4, 0x2A, 0xCB, 0x21, 0xAD, + 0x62, 0x5D, 0x7B, 0xCB, 0x85, 0x5A, 0x8A, 0x0A, + 0xCB, 0xA2, 0x85, 0x16, 0xD3, 0x5A, 0xAF, 0x92, + 0xBE, 0xB3, 0x9C, 0x46, 0xD8, 0xF4, 0xA0, 0x1F, + 0x73, 0x20, 0x40, 0xF2, 0x7C, 0x40, 0x9B, 0xA4, + 0x9A, 0x80, 0xCF, 0x95, 0x55, 0x7C, 0x73, 0x7C, + 0x4A, 0x45, 0x11, 0x2C, 0x52, 0x2C, 0x78, 0x04, + 0xC7, 0x7A, 0x3D, 0x44, 0x53, 0xBA, 0x82, 0xC1, + 0x49, 0x08, 0xBC, 0xC0, 0x47, 0x13, 0x7E, 0x5A, + 0x7B, 0x23, 0x92, 0xC8, 0x31, 0x25, 0x4C, 0x1A, + 0x59, 0x54, 0xC8, 0x8C, 0xCF, 0xA5, 0xD8, 0x8B, + 0x3B, 0x93, 0x31, 0xBE, 0xF4, 0x62, 0x55, 0x09, + 0x14, 0xD1, 0x84, 0x17, 0x59, 0x40, 0xB4, 0xE9, + 0xB7, 0xAD, 0x3D, 0x44, 0x2E, 0xA9, 0x68, 0xB6, + 0xA4, 0x0A, 0x19, 0x72, 0x71, 0x5B, 0xCB, 0x72, + 0x82, 0x14, 0xA1, 0xBE, 0x8E, 0x04, 0x1D, 0xF5, + 0x72, 0xCC, 0x2D, 0x01, 0x6F, 0xFD, 0x6B, 0x0A, + 0xFA, 0xC8, 0x02, 0xBA, 0x97, 0x5A, 0x4A, 0x31, + 0xA4, 0x18, 0x40, 0x2E, 0x6B, 0x01, 0x41, 0xFA, + 0xD6, 0x48, 0x49, 0xE1, 0x6C, 0x80, 0x37, 0x23, + 0xA7, 0x74, 0x2B, 0x08, 0x2A, 0x7A, 0x56, 0x26, + 0x4E, 0x02, 0x60, 0xA2, 0x4A, 0x66, 0x42, 0x3D, + 0x52, 0x64, 0x82, 0x07, 0x04, 0x06, 0x5C, 0xAC, + 0x41, 0x10, 0x72, 0x48, 0x64, 0x37, 0xCA, 0xA5, + 0x47, 0x2D, 0x73, 0x3C, 0x64, 0x14, 0x5F, 0x10, + 0x0B, 0x0B, 0x16, 0xC0, 0xAB, 0x0D, 0xB8, 0x7C, + 0xC5, 0x64, 0x26, 0xC1, 0x1A, 0x69, 0x45, 0x25, + 0x95, 0x8D, 0xB8, 0x31, 0x59, 0x31, 0xC5, 0x09, + 0xD6, 0x3C, 0x48, 0x10, 0xBB, 0xA7, 0x68, 0xCA, + 0xCB, 0xF9, 0xCD, 0x85, 0x7B, 0x0D, 0x66, 0xD6, + 0x5A, 0xF7, 0xEB, 0xAC, 0x18, 0xB7, 0x9C, 0xBE, + 0xBC, 0x0A, 0x49, 0xB5, 0xC0, 0x5A, 0xA8, 0x7F, + 0x8D, 0xE8, 0x25, 0xA6, 0xA1, 0x13, 0x5F, 0xE8, + 0x64, 0xCF, 0x6C, 0x99, 0x8D, 0xDC, 0x37, 0xFC, + 0x01, 0x56, 0xBB, 0x52, 0xA7, 0x8E, 0xC2, 0x99, + 0xCA, 0x53, 0x1C, 0xF8, 0x75, 0xBE, 0xFA, 0x48, + 0x75, 0x72, 0x60, 0x28, 0xED, 0x37, 0x91, 0xBA, + 0x31, 0xC0, 0x0E, 0xC7, 0x40, 0x20, 0xCA, 0xA1, + 0x7F, 0x91, 0x19, 0x63, 0x96, 0xCF, 0xE5, 0x88, + 0x6E, 0x51, 0x1A, 0x52, 0xD0, 0xCA, 0x8D, 0xEE, + 0x25, 0xBF, 0x4E, 0x77, 0xCB, 0x92, 0xE6, 0x36, + 0x40, 0x64, 0x6D, 0xE2, 0x58, 0x6D, 0xCD, 0x00, + 0x14, 0x16, 0xCC, 0xC1, 0xEC, 0x30, 0x7C, 0xA2, + 0x75, 0x6D, 0xBE, 0xA8, 0x26, 0x36, 0x14, 0x51, + 0x3C, 0xA0, 0x5E, 0x70, 0xC7, 0x54, 0xF5, 0x6A, + 0x2C, 0x3F, 0xF7, 0x42, 0x94, 0x8C, 0x34, 0xAF, + 0x49, 0x34, 0x2F, 0x55, 0x03, 0x4C, 0x1C, 0x70, + 0xE0, 0x79, 0x6D, 0x26, 0xB2, 0x30, 0x35, 0x6B, + 0x1B, 0x74, 0xA1, 0x6C, 0x0B, 0x28, 0x37, 0x4B, + 0x79, 0xC1, 0x6B, 0x04, 0x96, 0xCA, 0x20, 0x12, + 0x3E, 0x6C, 0x67, 0x62, 0xD9, 0x01, 0xE2, 0x76, + 0x08, 0x5D, 0x81, 0x2A, 0xE9, 0xC3, 0x45, 0xAD, + 0xF5, 0x09, 0xDD, 0xC7, 0x87, 0x61, 0x62, 0xCE, + 0x34, 0xA6, 0x00, 0x3F, 0xB4, 0x5C, 0xD8, 0x66, + 0x0F, 0xDD, 0x46, 0x71, 0x6E, 0x82, 0x55, 0x06, + 0x62, 0x37, 0x5D, 0xB5, 0x5E, 0x63, 0xA2, 0x0F, + 0x01, 0x2A, 0x71, 0xE3, 0xD9, 0x72, 0x25, 0xC5, + 0x8F, 0x52, 0x34, 0xC6, 0xB5, 0x3A, 0x8A, 0xA0, + 0x33, 0x9C, 0xEF, 0xD4, 0x84, 0xE4, 0x7A, 0x3D, + 0xE6, 0x49, 0x88, 0x05, 0xC2, 0x82, 0xE0, 0x76, + 0x8E, 0x35, 0xC7, 0x5C, 0x20, 0x07, 0x76, 0x5C, + 0xA1, 0x7F, 0x01, 0xD2, 0x85, 0xA7, 0xC3, 0x04, + 0x8B, 0xC7, 0x2B, 0xA3, 0xAA, 0x57, 0x7C, 0x1C, + 0x43, 0x2A, 0x3C, 0x76, 0x9D, 0x21, 0xB8, 0x6C, + 0x01, 0x8F, 0x81, 0x7A, 0x26, 0x67, 0x35, 0x1C, + 0x2B, 0xC8, 0x5F, 0xA5, 0x53, 0x6F, 0xA7, 0xA6, + 0xCD, 0xEF, 0xCC, 0x0D, 0xD6, 0xF9, 0x1B, 0xDD, + 0xE8, 0x9D, 0x4E, 0x51, 0x6C, 0x8B, 0x75, 0x40, + 0xA7, 0xDC, 0x3F, 0xC4, 0x89, 0x8A, 0xB3, 0x30, + 0x08, 0xBC, 0xC1, 0x9F, 0x9E, 0x46, 0x3D, 0xE9, + 0x36, 0x26, 0x99, 0x4C, 0xC9, 0x27, 0xA3, 0x4A, + 0x9D, 0x70, 0x40, 0xC1, 0x31, 0xC8, 0x1F, 0x07, + 0x83, 0xDD, 0x68, 0x84, 0x29, 0x43, 0xC5, 0x5D, + 0xC5, 0x77, 0xD3, 0x67, 0xA4, 0x01, 0x83, 0x94, + 0xBB, 0x11, 0x60, 0x72, 0xAC, 0x65, 0xF2, 0xEB, + 0x9B, 0x4F, 0xF5, 0x8F, 0x41, 0x15, 0x40, 0x1B, + 0x11, 0x7D, 0x91, 0x3B, 0x75, 0x75, 0x57, 0x57, + 0x19, 0x39, 0x0C, 0x9E, 0x80, 0x06, 0x97, 0xA8, + 0x28, 0xB1, 0x25, 0x83, 0xF9, 0x4A, 0x2F, 0x8F, + 0x72, 0x0A, 0x6E, 0x87, 0x00, 0xFD, 0x40, 0x7D, + 0x73, 0xA4, 0xC7, 0x97, 0x55, 0x2B, 0x98, 0x75, + 0x7A, 0x5F, 0x57, 0x82, 0xA9, 0x50, 0x95, 0xDF, + 0xA5, 0xAC, 0xB7, 0xD9, 0x3A, 0x80, 0x5C, 0x30, + 0x18, 0x30, 0x4E, 0x5D, 0x22, 0xB7, 0x6F, 0xA5, + 0xAA, 0x51, 0x96, 0xB7, 0xEB, 0xDB, 0x7A, 0xA0, + 0xA5, 0x2D, 0x06, 0xAC, 0x4B, 0x9E, 0x4C, 0x00, + 0xC0, 0xF8, 0x5C, 0xEC, 0xB0, 0xBD, 0x95, 0x56, + 0x2D, 0x56, 0x23, 0x30, 0x78, 0x51, 0x43, 0xC7, + 0xF1, 0x29, 0xFA, 0xF9, 0x19, 0x48, 0xB0, 0xC8, + 0x8C, 0x60, 0x82, 0xE0, 0xF3, 0x03, 0x54, 0x74, + 0x12, 0x6E, 0x23, 0x6B, 0x80, 0xD2, 0x22, 0xD2, + 0x81, 0x4F, 0x6A, 0xF2, 0x4B, 0xD5, 0xD1, 0x19, + 0x86, 0x33, 0x1F, 0xAF, 0xC2, 0x1E, 0xC8, 0x4C, + 0x93, 0xA8, 0x81, 0x24, 0x72, 0x51, 0x10, 0x5A, + 0x6A, 0xB4, 0x35, 0xD7, 0x6E, 0xFD, 0x88, 0x9D, + 0x27, 0xC0, 0x0C, 0x2A, 0x14, 0xBD, 0x04, 0xA6, + 0xBD, 0x0B, 0x20, 0x07, 0xB5, 0x51, 0x5A, 0x75, + 0xF1, 0x14, 0xD1, 0x92, 0x10, 0xBC, 0x70, 0x50, + 0x85, 0x33, 0x53, 0x2F, 0x1B, 0x0A, 0x30, 0x0C, + 0x8B, 0x12, 0xF0, 0x0A, 0xC4, 0xFC, 0x46, 0x0F, + 0xA8, 0x4A, 0x2D, 0x15, 0x21, 0xBD, 0x0B, 0x42, + 0x86, 0x1A, 0xCF, 0x24, 0x57, 0x9D, 0x8E, 0xE8, + 0x94, 0x63, 0xB4, 0x78, 0xE2, 0xE9, 0x53, 0xC7, + 0xD5, 0xCD, 0xA4, 0xD3, 0x07, 0xD1, 0x68, 0xCF, + 0xC6, 0x79, 0xB1, 0xA3, 0x79, 0x1F, 0x05, 0x83, + 0x82, 0x86, 0x0B, 0x1C, 0x77, 0x52, 0x87, 0x89, + 0xC6, 0x96, 0x4B, 0xCC, 0x40, 0x8A, 0x21, 0xCA, + 0x4E, 0x42, 0x8F, 0xE7, 0x33, 0x9F, 0x7C, 0x08, + 0x76, 0xA8, 0x58, 0xAB, 0xA9, 0x44, 0xB7, 0x3F, + 0x9C, 0xC9, 0xB8, 0xAC, 0xC4, 0xB7, 0x9A, 0x9F, + 0x72, 0xF7, 0xA0, 0x47, 0x72, 0x57, 0xB9, 0xF3, + 0x26, 0xE4, 0x4C, 0x2C, 0x5F, 0x8B, 0x8A, 0x17, + 0x58, 0x81, 0x42, 0xB0, 0x91, 0xA3, 0x12, 0x31, + 0xD0, 0x98, 0xB0, 0x57, 0x30, 0x45, 0x62, 0x90, + 0x6E, 0x96, 0x05, 0x47, 0x3D, 0x28, 0xB7, 0xB4, + 0x33, 0x2A, 0xB4, 0x49, 0x82, 0x48, 0x7B, 0x04, + 0x9E, 0x41, 0x93, 0x74, 0xA4, 0x8E, 0xAC, 0x6A, + 0xB8, 0xCB, 0x42, 0x6D, 0x13, 0xA4, 0x86, 0x28, + 0x28, 0x43, 0x02, 0xFB, 0x72, 0x71, 0xD1, 0x54, + 0xCA, 0x09, 0x06, 0xD8, 0xE2, 0x0F, 0x1D, 0x97, + 0xBE, 0x9C, 0x82, 0x2E, 0x78, 0x83, 0x79, 0x32, + 0xEB, 0x28, 0xEE, 0xB0, 0x83, 0x71, 0xBB, 0xC6, + 0x3A, 0x7A, 0x96, 0x6C, 0xAC, 0x7A, 0x05, 0xB5, + 0x50, 0x3C, 0x55, 0x1A, 0xEF, 0x80, 0x15, 0x14, + 0xE1, 0x6A, 0xF6, 0x81, 0x02, 0x64, 0x6C, 0x66, + 0x9D, 0xD8, 0xA7, 0xE8, 0xA4, 0x11, 0x39, 0x54, + 0x62, 0xC7, 0xD4, 0x83, 0x8B, 0x91, 0x96, 0x96, + 0x54, 0x16, 0x59, 0x2B, 0xCF, 0xAC, 0x97, 0x87, + 0x0C, 0x23, 0x58, 0xA8, 0x59, 0x5B, 0x2F, 0x43, + 0x55, 0xF0, 0xFA, 0x10, 0x43, 0xA1, 0x1F, 0x62, + 0x86, 0x2F, 0xD5, 0xD9, 0x7A, 0x9D, 0xE2, 0x1B, + 0xD3, 0x39, 0x85, 0x5E, 0x17, 0x8C, 0x97, 0xD3, + 0x77, 0xD1, 0xD1, 0x46, 0xEC, 0x6A, 0x96, 0xE4, + 0xFB, 0xB7, 0x15, 0xC4, 0xC0, 0x22, 0x84, 0x55, + 0xBB, 0x64, 0xA3, 0x88, 0xDC, 0xC4, 0xD3, 0x91, + 0x3A, 0x76, 0x09, 0x57, 0xD1, 0xA6, 0x9F, 0xEA, + 0xAA, 0x08, 0x92, 0x29, 0xB8, 0xCA, 0xD0, 0xBC, + 0xC9, 0x38, 0xC7, 0x80, 0x69, 0x8A, 0x5C, 0xE1, + 0x9B, 0xC5, 0x21, 0x44, 0xDB, 0x46, 0x3B, 0x6D, + 0x55, 0x4F, 0xC4, 0xEC, 0x5E, 0x18, 0x64, 0xC4, + 0xC6, 0x88, 0x75, 0x97, 0x50, 0x0F, 0x40, 0x94, + 0x18, 0xB3, 0xA3, 0x3F, 0x2C, 0x88, 0xB2, 0x6E, + 0xD9, 0x83, 0x1D, 0xB4, 0x65, 0x08, 0xE8, 0x9F, + 0x8C, 0x33, 0x5B, 0xE1, 0x94, 0x56, 0x12, 0x05, + 0x22, 0xA8, 0xB4, 0x43, 0xFE, 0xF2, 0x1A, 0x7B, + 0xC3, 0x05, 0x9A, 0xFB, 0x4A, 0xAA, 0xD5, 0x0E, + 0x6C, 0x72, 0x8B, 0xEA, 0x8A, 0xC5, 0xDC, 0x7C, + 0x6D, 0x06, 0x94, 0x76, 0x03, 0x51, 0x0A, 0x84, + 0x90, 0xAF, 0xCE, 0x30, 0x4D, 0x57, 0xA7, 0x25, + 0xC4, 0x3B, 0x5A, 0xA3, 0x71, 0x3B, 0xA0, 0x44, + 0x98, 0x75, 0xE5, 0x67, 0x55, 0x13, 0x22, 0x60, + 0x54, 0x63, 0x6C, 0xF8, 0x9E, 0x59, 0x5A, 0xC5, + 0xAE, 0xE5, 0x66, 0x78, 0x4B, 0x80, 0xFA, 0x39, + 0x64, 0x0B, 0x74, 0x0F, 0x47, 0x12, 0x22, 0x60, + 0x25, 0x11, 0x00, 0xFA, 0x8E, 0xE0, 0xF1, 0x65, + 0x27, 0x11, 0x40, 0x0C, 0x68, 0x16, 0x38, 0x3C, + 0xC5, 0xE6, 0xDA, 0xB7, 0x9C, 0xDC, 0x3E, 0x41, + 0x98, 0x37, 0x48, 0x15, 0xB2, 0xBB, 0xA2, 0x0E, + 0xFC, 0x14, 0x25, 0xCE, 0xD1, 0x9B, 0x60, 0x19, + 0x77, 0x08, 0x08, 0x00, 0xCF, 0x54, 0x9C, 0xC4, + 0x80, 0x7D, 0xE6, 0xCA, 0x84, 0xE5, 0xD3, 0xC2, + 0xCF, 0x8B, 0x11, 0xEB, 0x68, 0x56, 0xE7, 0x1C, + 0x6B, 0xA5, 0xD2, 0x96, 0x45, 0x46, 0xAA, 0x0C, + 0x82, 0x53, 0x10, 0xF7, 0x79, 0xED, 0x69, 0x53, + 0xD9, 0x22, 0x5E, 0x11, 0xF0, 0x57, 0x93, 0x48, + 0x4C, 0x6B, 0x47, 0xB6, 0xE3, 0xD0, 0x4A, 0x4B, + 0x27, 0xB7, 0x86, 0x71, 0x46, 0xF6, 0xA0, 0x64, + 0xB9, 0x8B, 0x8B, 0xDD, 0x2B, 0x69, 0x94, 0xBA, + 0x20, 0xF8, 0x14, 0x95, 0xB3, 0x74, 0x1C, 0xE1, + 0xD3, 0x07, 0xE5, 0xEC, 0x0A, 0x7C, 0x20, 0x20, + 0x2B, 0x81, 0xA1, 0x04, 0x02, 0x83, 0x4D, 0x23, + 0x83, 0xEC, 0xB2, 0x33, 0x3B, 0x2C, 0x93, 0xD6, + 0xC4, 0x37, 0xC3, 0x17, 0x58, 0xDF, 0x92, 0x21, + 0xA3, 0xFA, 0x60, 0x24, 0x81, 0x29, 0x29, 0x62, + 0x81, 0x17, 0xCB, 0xC4, 0x79, 0x22, 0x76, 0xDA, + 0x84, 0x0F, 0xAB, 0x37, 0x03, 0x54, 0x65, 0x23, + 0x0C, 0x7A, 0x79, 0xEB, 0xB1, 0xA8, 0xC2, 0xB4, + 0x49, 0x0C, 0x2C, 0x1C, 0xB8, 0xE8, 0xB5, 0x73, + 0x5B, 0xC0, 0x72, 0xFC, 0x4D, 0x0F, 0x02, 0xB5, + 0x5B, 0x01, 0x3A, 0x53, 0x86, 0x4B, 0x82, 0x5A, + 0x85, 0xE9, 0x52, 0x03, 0x76, 0xC4, 0x4A, 0x9D, + 0xBA, 0x2C, 0xE9, 0x06, 0x8F, 0x25, 0x7A, 0x11, + 0xCF, 0xB6, 0x46, 0x6A, 0xC5, 0xAB, 0xBC, 0x85, + 0xCE, 0x80, 0x0A, 0x13, 0xB9, 0x64, 0x4D, 0x6E, + 0x04, 0x70, 0x1D, 0x23, 0xA9, 0x9A, 0x7C, 0x1A, + 0x5A, 0xEA, 0xBE, 0x2D, 0xB1, 0x34, 0x16, 0xD0, + 0xC3, 0x5C, 0x6C, 0x04, 0x98, 0x8B, 0x39, 0x91, + 0x6C, 0x46, 0x67, 0x6C, 0x66, 0x51, 0xF3, 0x5E, + 0xC2, 0x28, 0x13, 0xCF, 0xE3, 0x84, 0x40, 0x69, + 0x2F, 0x43, 0x29, 0xC5, 0x85, 0x03, 0x27, 0x30, + 0xC6, 0x94, 0xF2, 0xB2, 0x41, 0x03, 0xFB, 0x78, + 0xE4, 0x3A, 0x49, 0x52, 0x70, 0x03, 0xF4, 0xFA, + 0x5B, 0x73, 0x49, 0x2A, 0x50, 0x71, 0x83, 0x55, + 0x36, 0x26, 0x78, 0x26, 0x97, 0x37, 0x65, 0x7B, + 0x7A, 0x24, 0x03, 0xD4, 0x15, 0x09, 0xD6, 0xEC, + 0x9E, 0x51, 0x65, 0x51, 0x95, 0x56, 0xCB, 0x94, + 0x92, 0xCD, 0x6D, 0x04, 0x6F, 0x2B, 0x4C, 0x91, + 0x4A, 0xF6, 0x3C, 0xBF, 0xCC, 0xA0, 0xB4, 0xCC, + 0x44, 0x6A, 0x54, 0x69, 0x54, 0x59, 0x41, 0x66, + 0x8A, 0xBD, 0x9A, 0x26, 0x7A, 0xF2, 0x41, 0x28, + 0x33, 0xD9, 0x67, 0xB8, 0xAB, 0xB4, 0x34, 0xD7, + 0xA0, 0xAF, 0x5C, 0xAB, 0x11, 0x34, 0xB0, 0x9E, + 0xDB, 0x7A, 0xA1, 0xC1, 0x60, 0x0A, 0xF1, 0x5E, + 0xF6, 0x15, 0x27, 0xC8, 0xC1, 0xA1, 0x59, 0x40, + 0xCA, 0xB1, 0x60, 0x35, 0xF0, 0x5C, 0x71, 0x77, + 0x15, 0x90, 0x9D, 0x73, 0x2D, 0x1E, 0x9B, 0x4C, + 0x59, 0x2B, 0xB3, 0x86, 0xA5, 0xC1, 0xF3, 0xB9, + 0x89, 0x17, 0x58, 0x82, 0x05, 0xD2, 0xA8, 0xB5, + 0x03, 0x8A, 0x52, 0x4B, 0x99, 0x52, 0xD5, 0x9D, + 0x85, 0xDB, 0x27, 0x3C, 0xA1, 0xA7, 0x87, 0xF0, + 0x1F, 0x9B, 0xCB, 0x07, 0xDA, 0xC3, 0x3B, 0xC4, + 0xF0, 0xB4, 0x33, 0x36, 0x38, 0xCD, 0x3A, 0x60, + 0x1D, 0x35, 0x63, 0xF3, 0x53, 0xB5, 0xDF, 0xAA, + 0xA6, 0x2C, 0x68, 0xBF, 0x92, 0xA4, 0x79, 0xD8, + 0xB9, 0x4F, 0x81, 0x54, 0x31, 0x72, 0xB8, 0x36, + 0x26, 0xCC, 0x3B, 0x48, 0x72, 0x76, 0xAA, 0x5C, + 0xCB, 0x4D, 0x10, 0xBB, 0x18, 0xC9, 0x9F, 0x48, + 0x2A, 0x88, 0x26, 0x1C, 0x21, 0xA7, 0x90, 0x0F, + 0x60, 0x73, 0xB7, 0x06, 0xAC, 0xC5, 0xD2, 0xD7, + 0x54, 0x10, 0xB3, 0xA8, 0x84, 0x06, 0x95, 0x87, + 0x2B, 0xAC, 0xC8, 0xAA, 0x36, 0x60, 0xA4, 0x7D, + 0x6B, 0x7A, 0x5A, 0xA7, 0x9A, 0x5D, 0x28, 0xB2, + 0x6B, 0xFF, 0x80, 0x63, 0x14, 0xE6, 0x92, 0x93, + 0x30, 0x4A, 0xD0, 0x13, 0xB4, 0xE6, 0x75, 0xAE, + 0x62, 0x0B, 0x52, 0xEF, 0x30, 0x79, 0x00, 0x33, + 0xCC, 0x42, 0x78, 0xC0, 0x38, 0x50, 0xB4, 0xE6, + 0x0B, 0x39, 0x63, 0x46, 0x11, 0xDC, 0x3A, 0x5F, + 0x4C, 0x79, 0x66, 0xA9, 0xF4, 0x92, 0x0B, 0xF7, + 0x08, 0xBA, 0x8A, 0x01, 0x49, 0x1C, 0x7C, 0xEC, + 0x97, 0x40, 0xFA, 0x97, 0x6E, 0x8E, 0x76, 0x13, + 0x00, 0x60, 0x5F, 0x75, 0x20, 0x88, 0x56, 0x56, + 0x5F, 0x4F, 0x55, 0x60, 0x8F, 0x61, 0x37, 0x92, + 0x99, 0xA6, 0x4C, 0x96, 0x6B, 0xAD, 0x4A, 0x0E, + 0x87, 0x92, 0xAD, 0x3D, 0x46, 0x86, 0x41, 0x28, + 0x37, 0x61, 0xA5, 0x39, 0x99, 0x25, 0x86, 0x63, + 0x30, 0xB5, 0xBA, 0x37, 0x07, 0xE8, 0x54, 0xA6, + 0x3F, 0xE7, 0xAA, 0x7F, 0x81, 0x1A, 0xA4, 0x57, + 0x54, 0x08, 0xC8, 0xC2, 0x06, 0xBB, 0x39, 0x53, + 0xA7, 0x66, 0x29, 0x9A, 0x5C, 0x26, 0xC6, 0x7A, + 0x4E, 0x58, 0x21, 0x05, 0x79, 0xB3, 0x10, 0xF7, + 0x99, 0xB0, 0x97, 0x9B, 0xB9, 0x45, 0x8A, 0xEC, + 0x21, 0x50, 0xAD, 0x27, 0x3F, 0xEB, 0xCB, 0x3E, + 0xF3, 0xB6, 0x0B, 0x38, 0x56, 0xA7, 0x16, 0xB9, + 0x78, 0x3D, 0xF8, 0x08, 0xC6, 0x9C, 0x06, 0x12, + 0xA0, 0x9E, 0xA5, 0x93, 0x16, 0x64, 0x65, 0x87, + 0x69, 0x2D, 0x3C, 0x8E, 0x8C, 0x73, 0x9F, 0xB3, + 0x78, 0x27, 0x74, 0x15, 0x61, 0xD5, 0xE7, 0x66, + 0x67, 0x51, 0x82, 0xFF, 0x83, 0xC9, 0x1C, 0xF0, + 0x33, 0x65, 0x88, 0x23, 0xD8, 0xFA, 0x91, 0xE1, + 0x05, 0xFC, 0x14, 0xDA, 0x24, 0xF1, 0xC4, 0x1E, + 0xB3, 0xCC, 0xE3, 0xC7, 0x47, 0xEE, 0x30, 0x0C, + 0x31, 0x1F, 0x27, 0x85, 0x47, 0x7A, 0x01, 0x33, + 0xF7, 0x13, 0xB0, 0x28, 0x04, 0x67, 0x4E, 0x7A, + 0x86, 0x26, 0xED, 0x79, 0xD4, 0x51, 0x14, 0x08, + 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, + 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, + 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F + }; + const byte kyber768_ct[] = { + 0xB9, 0x54, 0x84, 0x84, 0xA4, 0x87, 0x3B, 0x1F, + 0x2C, 0xFF, 0x66, 0xA3, 0x23, 0x09, 0x34, 0x60, + 0x05, 0xEB, 0x7C, 0x04, 0x44, 0x9E, 0xAD, 0xC4, + 0x66, 0xBC, 0x47, 0x0E, 0x71, 0xED, 0x6C, 0x77, + 0x1C, 0x2C, 0xF3, 0x92, 0x5E, 0xEB, 0x78, 0x91, + 0x56, 0xAC, 0xF5, 0x8D, 0x13, 0x21, 0xA5, 0x23, + 0xE4, 0xDD, 0xB1, 0x58, 0x4C, 0x6E, 0x3F, 0x4A, + 0x3E, 0xE5, 0xCC, 0x9C, 0x00, 0x7A, 0x00, 0xFF, + 0xA2, 0xBF, 0xF2, 0xD3, 0x92, 0xD2, 0x9D, 0xCB, + 0xEF, 0x44, 0x6D, 0x16, 0x51, 0xC9, 0xB3, 0x63, + 0x8B, 0x0F, 0xB7, 0xEB, 0xEC, 0xE5, 0xB0, 0x59, + 0xC9, 0x76, 0x21, 0xFF, 0x7A, 0x1E, 0x1C, 0xE7, + 0x7A, 0xD5, 0x46, 0x1C, 0x51, 0xE1, 0x3A, 0xF7, + 0x07, 0x89, 0xE4, 0x88, 0x58, 0x98, 0xEA, 0x20, + 0xFA, 0x17, 0x85, 0xA0, 0x3E, 0x3E, 0xF8, 0xA2, + 0x98, 0x33, 0xDA, 0x8D, 0x4D, 0x28, 0x32, 0x53, + 0x74, 0xE4, 0xF4, 0x67, 0x1B, 0xDA, 0x5B, 0x8F, + 0xAE, 0x9C, 0x9F, 0x68, 0x88, 0xAD, 0x5B, 0xCD, + 0x0B, 0x91, 0x16, 0x47, 0x35, 0x73, 0xFB, 0x78, + 0xDD, 0xA7, 0x9A, 0x27, 0x8D, 0x0D, 0x6A, 0xFF, + 0x71, 0xD0, 0x37, 0x7F, 0xB5, 0x0C, 0x47, 0xEC, + 0xBD, 0xB4, 0xB1, 0x42, 0x7D, 0xF8, 0xD4, 0x55, + 0xCC, 0x34, 0x29, 0xCC, 0x84, 0xA1, 0x4A, 0x99, + 0xFB, 0xE4, 0xAD, 0x1E, 0xB3, 0xE8, 0x07, 0x48, + 0x3E, 0x62, 0x26, 0xC7, 0x59, 0xAA, 0x0A, 0x6C, + 0x96, 0x04, 0x41, 0x19, 0x76, 0x8A, 0xB5, 0xA9, + 0x9B, 0x6F, 0xCD, 0x5B, 0x00, 0x7A, 0x18, 0x82, + 0xF4, 0xEC, 0xD3, 0x71, 0x39, 0x64, 0x33, 0x32, + 0x74, 0x4D, 0x08, 0x77, 0xB4, 0x47, 0x01, 0xB0, + 0xE3, 0xB5, 0xD1, 0x22, 0x8A, 0xB1, 0xE3, 0xA7, + 0xF9, 0x94, 0xA2, 0xC0, 0xC3, 0xC1, 0x6C, 0x1E, + 0x6E, 0x02, 0xDF, 0xBF, 0x44, 0x44, 0x4F, 0x6A, + 0x9D, 0x58, 0x25, 0x49, 0x2A, 0x10, 0x88, 0xD1, + 0x91, 0xB4, 0x62, 0x22, 0x76, 0x14, 0x30, 0xDD, + 0x50, 0xEB, 0xF1, 0x1C, 0xAB, 0xE9, 0x95, 0x5C, + 0x5A, 0x10, 0x79, 0xC4, 0xB7, 0xF2, 0xF4, 0x8F, + 0xB6, 0xF3, 0x89, 0x3A, 0xBE, 0x38, 0xDD, 0xB0, + 0x4A, 0xB1, 0x8C, 0xAE, 0x8D, 0x50, 0x70, 0xBD, + 0x9E, 0x05, 0x71, 0x0A, 0x7B, 0x4C, 0xBE, 0xE2, + 0xAE, 0x3F, 0xEC, 0xCF, 0xFA, 0x26, 0x65, 0xBE, + 0xC9, 0xD0, 0xBC, 0x6B, 0x57, 0x34, 0xF2, 0x4C, + 0x29, 0xB5, 0x9E, 0xF8, 0x21, 0x99, 0x77, 0x58, + 0x73, 0x2B, 0x04, 0x72, 0xFE, 0x63, 0x81, 0x63, + 0xC0, 0xF8, 0x67, 0x64, 0x48, 0x12, 0xBB, 0x95, + 0x83, 0xEE, 0xB7, 0xED, 0x64, 0x73, 0xEE, 0x97, + 0x23, 0x35, 0xA5, 0x06, 0xCE, 0x64, 0x94, 0x90, + 0x49, 0x26, 0x3E, 0x32, 0x77, 0x92, 0x88, 0xF8, + 0xD0, 0x16, 0x5E, 0xE5, 0x22, 0x79, 0xF7, 0x98, + 0xE0, 0x2F, 0x8B, 0xDE, 0xA2, 0x5F, 0x67, 0x8E, + 0x2A, 0xB9, 0xE8, 0x8A, 0x77, 0xD2, 0x89, 0x2B, + 0x79, 0x69, 0x22, 0x1B, 0x9D, 0x81, 0xFD, 0xA7, + 0x6B, 0x91, 0xD1, 0x8F, 0xE6, 0xBF, 0x14, 0xA1, + 0xC2, 0x3A, 0xAF, 0x42, 0xCB, 0x95, 0x53, 0x44, + 0x82, 0xAC, 0x2C, 0x56, 0x9C, 0x01, 0xE0, 0xC2, + 0x0E, 0x65, 0x8A, 0x1E, 0x17, 0xC1, 0xD8, 0xB3, + 0x8F, 0xF6, 0x44, 0xD5, 0x3F, 0x41, 0x10, 0x65, + 0x55, 0x14, 0x09, 0xB7, 0x4A, 0x7A, 0x26, 0x04, + 0x42, 0xE1, 0x96, 0xE1, 0x2B, 0x48, 0x33, 0x96, + 0x86, 0x3E, 0x6D, 0x67, 0xDC, 0x4E, 0x54, 0x07, + 0x4C, 0x73, 0x97, 0x9E, 0x69, 0x83, 0x07, 0xCF, + 0xA6, 0x37, 0xA3, 0xFD, 0xBB, 0xD0, 0xAA, 0xA0, + 0xA7, 0x97, 0x0B, 0x38, 0xEE, 0x38, 0xB1, 0x85, + 0xA6, 0x68, 0x71, 0x29, 0xE6, 0xA2, 0xFF, 0x62, + 0x4F, 0x65, 0x6C, 0x53, 0x80, 0x5B, 0x72, 0xF4, + 0xD2, 0x41, 0x50, 0x59, 0x01, 0x22, 0xC8, 0x25, + 0x96, 0x5C, 0xE1, 0x24, 0x7D, 0x3B, 0x4A, 0x10, + 0xEE, 0x82, 0x47, 0xDF, 0xB5, 0x60, 0x25, 0x4F, + 0x79, 0x91, 0x09, 0x82, 0xED, 0x30, 0xE7, 0xF3, + 0xE6, 0x7A, 0x9F, 0xD1, 0xF0, 0xA7, 0x15, 0x60, + 0xB9, 0xDF, 0xAB, 0x4A, 0xCC, 0x0A, 0x78, 0xC9, + 0x9A, 0x7F, 0x15, 0x26, 0x81, 0x2C, 0x16, 0xA7, + 0xDC, 0x4A, 0xA8, 0xBB, 0x9F, 0xA6, 0xCA, 0xA6, + 0x80, 0xE3, 0x60, 0x2D, 0x13, 0x3C, 0xCA, 0xE9, + 0xD1, 0xAD, 0x39, 0xFD, 0xA6, 0xA3, 0xDA, 0x7F, + 0xF1, 0x0A, 0x25, 0xBD, 0x8F, 0x05, 0xBC, 0x17, + 0x98, 0xCD, 0x01, 0x2F, 0x63, 0x16, 0xCB, 0xF1, + 0xC9, 0x9F, 0x75, 0x98, 0x62, 0x43, 0x3B, 0xB7, + 0x55, 0xCC, 0x5C, 0x40, 0xF3, 0x87, 0x55, 0xEA, + 0x03, 0xA5, 0x00, 0xB4, 0x7F, 0xDD, 0x2D, 0xBD, + 0xFE, 0x05, 0x60, 0x69, 0x42, 0xB5, 0x99, 0x1E, + 0x0E, 0xA8, 0xEC, 0x04, 0x7E, 0x6F, 0x77, 0xD4, + 0x92, 0x8F, 0xC7, 0xE0, 0xB5, 0x06, 0x05, 0x76, + 0xFA, 0x45, 0x25, 0xB1, 0xD1, 0xF4, 0x01, 0x3A, + 0x49, 0xA9, 0x93, 0x77, 0x4B, 0xEE, 0xA2, 0xE8, + 0xAA, 0x39, 0xBD, 0xD9, 0x90, 0xEB, 0x0F, 0xB5, + 0xFA, 0xB6, 0xC4, 0x10, 0x79, 0xF5, 0x6A, 0x32, + 0xFD, 0x9C, 0x38, 0xAC, 0xEC, 0x84, 0xF1, 0x62, + 0xC6, 0x71, 0xE9, 0xDC, 0x55, 0xD8, 0x40, 0x1D, + 0x29, 0x8A, 0x97, 0x02, 0x08, 0x44, 0x23, 0x27, + 0x51, 0x13, 0xC3, 0x46, 0x62, 0x4A, 0x8F, 0x0E, + 0x79, 0xFC, 0xC3, 0x59, 0x33, 0xC7, 0x75, 0x7F, + 0x24, 0xE0, 0x7A, 0x25, 0x7A, 0xBF, 0xEA, 0x28, + 0xDA, 0x2B, 0xDE, 0x70, 0x73, 0xAE, 0xC1, 0x33, + 0xE6, 0x55, 0xC5, 0xA4, 0xB8, 0x94, 0xC5, 0x95, + 0x10, 0x2E, 0x7D, 0x13, 0x80, 0x96, 0xCD, 0x6F, + 0x97, 0xF5, 0x62, 0x27, 0x62, 0x4D, 0xCC, 0xAB, + 0xFB, 0x9D, 0xCF, 0xE9, 0x0E, 0x26, 0x5A, 0x04, + 0x9B, 0x90, 0xA3, 0x2E, 0x54, 0xD4, 0x81, 0xE2, + 0xF3, 0x7B, 0x00, 0x2C, 0xFE, 0x9C, 0xC9, 0xCD, + 0x24, 0x3F, 0x83, 0xE3, 0x62, 0x09, 0x4C, 0xFB, + 0xF7, 0x0E, 0x1A, 0x94, 0x79, 0xC5, 0x7E, 0x30, + 0xB4, 0xB9, 0xEB, 0x38, 0x31, 0x6F, 0xA9, 0xE9, + 0xBE, 0xE1, 0x90, 0xC6, 0xE8, 0xA8, 0xD4, 0x5C, + 0xA3, 0x40, 0x76, 0xF4, 0x84, 0x0D, 0xBC, 0x9F, + 0x42, 0x5C, 0xD5, 0x70, 0x98, 0x8E, 0x58, 0x86, + 0xC2, 0x7B, 0x64, 0xC2, 0x28, 0x15, 0x8D, 0xA7, + 0xE2, 0x82, 0xF6, 0xC0, 0x09, 0xC1, 0x61, 0xBA, + 0xC8, 0xE4, 0xDE, 0x67, 0xCD, 0x46, 0xAB, 0x9D, + 0x5A, 0xDC, 0xF7, 0xF5, 0xF6, 0xA0, 0x6D, 0x36, + 0xB5, 0xEC, 0xA3, 0x41, 0x7C, 0x40, 0xDA, 0xAC, + 0x80, 0x55, 0xFF, 0x3D, 0x77, 0x3D, 0x14, 0x1F, + 0x50, 0x40, 0x58, 0x74, 0x48, 0xF0, 0xA9, 0x10, + 0x7C, 0x44, 0xED, 0x67, 0x1A, 0x34, 0xF2, 0x5C, + 0x4F, 0x86, 0x6F, 0xCA, 0xA6, 0xC1, 0x42, 0x4F, + 0xE9, 0x59, 0x59, 0x9E, 0xFE, 0x31, 0x63, 0x56, + 0xF9, 0x05, 0xDD, 0xD6, 0x8B, 0x27, 0xA4, 0xA0, + 0xBB, 0x17, 0x28, 0x52, 0x0D, 0x5D, 0x36, 0x77, + 0x7E, 0x22, 0xF1, 0xFE, 0xDE, 0x19, 0x3B, 0x07, + 0xB3, 0xA2, 0xD2, 0x09, 0x9C, 0x41, 0x93, 0x1E, + 0xB4, 0xE0, 0xB0, 0xFA, 0x3F, 0xA7, 0xC6, 0x66, + 0xD8, 0xA7, 0xFD, 0x90, 0xCD, 0x49, 0xA2, 0xEE, + 0x25, 0x66, 0xCE, 0x31, 0x9E, 0x03, 0x35, 0x23, + 0x32, 0x2E, 0xDA, 0x7C, 0xD3, 0x14, 0x98, 0x88, + 0xBA, 0x9B, 0xEF, 0x0C, 0x5F, 0x82, 0x6F, 0x3C, + 0x5A, 0xB8, 0x6D, 0x2D, 0xD0, 0x84, 0xA3, 0xC3, + 0x16, 0xDE, 0x98, 0xCB, 0x42, 0x68, 0x4E, 0x0D, + 0x64, 0x41, 0xE0, 0x73, 0xA5, 0x9F, 0x27, 0x67, + 0x55, 0x1E, 0x56, 0x48, 0xBF, 0xBE, 0x49, 0x8E, + 0xF3, 0xC0, 0x3B, 0x65, 0xD2, 0x9F, 0x5F, 0xA8, + 0x4D, 0x99, 0x79, 0x9F, 0x1D, 0x32, 0xC2, 0x26, + 0xFB, 0xF7, 0x39, 0x65, 0x7F, 0x02, 0x61, 0xE8, + 0x96, 0x02, 0xF7, 0xBD, 0x07, 0x73, 0x41, 0x6D, + 0xFE, 0xEA, 0x80, 0x1C, 0xE1, 0xA7, 0x55, 0x3F, + 0x1E, 0xF9, 0x34, 0x1A, 0x5F, 0x74, 0x09, 0x25, + 0x80, 0x75, 0xBE, 0xF5, 0x82, 0x83, 0x35, 0x66, + 0x1A, 0x8C, 0xB1, 0x50, 0xD5, 0x37, 0x0B, 0xEC + }; + const byte kyber768_ss[] = { + 0x44, 0xF6, 0x94, 0xE4, 0x78, 0xEB, 0xAC, 0x4A, + 0x55, 0x6A, 0x38, 0xA2, 0x5C, 0x95, 0x9B, 0x62, + 0xAC, 0xC7, 0x2E, 0x17, 0xCF, 0x04, 0xB4, 0xD4, + 0x7E, 0x54, 0xB0, 0xB7, 0xFE, 0xAC, 0xEB, 0x56 + }; +#endif + + ret = wc_KyberKey_Init(KYBER768, &key, HEAP_HINT, INVALID_DEVID); + if (ret != 0) + return -20201; + + ret = wc_KyberKey_MakeKeyWithRandom(&key, kyber768_rand, + sizeof(kyber768_rand)); + if (ret != 0) + return -20202; + + ret = wc_KyberKey_EncodePublicKey(&key, pub, sizeof(pub)); + if (ret != 0) + return -20203; + + ret = wc_KyberKey_EncodePrivateKey(&key, priv, sizeof(priv)); + if (ret != 0) + return -20204; + + if (XMEMCMP(pub, kyber768_pk, sizeof(kyber768_pk)) != 0) + return -20205; + + if (XMEMCMP(priv, kyber768_sk, sizeof(kyber768_sk)) != 0) + return -20206; + + ret = wc_KyberKey_EncapsulateWithRandom(&key, ct, ss, kyber768enc_rand, + sizeof(kyber768enc_rand)); + if (ret != 0) + return -20207; + + if (XMEMCMP(ct, kyber768_ct, sizeof(kyber768_ct)) != 0) + return -20208; + + if (XMEMCMP(ss, kyber768_ss, sizeof(kyber768_ss)) != 0) + return -20209; + + ret = wc_KyberKey_Decapsulate(&key, ss_dec, ct, sizeof(kyber768_ct)); + if (ret != 0) + return -20210; + + if (XMEMCMP(ss_dec, kyber768_ss, sizeof(kyber768_ss)) != 0) + return -20211; + + wc_KyberKey_Free(&key); + + return 0; +} +#endif /* WOLFSSL_KYBER768 */ + +#ifdef WOLFSSL_KYBER1024 +static int kyber1024_kat(void) +{ + KyberKey key; + int ret; + byte priv[KYBER1024_PRIVATE_KEY_SIZE]; + byte pub[KYBER1024_PUBLIC_KEY_SIZE]; + byte ct[KYBER1024_CIPHER_TEXT_SIZE]; + byte ss[KYBER_SS_SZ]; + byte ss_dec[KYBER_SS_SZ]; + const byte kyber1024_rand[] = { + 0x7c, 0x99, 0x35, 0xa0, 0xb0, 0x76, 0x94, 0xaa, + 0x0c, 0x6d, 0x10, 0xe4, 0xdb, 0x6b, 0x1a, 0xdd, + 0x2f, 0xd8, 0x1a, 0x25, 0xcc, 0xb1, 0x48, 0x03, + 0x2d, 0xcd, 0x73, 0x99, 0x36, 0x73, 0x7f, 0x2d, + 0x86, 0x26, 0xED, 0x79, 0xD4, 0x51, 0x14, 0x08, + 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, + 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, + 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F + }; + const byte kyber1024enc_rand[] = { + 0x14, 0x7c, 0x03, 0xf7, 0xa5, 0xbe, 0xbb, 0xa4, + 0x06, 0xc8, 0xfa, 0xe1, 0x87, 0x4d, 0x7f, 0x13, + 0xc8, 0x0e, 0xfe, 0x79, 0xa3, 0xa9, 0xa8, 0x74, + 0xcc, 0x09, 0xfe, 0x76, 0xf6, 0x99, 0x76, 0x15 + }; +#ifndef WOLFSSL_KYBER_90S + const byte kyber1024_pk[] = { + 0xD2, 0x23, 0x02, 0xCB, 0xD3, 0x39, 0x9F, 0xAC, + 0xC6, 0x30, 0x99, 0x1F, 0xC8, 0xF2, 0x8B, 0xDB, + 0x43, 0x54, 0x76, 0x25, 0x41, 0x52, 0x76, 0x78, + 0xBC, 0xF6, 0x1F, 0x65, 0xC2, 0x41, 0x14, 0x6C, + 0x42, 0x6D, 0x23, 0xB9, 0xBF, 0xAA, 0x6B, 0x7D, + 0xF1, 0x8C, 0x97, 0xF2, 0x0C, 0x1B, 0x61, 0x25, + 0xBF, 0x87, 0x4B, 0x1D, 0x89, 0x47, 0x58, 0x52, + 0xC4, 0x48, 0x21, 0x5D, 0xB0, 0xEB, 0x77, 0x37, + 0xF9, 0x14, 0x80, 0xE8, 0xCE, 0xBD, 0x9A, 0x08, + 0x71, 0x57, 0x4F, 0x5A, 0xB6, 0x2D, 0x90, 0x20, + 0x17, 0x5E, 0xC6, 0x92, 0x7C, 0xA0, 0xB5, 0x4C, + 0x09, 0x81, 0x8E, 0x42, 0xCF, 0x92, 0xA3, 0x83, + 0x17, 0x24, 0x22, 0xC7, 0xDC, 0x18, 0x31, 0xD6, + 0x3B, 0x0C, 0x29, 0x5D, 0xE7, 0x51, 0x59, 0xDB, + 0x80, 0x34, 0xE9, 0xE0, 0x7F, 0x7B, 0x0B, 0x91, + 0x0C, 0x3C, 0x1E, 0x5F, 0xB6, 0x6B, 0x3D, 0xC5, + 0x23, 0xF1, 0xFA, 0x6E, 0xB4, 0x91, 0x0C, 0xB8, + 0x9A, 0x6C, 0x17, 0x56, 0x2C, 0x83, 0xAB, 0x4C, + 0x18, 0xD0, 0xCD, 0x7E, 0x07, 0x96, 0x59, 0x2A, + 0x37, 0x2A, 0xA4, 0x09, 0xB1, 0xC5, 0x57, 0x34, + 0x7C, 0xCA, 0xCD, 0xC4, 0x64, 0x4A, 0x11, 0x90, + 0x64, 0xD0, 0x6D, 0xD4, 0x74, 0x92, 0x9D, 0x1C, + 0x6F, 0xB4, 0xD6, 0x86, 0xE5, 0x49, 0x1C, 0xE4, + 0xBC, 0x89, 0xA3, 0x0B, 0xB4, 0xB8, 0xC4, 0x1B, + 0xCE, 0x51, 0x57, 0xDF, 0xC1, 0x36, 0x08, 0x23, + 0xB1, 0xAB, 0x61, 0x8C, 0x14, 0xB1, 0x0F, 0x98, + 0xC2, 0x50, 0x67, 0x39, 0x8E, 0xA7, 0x01, 0x8C, + 0x27, 0x8A, 0x4B, 0x3D, 0xF3, 0x13, 0x34, 0xD6, + 0x03, 0xB2, 0x04, 0x4E, 0xF1, 0x87, 0xCD, 0x9B, + 0xC6, 0xCE, 0x42, 0x72, 0x5B, 0xD9, 0x62, 0xC2, + 0x64, 0x98, 0x3E, 0x9E, 0x18, 0x15, 0x5A, 0x8B, + 0x9C, 0x47, 0x14, 0x3D, 0x70, 0x46, 0x0A, 0x26, + 0xA5, 0x6F, 0xE7, 0x65, 0x8C, 0x1F, 0x15, 0x03, + 0x48, 0xC6, 0x08, 0x7E, 0xF7, 0x58, 0xAD, 0x16, + 0x78, 0x87, 0x86, 0x0A, 0x00, 0x7A, 0x5F, 0xC3, + 0x73, 0x58, 0xD4, 0x3B, 0x5E, 0xBE, 0xE8, 0x20, + 0xAC, 0xEA, 0x47, 0x4F, 0x0A, 0xC0, 0x7B, 0x76, + 0x80, 0x28, 0x66, 0x19, 0x9C, 0x61, 0x23, 0x1D, + 0x5C, 0x74, 0x7C, 0x93, 0x77, 0x4D, 0x2C, 0x1E, + 0x0C, 0x1C, 0x67, 0xE6, 0xC8, 0x1B, 0x82, 0x75, + 0x21, 0x73, 0xE1, 0x25, 0xBA, 0xF3, 0x9B, 0x4F, + 0xD1, 0x9A, 0x4F, 0x45, 0x3D, 0xC5, 0x79, 0x76, + 0xB1, 0xD9, 0x7F, 0xE6, 0x99, 0x69, 0x92, 0xBB, + 0xB6, 0x5B, 0x7C, 0xB2, 0x5D, 0x07, 0x7B, 0xBA, + 0xA6, 0xA1, 0x33, 0x22, 0x89, 0x9A, 0xF6, 0x59, + 0xCF, 0x1B, 0x35, 0x58, 0xC1, 0xB5, 0x00, 0x11, + 0x54, 0xB6, 0x25, 0x80, 0x9E, 0xD8, 0x9A, 0xEE, + 0xBB, 0x89, 0xE6, 0xEA, 0x7D, 0x67, 0xF7, 0x23, + 0xD0, 0x45, 0xAB, 0x05, 0x71, 0x5C, 0x42, 0x35, + 0x5D, 0xA6, 0xA5, 0xC8, 0xDD, 0x39, 0xC8, 0xAB, + 0xE3, 0x03, 0x77, 0x51, 0xA0, 0x1E, 0xD1, 0xC7, + 0x37, 0x49, 0x19, 0xF3, 0x12, 0x1B, 0x5A, 0x52, + 0xC5, 0x3D, 0x14, 0x87, 0x31, 0x67, 0x69, 0xF8, + 0x07, 0x21, 0xDE, 0xEA, 0xAA, 0xD3, 0xC9, 0x0F, + 0x76, 0xE7, 0xAE, 0x9E, 0x12, 0xBA, 0x92, 0xB3, + 0x2B, 0x5F, 0xD4, 0x57, 0xE3, 0xC7, 0x52, 0xC2, + 0x65, 0x0D, 0xFB, 0x88, 0x57, 0x71, 0xCB, 0x77, + 0xAC, 0x3C, 0x78, 0x5A, 0x8C, 0x56, 0x2E, 0x6A, + 0x1C, 0x63, 0xC2, 0xA5, 0x5E, 0xA4, 0x7C, 0xF8, + 0xB9, 0x0E, 0xB8, 0x22, 0x5C, 0x12, 0x3C, 0x34, + 0x64, 0x52, 0x56, 0x62, 0x35, 0xB2, 0xF3, 0x18, + 0x23, 0xA3, 0x35, 0x21, 0xE0, 0x87, 0x93, 0x7A, + 0x34, 0x5D, 0x8D, 0x66, 0x3E, 0xEA, 0xA0, 0x56, + 0x58, 0x91, 0x7B, 0xBA, 0xA0, 0x08, 0xC2, 0xE3, + 0x35, 0xF8, 0x85, 0x0A, 0x90, 0xA3, 0x26, 0xD0, + 0xE6, 0x64, 0x32, 0xF4, 0x4C, 0xEB, 0x82, 0x89, + 0xE4, 0xEC, 0xB2, 0xD1, 0x29, 0x58, 0xE9, 0x84, + 0x07, 0x2E, 0xCA, 0xCB, 0x88, 0xE1, 0x34, 0x8F, + 0xF0, 0xB5, 0x56, 0x54, 0xAC, 0xBA, 0x5B, 0x54, + 0x97, 0x1C, 0xBA, 0xEB, 0xA8, 0x8E, 0xC4, 0xB9, + 0x1A, 0x94, 0xC3, 0x71, 0x92, 0xFA, 0x98, 0x2B, + 0xEC, 0xB9, 0xF3, 0xDA, 0x42, 0x16, 0x03, 0xB6, + 0x1A, 0x51, 0xBC, 0x8E, 0x36, 0xCB, 0xD0, 0x53, + 0x85, 0x1C, 0x77, 0xB1, 0xB9, 0x26, 0xB1, 0x7A, + 0x27, 0x2A, 0xA9, 0x02, 0x32, 0x46, 0xB0, 0x2B, + 0x3E, 0xD4, 0x7F, 0x66, 0xA0, 0x0B, 0xD5, 0x68, + 0x48, 0x23, 0x63, 0x4E, 0x7C, 0xE5, 0x8C, 0xF8, + 0xF3, 0x06, 0xE3, 0x5B, 0x1E, 0x53, 0x22, 0x82, + 0x4D, 0x90, 0x48, 0x01, 0xF0, 0xA2, 0xFA, 0x7C, + 0x2B, 0xC9, 0xC2, 0x52, 0xB0, 0xA5, 0x6B, 0x7B, + 0xA2, 0xAB, 0x0F, 0x63, 0x60, 0x21, 0x74, 0x5A, + 0x70, 0xA9, 0xA4, 0x3E, 0x2B, 0x0A, 0x8D, 0x61, + 0x59, 0x70, 0xB6, 0x53, 0x09, 0x62, 0x4B, 0x51, + 0x84, 0xBC, 0xC3, 0x0B, 0x91, 0x16, 0x79, 0xAE, + 0xDD, 0x76, 0x02, 0x5F, 0xE3, 0x90, 0x8F, 0xD6, + 0x78, 0x97, 0xB0, 0xCF, 0x4B, 0xE5, 0xA6, 0xF5, + 0x41, 0x3D, 0x7D, 0xD9, 0x85, 0x64, 0xB2, 0x3E, + 0x42, 0xA9, 0x3E, 0x4A, 0xA8, 0x82, 0x1C, 0xD4, + 0x50, 0x54, 0xC6, 0x43, 0xED, 0xC1, 0x15, 0x8D, + 0xB6, 0xB3, 0xDE, 0xB1, 0x3F, 0xB5, 0xA5, 0x1E, + 0xBD, 0x1A, 0x8A, 0x78, 0xB8, 0x72, 0x25, 0xA7, + 0x33, 0x8E, 0x10, 0x11, 0x04, 0xC4, 0xA2, 0x20, + 0xD9, 0xBD, 0xED, 0xD4, 0x8C, 0x85, 0xA1, 0xC2, + 0xDA, 0xE7, 0x81, 0xA8, 0x0C, 0x40, 0xE1, 0x3B, + 0x87, 0xEA, 0xC7, 0x3A, 0x76, 0x42, 0x01, 0xC9, + 0xB7, 0x60, 0xCC, 0xFB, 0x1A, 0xE3, 0x92, 0x69, + 0x9C, 0x70, 0x39, 0xD2, 0x7C, 0x39, 0x36, 0x2B, + 0x27, 0xB8, 0xFC, 0x6F, 0x07, 0xA8, 0xA3, 0xD4, + 0x41, 0x0F, 0x15, 0x47, 0xC4, 0x8A, 0x99, 0x97, + 0xF6, 0x2C, 0x61, 0x07, 0x44, 0x52, 0xEF, 0x15, + 0x15, 0xF8, 0xA6, 0x49, 0xEB, 0xCA, 0x94, 0x37, + 0x20, 0x5A, 0x4E, 0x8A, 0x61, 0x60, 0x6B, 0x41, + 0xDA, 0xF6, 0x83, 0x4D, 0x67, 0x1F, 0x4D, 0x85, + 0x2C, 0x0C, 0x9C, 0x40, 0x96, 0x61, 0x16, 0x48, + 0xC6, 0xA3, 0x17, 0x06, 0x78, 0xB1, 0x53, 0x7C, + 0xC1, 0x82, 0x8D, 0x93, 0x58, 0x0C, 0x9E, 0x58, + 0x49, 0xA9, 0x65, 0x31, 0x75, 0xAC, 0xB7, 0x53, + 0xF2, 0xBE, 0x74, 0x37, 0xBE, 0x45, 0xF6, 0xC6, + 0x03, 0xE4, 0x85, 0xF2, 0xEC, 0x30, 0x1B, 0xB4, + 0x2B, 0x6C, 0x37, 0xC2, 0x25, 0xD7, 0x49, 0x5A, + 0x58, 0x4A, 0xE2, 0x31, 0x89, 0x0A, 0xB5, 0xC8, + 0xC3, 0x5C, 0x26, 0x8C, 0xF4, 0xBB, 0xB0, 0x21, + 0x3C, 0x09, 0x60, 0x19, 0x31, 0x95, 0x61, 0xA8, + 0xA6, 0x94, 0x76, 0x37, 0xAA, 0x40, 0xD0, 0x06, + 0xB4, 0x15, 0xBB, 0x2C, 0xFA, 0x22, 0x37, 0xE0, + 0x89, 0x0B, 0x6A, 0x3B, 0xC1, 0x34, 0xAB, 0xF8, + 0xF6, 0x58, 0x5E, 0x10, 0x8D, 0x15, 0x94, 0x0F, + 0x91, 0xF4, 0xBF, 0x5B, 0x0C, 0x81, 0x80, 0x55, + 0xB2, 0x1D, 0xEA, 0x6E, 0x63, 0xB5, 0x53, 0x98, + 0x8C, 0x47, 0xF4, 0xB9, 0x4E, 0x7C, 0xF8, 0x00, + 0xA4, 0x93, 0xB4, 0x73, 0x47, 0x05, 0xED, 0xC5, + 0x6A, 0x4B, 0x60, 0x21, 0xC6, 0x29, 0x50, 0x06, + 0x75, 0x87, 0x68, 0x04, 0xCF, 0x0B, 0x95, 0x1F, + 0x03, 0x8A, 0x5C, 0x7F, 0xE5, 0x8E, 0x89, 0x77, + 0x4E, 0xF2, 0x99, 0x2F, 0xD7, 0xC6, 0x30, 0x99, + 0xD3, 0x52, 0xA7, 0xD2, 0x15, 0x60, 0xB7, 0x88, + 0xB4, 0x05, 0x70, 0x98, 0x61, 0x81, 0x7E, 0x59, + 0xA9, 0x6B, 0x3A, 0x3A, 0x83, 0xCB, 0xA8, 0x03, + 0xB1, 0x69, 0x34, 0x33, 0x10, 0x71, 0x90, 0x5B, + 0xBE, 0xC6, 0x53, 0x29, 0x00, 0x15, 0x5D, 0x8A, + 0xC8, 0x8C, 0xB3, 0x2E, 0x4E, 0x21, 0xA3, 0xBD, + 0x3A, 0x03, 0xFD, 0xEC, 0x32, 0x5A, 0x51, 0xCD, + 0x27, 0x73, 0x96, 0x4E, 0x67, 0x84, 0xFC, 0xF1, + 0x85, 0x37, 0x37, 0xAA, 0x64, 0xEB, 0x67, 0x56, + 0x47, 0x27, 0x27, 0x26, 0x61, 0xAB, 0xF8, 0x43, + 0x13, 0xA5, 0x7A, 0x44, 0xB1, 0x23, 0xC6, 0x55, + 0x09, 0xCF, 0xB7, 0xA6, 0xF6, 0x64, 0x1C, 0xDC, + 0xC3, 0xB5, 0x7F, 0xE6, 0x28, 0xC7, 0xB8, 0x19, + 0x2D, 0xB4, 0x4F, 0xFB, 0xF5, 0x79, 0x6A, 0x86, + 0x13, 0xB1, 0xFA, 0x12, 0x6F, 0x60, 0x76, 0x88, + 0x3C, 0x78, 0x3D, 0xC2, 0x4E, 0x2A, 0x44, 0x64, + 0xC4, 0x0B, 0x3A, 0x41, 0xCA, 0x70, 0xAE, 0x87, + 0x62, 0x08, 0x66, 0xCF, 0x4F, 0xCB, 0x2B, 0xD2, + 0x04, 0xBF, 0x5C, 0x28, 0x38, 0x12, 0xBA, 0x05, + 0x6A, 0xC0, 0xC3, 0x45, 0xE3, 0x79, 0xC4, 0xBA, + 0x24, 0xD7, 0x50, 0x90, 0x12, 0x79, 0xBB, 0x2F, + 0x3A, 0x16, 0xF6, 0x12, 0xBF, 0xAD, 0xB3, 0x57, + 0x03, 0x33, 0x2C, 0x7C, 0x13, 0x6F, 0x68, 0xEA, + 0xB6, 0x75, 0x5C, 0x66, 0xB6, 0xA4, 0xAD, 0x1A, + 0xAB, 0xA7, 0xB7, 0x68, 0xA5, 0x8A, 0xCA, 0xAC, + 0xC1, 0x0A, 0x45, 0x9A, 0x1C, 0xC8, 0xEF, 0x29, + 0x37, 0x7B, 0xC2, 0x00, 0xE4, 0xD3, 0x15, 0xA3, + 0x0A, 0x6B, 0xCC, 0x32, 0x56, 0xF9, 0x73, 0x4D, + 0x06, 0xE9, 0x77, 0x9C, 0xAA, 0x54, 0x42, 0xA9, + 0xA1, 0x60, 0x69, 0x08, 0x13, 0x77, 0xC7, 0x6E, + 0x75, 0x15, 0x43, 0x68, 0x07, 0x2D, 0xC4, 0x46, + 0xED, 0x6C, 0x8B, 0x8E, 0x62, 0x2A, 0x21, 0xE3, + 0x83, 0xCF, 0x9B, 0xA1, 0xFB, 0x43, 0x4E, 0x2E, + 0xCC, 0x81, 0xE7, 0xB7, 0x8C, 0xEE, 0x98, 0x6B, + 0x8F, 0xF7, 0x98, 0xAB, 0x18, 0xCF, 0x96, 0x34, + 0x54, 0x35, 0x46, 0x28, 0x4E, 0xDA, 0x2A, 0x26, + 0xB4, 0x7F, 0x05, 0xB7, 0x35, 0xBC, 0xDB, 0x12, + 0x02, 0x22, 0x00, 0x76, 0xDC, 0x8B, 0x4E, 0x4B, + 0x9F, 0x85, 0x35, 0x33, 0xC8, 0xF6, 0xC7, 0xFF, + 0x38, 0x81, 0x7B, 0xA4, 0x97, 0x12, 0x83, 0x57, + 0x85, 0xF1, 0x7F, 0x14, 0xCA, 0x01, 0xD0, 0xC1, + 0xC1, 0xE9, 0x88, 0x10, 0xFE, 0x0B, 0x36, 0xE5, + 0xB4, 0x27, 0x15, 0x7B, 0x94, 0x18, 0x44, 0x9C, + 0xED, 0xD6, 0x41, 0xA4, 0x29, 0x3C, 0x85, 0xC3, + 0x27, 0x00, 0x10, 0x2A, 0xCE, 0xC2, 0x2E, 0xBA, + 0xD9, 0x8E, 0xD1, 0x60, 0xA5, 0xF0, 0x27, 0xBD, + 0x4C, 0xDA, 0x57, 0xF1, 0xF3, 0x72, 0x0A, 0x12, + 0xC1, 0x34, 0x65, 0x4D, 0xD5, 0xE7, 0x3F, 0x82, + 0x96, 0x76, 0x49, 0x53, 0x90, 0xD0, 0xE7, 0x92, + 0x9D, 0x60, 0x34, 0xE9, 0xC5, 0x5F, 0x7D, 0x55, + 0xBA, 0x65, 0x8B, 0xC5, 0x87, 0x98, 0x8E, 0x8A, + 0xF9, 0x49, 0x60, 0xF6, 0xCF, 0xB8, 0xD5, 0xAF, + 0x7A, 0x00, 0x21, 0x53, 0x5A, 0x6E, 0x25, 0xE4, + 0x37, 0xD4, 0x9A, 0x78, 0x06, 0x98, 0xBE, 0x22, + 0xAC, 0x99, 0x53, 0x94, 0x9F, 0x57, 0x1B, 0x85, + 0xA6, 0x85, 0x72, 0x5F, 0x82, 0x07, 0xA2, 0xB0, + 0xAE, 0x84, 0x9B, 0x60, 0x1A, 0xB9, 0x1B, 0x15, + 0x9B, 0x3D, 0xF4, 0xA1, 0x54, 0xC2, 0x04, 0x1E, + 0x77, 0x60, 0x70, 0xAF, 0xC4, 0x29, 0x69, 0x32, + 0x23, 0x80, 0x91, 0x7C, 0x97, 0x51, 0x07, 0x99, + 0xF3, 0x14, 0x91, 0x31, 0x47, 0x7E, 0x16, 0x66, + 0x3D, 0x31, 0x74, 0xC7, 0xC1, 0xCA, 0xEA, 0x78, + 0x85, 0x35, 0xC6, 0xC0, 0x05, 0xA6, 0x4F, 0x28, + 0x68, 0x63, 0x1B, 0x31, 0xB6, 0x6E, 0x20, 0x5F, + 0xD3, 0x8C, 0x1D, 0x84, 0x54, 0x2D, 0x0F, 0x1B, + 0x57, 0x8F, 0x58, 0xC9, 0xBF, 0x5A, 0x0F, 0xAE, + 0xAB, 0x6A, 0xB6, 0x49, 0x48, 0x93, 0x05, 0x31, + 0x65, 0xEA, 0xFD, 0x46, 0x5F, 0xC6, 0x4A, 0x0C, + 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, + 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, + 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22 + }; + const byte kyber1024_sk[] = { + 0x07, 0x63, 0x8F, 0xB6, 0x98, 0x68, 0xF3, 0xD3, + 0x20, 0xE5, 0x86, 0x2B, 0xD9, 0x69, 0x33, 0xFE, + 0xB3, 0x11, 0xB3, 0x62, 0x09, 0x3C, 0x9B, 0x5D, + 0x50, 0x17, 0x0B, 0xCE, 0xD4, 0x3F, 0x1B, 0x53, + 0x6D, 0x9A, 0x20, 0x4B, 0xB1, 0xF2, 0x26, 0x95, + 0x95, 0x0B, 0xA1, 0xF2, 0xA9, 0xE8, 0xEB, 0x82, + 0x8B, 0x28, 0x44, 0x88, 0x76, 0x0B, 0x3F, 0xC8, + 0x4F, 0xAB, 0xA0, 0x42, 0x75, 0xD5, 0x62, 0x8E, + 0x39, 0xC5, 0xB2, 0x47, 0x13, 0x74, 0x28, 0x3C, + 0x50, 0x32, 0x99, 0xC0, 0xAB, 0x49, 0xB6, 0x6B, + 0x8B, 0xBB, 0x56, 0xA4, 0x18, 0x66, 0x24, 0xF9, + 0x19, 0xA2, 0xBA, 0x59, 0xBB, 0x08, 0xD8, 0x55, + 0x18, 0x80, 0xC2, 0xBE, 0xFC, 0x4F, 0x87, 0xF2, + 0x5F, 0x59, 0xAB, 0x58, 0x7A, 0x79, 0xC3, 0x27, + 0xD7, 0x92, 0xD5, 0x4C, 0x97, 0x4A, 0x69, 0x26, + 0x2F, 0xF8, 0xA7, 0x89, 0x38, 0x28, 0x9E, 0x9A, + 0x87, 0xB6, 0x88, 0xB0, 0x83, 0xE0, 0x59, 0x5F, + 0xE2, 0x18, 0xB6, 0xBB, 0x15, 0x05, 0x94, 0x1C, + 0xE2, 0xE8, 0x1A, 0x5A, 0x64, 0xC5, 0xAA, 0xC6, + 0x04, 0x17, 0x25, 0x69, 0x85, 0x34, 0x9E, 0xE4, + 0x7A, 0x52, 0x42, 0x0A, 0x5F, 0x97, 0x47, 0x7B, + 0x72, 0x36, 0xAC, 0x76, 0xBC, 0x70, 0xE8, 0x28, + 0x87, 0x29, 0x28, 0x7E, 0xE3, 0xE3, 0x4A, 0x3D, + 0xBC, 0x36, 0x83, 0xC0, 0xB7, 0xB1, 0x00, 0x29, + 0xFC, 0x20, 0x34, 0x18, 0x53, 0x7E, 0x74, 0x66, + 0xBA, 0x63, 0x85, 0xA8, 0xFF, 0x30, 0x1E, 0xE1, + 0x27, 0x08, 0xF8, 0x2A, 0xAA, 0x1E, 0x38, 0x0F, + 0xC7, 0xA8, 0x8F, 0x8F, 0x20, 0x5A, 0xB7, 0xE8, + 0x8D, 0x7E, 0x95, 0x95, 0x2A, 0x55, 0xBA, 0x20, + 0xD0, 0x9B, 0x79, 0xA4, 0x71, 0x41, 0xD6, 0x2B, + 0xF6, 0xEB, 0x7D, 0xD3, 0x07, 0xB0, 0x8E, 0xCA, + 0x13, 0xA5, 0xBC, 0x5F, 0x6B, 0x68, 0x58, 0x1C, + 0x68, 0x65, 0xB2, 0x7B, 0xBC, 0xDD, 0xAB, 0x14, + 0x2F, 0x4B, 0x2C, 0xBF, 0xF4, 0x88, 0xC8, 0xA2, + 0x27, 0x05, 0xFA, 0xA9, 0x8A, 0x2B, 0x9E, 0xEA, + 0x35, 0x30, 0xC7, 0x66, 0x62, 0x33, 0x5C, 0xC7, + 0xEA, 0x3A, 0x00, 0x77, 0x77, 0x25, 0xEB, 0xCC, + 0xCD, 0x2A, 0x46, 0x36, 0xB2, 0xD9, 0x12, 0x2F, + 0xF3, 0xAB, 0x77, 0x12, 0x3C, 0xE0, 0x88, 0x3C, + 0x19, 0x11, 0x11, 0x5E, 0x50, 0xC9, 0xE8, 0xA9, + 0x41, 0x94, 0xE4, 0x8D, 0xD0, 0xD0, 0x9C, 0xFF, + 0xB3, 0xAD, 0xCD, 0x2C, 0x1E, 0x92, 0x43, 0x09, + 0x03, 0xD0, 0x7A, 0xDB, 0xF0, 0x05, 0x32, 0x03, + 0x15, 0x75, 0xAA, 0x7F, 0x9E, 0x7B, 0x5A, 0x1F, + 0x33, 0x62, 0xDE, 0xC9, 0x36, 0xD4, 0x04, 0x3C, + 0x05, 0xF2, 0x47, 0x6C, 0x07, 0x57, 0x8B, 0xC9, + 0xCB, 0xAF, 0x2A, 0xB4, 0xE3, 0x82, 0x72, 0x7A, + 0xD4, 0x16, 0x86, 0xA9, 0x6B, 0x25, 0x48, 0x82, + 0x0B, 0xB0, 0x3B, 0x32, 0xF1, 0x1B, 0x28, 0x11, + 0xAD, 0x62, 0xF4, 0x89, 0xE9, 0x51, 0x63, 0x2A, + 0xBA, 0x0D, 0x1D, 0xF8, 0x96, 0x80, 0xCC, 0x8A, + 0x8B, 0x53, 0xB4, 0x81, 0xD9, 0x2A, 0x68, 0xD7, + 0x0B, 0x4E, 0xA1, 0xC3, 0xA6, 0xA5, 0x61, 0xC0, + 0x69, 0x28, 0x82, 0xB5, 0xCA, 0x8C, 0xC9, 0x42, + 0xA8, 0xD4, 0x95, 0xAF, 0xCB, 0x06, 0xDE, 0x89, + 0x49, 0x8F, 0xB9, 0x35, 0xB7, 0x75, 0x90, 0x8F, + 0xE7, 0xA0, 0x3E, 0x32, 0x4D, 0x54, 0xCC, 0x19, + 0xD4, 0xE1, 0xAA, 0xBD, 0x35, 0x93, 0xB3, 0x8B, + 0x19, 0xEE, 0x13, 0x88, 0xFE, 0x49, 0x2B, 0x43, + 0x12, 0x7E, 0x5A, 0x50, 0x42, 0x53, 0x78, 0x6A, + 0x0D, 0x69, 0xAD, 0x32, 0x60, 0x1C, 0x28, 0xE2, + 0xC8, 0x85, 0x04, 0xA5, 0xBA, 0x59, 0x97, 0x06, + 0x02, 0x3A, 0x61, 0x36, 0x3E, 0x17, 0xC6, 0xB9, + 0xBB, 0x59, 0xBD, 0xC6, 0x97, 0x45, 0x2C, 0xD0, + 0x59, 0x45, 0x19, 0x83, 0xD7, 0x38, 0xCA, 0x3F, + 0xD0, 0x34, 0xE3, 0xF5, 0x98, 0x88, 0x54, 0xCA, + 0x05, 0x03, 0x1D, 0xB0, 0x96, 0x11, 0x49, 0x89, + 0x88, 0x19, 0x7C, 0x6B, 0x30, 0xD2, 0x58, 0xDF, + 0xE2, 0x62, 0x65, 0x54, 0x1C, 0x89, 0xA4, 0xB3, + 0x1D, 0x68, 0x64, 0xE9, 0x38, 0x9B, 0x03, 0xCB, + 0x74, 0xF7, 0xEC, 0x43, 0x23, 0xFB, 0x94, 0x21, + 0xA4, 0xB9, 0x79, 0x0A, 0x26, 0xD1, 0x7B, 0x03, + 0x98, 0xA2, 0x67, 0x67, 0x35, 0x09, 0x09, 0xF8, + 0x4D, 0x57, 0xB6, 0x69, 0x4D, 0xF8, 0x30, 0x66, + 0x4C, 0xA8, 0xB3, 0xC3, 0xC0, 0x3E, 0xD2, 0xAE, + 0x67, 0xB8, 0x90, 0x06, 0x86, 0x8A, 0x68, 0x52, + 0x7C, 0xCD, 0x66, 0x64, 0x59, 0xAB, 0x7F, 0x05, + 0x66, 0x71, 0x00, 0x0C, 0x61, 0x64, 0xD3, 0xA7, + 0xF2, 0x66, 0xA1, 0x4D, 0x97, 0xCB, 0xD7, 0x00, + 0x4D, 0x6C, 0x92, 0xCA, 0xCA, 0x77, 0x0B, 0x84, + 0x4A, 0x4F, 0xA9, 0xB1, 0x82, 0xE7, 0xB1, 0x8C, + 0xA8, 0x85, 0x08, 0x2A, 0xC5, 0x64, 0x6F, 0xCB, + 0x4A, 0x14, 0xE1, 0x68, 0x5F, 0xEB, 0x0C, 0x9C, + 0xE3, 0x37, 0x2A, 0xB9, 0x53, 0x65, 0xC0, 0x4F, + 0xD8, 0x30, 0x84, 0xF8, 0x0A, 0x23, 0xFF, 0x10, + 0xA0, 0x5B, 0xF1, 0x5F, 0x7F, 0xA5, 0xAC, 0xC6, + 0xC0, 0xCB, 0x46, 0x2C, 0x33, 0xCA, 0x52, 0x4F, + 0xA6, 0xB8, 0xBB, 0x35, 0x90, 0x43, 0xBA, 0x68, + 0x60, 0x9E, 0xAA, 0x25, 0x36, 0xE8, 0x1D, 0x08, + 0x46, 0x3B, 0x19, 0x65, 0x3B, 0x54, 0x35, 0xBA, + 0x94, 0x6C, 0x9A, 0xDD, 0xEB, 0x20, 0x2B, 0x04, + 0xB0, 0x31, 0xCC, 0x96, 0x0D, 0xCC, 0x12, 0xE4, + 0x51, 0x8D, 0x42, 0x8B, 0x32, 0xB2, 0x57, 0xA4, + 0xFC, 0x73, 0x13, 0xD3, 0xA7, 0x98, 0x0D, 0x80, + 0x08, 0x2E, 0x93, 0x4F, 0x9D, 0x95, 0xC3, 0x2B, + 0x0A, 0x01, 0x91, 0xA2, 0x36, 0x04, 0x38, 0x4D, + 0xD9, 0xE0, 0x79, 0xBB, 0xBA, 0xA2, 0x66, 0xD1, + 0x4C, 0x3F, 0x75, 0x6B, 0x9F, 0x21, 0x33, 0x10, + 0x74, 0x33, 0xA4, 0xE8, 0x3F, 0xA7, 0x18, 0x72, + 0x82, 0xA8, 0x09, 0x20, 0x3A, 0x4F, 0xAF, 0x84, + 0x18, 0x51, 0x83, 0x3D, 0x12, 0x1A, 0xC3, 0x83, + 0x84, 0x3A, 0x5E, 0x55, 0xBC, 0x23, 0x81, 0x42, + 0x5E, 0x16, 0xC7, 0xDB, 0x4C, 0xC9, 0xAB, 0x5C, + 0x1B, 0x0D, 0x91, 0xA4, 0x7E, 0x2B, 0x8D, 0xE0, + 0xE5, 0x82, 0xC8, 0x6B, 0x6B, 0x0D, 0x90, 0x7B, + 0xB3, 0x60, 0xB9, 0x7F, 0x40, 0xAB, 0x5D, 0x03, + 0x8F, 0x6B, 0x75, 0xC8, 0x14, 0xB2, 0x7D, 0x9B, + 0x96, 0x8D, 0x41, 0x98, 0x32, 0xBC, 0x8C, 0x2B, + 0xEE, 0x60, 0x5E, 0xF6, 0xE5, 0x05, 0x9D, 0x33, + 0x10, 0x0D, 0x90, 0x48, 0x5D, 0x37, 0x84, 0x50, + 0x01, 0x42, 0x21, 0x73, 0x6C, 0x07, 0x40, 0x7C, + 0xAC, 0x26, 0x04, 0x08, 0xAA, 0x64, 0x92, 0x66, + 0x19, 0x78, 0x8B, 0x86, 0x01, 0xC2, 0xA7, 0x52, + 0xD1, 0xA6, 0xCB, 0xF8, 0x20, 0xD7, 0xC7, 0xA0, + 0x47, 0x16, 0x20, 0x32, 0x25, 0xB3, 0x89, 0x5B, + 0x93, 0x42, 0xD1, 0x47, 0xA8, 0x18, 0x5C, 0xFC, + 0x1B, 0xB6, 0x5B, 0xA0, 0x6B, 0x41, 0x42, 0x33, + 0x99, 0x03, 0xC0, 0xAC, 0x46, 0x51, 0x38, 0x5B, + 0x45, 0xD9, 0x8A, 0x8B, 0x19, 0xD2, 0x8C, 0xD6, + 0xBA, 0xB0, 0x88, 0x78, 0x7F, 0x7E, 0xE1, 0xB1, + 0x24, 0x61, 0x76, 0x6B, 0x43, 0xCB, 0xCC, 0xB9, + 0x64, 0x34, 0x42, 0x7D, 0x93, 0xC0, 0x65, 0x55, + 0x06, 0x88, 0xF6, 0x94, 0x8E, 0xD1, 0xB5, 0x47, + 0x5A, 0x42, 0x5F, 0x1B, 0x85, 0x20, 0x9D, 0x06, + 0x1C, 0x08, 0xB5, 0x6C, 0x1C, 0xC0, 0x69, 0xF6, + 0xC0, 0xA7, 0xC6, 0xF2, 0x93, 0x58, 0xCA, 0xB9, + 0x11, 0x08, 0x77, 0x32, 0xA6, 0x49, 0xD2, 0x7C, + 0x9B, 0x98, 0xF9, 0xA4, 0x88, 0x79, 0x38, 0x7D, + 0x9B, 0x00, 0xC2, 0x59, 0x59, 0xA7, 0x16, 0x54, + 0xD6, 0xF6, 0xA9, 0x46, 0x16, 0x45, 0x13, 0xE4, + 0x7A, 0x75, 0xD0, 0x05, 0x98, 0x6C, 0x23, 0x63, + 0xC0, 0x9F, 0x6B, 0x53, 0x7E, 0xCA, 0x78, 0xB9, + 0x30, 0x3A, 0x5F, 0xA4, 0x57, 0x60, 0x8A, 0x58, + 0x6A, 0x65, 0x3A, 0x34, 0x7D, 0xB0, 0x4D, 0xFC, + 0xC1, 0x91, 0x75, 0xB3, 0xA3, 0x01, 0x17, 0x25, + 0x36, 0x06, 0x2A, 0x65, 0x8A, 0x95, 0x27, 0x75, + 0x70, 0xC8, 0x85, 0x2C, 0xA8, 0x97, 0x3F, 0x4A, + 0xE1, 0x23, 0xA3, 0x34, 0x04, 0x7D, 0xD7, 0x11, + 0xC8, 0x92, 0x7A, 0x63, 0x4A, 0x03, 0x38, 0x8A, + 0x52, 0x7B, 0x03, 0x4B, 0xF7, 0xA8, 0x17, 0x0F, + 0xA7, 0x02, 0xC1, 0xF7, 0xC2, 0x3E, 0xC3, 0x2D, + 0x18, 0xA2, 0x37, 0x48, 0x90, 0xBE, 0x9C, 0x78, + 0x7A, 0x94, 0x09, 0xC8, 0x2D, 0x19, 0x2C, 0x4B, + 0xB7, 0x05, 0xA2, 0xF9, 0x96, 0xCE, 0x40, 0x5D, + 0x85, 0xA4, 0xC1, 0xA1, 0xAB, 0x9B, 0x6A, 0xEB, + 0x49, 0xCC, 0xE1, 0xC2, 0xF8, 0xA9, 0x7C, 0x35, + 0x16, 0xC7, 0x2A, 0x00, 0xA4, 0x62, 0x63, 0xBA, + 0xA6, 0x96, 0xBF, 0x25, 0x72, 0x77, 0x19, 0xC3, + 0x21, 0x64, 0x23, 0x61, 0x8F, 0xF3, 0x33, 0x80, + 0x93, 0x4A, 0x6C, 0x10, 0x54, 0x5C, 0x4C, 0x5C, + 0x51, 0x55, 0xB1, 0x24, 0x86, 0x18, 0x1F, 0xC7, + 0xA2, 0x31, 0x98, 0x73, 0x97, 0x8B, 0x6A, 0x2A, + 0x67, 0x49, 0x0F, 0x82, 0x56, 0xBD, 0x21, 0x96, + 0xFE, 0x17, 0x92, 0xA4, 0xC0, 0x00, 0x77, 0xB8, + 0x12, 0xEA, 0xE8, 0xBE, 0xD3, 0x57, 0x24, 0x99, + 0x68, 0x4A, 0xB3, 0x37, 0x18, 0x76, 0x76, 0x1E, + 0x45, 0x0C, 0x9F, 0x9D, 0x27, 0x68, 0xA3, 0x68, + 0x06, 0xD7, 0xAB, 0x20, 0x46, 0xC9, 0x1F, 0x17, + 0x59, 0x9E, 0x9A, 0xC5, 0x92, 0x99, 0x08, 0x08, + 0xDC, 0xD7, 0xB4, 0xD0, 0x91, 0x90, 0x72, 0xF1, + 0x4E, 0xC3, 0x61, 0x77, 0x3B, 0x72, 0x52, 0x44, + 0x4C, 0x32, 0x3C, 0x30, 0x83, 0x26, 0xF4, 0xA3, + 0x0F, 0x86, 0x80, 0xD2, 0xF7, 0x48, 0xF5, 0x6A, + 0x13, 0x2B, 0x82, 0x67, 0x4E, 0xD0, 0x18, 0x46, + 0x20, 0xB8, 0x2A, 0xD2, 0xCB, 0x18, 0x2C, 0x97, + 0xB4, 0x81, 0x62, 0x66, 0x47, 0x49, 0x12, 0x90, + 0xA0, 0x11, 0xCC, 0x73, 0x82, 0x86, 0x85, 0xA8, + 0xC3, 0x67, 0xA5, 0xB9, 0xCF, 0x8D, 0x62, 0x1B, + 0x0D, 0x5C, 0x1E, 0xFF, 0x03, 0x17, 0x27, 0x58, + 0xBD, 0x00, 0x49, 0x78, 0xC2, 0x51, 0xCD, 0x51, + 0x34, 0x22, 0x28, 0x98, 0x9C, 0xAE, 0x63, 0x32, + 0xAC, 0x48, 0x64, 0x37, 0xCB, 0x5C, 0x57, 0xD4, + 0x30, 0x74, 0x62, 0x86, 0x52, 0x53, 0xBE, 0x21, + 0x7B, 0x35, 0x15, 0xC7, 0x3D, 0xF4, 0x05, 0xB7, + 0xF2, 0x82, 0x17, 0xAD, 0x0B, 0x8C, 0xF6, 0x0C, + 0x2F, 0xFF, 0xAA, 0x0A, 0x00, 0x48, 0xB1, 0xFB, + 0x4A, 0xCD, 0xCD, 0xC3, 0x8B, 0x52, 0x50, 0xCF, + 0xEC, 0x35, 0x6A, 0x6D, 0xE2, 0x6C, 0xFA, 0x7A, + 0x58, 0x8F, 0xDC, 0x86, 0xF9, 0x8C, 0x85, 0x4A, + 0xC6, 0x4C, 0x7B, 0xFA, 0xA9, 0x6F, 0x5A, 0x32, + 0xCC, 0x06, 0x10, 0x93, 0x4B, 0xAA, 0x6A, 0x58, + 0x6B, 0x9A, 0x20, 0x54, 0xF1, 0x3B, 0xA2, 0x74, + 0x17, 0x4A, 0xA0, 0xD2, 0xB3, 0xA8, 0x1B, 0x96, + 0xA9, 0x40, 0x66, 0x6F, 0x78, 0x9B, 0x5A, 0x6B, + 0xCD, 0xC0, 0xA6, 0xA0, 0x17, 0x8A, 0x0C, 0x9A, + 0x02, 0x57, 0x8A, 0x49, 0x3F, 0x6E, 0xEA, 0x0D, + 0x2E, 0x6C, 0x13, 0x95, 0x1C, 0x9F, 0x24, 0x9A, + 0x5E, 0x8D, 0xD7, 0x1D, 0xD4, 0x9A, 0x74, 0x2D, + 0x45, 0x1F, 0x1A, 0xBB, 0xA1, 0x9A, 0xF8, 0xC5, + 0x47, 0x85, 0x5E, 0x0A, 0xFC, 0x72, 0x8E, 0x90, + 0xAB, 0xB4, 0x99, 0xC9, 0xBE, 0xEB, 0x76, 0x6F, + 0x47, 0x29, 0xCD, 0xA2, 0x22, 0x63, 0xE3, 0x24, + 0xD2, 0x23, 0x02, 0xCB, 0xD3, 0x39, 0x9F, 0xAC, + 0xC6, 0x30, 0x99, 0x1F, 0xC8, 0xF2, 0x8B, 0xDB, + 0x43, 0x54, 0x76, 0x25, 0x41, 0x52, 0x76, 0x78, + 0xBC, 0xF6, 0x1F, 0x65, 0xC2, 0x41, 0x14, 0x6C, + 0x42, 0x6D, 0x23, 0xB9, 0xBF, 0xAA, 0x6B, 0x7D, + 0xF1, 0x8C, 0x97, 0xF2, 0x0C, 0x1B, 0x61, 0x25, + 0xBF, 0x87, 0x4B, 0x1D, 0x89, 0x47, 0x58, 0x52, + 0xC4, 0x48, 0x21, 0x5D, 0xB0, 0xEB, 0x77, 0x37, + 0xF9, 0x14, 0x80, 0xE8, 0xCE, 0xBD, 0x9A, 0x08, + 0x71, 0x57, 0x4F, 0x5A, 0xB6, 0x2D, 0x90, 0x20, + 0x17, 0x5E, 0xC6, 0x92, 0x7C, 0xA0, 0xB5, 0x4C, + 0x09, 0x81, 0x8E, 0x42, 0xCF, 0x92, 0xA3, 0x83, + 0x17, 0x24, 0x22, 0xC7, 0xDC, 0x18, 0x31, 0xD6, + 0x3B, 0x0C, 0x29, 0x5D, 0xE7, 0x51, 0x59, 0xDB, + 0x80, 0x34, 0xE9, 0xE0, 0x7F, 0x7B, 0x0B, 0x91, + 0x0C, 0x3C, 0x1E, 0x5F, 0xB6, 0x6B, 0x3D, 0xC5, + 0x23, 0xF1, 0xFA, 0x6E, 0xB4, 0x91, 0x0C, 0xB8, + 0x9A, 0x6C, 0x17, 0x56, 0x2C, 0x83, 0xAB, 0x4C, + 0x18, 0xD0, 0xCD, 0x7E, 0x07, 0x96, 0x59, 0x2A, + 0x37, 0x2A, 0xA4, 0x09, 0xB1, 0xC5, 0x57, 0x34, + 0x7C, 0xCA, 0xCD, 0xC4, 0x64, 0x4A, 0x11, 0x90, + 0x64, 0xD0, 0x6D, 0xD4, 0x74, 0x92, 0x9D, 0x1C, + 0x6F, 0xB4, 0xD6, 0x86, 0xE5, 0x49, 0x1C, 0xE4, + 0xBC, 0x89, 0xA3, 0x0B, 0xB4, 0xB8, 0xC4, 0x1B, + 0xCE, 0x51, 0x57, 0xDF, 0xC1, 0x36, 0x08, 0x23, + 0xB1, 0xAB, 0x61, 0x8C, 0x14, 0xB1, 0x0F, 0x98, + 0xC2, 0x50, 0x67, 0x39, 0x8E, 0xA7, 0x01, 0x8C, + 0x27, 0x8A, 0x4B, 0x3D, 0xF3, 0x13, 0x34, 0xD6, + 0x03, 0xB2, 0x04, 0x4E, 0xF1, 0x87, 0xCD, 0x9B, + 0xC6, 0xCE, 0x42, 0x72, 0x5B, 0xD9, 0x62, 0xC2, + 0x64, 0x98, 0x3E, 0x9E, 0x18, 0x15, 0x5A, 0x8B, + 0x9C, 0x47, 0x14, 0x3D, 0x70, 0x46, 0x0A, 0x26, + 0xA5, 0x6F, 0xE7, 0x65, 0x8C, 0x1F, 0x15, 0x03, + 0x48, 0xC6, 0x08, 0x7E, 0xF7, 0x58, 0xAD, 0x16, + 0x78, 0x87, 0x86, 0x0A, 0x00, 0x7A, 0x5F, 0xC3, + 0x73, 0x58, 0xD4, 0x3B, 0x5E, 0xBE, 0xE8, 0x20, + 0xAC, 0xEA, 0x47, 0x4F, 0x0A, 0xC0, 0x7B, 0x76, + 0x80, 0x28, 0x66, 0x19, 0x9C, 0x61, 0x23, 0x1D, + 0x5C, 0x74, 0x7C, 0x93, 0x77, 0x4D, 0x2C, 0x1E, + 0x0C, 0x1C, 0x67, 0xE6, 0xC8, 0x1B, 0x82, 0x75, + 0x21, 0x73, 0xE1, 0x25, 0xBA, 0xF3, 0x9B, 0x4F, + 0xD1, 0x9A, 0x4F, 0x45, 0x3D, 0xC5, 0x79, 0x76, + 0xB1, 0xD9, 0x7F, 0xE6, 0x99, 0x69, 0x92, 0xBB, + 0xB6, 0x5B, 0x7C, 0xB2, 0x5D, 0x07, 0x7B, 0xBA, + 0xA6, 0xA1, 0x33, 0x22, 0x89, 0x9A, 0xF6, 0x59, + 0xCF, 0x1B, 0x35, 0x58, 0xC1, 0xB5, 0x00, 0x11, + 0x54, 0xB6, 0x25, 0x80, 0x9E, 0xD8, 0x9A, 0xEE, + 0xBB, 0x89, 0xE6, 0xEA, 0x7D, 0x67, 0xF7, 0x23, + 0xD0, 0x45, 0xAB, 0x05, 0x71, 0x5C, 0x42, 0x35, + 0x5D, 0xA6, 0xA5, 0xC8, 0xDD, 0x39, 0xC8, 0xAB, + 0xE3, 0x03, 0x77, 0x51, 0xA0, 0x1E, 0xD1, 0xC7, + 0x37, 0x49, 0x19, 0xF3, 0x12, 0x1B, 0x5A, 0x52, + 0xC5, 0x3D, 0x14, 0x87, 0x31, 0x67, 0x69, 0xF8, + 0x07, 0x21, 0xDE, 0xEA, 0xAA, 0xD3, 0xC9, 0x0F, + 0x76, 0xE7, 0xAE, 0x9E, 0x12, 0xBA, 0x92, 0xB3, + 0x2B, 0x5F, 0xD4, 0x57, 0xE3, 0xC7, 0x52, 0xC2, + 0x65, 0x0D, 0xFB, 0x88, 0x57, 0x71, 0xCB, 0x77, + 0xAC, 0x3C, 0x78, 0x5A, 0x8C, 0x56, 0x2E, 0x6A, + 0x1C, 0x63, 0xC2, 0xA5, 0x5E, 0xA4, 0x7C, 0xF8, + 0xB9, 0x0E, 0xB8, 0x22, 0x5C, 0x12, 0x3C, 0x34, + 0x64, 0x52, 0x56, 0x62, 0x35, 0xB2, 0xF3, 0x18, + 0x23, 0xA3, 0x35, 0x21, 0xE0, 0x87, 0x93, 0x7A, + 0x34, 0x5D, 0x8D, 0x66, 0x3E, 0xEA, 0xA0, 0x56, + 0x58, 0x91, 0x7B, 0xBA, 0xA0, 0x08, 0xC2, 0xE3, + 0x35, 0xF8, 0x85, 0x0A, 0x90, 0xA3, 0x26, 0xD0, + 0xE6, 0x64, 0x32, 0xF4, 0x4C, 0xEB, 0x82, 0x89, + 0xE4, 0xEC, 0xB2, 0xD1, 0x29, 0x58, 0xE9, 0x84, + 0x07, 0x2E, 0xCA, 0xCB, 0x88, 0xE1, 0x34, 0x8F, + 0xF0, 0xB5, 0x56, 0x54, 0xAC, 0xBA, 0x5B, 0x54, + 0x97, 0x1C, 0xBA, 0xEB, 0xA8, 0x8E, 0xC4, 0xB9, + 0x1A, 0x94, 0xC3, 0x71, 0x92, 0xFA, 0x98, 0x2B, + 0xEC, 0xB9, 0xF3, 0xDA, 0x42, 0x16, 0x03, 0xB6, + 0x1A, 0x51, 0xBC, 0x8E, 0x36, 0xCB, 0xD0, 0x53, + 0x85, 0x1C, 0x77, 0xB1, 0xB9, 0x26, 0xB1, 0x7A, + 0x27, 0x2A, 0xA9, 0x02, 0x32, 0x46, 0xB0, 0x2B, + 0x3E, 0xD4, 0x7F, 0x66, 0xA0, 0x0B, 0xD5, 0x68, + 0x48, 0x23, 0x63, 0x4E, 0x7C, 0xE5, 0x8C, 0xF8, + 0xF3, 0x06, 0xE3, 0x5B, 0x1E, 0x53, 0x22, 0x82, + 0x4D, 0x90, 0x48, 0x01, 0xF0, 0xA2, 0xFA, 0x7C, + 0x2B, 0xC9, 0xC2, 0x52, 0xB0, 0xA5, 0x6B, 0x7B, + 0xA2, 0xAB, 0x0F, 0x63, 0x60, 0x21, 0x74, 0x5A, + 0x70, 0xA9, 0xA4, 0x3E, 0x2B, 0x0A, 0x8D, 0x61, + 0x59, 0x70, 0xB6, 0x53, 0x09, 0x62, 0x4B, 0x51, + 0x84, 0xBC, 0xC3, 0x0B, 0x91, 0x16, 0x79, 0xAE, + 0xDD, 0x76, 0x02, 0x5F, 0xE3, 0x90, 0x8F, 0xD6, + 0x78, 0x97, 0xB0, 0xCF, 0x4B, 0xE5, 0xA6, 0xF5, + 0x41, 0x3D, 0x7D, 0xD9, 0x85, 0x64, 0xB2, 0x3E, + 0x42, 0xA9, 0x3E, 0x4A, 0xA8, 0x82, 0x1C, 0xD4, + 0x50, 0x54, 0xC6, 0x43, 0xED, 0xC1, 0x15, 0x8D, + 0xB6, 0xB3, 0xDE, 0xB1, 0x3F, 0xB5, 0xA5, 0x1E, + 0xBD, 0x1A, 0x8A, 0x78, 0xB8, 0x72, 0x25, 0xA7, + 0x33, 0x8E, 0x10, 0x11, 0x04, 0xC4, 0xA2, 0x20, + 0xD9, 0xBD, 0xED, 0xD4, 0x8C, 0x85, 0xA1, 0xC2, + 0xDA, 0xE7, 0x81, 0xA8, 0x0C, 0x40, 0xE1, 0x3B, + 0x87, 0xEA, 0xC7, 0x3A, 0x76, 0x42, 0x01, 0xC9, + 0xB7, 0x60, 0xCC, 0xFB, 0x1A, 0xE3, 0x92, 0x69, + 0x9C, 0x70, 0x39, 0xD2, 0x7C, 0x39, 0x36, 0x2B, + 0x27, 0xB8, 0xFC, 0x6F, 0x07, 0xA8, 0xA3, 0xD4, + 0x41, 0x0F, 0x15, 0x47, 0xC4, 0x8A, 0x99, 0x97, + 0xF6, 0x2C, 0x61, 0x07, 0x44, 0x52, 0xEF, 0x15, + 0x15, 0xF8, 0xA6, 0x49, 0xEB, 0xCA, 0x94, 0x37, + 0x20, 0x5A, 0x4E, 0x8A, 0x61, 0x60, 0x6B, 0x41, + 0xDA, 0xF6, 0x83, 0x4D, 0x67, 0x1F, 0x4D, 0x85, + 0x2C, 0x0C, 0x9C, 0x40, 0x96, 0x61, 0x16, 0x48, + 0xC6, 0xA3, 0x17, 0x06, 0x78, 0xB1, 0x53, 0x7C, + 0xC1, 0x82, 0x8D, 0x93, 0x58, 0x0C, 0x9E, 0x58, + 0x49, 0xA9, 0x65, 0x31, 0x75, 0xAC, 0xB7, 0x53, + 0xF2, 0xBE, 0x74, 0x37, 0xBE, 0x45, 0xF6, 0xC6, + 0x03, 0xE4, 0x85, 0xF2, 0xEC, 0x30, 0x1B, 0xB4, + 0x2B, 0x6C, 0x37, 0xC2, 0x25, 0xD7, 0x49, 0x5A, + 0x58, 0x4A, 0xE2, 0x31, 0x89, 0x0A, 0xB5, 0xC8, + 0xC3, 0x5C, 0x26, 0x8C, 0xF4, 0xBB, 0xB0, 0x21, + 0x3C, 0x09, 0x60, 0x19, 0x31, 0x95, 0x61, 0xA8, + 0xA6, 0x94, 0x76, 0x37, 0xAA, 0x40, 0xD0, 0x06, + 0xB4, 0x15, 0xBB, 0x2C, 0xFA, 0x22, 0x37, 0xE0, + 0x89, 0x0B, 0x6A, 0x3B, 0xC1, 0x34, 0xAB, 0xF8, + 0xF6, 0x58, 0x5E, 0x10, 0x8D, 0x15, 0x94, 0x0F, + 0x91, 0xF4, 0xBF, 0x5B, 0x0C, 0x81, 0x80, 0x55, + 0xB2, 0x1D, 0xEA, 0x6E, 0x63, 0xB5, 0x53, 0x98, + 0x8C, 0x47, 0xF4, 0xB9, 0x4E, 0x7C, 0xF8, 0x00, + 0xA4, 0x93, 0xB4, 0x73, 0x47, 0x05, 0xED, 0xC5, + 0x6A, 0x4B, 0x60, 0x21, 0xC6, 0x29, 0x50, 0x06, + 0x75, 0x87, 0x68, 0x04, 0xCF, 0x0B, 0x95, 0x1F, + 0x03, 0x8A, 0x5C, 0x7F, 0xE5, 0x8E, 0x89, 0x77, + 0x4E, 0xF2, 0x99, 0x2F, 0xD7, 0xC6, 0x30, 0x99, + 0xD3, 0x52, 0xA7, 0xD2, 0x15, 0x60, 0xB7, 0x88, + 0xB4, 0x05, 0x70, 0x98, 0x61, 0x81, 0x7E, 0x59, + 0xA9, 0x6B, 0x3A, 0x3A, 0x83, 0xCB, 0xA8, 0x03, + 0xB1, 0x69, 0x34, 0x33, 0x10, 0x71, 0x90, 0x5B, + 0xBE, 0xC6, 0x53, 0x29, 0x00, 0x15, 0x5D, 0x8A, + 0xC8, 0x8C, 0xB3, 0x2E, 0x4E, 0x21, 0xA3, 0xBD, + 0x3A, 0x03, 0xFD, 0xEC, 0x32, 0x5A, 0x51, 0xCD, + 0x27, 0x73, 0x96, 0x4E, 0x67, 0x84, 0xFC, 0xF1, + 0x85, 0x37, 0x37, 0xAA, 0x64, 0xEB, 0x67, 0x56, + 0x47, 0x27, 0x27, 0x26, 0x61, 0xAB, 0xF8, 0x43, + 0x13, 0xA5, 0x7A, 0x44, 0xB1, 0x23, 0xC6, 0x55, + 0x09, 0xCF, 0xB7, 0xA6, 0xF6, 0x64, 0x1C, 0xDC, + 0xC3, 0xB5, 0x7F, 0xE6, 0x28, 0xC7, 0xB8, 0x19, + 0x2D, 0xB4, 0x4F, 0xFB, 0xF5, 0x79, 0x6A, 0x86, + 0x13, 0xB1, 0xFA, 0x12, 0x6F, 0x60, 0x76, 0x88, + 0x3C, 0x78, 0x3D, 0xC2, 0x4E, 0x2A, 0x44, 0x64, + 0xC4, 0x0B, 0x3A, 0x41, 0xCA, 0x70, 0xAE, 0x87, + 0x62, 0x08, 0x66, 0xCF, 0x4F, 0xCB, 0x2B, 0xD2, + 0x04, 0xBF, 0x5C, 0x28, 0x38, 0x12, 0xBA, 0x05, + 0x6A, 0xC0, 0xC3, 0x45, 0xE3, 0x79, 0xC4, 0xBA, + 0x24, 0xD7, 0x50, 0x90, 0x12, 0x79, 0xBB, 0x2F, + 0x3A, 0x16, 0xF6, 0x12, 0xBF, 0xAD, 0xB3, 0x57, + 0x03, 0x33, 0x2C, 0x7C, 0x13, 0x6F, 0x68, 0xEA, + 0xB6, 0x75, 0x5C, 0x66, 0xB6, 0xA4, 0xAD, 0x1A, + 0xAB, 0xA7, 0xB7, 0x68, 0xA5, 0x8A, 0xCA, 0xAC, + 0xC1, 0x0A, 0x45, 0x9A, 0x1C, 0xC8, 0xEF, 0x29, + 0x37, 0x7B, 0xC2, 0x00, 0xE4, 0xD3, 0x15, 0xA3, + 0x0A, 0x6B, 0xCC, 0x32, 0x56, 0xF9, 0x73, 0x4D, + 0x06, 0xE9, 0x77, 0x9C, 0xAA, 0x54, 0x42, 0xA9, + 0xA1, 0x60, 0x69, 0x08, 0x13, 0x77, 0xC7, 0x6E, + 0x75, 0x15, 0x43, 0x68, 0x07, 0x2D, 0xC4, 0x46, + 0xED, 0x6C, 0x8B, 0x8E, 0x62, 0x2A, 0x21, 0xE3, + 0x83, 0xCF, 0x9B, 0xA1, 0xFB, 0x43, 0x4E, 0x2E, + 0xCC, 0x81, 0xE7, 0xB7, 0x8C, 0xEE, 0x98, 0x6B, + 0x8F, 0xF7, 0x98, 0xAB, 0x18, 0xCF, 0x96, 0x34, + 0x54, 0x35, 0x46, 0x28, 0x4E, 0xDA, 0x2A, 0x26, + 0xB4, 0x7F, 0x05, 0xB7, 0x35, 0xBC, 0xDB, 0x12, + 0x02, 0x22, 0x00, 0x76, 0xDC, 0x8B, 0x4E, 0x4B, + 0x9F, 0x85, 0x35, 0x33, 0xC8, 0xF6, 0xC7, 0xFF, + 0x38, 0x81, 0x7B, 0xA4, 0x97, 0x12, 0x83, 0x57, + 0x85, 0xF1, 0x7F, 0x14, 0xCA, 0x01, 0xD0, 0xC1, + 0xC1, 0xE9, 0x88, 0x10, 0xFE, 0x0B, 0x36, 0xE5, + 0xB4, 0x27, 0x15, 0x7B, 0x94, 0x18, 0x44, 0x9C, + 0xED, 0xD6, 0x41, 0xA4, 0x29, 0x3C, 0x85, 0xC3, + 0x27, 0x00, 0x10, 0x2A, 0xCE, 0xC2, 0x2E, 0xBA, + 0xD9, 0x8E, 0xD1, 0x60, 0xA5, 0xF0, 0x27, 0xBD, + 0x4C, 0xDA, 0x57, 0xF1, 0xF3, 0x72, 0x0A, 0x12, + 0xC1, 0x34, 0x65, 0x4D, 0xD5, 0xE7, 0x3F, 0x82, + 0x96, 0x76, 0x49, 0x53, 0x90, 0xD0, 0xE7, 0x92, + 0x9D, 0x60, 0x34, 0xE9, 0xC5, 0x5F, 0x7D, 0x55, + 0xBA, 0x65, 0x8B, 0xC5, 0x87, 0x98, 0x8E, 0x8A, + 0xF9, 0x49, 0x60, 0xF6, 0xCF, 0xB8, 0xD5, 0xAF, + 0x7A, 0x00, 0x21, 0x53, 0x5A, 0x6E, 0x25, 0xE4, + 0x37, 0xD4, 0x9A, 0x78, 0x06, 0x98, 0xBE, 0x22, + 0xAC, 0x99, 0x53, 0x94, 0x9F, 0x57, 0x1B, 0x85, + 0xA6, 0x85, 0x72, 0x5F, 0x82, 0x07, 0xA2, 0xB0, + 0xAE, 0x84, 0x9B, 0x60, 0x1A, 0xB9, 0x1B, 0x15, + 0x9B, 0x3D, 0xF4, 0xA1, 0x54, 0xC2, 0x04, 0x1E, + 0x77, 0x60, 0x70, 0xAF, 0xC4, 0x29, 0x69, 0x32, + 0x23, 0x80, 0x91, 0x7C, 0x97, 0x51, 0x07, 0x99, + 0xF3, 0x14, 0x91, 0x31, 0x47, 0x7E, 0x16, 0x66, + 0x3D, 0x31, 0x74, 0xC7, 0xC1, 0xCA, 0xEA, 0x78, + 0x85, 0x35, 0xC6, 0xC0, 0x05, 0xA6, 0x4F, 0x28, + 0x68, 0x63, 0x1B, 0x31, 0xB6, 0x6E, 0x20, 0x5F, + 0xD3, 0x8C, 0x1D, 0x84, 0x54, 0x2D, 0x0F, 0x1B, + 0x57, 0x8F, 0x58, 0xC9, 0xBF, 0x5A, 0x0F, 0xAE, + 0xAB, 0x6A, 0xB6, 0x49, 0x48, 0x93, 0x05, 0x31, + 0x65, 0xEA, 0xFD, 0x46, 0x5F, 0xC6, 0x4A, 0x0C, + 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, + 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, + 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22, + 0x8A, 0x39, 0xE8, 0x7D, 0x53, 0x1F, 0x35, 0x27, + 0xC2, 0x07, 0xED, 0xCC, 0x1D, 0xB7, 0xFA, 0xDD, + 0xCF, 0x96, 0x28, 0x39, 0x18, 0x79, 0xB3, 0x35, + 0xC7, 0x07, 0x83, 0x9A, 0x0D, 0xB0, 0x51, 0xA8, + 0x86, 0x26, 0xED, 0x79, 0xD4, 0x51, 0x14, 0x08, + 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, + 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, + 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F + }; + const byte kyber1024_ct[] = { + 0xA6, 0xAF, 0x29, 0xD5, 0xF5, 0xB8, 0x0B, 0xD1, + 0x30, 0xF5, 0x18, 0xBA, 0xDD, 0xD6, 0xC8, 0xF1, + 0x75, 0x45, 0x41, 0x3D, 0x86, 0x0F, 0xB3, 0xDE, + 0x45, 0x19, 0x79, 0xEB, 0xFA, 0x5E, 0x4E, 0x31, + 0x12, 0xC7, 0xC0, 0xAD, 0xF9, 0x98, 0x24, 0xBB, + 0x52, 0x6F, 0x2C, 0x35, 0x50, 0x74, 0x8E, 0xD0, + 0xE1, 0x34, 0xF0, 0x45, 0x7A, 0x7C, 0x61, 0xF9, + 0xF5, 0x26, 0xF0, 0x02, 0xBA, 0xAD, 0xC0, 0x3F, + 0xC1, 0x3E, 0x38, 0x13, 0x12, 0x19, 0x51, 0x3C, + 0x3E, 0xDE, 0x06, 0x16, 0x61, 0xE7, 0x4F, 0x60, + 0x3C, 0x4F, 0xCF, 0x79, 0x51, 0xC8, 0xE5, 0x2C, + 0x9C, 0x21, 0x3B, 0x0D, 0x22, 0xD9, 0x29, 0x36, + 0x63, 0xD6, 0x69, 0xA6, 0xB5, 0x8E, 0xD8, 0xFC, + 0xEF, 0xCF, 0x82, 0x49, 0xD7, 0xBB, 0x52, 0x98, + 0xF5, 0x57, 0x61, 0x44, 0x5B, 0x2B, 0x83, 0xCE, + 0x7F, 0x00, 0x5C, 0xB0, 0x42, 0x48, 0xAE, 0xC8, + 0xBD, 0xA2, 0x2F, 0xD2, 0xD4, 0x2A, 0xA7, 0x66, + 0x32, 0x20, 0x14, 0xEA, 0x03, 0x8C, 0xC3, 0x2C, + 0x55, 0xC8, 0xE4, 0xB9, 0xE2, 0x8E, 0xC9, 0x11, + 0x9F, 0x52, 0x73, 0x41, 0xE4, 0xF6, 0x6A, 0x03, + 0x51, 0x21, 0x07, 0x3B, 0x85, 0xDE, 0x67, 0x06, + 0xDA, 0x19, 0xE0, 0x83, 0x8A, 0x9F, 0x33, 0xB7, + 0x19, 0xA6, 0x8F, 0x03, 0x9B, 0x66, 0x4D, 0xC0, + 0x02, 0x65, 0x9E, 0xAB, 0xFC, 0x39, 0x86, 0x79, + 0xAA, 0x70, 0x09, 0xCE, 0x0C, 0xD0, 0x1C, 0xDA, + 0xFB, 0x6C, 0xD2, 0xA2, 0x6F, 0xE4, 0x10, 0x16, + 0x72, 0xC9, 0x8F, 0xF5, 0x8F, 0x7C, 0x47, 0xD5, + 0xBD, 0xA2, 0x90, 0x66, 0x53, 0xB3, 0xA6, 0xF9, + 0x65, 0x1F, 0x7A, 0x12, 0x1E, 0xA7, 0x7E, 0xA7, + 0x47, 0x23, 0xFA, 0xE5, 0xB8, 0x73, 0xF9, 0xBB, + 0x7B, 0x66, 0x4F, 0x0C, 0x8A, 0x93, 0x83, 0x1E, + 0xF9, 0xD5, 0x1C, 0x7C, 0xC1, 0xEF, 0x44, 0xAC, + 0x0E, 0x55, 0xA5, 0x5C, 0xA7, 0x6D, 0x13, 0x7F, + 0xE9, 0xB7, 0x5F, 0x40, 0x50, 0x9C, 0xEF, 0x15, + 0x6E, 0x5A, 0xD1, 0x8F, 0x9F, 0xB9, 0x99, 0x68, + 0x00, 0x08, 0xE5, 0x47, 0xD5, 0x5E, 0xEC, 0xD5, + 0xB4, 0xD1, 0xCB, 0x1D, 0x9F, 0x07, 0x6C, 0xEC, + 0x21, 0x50, 0x1C, 0x74, 0x02, 0x50, 0x9E, 0xCB, + 0x77, 0xAF, 0xB2, 0xCB, 0x9A, 0x61, 0x34, 0x0A, + 0x8B, 0xD1, 0x51, 0x4C, 0x6E, 0x71, 0xB4, 0xAA, + 0x45, 0xE4, 0x7E, 0xC3, 0x75, 0x12, 0x27, 0x1B, + 0x91, 0x1F, 0x8F, 0xB4, 0x6C, 0x90, 0x82, 0xC9, + 0xDF, 0x07, 0x20, 0x4A, 0xBB, 0x5A, 0x50, 0xE6, + 0xE3, 0x64, 0x7A, 0x8A, 0xD4, 0xD8, 0xD5, 0xD7, + 0xBF, 0xF1, 0x9C, 0x8A, 0x50, 0x93, 0x08, 0xBC, + 0xFB, 0x89, 0x55, 0x36, 0xD0, 0x45, 0xCA, 0x2B, + 0x97, 0xCB, 0x16, 0xA2, 0x9B, 0xB7, 0x18, 0x1C, + 0xAD, 0x05, 0x09, 0xDD, 0xB9, 0x17, 0x35, 0x02, + 0x8E, 0xBA, 0x8C, 0x31, 0xD7, 0x4B, 0xD2, 0x75, + 0xEA, 0xA6, 0x5B, 0x53, 0x40, 0xB3, 0xA4, 0x3F, + 0xBF, 0xE0, 0xB3, 0x06, 0x1D, 0x6B, 0xAE, 0x7E, + 0x75, 0xB7, 0x09, 0x8C, 0xDA, 0xBE, 0x91, 0xD4, + 0xB3, 0x1E, 0x36, 0xC9, 0xAA, 0x7A, 0x82, 0x98, + 0x86, 0x2A, 0xD6, 0x3C, 0x8F, 0xD2, 0x82, 0xE0, + 0x3B, 0x46, 0x0B, 0x3A, 0xB4, 0x64, 0xCE, 0x0F, + 0x27, 0xB1, 0xC3, 0xD1, 0x11, 0x55, 0xAC, 0xAA, + 0x01, 0x1E, 0xB9, 0xE2, 0xAE, 0x3E, 0x6D, 0xDA, + 0x07, 0xD6, 0xF4, 0x91, 0x73, 0x7C, 0xBC, 0xE9, + 0xB0, 0x5F, 0x9B, 0xC5, 0x6B, 0xE2, 0x0E, 0x8D, + 0x32, 0x6B, 0xA1, 0x32, 0xC5, 0x7F, 0xB2, 0x35, + 0x16, 0x11, 0x44, 0x51, 0x9C, 0xDF, 0x40, 0x56, + 0x0F, 0xBE, 0x27, 0x9B, 0xDE, 0x41, 0x1E, 0x11, + 0x25, 0x31, 0xF8, 0x26, 0xD6, 0xAB, 0x10, 0xD4, + 0x54, 0x73, 0x50, 0xAD, 0xD2, 0xA9, 0xDE, 0x8D, + 0x62, 0xC2, 0xAC, 0x82, 0xCA, 0xBE, 0x68, 0x15, + 0x64, 0x6F, 0x4D, 0xC9, 0x74, 0x2B, 0xB0, 0xC2, + 0xA3, 0xF7, 0x7E, 0xC7, 0xB4, 0x6C, 0x6B, 0x53, + 0x76, 0x05, 0xFA, 0x31, 0x79, 0x8C, 0xD8, 0x92, + 0x81, 0x22, 0x1A, 0x33, 0xDF, 0xB9, 0x79, 0x6E, + 0x64, 0x43, 0x05, 0x63, 0x03, 0x32, 0xC2, 0xCB, + 0x93, 0x14, 0x08, 0xAB, 0x48, 0x1A, 0x16, 0xD9, + 0x53, 0xF6, 0xBE, 0xAE, 0x38, 0x91, 0xD6, 0xD9, + 0xAC, 0x1F, 0xAB, 0x38, 0x22, 0x2D, 0x92, 0x71, + 0x87, 0x2D, 0x9D, 0x0C, 0xAD, 0xB9, 0x1A, 0xBE, + 0x9B, 0x4E, 0x26, 0x5F, 0x75, 0xC6, 0xE5, 0xE8, + 0x29, 0xE1, 0x46, 0xC3, 0xD8, 0xCE, 0x1E, 0x9D, + 0x12, 0xE0, 0xD1, 0x29, 0x80, 0x19, 0x57, 0xF4, + 0x6B, 0x0D, 0x2D, 0xBE, 0x1F, 0x74, 0x9B, 0x1D, + 0x08, 0xE2, 0x34, 0x5F, 0x62, 0x39, 0xA7, 0x31, + 0x34, 0x2E, 0xB7, 0x5B, 0x0C, 0xF1, 0xBF, 0x41, + 0x17, 0x49, 0xBC, 0x2C, 0xAF, 0x28, 0x10, 0xB7, + 0x88, 0xC6, 0xB7, 0x23, 0x8B, 0x4D, 0x3D, 0xA2, + 0xD6, 0x31, 0x5C, 0xE9, 0x54, 0x2E, 0x24, 0x40, + 0x4F, 0x14, 0x57, 0x55, 0xA3, 0x0A, 0xB8, 0x51, + 0xE4, 0x44, 0x58, 0x41, 0xBD, 0x33, 0xF7, 0x16, + 0xA5, 0x86, 0x88, 0x48, 0x88, 0xEC, 0xC6, 0xBC, + 0x64, 0x98, 0xAA, 0x32, 0x91, 0x9A, 0xE8, 0x1D, + 0x20, 0xC2, 0x69, 0x73, 0xC2, 0xBD, 0x54, 0x58, + 0x2A, 0x0F, 0x6A, 0xD9, 0x8A, 0xBF, 0xD2, 0x62, + 0x7E, 0x15, 0x69, 0x0A, 0x72, 0x7E, 0x69, 0xF5, + 0x81, 0xDD, 0x2A, 0x71, 0x27, 0x98, 0x2A, 0x90, + 0xE3, 0x3E, 0x2D, 0x4A, 0x03, 0xFE, 0x33, 0x91, + 0x42, 0xC7, 0xE4, 0x4C, 0x32, 0x6A, 0xC4, 0x6E, + 0xD3, 0x95, 0xA2, 0x25, 0xD3, 0x03, 0x33, 0x89, + 0x91, 0x73, 0x28, 0xB4, 0x53, 0x16, 0xB1, 0x58, + 0x5A, 0x01, 0xB2, 0xC3, 0x04, 0xB2, 0x94, 0x4E, + 0x90, 0x3A, 0xBB, 0xB3, 0xEC, 0x56, 0x19, 0x44, + 0x1C, 0xFC, 0x89, 0x65, 0xA4, 0x46, 0xDF, 0x75, + 0xDE, 0xFA, 0x80, 0xC6, 0xE1, 0x5A, 0xDB, 0xD5, + 0x06, 0xB7, 0xAB, 0x2D, 0xE1, 0x2D, 0xDA, 0x9B, + 0xC8, 0x14, 0x41, 0xCF, 0xC8, 0x90, 0x52, 0xE2, + 0xE5, 0x80, 0x8F, 0x71, 0x26, 0xC6, 0xFD, 0x3A, + 0xC6, 0xAC, 0x80, 0x81, 0x25, 0x8A, 0x84, 0xA0, + 0x9A, 0xE5, 0x0F, 0x6C, 0xD7, 0xCC, 0x0F, 0x4A, + 0xF3, 0x36, 0xFD, 0x1D, 0x64, 0x3E, 0x99, 0x07, + 0x99, 0x96, 0x26, 0x8C, 0x2D, 0x32, 0xD9, 0x09, + 0xF2, 0x2E, 0x35, 0x04, 0xF0, 0x7F, 0xBB, 0x56, + 0x31, 0x96, 0xD4, 0x31, 0x2F, 0xDD, 0xB9, 0x33, + 0x5D, 0x5C, 0x1D, 0x36, 0xE8, 0xC5, 0xEE, 0xA2, + 0x27, 0x8D, 0xBA, 0x23, 0xB9, 0x4D, 0x19, 0x3C, + 0x94, 0x7C, 0xC4, 0x1C, 0xA9, 0x93, 0xDC, 0x7D, + 0xB1, 0x39, 0x63, 0x40, 0xAD, 0x9C, 0x4F, 0xE6, + 0x87, 0xDD, 0x7B, 0x8D, 0x0C, 0x7A, 0x51, 0x20, + 0xAE, 0x02, 0x04, 0xF2, 0xC6, 0x65, 0xBD, 0x5F, + 0x47, 0x3D, 0x64, 0x4C, 0x7F, 0xF2, 0x6B, 0xFF, + 0xBA, 0x7A, 0x36, 0x98, 0x08, 0x30, 0x70, 0x21, + 0x28, 0xA7, 0xE6, 0x61, 0xD6, 0x77, 0xA0, 0x92, + 0xA3, 0x6E, 0x74, 0x28, 0xA4, 0x13, 0x9F, 0xB2, + 0x9B, 0x00, 0x95, 0xCC, 0x11, 0x08, 0x6F, 0x44, + 0x7D, 0x2A, 0x9E, 0xF6, 0xC9, 0xB1, 0x61, 0xF1, + 0x89, 0xC6, 0x29, 0x9E, 0x08, 0x4C, 0xB7, 0xAA, + 0x00, 0xFA, 0xF7, 0x87, 0x79, 0x7B, 0xFB, 0x06, + 0x9F, 0xBC, 0x08, 0x7F, 0xDE, 0x26, 0x25, 0x2A, + 0x16, 0x64, 0xF1, 0x9C, 0x5A, 0x8A, 0x22, 0xEC, + 0x5E, 0xE1, 0xAE, 0xB0, 0x76, 0x35, 0x7B, 0x7D, + 0xC3, 0x7E, 0x6B, 0x0F, 0x15, 0x20, 0xF9, 0x58, + 0xF7, 0x85, 0x1B, 0xAC, 0xB9, 0x2C, 0x89, 0xFD, + 0x11, 0x4A, 0x72, 0xFE, 0xAC, 0x54, 0x65, 0x2D, + 0x45, 0xB0, 0x9E, 0x1A, 0xE7, 0x65, 0x1A, 0xBD, + 0x16, 0x4B, 0xCD, 0x53, 0x7D, 0x58, 0xFA, 0x39, + 0xD3, 0xEC, 0x8A, 0xCD, 0xCD, 0xF9, 0x84, 0x25, + 0x00, 0x58, 0x62, 0xFA, 0x59, 0x69, 0x2D, 0xE1, + 0x62, 0xB7, 0x7E, 0x62, 0x97, 0xC6, 0x62, 0x33, + 0x34, 0x84, 0x08, 0xA8, 0xAB, 0x69, 0x5C, 0xE2, + 0xF2, 0x72, 0x8D, 0xB9, 0xFB, 0xE2, 0x7E, 0x95, + 0x89, 0x67, 0xEC, 0x59, 0x74, 0x76, 0x7C, 0x5A, + 0x66, 0x02, 0x30, 0x74, 0xB4, 0xA7, 0x1A, 0xFD, + 0x26, 0x4A, 0xD2, 0x89, 0x0E, 0x97, 0x0A, 0x1F, + 0x31, 0xD6, 0xE3, 0x31, 0x1B, 0x73, 0x6F, 0x9F, + 0x94, 0x88, 0x79, 0x3D, 0xDC, 0x88, 0xF2, 0x34, + 0x58, 0x06, 0x42, 0x54, 0xC8, 0x2A, 0x1D, 0x9E, + 0x59, 0xEA, 0xD2, 0xFC, 0xEC, 0x40, 0xB4, 0x30, + 0x68, 0x7C, 0x4B, 0x7E, 0x28, 0x96, 0x09, 0x26, + 0xAF, 0xCA, 0xCC, 0x9B, 0xD7, 0x56, 0xA7, 0x10, + 0x88, 0xC7, 0x84, 0x50, 0xE2, 0x0A, 0x2E, 0x98, + 0x0A, 0xED, 0xE9, 0xEB, 0xED, 0xFE, 0x7F, 0xAB, + 0xD6, 0xAB, 0xFE, 0x96, 0xF9, 0x34, 0xC4, 0xB0, + 0x2C, 0x01, 0xCA, 0x19, 0x4D, 0x01, 0xB7, 0x3C, + 0x25, 0xD5, 0x99, 0x70, 0x39, 0xD3, 0xFC, 0xD0, + 0xF0, 0x99, 0x52, 0x1F, 0x70, 0xCA, 0xEE, 0x69, + 0x11, 0x0A, 0xC1, 0xFC, 0x5A, 0x99, 0x91, 0x7A, + 0xD7, 0x52, 0xFC, 0x96, 0xAD, 0xFA, 0xD7, 0x18, + 0x6D, 0x0A, 0x7C, 0x9C, 0xFE, 0x56, 0x01, 0xC0, + 0x75, 0x14, 0xEA, 0x64, 0x48, 0xD6, 0x61, 0xC5, + 0x7A, 0xA2, 0x02, 0x42, 0x10, 0x3C, 0x42, 0x76, + 0xA0, 0x70, 0xA4, 0x89, 0xA4, 0xCB, 0x6B, 0xCA, + 0x0F, 0x9E, 0xCC, 0x43, 0x79, 0xFB, 0x22, 0x02, + 0x15, 0xFD, 0x91, 0xF8, 0x10, 0x19, 0xD5, 0xB0, + 0xAE, 0x61, 0x93, 0x58, 0xB5, 0x24, 0x68, 0xF2, + 0x72, 0xC1, 0x78, 0xE3, 0xA7, 0x4C, 0xF6, 0x77, + 0x5A, 0xA9, 0x24, 0xFE, 0x32, 0x9C, 0x31, 0x75, + 0xD9, 0xE4, 0xC3, 0xE2, 0x1A, 0xB9, 0xEC, 0x83, + 0x6E, 0xDC, 0x3A, 0xCA, 0xB2, 0xE3, 0x89, 0x1E, + 0xE8, 0xDE, 0xDA, 0x51, 0x5D, 0x39, 0xAF, 0x9B, + 0x8D, 0xDD, 0x0E, 0xE7, 0xB0, 0x16, 0x4F, 0x80, + 0x5C, 0x38, 0x35, 0xF6, 0xD2, 0xBA, 0xBD, 0xB3, + 0x0E, 0xAB, 0x47, 0x56, 0xE7, 0xEC, 0x7F, 0x82, + 0x9E, 0xCE, 0x01, 0xE8, 0xEA, 0xDF, 0xBB, 0xED, + 0x12, 0xFC, 0x28, 0x3B, 0x3D, 0x4C, 0x69, 0xF5, + 0x75, 0xE7, 0xF8, 0x04, 0x17, 0x68, 0x9F, 0xDF, + 0xCF, 0xC7, 0xBE, 0x27, 0xEE, 0x3B, 0x8C, 0xDF, + 0x57, 0xAA, 0xEB, 0xEC, 0x4A, 0x95, 0xB7, 0xE5, + 0xBB, 0x58, 0x5B, 0x85, 0x22, 0x7F, 0x7C, 0x32, + 0xBE, 0x30, 0xDB, 0x3E, 0x65, 0xE4, 0x2E, 0x30, + 0xDC, 0xF5, 0xA5, 0xFA, 0x07, 0x3D, 0xBA, 0x39, + 0x9D, 0x94, 0x2F, 0x22, 0x22, 0xAD, 0xB9, 0xB9, + 0x89, 0x81, 0x02, 0xAF, 0xE5, 0x43, 0x2E, 0xDC, + 0x7F, 0x04, 0xAE, 0x34, 0xA8, 0xFE, 0xC2, 0xD8, + 0x1C, 0xB4, 0x9A, 0x9A, 0x9B, 0x43, 0x81, 0x4C, + 0xE7, 0x1D, 0x97, 0xF7, 0x26, 0xE2, 0xB1, 0xE8, + 0xF6, 0x4B, 0x50, 0xE6, 0x5D, 0xFB, 0x48, 0x16, + 0xE1, 0x2E, 0x82, 0xA3, 0x19, 0x74, 0x84, 0xA4, + 0xE9, 0xBB, 0xA4, 0xD2, 0xD6, 0x9E, 0x3F, 0x19, + 0xD0, 0xB7, 0x5C, 0x21, 0xE2, 0xBF, 0xFE, 0x9F, + 0xC0, 0xC9, 0x8C, 0xF4, 0x8A, 0x3A, 0xAF, 0x08, + 0xD4, 0x67, 0xF7, 0x26, 0x87, 0xDF, 0x01, 0x78, + 0x17, 0x4B, 0x78, 0x97, 0xF7, 0x34, 0x34, 0x9B, + 0x18, 0x1E, 0xCA, 0x86, 0xA5, 0x98, 0xA0, 0xC5, + 0xE8, 0xC2, 0x59, 0x46, 0xF2, 0x4D, 0xC5, 0x57, + 0x2B, 0xD3, 0x24, 0xA4, 0x04, 0x58, 0xA7, 0x88, + 0xE5, 0x13, 0x7F, 0x3C, 0x7A, 0x7C, 0x97, 0xFC, + 0x9F, 0x12, 0xA3, 0xC4, 0x63, 0xA8, 0xFE, 0x94, + 0x49, 0x10, 0x1C, 0xCE, 0x96, 0x6D, 0x7C, 0x00, + 0x93, 0x23, 0x93, 0x29, 0x98, 0xD5, 0x6E, 0xF4, + 0x30, 0xC7, 0x3B, 0xC2, 0x4F, 0x5D, 0x95, 0xF7, + 0x37, 0x85, 0x8D, 0xDC, 0x4F, 0x32, 0xC0, 0x13 + }; + const byte kyber1024_ss[] = { + 0xB1, 0x0F, 0x73, 0x94, 0x92, 0x6A, 0xD3, 0xB4, + 0x9C, 0x5D, 0x62, 0xD5, 0xAE, 0xB5, 0x31, 0xD5, + 0x75, 0x75, 0x38, 0xBC, 0xC0, 0xDA, 0x9E, 0x55, + 0x0D, 0x43, 0x8F, 0x1B, 0x61, 0xBD, 0x74, 0x19 + }; +#else + const byte kyber1024_pk[] = { + 0x68, 0xE6, 0xBC, 0x26, 0x8B, 0x9E, 0x36, 0x1B, + 0x8F, 0x6E, 0x0A, 0xBC, 0xFE, 0x88, 0x93, 0x37, + 0x87, 0x53, 0x48, 0xE4, 0x16, 0x4D, 0x66, 0x15, + 0xF3, 0x82, 0xC6, 0xC7, 0xC4, 0x17, 0x8F, 0x75, + 0x1F, 0x72, 0x2B, 0x21, 0x27, 0x74, 0x64, 0xFB, + 0x83, 0x1F, 0x8A, 0xA9, 0xA0, 0x18, 0xC1, 0x9A, + 0x51, 0xB0, 0x7F, 0xA0, 0x93, 0x9B, 0xA5, 0xC2, + 0x06, 0x68, 0x63, 0x23, 0xAF, 0xF6, 0xCA, 0x83, + 0x0B, 0x76, 0xE3, 0x80, 0x02, 0x63, 0x54, 0x47, + 0x7A, 0xAC, 0x58, 0xD8, 0x93, 0x1D, 0x80, 0x3B, + 0x6F, 0xAB, 0xD7, 0x12, 0xD1, 0x72, 0x81, 0x4A, + 0x54, 0xB8, 0x12, 0xE7, 0x92, 0x47, 0x94, 0xAA, + 0x40, 0x02, 0x49, 0xD5, 0xC0, 0x46, 0x8E, 0xA3, + 0x2F, 0xB2, 0x15, 0x54, 0xC5, 0x93, 0x67, 0x90, + 0x3C, 0x60, 0xA8, 0xB4, 0x8E, 0x23, 0x40, 0x71, + 0x2F, 0x7A, 0x04, 0x5A, 0x67, 0xC2, 0x3C, 0x72, + 0x41, 0x3A, 0x64, 0x69, 0xFC, 0x83, 0x69, 0xA2, + 0x91, 0x03, 0x3C, 0x46, 0xCE, 0xA3, 0x96, 0x76, + 0x65, 0x6B, 0x6C, 0xD8, 0x57, 0x99, 0x7C, 0x04, + 0x5C, 0x5A, 0xF0, 0x34, 0xE1, 0xE1, 0x14, 0x8A, + 0x8B, 0x40, 0xCD, 0x16, 0x68, 0x31, 0x93, 0xA3, + 0x60, 0x0C, 0x84, 0xFC, 0xE3, 0xB9, 0x65, 0x10, + 0x88, 0xDD, 0x09, 0x44, 0x57, 0x6C, 0x7E, 0xA4, + 0x07, 0x2D, 0x25, 0xF0, 0x67, 0xD2, 0x42, 0x7E, + 0x26, 0xD1, 0x86, 0xF9, 0xB7, 0x7A, 0x32, 0x79, + 0x05, 0x03, 0x3B, 0xA9, 0x40, 0x85, 0xA8, 0xAB, + 0x6A, 0x8A, 0x2B, 0x86, 0x08, 0x0C, 0x45, 0x2B, + 0x10, 0x90, 0xAC, 0xC9, 0x5A, 0x2B, 0x9F, 0x5A, + 0x6E, 0x61, 0x84, 0x6D, 0x63, 0x45, 0x66, 0xFA, + 0xC0, 0xB0, 0xFF, 0x35, 0x11, 0x18, 0x06, 0x18, + 0xAF, 0x98, 0x34, 0x87, 0x12, 0x2C, 0xFB, 0x63, + 0x61, 0xFF, 0x66, 0x0D, 0x5C, 0xA0, 0x0B, 0x9D, + 0x88, 0xB1, 0xDA, 0x18, 0x36, 0xC9, 0x78, 0x6E, + 0x55, 0x27, 0x6C, 0x88, 0x53, 0x8C, 0xC1, 0xD3, + 0x05, 0xFA, 0xAA, 0xB7, 0x79, 0x9A, 0x35, 0x46, + 0xF0, 0xBE, 0x6C, 0xC7, 0x00, 0xB0, 0x65, 0xB9, + 0x03, 0x4A, 0x91, 0x63, 0x31, 0x74, 0x66, 0xD9, + 0x83, 0xDD, 0xC2, 0xAA, 0x5B, 0xB0, 0x3F, 0x5B, + 0x67, 0x33, 0x48, 0xD5, 0x76, 0x02, 0x8A, 0x02, + 0x55, 0x15, 0x6C, 0x6A, 0x29, 0x74, 0x46, 0x98, + 0x34, 0xFB, 0x15, 0x73, 0x23, 0x74, 0x60, 0x54, + 0xC4, 0xBA, 0x96, 0x40, 0x30, 0x4A, 0x11, 0x63, + 0x04, 0xF0, 0x18, 0x21, 0x72, 0xBA, 0x8D, 0x03, + 0xAE, 0xDA, 0x39, 0x91, 0x6A, 0xF1, 0x18, 0xB9, + 0x84, 0x22, 0xB7, 0x16, 0x3A, 0xB6, 0xE2, 0x47, + 0xFC, 0xAA, 0x9D, 0x7C, 0x7C, 0xAE, 0x96, 0xBB, + 0x60, 0xB1, 0xD7, 0x86, 0x0E, 0x4C, 0x7F, 0x1D, + 0x92, 0x0D, 0x31, 0xA5, 0x41, 0x38, 0x82, 0x29, + 0xEE, 0x84, 0x2C, 0xA1, 0x59, 0x43, 0x89, 0x4A, + 0x56, 0xE5, 0x14, 0x0D, 0x29, 0x59, 0xC3, 0x6E, + 0xA2, 0x6E, 0x2D, 0xE0, 0x51, 0x21, 0x36, 0x6B, + 0xE4, 0x14, 0x02, 0x7B, 0xD1, 0x47, 0x81, 0x47, + 0x2E, 0xDD, 0xA4, 0x71, 0x10, 0xD0, 0xB3, 0xAE, + 0x2A, 0xA2, 0x55, 0xAB, 0x6D, 0x6F, 0xE0, 0x1C, + 0x26, 0xC2, 0x87, 0x63, 0x97, 0x6B, 0xBF, 0xA9, + 0x2F, 0x4F, 0x09, 0xA5, 0xB7, 0x3C, 0x47, 0x1F, + 0x8C, 0x9E, 0x53, 0x26, 0x92, 0x55, 0xDA, 0xC1, + 0xE0, 0x71, 0x5E, 0x87, 0x00, 0x06, 0x09, 0x70, + 0x60, 0xFF, 0x23, 0xC3, 0xAB, 0x43, 0xC4, 0x19, + 0xE4, 0x48, 0xC7, 0x30, 0x40, 0x10, 0xC4, 0x0F, + 0x3D, 0xC0, 0xB7, 0x26, 0x39, 0x2E, 0x46, 0x03, + 0x7E, 0xB9, 0x49, 0x04, 0x55, 0xE3, 0x49, 0xA4, + 0x35, 0xCD, 0xA9, 0x0A, 0xA3, 0xB7, 0x47, 0x8C, + 0x32, 0xE8, 0x72, 0xB2, 0xB8, 0x5C, 0xEC, 0xF0, + 0x3D, 0xDC, 0xD6, 0x16, 0x33, 0x78, 0xBF, 0x73, + 0xB1, 0x3B, 0x2E, 0x1A, 0x7B, 0x6E, 0xBC, 0x39, + 0x29, 0xEC, 0x08, 0x63, 0x89, 0x3F, 0x73, 0x8C, + 0x38, 0x9F, 0x3B, 0x3B, 0x2B, 0xB5, 0x4F, 0xC1, + 0x5B, 0xB7, 0x8A, 0x25, 0x31, 0xEE, 0xBC, 0xB7, + 0xBC, 0x10, 0x81, 0x07, 0x96, 0x59, 0x81, 0xD2, + 0x0A, 0x7D, 0x1A, 0x87, 0x21, 0xBA, 0x36, 0x40, + 0x03, 0x13, 0x2F, 0x03, 0x6C, 0xE4, 0x0C, 0x9E, + 0x75, 0x5B, 0x2A, 0xB4, 0x86, 0x1D, 0x04, 0xC1, + 0xBE, 0x0D, 0x53, 0x97, 0x91, 0x4B, 0x6C, 0xD4, + 0xAA, 0x40, 0x8C, 0x62, 0x2B, 0x21, 0xB1, 0x1B, + 0xA0, 0xEB, 0xA6, 0x17, 0x29, 0x59, 0x6F, 0x8B, + 0x0E, 0x82, 0x14, 0xAA, 0x4A, 0xA6, 0x01, 0x86, + 0x51, 0x07, 0xA2, 0xA7, 0x6A, 0xD7, 0xCC, 0x2F, + 0x97, 0x43, 0x00, 0x18, 0x28, 0xB8, 0x0B, 0x24, + 0x80, 0x2B, 0x98, 0x9D, 0x98, 0x42, 0x5E, 0x14, + 0x7C, 0x6D, 0x93, 0x32, 0xBA, 0x08, 0x4B, 0x8F, + 0xFB, 0x96, 0x27, 0xE3, 0xFB, 0xC4, 0xBE, 0x65, + 0x38, 0xEB, 0xDA, 0x1D, 0x9D, 0xB9, 0xB6, 0x75, + 0xB0, 0x16, 0x66, 0x57, 0x23, 0xD4, 0x11, 0x71, + 0x54, 0xF8, 0x13, 0x3E, 0xA9, 0x00, 0xCB, 0x47, + 0x0B, 0x1D, 0xC5, 0xB5, 0x7A, 0x78, 0x11, 0x16, + 0x72, 0x9E, 0xD6, 0x29, 0x45, 0x6E, 0x1A, 0x7D, + 0x6A, 0x37, 0x9F, 0x2E, 0x01, 0x0A, 0xCB, 0xEC, + 0x21, 0xFC, 0xD1, 0xC2, 0xB0, 0xBB, 0x61, 0xC3, + 0xDA, 0x6C, 0x73, 0x70, 0x5F, 0xD7, 0xB0, 0xC3, + 0x61, 0x2A, 0xC3, 0xB4, 0xA1, 0x2E, 0xC5, 0xD3, + 0x7F, 0x4C, 0x1A, 0x4A, 0x4D, 0xF8, 0x16, 0x6E, + 0xF6, 0x68, 0x9C, 0x06, 0xB5, 0xD4, 0xA6, 0x1A, + 0x52, 0x14, 0xAE, 0x5E, 0x5C, 0x28, 0x07, 0x4C, + 0xC5, 0xFE, 0x2A, 0x41, 0x2A, 0xC5, 0x14, 0x15, + 0x94, 0x28, 0x54, 0x85, 0x15, 0x6E, 0xCA, 0x65, + 0x64, 0x28, 0x37, 0x20, 0xB0, 0xBA, 0xD1, 0xD9, + 0x74, 0x5B, 0xA5, 0x77, 0x71, 0x1A, 0xB6, 0xF2, + 0x14, 0xC5, 0x2F, 0xB5, 0xBA, 0xAF, 0x8A, 0x1F, + 0x85, 0x33, 0x5A, 0xEB, 0x44, 0x37, 0x0B, 0x39, + 0xC5, 0x6C, 0x4C, 0x3D, 0x32, 0x75, 0x55, 0x60, + 0xCB, 0x2C, 0xA9, 0x45, 0x87, 0x51, 0xF1, 0x65, + 0x4B, 0x82, 0xC5, 0xE7, 0xFB, 0x0D, 0xB5, 0x16, + 0xBE, 0x1E, 0x42, 0x43, 0x3A, 0xD4, 0x7B, 0x6B, + 0xCC, 0xB3, 0x63, 0x61, 0xC4, 0x34, 0xEB, 0x59, + 0xCF, 0xF3, 0x38, 0x49, 0x54, 0xBB, 0x76, 0xF1, + 0x44, 0x14, 0x91, 0x67, 0x91, 0x3B, 0x85, 0x0F, + 0x75, 0x28, 0xBD, 0x76, 0x87, 0xB8, 0x8B, 0x64, + 0x84, 0xA6, 0x82, 0x68, 0x39, 0x97, 0x08, 0x42, + 0xA5, 0x93, 0xBB, 0x93, 0x45, 0x5A, 0x73, 0xBC, + 0x2C, 0x74, 0x62, 0x55, 0xC1, 0x3B, 0xC8, 0x52, + 0x1C, 0x73, 0x54, 0xE9, 0x8B, 0x98, 0x76, 0xA9, + 0x58, 0x6F, 0xC3, 0x7C, 0x5F, 0x24, 0x8D, 0xA0, + 0x55, 0x75, 0x8B, 0xD9, 0x61, 0x5E, 0x68, 0xBF, + 0x93, 0xEA, 0x0B, 0xA1, 0xD0, 0x22, 0xE2, 0xD2, + 0x22, 0x04, 0xA4, 0x45, 0x8C, 0xB6, 0x12, 0xB0, + 0x29, 0x41, 0xE8, 0x7A, 0xAC, 0xF1, 0xA3, 0x29, + 0x07, 0xD9, 0x8B, 0x4B, 0x13, 0xC6, 0xC9, 0xB4, + 0xAB, 0xD6, 0xDC, 0xCF, 0x66, 0x21, 0x06, 0xF5, + 0xD5, 0x8C, 0x2F, 0xC7, 0x51, 0x97, 0x35, 0x5E, + 0xB8, 0xCC, 0x41, 0x74, 0x2C, 0x6D, 0xA0, 0x03, + 0x40, 0x6D, 0x13, 0x56, 0xF8, 0xA0, 0x7A, 0x37, + 0x97, 0x88, 0x00, 0x60, 0x67, 0xCB, 0xF5, 0x2F, + 0x22, 0xD5, 0x3D, 0x68, 0x71, 0x22, 0x41, 0x09, + 0x34, 0x6E, 0xA8, 0x3B, 0x45, 0xCA, 0x60, 0xAF, + 0xEC, 0xCA, 0x0F, 0xA5, 0x67, 0x2B, 0x36, 0x64, + 0x89, 0xEB, 0x8D, 0xD1, 0xF7, 0x20, 0x4C, 0xDB, + 0x7D, 0x9B, 0xE1, 0x87, 0xF4, 0x39, 0x7B, 0x9B, + 0x4C, 0xA0, 0x31, 0x34, 0x75, 0x0D, 0xD5, 0x7D, + 0xAD, 0xE1, 0x88, 0x91, 0xCC, 0xA9, 0x47, 0x4B, + 0x65, 0x32, 0x60, 0x52, 0x50, 0xBC, 0xBB, 0x6E, + 0x02, 0x94, 0xEF, 0x95, 0x32, 0x6D, 0x25, 0x9B, + 0x08, 0xB2, 0x93, 0x8D, 0x8C, 0x59, 0xE2, 0x58, + 0x4B, 0x69, 0x10, 0x71, 0x85, 0xF3, 0x45, 0x30, + 0x24, 0x07, 0x35, 0x17, 0xC9, 0x89, 0x00, 0x9E, + 0xBB, 0x6B, 0x22, 0xED, 0xE9, 0x70, 0x43, 0x66, + 0xC6, 0x23, 0x2A, 0x62, 0x82, 0xF3, 0xBB, 0x09, + 0x08, 0x74, 0xA6, 0xFB, 0x0D, 0x84, 0x53, 0x6D, + 0x3F, 0x61, 0x3A, 0x21, 0xD1, 0x9D, 0x98, 0x44, + 0x17, 0xFA, 0xF0, 0x84, 0x6C, 0xB4, 0x28, 0x7B, + 0x3C, 0x70, 0x9F, 0x22, 0x62, 0x26, 0xA0, 0x9E, + 0x94, 0xFA, 0x89, 0x85, 0x43, 0x87, 0x4A, 0xE2, + 0x08, 0x11, 0xE3, 0x90, 0x80, 0xE6, 0xB2, 0xCE, + 0x49, 0x92, 0x26, 0xF5, 0x13, 0x8C, 0x14, 0x38, + 0x72, 0xDB, 0x86, 0xFB, 0xC2, 0x9C, 0xFD, 0xA2, + 0x9F, 0xD2, 0x26, 0x0E, 0xC7, 0xB9, 0xA2, 0x37, + 0xD1, 0x9A, 0xAB, 0x1B, 0x93, 0xE1, 0xDA, 0x4E, + 0xBC, 0x58, 0x9D, 0x82, 0x4C, 0x58, 0x90, 0x96, + 0x99, 0xD3, 0xE8, 0xBC, 0x7F, 0x53, 0xB3, 0x55, + 0xFA, 0x31, 0xE9, 0x6B, 0x1E, 0x35, 0x4A, 0xA4, + 0xB3, 0xC8, 0x4D, 0xF3, 0xC4, 0x7F, 0x80, 0xF9, + 0x32, 0xEA, 0x68, 0x5D, 0x96, 0xC5, 0xA5, 0x96, + 0x08, 0x22, 0xC6, 0x43, 0x64, 0x5F, 0x1A, 0x63, + 0xDD, 0x60, 0x8A, 0x09, 0x71, 0xC7, 0xF2, 0x15, + 0x7C, 0xA5, 0x24, 0x4D, 0x49, 0x2C, 0x01, 0x0B, + 0x71, 0xB7, 0x74, 0xC1, 0x0C, 0x07, 0xD3, 0xC8, + 0x4C, 0xA5, 0x4D, 0xE5, 0x00, 0x1F, 0xE0, 0xAC, + 0x4E, 0x69, 0x52, 0x81, 0x4E, 0xC1, 0x0F, 0xF9, + 0x8B, 0x19, 0xE7, 0x89, 0xC1, 0xAC, 0x68, 0x45, + 0xC7, 0x62, 0x80, 0x55, 0x27, 0x5C, 0x33, 0x34, + 0x41, 0x87, 0x1B, 0x8C, 0x30, 0x99, 0x9B, 0x05, + 0x31, 0x34, 0xC0, 0xE7, 0xB1, 0xAC, 0x6A, 0xA6, + 0x63, 0x12, 0xC1, 0xA5, 0xE2, 0x97, 0x92, 0x97, + 0x02, 0x56, 0x88, 0x14, 0x38, 0xDC, 0x46, 0x29, + 0x37, 0x4D, 0xFB, 0x9A, 0x91, 0x48, 0x62, 0x9D, + 0x14, 0x8C, 0x60, 0x1D, 0x4B, 0x6A, 0xA2, 0xC2, + 0x9C, 0xCE, 0xE8, 0x94, 0x7A, 0x27, 0x87, 0x0E, + 0x4C, 0x65, 0xE4, 0x12, 0x46, 0xD6, 0x25, 0x3D, + 0xC4, 0xF1, 0x3A, 0xEB, 0x31, 0xCD, 0x7E, 0x36, + 0x2F, 0x0F, 0x28, 0x84, 0xB9, 0xF7, 0x3B, 0xA9, + 0x93, 0x50, 0xAA, 0xA4, 0x02, 0x4A, 0x73, 0x14, + 0xBE, 0x69, 0x3A, 0xE4, 0x13, 0xA5, 0xCE, 0xA0, + 0x9A, 0x27, 0x27, 0x3A, 0x0B, 0xF6, 0xA4, 0x53, + 0xF8, 0x63, 0x9B, 0x48, 0x26, 0x8D, 0x21, 0xC9, + 0xAE, 0xC2, 0x62, 0xBE, 0x28, 0xC0, 0x7E, 0xA4, + 0xB9, 0x35, 0xA8, 0x69, 0x63, 0x26, 0xAA, 0x18, + 0xA5, 0x91, 0xCE, 0xE9, 0xC9, 0xF2, 0xA7, 0x29, + 0xBC, 0x50, 0x33, 0xDD, 0xE6, 0x37, 0x27, 0x38, + 0x85, 0x92, 0x1B, 0x73, 0xB8, 0x58, 0xA1, 0x88, + 0x33, 0xA7, 0xB8, 0x3A, 0x82, 0xFE, 0x02, 0xCC, + 0x33, 0x54, 0xC3, 0x0B, 0x0C, 0x4D, 0x0D, 0x3B, + 0xA1, 0x33, 0x1C, 0x6E, 0xC7, 0xA7, 0x0B, 0x7E, + 0x50, 0x3F, 0x76, 0x47, 0xA9, 0x52, 0xB0, 0x03, + 0x86, 0xCC, 0x90, 0xB3, 0x4A, 0x51, 0x4F, 0x99, + 0x5A, 0x56, 0x92, 0x05, 0xEB, 0x2A, 0x3F, 0xA7, + 0x9A, 0x78, 0x65, 0x21, 0x18, 0xD4, 0xBC, 0x48, + 0x46, 0x27, 0xCD, 0x02, 0x33, 0xBC, 0x5A, 0x35, + 0x16, 0x15, 0x0B, 0xAF, 0x6E, 0x10, 0x66, 0x5D, + 0xA7, 0x61, 0x8F, 0x28, 0x41, 0xB5, 0x02, 0x61, + 0x72, 0x48, 0x89, 0x3B, 0xAA, 0xB7, 0xE9, 0x03, + 0x89, 0x0D, 0xF0, 0xCA, 0xC2, 0x84, 0xCD, 0x11, + 0x65, 0xB4, 0x64, 0xC1, 0x8F, 0x4C, 0xFA, 0x8F, + 0x69, 0x2D, 0x3C, 0x8E, 0x8C, 0x73, 0x9F, 0xB3, + 0x78, 0x27, 0x74, 0x15, 0x61, 0xD5, 0xE7, 0x66, + 0x67, 0x51, 0x82, 0xFF, 0x83, 0xC9, 0x1C, 0xF0, + 0x33, 0x65, 0x88, 0x23, 0xD8, 0xFA, 0x91, 0xE1 + }; + const byte kyber1024_sk[] = { + 0x1B, 0xD1, 0x97, 0x95, 0x10, 0xBC, 0xE5, 0x03, + 0x1C, 0x0F, 0x99, 0x1D, 0xE0, 0x82, 0xC3, 0x89, + 0xA1, 0xBD, 0x15, 0x57, 0x19, 0x1D, 0x81, 0x03, + 0xBD, 0xCC, 0x04, 0xC1, 0x98, 0xAE, 0x3E, 0x95, + 0x95, 0xFD, 0xB6, 0x57, 0xB5, 0xC6, 0x39, 0x97, + 0x95, 0x79, 0xAE, 0x13, 0x5B, 0x11, 0xE2, 0x4D, + 0x36, 0xE5, 0x49, 0x44, 0x67, 0x83, 0x2E, 0x6A, + 0x8A, 0x46, 0xAA, 0x8F, 0x9F, 0xF9, 0x87, 0x4A, + 0x16, 0x00, 0x27, 0x84, 0x07, 0x71, 0x56, 0x2D, + 0x74, 0x61, 0xB1, 0x6C, 0x61, 0x87, 0xF3, 0xC2, + 0xC1, 0x9C, 0x9C, 0x8F, 0xE6, 0x41, 0x49, 0x7D, + 0x8A, 0x15, 0x5C, 0x51, 0x15, 0x7D, 0x91, 0x35, + 0xD9, 0xB4, 0x5D, 0x3C, 0x7C, 0x4C, 0xB1, 0x82, + 0x31, 0x8C, 0x11, 0xAD, 0x08, 0xB3, 0x9F, 0xAC, + 0x04, 0x15, 0xE6, 0xE2, 0x6D, 0xB3, 0x43, 0x91, + 0xDE, 0xC2, 0x47, 0x1B, 0x30, 0x3C, 0x05, 0x05, + 0xB6, 0xFE, 0x45, 0x6E, 0x81, 0x50, 0x21, 0xE8, + 0x2B, 0x5F, 0x2D, 0x16, 0x6F, 0xDF, 0xB5, 0xB9, + 0x23, 0xC8, 0x3A, 0x61, 0x67, 0x30, 0x28, 0xF0, + 0xBA, 0xE0, 0x28, 0x08, 0x9F, 0x47, 0x61, 0x67, + 0xE5, 0x75, 0x6C, 0xAA, 0x3E, 0xE0, 0xF1, 0x89, + 0xC6, 0x47, 0x81, 0xC7, 0x49, 0x27, 0xBC, 0xDB, + 0x67, 0xE7, 0x75, 0xCC, 0xA8, 0x5B, 0x44, 0xB8, + 0x8B, 0x10, 0x61, 0xD8, 0x96, 0x3F, 0xE4, 0x0B, + 0x1F, 0xB4, 0x34, 0x68, 0x20, 0x09, 0x0E, 0x5C, + 0x0B, 0x7C, 0x49, 0x08, 0x89, 0x33, 0xAD, 0xE3, + 0x82, 0x96, 0x88, 0x6C, 0x43, 0x45, 0x65, 0x7C, + 0x3F, 0x07, 0xCF, 0x1A, 0xE9, 0x76, 0xE6, 0xBA, + 0x77, 0x7E, 0xF0, 0x1F, 0xB9, 0xC3, 0xB0, 0xDC, + 0xF0, 0x58, 0x3A, 0xE5, 0x44, 0xCD, 0x80, 0x3A, + 0xC1, 0x39, 0xCA, 0x61, 0x9B, 0x8D, 0xCA, 0x13, + 0x1C, 0xD2, 0x73, 0xCE, 0xCB, 0x65, 0xBC, 0xEF, + 0x00, 0x29, 0x95, 0x12, 0xB0, 0x21, 0xBA, 0x1B, + 0x2F, 0xF2, 0x08, 0xEE, 0xBB, 0x08, 0xA6, 0x28, + 0x7E, 0xC4, 0x4C, 0x21, 0x7D, 0x94, 0x76, 0x40, + 0x42, 0x5C, 0x0E, 0x97, 0x13, 0x44, 0x5B, 0xC5, + 0x2B, 0xC3, 0xCD, 0x66, 0x01, 0x2C, 0x8C, 0xB7, + 0x10, 0xA2, 0xE8, 0xAD, 0x5F, 0xC5, 0x1C, 0x5B, + 0x71, 0xCE, 0x69, 0xE9, 0x6A, 0x22, 0x06, 0x6F, + 0x74, 0x4B, 0xBA, 0xB6, 0x47, 0x2F, 0xEF, 0x3A, + 0x5B, 0xCF, 0xD6, 0x1D, 0xF1, 0xF8, 0x6A, 0x95, + 0x64, 0x80, 0x03, 0x1A, 0x99, 0x0E, 0xE0, 0x7D, + 0xE5, 0x04, 0x5E, 0xBC, 0x49, 0x8F, 0x2D, 0x3A, + 0xBD, 0xE3, 0x28, 0xC4, 0x2A, 0xCB, 0x21, 0xAD, + 0x62, 0x5D, 0x7B, 0xCB, 0x85, 0x5A, 0x8A, 0x0A, + 0xCB, 0xA2, 0x85, 0x16, 0xD3, 0x5A, 0xAF, 0x92, + 0xBE, 0xB3, 0x9C, 0x46, 0xD8, 0xF4, 0xA0, 0x1F, + 0x73, 0x20, 0x40, 0xF2, 0x7C, 0x40, 0x9B, 0xA4, + 0x9A, 0x80, 0xCF, 0x95, 0x55, 0x7C, 0x73, 0x7C, + 0x4A, 0x45, 0x11, 0x2C, 0x52, 0x2C, 0x78, 0x04, + 0xC7, 0x7A, 0x3D, 0x44, 0x53, 0xBA, 0x82, 0xC1, + 0x49, 0x08, 0xBC, 0xC0, 0x47, 0x13, 0x7E, 0x5A, + 0x7B, 0x23, 0x92, 0xC8, 0x31, 0x25, 0x4C, 0x1A, + 0x59, 0x54, 0xC8, 0x8C, 0xCF, 0xA5, 0xD8, 0x8B, + 0x3B, 0x93, 0x31, 0xBE, 0xF4, 0x62, 0x55, 0x09, + 0x14, 0xD1, 0x84, 0x17, 0x59, 0x40, 0xB4, 0xE9, + 0xB7, 0xAD, 0x3D, 0x44, 0x2E, 0xA9, 0x68, 0xB6, + 0xA4, 0x0A, 0x19, 0x72, 0x71, 0x5B, 0xCB, 0x72, + 0x82, 0x14, 0xA1, 0xBE, 0x8E, 0x04, 0x1D, 0xF5, + 0x72, 0xCC, 0x2D, 0x01, 0x6F, 0xFD, 0x6B, 0x0A, + 0xFA, 0xC8, 0x02, 0xBA, 0x97, 0x5A, 0x4A, 0x31, + 0xA4, 0x18, 0x40, 0x2E, 0x6B, 0x01, 0x41, 0xFA, + 0xD6, 0x48, 0x49, 0xE1, 0x6C, 0x80, 0x37, 0x23, + 0xA7, 0x74, 0x2B, 0x08, 0x2A, 0x7A, 0x56, 0x26, + 0x4E, 0x02, 0x60, 0xA2, 0x4A, 0x66, 0x42, 0x3D, + 0x52, 0x64, 0x82, 0x07, 0x04, 0x06, 0x5C, 0xAC, + 0x41, 0x10, 0x72, 0x48, 0x64, 0x37, 0xCA, 0xA5, + 0x47, 0x2D, 0x73, 0x3C, 0x64, 0x14, 0x5F, 0x10, + 0x0B, 0x0B, 0x16, 0xC0, 0xAB, 0x0D, 0xB8, 0x7C, + 0xC5, 0x64, 0x26, 0xC1, 0x1A, 0x69, 0x45, 0x25, + 0x95, 0x8D, 0xB8, 0x31, 0x59, 0x31, 0xC5, 0x09, + 0xD6, 0x3C, 0x48, 0x10, 0xBB, 0xA7, 0x68, 0xCA, + 0xCB, 0xF9, 0xCD, 0x85, 0x7B, 0x0D, 0x66, 0xD6, + 0x5A, 0xF7, 0xEB, 0xAC, 0x18, 0xB7, 0x9C, 0xBE, + 0xBC, 0x0A, 0x49, 0xB5, 0xC0, 0x5A, 0xA8, 0x7F, + 0x8D, 0xE8, 0x25, 0xA6, 0xA1, 0x13, 0x5F, 0xE8, + 0x64, 0xCF, 0x6C, 0x99, 0x8D, 0xDC, 0x37, 0xFC, + 0x01, 0x56, 0xBB, 0x52, 0xA7, 0x8E, 0xC2, 0x99, + 0xCA, 0x53, 0x1C, 0xF8, 0x75, 0xBE, 0xFA, 0x48, + 0x75, 0x72, 0x60, 0x28, 0xED, 0x37, 0x91, 0xBA, + 0x31, 0xC0, 0x0E, 0xC7, 0x40, 0x20, 0xCA, 0xA1, + 0x7F, 0x91, 0x19, 0x63, 0x96, 0xCF, 0xE5, 0x88, + 0x6E, 0x51, 0x1A, 0x52, 0xD0, 0xCA, 0x8D, 0xEE, + 0x25, 0xBF, 0x4E, 0x77, 0xCB, 0x92, 0xE6, 0x36, + 0x40, 0x64, 0x6D, 0xE2, 0x58, 0x6D, 0xCD, 0x00, + 0x14, 0x16, 0xCC, 0xC1, 0xEC, 0x30, 0x7C, 0xA2, + 0x75, 0x6D, 0xBE, 0xA8, 0x26, 0x36, 0x14, 0x51, + 0x3C, 0xA0, 0x5E, 0x70, 0xC7, 0x54, 0xF5, 0x6A, + 0x2C, 0x3F, 0xF7, 0x42, 0x94, 0x8C, 0x34, 0xAF, + 0x49, 0x34, 0x2F, 0x55, 0x03, 0x4C, 0x1C, 0x70, + 0xE0, 0x79, 0x6D, 0x26, 0xB2, 0x30, 0x35, 0x6B, + 0x1B, 0x74, 0xA1, 0x6C, 0x0B, 0x28, 0x37, 0x4B, + 0x79, 0xC1, 0x6B, 0x04, 0x96, 0xCA, 0x20, 0x12, + 0x3E, 0x6C, 0x67, 0x62, 0xD9, 0x01, 0xE2, 0x76, + 0x08, 0x5D, 0x81, 0x2A, 0xE9, 0xC3, 0x45, 0xAD, + 0xF5, 0x09, 0xDD, 0xC7, 0x87, 0x61, 0x62, 0xCE, + 0x34, 0xA6, 0x00, 0x3F, 0xB4, 0x5C, 0xD8, 0x66, + 0x0F, 0xDD, 0x46, 0x71, 0x6E, 0x82, 0x55, 0x06, + 0x62, 0x37, 0x5D, 0xB5, 0x5E, 0x63, 0xA2, 0x0F, + 0x01, 0x2A, 0x71, 0xE3, 0xD9, 0x72, 0x25, 0xC5, + 0x8F, 0x52, 0x34, 0xC6, 0xB5, 0x3A, 0x8A, 0xA0, + 0x33, 0x9C, 0xEF, 0xD4, 0x84, 0xE4, 0x7A, 0x3D, + 0xE6, 0x49, 0x88, 0x05, 0xC2, 0x82, 0xE0, 0x76, + 0x8E, 0x35, 0xC7, 0x5C, 0x20, 0x07, 0x76, 0x5C, + 0xA1, 0x7F, 0x01, 0xD2, 0x85, 0xA7, 0xC3, 0x04, + 0x8B, 0xC7, 0x2B, 0xA3, 0xAA, 0x57, 0x7C, 0x1C, + 0x43, 0x2A, 0x3C, 0x76, 0x9D, 0x21, 0xB8, 0x6C, + 0x01, 0x8F, 0x81, 0x7A, 0x26, 0x67, 0x35, 0x1C, + 0x2B, 0xC8, 0x5F, 0xA5, 0x53, 0x6F, 0xA7, 0xA6, + 0xCD, 0xEF, 0xCC, 0x0D, 0xD6, 0xF9, 0x1B, 0xDD, + 0xE8, 0x9D, 0x4E, 0x51, 0x6C, 0x8B, 0x75, 0x40, + 0xA7, 0xDC, 0x3F, 0xC4, 0x89, 0x8A, 0xB3, 0x30, + 0x08, 0xBC, 0xC1, 0x9F, 0x9E, 0x46, 0x3D, 0xE9, + 0x36, 0x26, 0x99, 0x4C, 0xC9, 0x27, 0xA3, 0x4A, + 0x9D, 0x70, 0x40, 0xC1, 0x31, 0xC8, 0x1F, 0x07, + 0x83, 0xDD, 0x68, 0x84, 0x29, 0x43, 0xC5, 0x5D, + 0xC5, 0x77, 0xD3, 0x67, 0xA4, 0x01, 0x83, 0x94, + 0xBB, 0x11, 0x60, 0x72, 0xAC, 0x65, 0xF2, 0xEB, + 0x9B, 0x4F, 0xF5, 0x8F, 0x41, 0x15, 0x40, 0x1B, + 0x11, 0x7D, 0x91, 0x3B, 0x75, 0x75, 0x57, 0x57, + 0x19, 0x39, 0x0C, 0x9E, 0x80, 0x06, 0x97, 0xA8, + 0x28, 0xB1, 0x25, 0x83, 0xF9, 0x4A, 0x2F, 0x8F, + 0x72, 0x0A, 0x6E, 0x87, 0x00, 0xFD, 0x40, 0x7D, + 0x73, 0xA4, 0xC7, 0x97, 0x55, 0x2B, 0x98, 0x75, + 0x7A, 0x5F, 0x57, 0x82, 0xA9, 0x50, 0x95, 0xDF, + 0xA5, 0xAC, 0xB7, 0xD9, 0x3A, 0x80, 0x5C, 0x30, + 0x18, 0x30, 0x4E, 0x5D, 0x22, 0xB7, 0x6F, 0xA5, + 0xAA, 0x51, 0x96, 0xB7, 0xEB, 0xDB, 0x7A, 0xA0, + 0xA5, 0x2D, 0x06, 0xAC, 0x4B, 0x9E, 0x4C, 0x00, + 0xC0, 0xF8, 0x5C, 0xEC, 0xB0, 0xBD, 0x95, 0x56, + 0x2D, 0x56, 0x23, 0x30, 0x78, 0x51, 0x43, 0xC7, + 0xF1, 0x29, 0xFA, 0xF9, 0x19, 0x48, 0xB0, 0xC8, + 0x8C, 0x60, 0x82, 0xE0, 0xF3, 0x03, 0x54, 0x74, + 0x12, 0x6E, 0x23, 0x6B, 0x80, 0xD2, 0x22, 0xD2, + 0x81, 0x4F, 0x6A, 0xF2, 0x4B, 0xD5, 0xD1, 0x19, + 0x86, 0x33, 0x1F, 0xAF, 0xC2, 0x1E, 0xC8, 0x4C, + 0x93, 0xA8, 0x81, 0x24, 0x72, 0x51, 0x10, 0x5A, + 0x6A, 0xB4, 0x35, 0xD7, 0x6E, 0xFD, 0x88, 0x9D, + 0x27, 0xC0, 0x0C, 0x2A, 0x14, 0xBD, 0x04, 0xA6, + 0xBD, 0x0B, 0x20, 0x07, 0xB5, 0x51, 0x5A, 0x75, + 0xF1, 0x14, 0xD1, 0x92, 0x10, 0xBC, 0x70, 0x50, + 0x85, 0x33, 0x53, 0x2F, 0x1B, 0x0A, 0x30, 0x0C, + 0x8B, 0x12, 0xF0, 0x0A, 0xC4, 0xFC, 0x46, 0x0F, + 0xA8, 0x4A, 0x2D, 0x15, 0x21, 0xBD, 0x0B, 0x42, + 0x88, 0xD9, 0x2D, 0xD1, 0x2B, 0x17, 0x3E, 0x28, + 0x8B, 0x8A, 0x30, 0xC4, 0x9C, 0xA3, 0x56, 0x21, + 0x3C, 0x22, 0x4A, 0x03, 0x64, 0xDC, 0xF1, 0x8F, + 0xF0, 0x70, 0x0E, 0xAE, 0xBB, 0xB6, 0xD2, 0x02, + 0x03, 0x71, 0x14, 0x5A, 0x8A, 0xE8, 0x79, 0x59, + 0x72, 0x2D, 0x34, 0xF3, 0x3F, 0xAE, 0x00, 0x57, + 0x2D, 0xB3, 0xAC, 0x9A, 0x7B, 0xBD, 0xD4, 0x0B, + 0x75, 0x3C, 0x57, 0xA7, 0x3B, 0xA1, 0xB5, 0x43, + 0x12, 0x8A, 0x20, 0xDC, 0x98, 0x31, 0x69, 0x39, + 0xFE, 0xB8, 0x14, 0xCB, 0x17, 0x6C, 0x41, 0x64, + 0x77, 0x01, 0x2A, 0x97, 0x23, 0x67, 0x83, 0x46, + 0x7C, 0x0E, 0x15, 0x97, 0x33, 0xC5, 0xA0, 0x31, + 0x3C, 0xB2, 0x78, 0xD2, 0x31, 0x41, 0x2C, 0xB0, + 0x42, 0xC8, 0xE1, 0x16, 0xD6, 0x65, 0xA3, 0x7E, + 0xA4, 0x86, 0xEE, 0x07, 0x75, 0x44, 0xFC, 0x09, + 0xD5, 0x71, 0x56, 0x46, 0x3C, 0x1B, 0x10, 0xDC, + 0x49, 0x41, 0x0A, 0x3C, 0x0F, 0xE4, 0xB2, 0xEF, + 0x57, 0x1F, 0xAA, 0x56, 0x7A, 0xB5, 0x01, 0x59, + 0x58, 0xDB, 0xCF, 0x2C, 0xFA, 0x2C, 0xA7, 0x33, + 0x96, 0x3C, 0x34, 0x45, 0x7F, 0x85, 0x99, 0xCA, + 0x3A, 0xC8, 0xD2, 0xCB, 0x99, 0xA4, 0x57, 0x11, + 0x4E, 0x55, 0x9A, 0x9F, 0x82, 0xC4, 0x28, 0x47, + 0x99, 0xDE, 0x66, 0x15, 0x0A, 0x26, 0x56, 0x8F, + 0x95, 0xAF, 0x70, 0x65, 0x78, 0x8E, 0x62, 0x86, + 0x84, 0x60, 0x8C, 0x74, 0xDA, 0x57, 0x17, 0xB8, + 0x1F, 0x5D, 0x5C, 0x2F, 0x7D, 0x1A, 0x6C, 0xC0, + 0x71, 0x7C, 0xAB, 0xD2, 0xBA, 0xD2, 0x49, 0xB0, + 0x87, 0x58, 0x8F, 0x75, 0x65, 0x23, 0xFD, 0xF0, + 0x4E, 0x7F, 0x31, 0x76, 0x1B, 0x01, 0xAC, 0xB7, + 0xF6, 0x7E, 0xBF, 0x87, 0x62, 0xF5, 0xCB, 0x0B, + 0xC3, 0x72, 0xB4, 0xDD, 0x08, 0x3B, 0x06, 0x66, + 0x74, 0x02, 0x20, 0x4D, 0x08, 0x73, 0x9E, 0xB7, + 0x95, 0x20, 0xA9, 0x2C, 0x87, 0xC7, 0xE2, 0x2C, + 0x78, 0x77, 0x97, 0x3A, 0x0B, 0x79, 0xB0, 0xC7, + 0xAC, 0xCB, 0xBB, 0xAF, 0x88, 0xFB, 0xB0, 0x3D, + 0x4B, 0x6F, 0x5B, 0xB9, 0x87, 0x8A, 0xAB, 0x81, + 0x02, 0xF6, 0xB9, 0x1A, 0x27, 0x00, 0xD0, 0xEA, + 0xC3, 0x1D, 0x26, 0x03, 0x5B, 0xC1, 0x8A, 0x66, + 0xCB, 0x90, 0xEA, 0x24, 0x3F, 0xCF, 0x1A, 0x9A, + 0x1D, 0x24, 0x0C, 0x29, 0x0A, 0x54, 0x82, 0xA1, + 0x55, 0xC8, 0x00, 0x91, 0x13, 0xA0, 0x82, 0xDA, + 0xD5, 0xCE, 0x5C, 0xD2, 0x53, 0x03, 0x37, 0x02, + 0x51, 0x59, 0x3C, 0x12, 0x11, 0xAA, 0xB6, 0xC8, + 0x44, 0xC2, 0xC4, 0xB7, 0x99, 0xD4, 0x92, 0x80, + 0x00, 0x74, 0x63, 0x89, 0x48, 0xCB, 0x64, 0x31, + 0x0F, 0x38, 0xB4, 0x88, 0x51, 0xA6, 0x9E, 0x22, + 0x28, 0x70, 0x3C, 0x97, 0xFC, 0x20, 0x4E, 0x54, + 0x37, 0x21, 0x79, 0xAA, 0x84, 0xDE, 0xC1, 0xAC, + 0x68, 0xE6, 0xBC, 0x26, 0x8B, 0x9E, 0x36, 0x1B, + 0x8F, 0x6E, 0x0A, 0xBC, 0xFE, 0x88, 0x93, 0x37, + 0x87, 0x53, 0x48, 0xE4, 0x16, 0x4D, 0x66, 0x15, + 0xF3, 0x82, 0xC6, 0xC7, 0xC4, 0x17, 0x8F, 0x75, + 0x1F, 0x72, 0x2B, 0x21, 0x27, 0x74, 0x64, 0xFB, + 0x83, 0x1F, 0x8A, 0xA9, 0xA0, 0x18, 0xC1, 0x9A, + 0x51, 0xB0, 0x7F, 0xA0, 0x93, 0x9B, 0xA5, 0xC2, + 0x06, 0x68, 0x63, 0x23, 0xAF, 0xF6, 0xCA, 0x83, + 0x0B, 0x76, 0xE3, 0x80, 0x02, 0x63, 0x54, 0x47, + 0x7A, 0xAC, 0x58, 0xD8, 0x93, 0x1D, 0x80, 0x3B, + 0x6F, 0xAB, 0xD7, 0x12, 0xD1, 0x72, 0x81, 0x4A, + 0x54, 0xB8, 0x12, 0xE7, 0x92, 0x47, 0x94, 0xAA, + 0x40, 0x02, 0x49, 0xD5, 0xC0, 0x46, 0x8E, 0xA3, + 0x2F, 0xB2, 0x15, 0x54, 0xC5, 0x93, 0x67, 0x90, + 0x3C, 0x60, 0xA8, 0xB4, 0x8E, 0x23, 0x40, 0x71, + 0x2F, 0x7A, 0x04, 0x5A, 0x67, 0xC2, 0x3C, 0x72, + 0x41, 0x3A, 0x64, 0x69, 0xFC, 0x83, 0x69, 0xA2, + 0x91, 0x03, 0x3C, 0x46, 0xCE, 0xA3, 0x96, 0x76, + 0x65, 0x6B, 0x6C, 0xD8, 0x57, 0x99, 0x7C, 0x04, + 0x5C, 0x5A, 0xF0, 0x34, 0xE1, 0xE1, 0x14, 0x8A, + 0x8B, 0x40, 0xCD, 0x16, 0x68, 0x31, 0x93, 0xA3, + 0x60, 0x0C, 0x84, 0xFC, 0xE3, 0xB9, 0x65, 0x10, + 0x88, 0xDD, 0x09, 0x44, 0x57, 0x6C, 0x7E, 0xA4, + 0x07, 0x2D, 0x25, 0xF0, 0x67, 0xD2, 0x42, 0x7E, + 0x26, 0xD1, 0x86, 0xF9, 0xB7, 0x7A, 0x32, 0x79, + 0x05, 0x03, 0x3B, 0xA9, 0x40, 0x85, 0xA8, 0xAB, + 0x6A, 0x8A, 0x2B, 0x86, 0x08, 0x0C, 0x45, 0x2B, + 0x10, 0x90, 0xAC, 0xC9, 0x5A, 0x2B, 0x9F, 0x5A, + 0x6E, 0x61, 0x84, 0x6D, 0x63, 0x45, 0x66, 0xFA, + 0xC0, 0xB0, 0xFF, 0x35, 0x11, 0x18, 0x06, 0x18, + 0xAF, 0x98, 0x34, 0x87, 0x12, 0x2C, 0xFB, 0x63, + 0x61, 0xFF, 0x66, 0x0D, 0x5C, 0xA0, 0x0B, 0x9D, + 0x88, 0xB1, 0xDA, 0x18, 0x36, 0xC9, 0x78, 0x6E, + 0x55, 0x27, 0x6C, 0x88, 0x53, 0x8C, 0xC1, 0xD3, + 0x05, 0xFA, 0xAA, 0xB7, 0x79, 0x9A, 0x35, 0x46, + 0xF0, 0xBE, 0x6C, 0xC7, 0x00, 0xB0, 0x65, 0xB9, + 0x03, 0x4A, 0x91, 0x63, 0x31, 0x74, 0x66, 0xD9, + 0x83, 0xDD, 0xC2, 0xAA, 0x5B, 0xB0, 0x3F, 0x5B, + 0x67, 0x33, 0x48, 0xD5, 0x76, 0x02, 0x8A, 0x02, + 0x55, 0x15, 0x6C, 0x6A, 0x29, 0x74, 0x46, 0x98, + 0x34, 0xFB, 0x15, 0x73, 0x23, 0x74, 0x60, 0x54, + 0xC4, 0xBA, 0x96, 0x40, 0x30, 0x4A, 0x11, 0x63, + 0x04, 0xF0, 0x18, 0x21, 0x72, 0xBA, 0x8D, 0x03, + 0xAE, 0xDA, 0x39, 0x91, 0x6A, 0xF1, 0x18, 0xB9, + 0x84, 0x22, 0xB7, 0x16, 0x3A, 0xB6, 0xE2, 0x47, + 0xFC, 0xAA, 0x9D, 0x7C, 0x7C, 0xAE, 0x96, 0xBB, + 0x60, 0xB1, 0xD7, 0x86, 0x0E, 0x4C, 0x7F, 0x1D, + 0x92, 0x0D, 0x31, 0xA5, 0x41, 0x38, 0x82, 0x29, + 0xEE, 0x84, 0x2C, 0xA1, 0x59, 0x43, 0x89, 0x4A, + 0x56, 0xE5, 0x14, 0x0D, 0x29, 0x59, 0xC3, 0x6E, + 0xA2, 0x6E, 0x2D, 0xE0, 0x51, 0x21, 0x36, 0x6B, + 0xE4, 0x14, 0x02, 0x7B, 0xD1, 0x47, 0x81, 0x47, + 0x2E, 0xDD, 0xA4, 0x71, 0x10, 0xD0, 0xB3, 0xAE, + 0x2A, 0xA2, 0x55, 0xAB, 0x6D, 0x6F, 0xE0, 0x1C, + 0x26, 0xC2, 0x87, 0x63, 0x97, 0x6B, 0xBF, 0xA9, + 0x2F, 0x4F, 0x09, 0xA5, 0xB7, 0x3C, 0x47, 0x1F, + 0x8C, 0x9E, 0x53, 0x26, 0x92, 0x55, 0xDA, 0xC1, + 0xE0, 0x71, 0x5E, 0x87, 0x00, 0x06, 0x09, 0x70, + 0x60, 0xFF, 0x23, 0xC3, 0xAB, 0x43, 0xC4, 0x19, + 0xE4, 0x48, 0xC7, 0x30, 0x40, 0x10, 0xC4, 0x0F, + 0x3D, 0xC0, 0xB7, 0x26, 0x39, 0x2E, 0x46, 0x03, + 0x7E, 0xB9, 0x49, 0x04, 0x55, 0xE3, 0x49, 0xA4, + 0x35, 0xCD, 0xA9, 0x0A, 0xA3, 0xB7, 0x47, 0x8C, + 0x32, 0xE8, 0x72, 0xB2, 0xB8, 0x5C, 0xEC, 0xF0, + 0x3D, 0xDC, 0xD6, 0x16, 0x33, 0x78, 0xBF, 0x73, + 0xB1, 0x3B, 0x2E, 0x1A, 0x7B, 0x6E, 0xBC, 0x39, + 0x29, 0xEC, 0x08, 0x63, 0x89, 0x3F, 0x73, 0x8C, + 0x38, 0x9F, 0x3B, 0x3B, 0x2B, 0xB5, 0x4F, 0xC1, + 0x5B, 0xB7, 0x8A, 0x25, 0x31, 0xEE, 0xBC, 0xB7, + 0xBC, 0x10, 0x81, 0x07, 0x96, 0x59, 0x81, 0xD2, + 0x0A, 0x7D, 0x1A, 0x87, 0x21, 0xBA, 0x36, 0x40, + 0x03, 0x13, 0x2F, 0x03, 0x6C, 0xE4, 0x0C, 0x9E, + 0x75, 0x5B, 0x2A, 0xB4, 0x86, 0x1D, 0x04, 0xC1, + 0xBE, 0x0D, 0x53, 0x97, 0x91, 0x4B, 0x6C, 0xD4, + 0xAA, 0x40, 0x8C, 0x62, 0x2B, 0x21, 0xB1, 0x1B, + 0xA0, 0xEB, 0xA6, 0x17, 0x29, 0x59, 0x6F, 0x8B, + 0x0E, 0x82, 0x14, 0xAA, 0x4A, 0xA6, 0x01, 0x86, + 0x51, 0x07, 0xA2, 0xA7, 0x6A, 0xD7, 0xCC, 0x2F, + 0x97, 0x43, 0x00, 0x18, 0x28, 0xB8, 0x0B, 0x24, + 0x80, 0x2B, 0x98, 0x9D, 0x98, 0x42, 0x5E, 0x14, + 0x7C, 0x6D, 0x93, 0x32, 0xBA, 0x08, 0x4B, 0x8F, + 0xFB, 0x96, 0x27, 0xE3, 0xFB, 0xC4, 0xBE, 0x65, + 0x38, 0xEB, 0xDA, 0x1D, 0x9D, 0xB9, 0xB6, 0x75, + 0xB0, 0x16, 0x66, 0x57, 0x23, 0xD4, 0x11, 0x71, + 0x54, 0xF8, 0x13, 0x3E, 0xA9, 0x00, 0xCB, 0x47, + 0x0B, 0x1D, 0xC5, 0xB5, 0x7A, 0x78, 0x11, 0x16, + 0x72, 0x9E, 0xD6, 0x29, 0x45, 0x6E, 0x1A, 0x7D, + 0x6A, 0x37, 0x9F, 0x2E, 0x01, 0x0A, 0xCB, 0xEC, + 0x21, 0xFC, 0xD1, 0xC2, 0xB0, 0xBB, 0x61, 0xC3, + 0xDA, 0x6C, 0x73, 0x70, 0x5F, 0xD7, 0xB0, 0xC3, + 0x61, 0x2A, 0xC3, 0xB4, 0xA1, 0x2E, 0xC5, 0xD3, + 0x7F, 0x4C, 0x1A, 0x4A, 0x4D, 0xF8, 0x16, 0x6E, + 0xF6, 0x68, 0x9C, 0x06, 0xB5, 0xD4, 0xA6, 0x1A, + 0x52, 0x14, 0xAE, 0x5E, 0x5C, 0x28, 0x07, 0x4C, + 0xC5, 0xFE, 0x2A, 0x41, 0x2A, 0xC5, 0x14, 0x15, + 0x94, 0x28, 0x54, 0x85, 0x15, 0x6E, 0xCA, 0x65, + 0x64, 0x28, 0x37, 0x20, 0xB0, 0xBA, 0xD1, 0xD9, + 0x74, 0x5B, 0xA5, 0x77, 0x71, 0x1A, 0xB6, 0xF2, + 0x14, 0xC5, 0x2F, 0xB5, 0xBA, 0xAF, 0x8A, 0x1F, + 0x85, 0x33, 0x5A, 0xEB, 0x44, 0x37, 0x0B, 0x39, + 0xC5, 0x6C, 0x4C, 0x3D, 0x32, 0x75, 0x55, 0x60, + 0xCB, 0x2C, 0xA9, 0x45, 0x87, 0x51, 0xF1, 0x65, + 0x4B, 0x82, 0xC5, 0xE7, 0xFB, 0x0D, 0xB5, 0x16, + 0xBE, 0x1E, 0x42, 0x43, 0x3A, 0xD4, 0x7B, 0x6B, + 0xCC, 0xB3, 0x63, 0x61, 0xC4, 0x34, 0xEB, 0x59, + 0xCF, 0xF3, 0x38, 0x49, 0x54, 0xBB, 0x76, 0xF1, + 0x44, 0x14, 0x91, 0x67, 0x91, 0x3B, 0x85, 0x0F, + 0x75, 0x28, 0xBD, 0x76, 0x87, 0xB8, 0x8B, 0x64, + 0x84, 0xA6, 0x82, 0x68, 0x39, 0x97, 0x08, 0x42, + 0xA5, 0x93, 0xBB, 0x93, 0x45, 0x5A, 0x73, 0xBC, + 0x2C, 0x74, 0x62, 0x55, 0xC1, 0x3B, 0xC8, 0x52, + 0x1C, 0x73, 0x54, 0xE9, 0x8B, 0x98, 0x76, 0xA9, + 0x58, 0x6F, 0xC3, 0x7C, 0x5F, 0x24, 0x8D, 0xA0, + 0x55, 0x75, 0x8B, 0xD9, 0x61, 0x5E, 0x68, 0xBF, + 0x93, 0xEA, 0x0B, 0xA1, 0xD0, 0x22, 0xE2, 0xD2, + 0x22, 0x04, 0xA4, 0x45, 0x8C, 0xB6, 0x12, 0xB0, + 0x29, 0x41, 0xE8, 0x7A, 0xAC, 0xF1, 0xA3, 0x29, + 0x07, 0xD9, 0x8B, 0x4B, 0x13, 0xC6, 0xC9, 0xB4, + 0xAB, 0xD6, 0xDC, 0xCF, 0x66, 0x21, 0x06, 0xF5, + 0xD5, 0x8C, 0x2F, 0xC7, 0x51, 0x97, 0x35, 0x5E, + 0xB8, 0xCC, 0x41, 0x74, 0x2C, 0x6D, 0xA0, 0x03, + 0x40, 0x6D, 0x13, 0x56, 0xF8, 0xA0, 0x7A, 0x37, + 0x97, 0x88, 0x00, 0x60, 0x67, 0xCB, 0xF5, 0x2F, + 0x22, 0xD5, 0x3D, 0x68, 0x71, 0x22, 0x41, 0x09, + 0x34, 0x6E, 0xA8, 0x3B, 0x45, 0xCA, 0x60, 0xAF, + 0xEC, 0xCA, 0x0F, 0xA5, 0x67, 0x2B, 0x36, 0x64, + 0x89, 0xEB, 0x8D, 0xD1, 0xF7, 0x20, 0x4C, 0xDB, + 0x7D, 0x9B, 0xE1, 0x87, 0xF4, 0x39, 0x7B, 0x9B, + 0x4C, 0xA0, 0x31, 0x34, 0x75, 0x0D, 0xD5, 0x7D, + 0xAD, 0xE1, 0x88, 0x91, 0xCC, 0xA9, 0x47, 0x4B, + 0x65, 0x32, 0x60, 0x52, 0x50, 0xBC, 0xBB, 0x6E, + 0x02, 0x94, 0xEF, 0x95, 0x32, 0x6D, 0x25, 0x9B, + 0x08, 0xB2, 0x93, 0x8D, 0x8C, 0x59, 0xE2, 0x58, + 0x4B, 0x69, 0x10, 0x71, 0x85, 0xF3, 0x45, 0x30, + 0x24, 0x07, 0x35, 0x17, 0xC9, 0x89, 0x00, 0x9E, + 0xBB, 0x6B, 0x22, 0xED, 0xE9, 0x70, 0x43, 0x66, + 0xC6, 0x23, 0x2A, 0x62, 0x82, 0xF3, 0xBB, 0x09, + 0x08, 0x74, 0xA6, 0xFB, 0x0D, 0x84, 0x53, 0x6D, + 0x3F, 0x61, 0x3A, 0x21, 0xD1, 0x9D, 0x98, 0x44, + 0x17, 0xFA, 0xF0, 0x84, 0x6C, 0xB4, 0x28, 0x7B, + 0x3C, 0x70, 0x9F, 0x22, 0x62, 0x26, 0xA0, 0x9E, + 0x94, 0xFA, 0x89, 0x85, 0x43, 0x87, 0x4A, 0xE2, + 0x08, 0x11, 0xE3, 0x90, 0x80, 0xE6, 0xB2, 0xCE, + 0x49, 0x92, 0x26, 0xF5, 0x13, 0x8C, 0x14, 0x38, + 0x72, 0xDB, 0x86, 0xFB, 0xC2, 0x9C, 0xFD, 0xA2, + 0x9F, 0xD2, 0x26, 0x0E, 0xC7, 0xB9, 0xA2, 0x37, + 0xD1, 0x9A, 0xAB, 0x1B, 0x93, 0xE1, 0xDA, 0x4E, + 0xBC, 0x58, 0x9D, 0x82, 0x4C, 0x58, 0x90, 0x96, + 0x99, 0xD3, 0xE8, 0xBC, 0x7F, 0x53, 0xB3, 0x55, + 0xFA, 0x31, 0xE9, 0x6B, 0x1E, 0x35, 0x4A, 0xA4, + 0xB3, 0xC8, 0x4D, 0xF3, 0xC4, 0x7F, 0x80, 0xF9, + 0x32, 0xEA, 0x68, 0x5D, 0x96, 0xC5, 0xA5, 0x96, + 0x08, 0x22, 0xC6, 0x43, 0x64, 0x5F, 0x1A, 0x63, + 0xDD, 0x60, 0x8A, 0x09, 0x71, 0xC7, 0xF2, 0x15, + 0x7C, 0xA5, 0x24, 0x4D, 0x49, 0x2C, 0x01, 0x0B, + 0x71, 0xB7, 0x74, 0xC1, 0x0C, 0x07, 0xD3, 0xC8, + 0x4C, 0xA5, 0x4D, 0xE5, 0x00, 0x1F, 0xE0, 0xAC, + 0x4E, 0x69, 0x52, 0x81, 0x4E, 0xC1, 0x0F, 0xF9, + 0x8B, 0x19, 0xE7, 0x89, 0xC1, 0xAC, 0x68, 0x45, + 0xC7, 0x62, 0x80, 0x55, 0x27, 0x5C, 0x33, 0x34, + 0x41, 0x87, 0x1B, 0x8C, 0x30, 0x99, 0x9B, 0x05, + 0x31, 0x34, 0xC0, 0xE7, 0xB1, 0xAC, 0x6A, 0xA6, + 0x63, 0x12, 0xC1, 0xA5, 0xE2, 0x97, 0x92, 0x97, + 0x02, 0x56, 0x88, 0x14, 0x38, 0xDC, 0x46, 0x29, + 0x37, 0x4D, 0xFB, 0x9A, 0x91, 0x48, 0x62, 0x9D, + 0x14, 0x8C, 0x60, 0x1D, 0x4B, 0x6A, 0xA2, 0xC2, + 0x9C, 0xCE, 0xE8, 0x94, 0x7A, 0x27, 0x87, 0x0E, + 0x4C, 0x65, 0xE4, 0x12, 0x46, 0xD6, 0x25, 0x3D, + 0xC4, 0xF1, 0x3A, 0xEB, 0x31, 0xCD, 0x7E, 0x36, + 0x2F, 0x0F, 0x28, 0x84, 0xB9, 0xF7, 0x3B, 0xA9, + 0x93, 0x50, 0xAA, 0xA4, 0x02, 0x4A, 0x73, 0x14, + 0xBE, 0x69, 0x3A, 0xE4, 0x13, 0xA5, 0xCE, 0xA0, + 0x9A, 0x27, 0x27, 0x3A, 0x0B, 0xF6, 0xA4, 0x53, + 0xF8, 0x63, 0x9B, 0x48, 0x26, 0x8D, 0x21, 0xC9, + 0xAE, 0xC2, 0x62, 0xBE, 0x28, 0xC0, 0x7E, 0xA4, + 0xB9, 0x35, 0xA8, 0x69, 0x63, 0x26, 0xAA, 0x18, + 0xA5, 0x91, 0xCE, 0xE9, 0xC9, 0xF2, 0xA7, 0x29, + 0xBC, 0x50, 0x33, 0xDD, 0xE6, 0x37, 0x27, 0x38, + 0x85, 0x92, 0x1B, 0x73, 0xB8, 0x58, 0xA1, 0x88, + 0x33, 0xA7, 0xB8, 0x3A, 0x82, 0xFE, 0x02, 0xCC, + 0x33, 0x54, 0xC3, 0x0B, 0x0C, 0x4D, 0x0D, 0x3B, + 0xA1, 0x33, 0x1C, 0x6E, 0xC7, 0xA7, 0x0B, 0x7E, + 0x50, 0x3F, 0x76, 0x47, 0xA9, 0x52, 0xB0, 0x03, + 0x86, 0xCC, 0x90, 0xB3, 0x4A, 0x51, 0x4F, 0x99, + 0x5A, 0x56, 0x92, 0x05, 0xEB, 0x2A, 0x3F, 0xA7, + 0x9A, 0x78, 0x65, 0x21, 0x18, 0xD4, 0xBC, 0x48, + 0x46, 0x27, 0xCD, 0x02, 0x33, 0xBC, 0x5A, 0x35, + 0x16, 0x15, 0x0B, 0xAF, 0x6E, 0x10, 0x66, 0x5D, + 0xA7, 0x61, 0x8F, 0x28, 0x41, 0xB5, 0x02, 0x61, + 0x72, 0x48, 0x89, 0x3B, 0xAA, 0xB7, 0xE9, 0x03, + 0x89, 0x0D, 0xF0, 0xCA, 0xC2, 0x84, 0xCD, 0x11, + 0x65, 0xB4, 0x64, 0xC1, 0x8F, 0x4C, 0xFA, 0x8F, + 0x69, 0x2D, 0x3C, 0x8E, 0x8C, 0x73, 0x9F, 0xB3, + 0x78, 0x27, 0x74, 0x15, 0x61, 0xD5, 0xE7, 0x66, + 0x67, 0x51, 0x82, 0xFF, 0x83, 0xC9, 0x1C, 0xF0, + 0x33, 0x65, 0x88, 0x23, 0xD8, 0xFA, 0x91, 0xE1, + 0xE8, 0xD6, 0x62, 0xEA, 0xD3, 0x75, 0x0D, 0x71, + 0x6B, 0x91, 0x8D, 0x26, 0x78, 0x26, 0x59, 0xA5, + 0xB3, 0xD7, 0x99, 0xE4, 0x26, 0x58, 0xE1, 0x49, + 0x5F, 0x90, 0x84, 0xFF, 0xD4, 0xD1, 0x00, 0xB8, + 0x86, 0x26, 0xED, 0x79, 0xD4, 0x51, 0x14, 0x08, + 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, + 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, + 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F + }; + const byte kyber1024_ct[] = { + 0x17, 0x50, 0x59, 0x78, 0xD5, 0xCA, 0x04, 0x62, + 0x81, 0xC9, 0x7C, 0xA1, 0xFE, 0x89, 0xBA, 0xB3, + 0x99, 0xC1, 0xC9, 0xF8, 0xED, 0x27, 0x1D, 0xC5, + 0x1B, 0x30, 0x09, 0x43, 0xDB, 0x2E, 0xA9, 0x49, + 0x08, 0xEE, 0x94, 0x64, 0x61, 0x96, 0x02, 0xA7, + 0xF8, 0xCD, 0x38, 0xB5, 0xA3, 0x12, 0x5F, 0x46, + 0x7B, 0xF1, 0xA7, 0xA9, 0x67, 0xEE, 0xE0, 0x84, + 0x20, 0x98, 0x80, 0x14, 0x33, 0x88, 0x38, 0x92, + 0xAD, 0x0A, 0xD2, 0x99, 0x6F, 0x76, 0xCE, 0x49, + 0xA1, 0x79, 0x0A, 0x7A, 0x23, 0x0E, 0xB0, 0xDA, + 0x07, 0x72, 0xC6, 0xFC, 0x06, 0x0E, 0x75, 0x51, + 0x8C, 0x94, 0xA1, 0xA6, 0x52, 0xD8, 0x66, 0x0F, + 0xBA, 0x70, 0x1E, 0xF4, 0x82, 0xF4, 0xFA, 0x26, + 0xA7, 0xC4, 0xDB, 0x86, 0x02, 0xB7, 0x89, 0x49, + 0xB2, 0x8D, 0x99, 0xC7, 0x3B, 0x84, 0xD5, 0x5C, + 0xF6, 0x80, 0xA5, 0x90, 0x89, 0x3C, 0x63, 0xEA, + 0x8F, 0x85, 0x45, 0x8B, 0x85, 0xF7, 0x39, 0x2C, + 0x11, 0xB8, 0x90, 0x02, 0x02, 0x73, 0xB7, 0x48, + 0x33, 0xA8, 0x0C, 0xD6, 0xC7, 0x8C, 0x75, 0x51, + 0xD7, 0xCC, 0x8A, 0xA1, 0xB4, 0xC5, 0x42, 0x8D, + 0x2A, 0xA3, 0xE7, 0x43, 0x5E, 0x23, 0xDD, 0x9B, + 0x4F, 0xFA, 0xB0, 0xD0, 0x21, 0x90, 0xBB, 0xA1, + 0x36, 0x89, 0xF0, 0x15, 0xC1, 0x9A, 0x3A, 0xD9, + 0xD6, 0x62, 0x69, 0x77, 0xD1, 0xA3, 0x35, 0x58, + 0xAB, 0x6C, 0xF4, 0x6F, 0x76, 0xBD, 0x5A, 0x30, + 0xED, 0x94, 0x6D, 0x04, 0x03, 0x38, 0x8B, 0x13, + 0xA5, 0xB4, 0x95, 0x83, 0xCF, 0xB9, 0x3D, 0xEB, + 0x30, 0xC4, 0x63, 0x82, 0xAF, 0xC1, 0x28, 0x62, + 0xF0, 0x69, 0xF1, 0x36, 0xD5, 0xCF, 0x5F, 0x30, + 0x06, 0x4D, 0x90, 0xDE, 0x12, 0xF7, 0xD7, 0x6E, + 0xD7, 0xF4, 0xA5, 0x93, 0x13, 0x9C, 0xB6, 0x77, + 0x93, 0xF2, 0xAD, 0x94, 0xDB, 0xE1, 0xBA, 0xD2, + 0x3B, 0xC1, 0x7C, 0x72, 0x66, 0x9C, 0x25, 0x14, + 0x9A, 0xC8, 0xA2, 0x5C, 0x50, 0xE0, 0xE0, 0x8F, + 0x5D, 0x76, 0x4B, 0x30, 0xF2, 0x87, 0x07, 0x47, + 0x0C, 0x5E, 0xC0, 0x9E, 0xDD, 0x21, 0x4C, 0x8A, + 0x0A, 0x82, 0x8C, 0x2C, 0x8B, 0x6F, 0xCF, 0x74, + 0xE9, 0x47, 0x36, 0x62, 0xFC, 0x61, 0xC7, 0x28, + 0x1E, 0x9B, 0xA7, 0x23, 0x04, 0x6A, 0x0A, 0xE7, + 0x0D, 0x7F, 0xEB, 0x86, 0xFC, 0xFF, 0x4D, 0x87, + 0x6B, 0x10, 0xEF, 0x2B, 0x67, 0x73, 0xE2, 0x6C, + 0xB2, 0x52, 0xDF, 0x75, 0x73, 0x07, 0x68, 0x0E, + 0xCC, 0x47, 0xD8, 0xEC, 0x07, 0xB6, 0xA5, 0x09, + 0xE2, 0x74, 0x51, 0x31, 0x77, 0xC6, 0xEE, 0x1B, + 0x91, 0x7B, 0x0C, 0x3E, 0x77, 0xCC, 0xF6, 0x2F, + 0x41, 0x2A, 0x95, 0x69, 0x57, 0x3B, 0xEB, 0xA1, + 0x54, 0xB1, 0x51, 0x47, 0xEF, 0x2E, 0x52, 0xA3, + 0x9C, 0xD0, 0xC6, 0x4B, 0xFD, 0x81, 0xEA, 0xA2, + 0x1B, 0x50, 0xAB, 0x9A, 0x11, 0x56, 0xBD, 0x41, + 0xDD, 0xB9, 0x93, 0x87, 0x24, 0xD1, 0x71, 0x39, + 0x39, 0x3F, 0x2D, 0x36, 0x1A, 0xAE, 0xE6, 0x76, + 0xB7, 0xF5, 0xA2, 0xBB, 0x45, 0x6B, 0xB5, 0x9C, + 0xF0, 0x4A, 0xC1, 0x7F, 0x0B, 0xD3, 0x14, 0x83, + 0xCD, 0x45, 0xC7, 0x5B, 0xF7, 0xD5, 0xD2, 0x7D, + 0x9A, 0x3A, 0x5D, 0x4E, 0x49, 0x1F, 0x1E, 0x3C, + 0x73, 0xE9, 0xD5, 0xC3, 0x46, 0x02, 0x3F, 0x5E, + 0xAC, 0x39, 0x1B, 0xBE, 0xE3, 0x2A, 0xD8, 0x01, + 0xA5, 0x9D, 0xFC, 0x03, 0x58, 0x26, 0x51, 0x11, + 0xE0, 0x3D, 0xD6, 0x01, 0xA8, 0x66, 0x5C, 0xE3, + 0xEC, 0xE5, 0x23, 0x1F, 0x1F, 0x5F, 0x5B, 0x47, + 0xEF, 0x38, 0x1B, 0x47, 0xBC, 0x18, 0xE4, 0xDE, + 0x73, 0xD0, 0xD5, 0x68, 0x10, 0x91, 0x33, 0x5E, + 0x8A, 0xF7, 0xE1, 0x2C, 0x0E, 0xA8, 0x92, 0x24, + 0xA2, 0x0F, 0x5F, 0x18, 0x66, 0x64, 0x31, 0x9B, + 0xFB, 0x55, 0x5F, 0x5F, 0x5D, 0x07, 0x41, 0x33, + 0x77, 0xB3, 0x41, 0x6F, 0x91, 0x35, 0x66, 0xB8, + 0xFF, 0x31, 0x48, 0x11, 0xD3, 0x3D, 0x42, 0xE4, + 0xFE, 0xE5, 0x17, 0xF3, 0xD2, 0xB9, 0x82, 0x8F, + 0x76, 0x81, 0x18, 0x03, 0x67, 0x3E, 0x86, 0x5A, + 0xFB, 0xA6, 0x64, 0xB7, 0x5D, 0x4A, 0x8B, 0xC7, + 0xA1, 0x36, 0xA6, 0x8C, 0x81, 0x39, 0x1E, 0x43, + 0x20, 0x87, 0xDE, 0x28, 0x51, 0xE5, 0xCB, 0x26, + 0xBF, 0xF6, 0x5D, 0x70, 0xBC, 0x0C, 0xDC, 0x35, + 0x9F, 0xE5, 0xFA, 0x0A, 0x45, 0x94, 0x80, 0x9C, + 0xFC, 0x0F, 0xC6, 0x4F, 0x0A, 0x46, 0x98, 0x2E, + 0xA1, 0xEA, 0x78, 0xA1, 0x8E, 0x1D, 0xCE, 0x00, + 0xCD, 0x2F, 0xE0, 0x7D, 0xC4, 0xE6, 0xC7, 0x04, + 0x50, 0x4B, 0x08, 0x33, 0xAA, 0x16, 0xD3, 0xB1, + 0x5D, 0xA5, 0x68, 0x26, 0x35, 0x70, 0x46, 0x66, + 0x0D, 0x47, 0x2C, 0x66, 0xAB, 0xEB, 0xD7, 0xFD, + 0x48, 0xFD, 0x62, 0x0D, 0x37, 0x9F, 0x2A, 0xEF, + 0x93, 0x99, 0x3B, 0xB8, 0xAA, 0x56, 0x7D, 0x9A, + 0x5A, 0x12, 0x94, 0xB4, 0x69, 0x80, 0xC0, 0x02, + 0x3B, 0xB8, 0x94, 0xD3, 0x70, 0x94, 0xF2, 0x95, + 0x6C, 0x8D, 0x1D, 0x8F, 0xC3, 0xF1, 0x98, 0x09, + 0x93, 0x54, 0x7E, 0xA4, 0x8F, 0xD4, 0xCB, 0xDB, + 0xD0, 0x97, 0xB3, 0xEE, 0xFA, 0xF8, 0x65, 0x75, + 0xEB, 0xBD, 0x23, 0xDB, 0xB2, 0x63, 0x04, 0xA0, + 0x9B, 0x1D, 0xE0, 0x55, 0xB7, 0x8A, 0x5F, 0xC4, + 0xBD, 0x41, 0x13, 0x27, 0x41, 0xD3, 0x87, 0xAC, + 0x3A, 0x58, 0x22, 0x19, 0xFE, 0x39, 0xC5, 0x33, + 0x2F, 0x8A, 0xD8, 0x8E, 0xB4, 0x9F, 0x9E, 0xEA, + 0xCB, 0x7C, 0xD7, 0xD5, 0x34, 0x47, 0xAB, 0x62, + 0x48, 0xBA, 0xA8, 0x22, 0x7F, 0xA1, 0xB2, 0x4D, + 0x60, 0xE8, 0xBA, 0xAC, 0xB1, 0x9D, 0x00, 0x40, + 0x24, 0xAF, 0x18, 0x6C, 0xAD, 0x86, 0xAC, 0xA0, + 0xD6, 0xAA, 0x8E, 0x8C, 0x36, 0x4E, 0xBD, 0xCB, + 0x43, 0x27, 0xC3, 0x6D, 0x30, 0x88, 0xDC, 0x80, + 0xCE, 0x04, 0xF3, 0xA0, 0xA7, 0x9C, 0x32, 0xAB, + 0x6C, 0x3F, 0x14, 0xF4, 0xD6, 0x29, 0x14, 0x69, + 0x2E, 0x4A, 0x9A, 0xFF, 0xD1, 0x96, 0x09, 0x14, + 0x05, 0x62, 0x33, 0x3A, 0x05, 0x65, 0x96, 0x2B, + 0xD8, 0xAC, 0xD2, 0x59, 0x50, 0xF5, 0x6C, 0x94, + 0x2C, 0xE1, 0x5C, 0x38, 0x1C, 0x95, 0x03, 0xD7, + 0x1C, 0xF1, 0x7C, 0x5E, 0x97, 0xA6, 0xAE, 0xFB, + 0x3F, 0xCF, 0x48, 0x80, 0x4E, 0x3F, 0x07, 0x5D, + 0x71, 0xD5, 0x6F, 0x44, 0x49, 0x93, 0x9A, 0xF0, + 0x47, 0x86, 0xD6, 0x2D, 0x12, 0xAD, 0x67, 0x06, + 0x65, 0x3E, 0xE9, 0x68, 0x84, 0x0E, 0xFC, 0xCE, + 0x28, 0x72, 0x57, 0x64, 0xE3, 0x07, 0xC0, 0x0F, + 0x0C, 0xBA, 0x57, 0x5A, 0x33, 0xC9, 0x6C, 0x6F, + 0x5A, 0x74, 0x9E, 0x59, 0x94, 0x5B, 0x92, 0xB3, + 0x0F, 0xC8, 0x99, 0xDE, 0x61, 0xD1, 0x1C, 0xCF, + 0xBF, 0xEF, 0x98, 0x3B, 0xF8, 0x54, 0xC8, 0xF5, + 0x41, 0x06, 0xB3, 0x03, 0x62, 0x4D, 0x79, 0xF0, + 0x66, 0x58, 0xFB, 0x4B, 0xDC, 0x69, 0x6C, 0xE0, + 0x59, 0x77, 0xDE, 0x4A, 0x11, 0x5D, 0x83, 0x8D, + 0x83, 0x50, 0xF3, 0xC2, 0xBE, 0x35, 0xA6, 0x54, + 0xCA, 0xBB, 0x1E, 0xBD, 0x46, 0xA9, 0xF0, 0x79, + 0xBA, 0xE4, 0x6B, 0x31, 0xEE, 0x45, 0x74, 0x26, + 0xF3, 0x97, 0x9E, 0x36, 0x61, 0x1F, 0xAF, 0x16, + 0x87, 0x0A, 0xBE, 0x9D, 0x8F, 0x93, 0xB5, 0x0A, + 0xC1, 0x49, 0x98, 0xE1, 0xA4, 0x95, 0xF5, 0x1A, + 0x1B, 0x02, 0x05, 0x6A, 0x2F, 0xFB, 0x17, 0x11, + 0x4C, 0xA7, 0x21, 0xAC, 0x24, 0x6C, 0x29, 0x20, + 0xBC, 0xEA, 0x3A, 0x72, 0x36, 0x7A, 0x0D, 0xA5, + 0x02, 0xE3, 0xF2, 0x5F, 0xFB, 0x3A, 0x58, 0x10, + 0x01, 0xAC, 0xFC, 0xDD, 0x91, 0x7E, 0xA7, 0x89, + 0xE4, 0xEF, 0x88, 0x43, 0x4D, 0xFE, 0x20, 0xBC, + 0x54, 0x78, 0x42, 0x8D, 0xD0, 0x80, 0xA0, 0xCA, + 0xDD, 0xC6, 0x1F, 0x02, 0x32, 0x03, 0x15, 0x1C, + 0x5A, 0x82, 0xD4, 0x95, 0x21, 0x8F, 0xF3, 0xFB, + 0x1E, 0x22, 0x7D, 0xBF, 0xCA, 0x1B, 0x5A, 0xBC, + 0xE6, 0x39, 0xC4, 0x9C, 0xD8, 0xEC, 0x12, 0x95, + 0x83, 0xC5, 0x73, 0xC5, 0x17, 0x02, 0xA1, 0xB5, + 0xC1, 0x01, 0x72, 0x13, 0x7C, 0x36, 0xDD, 0x66, + 0xD1, 0x84, 0x99, 0xB0, 0x78, 0x7D, 0xAB, 0xA9, + 0x78, 0xAC, 0x76, 0xC1, 0x14, 0xD0, 0x17, 0x8C, + 0xCB, 0xF7, 0xE6, 0xE1, 0x31, 0xBD, 0x9E, 0x53, + 0x3A, 0x13, 0x33, 0xD2, 0x2B, 0xD1, 0x7B, 0x99, + 0x6F, 0x76, 0x22, 0x57, 0x5C, 0xF9, 0x8B, 0x37, + 0x0D, 0x77, 0x17, 0xB7, 0x24, 0x48, 0x7B, 0xFB, + 0x27, 0x74, 0x62, 0xC8, 0x3C, 0x1C, 0xAA, 0xF6, + 0x28, 0x85, 0x7E, 0x71, 0xD6, 0x16, 0xDD, 0x5D, + 0x52, 0x87, 0xBD, 0xF3, 0x7B, 0x19, 0xDA, 0xAA, + 0xE4, 0xD2, 0x4C, 0xCC, 0xEC, 0xB1, 0x26, 0xAE, + 0x74, 0x25, 0x19, 0x7A, 0x21, 0x51, 0x13, 0x91, + 0xBA, 0x1E, 0x7D, 0x13, 0x08, 0x49, 0x82, 0xED, + 0x29, 0x1D, 0xDD, 0x51, 0x6A, 0x60, 0xED, 0xCD, + 0x86, 0x26, 0xF0, 0x0E, 0xEF, 0x6A, 0xA4, 0xD3, + 0x76, 0xE1, 0x53, 0x90, 0x64, 0x88, 0x46, 0x64, + 0x09, 0xCC, 0x26, 0x50, 0x82, 0xAA, 0xB0, 0x4E, + 0x5E, 0xDC, 0x8B, 0xE2, 0x45, 0xF5, 0x38, 0xC3, + 0x6E, 0x7E, 0x0A, 0xE3, 0xE7, 0x10, 0x9E, 0x25, + 0xDA, 0xF8, 0x09, 0x19, 0xCE, 0xD7, 0x30, 0xA6, + 0x93, 0xFF, 0xF8, 0xD2, 0x71, 0x6F, 0xB2, 0x27, + 0x15, 0x93, 0x17, 0xE0, 0x7D, 0x9D, 0xAE, 0x5B, + 0xDA, 0x9B, 0x01, 0x05, 0xB1, 0x7B, 0xAE, 0x55, + 0xA7, 0x37, 0x56, 0x6D, 0xC4, 0x4E, 0x63, 0xA4, + 0x7E, 0xBC, 0xA5, 0xA4, 0xE9, 0xB2, 0xB8, 0x06, + 0x8C, 0xB8, 0x13, 0xBD, 0xD2, 0xC3, 0xFD, 0x73, + 0x90, 0x81, 0x0C, 0xCC, 0x2C, 0xA1, 0x48, 0xEF, + 0xAF, 0x14, 0x59, 0xD7, 0x39, 0xD2, 0x2A, 0x12, + 0x14, 0x83, 0x92, 0xEA, 0x0D, 0x9A, 0xC3, 0x76, + 0x10, 0xD5, 0x61, 0x29, 0x1E, 0xE3, 0x88, 0x06, + 0x09, 0x42, 0xB0, 0xD0, 0x12, 0xB1, 0xBC, 0x52, + 0x34, 0xF5, 0x77, 0xF5, 0xF3, 0xF3, 0x4A, 0xFA, + 0x77, 0x9C, 0x15, 0x5E, 0x72, 0x9A, 0x57, 0xD6, + 0x45, 0xF8, 0x8E, 0x88, 0x23, 0xC1, 0xE7, 0xC5, + 0x5B, 0x87, 0xB7, 0xEE, 0x06, 0x89, 0x0B, 0x9E, + 0xD8, 0x13, 0x04, 0x33, 0xC7, 0x57, 0x93, 0x2C, + 0x4A, 0xAA, 0x8E, 0x7A, 0x26, 0x3E, 0x59, 0x8C, + 0x87, 0xEE, 0x0D, 0xFE, 0x7E, 0x12, 0x0E, 0x60, + 0x7C, 0x0F, 0xED, 0x41, 0x72, 0x11, 0xC5, 0x3B, + 0x10, 0xA7, 0x12, 0x24, 0x61, 0x56, 0xCA, 0xB4, + 0xBB, 0xCB, 0x46, 0xF2, 0xA4, 0x1F, 0xBB, 0x6B, + 0xD3, 0x67, 0x3D, 0x4E, 0x89, 0xDA, 0xE8, 0x88, + 0xD0, 0x35, 0xF8, 0xE5, 0x2A, 0xEA, 0x4D, 0x58, + 0x41, 0x1D, 0x5E, 0x24, 0xFA, 0x6C, 0x4A, 0x72, + 0x17, 0x4A, 0xDA, 0xA0, 0xD8, 0x85, 0xFA, 0x64, + 0xB1, 0x2B, 0x16, 0xEF, 0x85, 0x65, 0xDD, 0xE9, + 0x84, 0x56, 0xD6, 0x72, 0xBB, 0x52, 0xF6, 0x00, + 0x7B, 0x23, 0xF4, 0x74, 0x8F, 0x63, 0xA2, 0x48, + 0xAF, 0x1A, 0xB1, 0x86, 0xEA, 0xAC, 0xBD, 0xA1, + 0xC2, 0xB0, 0xB4, 0x77, 0xC6, 0x25, 0xA0, 0x0C, + 0xFF, 0x14, 0xFA, 0xD3, 0xCF, 0xC9, 0xFC, 0x2C, + 0xF2, 0xAE, 0x7E, 0x4B, 0x55, 0xE0, 0x41, 0xF8, + 0x5E, 0x2D, 0x03, 0xD3, 0x60, 0x25, 0xAB, 0x4D, + 0xF6, 0x65, 0x12, 0xBC, 0xE9, 0x66, 0x7F, 0x2A, + 0x2D, 0xF9, 0xC9, 0xAA, 0xE2, 0x80, 0x39, 0x7F, + 0xEF, 0x0C, 0x03, 0x8B, 0x54, 0x7A, 0xE5, 0x87, + 0xE7, 0xBE, 0x80, 0x22, 0x37, 0x96, 0xE3, 0x9A, + 0x93, 0x99, 0x99, 0x9A, 0xE5, 0x7A, 0xD6, 0x80, + 0x26, 0xF1, 0x3F, 0xCA, 0x9E, 0xE6, 0x33, 0x79, + 0xC9, 0x09, 0x9A, 0xCB, 0x2A, 0x61, 0x19, 0x04, + 0x74, 0x40, 0x5B, 0x57, 0xE3, 0x48, 0x4A, 0x52 + }; + const byte kyber1024_ss[] = { + 0xC1, 0x4E, 0xBD, 0x6E, 0x37, 0x88, 0xA6, 0x41, + 0xD1, 0x75, 0x5B, 0x4C, 0x86, 0x9C, 0x46, 0x99, + 0x4F, 0x75, 0xAF, 0x16, 0xB4, 0x0F, 0x8F, 0x64, + 0x92, 0xCC, 0xBE, 0xC7, 0xA3, 0xDA, 0x9B, 0xFE + }; +#endif + + ret = wc_KyberKey_Init(KYBER1024, &key, HEAP_HINT, INVALID_DEVID); + if (ret != 0) + return -20301; + + ret = wc_KyberKey_MakeKeyWithRandom(&key, kyber1024_rand, + sizeof(kyber1024_rand)); + if (ret != 0) + return -20302; + + ret = wc_KyberKey_EncodePublicKey(&key, pub, sizeof(pub)); + if (ret != 0) + return -20303; + + ret = wc_KyberKey_EncodePrivateKey(&key, priv, sizeof(priv)); + if (ret != 0) + return -20304; + + if (XMEMCMP(pub, kyber1024_pk, sizeof(kyber1024_pk)) != 0) + return -20305; + + if (XMEMCMP(priv, kyber1024_sk, sizeof(kyber1024_sk)) != 0) + return -20306; + + ret = wc_KyberKey_EncapsulateWithRandom(&key, ct, ss, kyber1024enc_rand, + sizeof(kyber1024enc_rand)); + if (ret != 0) + return -20307; + + if (XMEMCMP(ct, kyber1024_ct, sizeof(kyber1024_ct)) != 0) + return -20308; + + if (XMEMCMP(ss, kyber1024_ss, sizeof(kyber1024_ss)) != 0) + return -20309; + + ret = wc_KyberKey_Decapsulate(&key, ss_dec, ct, sizeof(kyber1024_ct)); + if (ret != 0) + return -20310; + + if (XMEMCMP(ss_dec, kyber1024_ss, sizeof(kyber1024_ss)) != 0) + return -20311; + + wc_KyberKey_Free(&key); + + return 0; +} +#endif /* WOLFSSL_KYBER1024 */ +#endif /* WOLFSSL_WC_KYBER */ + +WOLFSSL_TEST_SUBROUTINE int kyber_test(void) +{ + int ret; + KyberKey key; + WC_RNG rng; + int i; + 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]; + byte ct[KYBER_MAX_CIPHER_TEXT_SIZE]; + byte ss[KYBER_SS_SZ]; + byte ss_dec[KYBER_SS_SZ]; + int testData[][4] = { + #ifdef WOLFSSL_KYBER512 + { KYBER512, KYBER512_PRIVATE_KEY_SIZE, KYBER512_PUBLIC_KEY_SIZE, + KYBER512_CIPHER_TEXT_SIZE }, + #endif + #ifdef WOLFSSL_KYBER768 + { KYBER768, KYBER768_PRIVATE_KEY_SIZE, KYBER768_PUBLIC_KEY_SIZE, + KYBER768_CIPHER_TEXT_SIZE }, + #endif + #ifdef WOLFSSL_KYBER1024 + { KYBER1024, KYBER1024_PRIVATE_KEY_SIZE, KYBER1024_PUBLIC_KEY_SIZE, + KYBER1024_CIPHER_TEXT_SIZE }, + #endif + }; + +#ifndef HAVE_FIPS + ret = wc_InitRng_ex(&rng, HEAP_HINT, INVALID_DEVID); +#else + ret = wc_InitRng(&rng); +#endif + if (ret != 0) + return -20000; + + for (i = 0; i < (int)(sizeof(testData) / sizeof(*testData)); i++) { + ret = wc_KyberKey_Init(testData[i][0], &key, HEAP_HINT, INVALID_DEVID); + if (ret != 0) + return -20001 - i * 20; + + ret = wc_KyberKey_MakeKey(&key, &rng); + if (ret != 0) + return -20002 - i * 20; + + ret = wc_KyberKey_EncodePublicKey(&key, pub, testData[i][2]); + if (ret != 0) + return -20003 - i * 20; + + ret = wc_KyberKey_EncodePrivateKey(&key, priv, testData[i][1]); + if (ret != 0) + return -20004 - i * 20; + + ret = wc_KyberKey_Init(testData[i][0], &key, HEAP_HINT, INVALID_DEVID); + if (ret != 0) + return -20005 - i * 20; + + ret = wc_KyberKey_DecodePublicKey(&key, pub, testData[i][2]); + if (ret != 0) + return -20006 - i * 20; + + ret = wc_KyberKey_Encapsulate(&key, ct, ss, &rng); + if (ret != 0) + return -20007 - i * 20; + + ret = wc_KyberKey_EncodePublicKey(&key, pub2, testData[i][2]); + if (ret != 0) + return -20008 - i * 20; + + if (XMEMCMP(pub, pub2, testData[i][2]) != 0) + return -20009 - i * 20; + + ret = wc_KyberKey_Init(testData[i][0], &key, HEAP_HINT, INVALID_DEVID); + if (ret != 0) + return -20010 - i * 20; + + ret = wc_KyberKey_DecodePrivateKey(&key, priv, testData[i][1]); + if (ret != 0) + return -20011 - i * 20; + + ret = wc_KyberKey_Decapsulate(&key, ss_dec, ct, testData[i][3]); + if (ret != 0) + return -20012 - i * 20; + + if (XMEMCMP(ss, ss_dec, sizeof(ss)) != 0) + return -20013 - i * 20; + + ret = wc_KyberKey_EncodePrivateKey(&key, priv2, testData[i][1]); + if (ret != 0) + return -20014 - i * 20; + + if (XMEMCMP(priv, priv2, testData[i][2]) != 0) + return -20015 - i * 20; + + wc_KyberKey_Free(&key); + } + + wc_FreeRng(&rng); + +#ifdef WOLFSSL_WC_KYBER +#ifdef WOLFSSL_KYBER512 + ret = kyber512_kat(); + if (ret != 0) + return ret; +#endif +#ifdef WOLFSSL_KYBER768 + ret = kyber768_kat(); + if (ret != 0) + return ret; +#endif +#ifdef WOLFSSL_KYBER1024 + ret = kyber1024_kat(); + if (ret != 0) + return ret; +#endif +#endif /* WOLFSSL_WC_KYBER */ + + return 0; +} +#endif /* WOLFSSL_HAVE_KYBER */ + #ifdef WOLFCRYPT_HAVE_ECCSI static int eccsi_api_test(WC_RNG* rng, EccsiKey* key, mp_int* ssk, ecc_point* pvt) diff --git a/wolfssl/wolfcrypt/ext_kyber.h b/wolfssl/wolfcrypt/ext_kyber.h new file mode 100644 index 000000000..d1a400ce6 --- /dev/null +++ b/wolfssl/wolfcrypt/ext_kyber.h @@ -0,0 +1,62 @@ +/* ext_kyber.h + * + * Copyright (C) 2006-2022 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 EXT_KYBER_H +#define EXT_KYBER_H + +#include + +#if !defined(HAVE_LIBOQS) && !defined(HAVE_PQM4) +#error "This code requires liboqs or pqm4" +#endif + +#if defined(WOLFSSL_WC_KYBER) +#error "This code is incompatible with wolfCrypt's implementation of Kyber." +#endif + +#if defined (HAVE_LIBOQS) + #include + #define EXT_KYBER_MAX_PRIV_SZ OQS_KEM_kyber_1024_length_secret_key + #define EXT_KYBER_MAX_PUB_SZ OQS_KEM_kyber_1024_length_public_key +#elif defined(HAVE_PQM4) + #include "api_kyber.h" + #define PQM4_PUBLIC_KEY_LENGTH CRYPTO_PUBLICKEYBYTES + #define PQM4_PRIVATE_KEY_LENGTH CRYPTO_SECRETKEYBYTES + #define PQM4_SHARED_SECRET_LENGTH CRYPTO_BYTES + #define PQM4_CIPHERTEXT_LENGTH CRYPTO_CIPHERTEXTBYTES + + #define EXT_KYBER_MAX_PRIV_SZ PQM4_PRIVATE_KEY_LENGTH + #define EXT_KYBER_MAX_PUB_SZ PQM4_PUBLIC_KEY_LENGTH +#endif + +struct KyberKey { + /* Type of key: KYBER_LEVEL1 + * KYBER_LEVEL3 + * KYBER_LEVEL5 + * + * Note we don't save the variant (SHAKE vs AES) as that is decided at + * configuration time. */ + int type; + byte priv[EXT_KYBER_MAX_PRIV_SZ]; + byte pub[EXT_KYBER_MAX_PUB_SZ]; +}; + +#endif /* EXT_KYBER_H */ diff --git a/wolfssl/wolfcrypt/include.am b/wolfssl/wolfcrypt/include.am index c68d784bc..543670b8a 100644 --- a/wolfssl/wolfcrypt/include.am +++ b/wolfssl/wolfcrypt/include.am @@ -71,7 +71,10 @@ nobase_include_HEADERS+= \ wolfssl/wolfcrypt/sha3.h \ wolfssl/wolfcrypt/siphash.h \ wolfssl/wolfcrypt/cpuid.h \ - wolfssl/wolfcrypt/cryptocb.h + wolfssl/wolfcrypt/cryptocb.h \ + wolfssl/wolfcrypt/kyber.h \ + wolfssl/wolfcrypt/wc_kyber.h \ + wolfssl/wolfcrypt/ext_kyber.h noinst_HEADERS+= \ wolfssl/wolfcrypt/port/pic32/pic32mz-crypt.h \ diff --git a/wolfssl/wolfcrypt/kyber.h b/wolfssl/wolfcrypt/kyber.h new file mode 100644 index 000000000..ca128feee --- /dev/null +++ b/wolfssl/wolfcrypt/kyber.h @@ -0,0 +1,223 @@ +/* kyber.h + * + * Copyright (C) 2006-2022 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 + */ + +/*! + \file wolfssl/wolfcrypt/kyber.h + */ + +#ifndef WOLF_CRYPT_KYBER_H +#define WOLF_CRYPT_KYBER_H + +#include +#include + +#ifdef WOLFSSL_HAVE_KYBER + +/* 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 + + +/* Number of co-efficients in polynomial. */ +#define KYBER_N 256 + + +/* Size of a polynomial vector based on dimensions. */ +#define KYBER_POLY_VEC_SZ(k) (k * KYBER_POLY_SIZE) +/* Size of a compressed polynomial based on bits per coefficient. */ +#define KYBER_POLY_COMPRESSED_SZ(b) (b * (KYBER_N / 8)) +/* Size of a compressed vector polynomial based on dimensions and bits per + * coefficient. */ +#define KYBER_POLY_VEC_COMPRESSED_SZ(k, b) (k * (b * (KYBER_N / 8))) + + +/* Kyber-512 parameters */ +#ifdef WOLFSSL_KYBER512 +/* Number of polynomials in a vector and vectors in a matrix. */ +#define KYBER512_K 2 + +/* Size of a polynomial vector. */ +#define KYBER512_POLY_VEC_SZ KYBER_POLY_VEC_SZ(KYBER512_K) +/* Size of a compressed polynomial based on bits per coefficient. */ +#define KYBER512_POLY_COMPRESSED_SZ KYBER_POLY_COMPRESSED_SZ(4) +/* Size of a compressed vector polynomial based on dimensions and bits per + * coefficient. */ +#define KYBER512_POLY_VEC_COMPRESSED_SZ \ + KYBER_POLY_VEC_COMPRESSED_SZ(KYBER512_K, 10) + +/* Public key size. */ +#define KYBER512_PUBLIC_KEY_SIZE \ + (KYBER512_POLY_VEC_SZ + KYBER_SYM_SZ) +/* Private key size. */ +#define KYBER512_PRIVATE_KEY_SIZE \ + (KYBER512_POLY_VEC_SZ + KYBER512_PUBLIC_KEY_SIZE + 2 * KYBER_SYM_SZ) +/* 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 + +/* Size of a polynomial vector. */ +#define KYBER768_POLY_VEC_SZ KYBER_POLY_VEC_SZ(KYBER768_K) +/* Size of a compressed polynomial based on bits per coefficient. */ +#define KYBER768_POLY_COMPRESSED_SZ KYBER_POLY_COMPRESSED_SZ(4) +/* Size of a compressed vector polynomial based on dimensions and bits per + * coefficient. */ +#define KYBER768_POLY_VEC_COMPRESSED_SZ \ + KYBER_POLY_VEC_COMPRESSED_SZ(KYBER768_K, 10) + +/* Public key size. */ +#define KYBER768_PUBLIC_KEY_SIZE \ + (KYBER768_POLY_VEC_SZ + KYBER_SYM_SZ) +/* Private key size. */ +#define KYBER768_PRIVATE_KEY_SIZE \ + (KYBER768_POLY_VEC_SZ + KYBER768_PUBLIC_KEY_SIZE + 2 * KYBER_SYM_SZ) +/* 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 + +/* Size of a polynomial vector. */ +#define KYBER1024_POLY_VEC_SZ KYBER_POLY_VEC_SZ(KYBER1024_K) +/* Size of a compressed polynomial based on bits per coefficient. */ +#define KYBER1024_POLY_COMPRESSED_SZ KYBER_POLY_COMPRESSED_SZ(5) +/* Size of a compressed vector polynomial based on dimensions and bits per + * coefficient. */ +#define KYBER1024_POLY_VEC_COMPRESSED_SZ \ + KYBER_POLY_VEC_COMPRESSED_SZ(KYBER1024_K, 11) + +/* Public key size. */ +#define KYBER1024_PUBLIC_KEY_SIZE \ + (KYBER1024_POLY_VEC_SZ + KYBER_SYM_SZ) +/* Private key size. */ +#define KYBER1024_PRIVATE_KEY_SIZE \ + (KYBER1024_POLY_VEC_SZ + KYBER1024_PUBLIC_KEY_SIZE + 2 * KYBER_SYM_SZ) +/* 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. */ +#ifdef WOLFSSL_KYBER1024 +#define KYBER_MAX_K KYBER1024_K +#define KYBER_MAX_PRIVATE_KEY_SIZE KYBER1024_PRIVATE_KEY_SIZE +#define KYBER_MAX_PUBLIC_KEY_SIZE KYBER1024_PUBLIC_KEY_SIZE +#define KYBER_MAX_CIPHER_TEXT_SIZE KYBER1024_CIPHER_TEXT_SIZE +#elif defined(WOLFSSL_KYBER768) +#define KYBER_MAX_K KYBER768_K +#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 +#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 +#define KYBER_MAX_CIPHER_TEXT_SIZE KYBER512_CIPHER_TEXT_SIZE +#endif + +enum { + /* Types of Kyber keys. */ + KYBER512 = 0, + KYBER768 = 1, + KYBER1024 = 2, + + KYBER_LEVEL1 = KYBER512, + KYBER_LEVEL3 = KYBER768, + KYBER_LEVEL5 = KYBER1024, + + /* Symmetric data size. */ + KYBER_SYM_SZ = 32, + /* Shared secret size. */ + KYBER_SS_SZ = 32, + /* Size of random required for making a key. */ + KYBER_MAKEKEY_RAND_SZ = 2 * KYBER_SYM_SZ, + /* Size of random required for encapsulation. */ + KYBER_ENC_RAND_SZ = KYBER_SYM_SZ, + + /* Encoded polynomial size. */ + KYBER_POLY_SIZE = 384, +}; + + +/* Different structures for different implementations. */ +typedef struct KyberKey KyberKey; + + +#ifdef __cplusplus + extern "C" { +#endif + +WOLFSSL_API int wc_KyberKey_Init(int type, KyberKey* key, void* heap, + int devId); +WOLFSSL_API void wc_KyberKey_Free(KyberKey* key); + +WOLFSSL_API int wc_KyberKey_MakeKey(KyberKey* key, WC_RNG* rng); +WOLFSSL_API int wc_KyberKey_MakeKeyWithRandom(KyberKey* key, + const unsigned char* rand, int len); + +WOLFSSL_API int wc_KyberKey_CipherTextSize(KyberKey* key, word32* len); +WOLFSSL_API int wc_KyberKey_SharedSecretSize(KyberKey* key, word32* len); + +WOLFSSL_API int wc_KyberKey_Encapsulate(KyberKey* key, unsigned char* ct, + unsigned char* ss, WC_RNG* rng); +WOLFSSL_API int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, + unsigned char* ct, unsigned char* ss, const unsigned char* rand, int len); +WOLFSSL_API int wc_KyberKey_Decapsulate(KyberKey* key, unsigned char* ss, + const unsigned char* ct, word32 len); + +WOLFSSL_API int wc_KyberKey_DecodePrivateKey(KyberKey* key, unsigned char* in, + word32 len); +WOLFSSL_API int wc_KyberKey_DecodePublicKey(KyberKey* key, unsigned char* in, + word32 len); + +WOLFSSL_API int wc_KyberKey_PrivateKeySize(KyberKey* key, word32* len); +WOLFSSL_API int wc_KyberKey_PublicKeySize(KyberKey* key, word32* len); +WOLFSSL_API int wc_KyberKey_EncodePrivateKey(KyberKey* key, unsigned char* out, + word32 len); +WOLFSSL_API int wc_KyberKey_EncodePublicKey(KyberKey* key, unsigned char* out, + word32 len); + +#ifdef __cplusplus + } /* extern "C" */ +#endif + +#endif /* WOLFSSL_HAVE_KYBER */ + +#endif /* WOLF_CRYPT_KYBER_H */ + diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index 04975e6e8..934213852 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -2722,6 +2722,10 @@ extern void uITRON4_free(void *p) ; #endif #endif +#ifdef WOLFSSL_HAVE_KYBER +#define HAVE_PQC +#endif + /* Enable Post-Quantum Cryptography if we have liboqs from the OpenQuantumSafe * group */ #ifdef HAVE_LIBOQS @@ -2737,7 +2741,8 @@ extern void uITRON4_free(void *p) ; #define HAVE_KYBER #endif -#if defined(HAVE_PQC) && !defined(HAVE_LIBOQS) && !defined(HAVE_PQM4) +#if defined(HAVE_PQC) && !defined(HAVE_LIBOQS) && !defined(HAVE_PQM4) && \ + !defined(WOLFSSL_HAVE_KYBER) #error Please do not define HAVE_PQC yourself. #endif diff --git a/wolfssl/wolfcrypt/wc_kyber.h b/wolfssl/wolfcrypt/wc_kyber.h new file mode 100644 index 000000000..62c3ed811 --- /dev/null +++ b/wolfssl/wolfcrypt/wc_kyber.h @@ -0,0 +1,3 @@ + +#error "Contact wolfSSL to get the implementation of this file" +