]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
oqs: Support of Falcon signature algorithms
authorAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 20 Nov 2020 16:30:15 +0000 (17:30 +0100)
committerTobias Brunner <tobias@strongswan.org>
Thu, 5 Sep 2024 07:36:25 +0000 (09:36 +0200)
16 files changed:
src/libstrongswan/asn1/asn1.c
src/libstrongswan/asn1/oid.txt
src/libstrongswan/credentials/auth_cfg.c
src/libstrongswan/credentials/keys/public_key.c
src/libstrongswan/credentials/keys/public_key.h
src/libstrongswan/crypto/hashers/hasher.c
src/libstrongswan/plugins/oqs/oqs_plugin.c
src/libstrongswan/plugins/oqs/oqs_private_key.c
src/libstrongswan/plugins/oqs/oqs_public_key.c
src/libstrongswan/plugins/oqs/tests/suites/test_oqs_sig.c
src/libstrongswan/plugins/pem/pem_plugin.c
src/libstrongswan/plugins/pkcs8/pkcs8_builder.c
src/libstrongswan/plugins/pkcs8/pkcs8_plugin.c
src/libstrongswan/tests/suites/test_hasher.c
src/pki/commands/gen.c
src/pki/man/pki---gen.1.in

index a6878756926945b47529ff613931002a6788d7c3..303d12ea04322be0ecaae520ab2abef8fdb5ad6f 100644 (file)
@@ -61,6 +61,8 @@ chunk_t asn1_algorithmIdentifier(int oid)
                case OID_DILITHIUM_2:
                case OID_DILITHIUM_3:
                case OID_DILITHIUM_5:
+               case OID_FALCON_512:
+               case OID_FALCON_1024:
                        parameters = chunk_empty;
                        break;
                default:
index 53ce6b339c25dd7d1e875595e8f6ae8b876bccd5..8f1d482cb67e1fe3a0c39c105774804a904992eb 100644 (file)
         0x25                 "sect409r1"                               OID_SECT409R1
         0x26                 "sect571k1"                               OID_SECT571K1
         0x27                 "sect571r1"                               OID_SECT571R1
+  0xCE                       ""
+    0x0F                     "Reserved"
+      0x03                   "Falcon"
+        0x01                 "falcon512"        OID_FALCON_512
+        0x04                 "falcon1024"       OID_FALCON_1024
 0x60                         ""
   0x86                       ""
     0x48                     ""
index 8afbc79f4266d0ca5a8d39375bfa8496486b8167..7a80603166401cfb501f832d09bc94634c4e330e 100644 (file)
@@ -602,6 +602,8 @@ METHOD(auth_cfg_t, add_pubkey_constraints, void,
                        { "identity",   SIGN_DILITHIUM_2,                               KEY_DILITHIUM_2, },
                        { "identity",   SIGN_DILITHIUM_3,                               KEY_DILITHIUM_3, },
                        { "identity",   SIGN_DILITHIUM_5,                               KEY_DILITHIUM_5, },
+                       { "identity",   SIGN_FALCON_512,                                KEY_FALCON_512,  },
+                       { "identity",   SIGN_FALCON_1024,                               KEY_FALCON_1024, },
                };
 
                if (expected_strength != AUTH_RULE_MAX)
index 820c2ca75f82d836f96d9132ce025514f9b9bb1b..1b5a631936d9b98e8e8fe0133754d09dc9fc57e0 100644 (file)
@@ -21,7 +21,7 @@
 #include "public_key.h"
 #include "signature_params.h"
 
-ENUM(key_type_names, KEY_ANY, KEY_DILITHIUM_5,
+ENUM(key_type_names, KEY_ANY, KEY_FALCON_1024,
        "ANY",
        "RSA",
        "ECDSA",
@@ -31,9 +31,11 @@ ENUM(key_type_names, KEY_ANY, KEY_DILITHIUM_5,
        "Dilithium2",
        "Dilithium3",
        "Dilithium5",
+       "Falcon512",
+       "Falcon1024",
 );
 
-ENUM(signature_scheme_names, SIGN_UNKNOWN, SIGN_DILITHIUM_5,
+ENUM(signature_scheme_names, SIGN_UNKNOWN, SIGN_FALCON_1024,
        "UNKNOWN",
        "RSA_EMSA_PKCS1_NULL",
        "RSA_EMSA_PKCS1_MD5",
@@ -60,6 +62,8 @@ ENUM(signature_scheme_names, SIGN_UNKNOWN, SIGN_DILITHIUM_5,
        "DILITHIUM_2",
        "DILITHIUM_3",
        "DILITHIUM_5",
+       "FALCON_512",
+       "FALCON_1024",
 );
 
 ENUM(encryption_scheme_names, ENCRYPT_UNKNOWN, ENCRYPT_RSA_OAEP_SHA512,
@@ -132,6 +136,10 @@ int key_type_to_oid(key_type_t type)
                        return OID_DILITHIUM_3;
                case KEY_DILITHIUM_5:
                        return OID_DILITHIUM_5;
+               case KEY_FALCON_512:
+                       return OID_FALCON_512;
+               case KEY_FALCON_1024:
+                       return OID_FALCON_1024;
                default:
                        return OID_UNKNOWN;
        }
@@ -154,6 +162,10 @@ key_type_t key_type_from_oid(int oid)
                        return KEY_DILITHIUM_3;
                case OID_DILITHIUM_5:
                        return KEY_DILITHIUM_5;
+               case OID_FALCON_512:
+                       return KEY_FALCON_512;
+               case OID_FALCON_1024:
+                       return KEY_FALCON_1024;
                default:
                        return KEY_ANY;
        }
@@ -213,6 +225,10 @@ signature_scheme_t signature_scheme_from_oid(int oid)
                        return SIGN_DILITHIUM_3;
                case OID_DILITHIUM_5:
                        return SIGN_DILITHIUM_5;
+               case OID_FALCON_512:
+                       return SIGN_FALCON_512;
+               case OID_FALCON_1024:
+                       return SIGN_FALCON_1024;
        }
        return SIGN_UNKNOWN;
 }
@@ -271,6 +287,10 @@ int signature_scheme_to_oid(signature_scheme_t scheme)
                        return OID_DILITHIUM_3;
                case SIGN_DILITHIUM_5:
                        return OID_DILITHIUM_5;
+               case SIGN_FALCON_512:
+                       return OID_FALCON_512;
+               case SIGN_FALCON_1024:
+                       return OID_FALCON_1024;
        }
        return OID_UNKNOWN;
 }
@@ -314,7 +334,9 @@ static struct {
        { KEY_ED448,       0, { .scheme = SIGN_ED448 }},
        { KEY_DILITHIUM_2, 0, { .scheme = SIGN_DILITHIUM_2}},
        { KEY_DILITHIUM_3, 0, { .scheme = SIGN_DILITHIUM_3}},
-       { KEY_DILITHIUM_4, 0, { .scheme = SIGN_DILITHIUM_5}},
+       { KEY_DILITHIUM_5, 0, { .scheme = SIGN_DILITHIUM_5}},
+       { KEY_FALCON_512,  0, { .scheme = SIGN_FALCON_512}},
+       { KEY_FALCON_1024, 0, { .scheme = SIGN_FALCON_1024}},
 };
 
 /**
@@ -409,6 +431,10 @@ key_type_t key_type_from_signature_scheme(signature_scheme_t scheme)
                        return KEY_DILITHIUM_3;
                case SIGN_DILITHIUM_5:
                        return KEY_DILITHIUM_5;
+               case SIGN_FALCON_512:
+                       return KEY_FALCON_512;
+               case SIGN_FALCON_1024:
+                       return KEY_FALCON_1024;
        }
        return KEY_ANY;
 }
index 3d9d617d1167c86a4cbd508484a9dac48fb3cb37..053a3ab0d380ab20d46be15d5385158bfaeda0b3 100644 (file)
@@ -54,6 +54,10 @@ enum key_type_t {
        KEY_DILITHIUM_3 = 7,
        /** Dilithium4 NIST Round 3 Submission candidate */
        KEY_DILITHIUM_5 = 8,
+       /** Falcon512 NIST Round 3 Submission candidate */
+       KEY_FALCON_512 = 9,
+       /** Falcon1024 NIST Round 3 Submission candidate */
+       KEY_FALCON_1024 = 10,
 };
 
 /**
@@ -121,6 +125,10 @@ enum signature_scheme_t {
        SIGN_DILITHIUM_3,
        /** Dilithium4 NIST Round 3 Submission signature                   */
        SIGN_DILITHIUM_5,
+       /** Falcon512 NIST Round 3 Submission signature                   */
+       SIGN_FALCON_512,
+       /** Falcon1024 NIST Round 3 Submission signature                   */
+       SIGN_FALCON_1024,
 };
 
 /**
index 2a22fb5637f220e1913cf989bb75f89e7a56de0c..32cc6d444b7307ab7b88a36bcdd40df748bdecf2 100644 (file)
@@ -159,6 +159,8 @@ hash_algorithm_t hasher_algorithm_from_oid(int oid)
                case OID_DILITHIUM_2:
                case OID_DILITHIUM_3:
                case OID_DILITHIUM_5:
+               case OID_FALCON_512:
+               case OID_FALCON_1024:
                        return HASH_IDENTITY;
                default:
                        return HASH_UNKNOWN;
@@ -504,6 +506,22 @@ int hasher_signature_algorithm_to_oid(hash_algorithm_t alg, key_type_t key)
                                default:
                                        return OID_UNKNOWN;
                        }
+               case KEY_FALCON_512:
+                       switch (alg)
+                       {
+                               case HASH_IDENTITY:
+                                       return OID_FALCON_512;
+                               default:
+                                       return OID_UNKNOWN;
+                       }
+               case KEY_FALCON_1024:
+                       switch (alg)
+                       {
+                               case HASH_IDENTITY:
+                                       return OID_FALCON_1024;
+                               default:
+                                       return OID_UNKNOWN;
+                       }
                default:
                        return OID_UNKNOWN;
        }
@@ -533,6 +551,8 @@ hash_algorithm_t hasher_from_signature_scheme(signature_scheme_t scheme,
                case SIGN_DILITHIUM_2:
                case SIGN_DILITHIUM_3:
                case SIGN_DILITHIUM_5:
+               case SIGN_FALCON_512:
+               case SIGN_FALCON_1024:
                        return HASH_IDENTITY;
                case SIGN_RSA_EMSA_PKCS1_MD5:
                        return HASH_MD5;
index cf50a2baad0a685ace5ee43c58e273b04f3b1e12..a9407175c883e77dec9b49932180021795796814 100644 (file)
@@ -69,23 +69,33 @@ METHOD(plugin_t, get_features, int,
                        PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_2),
                        PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_3),
                        PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_5),
+                       PLUGIN_PROVIDE(PRIVKEY, KEY_FALCON_512),
+                       PLUGIN_PROVIDE(PRIVKEY, KEY_FALCON_1024),
                PLUGIN_REGISTER(PRIVKEY_GEN, oqs_private_key_gen, FALSE),
                        PLUGIN_PROVIDE(PRIVKEY_GEN, KEY_DILITHIUM_2),
                        PLUGIN_PROVIDE(PRIVKEY_GEN, KEY_DILITHIUM_3),
                        PLUGIN_PROVIDE(PRIVKEY_GEN, KEY_DILITHIUM_5),
+                       PLUGIN_PROVIDE(PRIVKEY_GEN, KEY_FALCON_512),
+                       PLUGIN_PROVIDE(PRIVKEY_GEN, KEY_FALCON_1024),
                PLUGIN_REGISTER(PUBKEY, oqs_public_key_load, TRUE),
                        PLUGIN_PROVIDE(PUBKEY, KEY_DILITHIUM_2),
                        PLUGIN_PROVIDE(PUBKEY, KEY_DILITHIUM_3),
                        PLUGIN_PROVIDE(PUBKEY, KEY_DILITHIUM_5),
+                       PLUGIN_PROVIDE(PUBKEY, KEY_FALCON_512),
+                       PLUGIN_PROVIDE(PUBKEY, KEY_FALCON_1024),
                        PLUGIN_PROVIDE(PUBKEY, KEY_ANY),
                /* signature schemes, private */
                PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_DILITHIUM_2),
                PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_DILITHIUM_3),
                PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_DILITHIUM_5),
+               PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_FALCON_512),
+               PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_FALCON_1024),
                /* signature verification schemes */
                PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_DILITHIUM_2),
                PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_DILITHIUM_3),
                PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_DILITHIUM_5),
+               PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_FALCON_512),
+               PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_FALCON_1024),
        };
        *features = f;
        return countof(f);
index fd7eba60bb052ac2506634b9cf8003ee13e6cc0a..3bd36328ab07618e4592b0841e57a13d98edd065 100644 (file)
@@ -115,7 +115,7 @@ METHOD(private_key_t, decrypt, bool,
 METHOD(private_key_t, get_keysize, int,
        private_oqs_private_key_t *this)
 {
-       return this->public_key.len;
+       return BITS_PER_BYTE * this->public_key.len;
 }
 
 METHOD(private_key_t, get_public_key, public_key_t*,
@@ -223,6 +223,12 @@ static private_oqs_private_key_t *oqs_private_key_create_empty(key_type_t type)
                case KEY_DILITHIUM_5:
                        sig_alg = OQS_SIG_alg_dilithium_5;
                        break;
+               case KEY_FALCON_512:
+                       sig_alg = OQS_SIG_alg_falcon_512;
+                       break;
+               case KEY_FALCON_1024:
+                       sig_alg = OQS_SIG_alg_falcon_1024;
+                       break;
                default:
                        return NULL;
        }
index 7d6d69e4ac6e94fcf2ee572666acf4d1d89d14ca..c2df91c132748385e538726a70a59907f8733c14 100644 (file)
@@ -277,6 +277,12 @@ end:
                case KEY_DILITHIUM_5:
                        sig_alg = OQS_SIG_alg_dilithium_5;
                        break;
+               case KEY_FALCON_512:
+                       sig_alg = OQS_SIG_alg_falcon_512;
+                       break;
+               case KEY_FALCON_1024:
+                       sig_alg = OQS_SIG_alg_falcon_1024;
+                       break;
                default:
                        destroy(this);
                        return NULL;
@@ -303,6 +309,8 @@ bool oqs_supported(key_type_t type)
                case KEY_DILITHIUM_2:
                case KEY_DILITHIUM_3:
                case KEY_DILITHIUM_5:
+               case KEY_FALCON_512:
+               case KEY_FALCON_1024:
                        return TRUE;
                default:
                        return FALSE;
index f3e203e2f9e5ac9b7f8bc120a41cf69f76c83647..b8a32a9afb233e92c207231860bfb5566050345c 100644 (file)
@@ -3119,6 +3119,952 @@ static sig_test_vector_t sig_test[] = {
                0xAA,0x2A,0x2C,0x99,0x57,0xE8,0x35,0xAD,0x55,0xB2,
                0x2E,0x75,0xBF,0x57,0xBB,0x55,0x6A,0xC8),
 },
