]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Add support for slh-dsa-sha2-128f. wip-slh-dsa-sha2-128s
authorNiels Möller <nisse@lysator.liu.se>
Wed, 9 Jul 2025 08:42:26 +0000 (10:42 +0200)
committerNiels Möller <nisse@lysator.liu.se>
Wed, 9 Jul 2025 08:42:26 +0000 (10:42 +0200)
Makefile.in
examples/hogweed-benchmark.c
slh-dsa-sha2-128f.c [new file with mode: 0644]
slh-dsa.h
testsuite/Makefile.in
testsuite/slh-dsa-sha2-128f-tc7.msg [new file with mode: 0644]
testsuite/slh-dsa-sha2-128f-tc7.sig [new file with mode: 0644]
testsuite/slh-dsa-test.c

index dfe761726477c5492d1dc396c596a168324e7c80..ebd3e1cf754ea3349b8aad86b4296f36be20edc0 100644 (file)
@@ -178,7 +178,7 @@ nettle_SOURCES = aes-decrypt-internal.c aes-decrypt-table.c \
                 drbg-ctr-aes256.c \
                 slh-fors.c slh-merkle.c slh-shake.c slh-sha256.c slh-wots.c slh-xmss.c \
                 slh-dsa.c slh-dsa-128s.c slh-dsa-128f.c \
-                slh-dsa-shake-128s.c slh-dsa-shake-128f.c slh-dsa-sha2-128s.c
+                slh-dsa-shake-128s.c slh-dsa-shake-128f.c slh-dsa-sha2-128s.c slh-dsa-sha2-128f.c
 
 hogweed_SOURCES = sexp.c sexp-format.c \
                  sexp-transport.c sexp-transport-format.c \
index 927e106884804a4a925026fc68552312749e1c32..467631cded7ea9ccf2e6663261bc5e3fa0807d60 100644 (file)
@@ -923,6 +923,24 @@ bench_slh_dsa_init_sha2_s (unsigned size)
   return ctx;
 }
 
