Browse Source

Kyber: Add option to build Kyber API

wolfSSL Kyber implementation not included.
Added tests and benchmarking.
Sean Parkinson 1 year ago
parent
commit
8c1e2c52e7

+ 77 - 3
configure.ac

@@ -963,6 +963,78 @@ then
 fi
 
 
+# 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_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
+fi
+
+
 # SINGLE THREADED
 AC_ARG_ENABLE([singlethreaded],
     [AS_HELP_STRING([--enable-singlethreaded],[Enable wolfSSL single threaded (default: disabled)])],
@@ -3068,7 +3140,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)])],
@@ -8042,6 +8113,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 +8515,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"

+ 24 - 0
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

+ 2 - 2
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 */

+ 18 - 1
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))
@@ -20751,6 +20755,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
         }
     }

+ 530 - 11
src/tls.c

@@ -49,7 +49,12 @@
     #include <wolfssl/wolfcrypt/curve448.h>
 #endif
 #ifdef HAVE_PQC
-#ifdef HAVE_LIBOQS
+#ifdef WOLFSSL_HAVE_KYBER
+    #include <wolfssl/wolfcrypt/kyber.h>
+#ifdef WOLFSSL_WC_KYBER
+    #include <wolfssl/wolfcrypt/wc_kyber.h>
+#endif
+#elif defined(HAVE_LIBOQS)
     #include <oqs/kem.h>
 #elif defined(HAVE_PQM4)
     #include "api_kyber.h"
@@ -7053,7 +7058,35 @@ static int TLSX_KeyShare_GenEccKey(WOLFSSL *ssl, KeyShareEntry* kse)
 }
 
 #ifdef HAVE_PQC
-#ifdef HAVE_LIBOQS
+#ifdef WOLFSSL_HAVE_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)
 {
@@ -7150,7 +7183,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_HAVE_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;
@@ -7938,7 +8084,174 @@ static int TLSX_KeyShare_ProcessEcc(WOLFSSL* ssl, KeyShareEntry* keyShareEntry)
 }
 
 #ifdef HAVE_PQC
-#ifdef HAVE_LIBOQS
+#ifdef WOLFSSL_HAVE_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("Kyber 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.
@@ -8568,10 +8881,171 @@ static int TLSX_KeyShare_New(KeyShareEntry** list, int group, void *heap,
 }
 
 #ifdef HAVE_PQC
-#ifdef HAVE_LIBOQS
+#ifdef WOLFSSL_HAVE_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("OQS 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
@@ -8721,7 +9195,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
@@ -9059,7 +9534,18 @@ static int TLSX_KeyShare_IsSupported(int namedGroup)
         #endif
     #endif
     #ifdef HAVE_PQC
-    #ifdef HAVE_LIBOQS
+    #ifdef WOLFSSL_HAVE_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:
@@ -9165,9 +9651,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_HAVE_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))
@@ -9218,6 +9717,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 */
     }
@@ -11231,8 +11733,24 @@ static int TLSX_PopulateSupportedGroups(WOLFSSL* ssl, TLSX** extensions)
 #endif
 
 #ifdef HAVE_PQC
+#ifdef WOLFSSL_HAVE_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);
@@ -11308,7 +11826,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 */
 

+ 8 - 0
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

+ 11 - 0
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) || \

+ 230 - 0
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
+

+ 0 - 230
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
-

+ 166 - 15
wolfcrypt/benchmark/benchmark.c

@@ -254,6 +254,12 @@
 #ifdef HAVE_ED448
     #include <wolfssl/wolfcrypt/ed448.h>
 #endif
+#ifdef WOLFSSL_HAVE_KYBER
+    #include <wolfssl/wolfcrypt/kyber.h>
+#ifdef WOLFSSL_WC_KYBER
+    #include <wolfssl/wolfcrypt/wc_kyber.h>
+#endif
+#endif
 #ifdef WOLFCRYPT_HAVE_ECCSI
     #include <wolfssl/wolfcrypt/eccsi.h>
 #endif
@@ -431,6 +437,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 +701,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 +763,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 +944,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 +1072,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 +1084,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 +1658,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 +1705,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 +2276,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 +2400,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 +6164,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 +7436,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 +8339,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 +8516,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)) {

+ 1 - 0
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);

+ 4 - 3
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;

+ 3 - 0
wolfcrypt/src/wc_kyber.c

@@ -0,0 +1,3 @@
+
+#error "Contact wolfSSL to get the implementation of this file"
+

+ 3 - 0
wolfcrypt/src/wc_kyber_asm.S

@@ -0,0 +1,3 @@
+
+#error "Contact wolfSSL to get the implementation of this file"
+

+ 3 - 0
wolfcrypt/src/wc_kyber_poly.c

@@ -0,0 +1,3 @@
+
+#error "Contact wolfSSL to get the implementation of this file"
+

+ 3983 - 0
wolfcrypt/test/test.c

@@ -266,6 +266,12 @@
 #ifdef HAVE_ED448
     #include <wolfssl/wolfcrypt/ed448.h>
 #endif
+#ifdef WOLFSSL_HAVE_KYBER
+    #include <wolfssl/wolfcrypt/kyber.h>
+#ifdef WOLFSSL_WC_KYBER
+    #include <wolfssl/wolfcrypt/wc_kyber.h>
+#endif
+#endif
 #ifdef WOLFCRYPT_HAVE_ECCSI
     #include <wolfssl/wolfcrypt/eccsi.h>
 #endif
@@ -501,6 +507,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 +1353,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 +29854,3973 @@ WOLFSSL_TEST_SUBROUTINE int ed448_test(void)
 }
 #endif /* HAVE_ED448 */
 
+#ifdef WOLFSSL_HAVE_KYBER
+#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 */
+
+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_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
+
+    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)

+ 3 - 1
wolfssl/wolfcrypt/include.am

@@ -71,7 +71,9 @@ 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
 
 noinst_HEADERS+= \
                          wolfssl/wolfcrypt/port/pic32/pic32mz-crypt.h \

+ 232 - 0
wolfssl/wolfcrypt/kyber.h

@@ -0,0 +1,232 @@
+/* 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 <wolfssl/wolfcrypt/types.h>
+#include <wolfssl/wolfcrypt/random.h>
+
+#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,
+};
+
+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);
+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 */
+

+ 6 - 1
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
 

+ 3 - 0
wolfssl/wolfcrypt/wc_kyber.h

@@ -0,0 +1,3 @@
+
+#error "Contact wolfSSL to get the implementation of this file"
+