+/** count = 0 NIST Round 3 liboqs-0.5.0 KAT */
+{
+       .type = KEY_FALCON_512,
+       .seed = chunk_from_chars(
+               0x06,0x15,0x50,0x23,0x4D,0x15,0x8C,0x5E,0xC9,0x55,
+               0x95,0xFE,0x04,0xEF,0x7A,0x25,0x76,0x7F,0x2E,0x24,
+               0xCC,0x2B,0xC4,0x79,0xD0,0x9D,0x86,0xDC,0x9A,0xBC,
+               0xFD,0xE7,0x05,0x6A,0x8C,0x26,0x6F,0x9E,0xF9,0x7E,
+               0xD0,0x85,0x41,0xDB,0xD2,0xE1,0xFF,0xA1),
+       .msg = chunk_from_chars(
+               0xD8,0x1C,0x4D,0x8D,0x73,0x4F,0xCB,0xFB,0xEA,0xDE,
+               0x3D,0x3F,0x8A,0x03,0x9F,0xAA,0x2A,0x2C,0x99,0x57,
+               0xE8,0x35,0xAD,0x55,0xB2,0x2E,0x75,0xBF,0x57,0xBB,
+               0x55,0x6A,0xC8),
+       .pk = chunk_from_chars(
+               0x09,0x6B,0xA8,0x6C,0xB6,0x58,0xA8,0xF4,0x45,0xC9,
+               0xA5,0xE4,0xC2,0x83,0x74,0xBE,0xC8,0x79,0xC8,0x65,
+               0x5F,0x68,0x52,0x69,0x23,0x24,0x09,0x18,0x07,0x4D,
+               0x01,0x47,0xC0,0x31,0x62,0xE4,0xA4,0x92,0x00,0x64,
+               0x8C,0x65,0x28,0x03,0xC6,0xFD,0x75,0x09,0xAE,0x9A,
+               0xA7,0x99,0xD6,0x31,0x0D,0x0B,0xD4,0x27,0x24,0xE0,
+               0x63,0x59,0x20,0x18,0x62,0x07,0x00,0x07,0x67,0xCA,
+               0x5A,0x85,0x46,0xB1,0x75,0x53,0x08,0xC3,0x04,0xB8,
+               0x4F,0xC9,0x3B,0x06,0x9E,0x26,0x59,0x85,0xB3,0x98,
+               0xD6,0xB8,0x34,0x69,0x82,0x87,0xFF,0x82,0x9A,0xA8, /* 100 */
+
+               0x20,0xF1,0x7A,0x7F,0x42,0x26,0xAB,0x21,0xF6,0x01,
+               0xEB,0xD7,0x17,0x52,0x26,0xBA,0xB2,0x56,0xD8,0x88,
+               0x8F,0x00,0x90,0x32,0x56,0x6D,0x63,0x83,0xD6,0x84,
+               0x57,0xEA,0x15,0x5A,0x94,0x30,0x18,0x70,0xD5,0x89,
+               0xC6,0x78,0xED,0x30,0x42,0x59,0xE9,0xD3,0x7B,0x19,
+               0x3B,0xC2,0xA7,0xCC,0xBC,0xBE,0xC5,0x1D,0x69,0x15,
+               0x8C,0x44,0x07,0x3A,0xEC,0x97,0x92,0x63,0x02,0x53,
+               0x31,0x8B,0xC9,0x54,0xDB,0xF5,0x0D,0x15,0x02,0x82,
+               0x90,0xDC,0x2D,0x30,0x9C,0x7B,0x7B,0x02,0xA6,0x82,
+               0x37,0x44,0xD4,0x63,0xDA,0x17,0x74,0x95,0x95,0xCB, /* 200 */
+
+               0x77,0xE6,0xD1,0x6D,0x20,0xD1,0xB4,0xC3,0xAA,0xD8,
+               0x9D,0x32,0x0E,0xBE,0x5A,0x67,0x2B,0xB9,0x6D,0x6C,
+               0xD5,0xC1,0xEF,0xEC,0x8B,0x81,0x12,0x00,0xCB,0xB0,
+               0x62,0xE4,0x73,0x35,0x25,0x40,0xED,0xDE,0xF8,0xAF,
+               0x94,0x99,0xF8,0xCD,0xD1,0xDC,0x7C,0x68,0x73,0xF0,
+               0xC7,0xA6,0xBC,0xB7,0x09,0x75,0x60,0x27,0x1F,0x94,
+               0x68,0x49,0xB7,0xF3,0x73,0x64,0x0B,0xB6,0x9C,0xA9,
+               0xB5,0x18,0xAA,0x38,0x0A,0x6E,0xB0,0xA7,0x27,0x5E,
+               0xE8,0x4E,0x9C,0x22,0x1A,0xED,0x88,0xF5,0xBF,0xBA,
+               0xF4,0x3A,0x3E,0xDE,0x8E,0x6A,0xA4,0x25,0x58,0x10, /* 300 */
+
+               0x4F,0xAF,0x80,0x0E,0x01,0x84,0x41,0x93,0x03,0x76,
+               0xC6,0xF6,0xE7,0x51,0x56,0x99,0x71,0xF4,0x7A,0xDB,
+               0xCA,0x5C,0xA0,0x0C,0x80,0x19,0x88,0xF3,0x17,0xA1,
+               0x87,0x22,0xA2,0x92,0x98,0x92,0x5E,0xA1,0x54,0xDB,
+               0xC9,0x02,0x4E,0x12,0x05,0x24,0xA2,0xD4,0x1D,0xC0,
+               0xF1,0x8F,0xD8,0xD9,0x09,0xF6,0xC5,0x09,0x77,0x40,
+               0x4E,0x20,0x17,0x67,0x07,0x8B,0xA9,0xA1,0xF9,0xE4,
+               0x0A,0x8B,0x2B,0xA9,0xC0,0x1B,0x7D,0xA3,0xA0,0xB7,
+               0x3A,0x4C,0x2A,0x6B,0x4F,0x51,0x8B,0xBE,0xE3,0x45,
+               0x5D,0x0A,0xF2,0x20,0x4D,0xDC,0x03,0x1C,0x80,0x5C, /* 400 */
+
+               0x72,0xCC,0xB6,0x47,0x94,0x0B,0x1E,0x67,0x94,0xD8,
+               0x59,0xAA,0xEB,0xCE,0xA0,0xDE,0xB5,0x81,0xD6,0x1B,
+               0x92,0x48,0xBD,0x96,0x97,0xB5,0xCB,0x97,0x4A,0x81,
+               0x76,0xE8,0xF9,0x10,0x46,0x9C,0xAE,0x0A,0xB4,0xED,
+               0x92,0xD2,0xAE,0xE9,0xF7,0xEB,0x50,0x29,0x6D,0xAF,
+               0x80,0x57,0x47,0x63,0x05,0xC1,0x18,0x9D,0x1D,0x98,
+               0x40,0xA0,0x94,0x4F,0x04,0x47,0xFB,0x81,0xE5,0x11,
+               0x42,0x0E,0x67,0x89,0x1B,0x98,0xFA,0x6C,0x25,0x70,
+               0x34,0xD5,0xA0,0x63,0x43,0x7D,0x37,0x91,0x77,0xCE,
+               0x8D,0x3F,0xA6,0xEA,0xF1,0x2E,0x2D,0xBB,0x7E,0xB8, /* 500 */
+
+               0xE4,0x98,0x48,0x16,0x12,0xB1,0x92,0x96,0x17,0xDA,
+               0x5F,0xB4,0x5E,0x4C,0xDF,0x89,0x39,0x27,0xD8,0xBA,
+               0x84,0x2A,0xA8,0x61,0xD9,0xC5,0x04,0x71,0xC6,0xD0,
+               0xC6,0xDF,0x7E,0x2B,0xB2,0x64,0x65,0xA0,0xEB,0x6A,
+               0x3A,0x70,0x9D,0xE7,0x92,0xAA,0xFA,0xAF,0x92,0x2A,
+               0xA9,0x5D,0xD5,0x92,0x0B,0x72,0xB4,0xB8,0x85,0x6C,
+               0x6E,0x63,0x28,0x60,0xB1,0x0F,0x5C,0xC0,0x84,0x50,
+               0x00,0x36,0x71,0xAF,0x38,0x89,0x61,0x87,0x2B,0x46,
+               0x64,0x00,0xAD,0xB8,0x15,0xBA,0x81,0xEA,0x79,0x49,
+               0x45,0xD1,0x9A,0x10,0x06,0x22,0xA6,0xCA,0x0D,0x41, /* 600 */
+
+               0xC4,0xEA,0x62,0x0C,0x21,0xDC,0x12,0x51,0x19,0xE3,
+               0x72,0x41,0x8F,0x04,0x40,0x2D,0x9F,0xA7,0x18,0x0F,
+               0x7B,0xC8,0x9A,0xFA,0x54,0xF8,0x08,0x22,0x44,0xA4,
+               0x2F,0x46,0xE5,0xB5,0xAB,0xCE,0x87,0xB5,0x0A,0x7D,
+               0x6F,0xEB,0xE8,0xD7,0xBB,0xBA,0xC9,0x26,0x57,0xCB,
+               0xDA,0x1D,0xB7,0xC2,0x55,0x72,0xA4,0xC1,0xD0,0xBA,
+               0xEA,0x30,0x44,0x7A,0x86,0x5A,0x2B,0x10,0x36,0xB8,
+               0x80,0x03,0x7E,0x2F,0x4D,0x26,0xD4,0x53,0xE9,0xE9,
+               0x13,0x25,0x97,0x79,0xE9,0x16,0x9B,0x28,0xA6,0x2E,
+               0xB8,0x09,0xA5,0xC7,0x44,0xE0,0x4E,0x26,0x0E,0x1F, /* 700 */
+
+               0x2B,0xBD,0xA8,0x74,0xF1,0xAC,0x67,0x48,0x39,0xDD,
+               0xB4,0x7B,0x31,0x48,0xC5,0x94,0x6D,0xE0,0x18,0x01,
+               0x48,0xB7,0x97,0x3D,0x63,0xC5,0x81,0x93,0xB1,0x7C,
+               0xD0,0x5D,0x16,0xE8,0x0C,0xD7,0x92,0x8C,0x2A,0x33,
+               0x83,0x63,0xA2,0x3A,0x81,0xC0,0x60,0x8C,0x87,0x50,
+               0x55,0x89,0xB9,0xDA,0x1C,0x61,0x7E,0x7B,0x70,0x78,
+               0x6B,0x67,0x54,0xFB,0xB3,0x0A,0x58,0x16,0x81,0x0B,
+               0x9E,0x12,0x6C,0xFC,0xC5,0xAA,0x49,0x32,0x6E,0x9D,
+               0x84,0x29,0x73,0x87,0x4B,0x63,0x59,0xB5,0xDB,0x75,
+               0x61,0x0B,0xA6,0x8A,0x98,0xC7,0xB5,0xE8,0x3F,0x12, /* 800 */
+
+               0x5A,0x82,0x52,0x2E,0x13,0xB8,0x3F,0xB8,0xF8,0x64,
+               0xE2,0xA9,0x7B,0x73,0xB5,0xD5,0x44,0xA7,0x41,0x5B,
+               0x65,0x04,0xA1,0x39,0x39,0xEA,0xB1,0x59,0x5D,0x64,
+               0xFA,0xF4,0x1F,0xAB,0x25,0xA8,0x64,0xA5,0x74,0xDE,
+               0x52,0x44,0x05,0xE8,0x78,0x33,0x98,0x77,0x88,0x6D,
+               0x2F,0xC0,0x7F,0xA0,0x31,0x15,0x08,0x25,0x24,0x13,
+               0xED,0xFA,0x11,0x58,0x46,0x66,0x67,0xAF,0xF7,0x83,
+               0x86,0xDA,0xF7,0xCB,0x4C,0x9B,0x85,0x09,0x92,0xF9,
+               0x6E,0x20,0x52,0x53,0x30,0x59,0x9A,0xB6,0x01,0xD4,
+               0x54,0x68,0x8E,0x29,0x4C,0x8C,0x3E),
+       .sk = chunk_from_chars(
+               0x59,0x04,0x41,0x02,0xF3,0xCF,0xBE,0x1B,0xE0,0x3C,
+               0x14,0x41,0x02,0xF7,0xEF,0x75,0xFB,0xEF,0x83,0x04,
+               0x3F,0x7C,0xFC,0x20,0xC2,0x0B,0xEE,0xC0,0x07,0xDE,
+               0x3F,0x04,0x1F,0xBF,0x0B,0xFF,0x40,0x10,0x41,0x03,
+               0x0C,0x40,0x04,0x0F,0xAE,0x7E,0x10,0x3F,0x7E,0x10,
+               0x00,0x85,0xFC,0x01,0x3D,0x14,0x10,0xC8,0x0C,0x2F,
+               0x00,0x08,0x10,0x46,0x1C,0x2F,0x48,0x0B,0xEE,0x80,
+               0x17,0xD1,0x7F,0x07,0xF1,0x41,0x1B,0xA2,0x40,0x13,
+               0xC1,0xBD,0xF8,0x3D,0xC4,0x07,0xD1,0x7E,0x07,0xC1,
+               0x39,0x17,0xF0,0xF9,0x04,0x40,0x45,0xFC,0x40,0xBD, /* 100 */
+
+               0x0F,0xF0,0x7D,0x07,0xEF,0x00,0x03,0xDF,0xC1,0xF3,
+               0xCF,0xFD,0x1F,0xC0,0x3F,0xEF,0xC0,0xB8,0xFC,0x6E,
+               0x7B,0x0B,0xBD,0xBD,0x0F,0xE0,0xBE,0x17,0xD1,0x43,
+               0x07,0xEF,0xFE,0x0F,0xBF,0xC6,0xF8,0x1F,0xBF,0xF4,
+               0x3E,0xC1,0xF8,0x70,0x41,0xD4,0x20,0x83,0xEC,0x3D,
+               0xC2,0xF4,0x40,0x7B,0xF8,0x4E,0xC4,0x14,0x0F,0xC4,
+               0x03,0xF0,0x37,0xF3,0xFE,0xC0,0x13,0xE0,0xFE,0xE0,
+               0x21,0x80,0x08,0x2F,0x83,0xFB,0xE0,0x7B,0xFF,0xE0,
+               0x43,0xF4,0x0E,0xC6,0xFF,0xB1,0xBF,0x20,0x00,0x07,
+               0xFF,0xBF,0xFA,0x0F,0xFF,0x6F,0xFB,0xCE,0x83,0xEB, /* 200 */
+
+               0xFE,0xBE,0xFC,0x0F,0xFD,0xF3,0xF1,0x03,0xFC,0x6F,
+               0x3F,0xF0,0x50,0x0A,0x18,0x71,0x83,0x08,0x00,0x7D,
+               0x03,0xF2,0x00,0xE4,0x21,0x3B,0xF0,0x4F,0xFD,0x17,
+               0xD0,0x00,0xF0,0x01,0x7A,0x17,0xF1,0x80,0xE0,0x4F,
+               0xFF,0x07,0xDE,0xC2,0x24,0x40,0x48,0x14,0x8E,0x87,
+               0x04,0x50,0x3E,0xE0,0x6F,0x86,0x08,0x02,0x43,0xF8,
+               0x1F,0xFF,0x03,0xBF,0x40,0x03,0xF0,0x7E,0xF3,0xDE,
+               0x02,0xFB,0xFF,0xC0,0x04,0x20,0xC1,0xF4,0x0F,0xBD,
+               0xF0,0x70,0x7E,0x04,0x3F,0xF5,0xFF,0xD0,0x00,0x04,
+               0x30,0x40,0x0C,0x4F,0x49,0xF4,0x20,0x7C,0x14,0x2F, /* 300 */
+
+               0x80,0xEC,0x3E,0x01,0x0B,0xFF,0x7C,0x13,0xF0,0x7F,
+               0xF8,0x5F,0x7F,0x17,0xE0,0x7C,0x17,0xFF,0x33,0xFC,
+               0x4E,0xC3,0x03,0xFF,0xBC,0xFF,0xEE,0xC4,0x18,0x30,
+               0xFF,0x08,0x31,0xBD,0xF4,0x5F,0x05,0xF0,0x6F,0xC5,
+               0x03,0xB0,0xC0,0xF8,0x4E,0x40,0x13,0xE1,0x00,0xE7,
+               0xE1,0x44,0x14,0x50,0xC2,0xFB,0xEE,0xBC,0x0C,0x0F,
+               0xBE,0xFC,0x60,0xBC,0xFF,0xEF,0x3C,0xFB,0xDF,0x43,
+               0x03,0xEF,0x80,0x0B,0xF2,0xBE,0x0B,0xF0,0x01,0xF0,
+               0x1F,0x43,0xF4,0x1F,0xFE,0x08,0x51,0x7B,0x00,0x11,
+               0x41,0xE0,0x01,0x44,0xF7,0xEF,0x80,0x07,0xCE,0xBD, /* 400 */
+
+               0xFF,0xFF,0x42,0x13,0xA0,0xB9,0xF8,0xA0,0xFE,0x04,
+               0x10,0x3C,0x17,0xE0,0x82,0x0B,0xB1,0xC3,0x0C,0x30,
+               0xC0,0x0F,0xFF,0xFC,0x00,0x00,0x7D,0x18,0x01,0x7C,
+               0xFF,0x90,0xC3,0x10,0x1E,0x7E,0x10,0x30,0x40,0xFC,
+               0x4F,0xBE,0x04,0x21,0x3E,0x07,0xAF,0x80,0xFF,0xEF,
+               0xC8,0x0F,0xBF,0xBD,0x08,0x10,0xBC,0xFB,0x8F,0xBC,
+               0x08,0x7F,0xB8,0xFF,0xF1,0x01,0x0C,0x2E,0x81,0x00,
+               0x2F,0x3E,0xF3,0xBF,0x01,0xF0,0x7E,0x41,0xFB,0xC0,
+               0x7F,0x2C,0x0F,0xB8,0xF4,0x3F,0x40,0x1C,0x5D,0x81,
+               0xFF,0xCE,0xBE,0x07,0xC0,0x7E,0x0B,0xF1,0x7E,0xEB, /* 500 */
+
+               0xEE,0x83,0x0C,0x51,0x40,0x03,0xFF,0x7E,0xF3,0xE0,
+               0x84,0x03,0xD1,0xFF,0xFF,0xE1,0x05,0xF8,0x40,0xC2,
+               0x0B,0xDF,0x06,0x07,0xFF,0xFE,0xF4,0x6E,0x7E,0xFF,
+               0xF0,0x80,0x00,0x40,0x0D,0xE8,0x30,0x00,0x0F,0x3F,
+               0x82,0xEF,0x9D,0x82,0xE8,0x4E,0xFF,0xF3,0xCE,0xC4,
+               0xE8,0x1E,0x01,0x00,0x21,0x03,0x10,0x2E,0xFC,0x08,
+               0x0F,0x3B,0x08,0x01,0x04,0x1B,0xAE,0x42,0xF7,0xF0,
+               0x40,0xF8,0x3E,0xC3,0x10,0x10,0x03,0x1B,0xC0,0x41,
+               0x0F,0xAF,0xF9,0xF0,0x00,0x40,0x10,0x13,0x3A,0x08,
+               0x9F,0xFE,0xF7,0xBE,0x83,0x17,0xA0,0x02,0x0F,0xEF, /* 600 */
+
+               0x01,0x00,0x52,0xBA,0x04,0x10,0x7E,0x10,0x0F,0x82,
+               0x1C,0x2F,0x41,0xF4,0x4F,0x4E,0xF7,0xB0,0x00,0xF0,
+               0x2E,0x41,0xF8,0x2F,0x38,0x08,0x30,0xFE,0x08,0xA1,
+               0xF7,0x07,0xFF,0x82,0xEC,0x7F,0x42,0xE8,0x10,0x04,
+               0x04,0x11,0x03,0xE8,0x30,0x7B,0x13,0xD0,0xFD,0xFF,
+               0x8F,0x83,0x0F,0x9F,0xC5,0xFF,0xCD,0x7E,0x04,0x0F,
+               0x41,0x0F,0xFF,0xB9,0xF4,0x23,0x75,0x08,0x60,0xC1,
+               0x1C,0x5F,0xFA,0x14,0x4E,0xC0,0x08,0x0F,0x02,0xDC,
+               0x0F,0x42,0x08,0x20,0x45,0x07,0x90,0x02,0x0B,0xCF,
+               0x80,0xEF,0xFF,0xBC,0xEC,0x4F,0xBF,0xF4,0x20,0x0A, /* 700 */
+
+               0xFC,0x00,0xC0,0x20,0x60,0xC0,0x04,0x30,0x3E,0xF8,
+               0x1F,0xFA,0x10,0x41,0x07,0xE4,0x11,0x7A,0xF0,0x1F,
+               0x81,0x20,0x2F,0xC1,0xE4,0x41,0x43,0xFF,0xE2,0x06,
+               0xEB,0x3E,0x88,0x1B,0xB1,0x3F,0x13,0x92,0x04,0x03,
+               0xFF,0x7A,0x00,0x01,0x44,0x10,0x2E,0x7F,0xFC,0x21,
+               0x43,0xE7,0xFF,0x4A,0xF3,0xF1,0x3F,0x07,0xE1,0x81,
+               0xDC,0x31,0x7E,0x24,0x0F,0x45,0x00,0x30,0x3F,0x2D,
+               0xDD,0xCF,0x1E,0x15,0x13,0xE3,0xEF,0x15,0xE8,0xDC,
+               0x13,0x09,0xE5,0x0A,0xEE,0x03,0xEF,0xDC,0x17,0x08,
+               0x17,0x06,0xFD,0x03,0xE6,0xEC,0xE4,0xF3,0x0E,0xBD, /* 800 */
+
+               0x19,0x09,0x05,0x19,0x06,0xE9,0x0C,0xE8,0x06,0xEB,
+               0x0B,0x19,0xE7,0x19,0xEF,0xFB,0xF1,0x0D,0x0D,0xF1,
+               0xDC,0x0C,0xF6,0xF1,0xF4,0xF8,0xFE,0xFB,0xE9,0xF9,
+               0x55,0x0E,0x21,0x07,0xFC,0xDC,0xCB,0xDF,0xE9,0xF4,
+               0xF7,0xEE,0x1A,0xF8,0x14,0x21,0x15,0xF9,0x10,0x00,
+               0x2A,0xF2,0xF5,0xFF,0x14,0x1A,0xDA,0x22,0x0A,0xEC,
+               0xFE,0x04,0x0C,0xEF,0x0B,0x29,0xEB,0x20,0x19,0x30,
+               0xF2,0xD3,0xE4,0x01,0xE5,0xDE,0xEF,0xF4,0xDD,0xEA,
+               0x17,0xF1,0xFE,0x14,0x12,0x17,0xF8,0x1C,0x36,0x05,
+               0x01,0x09,0xF8,0xF6,0x1F,0x02,0xDD,0x19,0xF9,0x03, /* 900 */
+
+               0x10,0xC7,0xF4,0x02,0x08,0xE9,0x05,0x2C,0x39,0x42,
+               0xF8,0xFF,0xF2,0xCC,0xF9,0xFD,0xF8,0x3C,0xFA,0x12,
+               0xDC,0x09,0x1C,0x0D,0x02,0xF0,0x04,0x11,0xF5,0x28,
+               0x1E,0x40,0xD7,0xF9,0x2D,0xBA,0x11,0xD7,0x3D,0x04,
+               0xC1,0x0B,0xFD,0x13,0xE6,0x17,0x11,0x0A,0xF3,0xED,
+               0x05,0xF6,0xCF,0xE7,0x05,0xE0,0xF7,0x0E,0x1F,0xF8,
+               0x05,0x33,0xFC,0x12,0x0C,0x00,0x2C,0xE8,0x1F,0xF5,
+               0x26,0x38,0x19,0x0F,0xE3,0xFE,0xD6,0xF0,0xFB,0xBB,
+               0x23,0xE6,0xF4,0x08,0xEF,0x32,0x22,0x0B,0x13,0xDD,
+               0x27,0xF0,0x07,0xE5,0xFA,0x00,0xD7,0x26,0x14,0xF0, /* 1000 */
+
+               0xE3,0x02,0x21,0x07,0x07,0xEC,0x11,0x1E,0x07,0x0E,
+               0x2A,0x03,0x2D,0xF9,0x1D,0xE3,0xFC,0xE8,0x00,0xF1,
+               0xF9,0xF2,0xF7,0xFE,0x17,0x01,0x01,0x18,0x04,0x12,
+               0xCB,0xD1,0xE9,0x00,0x19,0xF2,0x01,0x15,0x22,0xDA,
+               0xEA,0xED,0x13,0xF8,0xE5,0xF4,0x25,0xDC,0xEF,0x24,
+               0xE0,0x1C,0xE6,0x14,0xE7,0xDC,0xEC,0x01,0xF2,0xF4,
+               0xF9,0x14,0xF4,0x01,0x01,0x07,0xED,0x26,0xE2,0xE9,
+               0xDF,0x0B,0xF5,0xF0,0x07,0xEA,0x07,0xFA,0xFB,0xC6,
+               0xD7,0xE6,0x07,0xFA,0xFC,0xFD,0x27,0x0D,0xFD,0x0D,
+               0x17,0xFC,0x4E,0xF0,0xEE,0x00,0x07,0x1A,0xEC,0xDE, /* 1100 */
+
+               0x09,0xF8,0xF2,0x15,0xE1,0x13,0xF8,0x02,0x09,0xCC,
+               0xF3,0x08,0xD7,0xE6,0x25,0x1E,0xCE,0x0E,0xDF,0xED,
+               0x0C,0xC9,0xF4,0x05,0x0B,0x27,0x14,0xF6,0x1B,0xF7,
+               0x03,0xF0,0xEB,0xF1,0x04,0x01,0x0D,0xEB,0xFB,0xF2,
+               0x1A,0xFC,0x1B,0xF0,0x18,0x23,0xFE,0xDE,0xFA,0xF7,
+               0xF8,0x07,0xE3,0xF3,0x02,0x0A,0xEB,0x01,0xFE,0x19,
+               0xEE,0xE8,0xE9,0x0D,0x00,0xE5,0xFA,0xED,0x1E,0xFD,
+               0xF6,0x28,0xE5,0xF0,0xE6,0xF0,0xFC,0x13,0xF4,0xFB,
+               0x05,0xFB,0x0B,0x09,0xEA,0x0A,0x0E,0x08,0xEE,0x13,
+               0x29,0x32,0x12,0xE9,0x0C,0xE4,0xFE,0xF2,0x23,0xF4, /* 1200 */
+
+               0xFF,0x03,0x0B,0xEB,0xED,0x1B,0x40,0x2E,0xD2,0xF6,
+               0x17,0x11,0x02,0xBC,0x0C,0xF9,0xE9,0xF3,0x35,0xED,
+               0x0C,0x01,0xFA,0xF0,0xFE,0xFA,0xE4,0x1D,0xF0,0x05,
+               0x0A,0x16,0x2C,0x11,0x17,0x1C,0xD9,0x0B,0xEE,0x21,
+               0x12,0x18,0xED,0xFA,0xFA,0x0F,0x03,0xF4,0x17,0x14,
+               0x12,0xF3,0x19,0xD6,0x0B,0x01,0xFA,0xEE,0x1F,0x28,
+               0x23,0xF0,0xD6,0xEF,0x12,0xD6,0xDF,0xEA,0xFB,0xFC,
+               0x17,0x0D,0xEC,0xDA,0x06,0xE7,0xCE,0xD5,0x00,0x03,
+               0x1E),
+       .sm = chunk_from_chars(
+               0x02,0x6B,0x33,0xB3,0xC0,0x75,0x07,0xE4,0x20,0x17,
+               0x48,0x49,0x4D,0x83,0x2B,0x6E,0xE2,0xA6,0xC9,0x3B,
+               0xFF,0x9B,0x0E,0xE3,0x43,0xB5,0x50,0xD1,0xF8,0x5A,
+               0x3D,0x0D,0xE0,0xD7,0x04,0xC6,0xD1,0x78,0x42,0x95,
+               0x13,0x09,0xD8,0x1C,0x4D,0x8D,0x73,0x4F,0xCB,0xFB,
+               0xEA,0xDE,0x3D,0x3F,0x8A,0x03,0x9F,0xAA,0x2A,0x2C,
+               0x99,0x57,0xE8,0x35,0xAD,0x55,0xB2,0x2E,0x75,0xBF,
+               0x57,0xBB,0x55,0x6A,0xC8,0x29,0x0D,0xD7,0x1D,0x25,
+               0x66,0x3D,0x3C,0x43,0x6F,0x41,0x12,0x46,0x1E,0xB7,
+               0x92,0x47,0x97,0xE7,0x25,0x4C,0x1C,0x1B,0xBB,0x9F, /* 100 */
+
+               0x81,0xA5,0xEC,0x1E,0x8A,0xA1,0x00,0x32,0xDA,0xF1,
+               0xEA,0xCC,0xF6,0x5A,0x46,0x09,0xD8,0x2B,0x54,0x6E,
+               0xE4,0x8B,0x6A,0xDD,0x91,0xD7,0x14,0xC6,0xBC,0x99,
+               0x23,0x9A,0x8F,0xFE,0x3D,0x95,0x93,0x08,0xEE,0xE4,
+               0xD9,0xF5,0xE2,0x36,0x98,0xA1,0x29,0x79,0xB6,0x36,
+               0x4D,0x76,0xC5,0xB2,0x8C,0x97,0xC8,0xE3,0x69,0xD1,
+               0xDF,0xCD,0x14,0x8E,0x1A,0x0F,0x8B,0xD1,0x22,0xB0,
+               0x62,0x4D,0x8E,0x77,0xF2,0x70,0xDE,0x94,0x9D,0xBC,
+               0x9B,0xF3,0xA5,0xCB,0xCF,0x0F,0xEC,0xC1,0xBD,0x09,
+               0x2E,0x4F,0x4A,0x8F,0xE5,0xD0,0x98,0x7E,0x99,0x97, /* 200 */
+
+               0x53,0xA2,0x43,0x3E,0x82,0x06,0x19,0xCB,0x80,0xC0,
+               0x3F,0x53,0x04,0x00,0xEA,0x46,0xC8,0xEB,0x85,0xF1,
+               0x65,0x49,0x19,0xCD,0x74,0xB4,0x44,0x7D,0x17,0x61,
+               0xD9,0x1F,0x11,0x21,0x50,0xB5,0x28,0x9B,0xEF,0x42,
+               0x44,0x10,0x95,0xAD,0x21,0x5E,0xB5,0x12,0x4C,0x89,
+               0x5C,0xAF,0xA6,0xAD,0xF3,0x47,0xA8,0x2F,0x71,0x43,
+               0xC5,0x94,0x44,0x1C,0x37,0x1E,0xE9,0xB9,0x30,0xE4,
+               0x9B,0x50,0xCB,0x61,0x13,0x9A,0x69,0x02,0xCC,0x28,
+               0x09,0x15,0xDD,0x68,0x4D,0x22,0x4B,0x72,0xDD,0xF5,
+               0x23,0x70,0x3A,0xEF,0xCB,0x1E,0x9D,0xC7,0x4E,0xA4, /* 300 */
+
+               0x5F,0x7A,0xA7,0x6D,0x58,0x9C,0xD8,0xA7,0x45,0x9B,
+               0x52,0x24,0xB3,0x93,0x49,0xED,0x81,0x82,0x44,0x5D,
+               0x09,0x20,0xEE,0x1D,0x16,0x72,0x78,0xD7,0x1D,0x48,
+               0x3E,0xA6,0x54,0x9E,0x77,0x63,0xED,0xDE,0x5A,0x93,
+               0xA9,0x8A,0x48,0x74,0x51,0x65,0x2D,0xBE,0x6C,0xE7,
+               0x6C,0x84,0xEE,0x45,0x6C,0x45,0xE8,0xFF,0xAE,0xBB,
+               0x1F,0x1A,0x62,0x8E,0xBD,0xD1,0x14,0xC9,0x4A,0x5A,
+               0x7E,0xC3,0x54,0x8E,0x31,0x38,0x24,0x5D,0x94,0x23,
+               0xAF,0x13,0xFE,0xB5,0xB4,0x0C,0x4B,0xB7,0xF3,0x59,
+               0x57,0xD9,0x5B,0xE2,0xDE,0x61,0x22,0xF7,0x46,0x78, /* 400 */
+
+               0xE4,0x3A,0xF0,0xCB,0x8B,0xC1,0x30,0x68,0x4E,0x52,
+               0x8E,0xFE,0x68,0x6B,0x0F,0xE4,0x17,0x41,0xEE,0xE6,
+               0xA2,0xEC,0x42,0xA5,0x2C,0x45,0xBF,0xBB,0x93,0x41,
+               0xED,0x84,0xB4,0x7E,0xDD,0x89,0x22,0x4C,0x91,0x36,
+               0x60,0x42,0xDA,0xB4,0xA9,0x7A,0x40,0x90,0xC9,0x6A,
+               0x42,0xA1,0x66,0xBD,0x32,0xCA,0x85,0xEA,0x51,0x08,
+               0x5A,0x59,0xEA,0xCB,0xF1,0x7B,0x99,0xF0,0x2B,0x0C,
+               0xF6,0x93,0x55,0x4F,0xB2,0x39,0x71,0xCF,0x52,0x50,
+               0xE9,0xC8,0x60,0x3A,0xD4,0xAE,0x2E,0x87,0x29,0xB9,
+               0x23,0xFE,0xF0,0x67,0x9E,0xF2,0x1B,0xEE,0x4E,0xE9, /* 500 */
+
+               0x99,0x27,0xBB,0xD7,0x6D,0xE3,0x1A,0x58,0xB8,0xA3,
+               0x34,0x84,0x17,0x5B,0x66,0xD2,0x57,0x8C,0x86,0xC1,
+               0xFD,0x61,0x45,0xD6,0xC7,0x0B,0x88,0xD0,0xC8,0x93,
+               0x66,0xE4,0x61,0xF8,0x6D,0x11,0x7F,0x79,0x7C,0x12,
+               0x6C,0x0B,0x6A,0xE2,0xC5,0x71,0x69,0x61,0x86,0x91,
+               0x27,0x94,0xF3,0x74,0xC2,0xAF,0xF3,0xFA,0xA2,0x35,
+               0xCA,0xAA,0xB1,0x3A,0xE8,0xC5,0x96,0x37,0x96,0xCD,
+               0xA7,0xAC,0x31,0xB9,0xA2,0xC3,0xA3,0xC8,0xAD,0x4D,
+               0x5F,0xB0,0x64,0x21,0xE2,0x80,0xA3,0x91,0xC8,0xAA,
+               0x2E,0xD2,0x3B,0x4D,0x00,0xCA,0x3B,0x88,0x3F,0x99, /* 600 */
+
+               0x27,0x50,0xF0,0xB2,0x14,0xA5,0xCF,0x73,0xB9,0x17,
+               0xED,0x6A,0xAD,0x3D,0x40,0xCA,0x16,0x48,0xDC,0x7B,
+               0x27,0x53,0x65,0x52,0x95,0xA0,0xA8,0x77,0xB1,0xA6,
+               0x9D,0x1B,0x76,0x98,0x26,0x7D,0xF0,0x8D,0x50,0x18,
+               0x1A,0x2C,0x64,0xD3,0x71,0xAF,0xF8,0xD9,0x26,0x2E,
+               0x27,0xCF,0xFD,0x74,0x56,0x99,0xAA,0x2C,0xC9,0x77,
+               0xB1,0xF2,0xDB,0x55,0x0F,0x4B,0x51,0x95,0x60,0xDF,
+               0xDE,0x67,0xDD,0x1B,0x93,0xF4,0xE4,0xED,0xEC,0xD3,
+               0x02,0x46,0xD6,0x78,0x11,0x24,0x8B,0x9B,0x87,0x11,
+               0x34,0xAF,0x3D,0x90),
+},
+/** count = 0 NIST Round 3 liboqs-0.5.0 KAT */
+{
+       .type = KEY_FALCON_1024,
+       .seed = chunk_from_chars(
+               0x06,0x15,0x50,0x23,0x4D,0x15,0x8C,0x5E,0xC9,0x55,
+               0x95,0xFE,0x04,0xEF,0x7A,0x25,0x76,0x7F,0x2E,0x24,
+               0xCC,0x2B,0xC4,0x79,0xD0,0x9D,0x86,0xDC,0x9A,0xBC,
+               0xFD,0xE7,0x05,0x6A,0x8C,0x26,0x6F,0x9E,0xF9,0x7E,
+               0xD0,0x85,0x41,0xDB,0xD2,0xE1,0xFF,0xA1),
+       .msg = chunk_from_chars(
+               0xD8,0x1C,0x4D,0x8D,0x73,0x4F,0xCB,0xFB,0xEA,0xDE,
+               0x3D,0x3F,0x8A,0x03,0x9F,0xAA,0x2A,0x2C,0x99,0x57,
+               0xE8,0x35,0xAD,0x55,0xB2,0x2E,0x75,0xBF,0x57,0xBB,
+               0x55,0x6A,0xC8),
+       .pk = chunk_from_chars(
+               0x0A,0x04,0x41,0xA9,0xB7,0x3F,0x49,0x4D,0x16,0x55,
+               0x66,0x80,0xB1,0x2B,0x0F,0x44,0x6A,0x65,0x27,0x00,
+               0xE4,0x30,0x41,0x51,0xBC,0x31,0x06,0x83,0xC4,0x3F,
+               0x20,0xAB,0x28,0x49,0x2F,0xF5,0x80,0x70,0x80,0x68,
+               0xFA,0x06,0x42,0x75,0xC1,0xB0,0xD0,0x84,0x52,0xFC,
+               0x7C,0x32,0x41,0x54,0x92,0x9C,0xA8,0x50,0xD4,0xE6,
+               0xF3,0x42,0x5B,0x0F,0x14,0x94,0x75,0xA1,0x44,0x68,
+               0xC7,0x40,0xBE,0x98,0x42,0xD2,0xC1,0xBB,0xB9,0x3E,
+               0x20,0x01,0xF4,0x20,0x20,0x68,0xD0,0x60,0xC1,0xAA,
+               0x9F,0x99,0xA5,0xF6,0x7E,0x86,0x80,0x0F,0x2E,0x2A, /* 100 */
+
+               0x48,0xFC,0xE9,0x5A,0x1E,0x9F,0x57,0x0A,0x12,0xD4,
+               0xA1,0x1B,0x22,0xAC,0xB8,0x67,0x16,0xFB,0x6E,0xBB,
+               0x45,0xB6,0xCE,0x10,0x20,0xE7,0xF4,0x4E,0x42,0x30,
+               0x10,0x37,0x13,0xEC,0x34,0x60,0x55,0xD4,0x07,0xC9,
+               0x69,0x60,0x5D,0x9F,0x76,0xCB,0x8B,0x2F,0x0A,0xF2,
+               0xBB,0xE1,0xAC,0x1F,0x4A,0x27,0x80,0x09,0x26,0x6F,
+               0xDE,0xEA,0x0A,0xFA,0xDA,0x25,0x98,0xE3,0x6A,0x49,
+               0x2E,0x0B,0x40,0xEA,0xE1,0x25,0x39,0xA4,0xB1,0xE4,
+               0x4D,0x15,0x0D,0x47,0xC1,0x92,0xD9,0x89,0x5C,0xA0,
+               0x8D,0x1E,0x91,0xD2,0x4E,0x53,0x5C,0x6D,0x64,0x90, /* 200 */
+
+               0x03,0x8C,0x62,0x90,0x45,0x91,0x75,0x08,0xCA,0x81,
+               0x5E,0x14,0xF4,0x01,0xF4,0xA9,0xA5,0xC1,0x5E,0x01,
+               0x12,0x04,0xD0,0x12,0xD0,0xBB,0x71,0x87,0x6A,0xBD,
+               0x5A,0x8C,0x75,0xA9,0x4F,0x32,0xFE,0x06,0x28,0x28,
+               0x9D,0xB4,0x66,0x4A,0x96,0xB4,0x5E,0x49,0x4D,0x25,
+               0x28,0xEA,0x90,0x78,0x1A,0x30,0x98,0xE8,0xDA,0xD7,
+               0x6F,0xD5,0x83,0xA8,0x90,0xEF,0xEF,0xAE,0x86,0x1E,
+               0x81,0x5D,0xC2,0x68,0x94,0xEC,0x59,0x65,0xFE,0x8F,
+               0x38,0x9C,0x14,0xEC,0xD7,0x7B,0x20,0x32,0x7C,0x44,
+               0xB2,0x02,0xCB,0xDE,0x2B,0x45,0x66,0xB9,0xF7,0x3A, /* 300 */
+
+               0x02,0x2F,0xA0,0x64,0x1B,0xF8,0x1C,0xAA,0xB7,0x0E,
+               0x82,0x20,0x65,0xB6,0x1F,0x5E,0x9F,0xC9,0x19,0x23,
+               0x8D,0xEA,0xF8,0x0B,0xA4,0xC1,0x72,0x6D,0xD5,0x0C,
+               0x64,0x2E,0x39,0xDA,0xDA,0x13,0xEC,0x89,0x35,0xE9,
+               0x93,0x6A,0x95,0x76,0x6F,0xFD,0xF8,0x68,0xC4,0xD9,
+               0x5D,0xB2,0xC1,0xA6,0x70,0x97,0x22,0x5C,0x46,0x4E,
+               0xFA,0xA8,0xDE,0x05,0xD8,0x06,0xBC,0x5E,0x47,0xF7,
+               0x96,0x43,0x18,0x01,0x42,0xD5,0xEF,0x53,0xA8,0x8E,
+               0x7E,0x06,0xC3,0x64,0xA5,0x98,0x77,0x9C,0x04,0x83,
+               0x0B,0x08,0xE6,0x91,0x04,0x95,0xF9,0x93,0x8A,0xF1, /* 400 */
+
+               0x93,0xAC,0x54,0x97,0x0F,0xED,0x8D,0xB6,0x96,0x00,
+               0x12,0x56,0x45,0x1F,0x91,0x39,0x6C,0x67,0xF1,0xA9,
+               0x0F,0x8D,0x5D,0x51,0xBA,0x9C,0xA9,0x0B,0x21,0x7A,
+               0x8F,0x27,0xDC,0x84,0x40,0x96,0x44,0x8F,0x75,0xB1,
+               0x2C,0x42,0x8B,0xD0,0xFF,0x29,0x84,0x60,0x0F,0x95,
+               0xB9,0xD6,0x01,0xCE,0xCA,0xF9,0x67,0xC6,0xA0,0x62,
+               0xA3,0x99,0xAB,0x1F,0xB6,0x7D,0xA1,0x10,0x23,0x9E,
+               0x73,0x9E,0x61,0x95,0xA8,0x11,0x45,0x9F,0x21,0xB4,
+               0x57,0x0F,0x6C,0x07,0x7D,0xF8,0x58,0x55,0x0C,0x4F,
+               0xED,0x90,0x72,0x40,0x44,0x2A,0xCC,0xFE,0x51,0x95, /* 500 */
+
+               0xBE,0xF6,0x8C,0x2C,0x95,0x75,0x6E,0x88,0x93,0x78,
+               0xD0,0x5F,0x7E,0xDE,0x72,0x23,0xAE,0x27,0x61,0x8D,
+               0x6A,0x91,0x10,0x5E,0x8C,0x64,0x92,0xD9,0xAC,0xB3,
+               0x05,0x26,0xAC,0xA3,0x59,0x76,0x34,0x3F,0xD4,0x6C,
+               0x12,0x84,0xA4,0x67,0x58,0x54,0xBB,0x44,0xE9,0xDC,
+               0xEB,0x32,0x49,0x9E,0xA6,0xA4,0xF4,0x52,0xDD,0x59,
+               0x40,0x0B,0xF0,0x96,0x17,0x5B,0x06,0x0C,0x15,0xE5,
+               0xED,0x50,0x1B,0xEB,0xB2,0x4A,0x9C,0x0C,0xA9,0x6D,
+               0xD5,0xF3,0x48,0xF6,0x6E,0x27,0x48,0x8D,0xF0,0xB8,
+               0x95,0x45,0x69,0xE4,0x6B,0x96,0xA4,0x09,0xAD,0xB2, /* 600 */
+
+               0xD1,0xAC,0xE2,0x38,0x89,0xE1,0x7A,0xEA,0x25,0x32,
+               0x88,0xC5,0x45,0xF4,0x8B,0x82,0xC1,0x2B,0x29,0x56,
+               0xE0,0x9C,0x00,0x8D,0x45,0x5C,0x93,0x14,0x5F,0x63,
+               0x83,0x48,0x50,0x23,0x14,0xEB,0x27,0x1D,0x92,0x4C,
+               0xED,0x3B,0x4F,0x5E,0x9F,0xBD,0x3D,0x10,0xB3,0xCE,
+               0xA6,0x77,0x8B,0x50,0x61,0x21,0x14,0x0E,0xE2,0x54,
+               0x14,0xEC,0x56,0xA5,0xCE,0x05,0x7A,0x24,0x22,0xEA,
+               0x74,0xC0,0xA0,0x21,0x35,0x28,0x22,0xE7,0x64,0x36,
+               0x63,0x64,0x47,0x31,0x7A,0x12,0x1D,0x4A,0xFD,0x25,
+               0x41,0x00,0x8A,0x99,0x7B,0x15,0xF3,0xA2,0x98,0xDE, /* 700 */
+
+               0x75,0x87,0xAA,0xDC,0x90,0x3B,0xA6,0x44,0xA8,0x59,
+               0xEC,0x40,0xA3,0xD8,0xD7,0x52,0x54,0xCB,0xA5,0x81,
+               0x21,0x73,0x80,0xF9,0x5C,0x33,0xA4,0xD5,0x14,0xB9,
+               0x46,0xCB,0x57,0x3A,0x50,0xB8,0x19,0xF8,0x70,0x2A,
+               0x35,0x02,0x96,0x45,0xB0,0x08,0xEB,0x08,0xDE,0xF1,
+               0x85,0x52,0xE7,0x06,0xF4,0xEF,0xF1,0x47,0xC9,0x3B,
+               0x68,0x3D,0xED,0xBD,0x6A,0x7C,0xA4,0x18,0x3B,0xD2,
+               0xF5,0xAB,0x38,0x90,0xD5,0xB3,0x2C,0x47,0x80,0xBE,
+               0x20,0x54,0xEB,0x15,0x1D,0x18,0x2D,0x54,0xA5,0x02,
+               0x57,0x6F,0x39,0x58,0x99,0xC6,0xD5,0x48,0xC9,0x16, /* 800 */
+
+               0xB4,0xBD,0x05,0x8E,0x11,0x62,0x43,0x88,0x7D,0x56,
+               0xC4,0x62,0xA9,0xA6,0x16,0xAB,0xE2,0x82,0x04,0xED,
+               0x5A,0x1A,0x32,0x39,0xC9,0x85,0x92,0x64,0x51,0x3B,
+               0x02,0xC1,0x1F,0x0C,0x30,0xC9,0x76,0xC1,0xF6,0x82,
+               0x5B,0xB1,0x52,0xE8,0xD4,0xA4,0x21,0x29,0xA7,0x31,
+               0x37,0x03,0x17,0x24,0x32,0x23,0x22,0xB7,0x92,0x86,
+               0x64,0xC3,0x2C,0xAC,0xD0,0xDA,0x7A,0x29,0xFC,0x87,
+               0xC8,0x08,0xA2,0xA0,0xCE,0x91,0x94,0x42,0x4B,0x07,
+               0x7C,0x1E,0xEF,0x54,0x35,0x5F,0x03,0xF5,0x0A,0x87,
+               0x08,0x89,0x86,0x82,0x75,0xDB,0xD5,0x26,0x8C,0x53, /* 900 */
+
+               0xB2,0xC9,0x85,0x4B,0xBB,0x69,0xFF,0x12,0xF7,0x5D,
+               0x11,0x34,0x38,0xDF,0x3A,0x6F,0x12,0x97,0x54,0xCA,
+               0x76,0x22,0xB0,0x66,0xED,0x5B,0x45,0x64,0x26,0x6C,
+               0xE0,0x11,0xA5,0x80,0x4B,0x7B,0xE1,0xC5,0xE2,0x4D,
+               0xE1,0xE1,0x71,0x98,0x48,0x93,0x6A,0x99,0x78,0xC0,
+               0x14,0x8F,0x08,0xB2,0xE6,0x10,0x09,0x0C,0x99,0x58,
+               0x5D,0x32,0x36,0x95,0xAA,0xDA,0x1A,0x33,0x5A,0x75,
+               0x90,0xF7,0xEE,0x50,0x1F,0x28,0x4D,0xF5,0xFD,0x1C,
+               0x75,0x7E,0x4C,0x9B,0x92,0xEA,0xAF,0x73,0x7F,0x20,
+               0x02,0x6B,0x29,0x93,0x51,0x35,0x0C,0x8A,0xA8,0xC1, /* 1000 */
+
+               0x06,0x0D,0x78,0x61,0x31,0x50,0x12,0xC5,0x20,0x11,
+               0x8E,0x27,0xEA,0x08,0x90,0xCA,0x77,0x42,0x05,0x14,
+               0x5E,0xE7,0x24,0x4C,0x81,0x1E,0xD0,0xD2,0xA9,0xCF,
+               0x9A,0xCC,0xC3,0xC5,0xA0,0x1C,0x94,0xB4,0x80,0xCB,
+               0xD2,0xB4,0x1F,0xB7,0xB5,0x01,0x85,0x09,0x44,0xC2,
+               0xC4,0x89,0x08,0x9E,0xEA,0x9E,0xC6,0x63,0x9C,0x9A,
+               0x11,0x39,0xB7,0x56,0xC4,0x0B,0xA1,0x20,0xFA,0xDA,
+               0x90,0x4C,0x7C,0x06,0x77,0x2A,0x13,0x18,0x58,0xAE,
+               0x29,0x86,0xC2,0x27,0x8E,0x51,0x26,0x21,0x5E,0x63,
+               0x15,0x91,0x50,0x5E,0xF1,0xFF,0x28,0x1E,0x20,0x1B, /* 1100 */
+
+               0xBD,0x14,0x9D,0x7A,0xAC,0xA2,0x92,0x6D,0x8C,0xBB,
+               0x27,0x29,0xAA,0x99,0x77,0xE6,0x79,0xF5,0xDE,0x62,
+               0xA1,0x38,0xED,0xFC,0x9A,0xD1,0x1F,0x09,0xA9,0x84,
+               0xE6,0x70,0x4E,0x5C,0xAF,0x3F,0x64,0x51,0x01,0x0E,
+               0xD3,0xDA,0xB5,0xE0,0xD0,0x35,0x73,0x18,0x75,0x43,
+               0xFC,0xC6,0x7A,0xAD,0x6D,0x86,0xBB,0x56,0x13,0x83,
+               0x06,0xDE,0x79,0x81,0xEE,0x4C,0x67,0x6B,0x19,0xA0,
+               0xAC,0xBD,0xA0,0x17,0xFB,0x14,0x01,0x4B,0x1E,0x0B,
+               0xD4,0xCB,0xD9,0x89,0xA5,0x0A,0x9D,0x03,0xEF,0x21,
+               0xF7,0x5D,0xB6,0x31,0x04,0xEF,0x07,0xC0,0x4F,0x94, /* 1200 */
+
+               0x76,0x16,0x7D,0x47,0xEC,0xA3,0x10,0x45,0x17,0xBF,
+               0x8D,0xC0,0x0B,0x01,0x8F,0x91,0x78,0x43,0x7C,0x68,
+               0x10,0xE7,0x15,0xAE,0x60,0x36,0x84,0x75,0x50,0x54,
+               0x64,0x9E,0x5F,0x8E,0xBA,0x2B,0x33,0x7C,0x28,0xAE,
+               0x37,0x76,0x74,0xF1,0x2B,0x02,0xB4,0x28,0x5C,0xC9,
+               0xD1,0xEC,0x1F,0x45,0x9A,0xE8,0x8D,0xD4,0x48,0x6F,
+               0x30,0xA8,0xFC,0x7F,0xE3,0xD5,0xA6,0xAC,0x84,0xA6,
+               0xDB,0x05,0x6D,0x05,0xDC,0x03,0x5D,0xE1,0xCB,0x29,
+               0x89,0x0B,0x74,0xD0,0x5E,0xF4,0x43,0x2D,0xE4,0x51,
+               0x6C,0x09,0x83,0xFE,0x19,0x65,0xA0,0x01,0xD7,0x37, /* 1300 */
+
+               0xC7,0xDE,0x2D,0x88,0x5D,0xD3,0xD6,0x36,0xE1,0xB7,
+               0x89,0x8C,0x9E,0xCB,0x6A,0x9E,0xA7,0xA6,0xA1,0x5B,
+               0x4A,0x18,0xD2,0xA1,0xA0,0xF4,0xC8,0x77,0xEC,0x01,
+               0x93,0x0A,0x75,0x22,0x33,0x68,0xA8,0x2A,0x22,0xB5,
+               0x0A,0x76,0x81,0xD8,0x89,0x70,0xDE,0x12,0x98,0x5F,
+               0x98,0x78,0x65,0xF5,0xA5,0x89,0x8C,0xD5,0x23,0x70,
+               0x12,0x3D,0x63,0x8A,0xEA,0xB3,0x78,0x29,0xB5,0xAB,
+               0xB1,0xDA,0x8C,0x29,0x89,0xEE,0x53,0x2A,0xE5,0x38,
+               0x53,0x59,0x73,0xB0,0x22,0x49,0x10,0x33,0x16,0x7D,
+               0x51,0xC4,0x6A,0x06,0xB6,0xE1,0x7C,0x31,0x83,0xEC, /* 1400 */
+
+               0xA6,0x5B,0x75,0x15,0xF8,0x65,0xD5,0x30,0x8F,0xFD,
+               0x8D,0x69,0x85,0x55,0x52,0x5C,0xF6,0xD7,0x96,0x53,
+               0x59,0x7F,0x4E,0x46,0xD1,0x26,0xE6,0xD6,0x7F,0x14,
+               0x25,0x19,0xF1,0x41,0x0A,0xDC,0x69,0x58,0x9B,0x23,
+               0x16,0x5D,0x0F,0x87,0xEA,0xC5,0xF7,0xDE,0x4F,0x3C,
+               0x13,0xD1,0x4B,0x64,0x3B,0x60,0x8A,0x32,0xD9,0x80,
+               0xD1,0x25,0x56,0x7E,0x9C,0xAD,0x1E,0xB0,0x95,0xC4,
+               0xC4,0xBB,0x05,0xD5,0xA9,0xB1,0xEE,0xCC,0x3E,0x9A,
+               0xAD,0x41,0x74,0x18,0x28,0x41,0xF1,0xE8,0xC6,0x22,
+               0x04,0x11,0x6E,0x71,0x9F,0xF3,0x47,0x4E,0x46,0x63, /* 1500 */
+
+               0xAD,0xA9,0x86,0xDC,0xA0,0x8C,0x35,0x01,0x62,0x29,
+               0x8B,0x48,0x8B,0xAA,0xDD,0xB3,0x76,0x1D,0x25,0xCE,
+               0x51,0x14,0xFA,0xB6,0x4C,0x97,0x9E,0x5F,0xCD,0xAE,
+               0x6A,0x02,0x4E,0xF7,0xA8,0x06,0x79,0xA2,0x41,0x5A,
+               0xAC,0x32,0x44,0x08,0x23,0x23,0x63,0xD1,0x22,0x85,
+               0xDD,0x33,0xA6,0x90,0xB3,0x20,0x51,0x75,0xE6,0xC7,
+               0x5A,0x85,0xB3,0x68,0xF8,0xB1,0xFE,0x5B,0xBB,0x02,
+               0xEA,0xFA,0x62,0x4C,0x61,0x93,0x8B,0xC2,0xF8,0x05,
+               0xE9,0x4D,0x00,0x1A,0xAA,0x90,0xE6,0xA2,0xEE,0x88,
+               0x52,0xF8,0x2B,0x57,0x3D,0x09,0x52,0x4D,0xAE,0xD6, /* 1600 */
+
+               0x49,0x33,0xA0,0x39,0x18,0xC8,0x7E,0x03,0xBB,0xC5,
+               0xF9,0xA4,0x34,0x93,0x08,0x66,0x6E,0x83,0x31,0x8C,
+               0x96,0x8A,0x84,0x86,0xC8,0xA7,0x22,0xB1,0x39,0x8C,
+               0x84,0x29,0xA9,0x81,0x9A,0x7B,0xF5,0x09,0x57,0x39,
+               0x96,0x9C,0x03,0xBE,0xAD,0xF7,0x93,0x7A,0x5D,0xFA,
+               0x16,0xDC,0x7C,0x44,0xA8,0xE3,0xD3,0x55,0x90,0x0A,
+               0x7D,0x40,0x89,0xA5,0xD3,0x00,0xBB,0x69,0x0C,0xD8,
+               0x63,0x3B,0x4D,0xE3,0x66,0x70,0xD9,0x37,0x49,0x97,
+               0xA0,0x30,0x9E,0x11,0x76,0x30,0x13,0x1C,0xB2,0x69,
+               0xF4,0xB1,0xEF,0x9E,0xF1,0x29,0x80,0xC0,0xF3,0xF4, /* 1700 */
+
+               0x0E,0x64,0x23,0xC5,0x47,0xB8,0xC1,0x42,0xA0,0x4D,
+               0x4D,0x54,0xA0,0x05,0x42,0x62,0x77,0x68,0x87,0x35,
+               0x88,0x61,0x22,0x8D,0x10,0x52,0xD9,0xF9,0x60,0xA8,
+               0x77,0xF8,0x9E,0x0B,0x87,0x68,0xC3,0x07,0xC6,0x87,
+               0xA6,0x83,0x94,0x1F,0xA9,0xA4,0x73,0x11,0x0F,0x87,
+               0x96,0x6C,0xB5,0x6A,0x81,0xAF,0x94,0xC9,0x8C,0x61,
+               0x47,0x40,0xC9,0x45,0x39,0x99,0xA6,0xD0,0xD3,0xB1,
+               0x2D,0xE3,0x61,0xAD,0x73,0x75,0xEB,0xD3,0x02,0x2D,
+               0xC2,0xB7,0x62,0x6A,0x28,0x6A,0x63,0xB8,0x44,0x89,
+               0x47,0xCA,0xCC),
+       .sk = chunk_from_chars(
+               0x5A,0xF9,0x06,0x0E,0x0B,0x80,0xF0,0xCD,0xEE,0x03,
+               0x7F,0x08,0x42,0x20,0x8B,0xA4,0x17,0x3D,0xE0,0x7C,
+               0x3F,0xE7,0x01,0x91,0x8B,0xFD,0xFF,0x49,0xDF,0x00,
+               0x03,0xE7,0xCA,0x31,0x18,0x5E,0x00,0x40,0x2D,0x7C,
+               0x7F,0x07,0x06,0x5E,0x83,0x84,0x27,0xFD,0xF1,0x73,
+               0xC5,0xEA,0x0A,0x0F,0x13,0xC2,0xE7,0x87,0xF1,0xEC,
+               0x40,0x1F,0x7C,0x3E,0x8F,0xFA,0x00,0xC2,0x10,0x6C,
+               0x3E,0xF7,0x80,0x60,0x6B,0xE0,0x06,0x7A,0x1F,0x0F,
+               0xDD,0x07,0x84,0x40,0x84,0x3C,0xF0,0xB9,0xF2,0x80,
+               0x45,0xEF,0x88,0x10,0x80,0x02,0xE7,0xFE,0x2E,0x7F, /* 100 */
+
+               0xC2,0xFF,0x3E,0x0E,0x00,0x1F,0x19,0x43,0xCE,0x80,
+               0xA3,0x10,0x40,0x21,0x17,0xE0,0xF7,0x7E,0x11,0x0B,
+               0xFF,0xF8,0xC4,0x21,0x7C,0x44,0xF0,0xC4,0x30,0x7C,
+               0x21,0x18,0x3B,0xB0,0x84,0xA4,0x10,0x3F,0xE0,0x74,
+               0x7C,0x0F,0x80,0x02,0x70,0x7B,0xF8,0x06,0x5F,0x03,
+               0xFE,0xD7,0x82,0x1D,0xFF,0xA0,0xF7,0x82,0x21,0x03,
+               0xA2,0xC7,0xFC,0x51,0x77,0x02,0x17,0xF8,0x0F,0x0F,
+               0x5F,0x17,0x44,0x11,0x70,0x9B,0xF7,0x82,0x2F,0xFF,
+               0x60,0x27,0x02,0x03,0xF8,0x1D,0x19,0xBF,0xF0,0x7C,
+               0x42,0xF9,0x81,0xE0,0x7C,0x3B,0x30,0xC7,0xF0,0x08, /* 200 */
+
+               0x20,0x0F,0x79,0xF1,0x14,0x7F,0x37,0xC4,0x1E,0x78,
+               0x03,0x00,0xBB,0xE1,0xFF,0x9E,0x10,0xBE,0x00,0x68,
+               0x00,0x29,0x80,0x0F,0xF7,0xE0,0x26,0xF8,0x32,0x00,
+               0x03,0x1F,0xF6,0x0F,0xFF,0x5F,0x18,0xC3,0xDF,0x08,
+               0x04,0xD8,0x49,0xFF,0x04,0x01,0xF0,0x02,0x1F,0x7C,
+               0x65,0x17,0x3B,0xB1,0xF7,0xB9,0x20,0xB9,0xBF,0x04,
+               0x02,0xEF,0xB7,0xD0,0xEF,0xC2,0x08,0x44,0x1F,0xFF,
+               0xE3,0xF8,0x3E,0x00,0x03,0xFE,0xF7,0xFF,0xD0,0x03,
+               0x3F,0x17,0x81,0xE1,0x08,0x1F,0x10,0x02,0x3F,0x70,
+               0x5C,0x1F,0xFF,0x93,0x84,0x1D,0x28,0xF4,0x32,0x80, /* 300 */
+
+               0x62,0x20,0xFB,0xA0,0xFC,0x60,0xF8,0xC6,0x0E,0x87,
+               0x05,0x18,0x42,0x20,0x0C,0x62,0x18,0x41,0xC0,0x08,
+               0x1E,0x27,0x7B,0xFC,0xF3,0xFC,0x26,0x3E,0x0E,0xF8,
+               0x7E,0xE8,0x40,0x5E,0x74,0x5E,0x20,0x48,0x62,0x04,
+               0x20,0xF7,0x3C,0x20,0x78,0x20,0x18,0x3B,0xCE,0x88,
+               0x3F,0x07,0xFD,0xC0,0xFC,0x9F,0xFF,0xC1,0xA3,0x7C,
+               0x87,0x10,0x3E,0x1E,0xF8,0x1C,0x08,0x08,0x0F,0x67,
+               0xE0,0xFF,0x0A,0x1F,0x04,0x82,0xF6,0xC3,0xE0,0x93,
+               0xDC,0x18,0x42,0x2F,0x87,0x7D,0xE7,0x88,0x1D,0x0B,
+               0xFE,0xF8,0xBD,0xD2,0x8B,0xFC,0x28,0x40,0x00,0x70, /* 400 */
+
+               0x44,0x0E,0xC9,0xE1,0x03,0xC0,0xD7,0xC1,0xF1,0xFF,
+               0xDF,0x08,0xB7,0x8D,0xF4,0x80,0x08,0xBC,0x12,0x00,
+               0x63,0xFF,0x84,0x20,0xFC,0x1B,0x08,0xC6,0x1F,0x0F,
+               0xA2,0x01,0xC0,0x40,0x08,0x40,0x08,0x82,0x4E,0xFF,
+               0xDF,0xF7,0xC0,0x3F,0x90,0x00,0xF8,0x45,0xDD,0x7B,
+               0xE3,0x0E,0xF8,0x2F,0xE8,0x3F,0x10,0x01,0xDE,0x84,
+               0x21,0x30,0x3E,0x0E,0xFC,0x61,0xE0,0xFF,0xB0,0x04,
+               0x21,0x1F,0xFF,0xCF,0x7C,0x40,0xEE,0xC2,0x1F,0xF8,
+               0x58,0xF8,0x3E,0x00,0x87,0xA4,0xFF,0x41,0xE0,0x8C,
+               0x3A,0xE8,0x00,0x01,0xE4,0x3D,0x21,0x41,0xE2,0x04, /* 500 */
+
+               0x04,0xC8,0x03,0xA1,0x07,0xFF,0x00,0xBC,0x4F,0x04,
+               0x04,0xEF,0xC0,0x5F,0x84,0xFF,0xDF,0x87,0xF1,0x74,
+               0x06,0x17,0x7C,0x30,0x70,0x60,0x01,0x3C,0x30,0x7C,
+               0x9E,0xF7,0xBE,0x5F,0x00,0x21,0xF8,0xBF,0xD2,0x14,
+               0x20,0x1F,0x83,0xF0,0xF8,0x1C,0x0F,0xC9,0xC2,0x90,
+               0x1B,0xF0,0xFD,0xFF,0x80,0x7E,0x27,0xFE,0x0D,0x8B,
+               0xA1,0x17,0xF8,0x2F,0x84,0x9F,0xEF,0xFF,0xEF,0x84,
+               0x1E,0xFE,0x80,0x10,0x7C,0x02,0xE0,0x80,0x22,0x00,
+               0x3F,0x1F,0xBF,0xD2,0x9C,0x7B,0x08,0x3A,0x11,0x17,
+               0xC0,0xFF,0xFF,0xE1,0x93,0xA2,0x10,0xCB,0xB1,0x90, /* 600 */
+
+               0x00,0x20,0x81,0xCF,0x80,0x1F,0x18,0x7B,0xDD,0x74,
+               0x41,0xE8,0x3A,0x00,0x78,0x1F,0x20,0x0A,0x00,0x70,
+               0x7F,0xD0,0x02,0x10,0x80,0x7A,0xFF,0xFC,0x3F,0xF8,
+               0x7E,0xE8,0x74,0x43,0x80,0x00,0x0E,0x42,0x0D,0x8C,
+               0x7E,0x10,0xBB,0xC1,0x78,0x3F,0x00,0x43,0xE0,0xF8,
+               0x1E,0x21,0xBE,0x0F,0x80,0x81,0xE8,0x0D,0xF1,0x04,
+               0xDD,0x18,0x8A,0x00,0x04,0x3E,0xE8,0x00,0x12,0x03,
+               0x45,0x08,0x44,0x1F,0x0B,0xBD,0xF8,0x40,0x00,0xFF,
+               0xFF,0x07,0xCA,0x10,0xF3,0xBD,0xF0,0xBB,0xE2,0x84,
+               0x22,0x08,0x43,0xFE,0x00,0x42,0x07,0x4D,0xCF,0x83, /* 700 */
+
+               0xE3,0xF0,0xFF,0xB3,0x0B,0xC2,0x16,0x40,0x3F,0x84,
+               0x03,0xFF,0x86,0x21,0x03,0x1F,0x08,0x44,0x41,0x94,
+               0x20,0xE8,0xC6,0x11,0x8C,0x00,0xEF,0xF9,0x90,0xF8,
+               0x5B,0x07,0x40,0x01,0x78,0x60,0x0F,0xFE,0x00,0xFC,
+               0x02,0xEE,0xC7,0xF0,0x04,0x1D,0x08,0xFC,0x51,0x68,
+               0x21,0xF0,0x88,0x52,0x7C,0x81,0x0A,0x36,0x02,0x90,
+               0x3F,0x17,0xC7,0xF4,0x6E,0xFF,0x08,0x0E,0x0F,0xF8,
+               0x9D,0x20,0x46,0x41,0x74,0x00,0x17,0x80,0x5F,0xF4,
+               0x62,0xF0,0x82,0x00,0xF0,0x00,0x00,0x3F,0xEF,0x87,
+               0xC2,0x00,0x3D,0xDF,0x7C,0x3D,0x08,0x78,0x41,0x7C, /* 800 */
+
+               0x22,0x0F,0x41,0xC0,0x60,0x85,0x07,0x88,0x41,0x0B,
+               0xFC,0x08,0xB7,0xA1,0x07,0xC4,0x08,0x87,0xE0,0x90,
+               0x21,0x17,0xC4,0x13,0x7B,0xE3,0xEF,0x00,0x0F,0x93,
+               0xE3,0xE7,0xFE,0x30,0x83,0xBD,0x20,0x87,0xF0,0x89,
+               0x01,0xFF,0x82,0x60,0xFC,0x43,0x11,0x0D,0xF3,0x83,
+               0xC0,0x00,0x02,0x70,0xFF,0x42,0xE9,0x43,0xCF,0x84,
+               0x43,0xF8,0xB6,0x1F,0x17,0xE3,0x0F,0x45,0xE0,0xFB,
+               0x20,0xF0,0x05,0xEE,0xF3,0xBF,0xE7,0x8A,0x60,0x0B,
+               0xFE,0x31,0x41,0xEF,0x7C,0x00,0xDF,0x40,0x0C,0xFB,
+               0xC1,0x0E,0x87,0xF2,0x88,0xBF,0xE1,0x0A,0x13,0x0B, /* 900 */
+
+               0xDE,0xE9,0x04,0x3F,0x80,0x01,0x08,0x00,0x00,0x88,
+               0x06,0xE7,0x8F,0xD0,0x0B,0xFF,0xF8,0x43,0xFF,0xF3,
+               0xFF,0x08,0x08,0x2F,0x87,0x9F,0xF7,0x40,0x61,0x7C,
+               0x61,0x01,0xC5,0xB1,0x04,0x3F,0x07,0xBC,0x10,0x8B,
+               0xC3,0xF9,0x4A,0x0F,0xF7,0xA5,0x30,0x79,0xE4,0x84,
+               0x3F,0x17,0x8C,0x10,0x88,0x25,0x0F,0x42,0x8F,0x78,
+               0x9F,0x3F,0x86,0x3F,0x80,0x00,0x18,0x3A,0x00,0x78,
+               0x7D,0xF9,0x3B,0xD0,0x83,0x80,0x28,0x04,0x03,0x90,
+               0x22,0x17,0xF4,0x30,0x84,0x5D,0x17,0x40,0x11,0x0B,
+               0x25,0xF8,0x36,0x1E,0x83,0xC1,0x19,0x3E,0x3F,0x0C, /* 1000 */
+
+               0x7E,0xE1,0x00,0x10,0x70,0x7E,0xF8,0x06,0x0F,0x8F,
+               0xC1,0x11,0x00,0x0E,0xFC,0x3E,0x08,0x45,0xDF,0x8F,
+               0xE0,0x18,0x3C,0x1F,0xF7,0x9D,0x09,0x81,0xDF,0xF8,
+               0x3E,0x08,0x3F,0xFF,0x6C,0x81,0xE8,0xFD,0xB0,0x00,
+               0x02,0x10,0x38,0x6F,0x9B,0xE3,0x00,0x48,0x00,0x90,
+               0x1B,0xD7,0xC4,0x10,0x0F,0xA3,0x00,0xC4,0x20,0x0C,
+               0xBE,0x27,0xB5,0xE2,0xEF,0xE3,0xF9,0x40,0x10,0x00,
+               0x3F,0xF8,0x85,0xF0,0xF7,0xA2,0xE8,0xC3,0xF0,0x88,
+               0x20,0xD8,0xBD,0xD0,0x80,0x61,0xF6,0x84,0x32,0x80,
+               0xA1,0x07,0xFC,0x31,0x6B,0x5F,0xEF,0xF8,0x30,0xF3, /* 1100 */
+
+               0xE2,0x0F,0xFB,0xFF,0x83,0xC2,0x28,0xB4,0x1E,0x77,
+               0xA1,0xFE,0xC5,0xFF,0x7C,0xE1,0xEF,0xC0,0x0F,0x84,
+               0x3C,0x07,0x06,0x51,0xE7,0xFE,0xF8,0xF8,0x30,0x7C,
+               0x03,0x00,0x04,0x32,0x8F,0xA4,0x00,0x0B,0xF0,0x83,
+               0xE0,0xE7,0x04,0x42,0x67,0x9D,0x20,0xC5,0xA0,0xF8,
+               0x41,0xF8,0x3C,0x41,0x84,0x7F,0xD7,0xC6,0x31,0xF8,
+               0x81,0x20,0x02,0x0F,0x80,0x21,0xF7,0x44,0x20,0xFC,
+               0x3C,0xEE,0x84,0x0F,0x10,0xDA,0x10,0xFB,0xD2,0x74,
+               0x61,0xF8,0x00,0x0D,0x03,0xC2,0xF0,0x8D,0xEF,0x08,
+               0x1E,0xF8,0x3E,0x81,0x04,0x40,0x08,0x42,0x40,0xFB, /* 1200 */
+
+               0xC0,0x17,0x84,0x2E,0x80,0xE2,0x21,0x7D,0xFF,0x98,
+               0x7F,0xF0,0xFE,0x00,0x1B,0xFD,0xF0,0x32,0x3F,0x04,
+               0xC1,0x08,0x39,0xC0,0x80,0x7E,0x10,0x80,0x41,0xF8,
+               0x40,0xF7,0xFA,0x01,0x17,0xBB,0x07,0xF8,0x7F,0x90,
+               0x5F,0xF0,0x85,0xE1,0xFF,0xFE,0x20,0x0A,0x10,0x08,
+               0x41,0x08,0x41,0xE2,0x10,0x3B,0x27,0x7F,0xEE,0x90,
+               0x3B,0xFE,0xB9,0xD1,0x67,0x43,0xD0,0xFF,0xFE,0x84,
+               0xFE,0x28,0x81,0xF1,0xF8,0x5A,0x07,0x8D,0xF1,0xFF,
+               0xFD,0x07,0x0B,0xEF,0xE4,0x02,0xFF,0x1C,0x03,0xFC,
+               0x05,0x13,0xEC,0xFD,0xE4,0x19,0x0F,0xFE,0xD5,0x15, /* 1300 */
+
+               0x09,0x06,0xDD,0x06,0xD4,0xEE,0xDE,0xD8,0xEC,0x0A,
+               0xC8,0xF6,0xE4,0x18,0x0D,0xE3,0x08,0xD8,0x13,0xFE,
+               0x24,0x01,0xFC,0x14,0x27,0xEA,0x06,0x05,0xEA,0x2C,
+               0x08,0xE8,0x05,0xC8,0xCF,0x13,0x19,0xFC,0x07,0xC8,
+               0xE9,0x09,0xFB,0xF6,0x09,0xF0,0x06,0xFF,0x0B,0x19,
+               0x0E,0x0C,0xFB,0x0C,0xF3,0x05,0x17,0x07,0xE7,0xFD,
+               0xFE,0x2B,0x12,0x00,0xFE,0x1C,0x0C,0xF7,0x0A,0xD4,
+               0x24,0x12,0xDE,0xFD,0xF6,0x02,0x46,0x27,0xEC,0x04,
+               0xF6,0x1D,0x1B,0xE8,0x1C,0xFA,0x32,0xFF,0xE1,0xEA,
+               0x0F,0x24,0xEF,0x06,0xF9,0xF4,0x22,0xF2,0xFC,0x06, /* 1400 */
+
+               0xF2,0x13,0xF7,0xEC,0x2A,0xEA,0x03,0xFF,0x14,0x0D,
+               0x0D,0x17,0xEE,0x02,0x3E,0x07,0x28,0x08,0xC7,0x13,
+               0x0C,0xF5,0xCF,0x05,0x37,0x0B,0x30,0xD2,0xEE,0x02,
+               0xDC,0x1C,0x41,0xEE,0xC0,0xE0,0xFB,0xFE,0x11,0x1F,
+               0xF4,0xC2,0x1C,0xF4,0xD1,0xFB,0x0B,0xDC,0x2B,0xFD,
+               0x1E,0x13,0x15,0xD3,0x01,0xC0,0x14,0xE5,0x12,0x06,
+               0x08,0x24,0x0E,0x0F,0x06,0xE1,0x32,0xCB,0xE5,0x33,
+               0xD2,0x00,0x00,0x1B,0x03,0x2D,0xC3,0x22,0xFC,0x11,
+               0xD1,0xF4,0xD8,0x19,0x09,0x11,0x04,0x04,0xF9,0x10,
+               0x0E,0xF3,0x0E,0xEB,0x23,0xEC,0x20,0xE9,0x0F,0xF9, /* 1500 */
+
+               0xDA,0xD8,0x14,0x25,0xF0,0xD6,0xFF,0xEE,0x16,0xF1,
+               0x28,0x18,0x3A,0xED,0x0D,0xAA,0x10,0xE7,0xED,0x0E,
+               0x25,0x14,0xF0,0xDD,0xFA,0xC8,0x1C,0x16,0xE5,0x05,
+               0xFD,0xF6,0xDF,0x23,0x1A,0x19,0x03,0x09,0xE9,0x25,
+               0xF5,0x04,0xF1,0xEB,0x02,0xD7,0xE9,0xE7,0x1F,0x22,
+               0xFC,0x03,0xEC,0x16,0x27,0xFA,0xBD,0x03,0x0D,0x24,
+               0xFB,0x21,0xFD,0xE7,0xF4,0x1A,0xD0,0x07,0xF7,0x43,
+               0xF2,0xF6,0x1B,0x21,0x09,0x23,0x00,0xE1,0xFE,0x13,
+               0xFB,0xCB,0x06,0xE3,0xE3,0x0E,0x02,0x10,0xF1,0x0A,
+               0xEB,0x1E,0xF0,0x10,0xE6,0x23,0x32,0xEA,0xFC,0x11, /* 1600 */
+
+               0xF5,0xC8,0x04,0xF4,0xFC,0x15,0x1A,0xED,0x1F,0xE9,
+               0xFD,0xEA,0x1C,0x08,0x0A,0x04,0x2D,0xF1,0xB9,0xDE,
+               0x0A,0xF1,0x16,0xFF,0x01,0xED,0x19,0xD0,0xDD,0xFC,
+               0xFD,0x02,0x1B,0x25,0x1E,0x09,0x24,0xEF,0xE3,0x08,
+               0x14,0xC8,0xE8,0xF6,0xF7,0xDD,0xD0,0xE7,0xED,0x2E,
+               0x10,0x06,0xE5,0xF0,0x04,0x04,0xF9,0x15,0x01,0x19,
+               0xFF,0xE8,0x17,0xF1,0xC0,0xE9,0xDE,0x10,0x13,0x08,
+               0xD4,0xFF,0xFF,0xDC,0xF5,0x0E,0xE3,0xF1,0xFB,0xEE,
+               0xF4,0xF9,0x11,0x1C,0x27,0xE2,0x0A,0x1D,0xDF,0xDE,
+               0x09,0xE3,0x3F,0xE7,0xDC,0x1D,0x33,0xF7,0x00,0xEA, /* 1700 */
+
+               0xFC,0xF4,0xF6,0x06,0x11,0x0C,0x19,0xFC,0x36,0x08,
+               0x01,0xF6,0x2F,0x16,0xEF,0x11,0xE4,0x1E,0x16,0x20,
+               0x22,0x07,0x1D,0xF0,0x12,0x0A,0xFB,0xFE,0x0F,0x46,
+               0xFC,0xF1,0x1D,0x25,0xE3,0x20,0x1E,0xF3,0x0B,0xE8,
+               0xEB,0xEF,0x10,0xD4,0xEB,0x19,0x18,0x1F,0xEE,0xE4,
+               0xD4,0x00,0xE3,0x28,0x0A,0x1F,0xCF,0xDB,0xFC,0xEF,
+               0x18,0xF3,0xF7,0x09,0xEA,0x04,0xD4,0xF9,0xFE,0x04,
+               0x1A,0x0A,0xFA,0x0B,0xF8,0xD5,0xE1,0xCC,0x0B,0x13,
+               0x14,0x1A,0xF5,0xF3,0xF0,0x16,0xF2,0xFB,0x20,0x00,
+               0xF6,0xF0,0xF2,0x07,0x0F,0xC5,0xEC,0xFA,0xCD,0xF7, /* 1800 */
+
+               0xEB,0xED,0xF1,0xE9,0xE8,0x1D,0x17,0xFB,0x2B,0xFC,
+               0x0E,0xEC,0xDB,0xEE,0x0E,0x06,0x0F,0xF7,0x10,0xFB,
+               0xE4,0xE6,0xDA,0x28,0x26,0x1C,0xF3,0xF1,0x03,0x1A,
+               0x18,0x0A,0x16,0x0D,0x01,0x23,0xF5,0xFE,0xBE,0x15,
+               0xEF,0x33,0xF9,0x18,0xEB,0x07,0xFF,0xE1,0x15,0x23,
+               0x1E,0xCC,0xEC,0x1F,0x0A,0x08,0x39,0x13,0xF8,0xF4,
+               0x13,0xF6,0x0D,0xF0,0xE1,0xF1,0xFC,0xF7,0x13,0xFF,
+               0x1E,0xE2,0x18,0xFB,0x08,0x1B,0x1A,0x07,0x07,0xEA,
+               0x09,0xFB,0x08,0x14,0x1F,0xC5,0xFA,0x12,0x23,0xFB,
+               0xE7,0xF6,0xD6,0x1C,0xFC,0x2D,0x24,0xF0,0xF0,0xDD, /* 1900 */
+
+               0x27,0xEE,0xDE,0x14,0x1C,0x10,0xFF,0xF7,0xFD,0x48,
+               0xE3,0xEE,0x16,0x11,0xE4,0xF7,0xDC,0x25,0x2F,0xF7,
+               0xFD,0x11,0xCC,0xFB,0xEF,0xFE,0xE9,0xFF,0xCA,0x03,
+               0xF0,0xF1,0x08,0xF3,0xF1,0x0D,0x04,0xD0,0x1F,0xDC,
+               0x12,0x05,0x1D,0xDF,0xD6,0x1C,0xCB,0xDF,0xFF,0xEF,
+               0xE3,0xF4,0x31,0x23,0xEB,0xD3,0xFF,0x02,0x43,0x00,
+               0xE2,0xCF,0x0C,0x06,0xE1,0x12,0x3A,0x19,0x06,0xDB,
+               0x20,0x04,0x0F,0x2F,0xE8,0x30,0xF5,0xED,0x0E,0x41,
+               0xF4,0x02,0x2E,0xFB,0xE2,0x22,0xF1,0xFB,0xCC,0x21,
+               0x14,0x14,0xE5,0x02,0xE4,0x11,0xC7,0xEB,0x19,0x38, /* 2000 */
+
+               0x04,0xE7,0xD8,0x11,0xCE,0x1E,0x0E,0xF7,0x01,0x16,
+               0xF1,0xF2,0xEB,0x5F,0x03,0xED,0xFC,0x03,0x0D,0x28,
+               0x06,0x1E,0x16,0x05,0xE4,0xF0,0xF9,0xF6,0x1E,0xF5,
+               0xEC,0xF4,0xF4,0x14,0xE7,0x0C,0x0A,0x22,0xF6,0xBD,
+               0xF6,0x2E,0x19,0x03,0x07,0xFC,0x0F,0xFB,0x14,0x10,
+               0x1F,0xF3,0x05,0x0C,0x45,0xEB,0xC4,0x04,0x08,0xF6,
+               0xF5,0x17,0x11,0x02,0x10,0xC5,0x17,0x00,0xF9,0xDD,
+               0xE3,0x19,0x0C,0xF8,0xEE,0x1E,0xCA,0x1C,0xE3,0xDC,
+               0x3E,0xE8,0x16,0xFB,0x01,0x25,0x0C,0x01,0xEB,0x12,
+               0xFE,0x01,0xF3,0xE9,0x17,0xFF,0x09,0x07,0xCB,0xD0, /* 2100 */
+
+               0x0C,0x03,0x12,0x27,0xDB,0x1F,0xD3,0xDE,0x04,0x19,
+               0xFD,0x29,0x13,0x05,0xC0,0xF2,0x0F,0x0F,0x0F,0xF5,
+               0xF4,0xEE,0xF7,0x2C,0xEF,0x15,0xE7,0xD4,0xD7,0x1C,
+               0x3B,0xCD,0x0D,0xEE,0x05,0xFF,0x0B,0xD0,0x2E,0xD2,
+               0xE3,0xE1,0x25,0xF7,0xF3,0xFF,0x1D,0xE4,0xED,0xE9,
+               0x2B,0xEE,0xEA,0x13,0x04,0xE3,0xFD,0xFE,0x05,0xCE,
+               0xD9,0xF6,0xFD,0x1C,0xF8,0x16,0xEE,0x2A,0xE3,0x14,
+               0xF3,0x0F,0x04,0x20,0xE5,0x14,0x21,0xEB,0xDC,0xF6,
+               0xF1,0xE7,0x07,0x2B,0xF7,0x39,0xE3,0x0C,0x19,0xDB,
+               0x00,0x34,0x26,0xF5,0xE7,0xE1,0xE1,0x04,0x17,0xF6, /* 2200 */
+
+               0xDD,0xF7,0x0D,0xF5,0xF1,0x0D,0x09,0xFB,0x2D,0x2B,
+               0xE8,0x21,0x19,0x1F,0x0C,0xF8,0xF8,0x31,0xFE,0x0B,
+               0x20,0x04,0xEE,0xF8,0x2E,0x47,0x20,0xFC,0x04,0xFC,
+               0xED,0x0C,0xEB,0x18,0x29,0xD0,0xF0,0x14,0xF8,0x08,
+               0xEA,0xD7,0x2D,0xF5,0xE9,0x42,0x13,0x17,0x19,0xC1,
+               0xF1,0xE5,0xE5,0xEA,0xFD,0x1B,0xE7,0xD4,0x1B,0xD2,
+               0xDA,0xE8,0xEC,0xFE,0x12,0xD8,0x2F,0x08,0xD4,0x14,
+               0x0F,0x15,0x10,0xFE,0xC9,0x00,0xEC,0xC8,0x00,0x17,
+               0xE9,0x21,0xBA,0x07,0xE9,0xEF,0x0A,0x15,0xF4,0x0C,
+               0xCA,0xD2,0xED,0x17,0x19,0x26,0xC3,0xF9,0x12,0xED, /* 2300 */
+
+               0x0A,0x0C,0x05,0xF1,0x11),
+       .sm = chunk_from_chars(
+               0x04,0xCE,0x33,0xB3,0xC0,0x75,0x07,0xE4,0x20,0x17,
+               0x48,0x49,0x4D,0x83,0x2B,0x6E,0xE2,0xA6,0xC9,0x3B,
+               0xFF,0x9B,0x0E,0xE3,0x43,0xB5,0x50,0xD1,0xF8,0x5A,
+               0x3D,0x0D,0xE0,0xD7,0x04,0xC6,0xD1,0x78,0x42,0x95,
+               0x13,0x09,0xD8,0x1C,0x4D,0x8D,0x73,0x4F,0xCB,0xFB,
+               0xEA,0xDE,0x3D,0x3F,0x8A,0x03,0x9F,0xAA,0x2A,0x2C,
+               0x99,0x57,0xE8,0x35,0xAD,0x55,0xB2,0x2E,0x75,0xBF,
+               0x57,0xBB,0x55,0x6A,0xC8,0x2A,0x9B,0x72,0x99,0xAC,
+               0x39,0x03,0x89,0x2A,0xF0,0xF5,0x3D,0xE4,0xE3,0xC8,
+               0x9B,0x4A,0x2E,0xE6,0x5E,0x9E,0x42,0x9D,0x73,0x12, /* 100 */
+
+               0xA5,0xB2,0x0E,0xB5,0xC7,0x94,0x97,0x72,0x2A,0x19,
+               0xCA,0xA5,0xBD,0xA4,0x5D,0x3B,0xB8,0x7E,0xE7,0x17,
+               0x40,0xE4,0x6F,0x16,0x0C,0x6E,0xAC,0x63,0x1E,0x5D,
+               0x51,0x04,0xE9,0x68,0x8B,0xFB,0xF0,0xF6,0xAA,0x90,
+               0x4D,0xFC,0xA3,0x25,0x46,0x7E,0xEE,0x15,0xA6,0x5C,
+               0x58,0x6A,0x30,0xE8,0xC3,0x6D,0x08,0x4D,0x16,0x77,
+               0x6A,0x71,0x35,0xA1,0xD3,0xEF,0xF9,0xBE,0x94,0x0B,
+               0x65,0x81,0x72,0xAF,0x9F,0x3E,0x5B,0xD2,0x76,0xE5,
+               0x37,0x5F,0x72,0x6F,0xDE,0xA8,0xD4,0xE3,0x4B,0x65,
+               0x81,0xED,0xFC,0xFF,0x28,0x7E,0x67,0x45,0x9C,0xE0, /* 200 */
+
+               0x6B,0xBC,0x3B,0x48,0xA1,0x48,0x96,0xFB,0xE2,0xB3,
+               0x24,0x81,0x87,0x99,0x3C,0xCF,0x7B,0x74,0xD4,0xFC,
+               0xDD,0x0F,0xD5,0x24,0x9A,0x19,0x5D,0xCE,0x26,0x75,
+               0x3D,0x6C,0xE0,0x84,0x57,0xB1,0xB3,0xA4,0x33,0x51,
+               0xE6,0x9C,0x59,0xF8,0x1A,0xC1,0x41,0xC1,0x42,0x7D,
+               0xD5,0xC5,0x69,0x34,0x6C,0x1C,0x8C,0x34,0x94,0xAD,
+               0x45,0xA9,0xB8,0x56,0x23,0x65,0x41,0x54,0x70,0xB2,
+               0x5E,0x59,0x19,0x60,0x19,0xE5,0x19,0xA9,0x45,0xE8,
+               0xE8,0x49,0x13,0x80,0x7A,0xD0,0x25,0xEA,0x6F,0x25,
+               0xA0,0x40,0x91,0x70,0xE7,0xC7,0x34,0x79,0x04,0xC6, /* 300 */
+
+               0x7E,0xA2,0x40,0x66,0x90,0xD7,0xF7,0x6D,0xC9,0x39,
+               0xCB,0x1B,0xFD,0xBE,0x66,0x56,0x07,0x43,0x08,0xE9,
+               0xFC,0x5B,0xE2,0xE5,0x2A,0xA8,0x4A,0xBF,0x67,0x46,
+               0x8D,0x79,0x44,0xA0,0x9E,0x8E,0x74,0xC4,0x81,0x1B,
+               0x17,0x93,0x9D,0x08,0x08,0xE6,0xA1,0xAD,0xE9,0xAD,
+               0x5A,0x6C,0x5C,0x90,0xA7,0xD7,0x27,0x95,0x66,0x69,
+               0x99,0xF3,0x15,0x97,0x11,0xDF,0xAE,0x32,0xF8,0xF4,
+               0xE9,0x2B,0x6B,0xB2,0xB3,0x0A,0xF1,0xEB,0x64,0xAC,
+               0x27,0x5C,0xCD,0x69,0x69,0x8A,0x8E,0x61,0xF6,0xD6,
+               0xF0,0x20,0x15,0x47,0x65,0x2E,0x4F,0x25,0xF0,0x88, /* 400 */
+
+               0xD4,0x07,0x78,0xC7,0x33,0x04,0x77,0x31,0x1B,0xD6,
+               0x23,0x8D,0xF5,0xB2,0x1A,0x46,0xC4,0x2C,0xA1,0xD5,
+               0x29,0x85,0x06,0x78,0xE4,0xB4,0xF7,0x19,0xCA,0x10,
+               0x81,0xB0,0x92,0x58,0xAD,0xFB,0x7F,0xE0,0x63,0xE1,
+               0x36,0x8F,0xBF,0x04,0xA5,0x4F,0x25,0x7D,0x6D,0x61,
+               0xBA,0x82,0x14,0x2E,0x3F,0x0E,0x27,0x8B,0x95,0x12,
+               0xF7,0x17,0x8F,0x94,0xF2,0xF4,0xD9,0x94,0x85,0x85,
+               0x8F,0xA7,0xF1,0x72,0x72,0x44,0x99,0x6C,0xE8,0x86,
+               0xBF,0x5B,0x0D,0xA9,0x38,0x6B,0xAB,0x89,0x6E,0x92,
+               0xA4,0x61,0x19,0x44,0xD7,0x5C,0x59,0xFB,0x0F,0x42, /* 500 */
+
+               0xF7,0xB3,0xAF,0x1D,0xCE,0x3E,0x00,0xAE,0xC1,0x1B,
+               0x6E,0x6D,0x29,0xCA,0x5F,0xCC,0x3B,0xB6,0xA7,0x66,
+               0x59,0x25,0xE9,0x59,0x5E,0xF8,0x9B,0xF8,0x38,0x95,
+               0xC6,0x48,0x6A,0xB5,0x25,0xA7,0xB0,0xF3,0x7C,0xD6,
+               0x08,0xFF,0xA4,0x08,0x31,0xBA,0xAA,0xE2,0x13,0xAA,
+               0xBE,0x53,0x47,0xA8,0xB2,0x25,0x1C,0x26,0x4B,0xE4,
+               0x58,0xE3,0x83,0x34,0x56,0x3B,0xDC,0x5B,0x45,0xF6,
+               0x97,0x73,0xD0,0x29,0x49,0x43,0x6A,0xC0,0x1E,0x0D,
+               0x2D,0xF2,0x43,0x05,0xFA,0x42,0xCB,0xFC,0xA7,0x06,
+               0x60,0x73,0xDD,0x89,0x23,0xA4,0xC1,0x92,0x13,0x6F, /* 600 */
+
+               0x3E,0x53,0x8D,0xFD,0xCB,0x0D,0xCE,0x58,0x1E,0x65,
+               0x09,0x2B,0xF8,0x30,0xAA,0x06,0x31,0xCC,0xC0,0xC7,
+               0x4F,0x86,0x8F,0xC9,0xEE,0xDA,0xD4,0x4A,0x55,0x41,
+               0xE7,0x4C,0x8F,0x8B,0xC5,0x2B,0x72,0x26,0xD3,0xC3,
+               0xFB,0x00,0xF0,0xBC,0x11,0x0B,0xA6,0x26,0xFF,0x82,
+               0xE7,0x44,0x1B,0xDA,0x81,0x2C,0x71,0xBA,0xBC,0x26,
+               0x13,0x02,0x96,0x63,0xAC,0xF6,0xFF,0x9E,0xA3,0xDB,
+               0x88,0xA9,0xE6,0xD1,0x8C,0x64,0x49,0x5C,0xEE,0xE3,
+               0x3A,0x30,0x67,0x91,0x72,0x9A,0xAC,0x50,0x31,0x9D,
+               0xAB,0x38,0x0F,0xCC,0xB7,0xA1,0xCC,0xF7,0x58,0xD4, /* 700 */
+
+               0x72,0x27,0x83,0x8B,0x5E,0xDD,0x27,0xE9,0x4F,0x89,
+               0xC4,0x0A,0x26,0x78,0xFC,0xE3,0xFA,0x19,0x9F,0x7A,
+               0x2B,0x8C,0x94,0x6A,0x5D,0xF3,0x7F,0xFD,0xC9,0xE4,
+               0x21,0x7C,0xD4,0xA7,0xFF,0x48,0xD2,0x89,0x1D,0x82,
+               0x1A,0xF8,0xA5,0x4B,0x1D,0x56,0xBD,0x01,0xC3,0xBF,
+               0x8B,0x7F,0x40,0xB6,0x2A,0xDF,0xD7,0x85,0x92,0xAB,
+               0x5A,0xB9,0x64,0x81,0xCD,0x76,0x31,0xED,0xF0,0x9A,
+               0xC5,0x93,0x78,0x2A,0xC8,0x81,0x54,0x50,0x07,0xF1,
+               0x6B,0x9F,0x57,0xA9,0xCE,0xF3,0xA2,0xEA,0xF1,0x73,
+               0xEF,0x5D,0x0E,0xB0,0xCF,0x98,0xBC,0x6B,0x6E,0xF1, /* 800 */
+
+               0x29,0xF0,0xB7,0x8D,0x57,0xDB,0x71,0xC8,0xD4,0x01,
+               0x32,0xD6,0xA7,0x4D,0xC0,0xCB,0xF0,0xB3,0xE4,0x2D,
+               0xFE,0x49,0x77,0x29,0x29,0xD4,0x41,0xFA,0xD9,0x85,
+               0xD9,0x94,0x3D,0x8A,0x10,0xAD,0x6A,0x2B,0xEC,0x4B,
+               0x8A,0xEA,0x7C,0xF4,0x3E,0x1C,0x8C,0x72,0x17,0xDF,
+               0x5B,0x91,0x25,0x51,0xAD,0x15,0x6C,0x01,0x55,0x92,
+               0x8D,0xBC,0x8B,0x48,0xB8,0xDF,0x19,0x6A,0x2A,0x64,
+               0x53,0x08,0x67,0x79,0x20,0xA3,0xE5,0xD0,0x07,0x4F,
+               0xC5,0xEC,0x47,0x84,0x03,0x7F,0x1F,0xD4,0xA4,0xF6,
+               0x8A,0x1C,0x0A,0xBF,0xC5,0x43,0xCC,0x36,0x4A,0x07, /* 900 */
+
+               0x92,0x29,0x51,0x68,0x0E,0xCA,0x95,0x68,0x50,0xA8,
+               0x5B,0x94,0x96,0x52,0x6E,0xE7,0x18,0x1A,0x2E,0x91,
+               0x81,0x4E,0x97,0x9D,0xDF,0x65,0xFA,0xD1,0x68,0x25,
+               0xC9,0x66,0x9B,0xD3,0x5D,0xB6,0xD1,0x19,0x9D,0x1A,
+               0x33,0xF9,0x8B,0x4E,0x27,0xD1,0xAB,0x67,0xAD,0xF7,
+               0x1C,0x0D,0x99,0x91,0x67,0x5D,0xB7,0x8B,0x73,0x9A,
+               0xA1,0xE3,0xE9,0x93,0x6C,0x5D,0x72,0x2D,0xA4,0x9E,
+               0x62,0x2B,0x9F,0xD9,0x22,0x9B,0x99,0xAF,0xC4,0x67,
+               0x12,0x5A,0x1A,0xC0,0xF9,0x21,0xE9,0x6E,0x4A,0x5F,
+               0xB8,0x70,0xA2,0xC6,0x33,0xA0,0x48,0x2C,0xB3,0x96, /* 1000 */
+
+               0xE6,0x68,0xA5,0x4A,0x65,0xDE,0xDA,0x96,0x1D,0xDC,
+               0xD2,0xCA,0xE2,0x42,0x4E,0xF1,0x30,0xBE,0x64,0x12,
+               0x85,0x93,0x52,0xB5,0x30,0x41,0x37,0x36,0x0A,0x73,
+               0x68,0x6E,0x10,0xAF,0x66,0xBA,0x8B,0xFD,0xED,0xFD,
+               0xAC,0xF7,0x86,0x58,0x90,0x1B,0x41,0x78,0x62,0x4C,
+               0x36,0x67,0xB9,0x37,0xA0,0xD9,0x5E,0x07,0x81,0x03,
+               0x5B,0xBC,0x53,0x9A,0x3A,0xAA,0x93,0xAA,0xD5,0x78,
+               0x03,0x00,0xC0,0xF7,0xA6,0x09,0xAB,0x29,0x66,0x39,
+               0xEC,0x32,0xDD,0x44,0x31,0xEE,0x85,0x29,0x36,0x2B,
+               0x13,0xB7,0x35,0x88,0x2F,0xD2,0x4A,0x23,0x2E,0xE9, /* 1100 */
+
+               0x63,0x60,0x69,0x02,0x88,0x81,0xB6,0x28,0xE3,0x02,
+               0xDE,0x4B,0x75,0xC5,0x09,0xB8,0x43,0x91,0x54,0xDE,
+               0xAE,0x26,0xE8,0x79,0xE2,0x71,0x73,0xB0,0x4B,0x42,
+               0x26,0xCC,0xE3,0x9C,0xBC,0x37,0x1F,0x0C,0x92,0x55,
+               0xF9,0x9B,0x8C,0xE7,0x7E,0x4E,0xBF,0x4B,0xC5,0xA0,
+               0xEC,0xD2,0x9F,0x96,0x9B,0x06,0x2D,0x95,0xD4,0x62,
+               0xBD,0x89,0x3C,0x71,0x35,0x47,0x9D,0x5C,0xBD,0xA7,
+               0xCC,0xC2,0x32,0xAA,0xC0,0xA8,0x15,0x67,0xD7,0xB6,
+               0xD2,0x2B,0xD9,0xBE,0x8E,0xAB,0x15,0x50,0xC3,0xAD,
+               0xB1,0x78,0x90,0xD2,0xE8,0x63,0x06,0x05,0xB7,0xD2, /* 1200 */
+
+               0xF3,0x9C,0x2E,0x26,0xE5,0xEF,0xBF,0x40,0x26,0x34,
+               0xC7,0x09,0x5A,0xB5,0x24,0x24,0x2D,0x70,0x35,0x48,
+               0x04,0x5D,0x13,0xF2,0x70,0x76,0x45,0x2B,0xBA,0x45,
+               0x3B,0x8D,0x9B,0xB5,0xC4,0xCC,0x1F,0xF3,0xBE,0xC8,
+               0x2E,0xEC,0xAD,0x01,0xAD,0x7E,0x53,0x09,0x17,0x87,
+               0xAA,0x2D,0x4F,0x47,0xD3,0x2A,0xC1,0xB8,0x3E,0x1B,
+               0x67,0x59,0x3B,0x76,0x64,0x2B,0x9C,0x03,0xDB,0xE7,
+               0xC9,0x33,0x94,0xA8,0x6C,0x31,0x9B,0x6C,0x98,0x41,
+               0x07,0x26,0xDB,0x14,0x7D,0x73,0xE3,0xC6,0xD8,0x26,
+               0x81,0x54,0x57,0xBA,0x2B,0x2E,0x53,0x08,0xC7,0x46, /* 1300 */
+
+               0xFB,0x6F,0x8B,0x7C,0x80),
+},
 };
 
 START_TEST(test_oqs_sig_good)