+static void *
+bench_slh_dsa_init_sha2_f (unsigned size)
+{
+  struct slh_dsa_ctx *ctx;
+  assert (size == 128);
+
+  ctx = xalloc (sizeof (*ctx));
+  memset (ctx->key, 1, SLH_DSA_128_KEY_SIZE);
+  memset (ctx->pub, 2, SLH_DSA_128_SEED_SIZE);
+  slh_dsa_sha2_128f_root (ctx->pub, ctx->key, ctx->pub + SLH_DSA_128_SEED_SIZE);
+  memset (ctx->msg, 3, sizeof (ctx->msg));
+  ctx->sig = xalloc (SLH_DSA_128F_SIGNATURE_SIZE);
+  slh_dsa_sha2_128f_sign (ctx->pub, ctx->key, sizeof (ctx->msg), ctx->msg, ctx->sig);
+  ctx->sign = slh_dsa_sha2_128f_sign;
+  ctx->verify = slh_dsa_sha2_128f_verify;
+  return ctx;
+}
+
 static void
 bench_slh_dsa_sign (void *p)
 {
@@ -980,6 +998,7 @@ struct alg alg_list[] = {
   { "slh-dsa-shake-s", 128, bench_slh_dsa_init_shake_s, bench_slh_dsa_sign, bench_slh_dsa_verify, bench_slh_dsa_clear },
   { "slh-dsa-shake-f", 128, bench_slh_dsa_init_shake_f, bench_slh_dsa_sign, bench_slh_dsa_verify, bench_slh_dsa_clear },
   { "slh-dsa-sha2-s", 128, bench_slh_dsa_init_sha2_s, bench_slh_dsa_sign, bench_slh_dsa_verify, bench_slh_dsa_clear },
+  { "slh-dsa-sha2-f", 128, bench_slh_dsa_init_sha2_f, bench_slh_dsa_sign, bench_slh_dsa_verify, bench_slh_dsa_clear },
 };
 
 #define numberof(x)  (sizeof (x) / sizeof ((x)[0]))
diff --git a/slh-dsa-sha2-128f.c b/slh-dsa-sha2-128f.c
new file mode 100644 (file)
index 0000000..23b7090
--- /dev/null
@@ -0,0 +1,87 @@
+/* slh-dsa-sha2-128f.c
+
+   SLH-DSA (FIPS 205) signatures.
+
+   Copyright (C) 2025 Niels Möller
+
+   This file is part of GNU Nettle.
+
+   GNU Nettle is free software: you can redistribute it and/or
+   modify it under the terms of either:
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at your
+       option) any later version.
+
+   or
+
+     * 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.
+
+   or both in parallel, as here.
+
+   GNU Nettle 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 copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see http://www.gnu.org/licenses/.
+*/
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "slh-dsa.h"
+#include "slh-dsa-internal.h"
+
+#define SLH_DSA_M 34
+
+#define XMSS_H 3
+
+void
+slh_dsa_sha2_128f_root (const uint8_t *public_seed, const uint8_t *private_seed,
+                       uint8_t *root)
+{
+  uint8_t scratch[(XMSS_H + 1)*_SLH_DSA_128_SIZE];
+  _xmss_gen (&_slh_hash_sha256, public_seed, private_seed,
+            &_slh_dsa_128f_params.xmss, scratch, root);
+}
+
+void
+slh_dsa_sha2_128f_generate_keypair (uint8_t *pub, uint8_t *priv,
+                                    void *random_ctx, nettle_random_func *random)
+{
+  random (random_ctx, SLH_DSA_128_SEED_SIZE, pub);
+  random (random_ctx, 2*SLH_DSA_128_SEED_SIZE, priv);
+  slh_dsa_sha2_128f_root (pub, priv, pub + SLH_DSA_128_SEED_SIZE);
+}
+
+/* Only the "pure" and deterministic variant. */
+void
+slh_dsa_sha2_128f_sign (const uint8_t *pub, const uint8_t *priv,
+                        size_t length, const uint8_t *msg,
+                        uint8_t *signature)
+{
+  uint8_t digest[SLH_DSA_M];
+  _slh_dsa_pure_rdigest (&_slh_hash_sha256,
+                        pub, priv + _SLH_DSA_128_SIZE, length, msg,
+                        signature, sizeof (digest), digest);
+  _slh_dsa_sign (&_slh_dsa_128f_params, &_slh_hash_sha256,
+                pub, priv, digest, signature + _SLH_DSA_128_SIZE);
+}
+
+int
+slh_dsa_sha2_128f_verify (const uint8_t *pub,
+                          size_t length, const uint8_t *msg,
+                          const uint8_t *signature)
+{
+  uint8_t digest[SLH_DSA_M];
+  _slh_dsa_pure_digest (&_slh_hash_sha256,
+                       pub, length, msg, signature, sizeof (digest), digest);
+  return _slh_dsa_verify (&_slh_dsa_128f_params, &_slh_hash_sha256,
+                         pub, digest, signature + _SLH_DSA_128_SIZE);
+}
index 0ba3fc6556cdeb80596a777e752d558f8c2c1617..0d4c774daac951493fa7891b2f46a83f52650e2d 100644 (file)
--- a/slh-dsa.h
+++ b/slh-dsa.h
@@ -44,15 +44,19 @@ extern "C" {
 #define slh_dsa_shake_128s_root nettle_slh_dsa_shake_128s_root
 #define slh_dsa_shake_128f_root nettle_slh_dsa_shake_128f_root
 #define slh_dsa_sha2_128s_root nettle_slh_dsa_sha2_128s_root
+#define slh_dsa_sha2_128f_root nettle_slh_dsa_sha2_128f_root
 #define slh_dsa_shake_128s_generate_keypair nettle_slh_dsa_shake_128s_generate_keypair
 #define slh_dsa_shake_128f_generate_keypair nettle_slh_dsa_shake_128f_generate_keypair
 #define slh_dsa_sha2_128s_generate_keypair nettle_slh_dsa_sha2_128s_generate_keypair
+#define slh_dsa_sha2_128f_generate_keypair nettle_slh_dsa_sha2_128f_generate_keypair
 #define slh_dsa_shake_128s_sign nettle_slh_dsa_shake_128s_sign
 #define slh_dsa_shake_128f_sign nettle_slh_dsa_shake_128f_sign
 #define slh_dsa_sha2_128s_sign nettle_slh_dsa_sha2_128s_sign
+#define slh_dsa_sha2_128f_sign nettle_slh_dsa_sha2_128f_sign
 #define slh_dsa_shake_128s_verify nettle_slh_dsa_shake_128s_verify
 #define slh_dsa_shake_128f_verify nettle_slh_dsa_shake_128f_verify
 #define slh_dsa_sha2_128s_verify nettle_slh_dsa_sha2_128s_verify
+#define slh_dsa_sha2_128f_verify nettle_slh_dsa_sha2_128f_verify
 
 /* Key layout:
    private:
@@ -78,6 +82,9 @@ slh_dsa_shake_128f_root (const uint8_t *public_seed, const uint8_t *private_seed
 void
 slh_dsa_sha2_128s_root (const uint8_t *public_seed, const uint8_t *private_seed,
                        uint8_t *root);
+void
+slh_dsa_sha2_128f_root (const uint8_t *public_seed, const uint8_t *private_seed,
+                       uint8_t *root);
 
 void
 slh_dsa_shake_128s_generate_keypair (uint8_t *pub, uint8_t *key,
@@ -88,6 +95,9 @@ slh_dsa_shake_128f_generate_keypair (uint8_t *pub, uint8_t *key,
 void
 slh_dsa_sha2_128s_generate_keypair (uint8_t *pub, uint8_t *key,
                                    void *random_ctx, nettle_random_func *random);
+void
+slh_dsa_sha2_128f_generate_keypair (uint8_t *pub, uint8_t *key,
+                                   void *random_ctx, nettle_random_func *random);
 
 /* Only the "pure" and deterministic variant. */
 void
@@ -102,6 +112,10 @@ void
 slh_dsa_sha2_128s_sign (const uint8_t *pub, const uint8_t *priv,
                        size_t length, const uint8_t *msg,
                        uint8_t *signature);
+void
+slh_dsa_sha2_128f_sign (const uint8_t *pub, const uint8_t *priv,
+                       size_t length, const uint8_t *msg,
+                       uint8_t *signature);
 
 int
 slh_dsa_shake_128s_verify (const uint8_t *pub,
@@ -115,6 +129,10 @@ int
 slh_dsa_sha2_128s_verify (const uint8_t *pub,
                          size_t length, const uint8_t *msg,
                          const uint8_t *signature);
+int
+slh_dsa_sha2_128f_verify (const uint8_t *pub,
+                         size_t length, const uint8_t *msg,
+                         const uint8_t *signature);
 
 #ifdef __cplusplus
 }
index 076ac6a93b49e44cdff27f0c4169ad3148ac077c..9a1629a279076aabf00ce58943677c07cf9e8e0c 100644 (file)
@@ -98,7 +98,8 @@ DISTFILES = $(SOURCES) $(CXX_SOURCES) Makefile.in \
            gold-bug.txt slh-dsa-shake-128s.ref slh-dsa-shake-128f.ref \
            slh-dsa-shake-128f-tc64.msg slh-dsa-shake-128f-tc64.sig \
            slh-dsa-shake-128s-tc215.msg slh-dsa-shake-128s-tc215.sig \
-           slh-dsa-sha2-128s-tc162.msg slh-dsa-sha2-128s-tc162.sig
+           slh-dsa-sha2-128s-tc162.msg slh-dsa-sha2-128s-tc162.sig \
+           slh-dsa-sha2-128f-tc7.msg slh-dsa-sha2-128f-tc7.sig
 
 all: $(EXTRA_TARGETS)
 
diff --git a/testsuite/slh-dsa-sha2-128f-tc7.msg b/testsuite/slh-dsa-sha2-128f-tc7.msg
new file mode 100644 (file)
index 0000000..3723f36
--- /dev/null
@@ -0,0 +1,157 @@
+0E485811C6F54218 91E965C5543BED8C D169FA52C4388CE1 A4558F8E130A6F59
+606D0F027CE6365D 922E8C582E65C79C 3C75F51E98B9701E 4BD5F7FD52D5471E
+41932B1BD82A02C7 87930C3456D7B69C 52E2635A28B0EC8B 89E72D7EADBEF09E
+62E230E401197FA0 D01DCF8545F90578 53A5BB4374AA0071 782C3557CBD3E557
+18512E5B500A410E 25D805292264B8BF 3EF951921508F091 3E80EF4227A479D5
+47F1EAFDB94472A5 37D04B643B3FF267 6F5DFB45A82C4802 4FE79FC3B078DF71
+3C406814CC271D3A 3EFABE5E0B3F79DE 449FBB0715B616B0 06B625D67EB0A0F6
+2F57A4B41D36072A 6410FBBEDC4FB975 BE1E73506F0EC8E1 F5864BD352814A39
+B99BADC5B437FCB7 F02B15DD970B3652 8A7858C9EA5991DC 1C59EB1AEEF7557A
+EE92CA13A143ED16 E75EAA01EAE53BE1 A139CBA8FB39CC83 AE4E09A24DE4159B
+2C00C3D2ECD88B55 205402B6DD3F2B25 FB39FF0493827AB2 65B6EB2D990E6AEA
+148841160B371AA0 3D5E2A76EB323A99 7BA2B0B7CE2A236D 16CE090778C9B44B
+CAEEE818D9A7C8AC F0CD2EB7EF90806F BD63F64E5934D8FD A11ABDD3E30B6E6C
+1519076CA1F8FC72 F009ECA727C587D3 A1ED12E635CA65D1 5A8A11D519B9B6DD
+75567C7664225CD0 492C18BF053387B2 F0D78C99E8E3C291 906B8EFEC9469F09
+C8F1DAAF7777AB2E 86FBC9F85CF63CE9 88DA1CB9C27FCE50 05F3EE0F51E3CB13
+2574B5421C108C0C 904F18B733C8857F 7BE0E29459C47D7E 34F7C003843B7D9F
+B2FCC0E175B7C96B 6E767D3FFD0347C6 F6724BCF837D10E5 552AFAE67CFA820E
+8E15BA7A8E7BF2C6 AF65126AAAD2A92E DD3CFE064A0CB56D 774F5C677E78D080
+E02812A6322502F5 7995DB38EB8735B2 92795E4C7B6236A1 BCEDA090706B5C8A
+9DFDF1DF853BA73C 887A6981AD715A17 DFCDD3DA036E7ED2 0797E2DA618B6FE2
+1789AA459F158065 5462BAFA353E389F C7021CDF4E731447 4391F405A1FC9E43
+749EBFE6102119FC AD214E18B5C164FC 9D84D600CFE381D6 70BA67B9112E86A2
+7A70BB993BD6239D 02EBC3CF4A8502AA 4B0533289E18B430 37FABD33BF1CE771
+F0989DB86CAF02D0 AC74198313B9D12D EE26D6F89F773B17 2827483DA6CF121B
+6ED7881CB2F1D121 FED2A0DA30DD5880 376303D138554879 B550A93DD100A34C
+4E49606B390991F2 F80E4DE8F1F067D2 65193D4A1C6165CE 43C22644E4C92F4C
+BB91CA97B0BD9975 AE20339D248B3BDB 948E06004C5EDE19 E11029D37E3F122B
+AB72732CCCFB606B 1A89A9FA7B46DF6C 95A484F6F5DBBE2E BE96931128B4FE57
+1AAEE304F7D08018 84FCDC0A8D9CB074 2151877D972DD98F 766BFD4C13E567F6
+9336972BBB01BE1D 211B24CF6A359ABC E3A7F690AA928EB2 D99F05B6EEA233A9
+CB46402758941C18 E2320F26E0B32E7C 21EBEE478F333CD4 5EF0BFD71AA14F31
+41058298B1BCA8D1 EF86C4E766EDA299 761F573DD375AE4E DFF1E400650B9FA6
+1A7513824DA49C78 29C1BD3E811BC643 F125E2B9476AA655 87D03D4D35D193AC
+C545032C3093BF59 D99EA77ACB361E1C 3F19D2F9B864EC1E A243160CFE7517D1
+3C88759F38055CC3 1F9B1D338848999E DD3BC34DA3D0353A E43C328C57DEF4F6
+D230C364D5FB5803 6675C9EE9ED05AD4 D06EEBF36CEA01FF EC4A9A9009C239E8
+89BC04E21D690DC8 2E2F37A5CF22857F CC3B4F91C77EB3D7 13E0CDE2C487329E
+1B99102350270F20 FFB2711FC215E0BA 2D5F173B6154829A E0550A2D890C7BA0
+4EFABAAFDDB2DEE4 76B1E64919932D1D 0D57EF3F278199D5 49EDD62F0C86D1E5
+FC8AB3EF32EE111D 9E3FBCFA2ACB88B6 8416B35AF2772B02 EAEC9EEECF7D2432
+AB1014A14AB134C1 B2E2B7538383C2E7 DCA6AC31B97CF610 2CFDA166AFC3FF56
+933F7DECB2655C31 476DD7E88857008C 534EB2CFD3B77229 FCC606A6E37C2E89
+CB40AA830F15358F 7580E92BA6F2D732 A485E2DE4DCB963E C28D02E7F4D2B131
+987DDB608AA41136 2C009A69F635B6FF AEFB7995ADC707A7 A03528214C629010
+E9DF615DF1862E1D 1A8FA655723673EA AE4E4985E29B10FA DACDE6B9C22BC6D3
+560DA06920654DF8 815C30BDC2E27487 EEEA4C1235E71D8A 4981C23F7EAF7A4B
+4D6838E7BE62D5FB 617F6C0026597B9D 0D65693C76133C8F F45ECCF661AE78ED
+5C57163D8082EC57 27C325727612E915 7723EEF69DD6A263 A6B869AABAFDBF87
+F1E213106FF3C1FC 5B06131977E2475E 0987F3203669D070 678531417E475E3B
+DC9D55BD71F39C6B 4424606D4709E9D8 FAE8F218389C2446 A085030B5E0620BB
+735A2260BB4247FB A02BBD5AB070F56A 9190479F03D296FF FD10FFB9EF3D9601
+7E11DE3D737B6842 87F5EBCE9B2256A0 3EF248F5079FCC51 9895DB2384CEF18B
+FA587C0710345CDA 854F3ED0242E95D9 338488E0C8915AFB 18EE71D055ED91C6
+C60FFC30FB8A24C6 D31186619AE54009 6631101695B79AF7 88789135FA2FEB0C
+B1D9B56537FB0B43 9A1D986388E273AA 246C0041F943A07C 74342B07CEBEE36B
+740E440E90657566 730A5935330F2BB4 7F60F4DE9B601AF6 E745CAAD617F4EF3
+52CC72B397F30A18 4B9BA2143988C23E E18D861CB23638E7 C2DC019A7DC00215
+1E93BDF64E0D4106 7CA715D448DDD2E9 E0476E63946C8710 C2C0C0D9F986BF60
+6FEAF10B71A28650 F11B893947FBA883 B5FB213D2172FF10 9F2F98D45D332105
+E05CCFF06087E502 848FD6947D263F5B 951E0C1B8CA0BD3F DA519356A40AE0C7
+AF066086563DA1C2 17ADDDDEB1DA6232 853DDF3DFAD10B41 E3252D0149FCB062
+6E876EDF58C59974 5C07ED97E1A16508 53DD53556D4E4F1E E5B84CEFB1FDC904
+45BF7F16E2B510D9 924C8C49F0F0FA30 15DFFF1301F521EE 9D5194689E2BC0E8
+51DD88DBD17AE753 F1544A8E3DED6F7A 21EA1B72E51BE2CE 9A5191C909012DDD
+DAC936606A1C1B30 51E52FE4C4BB3F2F 1A9D6ACC099BB288 3EF3F7ECAB383820
+390F4A7C1C8A188C B7240D97A421C192 3D3C02412167EC24 4653EA83A8D2555E
+7DD305854E7C6B1D DF8B33F6BFF8DB28 769FBE0197B5F33E 9498F987A8F717EB
+1ACC90804A3832FC 3D9AF715A681BC40 DB937ABFBE702B0D 534FBE8078A9B8D6
+A0D9777C38B6BCF1 5F7C71C3C3468E53 18723160CEB8C592 49C93606299178AE
+5DBA5C34D4D5B20C F34878830275D68A 55E712F1581591FC 0E4C52EBC3B03AD7
+0073389AD1E43A2A 6489765FB4D3DE9B B4FAB66469792296 542D180FFF16956A
+A82D57E1108B840C 4B7B6B7BABE52927 5B5202581AE20557 54492555F086A6CF
+042244DEFB3AEDB6 52D0466FD177DF7A 820996A6E69A8CED 0C521BFE41D7DD92
+EA3CF28B5FAC30F2 F8E8F3A6CF11AA6F 47672CCE19910BF7 ADA48B2B2CE59F46
+7716807BE727E1AF D7AF37F291399197 7E47E4E11D54A86B B8DAB2405C08A22F
+DA85DF61A829B72B 484A22C1FCC4D25F E5E734CE157ACB57 7729A49E5329F9FA
+7133B66499777EB2 15F95BE9AB1F945D 79056A5503146391 E979D827DCCC25A4
+33CEE190214B6550 3D37E2780BB5D04F 51806B78CE2DC953 C4D7AFFEC7BCEAF7
+72679E7C6EE5DEE5 7E3882CC67276999 779FE3C6C4970BD1 4B5076FF31E389C0
+04499F744E48EE35 473010D9FF14A33A D7E0E2507CEE4112 DCECC45D1A25168E
+1282E10B61407A59 EF60B506A9E7BE0F AD912547729B42E5 5501B5C8A1DE95FD
+37BAC1BD2351CBFC 2854EBBED4961391 B5663BAF224D49D3 3F045C2D3CA2AEDB
+1E899DBD787475E9 404794BC6F81EAB1 2FF16A50B9B387D4 783A31993A0C44BC
+105B40BE48438220 B6F563A922C10E71 9D973A805FBF365E 48E601FB942BDEA4
+F1B67E7DF387496A 71C90FF011CFBB79 35C6C419B035738E D8334692ADF4EAC5
+E67479DD3B443762 B0EBB6D24D0F928E 78AEEF7EF0C5186B 93B9C12BEAFA5527
+9C5D00A35D332825 44B5DEC9A007489A 5F308C021B8622E6 18D71063697C178F
+B457D996A9F2BF04 B10B0413AB3142A4 1D2BA801890A7E76 F3A9951D38D93149
+C88AFBE2AB65C508 32160C9AFC1590AE F4493D9BC5E01AB0 3A85FB6EFAF11BBE
+A601283BE036ED5A C66DE1A4BAB8FCEE 18900E5397D74AF1 C6DB1999C08B7514
+BAC753F804A83E02 9CD57210D1E08B53 1FBBFA7006D585FA FA2CE41E388A2F39
+7EB384450C1BAA12 0014281DD2451EAA FA5224F0C4F4C73E 0C5F14AFBB3F17C5
+F24555EF8B85A543 ACBF64CD1492590F DC9F5E504F227ED4 A20FCBB15F56D164
+E23CAF2B54FA4A58 A2731243C8694ED7 1173058DA3F902A2 71AAE9D5DD48B7BE
+022D3762696B82E1 2C014A51C4EF7E8B E5A8F91615D49119 9F1997D7DB775AEC
+C5D73247F534800A 8A1B613513A1BB08 81C54D37347D9634 742C97EA750DFD8E
+375DF380F7005032 E02E93AC09064637 030CE4D905914AB9 572A48456760391E
+C76A3C59D8BE1566 9E52C97F36EE5EBC 72FE4AAF2BC5F873 B7CC3E0C67EE85A9
+AECA9A68C3B8354E BC109EFD05018596 36AF34EC0AE7E861 D2FF110E0CD1763C
+50CE81BC84956CA6 EB55971426CA73C9 DB4BDDDD2BD5782F 861EFD305E21A353
+24C5C878CB61E214 8D60C182176F80CF 2F7030B0259B0118 474C1D67A9FA06AD
+D7AE83A79AA3390B FB02782DEDC07CA4 85A72A65CE7B02A8 6C631B056CDE1706
+8DAF43941406775A D5FE2B27436E7C63 518A45C101945D1A 4298AE12FD0F0A27
+2ABC9C6923CE2ECB 682BF92B9645401A 751914770541C229 19666243D2E085CF
+2AC16C8389F17C66 014A03C4BD7681A5 DB80F283DF35E896 40255BA03530166B
+EFB7A217EA1B9B67 9CF3ACEED8034F75 079773E84B7586CD D9579F2459195AAD
+39DBC70DEC893D4E 683DF86502C1EEDF 4AB5B98FDE4F47B6 C48FA1286A03A594
+59AFAFC6E3992AC1 275137932C4B5C7A 7F0928FFADB35DE9 A2AAA6174B64A0A0
+D124B05F3C6DE972 B467433B38EA616B A6EC8C0AA477B80A 0EEC34CC0CDF296B
+8C707D8DB602660C 14CC7666BE6BD5D7 77B2F774CF2C114F B16762A379FD3F2B
+CE01A60EC1D81D9D 605C37B5C66A7170 8FAECA4B0BF76C33 7E3F65D4A0C7694B
+813CD02FDC658541 FD026B3C608F8E16 3B026AE249C1689E 31827347191B9FCC
+9997455480AC72FA 91130C73969EB6F2 867FF03F9402E3C7 9151DC4E5F17550A
+7502DB178215962B 42FFE52C88F9F00E D1D35E6F2615CE74 AFC76916D8B5F976
+40946D86AD88C5E5 EE16556377928EFB 68B503598E969FE3 89889F47FA844197
+625CBF16F458C3D5 2CEC05C5F857FD4E 0E649B194C5CD3FF AB62DF705EF1D2F4
+DB4EBB74E19C5F04 CE50B661964A4568 F9FD39CC791DE51D D1A0B3545C9226E2
+4E9C0F3EC0F64C47 311536327AA5A05F B63C0384D42090EB 8C7B6B2EE4901905
+83300737A9FBA5FC 820DED0A0872993C CF98E47698A91255 D3B93965F3CF551E
+1F3FA413E270F79A B39B2EE77663A5C5 E15EFD39AF394528 43E9A7A1965897B1
+F5646EAD387A9BCD D193B0DDD2563F7A 5BCFBD8A804A838E EDDC8E7D3DC92E63
+78003DB6DE00959F E97E8432C73205D1 67E46AC4BB10B232 1A4CAECD19844B55
+C6770FD727A65FC5 94799B327D9EDA9B AAA702881FF4DA88 D8655D3DC62A1884
+B001D0A2CDB0796A 6D89B996998A9878 8A74F83209FB5796 19DD87A111CC4F4E
+1034BD15166410A3 DA0C84768BF46560 076E09167929B96D 17E607DD535476F1
+00448BFEEA9FE693 8A725BC3696E7C20 BADBF587BD4F939B 33A7B5FCF89B1536
+D0EEE40715203BFD F5C7660CC4ED15CC E3FF78698B46DFE4 4CA11F269CDC5BF0
+7E20B17F3A5F2033 4480CD9D34DF3D53 CE52D8548B945781 6D1F673654807DC3
+659AEC0140E41FBB 5304FDE2C74D04B4 D774A71AA0C08B6A 22F2635A1B743842
+6395EB389314C775 6D781417FE7A73D1 7983AB8CC3E15950 D27F1608598C3468
+1BFC5C3A1F7D3782 006AFCF9105EEA39 FABDE750DD543EC0 D00AB6CB97C8DF6A
+722575E9B36D8E61 D488E102A1295A89 4BAED039F6A78D91 E510A8AEDE0C0AE2
+6C9E236BE736E7CB F6DEF76AE524D179 B895D7A2AA4C0895 905C1F9B39853FCC
+F2C72673A3131E23 507B85FF3D1EEE04 ABE2341ED8FDA992 11C67E055938477C
+DD3588D4287C5BEC B3B09F54DF195C0E 6279D380021C017B 9B4EF0FE00D1D4F0
+CF6519992D517D7F 62363BD97944E101 C47ED72D2817E1F6 CEB525A5FCBD23EE
+8A1899C01B218D3A A7FB97E413CF31C0 F4ECBC23C05E0969 2534BABA8B247AFA
+1B4EA9AA05D6ED81 A2978C3180072B89 70B0CA77B83E3D33 C39E9609A22FD233
+2C17EB3F59A271BF 637462FD92CC07BC 3D5DEA5D57A71207 8E024C779550F504
+951EFD88C369E65B 0D221ECA45CB3610 162B5A983467512A A0AFA840FD7FE181
+3FA8C9C9DC1EE797 F61FC5A9D2B2B636 434AF676D235AC5F E7DAA6AB00DD7AD3
+CBF07DFC017A5A0C A12CCDE1C7390446 5AA91D7752AD72BC A4CB43362B89C4C4
+008CE3D7F810DF60 C2492345F1512A2A 11D134C5A17A5FAE C8760DE1DA1C56C5
+72BF32F16316178F 6EBEF2B15C3B32B1 AC1D53814F378332 7D47ED10A04D1FB4
+FB7F812402D74864 5283FD25ACDDF6B5 87AD2FF9D05145F3 E434C8AC7A6A136B
+E39F8F52F1B95EDB 1723D2942B686746 F3687BB3B902538A D272DE61B25F8825
+18288D1423E91E02 60E8FC24DB1765C3 967B0B038F2B9371 B3B23B0FBCBFC413
+47AEAC912BFDC1FF 6B0BDF4D74063C0D 819A217773D0D3C4 B9B912E4E88A0D40
+36702B1825E75EB7 F27FD362F04D2BC5 972499C9FFFA8472 C6D1788AB5B37E3F
+6DD09A9FCCD4311A 642071F843999632 43C89867C97B10D0 10F7EC5702C2D863
+7717FC877F6F8D30 8B62440FCB956AB2 287B4C8E17F6566A 571A0E5A04BD7DA9
+303C8DAE4BBEAD90 56B05D20E567EB1F 52F014806B09A005 C548452DFFE4E0E9
+832A77B7B4BDA33C FBB797B8FC1CB29D 470E3FE5A601D3A8 F3426BEFFBA848EE
+685A3C9704332D92 D5BA813EB1944731 3741D547D24943BF C27CEAE14F79F77C
+F6494C444DE9DE1D 55112EEAC09524DE 23BB68F2243E38B4 9E8A81E35182A304
+A442D4D6726BEC9F 33FA860AFEE24A43 5F3C64F37D9CBECA 20BFAF3A891218DB
diff --git a/testsuite/slh-dsa-sha2-128f-tc7.sig b/testsuite/slh-dsa-sha2-128f-tc7.sig
new file mode 100644 (file)
index 0000000..5daa6bd
--- /dev/null
@@ -0,0 +1,534 @@
+8640FE92D4E79AED 24513955CDD0D30C 527688A9D878F6D0 C6E114CA62C47338
+3C162FF7041E10BC 90B0240237BCB218 36C956D6AE569DF0 CD1871BCB19AB004
+6F8457CA4F826F4D D21CD93D61A82400 3F94785B0A59F3AB DABC3A316EE77ABF
+7551A6FDA8404ED9 577FD0D22A33221C B86D0C8932751472 9E9F335B4DEA015B
+730D0680C8BA84A5 B5AAA2F0B839E061 E2853DB793CCD5E5 7CC74CE6448C8AE6
+8CAB16C77710F223 379A9AC40EA41CB9 4C8733C9F13D237F 66D2C2A5FF15A5D4
+3ADCD430081C4397 961C4F5739E143D7 6B0C2AA676556638 CCF856D25211356C
+39A6700BB0F70F45 67BCAB9C6B001C55 569F8B20AC220EC8 71C05A18960BE76A
+3E5B8F0834214C11 E3B25868132019E7 FD34CD0E8BF7B545 8229487A04A481A7
+5324F8614CDB1601 10F6E204B327697A 358EECFAEE465B72 ED368F6891791D66
+6D207B2EB4625D08 4126E5A876413764 3BF35EB5B61B735E 97A5B06CAD2E5D7E
+FAB9BC6AE66496AE 9EB526F755BABFF1 50E5721E528286B2 7A3C0DAB74B7A094
+42A7CE71E71D368B FACC0F27427B38A4 5B9421CA86BF90A0 AE53F5028DF0485F
+B3654A1214CA0A2A 4BF89DF81B7CD3FC 0CC15DA65569334F 65E217A44E6831AD
+9003BE9EB8D37A6B 250CFD19C638327D B1E28A2C18452073 5E926D3D61582186
+5D5AE63C75C7ECD5 ED6FBA61087F6538 FD8FDC6E77FE71D1 85DDAC08C85649AF
+258DC4EA4A3FF00B B5DDFE20C6AFDA1F 901948D359B1E74D DAC12BC604ED7F33
+85DB8EDAB2350466 B72668657412D5E4 A3D76378DCBD6DE4 D811BB6342E8082E
+A26FD7C78A5F7486 9C66D5861F132F87 495690C6267DE456 F58D80421CA5D755
+E00C9F11F3F03D52 4F7ABC27D5F1A4A1 56B77B7EDEF90AB2 B1706653EEEECAB9
+8CEC87C2ACF71214 A0083D7777B4FE7F 3DFC283CB574A47C 4EF945C053D68181
+DB0411059D1EC58A 0B67BFE3AE05E714 4102AEA00DBE3F61 E98BF5187DC511D7
+DB14B0B3FA15CC57 F87CD8B82910ADED 794679FA3C787E0B DA8FB36B9B75F69A
+650B55F9648DBC64 A918F5CAC3CF8189 85F1BCC51168964F 80BFD31D854CF3A5
+ED96D03FF2AB666B 2B79034DE1153DE5 2CE835A5D2FAD5EE DAB78F9C5C99D730
+4EF81C1BA3D3F485 5661EAE4AE8D24F7 2CA44A164A1B25CB 362444E7789C0144
+D0A42D586EC76F40 2BC47A577661D5A4 C841388FDBFE6D1D D8F0635A7F58BDCC
+AED437846729CA5E 89CC715038EE5E55 3CFFA3D945639E73 685BF3A00AD69FF0
+49CA8BDFB1DFD28E 1FBD3508137CDF74 475AEBBC60830ABA F1869B3DC50A8BD3
+94F118A6160C2DEE 09B250FF042FEA36 44585EBAA7A259B2 014C4049D44DBBA7
+09D9E1417FE38BE0 73810ADD66CFFE93 7E43808C497591B5 DCA3A0815843B96F
+2893991B0B614B53 B7B5B2CC2B17309D F73F4626E76671B9 24FB1CDF2466CCE3
+72E9489A9D120B5C 50BB35773470EEF2 FD4CA05DF9885F1D EAA42D60108C6C48
+DD32509B6A57DC44 F1A37F8163CB3DF9 63BCA3120237C34D A7709F216F3BD438
+C256FF909E493F6D 9B59D24218831978 4B15E408EB20F9C6 06847558C632572A
+86CE8B8F019E244A 417F4F2E801BEC25 C5A71E53C5605AB4 DC686CD7C37D5FFE
+55B20A5E3B6C7B4E 8436276D4C66DD60 CD696E0FCA795123 FC1DC27B92FBEDFB
+B8FD52D6410CC9B3 A8DF20B71EC60ED3 7DAD357B976F6CFD 00D5D4D4DDF74E16
+AC7B25B4F51224B1 721FE53F9F103059 BA561EC542BCAFA1 1857FF53734DF626
+878EB6F966AF5EC3 E8EC9B5E963BAA21 8E48752658B7784A E66E1A77FDD748D3
+44CD5E3C59B986FA 3DAC5202BB4C8719 7F26719A49027023 8597C43DA775CE05
+9A22C684DD4A64DA F32FBB51644C353B 7678D8A81BDBE6CD 160A8CC15AEA602B
+C58C81799A52B489 84F6B12ADB84CB7F 3025A76F2516F757 1B839FB4B514752D
+3827E36045441C08 01BD587859B0BFB3 89105D25D5521563 BA5ABEA48BD515B1
+2B34074223FBEACF E94AB264F96D5B24 8DBCE17984CAA449 AAFE4C69A3809A5A
+70A486CEE10A40A8 C6664A61B51BEAC9 C51D4A533C99ACEE 542A99297D101166
+39F453BCAA73D939 6E15E521F3CA942E 2254D4EE41350A78 F2D4ECE26B2B8BFA
+2ED95508476359C1 DCD84D570CA88E42 188F37C2402ACB90 0D8654DDB1AD4EBC
+C805434249D46FA3 8609AC5BB15147BC 562F2AED6D989242 66C14064C07978A4
+35DCD85570E8E6F2 ED9284AF63D071CA F77D4BD2A44B8330 C8FA859508711D8C
+814669822BCD6271 799BA8C47793BE48 343CC8CB9DC13728 CEB9A0F0F76A4BB8
+D0DBD91115BA1C7C BA7FC303347DB5C7 802201D6B4A837DE A71505539D69AE1D
+9F663B1ADAC79A07 21800F32D2587A54 4C61D679E740785F 47179688220D7CBE
+D462418CC254E498 BC2012D2A68A9041 B670CC8BABBEFAC7 85C63B4639E9D8BA
+4F74D1FC64BFBE84 85786690AC499594 31C6E900B9E0680F 8C950FDDE96F6E60
+8A440E1B1E14CD99 7BA7EABFA654E921 E3561F10A4A1C0C6 BF6238EEA3ECBBD5
+41F49844CF07C1B7 A5E6AF1620500F72 5C76714C3A708F34 B51779A45E684BE8
+E92E2EACF2DEC9D3 8B6C349AA15C120B 9A1490C0DA034F9E 6B3094EBC8A6A246
+7C2D24C0843B2113 1D671AC6038FAF2E AACB4C1DC3AF8A62 D7A7923A52E2FA92
+AB1C21594A9B3F6E EB4253084726AEF9 99EBB06EF8E5D053 DEEF0E69668E624A
+249B7F714B822379 955CCBC8773C04FE 230B0E88FE3598F6 4DF291E280ECBDF3
+2DD1F61F43876A98 400DF1C8FC6DFD43 CFD53AA8A9E3E0E9 E4F0F1BEAF3E3CA6
+0B53CF528193C15E 3A97DD005EC2E16B 54C0F1ABDF85FE94 8EC64944695D12B3
+7D1948AB1A2006F7 7DBFDB3030AA6FC4 92A56717F62E5C5A 119D779390D4226A
+5DC9784A8B482108 6C7083C99B1DF1CE 3C3A98C6C8716D1C 55254603D6E6BDE9
+6636EB347EB15871 A4987260D3FFA85E 9954F074039EEC01 6C194F442D8258A9
+7E9E875A6623FF51 2177718812F810B0 832BD7C45C793740 2FD90F5E5DA8D40D
+1A0D6CE2ED3707E9 70194ED1CC8BA92E E86792D498BD9332 E58758ED7CFD2524
+CD3C57A6713A54AD 81C7AA008AD67582 7AEB627717CCC1BF 7AA5F7C0B94FF577
+D39415FBA3918D42 CAF781BF40C352AE 486AAAA61791EC76 5B4897B7191EED99
+16CCEAF7EB59F09D AC54D00238206A44 912CACF748D3D2B6 53F3FDBBE1D7757C
+5638872F1224BC49 C689CD8C1F30A89B B544715FD8B77C01 A762FE20AB4254A4
+DA9101E86C14B76B AEF7D776EF7901B9 BFE5F1FD6448E6BC DB772DE1703C6F1D
+5B7D22D2F9B96074 E3680DC5996D8A19 F1D2EF6EA4C8CAFE B8D76EC0CEB8075D
+E001AF35209D3260 CE81F739455A9CE9 33310B3519775275 E2C30E94DEC8EBE8
+4828C3D9EC88CE6A 6BA76184AD0B2348 DBF06C50A9142FD2 8037D851E7E51F33
+067DEE3EE7CD8A3F E6738BAABCF21899 B1B54A6D88D2118B 4DCE566F18F4A61F
+6F4FA0F201402AAD 71B2DD404BED7D40 3507EB2C917A04F0 86EB4B71E0DBECF9
+DE6EAA462EECBECA 3CA102E8833FDD6C 7D97FBF5792231BD B14A01301A895AFE
+72175EAE5E50763F 4B6C3BF6691247F4 866C4DBBE2F77C16 61BF5B880DB08968
+C1CE6D5DD7CDBA7B 682EDC5299BE4934 DBDD5D27FD9D4760 DE5FAC21E3C8E7E4
+5E4C90B068C3F996 CCDFF9AD5B2995FF 5D80B9B44664DCD1 C37C03CC79F28374
+BE0ACA53FEFB21C5 9EB76C50A5457707 C2A8E9807049C470 AA6CAB3AA2218823
+8C24C21D81414813 07298B6F559E4992 C0F0B9A407716E04 D33A95FEAB04AAD4
+599E70FD23E8FC87 59FD28062D8B8A7C 427962D92E5413E6 1E35CFC7BB55E5F4
+51D88DADAD33150B 32E65D5A73C9AC69 90EFE584D2635284 50B9BEE689E87C42
+42326FA744963FBC FC66E1B40763E426 BC72C25D4A18DB6A 3FB312C9D649476A
+2A70B3E01DB8DFA5 01C39E150A040747 8F14B18BFEF92626 EC7BC2BC8C6CC8FE
+3A7CFA6312287277 569C37C4D03FE6F7 F5895E7D6A96DE46 9BF12D9712882668
+107F53BB7438F454 863916FB8D01662D E3ECF6E88EAEF9EC 7A2A1B37B7E2E225
+FFB98188B2A33287 59F830FC65655BB1 19A086FFFE5EA323 DC603C43008603B0
+9E88312AD0867E5D BD3D62A85A286538 9CBB40C4C321E4C9 363A6A05C0A66351
+402C5E919D1F16C6 2BF06B57C38361AD 8BD74AFEF92DBB87 2704F9BD8FEF4D93
+40F9001FFFE76A33 2EF6C08703D48771 48631FD2EB84EACF CC8A22A73A883133
+371CC2328FC9C14F 7B6B8C396A13A752 79BDB33C3D5BD379 EFB5C93A990A8219
+965EE7229C2B5879 13730F26E1532227 65FDDB094A4CEFEA 11D4C2EFB260736B
+6EB809C3C35DD1F9 9B9E9E7593B1FF20 AFF832588D5963BA 64009E6BFFE7235F
+12F54763EB7704D6 CAB240741B7C7AA5 1E6FD02D0148E28A 9330D432824C57D6
+AFB1FEAEA0265FF0 DD1095E4F418735E ED97E3C398534706 81F88CCE59040724
+9F84AE1B0F4DB6DF FBB40A9B611099B0 970562A32630FF0B B142A6182939F262
+AF05C94F5D51F4D9 BD8003F00C3A5CEB C6F41F2B8C730C68 34AE8CC477890A44
+88A57AD2CD66A6C7 5FFEFBA93A003D82 8F490228AB791367 4E4B84B9E919ED10
+45FBA64C7098644F 6477E68F9C085B93 47C66E27F53FC32B 6084AE7C8729643D
+A8C022266CB1C0B0 DEE09639B86D45E0 00D86F2A1C17E932 C141C2B32D2D32B2
+812E4C7FA0F99B56 701C469845B8447E EBC83C04257943C5 26CD4547093C40B1
+96CDBADF17657AD3 E06680F8C02FB6CA 17F2305BE232814C C3B63F97A44F963F
+2EF5A04C38996416 C49A9E0BC8785476 7FB61A2089142CD6 B585C73506735138
+0DCF1B76C0E81903 D16BB65E0E2C8431 B9D916587D398AB6 292A52A5A598DCAF
+4AA697786E926E26 5957E76526999891 AD36F04A194309B7 33F6FC4C3EE2CAF9
+81F97160DE42C7C8 ABC4A4FC6DF86737 BEA529A5DEE3D8B9 10FD56F4FCCD2FEB
+F646429DF54CAA8C 88363D3C74DB6D1B 97CB045633FAE504 0422A6BC2FED7581
+2BAB179498D4F3CE 491BDE0DFBD92A56 3E89C830C898774F 24E802D445FFF7A7
+325DD94120794002 7E390DCCBFD6F1BD 03DBD9E13ADC1424 7A168F42E760F198
+FBF475224CD609B2 04459964F5E57683 B50897278188C75A 2A2B7EE739E28F73
+1A56B537271A3391 E078F6D08DDA8AF8 22C5A21189A5DEE0 4350B722F1B33126
+ACD3942223D31035 26E7C103031C3E27 9D09352C1CCDADA1 771C59912D4419F6
+82D34B5BA1E81964 C3F93F3C6DD1848F 28973779224F1C48 E86FB5C2E31138EA
+39F621026FB7D0FE D6D96B6FF240CF53 B33A56409BEA3F95 0F26933BF8E8B667
+0CDCFE19AE29EBC1 FBBBA18539B2D980 C7ADBA798C5271A3 8E5C6141C75DD0BD
+AC95BA864C267027 DC7F6CCADC7A5C28 2C4CE15335D5011F FE208CD18843D78C
+D7D63CDB58F2462D 2E8B1B1E7596376A 8872D7AC16092F84 15E6C033948AC7B3
+9EDBADC5EE4FB8E7 63AA3ED9BDDB4451 E78DFC54F199FDCB 485FE2278339A246
+95BE5080947BC6E7 A0E1865B3DBEBE72 D22315144DF71BA1 2039909E2792AE18
+00E27817BE863A5D 467AC185220243D7 A6685840A723A144 CE20AD340B2DECCC
+D009941084ACE076 2F54B53375D2A5C2 EC427659C06507DE BD7B59E402FE50D1
+1FAA96719CCCFBD1 9F3EDD2A1C948B30 397603EF2F8FAA30 7CF46DC191A5CE8A
+068DD474CEBE4433 CFE77A62E8DF8293 7CA7F200139B042B EEAD45A113B22EB0
+FC4151C2E3E4F286 602A8CB850AA90B9 E2328E6495559A7D AEB873FDDDC5A8B2
+5C3C89576CF6CCF5 32E069A5630720F3 45473695C91338ED 7502BA6C73D3BC70
+F24FA1CA10B3919A 1C5BEDC0D9998C66 45234C77D7FE3309 43F7521C882FA370
+5E4B2297CCBD5420 488A6F5DFFCF99C5 A952C0B15E10BA66 6F75318D8F767D45
+865D9778DEC1846B 3CD6A7AD3458364B C680E3EAFB1919BF BED8A5660BF2BF70
+18F8226066748456 D0528586B62BF870 D78F4CE2A502E493 92D41A4A0FB3A93E
+72C3F7D8A88A63C9 DEBA4630D3C8C907 B2DB70804C6AB523 D99239ADD3472BBE
+72C98A96B1BB3242 B75EA9E4ACA3F178 B27E3939DEA24EC5 028BC250EE17EC88
+2B22A7BCA45A27A2 1C14D183170E1EA2 99BECF1E5E2D2027 130C5C18813B95B6
+DCC22A3C37EA3CA2 2F2C198F33883EF5 4D4A44A34C5F946D DFB54061BD854A7F
+4AE56FBB638E9166 2A14E6ABE60EF33E 08BD5E20F1827026 53B677EA5E436638
+B77118B99EF157C2 2DB8D1715C83F0F1 071A939C0396D883 52FB90F88FB2C4CE
+C97E26219F8BC23D 5CAE229CC6737996 1B4AFF2F5867871D CA491A1841C00C01
+1F2D45358D12E34A F38D36ECFC2BDD73 E64C3F2367F8558F 178AE60A39572CC1
+890784D45CED174F 81E7CB7CDC6B869C D7ADAB95F30B4165 D910A573DA37310A
+FCC683AA4E4C29B1 02D8D14B7A218D84 0ECDEB48B947F58E FE02992FBFF83CA5
+0BD1F001390524FE 1062317AE2D1C1AE ECFF66FB5C06AC12 CCC9E0696CEAA9BB
+A61F6946F36D229D C18AE91DC30BB1F8 162CCCD3F30CA0DF 93ED20B9B2EEC827
+2496C22CCDCB7150 2350C47831D0F143 AA9F4DABB678DC0D 746CDBC3CB5C3DB8
+09E9DBEB91CEBD42 005BA51C3E9EF932 F6CA0C0A4964385A FEB1E61206E27091
+5224E7D0A1C02A3C 82BE28C09CF9A3E3 27AE5C7922B2290A 15DC51C3DC7EC2F4
+B8207D5112605167 A4F8B8498332098D 1E962384AF500F46 1658BC575C587945
+AEF82E017D264739 BA8DFFEB8DD6C511 6DA8314F97B9655F BDC49CA0A9082EE7
+B1347B44A377AFCD B4B1E7E9E77351F4 B3F54A22FC1E181A 493837655F6561C1
+16A37BE1BB3E0DE4 980DE5741CE7A236 90E44264A7FDF277 344D5F99D0A2BB29
+63A1D5A8481F1712 45BAEDF74BA92B60 90A48C7473921E7B 845D59A93C984E4A
+4BF626D027CF3FF9 B5E902BD2B184520 9569714988C4CBEE 14BC26BB8B05314D
+B83BA9C3A1923CF0 A36A823C0AEF7C3C 066CF72D827A5EEF BA5B7BE614C72615
+C8284E7184D6BA37 546675D482D0A8D1 7A14B8B98FD9B9E2 398CCAA0A865941C
+678B4D579F023621 B750A44B54178D09 7BA87F464992E0DB 5B04F95D39D2AFEC
+A5F3B8F7BF6518B8 0517EFFFE8CE771C 993EBF3284C49774 57341F7A9DACBF3F
+5C58965AD51DADAC 129E77F7B5DDCAFB 926C84DE37EBF585 F3D643BE862C7EAA
+D5FAD7A9BE656737 47D7C40BE9D875C7 E152CFA17BDBF582 CEB35CA2DAA235CF
+130C5CCE0EB8EB3C 8CF33ACDCBEBEF27 263027747FD078C6 07A98844A84C1C05
+4739AA2FDF533FA1 26E10257575F872E E1BBFD52B1EB70D1 7755F3B44C0061E9
+31D51959395F9253 ACFE63DFA8AA8C09 981BD8A78114BC5B 481AF457CDD37B4A
+8AFCA2CE5F46471B 0BED8227E2A59E71 F64C60DECB26D7DD 012EA8F84A15901E
+D6B6CE5C7967F90D 12EDD923535DDDFD 406D90B7127688C9 C735F22A0D67FFA5
+D0D94C3065C45AA3 94E14BA83B673DA6 1B20DCF8DD302CD7 E2E8DC34AE7B6A20
+B9B17EA8E3FF5B2C A544EF4D8D49C86C B0C081429CA099F3 C9F52112EC5E49FA
+F62C1E2B2DEA90BC 0668D5C57497C66C C41E5D2690ACDC2F 3197C7F250DD1933
+41CEAC388599C2C8 C739EBD3F70B619D EE5A9F5928078208 E489191FCDBD0AA9
+7A2918CD07FF8956 46B8F3D83F93EB16 7CD4A66F1C63BE0E 13D6B5F9CEF5D7F3
+8A4B200B50B46907 32A03B0D8BF2DC6D 8B403BAAE95FE036 2BFCF4A3BC1723D4
+3EF4E574A270712B 99E7FB7404443BF6 BD78286236920B28 DBC8FF3B5D6CBFEF
+06161FF98D327105 B36C58D2D416A8E3 05E1BBF1C9478A22 82BE06D62195995E
+3BC86A16234DD9D8 C5A1C879DE681DC4 0290DF526AD544A1 A1D00145309D421A
+5774739FB8EBA18C E4266C018D57E331 4000B19179D2D9A4 888BEFF0C8345775
+B7839AB0A8F6A92C 33B658E7A03C04E4 59518ABA55C02421 E5880AB889EC4D12
+6082840CD7E1855D 38978699032436FE 4535B8E855A12FEB 02551F5F8FD5E2F5
+BCD65BC5052BA5A1 4AB18FFCFBB3BD16 4F11C10982508D17 AB259C3EC4573B9F
+93EA27DE3F772F9B CC8BB0C5F64DD8D0 77DD6FDEE0FDAB0C D16E9BAE5AF9ABBC
+189FD53AF55C2681 9542A5CE22ECF3BD 769E6DA4EA6E0E16 0B0CA0AEB942967D
+E0F92C1598C9B9ED 9FAF7210FF715C50 85C2DD21AF912E77 0719BB8B31286A8A
+03105FC1FB5AF17F 5CFF200849B445CB D36423F6C0B6B036 6DDCC47B81D94B04
+7A710A4406491616 2BABE8573D3B7135 29E736BE3B9E6D4A 6C987F4440F58E57
+2EA90BDA23F67E90 9ACC5D4BDD3FBBC6 41ABE08BFB47553C 9E5E2E501B5B5DAA
+A0E5524636E65D52 7419087D49760EC0 6E61D450E8C562A5 7BE8B0789D62B678
+221886D5A116F538 9343DA584B4579EB D488AC17741B4BA4 D8D731C91D01EA65
+D9C254437FA4694D EE95EBF5D7963155 BB775507026371A4 F6BBA27399312CF6
+EEA17325ACFE392B C58EB6F04B220B0C AF58A5F2E923FBC3 3F3DE03DD3B9C1EB
+1D78E9E4D397686D 6B77680BC2BF70FB 69D8E62A880A00D6 880B0C955B805F86
+491F4BC7C4D33923 97A07150857A6D85 9B9316097155BE5F 2044CB1B8EAE97BD
+C81FE4285BE84160 F436C8768EBABF51 C4835515CE269D84 8E2BCAA6963C66B0
+26229AA5CF5854D1 FD8CB7B5E5DDE718 9B88169DC082F07E 25CAAC7AF290E066
+9FA4A95FE999552A C9B92311B902DD8C C3192B6B7148726A 1324FADC49C342F5
+594DF3E743B98877 A0154B34F125A28F AFDB4516E6931359 963978BA3F5D9D32
+55B7DDBDDE6898F8 175EA92FC450AE03 E527FB12FDB4E178 9D37DDA9135E70B3
+B1E8EAFE44FDC6E6 704DCF1C43C048E9 02B33883E0477066 F5D5B1D9F77DE80C
+94F05E60DEA0D153 DD69E38F5AF366D2 31390446A1400BCF FEDC42B54142ED54
+B9DC011097FAC01A C0D4A2C76CF4B8D7 FD66129E78C188E6 2D3B15840B4F095A
+6A7C06D6F033FA9D 2654DCAA4873AC74 B6C1E3EE2111D9D3 9095EC5C12A64CD6
+5EAAB9D7B74A018C 012FEBE85F5F1B0F 734D2B43447E05ED 3E1577FE35D8AFE8
+9C70A534E6F2D1A6 AC2C41ADE67ED473 8D77BE13C0C1AFE9 E1C783122AA649E7
+F1C5A5EC11EF3BBB 9F01948C7E9607D0 A278438FBEF52450 44072E11FC6244C6
+9E84B5FCCDDF5826 F6412B07AA489BA4 E24D3EBA4A3EDF24 6A11EC45773F8653
+4BC8E282EFF063F4 DEF7D77F7002BB2A 24DD1ED5F86465A8 F6FA169D06E38C92
+8D2978842F44FE20 37E225567881B781 31D40096C3BB05C4 DA6DFC18134D44BF
+B5BFF925FFB08201 64BDB946C55E9E42 293ABABDC77BBDB4 F86E324303C5774A
+22EBE6EFB998D8BA 148F2899B589B745 DE3DD33FAE37802C 92A9D4D7F4FEFA0D
+79521E9593F90A61 95432E43DD434B54 109E178D5FEC9E84 58FEFB1123825213
+34AAFE212DDFA96B 5D1020E658DC6887 B64B8201F3CFBB92 126C563EBBBBE5BF
+90AD56A9535F980D 40C9D065B4CE28E5 3E543D2303BB2A87 D2BFF24404E6852D
+BB4B2755653D6EDB 1D5FB315ECCD3572 0A6D61111109DACF 47A3C9D68837E14A
+4F245374D8F72B04 2668415F110D3C07 8B8E24B4C8052364 535595C7905CD563
+1DB5CE784316433B 010BBC0F7D54D53D 1B4542ED6B8A2C66 36A31D2C0BC680C2
+87B902BB1B35FF14 6DE9AAD6429BA246 22CC535C45E58EBE 34DEEC255EB219A6
+19E21A62C7922891 89FE6BA80B89797E B3486C679E1B5108 4AF998849DF9E692
+EA6CDDB3D64CDB06 37A5DF5D4DBF7AB3 787621D0E78F19C6 0BED44B9058BC06F
+22DAED5B789252C4 A6CF630074576228 81D20BA3914B162E 7C89D55F431B3E95
+546F34A8964AD07B 96306697D6C877DA E29A854761201737 D903AB6533FA0F2A
+9C03146228FE97A3 2DCFE1C607A0EBAC 5A059E7547AAEB84 D17191BAAEED7CEE
+F406F3A95527DCE7 65DEA77E6081A94B 377E74AA5FBDDE4B 9F91606CF7AB8D6D
+B67D5FA14E451848 125634AC0B8582EA 42FC03CF31E224AA B9D7D1472E000275
+C0079A11D3E2AE6B 39E392CF857AADD0 4E4DDDEA5DEF646E A96ACAEC83B320D0
+B273485EE7A20C03 051B26EBF1632F5A 98C19FFAADBCDE21 72477166FFEAE317
+FEEC5EB853770F7C 251CA7B4BD953BFD 74765E7A8693982E DB6653C32B85D553
+918008AB16EF59BC C74C3D7A23FA650D 7713B24D31A61179 73EF6E0E6EC55E92
+CE981EB668F7FE3F D577CA3B46CCAD6D 94BD272A7F3A6491 7AB30738C263348C
+5FE24E8C766138D7 D426AD2B390C1171 314F7FBA26F1503E 43342DDE11D1F83C
+AE10EEB9A2C609F9 D5B3130F7E8D1DA6 9BA531B6CDF53F53 C4FD28BC5698249F
+C5483C6A15429628 FB1F5BB3324EB9F2 E1D22F6F5B20FDE4 C8CA7E3D2931D514
+7C17A5DAA0126ECC 1CC0EB7D6368DA7E 5840919DAEAB048E 160B9C19A7BAB56D
+26CD168974729A98 F259BAF2977528FB 9A925264418A3542 D3D9B188F375A8BB
+F000620B7C572814 8735439F2681C995 D9E8E9A0D3116704 B3EFA661C176754D
+828C4BB2D33FB640 BD24BCA64FFB7193 D2E214F7C1F152CF F4B06BAB728EBD4D
+DEE5CED2234F66DA 7E3F9588C70988D8 FEA88FA06219BC49 299C561AEFD46C9C
+81293650EF77637E 09210171C00B72FF CA1D56C4CFA71F76 A022F42BD43B88B8
+008FF636C5650849 2F8C5A7EBAB3F186 39614A1ADD31F225 B70A7FA48AAE1358
+A4905F1DB3B6B08E 57C09CAE22FEB155 01BD62074AE50FB3 6231CF1911C95D37
+8B0A127A8D7649D9 0D0B9DBFC6A3859F 2FF2F71B3EE5E6AC F32E55B3C3B139AB
+84D3FD00A213260D B4B1E673F3CB5DCB 4C151D60BDDDFAE4 BBA312532C5058C3
+6AF46A9833DAC552 636166921EFCD0F7 8F2040EFF91CDE9C 0FBDB1EC604D1FD9
+1A411B92FDD9E1DD 84491A55A293E72C DC817F19CCBCE453 C1F19BB56F81475F
+7C9931B1EC04AF17 64E87AAC38069462 51F3CF8DF68E901E BE2ABE271CB57199
+D2CBF332F489375C 949F9DE6660F685C 023759132A50A6D0 B52D230B71C9091C
+F7A827BDE1F37BC0 7C7DBAA6327CDB00 53653C7031CBAF92 F0822A65345A9ED3
+CE4F3A5F49C9E582 24B20913D0FBF3E6 E136FBBE77FFF24C 30C2844AC35C15B8
+CA12CCBE887C3FB7 A29331047D1C6F68 19E33108D7F46D66 8DC318DC2375A45F
+86C6E0BB4D622E9B 822ECEBB591B5137 A10299311150F08C 8964E797F2E9F0A9
+024A4183F011A390 88FDCF95EC97CBD7 EF467BAAB483F194 6D272E93836F9381
+10362279EDDB18FE 8BF30575E73F25C0 528E625DA5A990EC 01EC500377F93309
+7D9885FA3C698CBD F138566280A35A6E FF27E902AA70D36F 9F342A2EF366B4C0
+4CE2F19D42B10205 7AD5A0EEE936616A F3F62BFA6BAF44F1 B73F8824816573FD
+80AAE346F6F41638 DD557AB3CC7540CE 3389A146AE380E09 60EBFEE6D9842C46
+184789B11DE9E95E 30015C2B2D0D2D54 6A697D523D1AAD74 D8441E7FCFFC0FD5
+2ED017B6E25863CC E034A58532E0D2FF B9993372295A4438 A0FB43265F1FC0A8
+FA4B3C09C663DFFC A8C165F9D7E30BF4 EEB545143A0385BB 8A7DEC425EAFE8EB
+129A280390F94BBF E6BBAEF59DAABD82 75F5BDE753A28965 AC7908DCFF547BCA
+3CEF96AF385D0248 4ADE6903E359B1CF 531CCA5B4FA6AF13 D101E0DEBFB6130F
+D85E59A1392A62DB 04171A6A087A99F7 E2B8322944F5F0A4 54EE487B4C8520D9
+F29D909411808C70 2978EC89E16E772B 53812276DBF7AC84 2837F109B09F3E74
+D1534670EACDBE9D F75CE9DF81034402 A987E25A23EABCF3 CCFA5BED380CA2B9
+53B31D003C6F6BF4 509D926F8A07B110 5D748D7371D73EC3 CFEBA8032F94B4D0
+922D70ADF2938FD2 2F838D5A0899406F 012EA566AC4B6B34 1B00BB32DDF29719
+7A790F376163AE3E BB74A0DDC88D5272 1F8F4EA76C5BB405 48056E1688884B47
+4E427D99E158F5B7 441721DF6C734382 EBBAC41326D2393F 5B2D6B51C71FD1B3
+0AF0DC0B06CE4767 5DFC30B0A2C6C213 2607EBF858D12ED7 B38D59C98A6A9963
+A6FB77CCA77DE867 3EB251DBA18C1951 F7E419EF63267015 3E095C60150CE19F
+479287150187CCC4 8D823F108CA3EE1A DA2BA5151F2429C3 3B2E5199DA409AFD
+011A7C9D9F00B923 EB4EACA9DA67840A AC71C0370ED37C2C 6DB6789578647687
+292AE72511AA4163 57F2B408669C86C3 E25D4417F4F520AB A7C97569AAEC3E19
+B8E73A227D2B5041 4B6DDF34BA2E3A2D 3C209AEA8AEA8E5B 11FBC72A940E10C4
+96298B149A3DBF36 70028DAECBC30D5F EDFF914187E1EB26 B6A9DA4D0B8507EC
+F62F6D7EFFB325D6 FBB6EEE1027672BF 0F07CC758CCA75DA C6514CE0F2BC1118
+2BA82E5FD5FE20EE 48A7B02AC401856A 338C3362FA02F175 FB364B563102119F
+A5BD2F90108F9C4A 94308A7A84957289 8F7A5AFCC91C5D94 643E811ECB3A3901
+3CD51C1B7027138B AE0A4ABCC1F9CC43 33019E41D3C5CC2C 1A76110EBA10CBAF
+50905EE671E7D2AE 9625302ADF884CD1 9EAED972CBDEB91C 9229FBA502B159BF
+D24161C7F369C959 24CB13FA6CF0E619 5FD2B1EC4EBB11CA 63646831F19C15B3
+6DC4FBB66CE8FFAE C3F4599B2CB41FD4 41761049D4B6DB62 3FF154AFE5FAFDAF
+92A7C5A2A7C0B918 B85E47240036E864 9F3B7CC375195B06 D48B1FE4DDBAB09D
+9739A988849ED976 BA358B0FBD5FAEE4 62C6E142F1FFE735 B27A3F61C7F48F96
+43DD73E94AE5F5B5 BF8A7C491B25A697 E4C6174731CFC224 2591DC712D4B2FFE
+6690AB9A516869AB 075FD7F5FB3ECBAA 3EBBC047ACA7B28C 8FE1FCE3C08313C4
+451B4ADE50195EE2 D2A32F7F21434C19 9781DAA37EC3C7BD 26E9B477BE59B23D
+008FA9CDC0AB4BCC 448BE2C148EFE961 BD699F59E2CFD512 210D67D817364013
+293E5B50A4FB4B13 C466CA50F3308694 669452322406C85A 63F3CED288585724
+9199BBD121878B32 1CB91358D2E996B6 ACF47CE73D7DB469 BFFA25C96C40B891
+D56C202A3F32B44B F99E162BCB5F357E E6C4CA7998757631 FAB4627C7D1E3949
+6BB92CF7AF520CC5 405A3F6793D44BEB 988BB172E2DFF596 3643EDFA3066F892
+71E38BBCA45E714D 7374B242427E416E 507AA2CA12DF24BB F1E0ABF053EE3907
+0563184B6C8CC189 059D3F7C08008EF5 8BCC7852139BD299 CFC5161D1D082432
+FB4371D71FC42D0B A3A99763898E93C3 BE5A665A3AB1A214 D55A03B7495DCB7A
+72D0CA29743C2402 CE64692BC26DE77B 8788CF7C5381B1BA A0FEB6BA9F7DDA14
+F093722CC528A333 F24391CD529AB186 E9297EF46CC72371 09AC277ED19D2089
+0CF26B92620FDB03 F2910D79BD20C2F7 A75FDF56EA8AF9BE 3B072314750F3857
+1F2CD2293C1FA552 677688EC8764F7E6 55C709EC66F987E6 BC85EF60E18FB192
+97291C2CE94265DD 676F9E782ED716E0 F5CCF3610728C8C0 BFF027E2354ACC8C
+9E5B0F9337F51C32 043C231A3678D068 555ED4EE7A61BD8D B7A30252B5FBCCDF
+B2502FBDF3914686 5394D9E03C425FF0 8E31482F3BDD5391 E53F0C92F39B79C8
+2CA65E44F424C3B9 5C290FD99E60B512 821ED0216CB71421 4928D02868CD6062
+38093BD6404F1817 5B6BCA214AA6F22B 6E5690243B9F6A6C 2953C1BFA155EB8A
+7722B6D368B5ABC3 2566904D102E3191 B9598243497EA415 D396F4A80CDD9C07
+9C7DDF086A5E51A9 BEB86EF8E0993C21 159FD7D930F3E8C1 ABCAC43CFF7A9F33
+018CB44180D3337F CDDE8E193DE2E57E 9E8BF39B216CD7F6 9E792BF36EFF7B29
+9A5724206037CA82 06F72BBF80504EC0 197548AB63D1CFA8 905AC1625D3420B8
+E476A84C886B509F F45160E2853C5F22 1FD71363C5D51D3E 6D1635FCA43B44F8
+52135725DA8301B4 EADC9D0C2A8DB9AE 48D2D035BE918A14 B63A10157A04F062
+BC970AE18BA87B7D F169B931D4786593 228AFE33C3B30443 05EB6AB8368B18AF
+6B566862BB056A0A DAC46DAC4C274C40 132F25E7C6B1FF86 C193C943188422D9
+62D2733455D59CA3 0F62C78C434E0C08 7BBDF15E1FB3F480 C9F9262B89DBCF81
+47A69C00C20BB2C8 30A5516795744B2D 1BAE141D0FE2774C D4D949C65158A801
+9C3EA060A6A3A384 CE40FEB5ACDB3A04 7F6CDF99DF3A289A B226AA9641014888
+39598B7A01F81741 F28DA81565616F0C D557D696DAC69B81 91B12D3DD8BF4339
+06ACF5B5FC6F73B4 19B6C0EA275F5581 F19514BEFC1BEE23 897699F9327CEF3A
+ACFAC0B10DC95E6B F1E7A6DE999CAE34 6AD98F94DBD0335C AE12BFB689266EB7
+E1D51AEA724DF1B0 BDCA68812E97295E 67030ACFCE44C809 7F6E917BEE8A3954
+544A547A03D89671 02324B85EC98570A 3E6CC743FD2E3CCD 0A220197B17A9CC0
+79844DCB608D56EA CEE18F3C737FEB8F FA0DD99175A60109 C9E3B9A46276A59B
+37E283116960404A 033781535AAE7330 08715EDC5D8ED191 4401F59BC3B7B25B
+41255BC377B131DD BEA25F4C52ADAD0D 3BF7531475BD14FA 7A1461F5AFF64539
+1E15481CBAE311F0 A7B8C12790097E20 61B2B7DCD293DFC1 BC8D25AE2C958824
+ACBE3D704A1117AF F9A2EF26871B5A6F 07A3A01D587AD4B3 E188DD54052EF9D1
+88E529E805BFE1AF 731FD6BE79E8B8FF 0EB20B34818DCFA1 D7DCD5AB0CB85834
+9A05EED81EA1DFF4 603C4B1191E4D0C7 26C42A28A0BC87C1 8260EBE58E9D2A76
+337B20B1F5CAA04D 532410698E1C2992 BB636C78BB8F6868 920A251BC125C45E
+12B636FDB273CA4D 4A967700B6519CB7 70679F9B4BFCB313 E45E6B953F190B13
+757728440E9B4F44 197A0EE52D6DE9DD 22D0B6499381624D D90455E5A1BF666E
+AB1D1DD535308C04 4A55EC5CF5559CBD F7C0B5A9216641FC A6A88A41CC5A27B2
+FF6910BF96B7D9CE 557FA3D6E0340999 A03248A5B89970B8 ED64799C944B9CB5
+50FB5FA281588F55 B04135830A977477 416FD0B8ECBEB3F1 FE97CBDAA968AF5A
+6890091D0D2E8634 06DE200454BC2E65 686973D4E8235C8D 5627F9DD52F77A72
+E348D925CFA87B99 147ED63DA9F3ECE3 2685924A8AFF6727 403C91EA7642E12D
+25EBC1989DF905C5 C1A4913782A6C371 B3C44399F0C3D945 9EB0101344C3AFE0
+C273CEE2A72D1661 615CC05DE82B08E8 DCDB0EC158D4A490 D7A874D3E9032707
+39557DFDB50DC5BA 4FAF25460EC5948A 300FDCD7D5E12F55 619DFBB2F4E7F262
+8D518F1501977120 7DFEC95A69FA6693 4D619A09E1E2FA69 3E924250C7F084C0
+8F6F1559E8AF9B1E 4626BF5167216DF3 9508F61B906E8091 9D9ECFE142B2EBF1
+2222E833E23ACB6A 9EC10EBA304A800F 5D2E3407A021F366 44EA0F6D99CB59CA
+6B03037E0BAF80EA 1CEB4621FD1C62AA 4972CC0C9CA9C34E F1435062303D6F9B
+73BA6DECB5FB01AB E01FC6930868BD1B 78DF7C97E713C418 B67A72260EF1E374
+01E3546C5D8F3177 40BAEC4FCFA80753 4EEA8B40FC24CA26 E568B47309F3D1EB
+C4BB8928B3487B56 E08FBBD0415F2CD3 38D1A8ED1805112C 544DB3DBB5CDAA92
+ACBC0A48683EFBB6 EABBE391FD569EA6 9D96C6458C4B4B7F 78770945A3B4E0D5
+54A057BB7BACE329 B7D6D32C0F59FEE9 855F33C42317C522 29325310BAEB68BE
+E880C04DA44F23DF 531FF3F1353DF6BB 83F33C63C342CC2C 1AD7361300F1BBFD
+1762A5D670F71E00 42DA535A71F28E28 A565A93C4CF9EB9A 770C3775414F2998
+B3F70A2A55BB28E0 A00B9AF48280F314 3BAB7EAC368F135F B2E3922C2ED550C6
+8CB4B21CB00F2410 887F24028DDD0B3F 2EDADE07C696C09E D51AFDD5363E6F41
+CC38BD26B9F7265C EA6A868A7D403688 12647D69BBEC5366 BAFF9C41061C3835
+9E06C102758DAFFA DABD750AD1EA7660 F8757A0AC943B51B 82968C0058139F55
+4149B88AF763EA84 BABCC07375DDAA08 69BC0CE4A0B7E6D7 47830B6573CC76BC
+47C55756223066CC 79286BFB1FB968DF 3DD64DAAC615C90E 06F7589FFEE6B7F6
+5916ACF932C8CFA3 8F593913BBD25073 E4481E85D3A725C1 0F8D14F8894D5F09
+3103C59CD5444DBD E3456A34172961E1 86D8869E2B14B0C5 D02281B5E19E8B79
+1E5FA94B4A46898A 3256322680A233D4 9F535FE8BD7C22E3 D54D07BC0C60A4F4
+E00AC7D3098F1FC6 C28C3F38381CA08A 123BA69C56C88BEA 8741B2328339582C
+5B7BFC5DD0F5BE91 A2BD4A617F9A2902 C9EA189C81B7F30F ACB853F4F0F4B8B5
+FD5FA8678429894B B7FFE4B9AB72F5D4 2AB54A55A851B50D EB2E59E0E22BF576
+8D5304A9D14AD71F 1DD586AB77F7B369 C951270EF7FE4E2E FD63D90E8B4FBE75
+072CD59EEE1D3DEB 38421C7B5AA51EF8 340B0890F6DFA36E ABCA4DAB67F899B8
+CF1048BFCA1898EB EAEAB0889BBCDDCD 755C7603DF92B9B2 362175D05C1A754F
+9B898F221EF77B4A 050A82406C37094F 08B72112BBBA4147 96B9EBFF8EBAC132
+218D0E5E9D0893F0 55BDC2BEFB78538C CD4B54243DBA8990 DB958138F4771832
+F48D72FDABED5956 7D43D5BFC83A70BF 3D7F81C4A9ADAF94 70E293B03CCFA921
+990D8CC9E5C06C94 1C0D2E59B5CD83EF E94ADE51574687AC A5361D2EAAA0D5C0
+4C8CE37BCF254EB1 B26B367874F62ED0 DA5C44255BFA6E86 5B7E22F15DD310C2
+FCF3B64164C7A3CD 657C7732A349106D 6D95EA56041EA3B6 92CD3CCFCB5C7A8D
+7F7104A1E7004881 BC934CDB1CA6198B 9ECC0793A2D0E914 5B06F13E86665CB6
+65E3D1B20113CBCF 64D3885C9C950D87 8135815B5A532DEF 703EFB89B86463BC
+61CA3D0194C4B702 E090DE447020A68D 04455C009161B362 CFC242DEB6D10FAC
+CE51EC124995BE65 92FAA229F5D3CD16 9E26557C43B42F0D 9EB6336954634CDA
+E106869A71202477 B5FF6EEB1D40D26A 21E221CF14D436BA 6F1B0373B390ED02
+13CAD867C47370FC AFA95630265DBDF1 2815CCD0782D8CB3 933C8B3CCEDC6E88
+B89E1BAA5606F9D1 D844DE90004335D6 EC69679CE33EF3D4 5D6EB9392C19BE20
+4EE4F83015B5EC54 26B9B7805641DCE2 3E67CC9F5CF93183 E27BA722AF340111
+A8656FCE18F6BAEF 2C145DF1B58EC111 884ED0C66AF94931 9E6192B085B97635
+0B686812468E929E 8CD8E9346B99913C 803C19D100538427 2AE73E7B53C74B60
+BBFE6A88603E4CFF 9B4A17576D3D3CFF 74CEC296F48658B4 46C0CCB0FB90A333
+79C9E36A17D9997F 4B96FB6C8BAB01DF 2D4D2A5B837FA750 3B3694F4A06267F5
+E94A0A4885A98666 BDCC75E03F8AA192 6203DF1190C4E3A5 8536902FCC8978E7
+FF6B16D59F67F87E 5C9004C88C52D24F 0D2E5906D9522ED7 3652D289A44A0A4F
+195D48955E815E04 4A83892CF2FD3E97 F0C82E86931EBF92 A1C6B71F115B271C
+4F08CC9393626122 74A71350FC013AF6 F5987CFDBEDC9A04 E02FD0ABC9A2E6FD
+4C98C008309DAA60 E26A9326D52DAA4C D3A496820D9ADE83 0A4FEF991D1DEA1C
+CBEA5E35931761E6 B47C47F07E051A14 A0FD6EA92750466A 1CACC8B28208528D
+7EBCCE6B12289199 EB731D6F195D1021 860F664FFF5BE8A6 F06C78D825CD0607
+7A6A0BC6B25516FC CA46013455C3C02B ADFA962B4EB7DFBD C06FE83C22BC0844
+8A494441ED1EA70C 9D7D02A5DFCABAFB 7C18265E36CA2B77 9A628075199C37B7
+43B84B9C8612A29C 3BA825E2CA20240F 6355F932BEE548D3 80F39BC8403318BC
+5497F59DA3C4A01E F960BD1F9F8B6844 5E15449007C0C2DA B59BA33C56FD947F
+7103EFD345FD6591 7711AD5C4CB4F85A 51689C7A19D85B89 ECB65BEA43127925
+18CAD9BCC88BAAC9 228C8A5C869E1C29 2FA423D8A8CEBA95 76B8D86F1811F259
+9798A61C97F3DC92 635A3228F1E27177 722E78C69B66F36F D0B92FC76D3EAE65
+3A71F3D07B146A6B D8DBAE275BC0C158 0DCF99DDB8F5C01F 1C8C1835F8FBBD21
+CE4DD700E1995DCA EA36E40C2066ED28 B70147B84E7F522B 87FC6D4DD5DC5580
+3537739DC8ACAE49 B6BC345219D22054 9A72481E7A53A953 AA18D09A7044347B
+8AA8DBACB8E00B4A C140D300FECB4E03 C687D0712FE6D18B B901E9B8454DCC35
+8FA7A5A03B8DF924 C7B7479EFD344FB9 1BA5AEB2F434BFAF 20B3457D99CF2CE0
+56966B23467EFE59 57C866F59B4231F9 435F960F6606EA33 BB2D91ADBA8EDC48
+95526F0393DBA081 15234E70099E4D4F 6D391665797273F6 A0A596232D456460
+D56569B370DB8BFD 064072F2E6EFC13D 489E5A2686283608 1EF820E920346BF3
+D6AA03949C00851B CC142862F47979F9 0ADD5027CF4E8811 C35C9807A9EB276B
+5E27A7A412D4D151 0281BCDE599815AF BF30DD68A26420F7 C84A0855450BDE2F
+52B854BC9307EFC7 AF066B03B6C35417 9279E871F9AB8665 6409EB0A21AF6DF8
+2549E68E726F3BA6 24945CA3F566758A 8628951423FC1A18 0E919065C3B03D66
+1460A1FD0D39705A AE0273F820CFC91A 419E11F294A7B0DD AD0D33A189E63937
+6E3548F470B01557 35D4E6D3B1B7C0F5 9CCB87B90AE6D4F0 F6CE1FCDF90F6D90
+E387915863BA5E0A BBB90BAF109ECD79 E3FB594BA02DCA76 E18B54541E1C7541
+B80AD39991664A99 9F23C844414F3BFD 7027F59AB82E2FB1 A591BD1AA6452287
+96585CF93BA82209 1938B08F62820416 DD277B385C50A218 DF1836E88E7A5AA1
+D9837EBB532F1444 1B94531D143CB116 0C76F60AF02FA9FC 716D7D9300ADDA11
+27D26B49EF9E454F 18BF427A07C1283A 8EC769FE8DB744BC 8346ED3C3883BE25
+4DC45499B4BA3CDB 2121A8BA3844BC70 098DFFADC8931C7F 958510B304F19698
+6A88BD6E656D5081 3085564D2AA47532 BAC747C18FBE43F3 969EF67B23682290
+6E0EE14D40031F33 1CC03587873C6712 B8F8E9A25F62AE8B 0E726335474AC011
+2422015F496E8A80 0AB5FE385637A914 56077C3CDFD015FE B255054D62B61570
+6F4D3F11AAB55C67 F74CB245850DB54D 9050789FF3A4DE8D FEBA52CB610D0E01
+03F63785A5A75316 1B80D042BCC0C185 6BD05777E8180E53 BF6D0CD26681ACEC
+83227433875063F1 1F2A9ED63A788979 EBF3252F1D32D5D6 FF348845AD646665
+0D5FE3600FC8F1FE D8D6641DEC3A5456 E809A84D597EECD1 3B05E7A46994C7E4
+030DACE88166ED59 5E290AFCA4ED37DE 0CFFAE24B9BE6AEB F846A25B23A9F7C3
+F6DC8A4413B6B586 F459ECB8FF711FF8 B182EBF797824FBF D58172F39D2CF20E
+D3296598CE6DF6B8 74214D6251841274 80A4ADE2376A05FA 6A1DCFB29F948A66
+65E42EF376284D9B F2F7B91CE8A70B49 E5FCFA1D4287285C 30ABE4907942DFBC
+B0FA80BEE784F0DC A0B55C0BC4BD0FC7 EB877D64223BA393 C6082B36B6C16A62
+6F3B89C4349B6678 089D2F9EBBEAB09B D4C46BFFB4F6CDF9 D769298B57699384
+A633714E1757739A B810A0744F7F93CD 4BB6D171DEC2FAFE FFD658887C185413
+C7EE8B0921BECE83 6572049FAAEF868F 285297D4CD08805B A95BCAB87149C62D
+69C7FFF3BA1BAAF2 0F4A9BF895ED46BB AF1DD4B097C597DA A224850C9AF75B95
+60509DE312E84F8A 84AF376E7149B1CE ED0A2803084BD7E4 076F7630328AB282
+9ED808296AE954DF 1898E69F2735C08E D158BF4F5B0C5789 F517B40637286FBA
+62A25D6217A9C7B9 5EDF8B74ADF0403D 21569EA894DC2B01 E9E9A4E6AC8D4B68
+A3D65F70A75C1F5A ADB75D04EDDA51DA 045F9047BE4F3EA2 9F86B3B81DE9E859
+A650F85ED5BE62DF B973B4431790C322 8C9D8F600A41B725 0BF2E3984C6B706E
+316928E99BECB319 2AA182C4A7C3ABB8 FEEDFE3A6101C960 4B742482BF0ADCC8
+FC136D8802401A2E B981E6FB5BF1FD8F A169FDDD63CC21C3 B571636C69BD142C
+5EE3E4B5BCAA88B6 C2B73A3474A91715 227925E9A7BC649B D94CDC757968DC9C
+607BB91486946617 E3EDE0E463883CD9 65819D1DB5F38D44 4CD8A5F7B5F5F3AF
+C81A3806CEB6629F BCA9549F74E22193 A3E856EE4D1C9090 145699A8DE259987
+6DE996F7A42AA56D E11CE830CE888E33 A115F6C7CD4FA2CE 5AA31AD09749A2EF
+8B0A8F1F5BDF3E82 938CEB236A19DE2C A3647D7995B003FA 20BB6D9634075973
+BA8B6DDD4A5FFB13 C792E6EB8843611A C544B8E011296EB9 E5FB1004B6899325
+4FDFA6F92F81A7EC 7710938F445686F7 088FB41B3AEAFA86 5086EEA403451810
+3F512EB3790B229A E33ED9B3C1AD706C 8DAAC2107EDC487D EF9F08036CF9E6A0
+4555AADC7F8A493E 01E923E58C601762 88D0198622447E20 A8E14E6332937FD0
+3ADDC940842AF577 A62371EAF62D5BDF CF7EC37296D96651 61F9567A74D46D05
+CB50580E052E37EC C1C474BD716E9D7D 64F43B5DC6C5C2B6 4D30A8A8142F86B5
+0A0B228BD55A880C B86A60B5D3A45B1D DF50D51ACE968DDF C926B0DE7F33C672
+4534008D06F980F5 C68B08A63A768116 4D2A6334BDB0CE4B 2433AD747831A3B3
+5C7961A813E61DEB C3588B404A17E4DD F8E3F3E67D1B01EC 7FDDFE5B319E8A8C
+A05BACD0B6A843A9 12F1CA95F9B47176 46C50865BDDB668C 743B412F3688C52E
+8E3CBB92E683E768 B9042DFDE2E4B45A 39313B6F078424CF 030A785FD6C6B170
+F17D0BED1DB95D99 B89BB914EF137ECF 025059B2963DC0C5 CF3CB55BBE32EC33
+12950FD660C1F0FC 621F7D93B712032A 67C293F45D1C28E7 DB43D74A0FF64F62
+B127A0DFCB4CCCBF 75F8B298E5AE5DEC A101AB7487E52A04 EFACF8F2263A8BBF
+AD20F50739A5A1C3 A0CFE7C053E1A4B2 DE26235198C968E7 4A151BEA66DAE65A
+4339943067700F23 B28C4A5E01FCA39B 936632832315C5C2 A4368E31B8DC72BF
+86B00D57826271B1 E59EA823DC611516 AA8C6E722C9508CA 00D84B09E55CA55E
+92692964AF5E91D1 400C6295E69ACE18 70C4A0C6CF7C52E5 886AB7089A5C765B
+7B7AABB26E71E1DE E32933C1830B4464 E4803519152FCEC9 93CB7A7C122A1E0A
+8DE7CF3470DCFEF0 4F7A34327184B2E7 1A184AB099CB2F67 109C346191AAA007
+4DBF918C58AEAD10 28229A236F793E41 7DAC163631785B5D 0CFEEB96BB7B1B37
+11DC25CB050F8D8B 2CA1E54C9EE051BD B24864468370884C E3F9613543F609F6
+ECE611C98B1C4129 D5F74E887717A830 291B027B7425FF92 D66D6CAD309B94F6
+10B1DAE6F6F737AB 303641A8EB397B9B 65CF9306637A7F9F FF7419740698EC4B
+846CA673DDB2E89E 694679870D8ACAAD E2C422F558047785 ADBB20B8FA76097B
+A9B0DCB6EAC3CE22 9AEFF90A4B35EA67 6F3CE96B7A9FDAE4 A7830E2680341275
+9EE2919E6467F85C B5DA82D27DC93790 41E168119CEAD455 1A92106D745E0BA3
+8CE5B9885463FFE8 80EB6866907BF67D EF9C9CE4F7F10339 24FE54D1A3952582
+9C53BFDC14CE712A 0797D781CE0E94D7 D0B93CB4210EA989 418BD464D4D0DC3F
+AE3A27C9A8FABA77 0A886D1C7FE29A2F AB43091536742BCD 595E6C57C3504F73
+558C8F53E849053D A6D5130EEA3FBD7F F8F265E7A46A0CA8 5684530499BADA18
+6880F3382D6E284C BF1B5F540055D093 598335D46043F66E 5891420FED16982F
+4C4C189706756492 3635F2A64BF61C54 F8B6267626FE7575 BDB479A5AB0A943A
+F2757531405D8C24 2D75EF487DA9C655 8E3EC12B0E59B230 1C7C3982C9671703
+97A4325BB3F5AF62 0BCAE624A56F4976 2542AB28436C8A6C DB8882EE22C4C3B0
+64F4F0259C770649 660E72AC6DB3892A 29C54CDB5E664404 DD3F38DF80AA532D
+23154E0416BE9FFE 15098F8674473459 7C673B256BF337F8 C48C659ED1806271
+7E13916E951FE60B 909148A1339803A0 89E9D061365064E6 8C6C135D235D3D0A
+D987E981BB835673 D9A51FFD23F26D1A 24C1202AF2F4A69A B3A19934C2A6D90E
+631FB15242364372 99D45F68A3A47ADF 4CD5393A03293564 1B619CFB9F48AEB2
+741680ACD79F7981 432DFDDDB99E1EDF 9E1F4C1BBB91D158 C0BBC4840E0A97D5
+6DE41A7035A9771C 38FE62FC7B1E8EB8 F1C1CE230D14B4BD D284B18EDA473661
+80BFF9D41FCEF815 FCDE19CEF373A3D5 0563CD087741CEE9 CC59DB2AC8F38107
+96C792135E94C07A 3AA1A7F1EC8F7490 7FE1768CA82D196C 2D07BDE44DABE4A5
+094D00E7C76A7E2E 8BBBC84C8372D12C E7C2B8B1287D76C1 8BD71B872347152B
+7D217D06EC8282DC E59592D13A97751D 0708B3F78205EBA9 19278C2C17BFCF92
+DB33231E49D4439D 60D4E3A9C9A77338 48D8253041CBFE02 4BA8578FDF71D645
+0D7BBDAB8B63F237 0F272D20B74EA2F0 8363FCF1A015F1F5 5132E8159DD29415
+85F5292346933A3B 82CD27E5C32AAC46 416145AF03E4400A F72F84E9B25E5A8D
+0B6C62B4831DA48F 14795F8B57D7D628 8220B765EF459CFA F87AB658AF9B9EB5
+02CEC64B0BAEE87E 8790E8069FA1979A 6B413763217B8E7F C3F52AD32635D439
+3B2079E707F6259A 76BFC58E6F09C8BF 172E8125D3E7C338 A0D4E53C91570F94
+FC97E05523518A28 1BA4893F4FE9CCB1 3A91568004D8E218 53943BF4F2601EE9
+592B3D2997DB3348 F7E01BB47E220B7D 2C35841206020892 E3E0C0514CA1CBA9
+BF29FCD0A52EDB2D 0535CB1E249236AE 116CF178FE7D91A2 FCC03861E8FCAADE
+85018CB4A6380DFE AED2499E45C7381F 176C5352623133BF 40E03A77F3171C4D
+76F160CDB87CED97 73DEC40B659B0389 29BB5C19A83B22F3 49C3FC2C92D53AA1
+A3B8C85CE40275D7 F5FC57B685517E98 9C8AA545ED146A42 5BD55705A6253BFF
+F051D3A37D664D6A 4D1C3BBB7FE89589 088591960168DED8 2F6C8F95A7744A1A
+C2E3557F051597E9 81989308397C302E A52481710C3C470E 05B6608FA6CFF816
+36418F4D6B297B12 73BF2D05912C3B44 41A04389E18338A0 B2AC8866279C26EF
+456FD0B2B703EB08 EBF2C3E733EA4260 31747591CCB15B7D FEF67281AFA9EBC9
+7C9675C37C0D5619 D94A46862083954A FD948680572E4B83 0FB3F2D6FC34FCF0
+01944222B5DEF253 D8227F11EAD928D9 CCCA70296B170D4F 59677A2DEEBFC347
+9DC04E44EE1EF2E3 3B8A9EBF755B76A7 44D584C5ABE64D62 C70B68C1C5EA283D
+5784B3344C2C40EC E704F7EF05F355DF 20508A506659AA6D C007611C72C7A784
+AA7ADC93BFD874E5 7AD80E2FF4E8C8DE 8710447CA1701067 0C5D75EC673695F5
+CB2C14B7FE12C83C D9AD85CA0D8158FD 6ACDE123B2815FBA 194EC770491857B1
+6DE9D21F8FAA7FE3 3F8A2313FCF8ECF8 93EBF1C90AF6E282 39DEBBD340E772FB
+D4E80BE76D6374E7 9D8FEF72EF5D8B9A DEF04A7843D2D5B5 4776C460272A7F4D
+454AE93323B5D49D 428A7CBA9D1F5C2C 2D5292CF05A81347 E0D7B84D80F014F6
+5F8C186A04480B52 4104690526D48E56 2274AA32B106A799 E47DB28A745E58F2
+AE10DDAF3A384A8B 62A7CCD436C26D18 2242F8903A3FB514 6D86CFBF8C70BFA7
+E1C9678A985930B6 CF467F71D792A396 1C76F2E335D73D86 D3C517583635E7BD
+CA89F0467892BC02 ADFE9E4F9ACE506A EF342ABE60E67452 6652C04939E18A28
+2D97E6E20F5BDDAC 6683348205BF9C1C 157966419E079586 4E398F2794C8BE0E
+D656AEC28EBB1C0E C724EA12066C95BC 34B3BC815451153E B72EB5CD5038BFF2
+3240C5D04465B0D7 BB3DBFD5532EBF1E 980BE0D61B4714BF 0A4E3ED0381CF185
+8A99D70F85DD4585 72AA5A63A03BCE53 0F937BEA00A1274C B7BD333F39590646
+693C99EA1FE0409E 77FAB130728BC060 A50843EC2FB03BE6 9A3095FF517C458B
+544DF33A103FA23A CA992F039BA5B696 9EBA940567FAE110 A66BFD16A9246486
+211A05F5EBBADCE6 44ADE368E337755A 953A455FBDE17C67 A37DA6B3D911BF04
+4B9E7A68D842ABEC 1F49203ECA854AC5 C9BD2F04BC859C1A 2F6A41A72BCCFABC
+FB21474EEECE8960 57DFE60C0CC48F92 CC0FD910A5D07324 BC7F8BD9A732F449
+5031B3F0271ED1AF 873D86260EE22785 2299D76563272A5C D5C91658AF2A5E39
+5090550BAE4392BF 48325D362F6CE39E 93DF78C2C7E3E581 04D02DC4C7165226
+E5043460C41463A6 07C627565AF9979E F3C3BE8E81D6611E 22C5E340BFC75C68
+216FCB41A58914AA F537829790AFEFEB FBA5C1A229B47BC4 F8D1BA83BFF46BC7
+4D6014B1C5F5FAAC BBDD37E2FDC20BAE F1C5C12B0E3E8AB1 6C7070D2D5271D4D
+0B6802B6ADBE3D5F 17819C7A23D608FF 03047AEDC60DD8C2 9B9C7398B82A9358
+856BAC6EF70999A8 22DD84A7DF48B783 C52CBEAE6DC69E64 607296DAD5AF9263
+23FB659C04C29CAE 3B329F1D7572294F 5A28BB3D75484188 1628E0DFE3DB695C
+3FC75461BD03E1E7 F041589272E23B80 E445E1F4F43A7143 E7C578057B39259D
+28CB5C718246E63A E35D567DB73F2ACC 01986017E35BE549 4D4770AD98E143AA
index b0b726c85750bdeb435b4bc9e72f60fd1fcfaa05..585aa791e54a098849dd256fef9f675c23638593 100644 (file)
@@ -350,6 +350,15 @@ slh_dsa_sha2_128s = {
   slh_dsa_sha2_128s_verify,
 };
 
+static const struct slh_dsa_alg
+slh_dsa_sha2_128f = {
+  "slh_dsa_sha2_128f",
+  SLH_DSA_128_KEY_SIZE,
+  SLH_DSA_128F_SIGNATURE_SIZE,
+  slh_dsa_sha2_128f_sign,
+  slh_dsa_sha2_128f_verify,
+};
+
 static void
 test_slh_dsa (const struct slh_dsa_alg *alg,
              const struct tstring *pub, const struct tstring *priv,
@@ -580,6 +589,11 @@ test_main (void)
                         SHEX ("173D04C938C1C36BF289C3C022D04B14"),
                         SHEX ("0162C10219D422ADBA1359E6AA65299C"));
 
+  test_slh_dsa_128_root (slh_dsa_sha2_128f_root, /* tcId 31 */
+                        SHEX ("A868F1BD5DEBC12D4C9FAD66AABD0A94"),
+                        SHEX ("C42BCB3B5A6F331F5CCE899253C6D9E2"),
+                        SHEX ("B546DF247BE4C457F3D467CDFCFABD39"));
+
   test_slh_dsa_128_root (slh_dsa_shake_128s_root, /* tcId 11 */
                         SHEX ("529FFE86200D1F32C2B60D0CD909F190"),
                         SHEX ("C151951F3811029239B74ADD24C506AF"),
@@ -634,6 +648,12 @@ test_main (void)
 
   /* From
      https://github.com/usnistgov/ACVP-Server/blob/master/gen-val/json-files/SLH-DSA-sigGen-FIPS205/internalProjection.json */
+  test_slh_dsa (&slh_dsa_sha2_128f, /* tcId 7 */
+               SHEX ("0C04FABC4FCA7F356AC36C28B99D7A1FCFEF78F38B167CA9D0AB8772910C3945"),
+               SHEX ("704555B4E5DD1B979A4C3B7A0A0E4EE241D59AE0779CAF0DF58300F21066DDA7"),
+               read_hex_file ("slh-dsa-sha2-128f-tc7.msg", 5024),
+               read_hex_file ("slh-dsa-sha2-128f-tc7.sig", SLH_DSA_128F_SIGNATURE_SIZE));
+
   test_slh_dsa (&slh_dsa_shake_128f, /* tcId 64 */
                SHEX ("C9A7900E931AFBA2B52A5BC55A2DC4D12DDC9BF8E0B2ED0BDE83E674F1ECE7AA"),
                SHEX ("0E87FF20256E0E499A53B52DF91467C01F0431C07250AFE93DE814117B5D66D3"),