@@ -3146,6 +4092,14 @@ START_TEST(test_oqs_sig_good)
                        scheme = SIGN_DILITHIUM_5;
                        oid = OID_DILITHIUM_5;
                        break;
+               case KEY_FALCON_512:
+                       scheme = SIGN_FALCON_512;
+                       oid = OID_FALCON_512;
+                       break;
+               case KEY_FALCON_1024:
+                       scheme = SIGN_FALCON_1024;
+                       oid = OID_FALCON_1024;
+                       break;
                default:
                        return;
        }
@@ -3189,6 +4143,16 @@ START_TEST(test_oqs_sig_good)
                        ck_assert(sig_test[_i].sm.len - sig_test[_i].msg.len == sig.len);
                        ck_assert(memeq(sig_test[_i].sm.ptr, sig.ptr, sig.len));
                        break;
+               case KEY_FALCON_512:
+               case KEY_FALCON_1024:
+                       ck_assert(sig_test[_i].sm.len - sig_test[_i].msg.len - 2 == sig.len);
+                       test_sig = chunk_alloc(sig.len);
+                       test_sig.ptr[0] = (sig_test[_i].type == KEY_FALCON_512) ? 0x39 : 0x3A;
+                       memcpy(&test_sig.ptr[ 1], &sig_test[_i].sm.ptr[2], 40);
+                       memcpy(&test_sig.ptr[41],
+                                  &sig_test[_i].sm.ptr[43 + sig_test[_i].msg.len], sig.len - 41);
+                       ck_assert(memeq(test_sig.ptr, sig.ptr, sig.len));
+                       chunk_free(&test_sig);
        }
 
        /* extract public key */
index 54a8785c18ece21164047abdecd3486e0d2aa7ef..cb3d8477bde672503c82b8f77418f7ac1e7151ce 100644 (file)
@@ -74,6 +74,10 @@ METHOD(plugin_t, get_features, int,
                                PLUGIN_DEPENDS(PRIVKEY, KEY_DILITHIUM_3),
                        PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_5),
                                PLUGIN_DEPENDS(PRIVKEY, KEY_DILITHIUM_5),
+                       PLUGIN_PROVIDE(PRIVKEY, KEY_FALCON_512),
+                               PLUGIN_DEPENDS(PRIVKEY, KEY_FALCON_512),
+                       PLUGIN_PROVIDE(PRIVKEY, KEY_FALCON_1024),
+                               PLUGIN_DEPENDS(PRIVKEY, KEY_FALCON_1024),
 
                /* public key PEM decoding */
                PLUGIN_REGISTER(PUBKEY, pem_public_key_load, FALSE),
index 282baf8c1daa75a5b00943231445e1e9e92d6e56..7980e486cbd3ad7b8af740c77bf12d37d816f6f6 100644 (file)
@@ -101,6 +101,14 @@ static private_key_t *parse_private_key(chunk_t blob)
                                                type = KEY_DILITHIUM_5;
                                                part = BUILD_PRIV_ASN1_DER;
                                                break;
+                                       case OID_FALCON_512:
+                                               type = KEY_FALCON_512;
+                                               part = BUILD_PRIV_ASN1_DER;
+                                               break;
+                                       case OID_FALCON_1024:
+                                               type = KEY_FALCON_1024;
+                                               part = BUILD_PRIV_ASN1_DER;
+                                               break;
                                        default:
                                                /* key type not supported */
                                                goto end;
index 93161c004ff6b18f4ad5e66b726fdc204c00f165..77ae8af09173c2b82ba93077cfeef795a9684f8b 100644 (file)
@@ -52,6 +52,8 @@ METHOD(plugin_t, get_features, int,
                        PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_2),
                        PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_3),
                        PLUGIN_PROVIDE(PRIVKEY, KEY_DILITHIUM_5),
+                       PLUGIN_PROVIDE(PRIVKEY, KEY_FALCON_512),
+                       PLUGIN_PROVIDE(PRIVKEY, KEY_FALCON_1024),
        };
        *features = f;
        return countof(f);
index 49c0475021cf4e1a32e69d2462438ae7bf0d4f5e..95b387b946c9912dce71e368ff7ac3254a753f3f 100644 (file)
@@ -65,6 +65,8 @@ static hasher_oid_t oids[] = {
        { OID_DILITHIUM_2, HASH_IDENTITY, KEY_DILITHIUM_2},            /* 33 */
        { OID_DILITHIUM_3, HASH_IDENTITY, KEY_DILITHIUM_3},            /* 34 */
        { OID_DILITHIUM_5, HASH_IDENTITY, KEY_DILITHIUM_5},            /* 35 */
+       { OID_FALCON_512,  HASH_IDENTITY, KEY_FALCON_512},             /* 36 */
+       { OID_FALCON_1024, HASH_IDENTITY, KEY_FALCON_1024},            /* 37 */
 };
 
 START_TEST(test_hasher_from_oid)
@@ -116,7 +118,9 @@ static struct {
        { SIGN_DILITHIUM_2,           HASH_IDENTITY   },
        { SIGN_DILITHIUM_3,           HASH_IDENTITY   },
        { SIGN_DILITHIUM_5,           HASH_IDENTITY   },
-       { 30,                                             HASH_UNKNOWN    },
+       { SIGN_FALCON_512,            HASH_IDENTITY   },
+       { SIGN_FALCON_1024,           HASH_IDENTITY   },
+       { 30,                         HASH_UNKNOWN    },
 };
 
 START_TEST(test_hasher_from_sig_scheme)
index d89a578807e44d7e6eb7b6ec623415a964ab9598..f0367cc0277d473a1fef8e615fe01ab224eca491 100644 (file)
@@ -65,6 +65,14 @@ static int gen()
                                {
                                        type = KEY_DILITHIUM_5;
                                }
+                               else if (streq(arg, "falcon512"))
+                               {
+                                       type = KEY_FALCON_512;
+                               }
+                               else if (streq(arg, "falcon1024"))
+                               {
+                                       type = KEY_FALCON_1024;
+                               }
                                else
                                {
                                        return command_usage("invalid key type");
@@ -179,7 +187,7 @@ static void __attribute__ ((constructor))reg()
 {
        command_register((command_t) {
                gen, 'g', "gen", "generate a new private key",
-               {"[--type rsa|ecdsa|ed25519|ed448|dilithium2|dilithium3|dilithium5]",
+               {"[--type rsa|ecdsa|ed25519|ed448|dilithium2|dilithium3|dilithium5|falcon512|falcon1024]",
                 "[--size bits] [--safe-primes] [--shares n] [--threshold l]",
                 "[--outform der|pem]"},
                {
index b372c1876bd211ed1610c0070a55696eea8f46a6..4ae2a3867ad4d74117e71548c7282fe71dde1bec 100644 (file)
@@ -2,7 +2,7 @@
 .
 .SH "NAME"
 .
-pki \-\-gen \- Generate a new RSA or ECDSA private key
+pki \-\-gen \- Generate a new RSA, ECDSA, Edwards Curve, Dilithium or Falcon private key
 .
 .SH "SYNOPSIS"
 .
@@ -30,7 +30,7 @@ pki \-\-gen \- Generate a new RSA or ECDSA private key
 .
 This sub-command of
 .BR pki (1)
-is used to generate a new RSA or ECDSA private key.
+is used to generate a new RSA, ECDSA, Edwards Curve, Dilithium or Falcon private key.
 .
 .SH "OPTIONS"
 .
@@ -46,8 +46,8 @@ Read command line options from \fIfile\fR.
 .TP
 .BI "\-t, \-\-type " type
 Type of key to generate. Either \fIrsa\fR, \fIecdsa\fR, \fIed25519\fR,
-\fIed448\fR, \fIdilithium2\fR, \fIdilithium3\fR or \fIdilitium4\fR,
-defaults to \fIrsa\fR.
+\fIed448\fR, \fIdilithium2\fR, \fIdilithium3\fR, \fIdilitium4\fR,
+\fIfalcon512\fR or \fIfalcon1024\fR, defaults to \fIrsa\fR.
 .TP
 .BI "\-s, \-\-size " bits
 Key length in bits. Defaults to 2048 for \fIrsa\fR and 384 for \fIecdsa\fR.