diff --git a/vlib/x/crypto/slhdsa/README.md b/vlib/x/crypto/slhdsa/README.md
new file mode 100644
index 0000000000..39407c80a8
--- /dev/null
+++ b/vlib/x/crypto/slhdsa/README.md
@@ -0,0 +1,75 @@
+# slhdsa
+Experimental module of NIST FIPS-205 Stateless Hash-Based Digital Signature Standard (SLH-DSA) in V
+
+## About
+SLH-DSA was a quantum resistent cryptographic digital signature standard that was approved and publicly published by NIST at August, 2024. Its availables on [NIST FIPS 205](https://csrc.nist.gov/pubs/fips/205/final).
+SLH-DSA allow builds relatively big signaturue size with small key (`16 - 32` bytes key).
+The signatures range from `±8K - ±50K` depending on the type chosen.
+
+> [!NOTE]
+> This module wraps and written on top of SLH-DSA functionality availables on latest release
+> of recent OpenSSL library. Based on the history, this functionality was added in OpenSSL 3.5.
+> So, make sure, you have required version of OpenSSL library installed. For simple guides how
+> to build and install latest OpenSSL library on unix-like box,
+> see [install-latest-ssl.md](https://github.com/vlang/v/blob/master/vlib/x/crypto/slhdsa/install-latest-ssl.md)
+
+## Basic
+SLH-DSA signature scheme is constructed using other hash-based signature schemes as components.
+SLH-DSA was comes with set of predefined parameter that describes security categories, ie:
+
+- What is underlying hash algorithm used in the mean of process.
+The standard defines two's hash algorithm family availables, `sha2` family and `shake` family
+- Security bits number of parameter set
+- Whether the parameter set was designed to create relatively small signatures ('s') or to have
+relatively fast signature generation ('f').
+See Table. 2 SLH-DSA parameter sets in the standard document.
+
+This parameter set represented by this opaque on this module:
+```codeblock
+pub enum Kind {
+ // SHA2-based family
+ sha2_128s = C.NID_SLH_DSA_SHA2_128s
+ sha2_128f = C.NID_SLH_DSA_SHA2_128f
+ sha2_192s = C.NID_SLH_DSA_SHA2_192s
+ sha2_192f = C.NID_SLH_DSA_SHA2_192f
+ sha2_256s = C.NID_SLH_DSA_SHA2_256s
+ sha2_256f = C.NID_SLH_DSA_SHA2_256f
+ // SHAKE-based family
+ shake_128s = C.NID_SLH_DSA_SHAKE_128s
+ shake_128f = C.NID_SLH_DSA_SHAKE_128f
+ shake_192s = C.NID_SLH_DSA_SHAKE_192s
+ shake_192f = C.NID_SLH_DSA_SHAKE_192f
+ shake_256s = C.NID_SLH_DSA_SHAKE_256s
+ shake_256f = C.NID_SLH_DSA_SHAKE_256f
+}
+```
+
+Example
+-------
+```v cgen
+import x.crypto.slhdsa
+
+fn main() {
+ // you can choose and pass the kind of the SLH-DSA parameter to the constructor
+ opt := slhdsa.KeyOpts{
+ kind: .sha2_128s
+ // other options was availables
+ }
+ mut pv := slhdsa.PrivateKey.new(opt)!
+
+ // Example message
+ msg := 'SLH-DSA example message'.bytes()
+
+ // Sign a message using constructed key
+ sig := pv.sign(msg)!
+
+ // Then the public key part can verify this signature
+ mut pb := pv.public_key()!
+ verified := pb.verify(sig, msg)!
+ assert verified // true
+
+ // release the resource
+ pv.free()
+ pb.free()
+}
+```
diff --git a/vlib/x/crypto/slhdsa/base.v b/vlib/x/crypto/slhdsa/base.v
new file mode 100644
index 0000000000..0788192ad6
--- /dev/null
+++ b/vlib/x/crypto/slhdsa/base.v
@@ -0,0 +1,405 @@
+// Copyright (c) blackshirt. All rights reserved.
+// Use of this source code is governed by an MIT license
+// that can be found in the LICENSE file.
+module slhdsa
+
+// Configuration options used in SLH-DSA key generation.
+@[params]
+pub struct KeyOpts {
+pub mut:
+ // An opaque represents the kind of SLH-DSA keys want to built.
+ // See `enum Kind` for available options.
+ kind Kind = .sha2_128s
+
+ // flag, 0=random (default), 1= use seed bytes, 2 = use priv bytes, otherwise error
+ flag int
+ // when you set flag=1, builder will use seed bytes as a params,
+ // so, make sure to pass seed bytes length != 0
+ seed []u8
+ // when flag=2, you should ensure private bytes length != 0
+ priv []u8
+
+ // This option below was not supported yet.
+ //
+ // Sets properties to be used when fetching algorithm implementations
+ // used for SLH-DSA hashing operations.
+ propq string
+}
+
+// Configurations parameters used for signing (and or verifying)
+@[params]
+pub struct SignerOpts {
+pub mut:
+ // optional context string up to 255 length, used in signing (verifying)
+ context string
+
+ // "message-encoding"
+ // The default value of 1 uses 'Pure SLH-DSA Signature Generation'.
+ // Setting it to 0 does not encode the message, which is used for testing,
+ // but can also be used for 'Pre Hash SLH-DSA Signature Generation'.
+ // If you set encoding to 0, you should provide the entropy.
+ encoding int = 1
+
+ // "test-entropy" used for testing to pass a optional random value.
+ entropy []u8 // octet-string
+
+ // "deterministic" integer option.
+ // The default value of 0 generates a random value (using a DRBG) this is used when
+ // processing the message. Setting this to 1 causes the private key seed to be used instead.
+ // This value is ignored if "test-entropy" is set.
+ deterministic int
+}
+
+// from_seed creates a new SLH-DSA PrivateKey from seed bytes and kind options.
+// If the seed length was zero, it will create a key based on randomly generated seed.
+// You should make sure, the seed bytes comes from trusted cryptographic secure source.
+// The seed size was 3 times of `𝑛` parameter defined in the standard.
+// The `𝑛` size maybe 16, 24 or 32 bytes length, depend on the chosen type.
+fn PrivateKey.from_seed(seed []u8, kind Kind) !PrivateKey {
+ // when seed bytes length was zero, build the key based on the random ones
+ if seed.len == 0 {
+ return PrivateKey.new(kind: kind)!
+ }
+ // Get the n size parameter set from the options
+ nsize := kind.nsize()
+ // The length of the seed bytes supplied must be 3 * nsize.
+ if seed.len != 3 * nsize {
+ return error('Unmatching seed length with kind supplied, need ${3 * nsize} bytes')
+ }
+
+ param_bld := C.OSSL_PARAM_BLD_new()
+ assert param_bld != 0
+
+ m := C.OSSL_PARAM_BLD_push_octet_string(param_bld, c'seed', seed.data, seed.len)
+ if m <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ return error('OSSL_PARAM_BLD_push failed')
+ }
+
+ // build params
+ params := C.OSSL_PARAM_BLD_to_param(param_bld)
+ // create a desired context
+ pctx := C.EVP_PKEY_CTX_new_from_name(0, kind.long_name(), 0)
+ if params == 0 || pctx == 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+ return error('EVP_PKEY_CTX_new or OSSL_PARAM_BLD_to_param failed')
+ }
+ pkey := C.EVP_PKEY_new()
+ assert pkey != 0
+ ke := C.EVP_PKEY_keygen_init(pctx)
+ if ke <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+ C.EVP_PKEY_free(pkey)
+ return error('EVP_PKEY_keygen_init failed')
+ }
+ // Use EVP_PKEY_CTX_set_params() after calling EVP_PKEY_keygen_init().
+ s := C.EVP_PKEY_CTX_set_params(pctx, params)
+ if s != 1 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+ C.EVP_PKEY_free(pkey)
+ return error('EVP_PKEY_CTX_set_params failed')
+ }
+
+ ss := C.EVP_PKEY_keygen(pctx, &pkey)
+ if ss <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+ C.EVP_PKEY_free(pkey)
+ return error('EVP_PKEY_keygen failed')
+ }
+ // TODO: right way to check the key
+ pvkey := PrivateKey{
+ key: pkey
+ }
+ // Cleans up
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+
+ return pvkey
+}
+
+fn PrivateKey.from_bytes(bytes []u8, kind Kind) !PrivateKey {
+ // when bytes length was zero, build the key based on the random ones
+ if bytes.len == 0 {
+ return PrivateKey.new(kind: kind)!
+ }
+ // Get the n size parameter set from the options
+ nsize := kind.nsize()
+ // The private key has a size of 4 * n bytes.
+ if bytes.len != 4 * nsize {
+ return error('Unmatching private bytes length with kind supplied, need ${4 * nsize} bytes')
+ }
+
+ param_bld := C.OSSL_PARAM_BLD_new()
+ assert param_bld != 0
+
+ m := C.OSSL_PARAM_BLD_push_octet_string(param_bld, c'priv', bytes.data, bytes.len)
+ if m <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ return error('OSSL_PARAM_BLD_push FAILED')
+ }
+
+ // build params
+ params := C.OSSL_PARAM_BLD_to_param(param_bld)
+ // create a desired context
+ pctx := C.EVP_PKEY_CTX_new_from_name(0, kind.long_name(), 0)
+ if params == 0 || pctx == 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+ return error('EVP_PKEY_CTX_new or OSSL_PARAM_BLD_to_param failed')
+ }
+
+ pkey := C.EVP_PKEY_new()
+ assert pkey != 0
+
+ s := C.EVP_PKEY_fromdata_init(pctx)
+ if s <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+ C.EVP_PKEY_free(pkey)
+ return error('EVP_PKEY_fromdata_init failed')
+ }
+
+ ss := C.EVP_PKEY_fromdata(pctx, &pkey, evp_pkey_keypair, params)
+ if ss <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+ C.EVP_PKEY_free(pkey)
+ return error('EVP_PKEY_fromdata failed')
+ }
+
+ pvkey := PrivateKey{
+ key: pkey
+ }
+ // Cleans up
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+
+ return pvkey
+}
+
+// from_bytes creates a new PublicKey with type of supported key and bytes array.
+// If you dont provide the bytes, ie, supplied with zero-length bytes,
+// it will be generated with random bytes for you.
+pub fn PublicKey.from_bytes(bytes []u8, kind Kind) !PublicKey {
+ // when bytes length was zero, build the key based on the random ones
+ if bytes.len == 0 {
+ pv := PrivateKey.new(kind: kind)!
+ pbk := pv.public_key()!
+ return pbk
+ }
+ // Get the n size parameter set from the options
+ nsize := kind.nsize()
+ // The public key has a size of 2 * n bytes.
+ if bytes.len != 2 * nsize {
+ return error('Unmatching public bytes length with kind supplied, need ${2 * nsize} bytes')
+ }
+
+ param_bld := C.OSSL_PARAM_BLD_new()
+ assert param_bld != 0
+
+ m := C.OSSL_PARAM_BLD_push_octet_string(param_bld, c'pub', bytes.data, bytes.len)
+ if m <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ return error('OSSL_PARAM_BLD_push FAILED')
+ }
+
+ // build params
+ params := C.OSSL_PARAM_BLD_to_param(param_bld)
+ // create a desired context
+ pctx := C.EVP_PKEY_CTX_new_from_name(0, kind.long_name(), 0)
+ if params == 0 || pctx == 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+ return error('EVP_PKEY_CTX_new or OSSL_PARAM_BLD_to_param failed')
+ }
+
+ pkey := C.EVP_PKEY_new()
+ assert pkey != 0
+
+ s := C.EVP_PKEY_fromdata_init(pctx)
+ if s <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+ C.EVP_PKEY_free(pkey)
+ return error('EVP_PKEY_fromdata failed')
+ }
+
+ ss := C.EVP_PKEY_fromdata(pctx, &pkey, evp_pkey_public_key, params)
+ if ss <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+ C.EVP_PKEY_free(pkey)
+ return error('EVP_PKEY_fromdata failed')
+ }
+
+ pbkey := PublicKey{
+ key: pkey
+ }
+ // Cleans up
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_PKEY_CTX_free(pctx)
+
+ return pbkey
+}
+
+// The enumeration of NID of SLHDSA parameters set.
+// See Table 2. SLH-DSA parameter sets of the Chapter 11. Parameter Sets
+// Each sets name indicates:
+//
+// - the hash function family (SHA2 or SHAKE) that is used to instantiate the hash functions.
+// - the length in bits of the security parameter, in the 128, 192, and 256 respectives number.
+// - the mnemonic name indicates parameter to create relatively small signatures (`s`)
+// or to have relatively fast signature generation (`f`).
+pub enum Kind {
+ // SHA2-based family
+ sha2_128s = C.NID_SLH_DSA_SHA2_128s
+ sha2_128f = C.NID_SLH_DSA_SHA2_128f
+ sha2_192s = C.NID_SLH_DSA_SHA2_192s
+ sha2_192f = C.NID_SLH_DSA_SHA2_192f
+ sha2_256s = C.NID_SLH_DSA_SHA2_256s
+ sha2_256f = C.NID_SLH_DSA_SHA2_256f
+ // SHAKE-based family
+ shake_128s = C.NID_SLH_DSA_SHAKE_128s
+ shake_128f = C.NID_SLH_DSA_SHAKE_128f
+ shake_192s = C.NID_SLH_DSA_SHAKE_192s
+ shake_192f = C.NID_SLH_DSA_SHAKE_192f
+ shake_256s = C.NID_SLH_DSA_SHAKE_256s
+ shake_256f = C.NID_SLH_DSA_SHAKE_256f
+}
+
+// nsize returns the size of underlying n parameter from current type.
+@[inline]
+fn (n Kind) nsize() int {
+ match n {
+ .sha2_128s, .sha2_128f, .shake_128s, .shake_128f { return 16 }
+ .sha2_192s, .sha2_192f, .shake_192s, .shake_192f { return 24 }
+ .sha2_256s, .sha2_256f, .shake_256s, .shake_256f { return 32 }
+ }
+}
+
+fn (n Kind) str() string {
+ match n {
+ // vfmt off
+ // SHA2-based family
+ .sha2_128s { return "sha2_128s" }
+ .sha2_128f { return "sha2_128f" }
+ .sha2_192s { return "sha2_192s" }
+ .sha2_192f { return "sha2_192f" }
+ .sha2_256s { return "sha2_256s" }
+ .sha2_256f { return "sha2_256f" }
+ // SHAKE-based family
+ .shake_128s { return "shake_128s" }
+ .shake_128f { return "shake_128f" }
+ .shake_192s { return "shake_192s" }
+ .shake_192f { return "shake_192f" }
+ .shake_256s { return "shake_256s" }
+ .shake_256f { return "shake_256f" }
+ // vfmt on
+ }
+}
+
+// Kind long name as v string
+@[inline]
+fn (n Kind) ln_to_vstr() string {
+ out := unsafe { n.long_name().vstring() }
+ return out
+}
+
+// Kind long name as c-style string
+@[inline]
+fn (n Kind) long_name() &char {
+ match n {
+ // vfmt off
+ // SHA2-based family
+ .sha2_128s { return ln_slhdsa_sha2_128s }
+ .sha2_128f { return ln_slhdsa_sha2_128f }
+ .sha2_192s { return ln_slhdsa_sha2_192s }
+ .sha2_192f { return ln_slhdsa_sha2_192f }
+ .sha2_256s { return ln_slhdsa_sha2_256s }
+ .sha2_256f { return ln_slhdsa_sha2_256f }
+ // SHAKE-based family
+ .shake_128s { return ln_slhdsa_shake_128s }
+ .shake_128f { return ln_slhdsa_shake_128f }
+ .shake_192s { return ln_slhdsa_shake_192s }
+ .shake_192f { return ln_slhdsa_shake_192f }
+ .shake_256s { return ln_slhdsa_shake_256s }
+ .shake_256f { return ln_slhdsa_shake_256f }
+ // vfmt on
+ }
+}
+
+// Chapter 11. Parameters Set
+struct ParamSet {
+ // Algorithm name
+ id Kind
+ n int
+ h int
+ d int
+ hp int
+ a int
+ k int
+ lgw int = 4
+ m int
+ sc int
+ pkb int
+ sig int
+}
+
+// Table 2. SLH-DSA parameter sets
+const paramset = {
+ // id 𝑛 ℎ 𝑑 ℎ′ 𝑎 𝑘 𝑙𝑔𝑤 𝑚 sc pkb sig
+ 'sha2_128s': ParamSet{.sha2_128s, 16, 63, 7, 9, 12, 14, 4, 30, 1, 32, 7856}
+ 'sha2_128f': ParamSet{.sha2_128f, 16, 66, 22, 3, 6, 33, 4, 34, 1, 32, 17088}
+ 'sha2_192s': ParamSet{.sha2_192s, 24, 63, 7, 9, 14, 17, 4, 39, 3, 48, 16224}
+ 'sha2_192f': ParamSet{.sha2_192f, 24, 66, 22, 3, 8, 33, 4, 42, 3, 48, 35664}
+ 'sha2_256s': ParamSet{.sha2_256s, 32, 64, 8, 8, 14, 22, 4, 47, 5, 64, 29792}
+ 'sha2_256f': ParamSet{.sha2_256f, 32, 68, 17, 4, 9, 35, 4, 49, 5, 64, 49856}
+ // SHAKE family
+ 'shake_128s': ParamSet{.shake_128s, 16, 63, 7, 9, 12, 14, 4, 30, 1, 32, 7856}
+ 'shake_128f': ParamSet{.shake_128f, 16, 66, 22, 3, 6, 33, 4, 34, 1, 32, 17088}
+ 'shake_192s': ParamSet{.shake_192s, 24, 63, 7, 9, 14, 17, 4, 39, 3, 48, 16224}
+ 'shake_192f': ParamSet{.shake_192f, 24, 66, 22, 3, 8, 33, 4, 42, 3, 48, 35664}
+ 'shake_256s': ParamSet{.shake_256s, 32, 64, 8, 8, 14, 22, 4, 47, 5, 64, 29792}
+ 'shake_256f': ParamSet{.shake_256f, 32, 68, 17, 4, 9, 35, 4, 49, 5, 64, 49856}
+}
+
+fn ParamSet.from_kind(k Kind) ParamSet {
+ return paramset[k.str()]
+}
+
+// Some helpers
+//
+fn key_algo_name(key &C.EVP_PKEY) &char {
+ name := voidptr(C.EVP_PKEY_get0_type_name(key))
+ assert name != 0
+ return name
+}
+
+fn key_type_name(key &C.EVP_PKEY) &char {
+ kn := voidptr(C.EVP_PKEY_get0_type_name(key))
+ assert kn != 0
+ return kn
+}
+
+fn key_description(key &C.EVP_PKEY) &char {
+ kd := voidptr(C.EVP_PKEY_get0_description(key))
+ assert kd != 0
+ return kd
+}
diff --git a/vlib/x/crypto/slhdsa/base_test.v b/vlib/x/crypto/slhdsa/base_test.v
new file mode 100644
index 0000000000..578324db33
--- /dev/null
+++ b/vlib/x/crypto/slhdsa/base_test.v
@@ -0,0 +1,187 @@
+// Copyright (c) blackshirt. All rights reserved.
+// Use of this source code is governed by an MIT license
+// that can be found in the LICENSE file.
+// vtest build: has_modern_openssl?
+module slhdsa
+
+import rand
+import encoding.hex
+
+fn test_privatekey_from_bytes() ! {
+ // for sha2_128s
+ priv := hex.decode('4329f96b412b5d5ca9c730c9d54e52595265f6fc3ea67c183aa7043d90e949b8fd320c8fc0fa6a23462483535f131b9ea265848e7bb5f4d3cfd99de2595382b3')!
+ mut pv := PrivateKey.from_bytes(priv, .sha2_128s)!
+
+ sig := pv.sign('test'.bytes())!
+
+ mut pb := pv.public_key()!
+ status := pb.verify(sig, 'test'.bytes())!
+ assert status == true
+
+ pv.free()
+ pb.free()
+}
+
+fn test_pvkey_from_seed() ! {
+ kind := Kind.sha2_128s
+ seed := rand.bytes(3 * kind.nsize())!
+
+ mut pv := PrivateKey.from_seed(seed, kind)!
+
+ msg := 'Hello'.bytes()
+ sig := pv.sign(msg)!
+
+ mut pb := pv.public_key()!
+
+ verified := pb.verify(sig, msg)!
+ assert verified
+
+ pv.free()
+ pb.free()
+}
+
+fn test_privkey_signing() ! {
+ mut pv := PrivateKey.new(kind: .shake_256f)!
+ assert pv.bytes()!.len == 128
+ assert pv.public_bytes()!.len == 64
+
+ // type name
+ chr := key_type_name(pv.key)
+ assert unsafe { chr.vstring() } == 'SLH-DSA-SHAKE-256f'
+
+ msg := 'Hello'.bytes()
+ sig := slhdsa_do_sign(pv.key, msg)!
+ assert sig.len == 49856
+
+ verified := slhdsa_do_verify(pv.key, sig, msg)!
+ assert verified
+
+ mut pb := pv.public_key()!
+ sig2 := pv.sign(msg)!
+
+ status := pb.verify(sig, msg)!
+ status2 := pb.verify(sig2, msg)!
+
+ assert status
+ assert status2
+
+ pv.free()
+ pb.free()
+}
+
+fn test_basic_properties() ! {
+ mut pv := PrivateKey.new()!
+ desc := key_description(pv.key)
+ unsafe { desc.vstring() } == 'OpenSSL SLH-DSA-SHA2-128f implementation'
+
+ n := C.EVP_PKEY_is_a(pv.key, ln_slhdsa_sha2_128s)
+ assert n == 1 // true
+ assert C.EVP_PKEY_size(pv.key) == 7856
+ assert C.EVP_PKEY_get_bits(pv.key) == 256
+ assert C.EVP_PKEY_get_security_bits(pv.key) == 128
+
+ mut pv2 := PrivateKey.new(kind: .sha2_128f)!
+ n2 := C.EVP_PKEY_is_a(pv2.key, ln_slhdsa_sha2_128f)
+ assert n2 == 1 // true
+ assert C.EVP_PKEY_size(pv2.key) == 17088
+ assert C.EVP_PKEY_get_bits(pv2.key) == 256
+ assert C.EVP_PKEY_get_security_bits(pv2.key) == 128
+
+ mut pv3 := PrivateKey.new(kind: .sha2_192s)!
+ n3 := C.EVP_PKEY_is_a(pv3.key, ln_slhdsa_sha2_192s)
+ assert n3 == 1 // true
+ assert C.EVP_PKEY_size(pv3.key) == 16224
+ assert C.EVP_PKEY_get_bits(pv3.key) == 384
+ assert C.EVP_PKEY_get_security_bits(pv3.key) == 192
+
+ mut pv4 := PrivateKey.new(kind: .shake_256f)!
+ n4 := C.EVP_PKEY_is_a(pv4.key, ln_slhdsa_shake_256f)
+ assert n4 == 1 // true
+ assert C.EVP_PKEY_size(pv4.key) == 49856
+ assert C.EVP_PKEY_get_bits(pv4.key) == 512
+ assert C.EVP_PKEY_get_security_bits(pv4.key) == 256
+
+ pv.free()
+ pv2.free()
+ pv3.free()
+ pv4.free()
+}
+
+struct Slh128sSeed {
+mut:
+ seed string
+ pubk string
+ priv string
+}
+
+// test SLH-DSA-SHA2_128s based on samples data
+fn test_privatekey_slhdsa_128s_from_seed_with_sample_data() ! {
+ for obj in sample_slhdsa_128s_seed {
+ seed := hex.decode(obj.seed)!
+ k_opt := KeyOpts{
+ kind: .sha2_128s
+ flag: 1
+ seed: seed
+ }
+ mut pv := PrivateKey.new(k_opt)!
+ assert pv.bytes()! == hex.decode(obj.priv)!
+ assert pv.public_bytes()! == hex.decode(obj.pubk)!
+ pv.free()
+ }
+}
+
+// This sample data was copied and adapted from boringssl test data in slh_keygen.txt
+// at https://boringssl.googlesource.com/boringssl.git/+/chromium-stable/crypto/slhdsa/slhdsa_keygen.txt
+// Its likely only support for SLH-DSA-SHA2_128s
+const sample_slhdsa_128s_seed = [
+ Slh128sSeed{
+ seed: '2f896d61d9cd9038ca303394fadaa22a24ac5ec1d86a989ca2196c3c8632419c1a05a42fe300e87b16aee116cb2e2363'
+ pubk: '1a05a42fe300e87b16aee116cb2e236358e2c3e62632c9de03d08a535a0eb7e7'
+ priv: '2f896d61d9cd9038ca303394fadaa22a24ac5ec1d86a989ca2196c3c8632419c1a05a42fe300e87b16aee116cb2e236358e2c3e62632c9de03d08a535a0eb7e7'
+ },
+ Slh128sSeed{
+ seed: '87dd614ea188940d93c7df9943caa283cbdf2ccc4940e7007b7b6c799e95e160bbaca7b93fec1a097e115f10d18e6611'
+ pubk: 'bbaca7b93fec1a097e115f10d18e66112aa087f0eeed95be3ab301ebc812406f'
+ priv: '87dd614ea188940d93c7df9943caa283cbdf2ccc4940e7007b7b6c799e95e160bbaca7b93fec1a097e115f10d18e66112aa087f0eeed95be3ab301ebc812406f'
+ },
+ Slh128sSeed{
+ seed: '0436b480d04c4c47f5ecd1e4b94f103988c5f804913fac77a96572cdc26f6a92f18d59d50b6b13f71821526f3aa800a8'
+ pubk: 'f18d59d50b6b13f71821526f3aa800a8cde5ccb604485df0c6f14cd64b60979c'
+ priv: '0436b480d04c4c47f5ecd1e4b94f103988c5f804913fac77a96572cdc26f6a92f18d59d50b6b13f71821526f3aa800a8cde5ccb604485df0c6f14cd64b60979c'
+ },
+ Slh128sSeed{
+ seed: 'b9341d201d49b337c84e6ac2c26361e1f5dcab582f404fe89739df4ec64eccdd04519d0d7c1ad543cd1b479602e41784'
+ pubk: '04519d0d7c1ad543cd1b479602e417848aeb88695d05f531a8415a4365b62983'
+ priv: 'b9341d201d49b337c84e6ac2c26361e1f5dcab582f404fe89739df4ec64eccdd04519d0d7c1ad543cd1b479602e417848aeb88695d05f531a8415a4365b62983'
+ },
+ Slh128sSeed{
+ seed: 'cbcaec354573e8cee1373b7aced67cdc683ed4491e17ef1dff9a9163fe7bcf74d91e0df4756c799ada2a0cf1b1aada1d'
+ pubk: 'd91e0df4756c799ada2a0cf1b1aada1d1fddc3692e8909f2185e11654dc84def'
+ priv: 'cbcaec354573e8cee1373b7aced67cdc683ed4491e17ef1dff9a9163fe7bcf74d91e0df4756c799ada2a0cf1b1aada1d1fddc3692e8909f2185e11654dc84def'
+ },
+ Slh128sSeed{
+ seed: '1d92b6cc53e5bb08841b2669f1fb481c62db8f494e1bac12a6c6163142842a33771c182ffb096207da6476874ebdaf15'
+ pubk: '771c182ffb096207da6476874ebdaf158c0143adbd0f66057a5180c96467d31d'
+ priv: '1d92b6cc53e5bb08841b2669f1fb481c62db8f494e1bac12a6c6163142842a33771c182ffb096207da6476874ebdaf158c0143adbd0f66057a5180c96467d31d'
+ },
+ Slh128sSeed{
+ seed: '94b11b26e2ec430f413f353fae96c144915e7ec84e9c786c895593b859bdb0edd54cc085cb4f4265f8288a9d67ae5806'
+ pubk: 'd54cc085cb4f4265f8288a9d67ae5806ac638ad976a1fc8e2c7c5b9db2ea0573'
+ priv: '94b11b26e2ec430f413f353fae96c144915e7ec84e9c786c895593b859bdb0edd54cc085cb4f4265f8288a9d67ae5806ac638ad976a1fc8e2c7c5b9db2ea0573'
+ },
+ Slh128sSeed{
+ seed: '9078f099c6420c6bb1303977029b1e1bac048a4375f3c48862f74a6ccedb5be4755e624791fbfd27cd195ce3aa32c62c'
+ pubk: '755e624791fbfd27cd195ce3aa32c62cd9030c131ca25c8c442c4ac0b27ae548'
+ priv: '9078f099c6420c6bb1303977029b1e1bac048a4375f3c48862f74a6ccedb5be4755e624791fbfd27cd195ce3aa32c62cd9030c131ca25c8c442c4ac0b27ae548'
+ },
+ Slh128sSeed{
+ seed: 'e0c67d9fb2434e27165c861c0f1040ed58c13b7f5e9517d000770bd3e88fbdb48cdf5f1cc1aa770a8bafcf1b8c5c843b'
+ pubk: '8cdf5f1cc1aa770a8bafcf1b8c5c843ba659b85d99ca18f555b8452f411b519c'
+ priv: 'e0c67d9fb2434e27165c861c0f1040ed58c13b7f5e9517d000770bd3e88fbdb48cdf5f1cc1aa770a8bafcf1b8c5c843ba659b85d99ca18f555b8452f411b519c'
+ },
+ Slh128sSeed{
+ seed: 'ccae2481cecc4a55aa2afe4874b0ce501984d48423fc2452f24f49b2a68ef9b8d66807ecbfd2dc999d274d0d6414afc3'
+ pubk: 'd66807ecbfd2dc999d274d0d6414afc3dfba899a4f7799cf74e98dc1c82a26ab'
+ priv: 'ccae2481cecc4a55aa2afe4874b0ce501984d48423fc2452f24f49b2a68ef9b8d66807ecbfd2dc999d274d0d6414afc3dfba899a4f7799cf74e98dc1c82a26ab'
+ },
+]
diff --git a/vlib/x/crypto/slhdsa/const.c.v b/vlib/x/crypto/slhdsa/const.c.v
new file mode 100644
index 0000000000..3393f947f1
--- /dev/null
+++ b/vlib/x/crypto/slhdsa/const.c.v
@@ -0,0 +1,75 @@
+// Copyright (c) blackshirt. All rights reserved.
+// Use of this source code is governed by an MIT license
+// that can be found in the LICENSE file.
+module slhdsa
+
+// The SLH-DSA functionality was added in recent OpenSSL 3.5 version.
+// So, we would panic if this module run on unmeet version on the current stock.
+fn init() {
+ if C.OpenSSL_version_num() < u64(0x030500000) {
+ panic('Your OpenSSL version ${C.OpenSSL_version_num().hex()} does not support for SLH-DSA')
+ }
+}
+
+// #define LN_SLH_DSA_SHA2_128s "SLH-DSA-SHA2-128s"
+// #define NID_SLH_DSA_SHA2_128s 1460
+const nid_slhdsa_sha2_128s = C.NID_SLH_DSA_SHA2_128s
+const ln_slhdsa_sha2_128s = &char(C.LN_SLH_DSA_SHA2_128s)
+
+// #define LN_SLH_DSA_SHA2_128f "SLH-DSA-SHA2-128f"
+// #define NID_SLH_DSA_SHA2_128f 1461
+const nid_slhdsa_sha2_128f = C.NID_SLH_DSA_SHA2_128f
+const ln_slhdsa_sha2_128f = &char(C.LN_SLH_DSA_SHA2_128f)
+
+// #define LN_SLH_DSA_SHA2_192s "SLH-DSA-SHA2-192s"
+// #define NID_SLH_DSA_SHA2_192s 1462
+const ln_slhdsa_sha2_192s = &char(C.LN_SLH_DSA_SHA2_192s)
+const nid_slhdsa_sha2_192s = C.NID_SLH_DSA_SHA2_192s
+
+// #define LN_SLH_DSA_SHA2_192f "SLH-DSA-SHA2-192f"
+// #define NID_SLH_DSA_SHA2_192f 1463
+const ln_slhdsa_sha2_192f = &char(C.LN_SLH_DSA_SHA2_192f)
+const nid_slhdsa_sha2_192f = C.NID_SLH_DSA_SHA2_192f
+
+// #define LN_SLH_DSA_SHA2_256s "SLH-DSA-SHA2-256s"
+// #define NID_SLH_DSA_SHA2_256s 1464
+const ln_slhdsa_sha2_256s = &char(C.LN_SLH_DSA_SHA2_256s)
+const nid_slhdsa_sha2_256s = C.NID_SLH_DSA_SHA2_256s
+
+// #define LN_SLH_DSA_SHA2_256f "SLH-DSA-SHA2-256f"
+// #define NID_SLH_DSA_SHA2_256f 1465
+const ln_slhdsa_sha2_256f = &char(C.LN_SLH_DSA_SHA2_256f)
+const nid_slhdsa_sha2_256f = C.NID_SLH_DSA_SHA2_256f
+
+// #define LN_SLH_DSA_SHAKE_128s "SLH-DSA-SHAKE-128s"
+// #define NID_SLH_DSA_SHAKE_128s 1466
+const ln_slhdsa_shake_128s = &char(C.LN_SLH_DSA_SHAKE_128s)
+const nid_slhdsa_shake_128s = C.NID_SLH_DSA_SHAKE_128s
+
+// #define LN_SLH_DSA_SHAKE_128f "SLH-DSA-SHAKE-128f"
+// #define NID_SLH_DSA_SHAKE_128f 1467
+const ln_slhdsa_shake_128f = &char(C.LN_SLH_DSA_SHAKE_128f)
+const nid_slhdsa_shake_128f = C.NID_SLH_DSA_SHAKE_128f
+
+// #define LN_SLH_DSA_SHAKE_192s "SLH-DSA-SHAKE-192s"
+// #define NID_SLH_DSA_SHAKE_192s 1468
+const ln_slhdsa_shake_192s = &char(C.LN_SLH_DSA_SHAKE_192s)
+const nid_slhdsa_shake_192s = C.NID_SLH_DSA_SHAKE_192s
+
+// #define LN_SLH_DSA_SHAKE_192f "SLH-DSA-SHAKE-192f"
+// #define NID_SLH_DSA_SHAKE_192f 1469
+const ln_slhdsa_shake_192f = &char(C.LN_SLH_DSA_SHAKE_192f)
+const nid_slhdsa_shake_192f = C.NID_SLH_DSA_SHAKE_192f
+
+// #define LN_SLH_DSA_SHAKE_256s "SLH-DSA-SHAKE-256s"
+// #define NID_SLH_DSA_SHAKE_256s 1470
+const ln_slhdsa_shake_256s = &char(C.LN_SLH_DSA_SHAKE_256s)
+const nid_slhdsa_shake_256s = C.NID_SLH_DSA_SHAKE_256s
+
+// #define LN_SLH_DSA_SHAKE_256f "SLH-DSA-SHAKE-256f"
+// #define NID_SLH_DSA_SHAKE_256f 1471
+const ln_slhdsa_shake_256f = &char(C.LN_SLH_DSA_SHAKE_256f)
+const nid_slhdsa_shake_256f = C.NID_SLH_DSA_SHAKE_256f
+
+const evp_pkey_keypair = C.EVP_PKEY_KEYPAIR
+const evp_pkey_public_key = C.EVP_PKEY_PUBLIC_KEY
diff --git a/vlib/x/crypto/slhdsa/examples/example0.v b/vlib/x/crypto/slhdsa/examples/example0.v
new file mode 100644
index 0000000000..1b8ae51f8b
--- /dev/null
+++ b/vlib/x/crypto/slhdsa/examples/example0.v
@@ -0,0 +1,26 @@
+module main
+
+import x.crypto.slhdsa
+
+fn main() {
+ // creates default key
+ mut pvkey := slhdsa.PrivateKey.new()!
+
+ // example of message
+ xmsg := 'Sample message'.bytes()
+
+ // signing the message with the key
+ sig := pvkey.sign(xmsg)!
+
+ // example of public key
+ mut pbkey := pvkey.public_key()!
+
+ // verify signature with the public key
+ verified := pbkey.verify(sig, xmsg)!
+ dump(verified) // true
+ assert verified == true
+
+ // release the resources
+ pvkey.free()
+ pbkey.free()
+}
diff --git a/vlib/x/crypto/slhdsa/install-latest-ssl.md b/vlib/x/crypto/slhdsa/install-latest-ssl.md
new file mode 100644
index 0000000000..b6f7f5918f
--- /dev/null
+++ b/vlib/x/crypto/slhdsa/install-latest-ssl.md
@@ -0,0 +1,35 @@
+This `slhdsa` module requires latest OpenSSL library and development headers.
+It required minimum of OpenSLL 3.5 version.
+Likely most of the linux (unix) distros does not ships with this version on this time
+of writing, at March, 2025.
+
+You can manually download and install OpenSSL library by your self. This documents acts as a simple
+guide on how to build and install latest OpenSSL library to your box.
+
+This guide was for unix-like system, for others, see the guides more detail goes to
+[install.md](https://github.com/openssl/openssl/blob/master/INSTALL.md#building-openssl)
+1. Go to https://openssl-library.org/source/ and download the latest version
+```bash
+$ wget -v https://github.com/openssl/openssl/releases/download/openssl-3.5.0-beta1/openssl-3.5.0-beta1.tar.gz
+```
+2. Extract your downloaded file
+```bash
+$ tar -xzvf openssl-3.5.0-beta1.tar.gz
+$ cd openssl-3.5.0-beta1
+```
+3. Configure the build flag, this module for optional build requires to use `/opt/ssl` prefix.
+```bash
+$ ./Configure --prefix=/opt/ssl --openssldir=/opt/ssl
+$ make
+$ sudo make install
+```
+By succesfully this step, the latest OpenSSL has been built and installed onto
+configured path. You need to tell the system to add this path.
+
+4. Add `/opt/ssl/lib64` entry onto `/etc/ld.so.conf.d/libcrypto.conf`
+
+5. Run `ldconfig`
+```bash
+$sudo ldconfig
+```
+6. Verify if the modules works.
\ No newline at end of file
diff --git a/vlib/x/crypto/slhdsa/slhdsa.c.v b/vlib/x/crypto/slhdsa/slhdsa.c.v
new file mode 100644
index 0000000000..a4f08264ea
--- /dev/null
+++ b/vlib/x/crypto/slhdsa/slhdsa.c.v
@@ -0,0 +1,99 @@
+// Copyright (c) blackshirt. All rights reserved.
+// Use of this source code is governed by an MIT license
+// that can be found in the LICENSE file.
+module slhdsa
+
+// TODO: remove this when the 3.5 version was commonly availables on the stock.
+#flag linux -I/opt/ssl/include/openssl
+#flag linux -I/opt/ssl/include/crypto
+#flag linux -I/opt/ssl/include
+#flag linux -L/opt/ssl/lib64
+
+// Standard path
+#flag linux -I/usr/local/include/openssl
+#flag linux -I/usr/local/include/crypto
+#flag linux -L/usr/local/lib64
+
+#flag darwin -L /opt/homebrew/opt/openssl/lib -I /opt/homebrew/opt/openssl/include
+
+#flag -I/usr/include/openssl
+#flag -lcrypto
+
+#flag darwin -I/usr/local/opt/openssl/include
+#flag darwin -L/usr/local/opt/openssl/lib
+
+#include
+#include
+#include
+#include
+
+@[typedef]
+struct C.EVP_PKEY {}
+
+fn C.EVP_PKEY_new() &C.EVP_PKEY
+fn C.EVP_PKEY_Q_keygen(ctx voidptr, propq &char, tipe &char) &C.EVP_PKEY
+fn C.EVP_PKEY_is_a(pkey &C.EVP_PKEY, name &char) int
+fn C.EVP_PKEY_size(key &C.EVP_PKEY) int
+fn C.EVP_PKEY_dup(key &C.EVP_PKEY) &C.EVP_PKEY
+fn C.EVP_PKEY_free(key &C.EVP_PKEY)
+fn C.EVP_PKEY_get_octet_string_param(pkey &C.EVP_PKEY, key_name &char, buf &u8, max_buf_sz int, out_len &usize) int
+fn C.EVP_PKEY_print_private(out &C.BIO, pkey &C.EVP_PKEY, indent int, pctx voidptr) int
+fn C.EVP_PKEY_print_public(out &C.BIO, pkey &C.EVP_PKEY, indent int, pctx voidptr) int
+fn C.EVP_PKEY_keygen_init(ctx &C.EVP_PKEY_CTX) int // 1 success
+fn C.EVP_PKEY_keygen(ctx &C.EVP_PKEY_CTX, ppkey &&C.EVP_PKEY) int
+fn C.EVP_PKEY_CTX_set_params(ctx &C.EVP_PKEY_CTX, params &C.OSSL_PARAM) int
+fn C.EVP_PKEY_get0_type_name(key &C.EVP_PKEY) &char
+fn C.EVP_PKEY_get0_description(key &C.EVP_PKEY) &char
+fn C.EVP_PKEY_get_bits(pkey &C.EVP_PKEY) int
+fn C.EVP_PKEY_get_security_bits(pkey &C.EVP_PKEY) int
+fn C.EVP_PKEY_sign_init_ex(ctx &C.EVP_PKEY_CTX, params &C.OSSL_PARAM) int
+fn C.EVP_PKEY_sign_message_init(ctx &C.EVP_PKEY_CTX, algo &C.EVP_SIGNATURE, params &C.OSSL_PARAM) int
+fn C.EVP_PKEY_sign(ctx &C.EVP_PKEY_CTX, sig &char, siglen &usize, tbs &char, tbslen int) int
+fn C.EVP_PKEY_verify_message_init(ctx &C.EVP_PKEY_CTX, algo &C.EVP_SIGNATURE, params &C.OSSL_PARAM) int
+fn C.EVP_PKEY_verify(ctx &C.EVP_PKEY_CTX, sig &char, siglen &int, tbs &char, tbslen int) int
+fn C.EVP_PKEY_set_octet_string_param(key &C.EVP_PKEY, key_name &u8, buf &u8, bsize int) int
+fn C.EVP_PKEY_fromdata_init(ctx &C.EVP_PKEY_CTX) int
+fn C.EVP_PKEY_fromdata(ctx &C.EVP_PKEY_CTX, ppkey &&C.EVP_PKEY, selection int, params &C.OSSL_PARAM) int
+fn C.EVP_PKEY_check(ctx &C.EVP_PKEY_CTX) int
+fn C.EVP_PKEY_private_check(ctx &C.EVP_PKEY_CTX) int
+fn C.EVP_PKEY_public_check(ctx &C.EVP_PKEY_CTX) int
+
+@[typedef]
+struct C.EVP_PKEY_CTX {}
+
+fn C.EVP_PKEY_CTX_free(ctx &C.EVP_PKEY_CTX)
+fn C.EVP_PKEY_CTX_new_from_name(libctx voidptr, name &char, pq voidptr) &C.EVP_PKEY_CTX
+fn C.EVP_PKEY_CTX_new_from_pkey(libctx voidptr, pkey &C.EVP_PKEY, pq voidptr) &C.EVP_PKEY_CTX
+
+fn C.OpenSSL_version_num() u64
+
+@[typedef]
+struct C.EVP_SIGNATURE {}
+
+fn C.EVP_SIGNATURE_free(signature &C.EVP_SIGNATURE)
+fn C.EVP_SIGNATURE_fetch(ctx voidptr, algorithm &char, properties voidptr) &C.EVP_SIGNATURE
+fn C.EVP_SIGNATURE_get0_name(signature &C.EVP_SIGNATURE) &char
+
+@[typedef]
+struct C.OSSL_PARAM {}
+
+@[typedef]
+struct C.OSSL_PARAM_BLD {}
+
+fn C.OSSL_PARAM_free(params &C.OSSL_PARAM)
+fn C.OSSL_PARAM_BLD_free(param_bld &C.OSSL_PARAM_BLD)
+fn C.OSSL_PARAM_BLD_new() &C.OSSL_PARAM_BLD
+fn C.OSSL_PARAM_BLD_push_int(bld &C.OSSL_PARAM_BLD, key &u8, val int) int
+fn C.OSSL_PARAM_BLD_push_octet_string(bld &C.OSSL_PARAM_BLD, key &u8, buf voidptr, bsize int) int
+fn C.OSSL_PARAM_BLD_to_param(bld &C.OSSL_PARAM_BLD) &C.OSSL_PARAM
+
+@[typedef]
+struct C.BIO_METHOD {}
+
+@[typedef]
+struct C.BIO {}
+
+fn C.BIO_new(t &C.BIO_METHOD) &C.BIO
+fn C.BIO_read_ex(b &C.BIO, data voidptr, dlen int, readbytes &usize) int
+fn C.BIO_free_all(a &C.BIO)
+fn C.BIO_s_mem() &C.BIO_METHOD
diff --git a/vlib/x/crypto/slhdsa/slhdsa.v b/vlib/x/crypto/slhdsa/slhdsa.v
new file mode 100644
index 0000000000..927b2dad7c
--- /dev/null
+++ b/vlib/x/crypto/slhdsa/slhdsa.v
@@ -0,0 +1,380 @@
+// Copyright (c) blackshirt. All rights reserved.
+// Use of this source code is governed by an MIT license
+// that can be found in the LICENSE file.
+module slhdsa
+
+// PrivateKey represents SLH-DSA keypair.
+pub struct PrivateKey {
+ key &C.EVP_PKEY
+}
+
+// new creates a new SLH-DSA PrivateKey based on the supplied options.
+// By default, it will create a `SLH-DSA-SHA2-128s` key with random generator.
+// See `enum Kind` for all of availables choice's type (kind) of key.
+// Its also support to generate keys based on the seed or private bytes through
+// provided options. See available options in `KeyOpts`.
+// Example:
+// ```
+// PrivateKey.new()!
+// PrivateKey.new(kind: .sha2_128s)
+// ```
+pub fn PrivateKey.new(opt KeyOpts) !PrivateKey {
+ match opt.flag {
+ // default random generated key, its recommended way
+ 0 {
+ kind := opt.kind.long_name()
+ key := C.EVP_PKEY_Q_keygen(0, 0, kind)
+ if key == 0 {
+ return error('EVP_PKEY_Q_keygen failed')
+ }
+ return PrivateKey{
+ key: key
+ }
+ }
+ // use seed bytes, usually for testing purposes
+ 1 {
+ // if you dont provides seed bytes, it will discarded, and use random one
+ return PrivateKey.from_seed(opt.seed, opt.kind)!
+ }
+ // use private bytes, usually for testing purposes
+ 2 {
+ // if you dont provides private bytes, it will discarded, and use random one
+ return PrivateKey.from_bytes(opt.priv, opt.kind)!
+ }
+ else {
+ return error('Unsupported flag')
+ }
+ }
+}
+
+// sign signs the message using this key under desired options in opt.
+pub fn (pv PrivateKey) sign(msg []u8, opt SignerOpts) ![]u8 {
+ if msg.len == 0 {
+ return error('Zero length of messages')
+ }
+ if opt.context.len > 255 {
+ return error('The context string size was over than 255')
+ }
+ out := slhdsa_do_sign(pv.key, msg, opt)!
+ return out
+}
+
+// verify verifies signature for the message msg under provided options.
+// Its possible because of under the hood, private key is a key pair.
+pub fn (pv PrivateKey) verify(sig []u8, msg []u8, opt SignerOpts) !bool {
+ if opt.context.len > 255 {
+ return error('The context string size was over than 255')
+ }
+ return slhdsa_do_verify(pv.key, sig, msg, opt)!
+}
+
+const default_bioread_bufsize = 4096
+
+// dump_key represents PrivateKey in human readable string.
+pub fn (pv PrivateKey) dump_key() !string {
+ bo := C.BIO_new(C.BIO_s_mem())
+ if bo == 0 {
+ C.BIO_free_all(bo)
+ return error('BIO_new failed')
+ }
+ n := C.EVP_PKEY_print_private(bo, pv.key, 2, 0)
+ if n <= 0 {
+ C.BIO_free_all(bo)
+ return error('print private failed')
+ }
+ size := usize(0)
+ buf := []u8{len: default_bioread_bufsize}
+ m := C.BIO_read_ex(bo, buf.data, buf.len, &size)
+
+ if m <= 0 {
+ unsafe { buf.free() }
+ C.BIO_free_all(bo)
+ return error('BIO_read_ex failed')
+ }
+ output := buf[..size].bytestr()
+
+ // Cleans up and return the result
+ unsafe { buf.free() }
+ C.BIO_free_all(bo)
+
+ return output
+}
+
+// public_key gets the the public part of this private key as a PublicKey.
+pub fn (pv PrivateKey) public_key() !PublicKey {
+ pbkey := C.EVP_PKEY_dup(pv.key)
+ // we clears out the private bits from the key
+ // by setting it into null
+ n := C.EVP_PKEY_set_octet_string_param(pbkey, c'priv', 0, 0)
+ if n <= 0 {
+ C.EVP_PKEY_free(pbkey)
+ return error('EVP_PKEY_set_octet_string_param')
+ }
+
+ return PublicKey{
+ key: pbkey
+ }
+}
+
+// free releases memory occupied by this key.
+pub fn (mut pv PrivateKey) free() {
+ C.EVP_PKEY_free(pv.key)
+}
+
+// PublicKey represents public key part from the key.
+pub struct PublicKey {
+ key &C.EVP_PKEY
+}
+
+// verify verifies signature sig for messages msg under options provided.
+pub fn (pb PublicKey) verify(sig []u8, msg []u8, opt SignerOpts) !bool {
+ if opt.context.len > 255 {
+ return error('The context string size was over than 255')
+ }
+ return slhdsa_do_verify(pb.key, sig, msg, opt)!
+}
+
+// dump_key dumps this public key as a human readable string.
+pub fn (pb PublicKey) dump_key() !string {
+ bo := C.BIO_new(C.BIO_s_mem())
+ n := C.EVP_PKEY_print_public(bo, pb.key, 2, 0)
+ if n <= 0 {
+ C.BIO_free_all(bo)
+ return error('EVP_PKEY_print_public failed')
+ }
+ size := usize(0)
+ mut m := C.BIO_read_ex(bo, 0, default_bioread_bufsize, &size)
+ mut buf := []u8{len: int(size)}
+ m = C.BIO_read_ex(bo, buf.data, buf.len, &size)
+ if m <= 0 {
+ C.BIO_free_all(bo)
+ return error('BIO_read_ex failed')
+ }
+
+ output := buf[..size].bytestr()
+ // Cleans up
+ unsafe { buf.free() }
+ C.BIO_free_all(bo)
+
+ return output
+}
+
+// free releases memory occupied by this public key
+pub fn (mut pb PublicKey) free() {
+ C.EVP_PKEY_free(pb.key)
+}
+
+// the biggest supported size of seed was 32 bytes length, where private key contains 4*32 bytes
+const default_privkey_buffer = 128
+
+fn (pv PrivateKey) bytes() ![]u8 {
+ priv_len := usize(0)
+ priv := []u8{len: default_privkey_buffer}
+
+ n := C.EVP_PKEY_get_octet_string_param(pv.key, c'priv', priv.data, priv.len, &priv_len)
+ if n <= 0 {
+ return error('EVP_PKEY_get_octet_string_param failed')
+ }
+ out := priv[..int(priv_len)].clone()
+ unsafe { priv.free() }
+ return out
+}
+
+// the biggest public key size was 64 bytes length, where public key
+// was contains 2*n, so we relaxed it to 2*72 bytes
+const default_pubkey_buffer = 144
+
+fn (pv PrivateKey) public_bytes() ![]u8 {
+ pblen := usize(0)
+ buf := []u8{len: default_pubkey_buffer}
+ n := C.EVP_PKEY_get_octet_string_param(pv.key, c'pub', buf.data, buf.len, &pblen)
+ if n <= 0 {
+ return error('EVP_PKEY_get_octet_string_param failed')
+ }
+
+ out := buf[..pblen].clone()
+ unsafe { buf.free() }
+
+ return out
+}
+
+// Signing and verifying Helpers
+//
+// slhdsa_do_sign performs signing msg with SLH-DSA key.
+@[inline]
+fn slhdsa_do_sign(key &C.EVP_PKEY, msg []u8, opt SignerOpts) ![]u8 {
+ sctx := C.EVP_PKEY_CTX_new_from_pkey(0, key, 0)
+ if sctx == 0 {
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('EVP_PKEY_CTX_new_from_pkey failed')
+ }
+
+ // gets algo name from key
+ algo_name := key_type_name(key)
+ sig_alg := C.EVP_SIGNATURE_fetch(0, algo_name, 0)
+ if sig_alg == 0 {
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('EVP_SIGNATURE_fetch failed')
+ }
+
+ param_bld := C.OSSL_PARAM_BLD_new()
+ if param_bld == 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('OSSL_PARAM_BLD_new failed')
+ }
+ // if context string was set into non-null string, then we set
+ // `context-string` params into context key generator.
+ if opt.context.len > 0 {
+ // OSSL_PARAM_octet_string("context-string", (unsigned char *)"A context string", 33),
+ o := C.OSSL_PARAM_BLD_push_octet_string(param_bld, c'context-string', opt.context.str,
+ opt.context.len)
+ if o <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('OSSL_PARAM_BLD_push_octet_string FAILED')
+ }
+ }
+ // handle entropy testing
+ if opt.entropy.len > 0 {
+ if opt.encoding != 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('encoding need 0 for testing')
+ }
+ o := C.OSSL_PARAM_BLD_push_octet_string(param_bld, c'test-entropy', opt.entropy.data,
+ opt.entropy.len)
+ if o <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('OSSL_PARAM_BLD_push_octet_string failed')
+ }
+ oo := C.OSSL_PARAM_BLD_push_int(param_bld, c'message-encoding', opt.encoding)
+ if oo <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('OSSL_PARAM_BLD_push_int FAILED')
+ }
+ }
+ if opt.encoding == 0 {
+ oo := C.OSSL_PARAM_BLD_push_int(param_bld, c'message-encoding', opt.encoding)
+ if oo <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('OSSL_PARAM_BLD_push_int FAILED')
+ }
+ }
+ // build params
+ params := C.OSSL_PARAM_BLD_to_param(param_bld)
+
+ // Then init the context with this params
+ x := C.EVP_PKEY_sign_message_init(sctx, sig_alg, params)
+ if x <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('EVP_PKEY_sign_message_init failed')
+ }
+
+ sig_len := usize(C.EVP_PKEY_size(key))
+ buf := []u8{len: int(sig_len)}
+ // Do signing the msg and updates the sig_len.
+ m := C.EVP_PKEY_sign(sctx, buf.data, &sig_len, msg.data, msg.len)
+ if m <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('EVP_PKEY_sign_message_init failed')
+ }
+
+ // return the copy of the sig
+ sig := buf[..sig_len].clone()
+
+ // cleans up
+ unsafe { buf.free() }
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+
+ return sig
+}
+
+// slhdsa_do_verify performs verifying of provided signature in sign for the msg message.
+@[inline]
+fn slhdsa_do_verify(key &C.EVP_PKEY, sign []u8, msg []u8, opt SignerOpts) !bool {
+ sctx := C.EVP_PKEY_CTX_new_from_pkey(0, key, 0)
+ if sctx == 0 {
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('EVP_PKEY_CTX_new_from_pkey failed')
+ }
+
+ // get the algo signature name from the key
+ algo_name := key_type_name(key)
+ sig_alg := C.EVP_SIGNATURE_fetch(0, algo_name, 0)
+ if sig_alg == 0 {
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('EVP_SIGNATURE_fetch failed')
+ }
+
+ param_bld := C.OSSL_PARAM_BLD_new()
+ if param_bld == 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('OSSL_PARAM_BLD_new failed')
+ }
+
+ // handle context option
+ if opt.context.len > 0 {
+ o := C.OSSL_PARAM_BLD_push_octet_string(param_bld, c'context-string', opt.context.str,
+ opt.context.len)
+ if o <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('OSSL_PARAM_BLD_push failed')
+ }
+ }
+ // for testing
+ if opt.encoding == 0 {
+ oo := C.OSSL_PARAM_BLD_push_int(param_bld, c'message-encoding', opt.encoding)
+ if oo <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('OSSL_PARAM_BLD_push FAILED')
+ }
+ }
+ // build params
+ params := C.OSSL_PARAM_BLD_to_param(param_bld)
+ n := C.EVP_PKEY_verify_message_init(sctx, sig_alg, params)
+ if n <= 0 {
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ return error('OSSL_PARAM_BLD_push FAILED')
+ }
+
+ // do verifying of the signature.
+ m := C.EVP_PKEY_verify(sctx, sign.data, sign.len, msg.data, msg.len)
+
+ // Cleans up
+ C.EVP_SIGNATURE_free(sig_alg)
+ C.EVP_PKEY_CTX_free(sctx)
+ C.OSSL_PARAM_BLD_free(param_bld)
+ C.OSSL_PARAM_free(params)
+
+ return m == 1
+}
diff --git a/vlib/x/crypto/slhdsa/slhdsa_siggen_test.v b/vlib/x/crypto/slhdsa/slhdsa_siggen_test.v
new file mode 100644
index 0000000000..d6c438fa7c
--- /dev/null
+++ b/vlib/x/crypto/slhdsa/slhdsa_siggen_test.v
@@ -0,0 +1,109 @@
+// Copyright (c) blackshirt. All rights reserved.
+// Use of this source code is governed by an MIT license
+// that can be found in the LICENSE file.
+// vtest build: has_modern_openssl?
+module slhdsa
+
+import encoding.hex
+
+fn test_basic_slhdsa_signing_verifying() ! {
+ mut pv := PrivateKey.new()!
+ msg := 'msg'.bytes()
+
+ sig := pv.sign(msg)!
+
+ mut pb := pv.public_key()!
+ verified := pb.verify(sig, msg)!
+ assert verified
+
+ pv.free()
+ pb.free()
+}
+
+// Test for SLH-DSA signature generation, for SLH_DSA_SHA2_128s key
+fn test_sha2_128_signature_generation() ! {
+ for idx, item in samples_slh128s_generated_signatures {
+ priv := hex.decode(item.priv)!
+ entropy := hex.decode(item.entropy)!
+ msg := hex.decode(item.msg)!
+ sig := hex.decode(item.sig)!
+
+ // key options
+ k_opt := KeyOpts{
+ kind: .sha2_128s
+ flag: 2
+ priv: priv
+ }
+ mut pv := PrivateKey.new(k_opt)!
+
+ // signing (verifying) options
+ s_opt := SignerOpts{
+ encoding: 0
+ entropy: entropy
+ }
+ out_sig := pv.sign(msg, s_opt)!
+ assert out_sig == sig
+
+ mut pb := pv.public_key()!
+ verified := pb.verify(out_sig, msg, s_opt)!
+ assert verified
+
+ pv.free()
+ pb.free()
+ }
+}
+
+struct TestSignatureGenerationSLHSHA2128s {
+ priv string
+ entropy string
+ msg string
+ sig string
+}
+
+// This samples of data was copied and adapted into V opaque from
+// https://boringssl.googlesource.com/boringssl.git/+/chromium-stable/crypto/slhdsa/slhdsa_siggen.txt
+//
+const samples_slh128s_generated_signatures = [
+ TestSignatureGenerationSLHSHA2128s{
+ priv: '4329f96b412b5d5ca9c730c9d54e52595265f6fc3ea67c183aa7043d90e949b8fd320c8fc0fa6a23462483535f131b9ea265848e7bb5f4d3cfd99de2595382b3'
+ entropy: '65ac888a4cbd14aa5533e8685b0cc0e1'
+ msg: '707951a4c5040af79e4dbb1d5614ea77ee58a1b16d8c17a40abb01499d1b65f5c55b517b603711e5db67f758cf6717aa10cee53b4417b4c1f4b1dcd6e9e65e96a68b856ebefb45d394e6c9214d0c55e692eb2ffbb10b804bc91076a50aa5cba4884564254ea99540c99647c4637ed26b57e77cb58be6db0ab0d418543b0f69db'
+ sig: '136e72a8d764f24962b52245fedaaef9c339d972d839a1f7f33d1d6e2f1ca8c1248999a12f22cfcac4a46ab69b13304489240ec009a72198942bde5c2bcd67bd899f6fc40843c17580828a012bc235a94e4b3d5a5a18c7977f119bf1634ce2adbff5b3e48656aa69826584d1309649321f2aa6389626658eac20a48bdac6540af45baf8937ec2f97c361e3e5df8ba1e7633bbb1aa63800c2b285a0abb006fe47bf0c25fe3770ccf4979456f4227ad50edae1126fecb5c267261dd9f4cf9eb5e8763a9eaffc8861cfde3be4a28aff5e60cb54f73cbc3362d730e06af762bcaaa234173570aca0ed0833979c4daba7304948f2546a954aea75d296258d7136ea0b5c7fb62e0de3502e8f8482fc5c51010be81e9ae6ed867c249163c3a2d90c45ce4fce831afe6c7721b6bade1d1057c0981a7093830a34cddc4edaada2b6d50b4cc741210f075b0ff3278973ddbdaef76017fe0b52798886f41480b418404c9ce9a96070e4fbd972bde8a46151328c2181afed161b9f72870e1f96c1bf610642fcf65ce80a9949044662b8cedb16e59cde13275dfcd2d62d98dd01e8d9a602ae2f8dd48905394ac3057c5d37bffb02bd8dbcc5d9ebd851fa30019e2df181f6e1729b1ad4de384408a3f39b78ae9c4b2fceeb07f1a95a1ddaffd2215df02b3c589854cff081a7386c5e92d1af1ecc56c51d688a4ee7f3a483abd9a1d25273e7977d9a2648d82d551fb4f7ed5c823aedcaef272471ef3cef7ede7cb78bd103332ede5e9a8da19dcf65a299b4af23a57a2913f04afc370453564b8f62375ab3d0ca93a13f106f555fc0ca2330009bb041c6027180dba18b9286a92fedac1bb5b42dd1881f007f0d16800d1fd87cc059e4964c61ed2660b296dbbadb76c852a9e16dcaf96f687664dabcb96a5ba1ba4c42ccf82175063d81b6524267bdccfd80c5414d304232e4d26d44b456652d0278a84a1038933860a4bc19cadb82a5d112ccf9ca684058cdb2c6d7a2249749c375d9a94d5795bfe8733f93e4d5c7361a81adc499e4d11802841f41131724546fc6e4d9cc47c74c5b90ab60f9cd7c2066363fda14736378ce5fed35a4accf200cdab5d0963c40e1a466299463aaab60ae9242d6bf41d575a4932936b1843fb389c785250be0f1ed7295d1d039f0ef2cb5cdee668cb579f9db6727d6618ec1c52daad824b355c157e70a59457daa922b943ffac9d2fd4a5fe25ed453e642ef9a329804407c2c585781460fe16d713cf3a3d1573c4347a936ddc3c380650c0a7def8bfa5cde285c3ee71a4b69654e8f2e2797400907d35ab13ce35fb3e297ef62bfe6d15c9fc741618756416a8bc87770025b3fe432dbc3a60ab0a8075c2bfd1d10f3f01ac09475d4b88348e20930ba252f39345c37acdfb5f413018c78f0838e1f561d4a64ace9e2adf7e92be50570e805f8ccb8b87db71e3afaee1a538454bd4770120733ac5a9db705aa0396380a832438265ae777dfdc27eb9df853bfc2ba4dce83bd41413b0cc3da9687db8cd07d37b668f2a0a48dc0e535c86e31f57198c4222754a411e74f46b32d92ed49a66b92a69a5c71da1c0450f8fe0f1a622aff6de03949e06315b6ed81e7b885fa5ae680d36b7712b16299d1e323d89446a499a356e31778a0d5c76e6681039c17b35b7b578f8381062675754ab1b4de49af29e7d6c360a156ac0dd505378d1bdb9dc611fd6874a22a17598baa7b972d17d14febe7c1b2415f5d1c107161bf9447b1bd59199ce95362b5e1b80bbfc9851dfde80c26c28336a3ffd67dba66714ebbaf0f9d76907f7338300c9de16e2254715890d4b3c8944450bf881db83a78dbad091394e4dbd09394f2955aeb9e43afe0ab753174a83fb214e3187c66a23766c52d7e0ad944de19d7aeefbbe4e6f288a4c039601905e2f05d0931618a03e3f5896da4c9fee1c9d01b2ff5ecf23e7bcea36f26c8c4e50d4ca1a6af3b91143e135a9c73bd263fee460117c1badf3dd0807eaf42bc5656a0b8c9b0a5a1099338383adb26968d136845a750961a15abd55373e11945f6e746f1fdff838325c39c2a47095564040b31e2d181f647090a89687a78a0df574bbb25924b887f72d93e313a6f4dc5e3a0370a15a541a02fe07646a59e34585addf83ae66a58577a20418438243cbf891b81142696e3970af0cdc5df1cbe9d57f2364cb3f4282c68132cee8963b20aed5bc5abb0cab5676467f1d9ec82b919daba3d82503beb4a87b4be622ef3fdc1f43c29230ee362049f9d34063938befaccd7e300603eb79b34f9946c2d082e64db5023f2e289cc6d2fc03767c894ce704456306c733639c814a23b085ac8ca966f7afcb6b8f38d0404fc0a0b4c25de3737585f3dc4a7f8079145398ca4d032e4526b80d6185ecd6a09312c612d903924ede98336f578413e520f6d41d8365352e38fad8836ceaa44441836aa4dca93a9671f22d358d771d008ed0689c2faa7ee16e6145f9eac030073b6df4e68cbf26c84d320239df1dd7bd36fdd1693164e060c4e408b02b00e412edde1bbfc3d1873e4e0fdd3bff4c12eb57f393a59b782590000b47d897fcb19ae53a3783c8a15ec9698d3451157a569d4cd143c23fdd0db0a78c25c661911137c137f38ac0a7c5e6fd6058db5ad85d8459677dd15ab4c16be58eca77aee1372f774b7e5a5cecd806300962a80be3b25a7afea5bad71dc1ed923e388bb2c4be1ede0b6c030a07fe8b0af2f13c1c6c18c6a86da8fe202675193c84f9850f5c0642ce601301496ce263755c59dba98d5a10190969e2f572b282aa81d3018b517a7d0fa09d2e96eebba51b9dc13309c8c15c4f48dc3dcbe3339d7409bba5227b19769dc35fa479fefe054f071408c37546f9bfaa2667afba9665e2920572e3254ec2a3926c273c50fb6328db1f33e145c198e24ac4d4504fd819702724ca05e94b295acc8d822c8871a70a38a67fdf36be6fb5437a789397c15c2604ccf09d12cc5563544a31f98a6738be99d763f74d3662142f1744b4ca91fe57efe7c5af92246a54634e49de35f2cee5f5b9f3e6f962656945f6a3233a5ca417603997275a10f84e33b7d357d532082a65f0135571b8cf323aa49d6e61cac7ccc3de0bd64a896c2d587047d2ef13306034aa9877351e246daf297fac49a015ad47af1e1714ec64ed0a6004e1194b7c56470f543176fc04fd40e251258f0c04011eebd39824886a1caeebc2cb19c8eea56435d678a93c8b71c2902a5b866d82cbf485219ceb34c8135692a0963756b38fcbf6db0d7b79e2f36626bb9b1ea78912535dd43bf199fec9576b0569394b8bef60298b8e408d7390370c7b14f3f86a2ac53dcd0759ca1e5429d10948458bfdd8639fabfa586f757fb8e6a1ef044d661e80c6d3403dd54d2da5a6e662ab81c30be433c2f42d231f6e3b911ea70be32c9de4a9abffd6e0481abfb7f3cc2aeab33f35f2c74cf4f3382996e826897b4629055a97686dc6f1591fdec91e0e3f227690463d2bdb8cf5fec0994733e8737dace968b1a873d00bd47b5f0d5b899ee1b151001fb6e3f51a52ae3f4a20671830b72ff8f188eb2f39da3abb89bf7f25ee8534cfcbc3d91078632d19d2de81eccde9b131f7eb655140e7326731486a261558c05dd7424c92cb779b108425d2a3a9cb3dd8bb25f6a1f077d97ed87983e230d6d82db75e4458d290d9c68ffdfa2f3aa05b3420b265b32676ff4e2a5e6154eb7cb12c5e5bd14fc43ed63803775722eab9bc882c4dbc868777a81af41ef0fd4f5e25ca00406d6bbf254e943fdfc1749410c167d7c02b59e91be1c2df659182a3a17fc6378c90df774f11288e8e64f4ea4bf9ada56dea6b3360218f9cf9f4efd1fc0212648cc169ca821936cc4867e05879141fb30553bdd4e99695790d7c6855792834c796eb3da326dae486501cbc79cd6a11ac37087b42a084bf920910e351aaba3cce18ef72dc1d397a2331aba207599d7d3a4eefde6f48e3c06d73c60475ca7b692c83dbe71b97848fd66b7dcba6e8f0562686f9c168508841bd64443a92283b3159b96767d1a8a8901c923a95a0e729c08b83e29fded80b5df5111add2de0227a5e8e903641fbe14de2c7768ed6a2b6a4108e70990179b8d7298fb6049ca0061b770a0a8887aa3254758058924533e691ce41be493b49fa4273e20ac1659d67ad754797ac61894341ae13a383e1474073663ea0c5bc9d1adc4f45819b4a32f87d6ae9723e0e047452318df5eb273ff0464bfe6eb953130ac250fdb57a60e1e5260844e634df49d5548d6fc45b1a659166da958ca67579465367ce84d3f2d33131f5c6909472549876b151fd2f6274eb362d964aa891f2cc906592ffcdc89079b7228981816bfccb58b19c82b34531c4ad940eb032547711a8482b32148bd5587e887fe8aba185390aa8d12e3f3562e1d77165201492fa24c07080996a0ec641c4dfb1f166d4d99e53c1aabaeefb5e51de8e10c8d239cfc9a713b086d71e3eeb645f59d5c99ae9e9246797142e9779b57138ad4dee26e682c05ae05a0b8d8c292a2cc66dd8db5a243f65c0d4af0fc39cefbc9d4bc2e4402a18138fa5ebc94c08f3f52956c498a922c8b23ee610700cdd3a59eceb4680dde5e69c5aaf8e9f70ceb48676d50a3d2f5aece48abb3cb9f148269b5abc568140e5dc4495b9328dfee2626dbdd3d17d2c40460af4b0c77926a9dbbf525e3eb6e9ba2954198915217dc2606bcd976183472972957c1a6c25cb52ff4b6e98cf2d939dc344303a69556d5c4430828310200b3446ca38442b492e496a7e6166789b09132aaaf26d0849f263e674bb262ca9bfd4227f0151084009849034218185dd8af5ddae6582ce80dbc05b04ee76b03a476e656e5f8a3a36eada242ba24434cd275719e09e784a33761a4d797b175807ca579cd66501b2fa1191c5f4bb7d891f572c0226281136edc3f571e7435327a105e90aee937aef9e31b8938580447922b92ac877f21b080d8c798f6676afe9351c0cdb74eb06ecc60f44a50391533f41883200deb85529975db0209e66e5a39af5b549b83daa68e3e3025a1be7567534eb1812103de02195020de929495011bbc6061fe044a49ab5b12867a14293bc7e49e2d8856bb8b2112c59aeebf47ef7bdecd0b8db5c12689f000aeee79cee476b85fbc773cd68f0c68d3d66afb356528a59853b1a0a56ccec151bd0de647cc68fb511b74a93f0b950265b031ee775f5c8d19224c2891879b9b3ebebce771771ebc26688d4bfa9247d8e550451ece3eae8ad2b0aebf8f655a4fafbc963e173f8117b3e00d80faf525cac29e1370a8f718f7965948c6cb1f29b6426b8448d2281d6e1baabce497f22244ff33c2c4b7e6bbb39af48b26857df0f83f3c9a8b65ed3c164b246f9358ed68d5c8b7c75f291a8b58788f2a9e99beb79d86d92f8c9a00d0e58a9fa0f5a8fd8beabfa45e559fc047b04a89dc103af2558e7d22de8b3e4bf8d36d1276c74691552d5ec1cc10a1d8547ac3874f5b2178ce12f3d47bfbd521669780bbd1310d7604c3bdce634af13cebc23a61b1847dcb7fc69ee45af5404e893f7809854867117592204c8000e14e38212fe82891e2e069d058302738acdfa344cd7a96a661e9d8bb03f17eb1826908fa466b8065d1f43578ae06fdc4f897f81811c7796ca6161cd8af82e3855727722118c03759319b8bd5732a1d88269594c19a0492979d410ad9d3c92c0ddd6c87110d901f21e4dd84ba6652ea6f02155fa64ed438a735a9028e149da42139eee3f210f000bb701afed581e77638370a8a7c206227eaeed3b933348dcf1eb43cdf866a50e2d2f810e6d23dafe2936e44006621cec359ce1e460420e4967bbf40445581daf0b8c7e56e6f395ea52451679988e542f14150dc65d39857f94e08e1bd32f561f03ae26eb4043834756282824da13cf1709d1e0ed8cf853c13934cbca75f393f139b23c8e57eecf8087bf89fdbe58d04f92950e931ac5b2c718ed3ef340d60d97974a8bd1eadee0716b7913360e9ef1b8f3f7bbfde12c7f7357e98883022a9c0e255f00294c6571a586990a63e431d6a1d9bff114242255e60e39037b4b1ba88408ebc9d6df1a97f2488faaf1fe25ef68e489d91a5704ba1f13a2dc026903f69b2d394a8209a1125a4a01b9d45e07178940da425b017a63a09ccfadcb0ab5382a2a6fc56e454548d7004c346155a470c7371daa55f4128f0e97551c06122953762da2bb4043a3a3ab6f5c1e0a928b8c2bc3f28e69a0453f6e6410d773fe53aba65692688ba670505a645599367f9709305fc10b50c631db2cedbb3208884b24d6239d34854aca89928686ad277290ba76bfe3d3a47d814dbd61e2baafbcfd3757773c9c3316d288af893900c8ea9bb41176ff2a53e2f5e3d88275fd6bb9b45bbc46c336607112594bdf913504f135348c03c493b7de46a49f93980938e3e5b4f1bc2dd473fb3c860aca1bc0c09bb4cff4fab714167a25a3f73aa8ba2ae7e798822a28800a4e36825507113243718fdcfe0ea516efdc791c096f2df81a2fb0ca24fe49354d84435d68bf531a9932594cd7e37a9a725f09e4d47da8b0f424851566105c8ca8392d3797d11f7460c854412de4aaa79409fab09743fe0216b4bb2a95496cdeb60db342f26f2354e60f2ebb75f0f61df08dbf7dac072075dc9bf8539b0582ccad8ac2a667f0ac7e192521a952129adf474f7cf2629f0cc5a43e646b29ee3b4d49947ad83612f8766d066600e8f84350e1f3a74716b36e6e0d2506a8c99a7e86b9eb64e58afe7f1933dad93374debc6b6b6db9e7a63cce07961f2951699b590e43b2ed85336d23300fef4edb580fcfbd40ca99f330543115035d9c32f757f3b7875e987512e1cf99b1a0776cb3de3b66093a5199af73dda789e05c867b5abd924983bb86684bf11866d4bc9a2fbf84b99755e04af4976ead680c64e5893318675609a97a699f2c868b7e005e6bf65b4fe7b301ac587a7e787a44d353a496e7306bc156f8d6a2a593030472aefeace0ef3e887b0601c2c86fec0f8a549ee7d4ad08c70f24080d7323ed082e817f2000fe1aa7dd75c9f1bc62352118870daa5a50af0fb15ea98ca25e8bd7e1ea80cf7bcc9241ab86c3e110936fe1ef07f89f4c6a275d8efc8189075a07eb9fc7e2ff855170bdc5535a4b0d2131b429f0b6828e84a72da51176057e8d99481d5f2b1f286ffb9557156a86bea3fe3815914eb23cd17b8286fcada424d408cdc7eb9926b69731387f43c9ac4388ba19bbc550fd93f943766535a8c5a6ab6173dbbc38c73154210964758920bf450aa7cb1664b97b0fdb226f0b2fd0042eee8f55af8b2435c087532beaa8695f1615a1bf078d8665e4b4725dcc64aa15f5e12d81bbf89388e8865daf5400e56d5517365b622d1b1a8f0b0efab8093a181d177bd0163e74c73bbd0422a3dba5da4bd455e5a92fde86672b59044ba7751f7868cf8e56909ce82aa3b6872e624d20912c3e28dfb7e4ce187febf5cb642c90f33c85eb572915b48fc284d6fd74597910020d5636ab146b491434edc362ae968c06c70bc4621b95a2fbcb89ed70bcb42eddafdebe625f7b68668c7584b5b266bac5745aeda684b9cb0a755e8724888e52e793421597dc317b26748111c6be1ca744a5ccdbd918db55f4c3400cca27fcd78cb4f0729be6448d3806c3f5bd7be93adaa5689af0443daa1f4816a7d2d15117f1b92b34a6cdcfe737c76ee199e6a3457b9a0f4e1f1296616c1273c3d744a8dc65a057dc071f177e56553b7305cbc72b8a721b90f151fc5231840274ebf0e9898f3210fe46c15107ec6239e897f7220af2af6507831dd67fd3ac936bcbc7ffc68058caf105bd70d587111bd170f311f9aa863172e720fc6d134f9edf52a27bd3cf3fa6e8345080cf1881322fa33ddfa9e94e0ee09489c92bc5d142e1316996af57b7f4934594a8d10e4fcb01fc0e3eb870b28d9eb6f064be444c080552526e23b2a03ec3d7c5a89e8af498b729ac36ea84e961d905fcf646a4636bf19cdcb688c94dadd94d288068e6e72d89450d44d9d258ad3e56320ea7834d07038c011ecf7b0081c58e85fe4856a5ec9d8ad0692ffb71f4e1f50292870346dbc1c985fda23ec021ca9f41e3f861dfd4d954e8cfdb352b08d016a1fa73e5c9935702d7d12392ff194b83a504c018ac6c146c639bd43954808d41c4deabe20d7b14242c0fc9476d7cbf0c78e16fca8a5e78efda6cd9ea1a3967bc407980a66a585f35aebe6f4f90b1d410d55b52ba01fb58242ef7f297c72e63f3d155bc46589b23a9438bf7bf50137609362cb33ea9e77b223d512a640d4505367b44d94cc4b330afe93ce8c231ad01ed0cc1335b2032c235d2743179e641f1e5dd72f84700e0246a814d29cbb07343198422000c32b53cb798ad3da8c2046106a59cc20ae47e9d20435e4d5fb642638a96ce40d5036ef8e1bfda0a297a9e64286eb9b73179617a77e1ae4756161cf502a4a5e6de5a99d92ebe06aef0eab9442132c7b26aa4772f5227afd85d8214bff932808371f59a0f342663ba8f6541e1e3b52fd2c8a175fdf2849c2e00f81ca99a0a86f6032694e66d338c1fef2f9fd4d74bbce45d6a5729aa43316f289e1757a32d1b365bee1ce96dcb29d97d6849c64c6908840252d60a7600f0fede11d4da76b86093af74e3d849b3e0267d9fbc19c7b9e4536a7243993df0f56e4bee0be41a0ce7201ebf99d6ed5a63b84eb2b9a8b816fb0e7a91ec27317dc94a99a0cb8d34589b8355d54bc1a7b80384aad4872bece97ec8ab3da62dec789972a45255364dc5e0e855c7d8786b0a24cdd92567cc9bacce8fb45d66af9c5f70bf56fd86f921f3fbab99b969977e5d0cb8df4cd1f0389e15332de8ef624dc533de65d07bd2571f36cfaeb9d6f888c556c808595311a0a919870daac49882062a130362f1847ba401975bea150e4cbf5701df1ba5660c638438bfbd16a079ded7c870a1aaea1d919cee950d22e366b69e3b39e998e152a96e399d84bd1ee49dd978e50644cb7a7c9137c9558a6e7b0e3fc925af70b376eb824a5e3619480d92d348e31fc5b362e4f7a86251e71824c826daba296cd041a8451efdc52ed513e7d770427a16d8efb940817a74d4aeacbf1f7c006edc29a0c3707aeadb692cf31d7842900876c4f91f1ae174beebd8addde0f8e8e3d5c1758a6afed4494991e8f5b4658576ccd14528368c31b62b2dc110ad6835f4cc1eea4864560a169150e34ddc9cb1816ceeeff7999c7fd48c27611f3b79f61f29d0b3fe678483823cfae42b818700983c1f67e8ffb96acce3a1fcf5632a28dd89397c752c785d18056815ad8a15fec7f4f09db7b25e8a4045c6e33d9c4f3616f8e5db07e1bed1546bcddf18c343e04925d537db65aee009cd6634ecc32e4962318726cbd0c48a421deb93f9a26bf06b2c59ebd81d8772d8fbf93d502316e8fd1ff26b55d8a6d0e18d862490c3e41827dbfb9fd3c638f8c7a93bf97229c39b8f777f5ea26ca0f7e4c4d366e9e236dc244fcde22a0db3a7c9070f337f1ee7341069ac525707558bf05ab77a796d092449697f82e00b1a72863246a05b0af6ed66a18499320deca963a43f50ecb4b44328d4e91cd1a8fc5708cb4d74723a3fecb2b956e123e5b05343dcc174ef235d6c985cd7c421c6a0d989ebc74ecd5681118fdcad9e22137768d8cff89972ea93d1bdd55183331ca712c78cc39909481e9b07a122ef395f084ec1cec601e0c28504500a4410abaa4bf2b66765e28d138b6fb1397053e97993268287eb98a2cbe5e4d070f5c5320ae7ec46e24728c7a2072e79ec5cc7a4746e3ca4cf978c2302cd67fdf097861f487c84c3223f214bb89b33ef3b07ba5465b66dd79aa922f6997f4ec3a1bd8714278ea83dde516defda690f06348b8fd10f2f8f4013f55e9c850bf3df32fc5c04fb642493a1b2734c61fc0f5219e9b5947b4aaf933cee61ec7129de8c101480d0e966770eb71f8fc7c33775f1def2c6b2f77d38791515683af0f8174b1cc292315b6ab2f58c7d3ba55da49fce7af0c123c2e54116b1bc516b424d840f1bf90d52129f5b70e4e7dcbff048bfca03ca96828f7fa22e481be38fcf002a1be4673eac7a0e76c8d8f9d4daefafa736fb9050be867249fcd832f7829018d4a40ee53aaba9ffd307b3cf53eb47ce31804feef5f63ca5a20b014d50e364545a0331dda3fd669ea45b255a9197fde9432d98997036f79247c206e2d8ee0fbf1b6eff3c5f907d32d7cffbdd727f52bace5d22a68afc3615d2b2e098a09c1fb9873277494970b415d73ec3122ad20367a2d96e216f7fb20fa4da7ee9d1aa8fd4cb3566c06c930035f63892865daab1507e807a3b3b20ef23c911f65a9a256f6f6e3df912e2242f9c58c4bad60101e234b4cf122746f205b358f4672ae14eca44136d75bdcf36c655d29753c09cd35c88a97dfe9a30f6c5b084259106777327b93c01db395b9be0cc87169e9aa9346bde74d583059c5b3d2f887a4d15842854d3a074d09f1520376cc79a2f25387f0dd56fbd1f59fb62d384f76847c2efebeb707d9686687132fb0b526b73ec3aff7c05c60412eeb66269224eb717196571fad9e55ddc2dbfecef57d51a4d09999c256b9de8ee01889b6208159086d55602c8896513997daaa3f804ab8096612a583ae30f3f52e0ed547db15b2a32f6af6b5c23862342dd9fe5dc55d8b3aa25dd84a955f3a891bfc693384b3c4d5176751e477324d5518931ed2c13aeda3e1f4563894076c47c05f8235c1f36820ab51708ab0b12069ad359fe31a93b8d16f0e4c9b7b2b67447fa36443c0a55b4369ebc847cff4cdbb0744e2818886e287e5f54f9598c621a32276e8c7750c131dac272dacec34accfc4399323dce7c127083eb838e5a931ac10d052bd4c5b81916a4d68747038390f1f4d781d3c1ffbfdbc4bee1c602e7317a6497592894024352ffcf18512f73352c9837e074f3c4c7f60b1b7f679b8e3377760a83e4a637b89f8bc98f45b387c3900dac78314fbece2cf0ebcf6eacffca1db8e4a3e3f7f063615583e3f2b7a944e638169892a7f0e151f31435dffe542a6376535b70aa62488bd0452a1'
+ },
+ TestSignatureGenerationSLHSHA2128s{
+ priv: '5c34d15e5931c27c976f7044d18f24e11a268267de70e8c86e1e90f888dd692fb534c67bf12f66252e772e66675c46de3aecaf7da2a98e7971b1a455eb4e1300'
+ entropy: 'f93091ff5b082105513400726dfbd17b'
+ msg: '2d884fd72a2daf869220adb4abfd959ebbfff58b3e74676afdad958ef77b'
+ sig: '369288da6f9fab54421a365462580ef9b385cd5cafe3ea68d7f8a48e4ff3b2a88bd6c4ee0d8e62354386857c7ac7e3979571b50435656d112cbe94f494446071e5f3e9056b498f4c32a1515b72ecf27cf36ececd306db293dc83ca7212bb0da2fc01aac45f44aaac157affd1e88a70482b4f2c352554fe0b61d14f7b360707df6d55595516b2411388e51d8b558c8fa2e4542465b2e9ddd9e3944c252b3d1304dada55c46ed1cb2b6368bdfb70678a3b79ac5c630f8b26b6175fe0fcdf12494c551fe135adbdc2cced3689244f3b525211705ea469a153bab14fd77b83c0583f64ad5d83858e67b753f8f6643157941b1a5c41b8141440b2d891ed13a69f17412dd6aa68747765269cc81ca638b905efae40751ac3a4f5e78abc5d638ac6e4e47dc9a1ecb560216aa765f4675e45b189b264b7edaa4ec501ff6d1d6ab99a5c75d9fc0113bcf26a13f806b7dd0c56c490b74f81c504b5f5d1087dfe29ff93d5852abb53d8e5ec7a6634509c11d63c62b8a519747db311e650e22103239cbbb995848f3163702243253c562bd2bed6515e5ddc75ba8cb7c1bac4d52a470b0a2e0ea58485c8968394a59ce251ddb13278b670e061e81c3987c1943d4e8ceb297f454933f4f16b1a74185f1ddf255e739c743be84dc0eb9a696c9277ec21ef7e20857043113c999f6c1bff2dcf3b73eeb8c43eb46dfadc7883149bd889b1c40b5f5918239fca6ba4c276360086bf323109ec9ce8b848663cd126a42ca9d77c70e51926d27de81bb22aab2a880ea67412a0f8c895a9a10ba59c6470345bbb8f550f11031bfe3b78b2572ec119e908d4785740c79d320e1363782e7a771f36d8bedf9fa1b58f73a9cd952caf9481a8fbe485466d97e5718d57b4a3b7e42a2df4fe15d921b1299d05a6d34fa94c01cd4a8498689d71957fb5eeb45076face2addc83f79716300ffe462a81c4e0bec1665a199ca2b314fc7efc47aa18ced7ed7923d42c503ee1808676b0386c58de9e4bb76f41a58bf6b9dcc619e9faa7867b93a5880f635bb01c253f52b5e1fd1b30b5cbab6c9f01d21c5a1c6345d528c2b8bcd1eca66f97eeb5a4ec6c098e686412a285038b72d80855020b26f9cfd1472cab8b3105b8d3ef6a5c463629ace8a608b196b8c1e1ffd0cdefb4289faba6266a473ee879276605db6b9c78a105b3ab66e743ade9f200ce472be8c0176cd8f66f7acee6213af486ccf55a5c9f36e0a2970d0b38393826a0105544a76a5ea2ed708e5463dc7641e42b2ee03ebc8579df948f43d093c4d9788872c0766c410fd1b377bacefa014ce5861aecc132582f1dabe29b3feba9b96dfc6c75d5a686ce2dcd5e8d280b7b23870e79572164bc5f04b4947881dc33a2f7361353703515927b420f39a74551fcf5939ca870d25735d6160fdb209426d4e7069aba6f261688a4ca99b844c16c35029afd3de0b80be6ba37505c9f952337622f4bb8b2755f1aeafd7e7db6daeae77413cbb725617ed74460d4db8bffe68aed519d9f3d9f7179490da848ccb6947b6fa8fbe18697a1b7d4e95e5a78afcf1f5bacac6e8b55b23317f2aa2902371a1e241700bdca544dfb9678cadfe8a1930ff33bd55294baabfd5d02c7d3a85f2781d68ed95c06ffa037db411dc7075626378318f7567232e25825464a346318d3be98720200d95a6204afbc96fbc3d92eccab3e417813318564f6aa8e60ff4fb8de3764527d77246860d70264f018c24fa7e279c9a3ca22362b8bf3573536172f866ec81de6f8cb5f1f58425d3441cddf1e7ba802b4f199824c5909d17a68d0a16c7a0e394e02b0bda932e7f7422e1211e54514a6ed4c28e87f241209723f0d0b88daabb200bc4518e20bab6b12a493d9d71fd0c9c2dd2fe0438e4898ac7c2efc70fb9c681785a8a9d65a3e95a7aad01a97fbc63da244a8f4e785fc5df12877cbf51f3817f51e74fed7e7937f61979c0974e75535b6bd6cfde0d6f9b67072995a453de195d08824f1e1162c40081d58ff7edfb6c1e7c8fd73ad8a62b909ffa3afa187221c7be3a43910521ba84725657d2ac7abae660541e29f566164a718f14f1236dd8c209368cb6074e4d3b813bda648c5bae9a035a28defd038b81a96dca674a99842b32197e18095c05cdea57a72a40f337fec249bbbdeb04fba805bb6320b4dd867d3a197185eafd3d621a7b3a2c952acf9b8d06dc928814326a46e1cf14b632c95b945142cc46c104a538192f855a1f014c718fe94252e7b67975b0a8d47e5d69d2109d5af072fdda7aa401ed95e9f1fc56cd123078fd81333f1dbe8c6364ff5ad8797aaeef75b15165f4aa819b0e5d64e73c9c061f6b20295913b1a8920b4a84598d3b93d1c57e98b4dc2645def986da5ecbe493329e7d36db61fdabff8a7bb683433a169306960f0680faccbc1476eb3ac0cf1a7b9fbefe478be2b4b2e509e329b3a00345730ced8da0caa34955e2a7e6ed321969c6f6b63fde4d61314cb85f3db302854e9318746ef311ac89819c37dad2b181054206f139d1a85715a7c3d9a61f4462807bcc9b4e9b8be71e9eb22216c46f811b371dac40ffb2be532fe965a3660b4bbdcec0e288a8579ed31d770771796c5bffc212b7e978656b13449733a1c3963a950242e97036d16041039cae1d535f8f707fe4be52a0d93c20f9d8975fe987920c700fdd9d8c0d3dfabf535d4552b7cc1a1ca2a9eebdb494c7c4d7c5642f207784f3ee6c1fe4c259fefe7b3ca8ff71811ab154fc36efea5e6fb1721d0f80c6282451a563e80a7b3b195dc9853d53c2020c7ccd811ba8da967737931525ef6caec872cbd82299b2b7bc90b0c4241f8d00ee0fca135bf5a10926937f7e4d301d2bc87dd9fe90c350f2b34effeeab12a5de2b37eefeba87fe53183747cdee4bc5b54f16a42a6914e5b937242c3e878fa5c048f0d7f4e8664e8dc74a97de172dbb7bf2fb71937eb2ddb5f67f1dc6d15a6cf3b079e2035461dd473a8f6503f976e1c795093429a16d28241dee85804513cdc5d79f79103218159d1072005f95c3aaaa3896c5d47e176a14b955a27a4df7d1b17da170fe4cd8694948f8bff51684556f224df55ff5ffe5e8176d23c427ecbd20b5554e2b5a311e94c10988e1581df886a4aa6d4be348e73856eec14fca5f53451b773c5bf46fa82121dd3a4e7992655991de8294940c1d6c68d5d66e3f05cbbe26400d660bb6643ddb28b2e0566ec9d866cd8d25c71086ad784337bf8f3e8ed0711ee9d75368517f3e09b84ee9a20957b8eb61fd7a8dc953901cbdfe3dd58cdd4bac8059da694dcfc4f8fd643ed3ee5898c474e36dd15d55fc92d7146696c75efac53bc828e7c0b5c0b030bfa9212c6f57da9235bd75ac3b058da28670aa992b55f4a0cabee2d3e425d8723535d46d1a96e4536aa8815f0c35cc46f13b7b49e9b62f0335f904262422dc430501a7628b334ed4072f4f5a2ae0da11101ffcb38d3859f5d93bf6dcf146f10f29c4d9013c8cfe7effb14bdcb47bf0265380c24640889538ac37f940379350263e51e89229daa7250150be12c877186a9427e284b62a8a3a2d46e187b662cd9d777a1e3512b29159c7b63bc9330ba6eb1c1adeebcdabef6da892eabef487edfd9190550cb9bb7dc0f303f3f8fa43e5e92c3a1c4cc6679ed849e3fb6b57ee84d348d5ffb435d8bbc7b31b602e7aea018eafcc84948ded17f56f7c47b09c9f69fbd064d76ceddbdcf0c50017ea4d84d28cf0363e2ba999a1f805092dd222cf03bbdf7b098a8854ca2e67916cd694ac34622f4c180a5eca73a473ecafc55698b9c6ed4f6aefde974110abd9970eac5aa58cd5631485f2ede1634c0aeb17d2ca008ad64717e94a08d17cb9c405a679fd94f206006a0750c359c3db960b427c338171d35f041d259725a751edbeeef4d1ea5b89a3206ca50cbf4be6fb09869002b46d6b268a661c6bb1e19c22efb40909069e664eaf893abd80318eaceba6ccf04e4a06cd54441b62ca47a4e10fda9379233dccc89e63aed22a0b0de76ed6f3eaaf2bdf15b7b822b5089219ac62d388892e881839428e878294564984e06af3c269d0effcadfb71cd37c6a38fe0e10eb3905f53fe3bea47478b75b5ce8922fa75603afb7451713d060358c7a844eb5dc63ef0c6f59b94b20c539ece3f113d2222708831d9bd470056f5cc0416064bb62b4ecdef4e4c5f74222e336951bc46efec2eb0feaf27436b76f6bd47087c6d4283b68771a4126d7002dba36cf5d87762084cf24a58bdcdff515579f1e8e7eb055d1f96e3a419c840a95bd04b811eb435fca5c815d5f0a9de9e46b1423f97689d845761bb504e389e0bbfc19b96efc70a72be066587f9da382c373eafcb71baf3719c71e8e1c09e4e97c7d63a9425fe7e994a92310e5fac32fcaa8eb7544e328825ebdc97da5f0a2f5ce2fec268fcaa22f3adcb18e7abfe8aadd2509eab8dbce58d90c5bd843f2e065c9c1884ad91805c01c0c4b4b08b90513dae93ac1ac4cbfba947315ef1c3919de7d143d7f6ec096eda0c5f1b1e8bd2e717f4368362d2c01804fce51cf1221671fdd1d488e8cbd3f71528701790fc24eb75b5b497a12cf5a243f97abd89161c206179211a84a96dafd5e750cb24641ccfeb3742e4215c9949df651a4230327531aef3215819d53b7a55dbdbc9f1f929c327de3b37dc82cf775bd2f5820d6b35f117ac9f3c7551a21c6becf460398ed65f9218e36865cc6b59df218effe15dc6f5d4e5add5129e3a6c4ed31c06157fb1bd9aadff3e44903b0ecb54fe9a28312ca98a8361796d5f3ca65518992ca3343d2c67a93eeb0be255077b794e1b01d60ff7d8aaf189332d686c39eebeaa97cde33b24dc1e003312dc6137b7206be9979e984d44791c3a50e83e1ef52f9a3d61203fa6549b516204b5023cda19d7a4a786b6abd2ddef9208fae52b8ece5daa3c7954bbd17606cfed19407ff5a628b1c1981e4ccf71ca4e81ea5d084ed6c8f58b630d0e0cdf9d6af45e1e076651fc98bf2d8cd41dcde5a27fb0e983d4200548b4bacbb4e238137afebe08ee8bb82fa429176b4e6c7763722c254d4240af599875ede82e3a6b2fae16936a4ecf3efbff7f0724f0e764892efa0ff9b06819dd0829cccd37c6bc4838d6a3b40e09e032eddf86ac72fe32cf332b88f98d21bc50a637a4966b6c8e78106cbcee343d6cedfdb41d5ab0aad68ee6a01e7c61f84a2350d1acce92dd024f70e63347d90153087985be186b790535bfc50a256d55671e0c1a260c11f4313ca7bc1ff113b9c72d4e300085513559d85cb0547465bbdb7e73bc2144866a4d5b837ff4b845c8df33b6bc3bf2d80a151230fa33f7ef293bec55efdf8c374b5b264151bb99e3b1d4469944f1d07328dccda03936984164ffb08b2fa4cfecfaee49df0c6934af9678d07ce39cb1c56a89e60e195b603f828481129c7ab040bf28bee95ddd62fbf4099fcd3469192dc19c6dcb223f4091ac6331907e4753fd439016ecee94e55ad406ec3b803527c6f3e357ab190454a324f73cde543f20c340ee26db305315f7b5f1737ac6f290c9faedefdae1e2a093fd8ff9ef699d50fda9d30ac2841bb07153b9a5988720afcc04099f6c2d1dff8a9f83ac632cd7224c877b950d8430ce5b28ba31f2b0a2e98ef5b70aa68210723bc5884a552b6672cf3533c616bb86d3d0329c17331d54910127dd1e433fcf3233f6d4c242d0ab356b1761ac176897c6a57e24308ffd07e9b6bd6e5b3060504f9e31b425a758d3350ae1759d576e9c636bc94fb63690b5b4a2cd599c2849ebf2c91f5301094641c0439e0855859073a7f0f3faab813c44d49654694ce7bf76b84b52c0f932798b713cbfd92f9eb6ecf184a1ddecb97d1df8ea4849b768c1150b080c570d2011198e1c4a072d0383519fad093676299c4df2cd989514300c7d291f8071d26a41d302a2fb77afdf893ad3b30b73139eaef366b544a837992c5cd101eded6532871956416a92a0552254ff2bf5aff8384e836aef4aca866657d90d2404f51a2131e5e67f477cd0a4e13f5605ed851992e2e2f08d0aa74e83475c3e136478eb970fe50df37efb618b140ca997f01f84cfa6aa80980429c2453e66aa769878837a138ce2920c91be2c98c33052fce66e25ff6e56792a061b0f420f252ef2ba8cfb0d8ca23adccd4fd77ccf260f68a5574b93f1fc3616662551b2f867313307d8f772b4898ac2431136c3173f20574d2e770a68217449ca0c6dbfe37ba50b3b423a39ef46a40a17014648f876fd87f465cba53b1263ccdbca67b368d2cd1ac3e606e71df6b0eae81be428ddaeec0cbc5fa8da7d015fa2f4dc98b61ed111ca5582fc99ffcf75bc48d14cba75545df4c869f7179db1f46361d431914dfae78c2855d201f08fe46014faee6b5a76351d73ac32a47830e79e2e1d0cb84d4fe218361db005bdd59de982a034da2a422a9946eb4e654230edda0d50eb439a629d18c68bad689e351ddff72ef7da84ec21f4d60918187b6407081a838d91b26f6c1c4fc23a9b464a4fcc33ddd7dc140b699f9fead62e80676eded3d3bb49f85556d3f3394aaeb6b1f252b63cb40fd91729b4f91e1c0ead3f795b7a591687746d9d98ec47e66dc67bca3a45546f7656856aaa9525544c11bf3a68c193de4ec5dadfc7d108a13b65a014d19c023817829f6ea3437fa1431592615410934346c1b3b9e315ccf6bb1b293c21c7662da0360ac2b321f5816ca0667911c6eafb0c342ce810b522bb765b9872becee6c1f10a9f4d4bc18bbfab4da7fdda9a8b8e4cc60bdf1f9a6a5be041beb3a8ceac9f0b310860343334bd2181007198e9573d8b9f46550a9902453e56ba9d5b592f65c3c78b894b525fc52fb50f7097ce9a8c4c59edf6297d6a28499971900de2d5e97fd9d6735eb9464d56d3e2bd373499b8f9ead0ca4496a76476bd86e561b192efa29ae108c08543b43aa8dd44330231f7c31c67369e8a00a181954072a29cc6fdb8f4d6a00184856a8ed3b40cb235adab6bb585fcc18d0d4b8384127ad23ee62adbf4f580c49bf71385a0f04c81c7767f485d459b18c1c0d5816ebb2d3635474960f35bd2bfe04cee39a415ecf945de12a1f531ebace012e8cfde347ebe6ee38fc7ab2463964786ca9e359ce0011648f9e598f84c2a9b8c26ff1b0498f4d7f50874965054ddc00816ac4b59279a6a3ea7ffcff5086891310b8ec1c22b902e9eacb3f69a06e16de32e1063bb086ca1c99736a3649fd5d1a1004e4bf9abdd02afbb2eed32866b438427c21e94262309360457514ec0146e4c627310713bf3065b71dd570eb0a78000e8ac0f45ab35fc290dd664ef60f8f6306bf2296e2f3fb95e0db19d0d8bc0e4f60f13257b7ed4aae215f5e5ec81032565616f3ee6b1e6f800240506720f69011c4802ebb673119ff26190b6f8af3d8f9b6cc3faa178ec930af5f572ae926debafa35af24209f1f851a29ab3683fe84ddbae39cf120acc50823bb9df2a574cd6aacc61d3a5d5cf56c1543d3253717b5728ea7a4553d066b8a761ba338a7694af5b399a166551c0432d2ea4b89dd5458654b011a1851876bed1d15e67fcaf2183c41701a19aa8d874f74d003180226f61d099c96d6b035e1e41b6542256b0fa181d76affc0fe36a127b2d5249d12be33aa159f859ad42e5bcf6efc4ad1eee3bbe220aca2e07b9595e6a2a5a13255729fdb93743f2a6810af2dc4303b965e0b83dc49a3fcd7368226f3299483c48ee441712d94dec414b04e65e39a04153063377348d2cc411a7461a25628ac8cce05ed517dadfc11e2dddc806ba026ae83a1312cff1e48433e56f8a3092be34007a813bba5bf6e7c4a03e42c86545a37f0ee5a544f6004949da1683625d08481a2253d4dfc7fa9918194a4c407a2b909c6b7a7c8f3e5790ad98821cd85012c3ab18cafa0eef6c632dbd73be0bc551d190c433e65e0694748dddbcb3ca3b53fee62d80a7ed3a3b1ac082e4c9ccc47a84d2131c89337bbb8683277b8d4c006049a0243bd00f98ab3eb87973985a8bdbc8ccb694fdb1701ec8e25edc68cfa4ba52694bac2e7e4f41c233946ba3cf60b199007134d8f737034422f2680cf19e507240155d05ff23393cac8acb1f3fb713f05590b0d4fa9c9b3c9318bf68ae8614d255467022d5f0fa538f8b0c091e19634298c5be3706ff79897367fda89ffc17062278f20f153202a83cf7d8165131e890de7cb926a1f8685e8eb9216b59e2dfa0a0d803a932af7d11f3367abb8697c69b517b1a1265c08879d5e1ad1815947ec39281bc0deaca108e14ee87571a9e427be3227c8310e868f93dc27d5f9a3be4d44f75c901d71c2b394292ae630039fdef44ecea3d16bbb5424836257972aa4c3443c882cf050c7a7b12c32c3d840410cb8f91e825000dc8ff8851e6adf9e2e20d707da4e6291e4b766fd8cce8fd69163a2adddd5bd94f88b52fff006a165e27025c8b3c3d4813e3105f8e8fa82c6798fd4ab9009a7e9fb2580e07f3055458b72293366c643f7da702e38e3a06fad56bbbed32905e554ff241cf5bb8cedd24b151bb2cf067d6bba6a25d2d19726b2f7806d820976afdcaf193b7960458435a509bf4be9fb16c7b4248d092cef6513d2bcfb1bc9d6a96d65e1c61833fbc8ff774c908e58a29e94ecd51d68cff77fbcb4205ad68d98b6d17d2321f3b562cf62c19050d42c0b0c5b59602f65a8cf793cb48b69d62aab604a4fe1f69800abf7b295f79ce23f6ca542096b2bfcc71114d64f620a5eaa230273bae591f738afe5ee3b018b51643615b66fc9f73976a97a46dd34873eff72e6b1418cc277a5984a549fe87afb3f301cf1b7ae32dfc757749c5dce404a793cb9151a211646afb650a117af4d794ae7c981f0cde747830296be06d7cb4c7b5a471323651345dd2824776915a982e7ecbd9cc6d0617cb9a57c89b338b929dd45618538bfc5bab415e8cc729eefb45da8c50d94361142fe1eb3a040357c43c62d514b9578b8a57412407243db50c3dab0592808d0b57bc4d657ec7256a5122b575174fea0a0ddb5489bdddbbd70341f3910814ea85ba91fb8748b0dae3a34ec824a5195cf269959ad93585cc7f6103e6394340c94642a80170ea0049a05860221e25ab616d8ef357850836c9306052867b02aaae585cae55f706c9fdaa11de2bc17da8d54b25dce804bf995d5ab2ea1257395900e57ca52e5751aed06efbbc81e704f08ff52827a67f208fe5baf442414dfc4ad79ba3bd870ea0463797905d846193abc62a17dd9add59cb14d2e770e1a285b8c4c8a9198b8736c65bf84457330783ddf9da3603dd717e947a59dd1be0e20635c402a051a78f443869842a723ac4c60d6b07575c207a0d40cb23b7d0e02ff6600ceef399dd13971afd5f9c40974e9e7251a16de90bb7287e9d7acf71e9d7b23bad8c7bc94788650e5489b4b537097488f799f11d236012b8a274a0829cc7800e75d4fdfd221dd44b49379ae28510fc38dbb3a6df7d3fb0ce76f0819da38dedf564869b02d40557f398d169d072dd8c25d191524f3c31022dd531f667a239211f888a808bbb45dd83113e1237c6b9ea9747bd458c04d55888cf9137398c8a93df2c070e48e8bcd9f9ebb07a82bbb2e4a416620745b5a0cfe54598d0ad79107df4b78c298103f7b3f0b9b9b81f987e356671574d9f67dc784972300c7fb39cd5486a958d52d597bfeb64e485231e6ae65f59f70bdef5e57d77aa2bb75ad026a96eb471fdbdc7dabbe9efab450f9fafdfc15ee6c815db5b881b65fed9a7e806e63e09f170a6995869a58a289780990e16509b92f22ca0017c9588abfcee781aae043fcd2b1b05a01d2782b98c7d1f9f5353bb59ffc06ad5c6327537cabdcc62bad2a3d2bfbee376126ea7b2ae4915f8bfb020b1cf0e33efefde8c78fd7c7b5a163f7d036eb72d33c65de50aec9992b628203131d1fc30cd45782557c2f53a7eaa1ea864bda210b3b602e53ef82237237a80e508131987559ca4abb66454a5cba3f166918e4c6f6daeef43c660d83a8aa44bcdc0176e4a2d5460001aa86cf4a47c3c4daf2d34d3fe0a28ddda544c6691d1db9d299685fada2c119094054cf99cb61313ed228ce2d93bee3784b202a68fac8950219f16960845c621f92c6b64a5ee9ded027c42eb956908945b434ee35ea2af865a9e4f94bf3ee0b1a743a4fc0a1550ed4df1463899ff31428c6485de7ea76d7fe57539a7264f55976516bc922a4e3ca99dffb6f0375dcc6d9466214cf413e1f5d362aa5b0a54aef407a11ddb4e9d2d9a7024bcbcaa29d4fb9639d928fb6c79502f2aca547078373dd9e5162af7456f9ce92d16ed41edb20a1d3c646608c42358e703eacd3b183f91492e6360ed84fe155983dd9ecae20202b1d6383dbe48a3eafe2e97023149f3a4f68bfb66bbac43d1f434ecf82c02361e89686707655a0f8b4f55674a260d753e4adc870d3bf79fd8440d1dada208f7961527100d432e50ca6d78491ff6e66ac8fcea99edf4ff9c2f4f1eaa0fe2ed2473900a590ee5aba5335ab77d89a74ea2f14d93c2d1799ed4339eaab78427adda3e5f89e3cfeec859577bc15e245162c8bdbda8f0838ab86b898a87d8f315a588daa2f363a8fef5ad6db9778329c1e828b84edc909ae9cf08683517a2034cf5a30823d118368f073f64d9044a89125ab4d6c40583e142a0cb774110e85c9f420ce8e176f29b35c3a8e72b8579a2af27a8176d35903cb3beb2bb003a17af1113e4b6225cc1cfe5f8d86e64f0a3b9e436756fe0998e01daa6cef5d4c72188fc15a3b12f292d02a99330c2c56e2514f7f87833489610a42dd21f56f545c08ac5f2382b2b9ef23585262d9879c081b3589b22c80acb466cf327ddc61c85280901167f26b7f411fe2949c3979cecf91c6e752911f03e3d56c819cf8bf25a758eb90a3414a8a1fbd9fabc34ea9a88dd64726e8d637ae233966fb45b86a8433f5e0108df35b1fc0631b8d0d911126e4225847d42ebb53a533310814ae23012cd6b5ca9adc021930f6d60e2782b8e03903a29b255359075c7de33c0e9a8548a276a24c98564bf6de43cddea21cd4671bb677c33222422cd7b3550901a9249eec121eaec8b6b93d7'
+ },
+ TestSignatureGenerationSLHSHA2128s{
+ priv: '4f0b94c0e1d8abec0d22ad3f180e514115272ce1ab8252b0608da02659d84732a4bf46d8c3329e2e48594ab7970d1ff0e644e8ac35994f9308049ca1e108ff1e'
+ entropy: 'c02b762bed67adc3a058487df6fabf42'
+ msg: '7ea1563d2d0e4d398028b06f1fab51f69962c6e84f9e916b655aeff9bcd2d811fcbfd1aacfe09515f4e45f73441046fc1b6912f1204d01504c251dc323421edf9bf57f65a86d60ab53e73650efdd91821d133bdab274067c257a182f8be9fc2b354e51'
+ sig: '4cd0a9f80f16724b2261a5a112dce40fab8a0b45e9441fa97faeff4fe559952e4f2f617e70324cf6e2fe2b391b4d2934dd9f29dd9f5db44644127156847df600419f59558820f1c254d2c622ff12e840b36db78ad365c9e1c75db7da389c5ebad22b6b5bc53ae7bf7c96b060ad06b465a139a6c7fb370d28eb965992a9960eb76b3839e78ccc79eb22a934894694dd54dc12ee05ce4baa4c866a30cc39b99f49c28a2eb743a6c4fee178b18192ecb371bcdc303d52322e8ca2e958aa48e5af33e6559ff611917c4e3844770eebf0474ac14b57ee90fc549f99544549e21ecbd8f452982cc1497714cb27f37f7e962d87f796d80563a8249d01f4b3fd750d633cfdc639779219c10699af985dd69b8e88f894562781cf0425ddbbb9b3b762caf582b034cf7ec211a98552e527fce0a1c2393d9d358b0b060cfbd081f44b28ee080330e994d4e529c563bb411e3869554717b6f5c14498945c7bd481255cf94cb18f4023cff0db253062c86cb7db2cfbbe2d9f02db737510ce2e205e849c6ca3f0e4779aa19bec94640b39e066d255cbdc3ecfc3d9229448865c70b039321252329e2a8e1eac60987988763473a133d3c7e452d91f8874edc3967e1f1303a75bda3fc3ed7e57eb3910be2d64515da328f1def59ab62ae722467fda9056c75b958b767d431dbb08e0c23b624912595694e5070da34b8263ad9b3b20618d5a956694c5b9430024393dd319d9d074f74c81d595c302b7c1721f395d51b3208d60ec9f1b655c6f5cb2059defbb94e97964d1980e11d98a8a60c216d91edbd23e585e9d3e36c1171b57ff288836c2a35137dcb0948c38ec37d78c5d0ed084eadbf2b9aafff36cc3bb5737e39b31727068281fb7882a7e843e3b594ce7ba70cfd0c9d539e7b73ffdb80beb7865b20537b428fb00feae7e30cf0017473cef8bc05d874211c76ee528606f018cd29e9b4e5a50bf03708320c96f184cb3b700a009c1c73f8eac9100c46804d33975707248cf1d23cdc91faf56abe6b05df0e7cc3007c6c9515675a6e62d9289fd0ec369b04cab702ab80d63b4360731bdbb78a99bb4d9f5f715fafb79affe98d0375460d7eaca6c8f32bcd4ef82728efe337533593f6c8e152347bd7c4179977d9b1179d61b29778b24c33ba6637940c9a059232b571c3100237f06e39983d7fab30c3d20cbab664d9609ef8e68f9b7c6561af3f131c0fede258a674e151f970acc4b1472f1399d816fe71d2f875add20601a89360c9bba2eb357e919856d82e37e0cb9b192eece4220ac9f91f6fb6da4e84280e10f50f5c7efaa629a30ea5a4095cdc231c3beee5e9162edafca64ee722588d1b45d9516aabd1756fb744a5d7c25222403823293b41f4b42a4c4ee3ce4c4348f8b369d23927cbdfab7c17d1e1724ed29aa2c14330519e4648cf3fdc769f4798bc46b3e9375e6b6b23c05b5562ebe923af33875e9b2990473ff74f45859ebcf9bffd3875b304b7d81b1907d2b2f3a2a3a6c7aaff09f0277b8b41b2175e7485bb04f8505160dac6fd1050b2dd480e5af66524fa079bb62b17be63048394938ed37e0b513ee2acc6edf0692cf9fd60d9ce4262b888ceddd981182c098a4fb60902779ba55481f1d7109698947d2126c28da6cb185b747531f9e8a6bd0c4b89c9ebde25d15cb8cdedba463657ca1ddedc0cfb63499be2afb4879ca86825a043e1904557fae3e60bf1c46b2d8876c383746f7c43369a542dba3c55a6333eeda741d38a4e3826225a6fea94c48b5b73887089437bd766032df7c9a324b1d4c8f6ef96afe9dbb899ba2b638a923656f74098edc95ae2b13c95ac55eb2de0bbb9d054ef0f7cab4142607846c4ee273da1c31e575eb950bb45b29039deb6a428929239c26f514c0944ebad924427bb6098593c4e444b37557d4b582616dceeecf7c48cb32e2c28a61e999c668b5eedbe92ffcbc60c4d915b051f776d27d72e3a8ec232890d7739557388601fdf6d0ceab06e2bb9817b2c0f4799a598f55409a219baa7442a7f6ce1ebbb202cf8acb1f9209c1ee7b2d978a1a73bba36523070bad2eb59bb5108e0917e16a4e0a419f69e3ad1bd9b51d27f904e877a69bddfb91ae46f4bf7e6f36be44c6c99614230dc2e06d587bcede7d275572e12e81747156d84e4f27007fe0de765f2cab8f96a25aafb923d18d0a0a0c8ed26e7bf55b459ba94b454b4333be8b2d151780f2906631119d7bcf11d02709e57864fe6e14412ada64d7a4aee627b8b27721f7cdb4951989d0f81ce7a1d74f71eba2388bde05f5246786e7c429f04f43240bdb5fdcbf2aed4ad73c8f39dd4bec7bdd7f088163b63bcb5a18eb93276ec5b8dfb11bff19e6f333b08668c527b4641038179fd51228533b96c59f01a18ea0861efa41b0f16ea5b2875b7dc9b35f6720432f108305151d301b120bdf15dfa0fef5d918efa7066aa7c247f903abd7d52a76e04ca5bcdfa51a74257e5405db981a0d24ad0f52235104824da4f65bea8c505dc556cc868a0f6e2c0c11c65672a4c638f43a657b15650f0d76cb8d092f78189d613fd803198ccfc8d9c854ebd0249070a0976795bc4dfb61100170a5a052c92e45d83f5205dc2d8290278ea75372bef19d8a11e7800b56aa4a506afb3b3a5b31de87b51b7ab6c032a4582a6804e79c93a640430e7f2f99172084cda7ebf9587ebcf0a48f9285afe7c7eb19179965b9e744d2fceaf82489ffc9890b9337ee5705cfe8438390b4f89c3acab7a1dcadc790c7596685d81146f4b97e0d792e27e31d8debc21d40860213ce46472fa32575e04ae164c1480c7aea047937078ce6f1d743cf6ffe0c5906ac560164a31e97ede4ce95e2e1fd19e9ce1be2ad74f4c38ecbcc92c095deda6fdc8c6541d7d1b2914c219c73f1a09aee6ca2f09e0e00b4268fbbcafdfe5b33c94c7f3e2e2a87cc1c2a5b9bc71806693ff3e65a987ac03056fc08d0518fb18309beeb71243a874d68c6fe3acf34e3f2226a8ad5f3794f78d601081d5e30d547057380994b97e735a384b4ea36708fa9e9db21c45e19e454e53277d4d432be99539c68a23c556b77fcf13c41cb317eaf5fb8827f625074b16f0936d5a4b01e47d14b3fa181642f6c05c4a01fd8d7d3e566200de9dfef341de36892b04af2d071c28ebb79e47ffbb526ac1bd8e66e956e6c953bb71976672792c899b09d64a7121ad9615aa2aa3118a0d1c64fd4f31468b2430d56660dc0c4dc6b50356b18b143fb543afb9ef846d57c6c4d2cc7c6e210586f7bfad5cb245e6618390667af68c2e7214ed86fa25be845b5a819b59f0acb9b80b46e2ea0a7dcee65faae82e0f5f8ab159dcd2a4f1589bb55c8184e954f056fdb3103a1ab512edb4183c2a7667f7425d79118f7d6c8651a32280b0de03849dc14c116641632d851c5899802249147d1f11c0586e5f5bc6e2c06cb76f7b30f8a449f484ed6a2b9163963d5f0b7583d547a22fef7d9ce190fa2a7930c00ebe19690de4109d7d99700a011b8663e582924c3a265f4ff2283da287fa44bef0a135a64d1417fe5b426dcaaf149ab325b0d95740f5125a44fe840e678a9933e5fca9c43bfb10b7e9a79241463c4f264c97e0a1a119b3a8a3ade1c6256344d4b0c37c974c9c456a5546c510558626829aced8d06b8f709c336b0f03acdf34dd63f810aee1aed0f4aa53dfd9ab6aeb845c06bf7a92d6283e141d0061ad6392778e84efa56e86e4a2fef0cbe825b7fb78a7dbc1f976778e75e29d7c0c23147d14ad84407136483f807868cde2a62cbaf42ce9ff4005881d8bfe7ab1b8fc6dd733b26d69731e478e95a5177d15bf7567f91ec98a8d3f3023ffede7c20e41ef7aaf2b5ccf4f1d4074a9f326caeee4fa765341032d1153c7b000f99ef614d6356bfec68195f91570831ade04c70ee9260528f2fa8833a572cd2716b983999c6e3de6fc6257b3b33bbf772ee7ae2261151023c68f5af2b3dc21e85c0659ab7969b755e3913f7a91638206fa332f511a25603409dea9b2e6b1bfcc0fa11889d767f521d32831603bccde2ab2e9aa2d4ef1eab3d004e8ba5267adc41f654fbc97eeb420f1249d563a3ea9032cc2ab1f02bddaeb577cb4e72ba48466a0ad36220e8a0a263ca4026f6d878a7323664705c673dfb11e23b743f3a30e22fd3a423c2babdc256eef03de80da17a46a387dd7af7e6e28cf0dbbdea65ca29eae5f04deaf5335bc31c49fe829298e0cbe9a5436d3486b4bd8e7bc2a734212c4caf2b12d98b957ca2400555011c41cdf6b42ae55eec8a839c3f03c13e502eb1925c24a04d923667f0ff174ce2198956bbffb950c188b83c3e1870dc766740b9e4446c275891ea04c6054c5b455e7dda3776a017ad4d17b291e04d942ee80057a5f0a53e825c5c45c1e417e0bb8a8e2d73444c2285f9ae9d06cd0478527452711719c5d927ae5eb5f57664b6f4ae8560a693eb55937c0b17490bcd9896ff030ea515435eda26e9a265cb0b7ae155aeaaded1b1827dfe302f911225da080fd3f068b7cefe6da37968621ac4f051cfab9821fba49d7d07acb1fec8922507276237278e0d9cee916f94f360a1875a3e6a2e681a87ae0fa1bfdc31ab756a4f679a558c42513ed0f1336aa14c50b45355b34f34c053e1fffc5a8eb42b1ae3a42ecd0eb41cdc72b7847fe79241634bb1c641c1e581b909fd4d77f0941bb64e06ccd86b55d32c24f5a9bf3eac8eda1c664bd6e1c8cf1d15c3cfac1bda62225db6056ac6920af025fa56fcc1c05293ced18be5bbf80743d9050e744f6ecd03516190f1c3e452458b0e861ea2f7b01e4cdfb5f5a2d30da0c4874fc69eeab363b2ff37beba730afd4ba7314cd12b6537194c5236d09a082304fa6597341efe0b0b2523de8887bef9a96ceaac4373334e543f8859e78724bd3b0655a720d5438a55e6fe0893f178aead3730b05e80261a506f67dcaf477ed10c8c1242228c0fbcb5430a11a8bb8502f9f4814d4cc38ffeb967336fda610c49312e367c1def8d6b54bf1f071bfed80a6fa0acf44a5128228e3d06f867fc675a4b111a83809568c34720e3e46a31f211b1f6a0f012163a67876ac511428c9e32c2485a6a335386193127f293d1d2d6e9255d17ce53525f428b63447592ff14e36acd52034186fa950e5cbb4c16ed488a0f147aa6a8a5a1fc36f424ef10be2a5bb4679ba57b52d1e8f80be85d1e20d6fbadd2305c961790b20130df83dba9fcb3a3c3f808e7a4575e0738f546c930df606d38497d350924c60147d774cbac798af6f81ba97c049d79c7deaa0ce7f4caecc268a8b094f2ce0566026e8f5c8626afe835a1c5f5f02962cb43b60e8aee87a33c1e891ff952e288a5402eb41a8d2c57e947de50c12326d67c4bac07819dfb0b1ad3f264d41dcb6255b2058cf5f74cf12525793ad093fb8f8beb8001953bbb1fd8442f627f5f52b376e7feec3bd2a99db3d05de55cef98233f8130a8c8a43d8dbed37890b36b55c8a840c1f2e3510f5e0b0dc5c2a4ab65c77eab919e048f5abf8b69064e021fb720c57db48c9005a5165ae9c5f7a597606e8474bc10f6e993bfb706fe8c2b7ade93a018a81d3f356bf7efc65a2fb2560a9da7224c4a07b3bee7b792738cffa879e32ff37dd5993ffa8e1b9394b28fe2a549d2f67d21e0d73f323f0b788c30d76e1882b07cfe9a3757beb72741066d76af21add301af655d3652da2ceb90c052b8a0c245dca15835e8b1786a3f8fa3e10bc9ab8e4eb134e4f443b249ce269285f47c8a57911bc7d0e7c28d11019cc3cd220ca1ec6d3bded6d7d5fe05445257408316b657cef7e3f626fe765b3d806ed2207e932aa53d4b45edf4dd57d56b6a757e58a46911dccf9202efe76e3bd562fb79cb7df01e3235598c71ed7df6fb45b561ce21044df1b95990df72e67765ab8ed88c564a1742253005f58f480cf0dc44e25b4e5be2629ca2c0f7c6802d8528a3ccbaf85344193f07e2987ce9f36e9e53d0d7dcd609dead2476cb61387d14647d51d24e9126f5520397766f3cadec0c347bb6b593f19aa8fc6b0ad6a57c6e5c4f55f6a2f8da9ea94aa350f98ec84d78ce99de12ca3ba8de70a765919db2afac54dd780790c3715828da9f94c0ead579cd7aca36579daa770f329a2dc2ea230d6302055d8f5a43d24f69de08a18a17203b6ae6de7eb031704cee85e1e5dd025cb5c239453dd00050823153db647698ba94cd6c82f0a50b7c72d2ad2eebbee755cbe2bbee15934808b03c26929fe14b19ee6425ed2ecae0a282e3689a47157a898806fac42cb694c6dd66090ddeb9c57588418b80bf840e86e83b175eaf2d248c223041fc77f50d021d359a2a620e656801a377493a375ade1b939ed3956df892372e80af0f5bed35f26588338bea663307625585cc9118b90f659dc605772cf364c59d4223e3584cf6445a65e5e6b7573e29dfc37d5eee5cdc1aad53afdf04a722547e5b500ca0fb6787d89d94fb9ae487c7ae8633644d28be0e9f0852f6655308cc614d2635937aa5c012af0e058033f759b0d4f3aef32a8528d8a9690bf616a75627669642c8165e623a741222993bd81cb68a8dd65e90f3f28c59d080cb4da56a407d1e809ce5fc04932e8c6b7583ffcd31c3a2f95fe4278fd2abb05a500024558e5794639d425f87a9d2137c0876021cbf085369613bd1844e4711a2843a0e1492ee664a5e41d4b023d68a7f2d244719867ed67a04ee57cbd49c4eb41f94f3d64ed7d696f3458fe5fb9fc6039243d62974970f5d146afc6cee4407b6ced38afa6b945bf50da1ef76a99de77ef8db5e43e231b7412b965443f7b38512727b3e18a4ce2965f6c5dd589df7b4ed1e29e3e747ea0ba180014afb326ddbfcb32560e82cc41c513eb51381d3b5b112fcba6977782ca532a824da4680b03cb7d0dd41e3f82abaa7457b2821874621dc520be072f3f7fdea19f25df728fa8ca6a1af9d7a485a488fc1ff9aa110c6e46be626d4c22973ca07e0fb36ea1739ece4646ccbdd0d57523a240181c912783ae3d33ddc1115b22abaf4638d8f72aa4c7b755a3e8ba68e75d50544ed49bfeb4953a02661dab222304ddfe122b5ef50d0ef1d41690f06dc9ebfb2f2b421bc8c358deca641adb25e061fafc156f5e04d328a836d007e2e71887454b54bde4e2f90f7cc20bd64e4ad1b2c4c9699e92d5cef1938066ba11da3110031a1d449c29e471de22040cd992342c89a8f0cdd77b11fe06686836e5755152dde779330fdcd75a0a761847d971a2cb472e680ddb2e7cf5836ec4ed55717b06c084b6829f7d7a41f8e4c4ec91bc94448dac9225b38889948242a1fdb3cac9fa04fa71c1aa8b6a874c9188c47081c54bcc9697d688e1e277f7a6167ef5164972913014d5b2c80f347828f3fef2f91467826e6c6011cc250d85646d9930d5a0bf5674021a60ff3945cf10b4684d6326ee994e2a7ffe7837455467b93cbd82802cf046a035d575db72f20f15b7cec5061191f5c7d1e5b0ba8f32f3def5e0e8e06a725892cb1e5d3891a7eeae10c80fb54c9763a8e1bb786fb2e4ea6af42e07c298509be1ec71f2ac9a0d6b272b06c7a8589daa6b3709c00e2b15d9be9bafaf5b9332a33bf6688cee9d50ca9560c8dc469456e80cb7c523d7d0a4c9873357d5aaab1cd71a27780af75b29341abf26acd33826925cd3d1db8f47d6746744552e69326cfa3abb4df8d77e4e937876fa0c6a685983f589ed33b7fcb607125410ce433e328c1d3f2b5f599b785ec486440f3e203d40fda97a1c16110130f183ed58354b0ffb04ead97f92df867b510a1661bcb839b0c70df3d63ad2ceee1688175e6d8682007731aba755f4bb7cda9df196e737cf09a985da8423f6b6d7f319858ed38ef02aa2eec24fa0fba4bb62e3fb354db7758082f46e63dc89c598f183d9991d20fbb07c2c9b93293e031c05fea57eff141248a6ffec6c94b6f21c10559dbd6211de3cc7e50eb84c843cf08cd692d6d85a9479328646caac9ec45de2798d1e93ee021522c3f3fb8f14b7ea9e3048b6faf233e1d8a1622f03d83b1c7fa13522e078b9a5e428e93f4c19ac0f2190ef994d884b8d527830b36a56f5631b132a9f9978c800c74741e9d2b7ca2ac1521479f3f80a82a3fbb0fc3847094b74236929e9a4a464105aee1400485afce04f3a4e01071fdfffa2ae939cd6b7ebf6e0bbc1363c7a3af4f759b1268c6125c45e5151517b3c0da028e6ee9af99996db0e766fcaa597fa82cbb8cdc5a31c3eb08b558f6ed0baf93f9f4cbfa0ca97b9c2fe28f50bdf45e83e3b1ad64d36ae4ca5d3d01e02e5c8569a0ab782798bc7dab3a7177cbab03c351e16f618a97c4b3d01f5f927e0d9accc94c6a0c0d0f48ee0306d1746081d824e6d9cec607b463d72559bba4135ec5e1d491d543e1f207fea51eb9bc10ef20f2475537e275f59702e157fda07efc5df159d26ba00c2b3165d9b88ac1150f5d54dd2f589514405448386c3b18f46434d717e081c1cde60370ce6cecb4e005074cc70d57fafd7b4fa00f41f66376149154e5925cab32f3352c99f8819e1bcb70b0d63fd4aab0ca4205d568fe66a6dfbfc1194a1aa3986ff8e385cce7692c8905f896dd7143d01b75b6a142773efddc457634fb9287187d8d2659c071ce01960f443cffb8daa8034c2d659b3d10792134344278e56188ae5b1dcf662882f40e96de0151d6ba71e2a98b31aa55180b808da7344bd1db3a60a95b6ef5e81681386907d20d733a326c9af2906cbb48aa30137f790c7a438a6c7099ffedb0c3c33ce8dfbd94e71dca528b98c7cf439af87249822a7a52a24940037e0e0e38efee1e826eb9d222bba53072a232df149d709efacb494a2e471102729f06b47f0986152fcf2cc3979fe37953daa6e62ebe234b6c65bcb59b57b10196e3be7cc6f3e474b4470771753e5ae6aae9acd92c6b7526f4927fe1c571a6703601314dcdcd39d253302842ae95ac6740a039dc51fbe47cf214b7bd24b4c91b7ec07dc6c26b313d1ae9f0e69d14a9a325a16ee2021cc4a7a60a1db257477733d299431272196ac53e573322e41fd85ffb02243fad5fdbc5ba1309ec7ab554bd87d56bd354b2d3f85c993456c7ef39ee17150b27fe04cfbdfc10202fc2c96efaf67b89e1f99cd227f9ff4d8f63a08e2b6bdf20a6ecb5d4cff1b7b84c9841e467428e57b07f8758a242f87af662cd2f092afe7cf178bbf773acc31fb9b6554d1292d14ee06234533b8e13b6e1ea6132f12ff614cf54f3b025a100a0d42984d1f2952fd30a9cd5279ab52f1b30e5b1ca894b7b1f4d84af4c4085bd1b05edce13a6bd4339075573a3160d1b587e351d15d918766cd9572bf054f5b247d7b986e6f11b16aaa677ea4a141ecb7dc818055e172b9fc0a7c27bc00ba2a056d123ebed5c520888ac40d22683dfe64c55c06ef3c23b013454c318fcea83f2ac6498295fa384f59c0d105f09b21cf6e372c71592fd111995395bec991e3a4ce0bda035a10bc7c935afc8efb9e8523d85f41a3da03a7600d1ce84692660eb8341ee9af0257bbd4c51365f02d50f3a6e31c58e3a57377561eda8593f1aba5063ba954eb845b315cea4ad137fd90151f0ea38da0e0a734ff68f8e86b84b7ecdd06aaa47f6f19218aa31aa58868febbde9f4c9016079fd71c7406596e5846742488a1d3fbf1bdaf9c8c3b0bdf4d985262012c6f150c5788b37f9b29060e1a9b2a83e943fed3fe2ccf35710b5465ef48611ccd973f756f7128ac0e0c80c5fafba0e5084d93b0d5f38460c6bb211448dfadc4473db32c54b33cca1bbfe063e1063a956e6206ef6c44e790750b859d5ffe6d995bc0a14152bc41918a2c8067a921758d543633175adcdd1e9ed3cec89a9a9f4474adc3788c248aceedc8b27f9baf56481b60c375e3a7ab95d4c14a083839020755895f6c490d5dc81d62c460f99ad3286c1874be4eb2aed8a6311b1fad1df69d2f91f8e51bb177063157c46f35c3584fb49adc7c7f58d7e57bd96ec3ac23257143f87140960ba425e643bd2c48fc65fabcbd85ace200a39f38759ff22dc2544a787c0f13b31e6639a22767b3b086a85fb94ee4e7ea7ff4abb41f622841c7f7a3fc0eeb65742b76c33dfb6d5b7c46e61d6cbb33e041ef0c10bace97be5b55162d2e8400d3fe6a2c3b399377366578f308e4af05683bb024239a1b4a71c9d65ef6d39bc46678a48d5035fccf13570056d92a90a4f0c73c677eb859176b1aa7c982bd390b68a3679b3ca1036de416fc05f53cfd24a5455708aa17791ce2a01f857b8bf6728a9dbddf84ec6601eceabac72b4e15e9b842e5c75e5b07751aef6d19768e0b3696e5ca638932ca341f5ae6d8360b1975c1275dbda90d1c9a472fb1dd95edce650ef5a1eeab33a172e842bd0c8ea5b232c25dda0a1b7ad69ceb6220e2230099d744559bdc079fd9425d0de47d27d5ff87c93f26887452eb069053ff2ec06785dc316da19e294b38e28f6aca939d33db87a3bb04395f769bdc687568a035c8558f0add1b0b4953499205ed57ba555cd3db546304538fcf0d88a9b1c0da35151add3e07f886067730e411a3554e02fb451f5b0d737558b6442e3581986b88897e576c362dcab3cb255e43aadd0f991f6a4c1a27e27364698b3acbab326375ad449f73e886cbbb45903428baa30445a58094d2b12079d68cc35f83f00fb26748898aa0cbe9ee355daa6ee0cc9d1091062b93e703649e03bf29bb85861e1c1def9033d04c7e6e24341306b1be4280e8c3bc4b9b7cc30d3572cb96fdc7c41dcf3c9f326085482aa442ecd52a87d12669ac0fb15c546ba5537fa3eae07e2097c5e767ed05bd8050f0305bce15114c6bc8118ab3026fa6f904999de4a32aefeb931fddd697dd473dc3e0e2a447f128076058b1b0807ef9d07f033153c7e355a7911822aaffe2d07267bea134383161d2b8ec9263f0a83b0f0815ea960fdff795e2ce73fecb64d0faeedcd53aa5f40439fd9e8fa7464746122047db66b664ee4b4b1427be9cb4820e4220cbcba32d514d291e320b0f8cec54f8a0f24d76d348132681c82d0969202df3247d3a73b6e4b197b810606c574a5c7468cd626e61b5fa9dec35c4a45cf789bb1212aba3dbc9e7f800b600b47'
+ },
+ TestSignatureGenerationSLHSHA2128s{
+ priv: 'f99d60c4ba723d4a81277aa8bdeec37b6fc27624faafef99f6e82256f351fae23d422fcf462f0f4a0df974a7ebcf5b85217fc357d9db5e5fa864d848636b5511'
+ entropy: 'd45c2dcbb823f8db583a4038ca7af794'
+ msg: '90'
+ sig: '721167c73d781f1fb286a71d3bdc90f5620462e5b8a5cad327fcbcc7f3bfd54990e958d000b0a4ddf8323b1fa3c99214db692107cc837eae4b68a873ba80ccd4446e6bf50ab2b2ed1d7d850682a81190e2c39a6ac44dc4b10d63a509f2a1eec3ed370fb539fc0bba96f43be9e4d9abcd62d6e8238c858c9f4babd50fd8a90d3953a70a2fd5b698d9d3655d2f61facab44eb9a4b3a6509bf8f990f0b5163740a066bef43aea368c66ff9508907a9359f131703ba5ced3f1d97a7e506c77be1581c4c26a977eb0e7a2b21570ff87e9b7d38db9fb175a073882c651f59d72246038af0486b29a4d0d452f40faa4585128596f4703e87773a0f6a927b816773bab4c73f0dd75ff0ecca1e482aedd47c7a9fec46e67355483518e77dd6763d8a37257f288cd0b5a1a6cbd723fa7b4abe0f9a1b90c2e9d8de2f5b14a9e810897e4597de74d87c365f5f83e16cfc909cb307cb7d53e6160261d2411d2d8f5368c3c4632e34f84abe9b796ffbe47f40591776bcaf740cb561625ddeeda7d6cc2752e30db798fa6fb28af4fe9f411fe3c3bbfc82d44b6f9f12c47ec89287c4169ebdea3f54506407f5662cc3260091d947b5fa1717e32c796588d4056094f0a769d4f273bdebe3dc25438336b62c71ba13bb1383a0886b04fdf3d50e071dc2375488dfa0fbddb5b1cb436bf661bb36ba8837759e050dddfaa63b9c1b2d090ea37dede65d2b5b9bc122ef03e66c9de057a8b0d25db939fcb2e9a3b7a97904463ea38c40eff639cbb981a4257d2a4360fdf183cf21b6d05630567062384d8959ff6b09f9857c0f0ddf7454ec8b26153167e4fcdde265537f0ac6e76b1936c9e6ab5362f91774bef8c761e4ea5d5cf5455d65fb19a5ae5fcc12f65d955bd499f94362d4c71e32d4e57f9f8c44c6de0fda06e68a17569043c8b7b0a15d820bf8ac395e6a4056efc009eda486d1480100e5458cb68dedcbfdd1577294a4877924b92b0580539c75b0ef0c6f8494bdd38b5df5f07e02c9ffe5eea2906f162565648d3b9cf9b8e0e509338c5d26db51b82adb5a14f471b67893227b0ba8c676dcabcde257c8e1def9b973647ba00218f428068df4c826c00327d5258a5e5702861d2ffc8e7fbb71e2f0b9989646898d3ae61d07e475803c822a1a697d90d9dd318176483af171ad5a855e80a4125fc3648b0bc6efbcc63fca1a77d9461747d636545e1ad4c5b980ff6729b53cd249ee3dd47cefa8c7dd315d242a54578f57f9db9d98855eb1542c0178265d9e88af5b09e3de037a98d9900c45b81735c6fe830441d934d3d10b22e2ab678d8710030df5385e0dfccc9c8dd3a0c3d59f9ef55f2be1619810b6b7e1b63ceedc37f82bb40847f42bc85836dcda3dfa29346620b69b69e00878b300e5cd7953f83259ded343c4ae87e595666196d6e33e256befcb47257bb9f238470ea31b1c18ca2b26857de2721631d3cab03a4a0318ae1587de019b213a9716cb605a4720abc2440de2c5434c720ef42c3a0f4545c80d3cb9af6340b1c8e1b63b8f82af671324a3dc34120e1fe10551e2a8f96e03164c149dddedbe7ed3deb1a5529db6dff4e6d911870b870cfffc484ab342f3288750f6a26cd825395689b7b6e0c7f3d09c0ae98150889ad495bfdc010e5f8d6245f72ce3ab9c04978bba485f2bed6fa480aa0ac3467d7cf3ed5bf9539a8f5b37a56a669587efc97fbb5661f1405f43d4d761a65f626c51af4fed5a7965368285e81b2427ec59d6f29bd982119fdbe9075aefa2b57111a9ce78e7a8d5b23a28408f55d0d00cc09a0bcb4b7ed15d954ddc1dff10ef676959a9f5d8322d99f6ac744161ddcd52b03f492857654954f465b3810e260c6d24032eed7f542992c6d61639095bc9542e93387036b7a4e7e002a45650127e3ba1724252f596aeff2e794e985cc34bdd1a9b5824f31ebf37a55addb0c1c9007828d19a9d7c7c38a1ae87bd7ecbd6706e1abbd69578e2c8cde5e7b55d1ed7bad2de45fed6d159d83c8a2d7fc7cd131a822e3311fce7ed99b5ce216dcdd16dcd0d68da8c1714b0fe8a8c8e052bd8a77032a9964d7bcf10c56dfb6f21d37fd3fd56252d0a59a99ca3caf80049d2122534e21fb991b6b3223155df56d6cb44c6c1dfb8fe41c26597f7bbff29de83531384d4902ec51d728cb9f78d1fb0d06398b8b51369d1c4509be4bcc0752f5b3dc495ac0275a85d63318e58d640d9402141664f0ccffc28f1ca8acf76460948ad1920a7ddcc86f8696efaa82ba4d0b6ef0adfb285af7b8935b1f7ce74728c310cd703afa568d50b42360adcf75aea0db1a6eb538d1a35c88ee0dbf5f574bbe66b4eb170d76bbff29d909c8486cf908f9759fa11aba4db27cc0f0884efe36e40c3f31c81c41e9722ead897c7c446d329bdd8e1356a5f4f1e0dcfaeeb8968fc4d7fa8f2249e0ae4c6a8379f367ac486cf5b14e665b5c44c14c739a699b9dcc0d7c605c33f6afec76645d93b5c8490ab6701a3fabacb59d0abad306f8ad7f255b3b5c9e8c6e8d9aee4773511b459707173f04db9cb996a3b32d421cef7fa3f8b70c31eb58acabd708435f3f4218de33a0d3a0b4a6f1be83e1aed637c00ae1e15b1e65b680be3394beeb67a91275fb5b7f8c27d89dd7317c43c33a993047d41a1591f9ca329fefb7f47614fb502179e4ece8698a9f7b97e5419635f989e12a07ee5aa78ab61854bdfe135aae21b15ba5ed668374dcc493cf96189193d4a822290947a87df55aa0c5d4dc63aff3d6ebd948aceae5d7cac3df23d91a1431bc04b9ead7d8ac8817e51a999d799622736e52746fb0ab4ff102a3960782abf3c68f89de58e6c67c63e20038e4ef2ff12c251f8eba19cd1c59b8475af01c4196d5ba1935df59b4ab01693394befee6f8e86eabdacc0a4cc164776f27fc6a59547c567020e2a03eb37226d575aaabdb8e929a4ce8eab531bbca97a110f8cb8a17c23c8a5a8ad06602ac9aaaec3413eee33ee2a0889e87b7e3286f9bfb03d107ef67f4f6045beb348046b2f259290b24e9128153bc7c017d2d0eda453b3e9261da64c0da7ab92231aa49fda4c70e3367a4f75e1d3ffae6ee1a0796288ffacf3732b9dabbbc5dfe85af8f498779f4deccd5e3646d7107c461c7ee6f214f4f495fcdbe560ba3a50624b68210e8716e5fe0d53d4d3fa467a10d1ecd8fa6a36e6ceb7a2fd44cd432b3c5369b807e6dd8707eeb7fe648c0f57b0b3255bf1349f0603b04a37e70a689e77c858abf9338fb6ee853edefd398bea095eb08cda4e84d5bba785fe4739e5c34c64f006030cc103da948a40d6bd70358173329d8ef54a6f7d7c13bfb568ad5ef5cc36bc4c0ab36b621682718a06936d161268353447817aba388621a1922fc3b054e13f6d28e3b6ca9515c56b87cdaf9959cea061416ca5404f58bb1fb303eab83dc9ca91e7043866676a3ff752c85d51c6006b1fa81cf8268ed4ce663a4432e5e590952df1a36a004fe9913ae26bc2694c6b2fcf107f6e7cfd5bd5c842bea600e72f1113a17df5a94ae08c415324c3c357fd2023af42f80d4669c67cfe2bc3f0b831ec107970ec9ecc56b72bffce64d72fb17a20147fab5290fb4f5bebc11ca318a1813182ac2a8925d05f37465c522f941463c636df35500e60519764b421fa4b70452089eceaf15853433a4d82a081aa039f1e24b968333feb4dd6bcef2ef9e2f994ac999bd7ee951a0e278198ec2fe66f6528f3b484de5c525422c7e4e77a31f52a025bf17c7507553e96b61ed8608fbe96dfd912e8ea813c88b42de16f1dcf852414f83e2522a395bd4e66e9e2583c0487948a03e76eba523ceda10a1730e97d8dc061998b4afb5d4ecae25d7d1917c88dd338a049c76c63e1e6d8f3c284382cd05b469d90c175864f625ed453f4b361e75a0dcf1d10ba4a8659107ce1a2716587b221a29b26c9d0b281fde48c88cfd32644563789efdfb3278386a95da665ba9cc711a65d29b27862e17c89c2bdc87f85053908ee821595003acab32e7d1a77a16839c18908e71d0573f6483e3cc0c84f4566ed1c512726042f97250e7f77900eb8b8c8772b9dc827e4758d36a2473ba2c54735c36a86cf90d1256bcf307463db901ac25f422f403c503a3ea2f2ff2cdc6299b421f58a71383bce9c98b18a9af21c47c4a6d2c92bdeb44788d72f072b9b9ce912610b2b8dabe56391f442d70001f10998b474e265a54f09cb426d91e96d1c99acec440ce7be587b4fc1a75cb98ee0ab4bb500800597e82ef5e0f3943e7587afb8411eeba4eaf2b05eda769c206499a232bbab181253b7d2a21214b02d6960b7272b70649d11dd791c858f0884a3abb60a6e8f528813e6b60d4fd5c17d1f39d876dcc077f1821368c533052c3c8c175fe7abcbe5dc15ea978fcb97144998669091d433d4368bb8b1ac6e7f8ea1b3663e3bdc0316439c9ce4d3244b929db56092cc50f2be7dd9f5e116ce167120c18e06888dab984076c4aba97270fbde531992ca8b8653fb161352289a7b4f60c7cd8fbec6dd0882b90cc1a67fd7d0c435717822e4a429aaa20d8a9a949fe65e20ae62d0811ddc238e0654d47fef90e574d4e4560633f6e5b9b96fa3eff469e7472e40fa694830cfb71adfacc8b0ab8e7a6d8205a1846fbcd32af1ad3b112340ab22d2d9bfa45d193b1688cb1d80f315d3e2e5098935822f40177a6e8469882a67743252842e68ff5612b72ef00f99bea021e0242a1854377483e69f3f84a2e93e1b6810917ca54b5443574bb30c18dd4e5ef18c8a0cfb8315410b6678e099bcf7f5a1096b1583777d874a25a6670e44512d44bdd5d3cc696f3a8b39e0a2e74cc3a7f564dad0574b78af19c91c2040b4ca81e0bc7ae0a03dc64440e734b261b8003d1b20c7ec31b1ac72f50f5e5e418cd3589e1834c09f260951ae85e5330309a0ff6c48ba3aef8d079233441483ef57b1b1630b3d112bebd2588c427bf187781fb54cfe823eb8d18c748724dccffc784e7f9a52556e7cef426e2ffb4f2a31de20940d01c5564177cf215f16e87cfb2f1d3ce89baf940df005ae703c54857955386bb7171cbf8e955c34b61360c91e1ffad87d46aa5e08d1560c94b1e449fdf2d0d0a6c6f88bbb35eb4a58df800ade1e257be921b5648b8d2638159d44ba6b9fb25fb631a895cc4510c38a97d4dd88a6710f53e12efc83edb79bd99829423a1b728e9942cad4959113c51de03d83938f4699dd3b133fe4164c2f0c18242ee60c55b26f5973267ae841feb5a4ba962f51358aaca4934be5a29b1470c3b06a24117bd923c481394a9d905826d4a34e14185dd79d9a77c43cc9655fbd4b77d93621d136c6831a18d34efd49841924a3bc4a2d881bdc62955f571265c9a278a307ab8519ab9b401879c9561101b7b88d490fd222974f538a44567cdce3b334ed1ad4fe55117b0e7d31b4a0d78a4acbf41ec905a074b7e8476ec8349be165525ced5ad5be9d3a19b33b82897ee1a6279f4fe97f6bfc203993c0accf5ff1dbca630f38a32b9791e039bc6a530736b4255c61c18b964e62d54a00ce84282aab7dbaa0b1b3dc18e312690aaaf4e5eb13f3bb49aaa68d7ca3ca65a0b2131691588685577e516bac7e2ee46123aa40c38e73d73ee84a12f3ba7b672b4e64370d4d47dde02d49fe75c8d492ec15fab9696e886cccf639326b55e4166abd39a8488b3682f236d028068719352aa6bf39af1a09c9cebcd0e11cc2dffd86241cc52807664993b9d8d3f794c39f6e552e2314790de2c5cc77a34de3307072eb93ff75c87caef04a66bd6bb4c46c9ce818602d9ba12fac728d65c3e48244d03d3db2ca5b76c7e39bb527f09c0eb3afb7854deff508b3ca55a3ff2b2f71ce8b04088749dbff96eb59941454c3de47475351584f02e0b189e7903fe64d4d82d36c186e1e1ce9868eebdcc883c62a5998be6eabba2606f63844cde2dd620b44d78341141e7c1baff81721f77516096ee452f93aaca0a3dbe0a071082610ebe89fc98ddf87fcc5a97951f8b1ad4607df3dde6da6c6eedf21d11f314f01e000f7eed348330a4555d7f2b7488cb7628430e3823b99385065e93c432c64b119637b91e95e0e8b726bcc97d2d651f3613b6ca8e0126143ba37b3719050d0d2f005e6f6d4b358c8cf0cd4f51231cabb119d40bffa822fc41c7a8c6da3a7d2b83d6e21a0743aac518037308c91c33b2daf99a57aecce4a171055219755afcd542b3a011d673f6909be2f3d2573abb1033e73fd72296706637d768309d0d08b423b21ff5c5675293f54f0e34ea0380e4b3b2a2bbf36cd9a1e74efb76c32a87aa0c8e5d378b4c5540521cb4f62986ca2c2fad6742cd40830cf59a8d7818edcf24a9308785b77448d762d9c6cca6797a7e673b0f2d9ed182c44449e7284665c552af595321f280d83df22db23dcaf43c0072eca92f77ff185064bbaa20e5e7c03a10a0fe92ba11ece25f832a80ffd1f34d89b15169a63e9e3d8949e4a21de2b6f9a6cb7c20ae086e2490e9368ff1a4420a5d052defe231c883f972e8b5a300b8a410bb29c2f462a0c581361155ec246169e1ec1bd6250ee29d20c187df19652a648956335a5dd954bdbefd19c21835f64b2dfe5896a87be90ecdff757c0288879f8dcf63cea77c6e6fcc3255c8f54b2b1ca9d68f13b675cc02adcc93f32d21f8887e9c208ddca8cdd4c6a20cfd5c515da678e42475ed8a1dd1cdd0742bc8d23a0d5db0e3d85587c4e3fa35b59672f494b336d4e88381862b5cf96c6da5443360b466af80f8d0da47b02422e10c3dc4f29791aa7e85c61bde1618a20c4f7ccc164711c0677079ec3a565663272cf7cc26748aa3f63e1321e9ec8ace8aa58689601d95254d8a0ab6e8caa4d6ccb19d682399d7d6ba5bf39cc9a418439bea6e961632c3ddd1fd5e1d39e3323cccce4c0a86ec3d07c0b2ba7a0523d558e1be3ddd23865d331857ad7767d86142919b0c4203d3dcda88d4706279d8311e0b9a5f37596d14c329f4a039ce913930ddbd7f9e8311931c5a21de90c923d38733458a28a243cd3e67ecabcb821f6d82c0693c59890ad11d725b11ff413c2e3c15763eb39b39aa1b7367c2433916f7a10702c643821465e20afbc38ce51101972f1fc477e40a862db637cb6aa73a9e2fae2b2330c71572415a4412f081ec2b28619619421e74d2cfa7f90b272980e1d8f3d5c5581c73c250ba475c9d4bd47933d19e67b7f3bb9674aa6f6aa24f4373607756ec01b58db5a35a10770609dd937d409c8ffcf14ef62af6ed882ef3481bd0ee21de50196a9758f4cadc28ddc9f793a1b811f7209e2093ac91117bdf7615f829bf9f933ff7dfb7c1c77e8cb045c80c2b247c36f6c1f06e1f7f55b1e322e8d94cbed2a26a1850d45b6505bc1053f0280b3e6481b924901ee9750630e07f8533f5b2ded468925ca81d2695358c3ce9b00980fba170246119e9e15c91b714a2d81b913e05b8e37ad81c23cf05a77b6c31b386fab071ca3383fd1c1a48b0e4797fc7d84c9f708d3e66e5ca7cd862bdd8fe9b1bb24bbdca3ba1a8ea2c296a685988ddc7332725580d306b8790c6e68be146f1296f794d72e3079a964a1619625090e7a9b779300af528d7980a729511d90f84e8d86b8ed020477e8204a5f343ab33af2a3eff36d8cfd4b499450a4fbcbadbec639c0ede2c8bed9d490f8be41aac430aeaf618795f00db7b97a433d4a686cf3d978e0ab7dbc7f9f4a7509578d0ac3da6acb1fa651c8ff29ca5047995f1a65890747df2c45a55978f406a8583664358b15e30dc2dfd1f152da25527a73f0db2c6273387e2016ff15c00e84eec845f0b5727f8a7723b6151a98814d1ffb099de636bde24b8074cc5acda80b3e1dda4f10eae7d3c10fd1cf843160006b72dfbc0e119fb6b662bfe1569e8ef8d1ab3bcc707066bc4eab15214f0fb6802a9da97154ffc6a4db6589bd62aefab78366b78010e5752bebe596892b8e6f7a4dc4fe932995c6d44757eb919a36be467b1c24146d74a29bdf1b21f95ea8f6e3066c24ce55459dd3f4c1e5b6e186d817790c450abdfda4582dfe8a9e14fc42d445ae4a7d663c86076c67621405628994a6392aaa55eaf9e9fb5d24ed8d443e9328bc7e0af226f1194adc42e2fc03fb9c623cc4602c1072ad07bdee5c61f501517b834a1eba2f7e098f5a639a8e7495cfc890e588b261e7c5030b43fd0804bfaaa3c96024659023b9120522ff1a21f9642d382f2556a90f4c182c76213a3642804543e3365ac0165f00aaea997c45a700e3d0516ea5fc13d07c9247bb37aada05ef17350ae0de3ea4f16a49fb22f02a5a648051224b8d636af3d50b54e1f822ff34479deaee3180cb8905d9fe8da3d0b2d687fd6d033d8d0d12d9d395092191688c42e7131ac66b90f3b4eb3c1e304618dd67a1413e165ecb9c7142f9e4792cd61a9c2ced6543b54355dd6260ed279f887fc8716244d7b72a836dcd32f7788fee438e0aaa21302dfa9c5030a565f3dda024bcc6fcaee52fe4f265f5fe85761277e025bd8a8434d1cd724d0987f3cfea73768114c6106f3f0813edd225e6c14ef34dc714fda8b9db22f98e5d9ffaf5a3120d4418b3a03c10061e94585275176e48edbad88143723ae9d6560e3d2a361e2b38628811ed9591675b31fcea71e255732f2d3262b469e8a06d647fff0fbb9cdaa9fae60d0d1f0ab9411bdd582e3619527ab53dbc807b5464058e6ec12a66581785977d1d95ea051c52415085b25e3fd6d5f22b732344ff3624c593117cc675aadea52983a47bbb15588400dc707ef07094d51dd4d6eedbb4f7d0256e34107cf27a57621b2eddd99cdde5ad07465059e09206d5b1eef75a6c483d0349cf721b52672dcb02be5a1abc2ef4868f159d0d66ed97f89ac2140f94e6bb069ab0145ac3fdb21de893152c929ddf5f365c636a57fe0c6dd479291809f45c32d0ce110bed73a5aee31401ce41af91a6f98b383ec9f66a7f0bc56e723c7303d74897b9948498a43e68fac7efaf811caf1f508818fe8ec69a7cd1c238ff3f34c863f37ff621701b2511cc30827356e287f5dfad824a9c2951af6ebca6a42b04c744925fa4a8edd6e78fda5b3927a3581f59a6201c445b3ed1c99d4a746d713fd07527eefb3104b5181fc2046a683ee98f1d18807d7167775cfbe9cb88e49615d52679f4fb32589d4b2689df633057b16332d57e4887a28fa2d6ca438115206dafce3c3bf3ddcbf5ea6855ae83b24769229018cf06d38d59bce643dea5ecb8942376d7709439fd4355570fd5a21f6c4d89cd74d6de9a5f6e2be3e178617a732c5ea963d9c42a385d5041a367b1e89bf874d6fbba663bc763ba0e887dd219caef6034b81efd2faea7912b526526dedaec27d22ef10bcceee0791c0f949c28d645ef67a863c750a9b795b29a1190f293f9267b9c292713e8932c8ff7eefa955dd9681ecee46513642bb8568447fb3aeb0033e122670d545c581fe520f642b79dcf2032f4741c0c53339aff870278608c1f3b561e03b67e75ff921ee64393afb2fb5ae61ca3062a41c7f14508018f33443de6baa5ff96f79fcb38841c06f2fbc0a1b9786b7ee755f0b1226b2fbea3e49db006f63aa67a52491c4eb75d6c32ce834f7cf8c22642e4541c8331b5a9ceeba32af2c240d5b93b83bfc93bbd2a435b8c8652d013d92731c41ecee0ea44c741c6d3235f137ce102693cfdfbbea82ba23a520f5f205b2152bc3f56369746ef9624702c8fcc7ee38127717661b903020aef95f8b5983b6040c8a21eecd4a29c7b136d62c9f8f73622eb10d014dd4385b7202587b334a7e1b5b8b4cccd8925f6bf67d92e7affdb3da83d86e7e01916d455f3bcbd451c6cf104925601adc604cc458985cce4d1e6e61de5b6948baed3e7bc36df06135f9b94c9dada264e0a751023c25fd61b5b4d983fb7db775e39cc2810a93eea0ad7b31b4a93496ad3078d6690181b42aa33031623b4daf24bef509126f1c9ad9e7712c2a708ab94e384226e194e0aa47d459c291dd753c172c77142937547fe630164afc75b7d485f3d88071073ee80aeec25cf7a2eebf24e1e94785e7dcb94b45b0b4d6c8d673882a1e009db5fec7932f9f9666d85f660a02cf4cc8698b4ce44eaba7dbbd5ab319742b4bb63ba250d0824ba5ab93fbb841d72f7ad2678b1446f7302f58e445b716532d4931b82c2b92173fc261aebe022c0a82776a156733e33919b51555f2176bbdf1172bd8b72f162247e797faf1ee0513325aba55f44a82a2a7cadf9519ac6ef10a4dc14c3c3b4dc8aab01f8322cdfab158e1be6cf6eb7abf590078fcf54c706f174eec3b786a20e224a278442a4e9cd8d2b4f22db10cd7ad875223019172d713e156ea9ceb98750b5b48537e91a207a8e783b239574014db6f0c9b2d9b57cf03244b23503eeb88ecc1bc82cb3ae3d0c5a2c672f98293666624e0d323dde4328656a67943ff8427a539db6a8c86585e4b90189a79de1e483c0e821c35bf8df05147ad365b3020917d7d39776bb581088e3add92f432a478b6cbdef18ce0cefad83b69e43da7c92656763ef22a57aefaa2805d779ec8ae5fc5e3739d644f31d084a63b4cef61fd8abcfa222394aad0fb194cfb436577c41a5f5c0fecd2b24bd40ea9b43c277663b8469759e1211e4292b1d1a7f82c2be61d4eccd4bd61d1ff7bdb5ab82c41299ceb413a868073128ec7e96eb23f45d0eff9b9594fc08690aeefc49aaf7968a82790850329e8fcb3ed625762275dcda39b83d7d8dab993329f923f36c096d8d182bb55c486da50aace88b85071b57c4f3ad561fe99dc5a99339abc892a6970ddad1b383dd33784363d953b57961d9096a5e11b1554aa62d391513ac59a328e7493580456148027d324563711e3ee8ea9cffd3905d2b6b5aa814355424d0859a72d4b10b2e4639c0e9aa16993620b4367c4c1caab6ca5ecb27de8bb8567f240195c9d7adb42abbbcf1f24b7d09ba9235f01c8ea658f3c11d1e51d70d2f084be692fe157e1573be292e973be4d582b9d09ac0eb50bbc890682683f181cf9b031c535b834b07462e4b5dc52ff4d66eda2a025dcb7dbbea5332ce4555b7076809e8c0dc9e4199dbca3960ed9b906bb781d0e8631d58d76119a'
+ },
+ TestSignatureGenerationSLHSHA2128s{
+ priv: '2174e8f49dab2ab631e641a5406fd710f772a575d2746c9c9b7a2b4217441f88bf830dd8d578bd710316bf443cca3f48e4e056030eaad73bdef022c2a0291fd3'
+ entropy: '10bc13cc39a3d35de53c309a6ad1902c'
+ msg: '7f47df895ab1a0a777ab84002eef5844bcffb413dabe8fd6fc0027721be348207a59316f89dc88d587c3b22d8227b659595d898890516ab0b66966e387286a2ad90627e448b1a246884465456f463f63e3ae9b860e2127a23e7a202b221019ed082173c28a9907f4e398a9b7f4a82ad79488f4a116734c4cc9b2'
+ sig: 'a8984197d241f76ccd039b1b46f431c4e5eca7e66136969fc716800ee969d8c1bf081942c52685f8b7c7aca9e49784c6f5fa6505fc42c8c34317bece5f3e41d0f982a86cd4f4baf78e1310159e14be4d0c389d436a7e4e18fc4bb45b8a5dfe1703a6578b355f4aa9c944eb851641e317abc56313c52718f186c80ca556423b1bcf717d6a83916984b4af05fb06d0c4736fda2f77090b78ed0eb1e2f49a1fca63ef4e5c7c660e8f10b3069ba6711367a9ca1f2eef7df2d72b1fd3e4ca9af2c05908fdad72cdebfca97c4bbd52b4692c081d6847da7d4f60d04c8736c71071b27c4e2498f32c3bb5b0854f5f9e9026ccb92006c8ea93e669a6d4c1306fca05c7c452477c611d22fdd2ffce7e4b268408115b6c798332f8670ca919fce94a98114a2d9b6698ce278aa12a9f6df77272f4bd2513c07501ac4ae5b22a21fe0fd8f382ce3d730c760c07ed54bbc442918235631c03986943f2505d43344fae5a0b77dcb341ff786f9ed79ea4cd5522d106292606e72780c479fb809d36000fbd4d23c975f244b843b354021cda8da38152113f873f97d37572da67c7d11a5d8ad3cf14a9cc33c4cf0e7074c1616872b9a1c0a30b8b92193d4fb773dfb79f8ac3a07ed1375d314d67c5b4b14ad07dc33ec824c11308bf44f9f7c2d9a58258e791bf7e5eeb7bec6cf87236297350f0a82925c78e968c30a226c352145c4cf07f8f01afbfe2e08886c9c59f6e4cbb47d037dea6e797da1c08126a1e04989c2e2fba4535c5b2e216fbe25028be66e4fab88309b69e0a89a44dc4ad303b85ba0488b7a8a7047521923b5a43c4cee1c2dbf22fdcf6563ccfd1726f7be30263f29a352c97ce34a8b3c407247d5dc20afa09ac48846d4ecea7a576b123c47a43733dca5ab5580843b2c3acb5dff6b571a795ce91c81c1f8b32e96c58f2142fc20c49a4d06a24ea22722e920088c08ac1ae1ff5f68c86b0b4849fa7f26396986407f1e2a7e2413baabc668ffaa0a7bd8ca896a2e68bb1bc43e7303ec8ce139481d0f837056ce6319b85001383a7cdbfeb76f3b5ad33af6869ac76b4978dc0f344bd68dc6dfbfd0a2014b2465683f77d9f420c74ef494b2c45c8f0bdea96b905a00790c9dd0037a28277aa9cd3dc758f23c7a62c6b430280630eae17156c1689d8999e4870ab2411ed8913235b7fd8bc4e8352b479c31bd24ca7792613c69b633d39afc8315b119973e4b7f7ba5c7553558b9a2955d9ed3a4b2db98f24e172f5861ed09e954d5f7e29e95947dbdece7e66550254074b6b57cea15e112e34035e0c4eeeb95ec8aec4ab4798b78e85b1483fc4361f3b2f0224f92ae8290fab399ac57371c2efce91d4259005a2f754fdf05c5452a367bb55f6f6b95a5ad6e841e0c440cdaf7c96d3dfabcf7513dadcb35f97507aee6e3dc3164635a1f9419314213e49db449636add74807eb5a2ebe89017a45ac770c0b4a771e0e5111be8b42157639f8962be298286a32afab63a2e66d43135fd242629b0f2bed9bd4869f702a3aac886669f384042195e14acb6cf138d0c00a3c8117b912ad268bd9fb98bb9f1ae6ce4dca3162ca8912bd4e5ab831e6468fb0de0979b3c2a422315dcd3e8c48657ec4de8090ac9afce3c374941f7c605d035200be9de0fde80fd483dcc8c39e476e7e8d37a8ea9b4b27673b2ea9fc87b39840c21ae66a944fa8f18b5d9c6c4a00e71109338e6ad66cb1412ec1cb0fc37f18d18e6925b854b0ac782d7c51329d07a5efef9c386823cf6ff4efe93c32f4ad22d82f576f66b6ba1438ebdb39a0b725036668b5bd2309590e5ae1b668dc4f173718a6f9488f04953767901da17a2405b76fa6cfca982ee101f7f9a77d59dd807c7ae6fecc9c819d744b8f0183cd7a3b40ee6dd31bdccfe2f92459a6f0c0786db3be03e201ef6fd7cc9b637e2cae81c21a9fc58672f960f6c926180b09f510ae732a84c399bb3fee7b443cb54e54e64739aa9846952090f4460d1d2020acee02abe63ffea127a46cb080508b46d70391460084c504241ea2d6c0bec047a05b0a76db5b649b9317f1b6496448817d0c1b7d49fa6d9a856f938b09c8cde6ecd4ff7495c083d950a49139b68ae8fe6507b8e0f32dcb6b9aa47b16ab61e61ce403867f623ec39ea454f54db1496c815482af51af3624dfec6ac6b32f7ca3a2f772ca32965012bcc6e151537f1201d616403ffbdcc768bb1dc9111ba49226d7a715b6706373ecc97332ad8445f032c2258bb46b37a18cadbb8a5f693189396d84b14d6ab0c301030a1836924a34b6ba0ddb4a208006530fb2bdd1b0f935f90d745a2dd44061c074950f97e507b51a9f8117259dae0f9e7dd6a347699a641549284f7fd7437b44bc88f7489a669b1d40b715a57b1c3f05aafa6e3fc0b3e89644485746fa062426f440c59e1bf73fd6dcd24864c3ab7424d274c4b934a8be6d75a8853b40a71e7490b9c07ca24ded6d36ba133db21695426fec2ca62fcb0cb9ebd1e82d2334573614fb8ba0bdf65529320594428d3fae5b8cc782d625e563b79b495355f8623edd188390a89956332e38c9e46143b23c2eb40f763d76595a4bf69f3e3e0916743879d1464ac0aae0f7f4632db115a4d9a55d24067ade2e0fd2857cf3bf54560de9d136e792a0213391ac6f3f2a51570e43c1b3ef99383f48b554457ef41238df05cf8d38acd409afc33a25fd8052a6a0ff42b9453a98beab21673f1ab164434e15c86161dbfc291fa18473ccc7a76aca41fd0fde8f4daa05a5f130a5a5f7625bb01758441007db787b06533e96e54cd9387a67138da2558eb24bd46d48f2d8d0c716a1661630b97fe66d90ba2ef5fb51f66479b13416d72159e2ac9710e524f4fac024a3e78bb80ae6f0dfff17e1e923592009eee2c783c0d919d81c61beb64aff71d0cdffe7cd47a1f61a3e051a93e45f816ef9cb9bfb48719d9b5b65f22bdc130a6554bcf6f6f63feb7506e1be2ca0c2af9d14a2a1b405b3ca8da00578903b1410886c297633fce57d7d8b0ddb68dfbdbda6776741588344d62fd4e371a4e755f6d9e7e4226b919bf1df92354d34418f83c0600dc19d55920788e774ee6b98e2f0427b2ed428daf4cdfee920eb33c870d71f1dddf3262b8142c3cbf520f8e10e46106d1d3239a95ec322c0a2bf03f75e0190d6ae5f0bf24e8fb92d8a538110d67d1a024314f2233a81c242923b5c78bb91fbca44fbfac304d47f144e07bce81404d320486ba0e2161389cb973565605e02c3705023f370be9fa4e505915bc97e68dfa80d21b783cb574c12c37e2fc55e68b825970c6ba5c7fd012194ff7bec9a8660dcb4dfd60f123354c129004e050795114d09827c3a0c264dc2f1959c927a071ea4b66cf71b140195de1f94b2f09d585a295afa201903014ee5618a6d1a755a973c899667ac6976c47e6286acb94f9914cf734cb1ff3d93304f6c103ebceede3698eb13c982ffb914ebf0ea84eeadb7a12e15b85ff756d8301a378ce571f15743f0a5f3382e0fe0ee67cd2c94804e3b8d6779a109a7a803c402b1ed0f18043526629e203340d6e64851a934251743e827beec3a2e769f539334e5c04b30cbb6051bcfce8efa5b59e4d2d6aa734a17f6c4d4442322b0c51385fd9bf3d8672071a4a39e233c24d3f36f95307a7af3ffc056e9d2b4e5f1694201c54c6ab080aa02e7c61b1bf7d2dfd75fe0c7e3fdf6a1f641b497e24e5301cc1c38dab48cf0a713d7e603ad12d88a20802c3176c7b389491217965047648b3e0c3b43b4ed8e7e09aec3b348c1b593a7765439432dcbd7d44484e8fb80732583d8c4bd2829fdfa3916fbd997fe13e8354ea5d5851318fce5b58851a03164f69307df6da7619a610051610ede54da8ee8880713026ad17a3d9050e19d16b25837e258a5d7fe59b3971b5caa78f05f098b58cf94682234f80155ec4698f61384da30f9c4cfb64f8f65d9744d95cf4a431825c65ab1f097bd6f6a9c7eadc5e21ff4e14e9d154ba52215ce3b1e3ef20f6230c2dafd5522931fe5c2c7ad411b373f3394a5a72305b9eda5433fc95b7df105666b6be12c2d80db9445d0037df748c53483efbbdcc960ee0bb6604d4aa6f7d6d39c34304a394c3dc7e85c485beddd7c51673f997e44f8bc16f7b708d0f16a266af255d093a2c0a6e46c4869ea6934c3dd36326b9e65c30fdd2a9277018e1671420537e794db7ced5498d9e3b58b1e66c61d3469b43367804ce4857f238c6ec69e4d8b8409fa0c3d1a98b8bd5f06e4e5bc712bb11da033f0e4f26872c91b03702f28197f5f9004eabe069bdc0bb38e5cf77aa2be60b5ff2fd2f7a38583f9b9e0fde1a2e69b8f6d6386f7c48cffa5031de342f7795e944505d481d02289d07fe33670483b2d63b03ce2781e0675bdee91bc1c232aacda98e22e233c0f1af93ae9b0eff6d144a1316cb1f5dcc69f1eca155e4fb4293c0855e0ed3a42502223e43e58e82ee221dd292dca1f1768d94fc0f436e162af3748429fc4e4ee8dd376d7914b693f74e35f29ee28e9480733f7b9edd2ebba19486a971ef8e76489c1ccfc844f5c9a2b874a79089c8154222bb94cbc13bcfb1c4923c65c4d8c981e1c681bd6d2193a00dbb3a9ad9778c363e3643a12cf60ce8cd2bb1dd241ccf149b95b42ee5cbaa59c8d1f822c9653b436dbccd4cabb3afef0a558f1e76e74687e70ed68d15d5fbe3c9e96e13861be6d699f79f1ec0770b3674ce81162ad4d85c118c8e8839321f6b2ee91f848cb2daef8db7d5ac37c61fa0d19fa7b349f628894618dfedd320d1fae2c18fadc3ce792b593c14c2121c92133ebc0c0932defca5175756600e8779ca84a3a884a963c4d86046354de4fbc8212c367b0910ffc714db2e7e8176eb9cea4667db9cf73d867008f4499802da01f9705a32b4a18f591c251e9fbafad2634e781ead2f530bacd7f5409d592c24f112f45d6493cbe79cac6b12c85f93ee2a1c71187b54753d9e92da8f4fcaf380d995f7255e6ff6fb7eefd34aecc5d9b8ecf0bd2954840a5b03bc1d879cd6777dcc7f30941f536c3e15e36195bbdb9715050b9548c7fd773884c9c30442807b267be2c9ef2a0b9f1a3333ad03f30efb5c8400381141a5d18629c03a36e5ad47d2caa20685ee8517b9b0b3cdd7fdb3249ee5d795cae2ac79ab3fb429875c064990ae8b0e80a3850e4ef00924289cdffa7c612a7d36b4b4a457aacfac81fa7e022bbf936d90cf019d4d457959138453e6ce8c2ae0a3c157abc6a78b14b36e42741a4de3c606c9e33a1349259892506cd0025795ea8a844eed4a1454d16c0fe89f0befc37c6b1d9f560e9b4d51586475f89c9021eb0c04a5977ca806287b98b886587d83ab1ba85b94217f70379967db931d0969b1d1e23968b0a4c082c50ab13083ed49e8dacccc4b0fd17764edda3f551c6da0c2b81c4aa381bb4f1afd16ea768fe277ed263f8d1fc5b0733177393e0369f83a4fc57711bd7653cdd560763dcdb70e798e625b572f2c58b943f4b1099408d70b4b9a95835522107ceef7708735c58ee2773e63e98df7d29eaff4d70942d2e8aa652dafb946695f8be9e2736515056f7969f83c7b8e2e6c6ffad03f4beb609cc203a02e93dd794db6e57c29c99c92aaaafaeec1e7988aa3725d4ac570434c69a03ebf98adb0c746262ece8aee07e793bad2e69a23ed3f002691ec644057b874b80067817e56a7c3a953c3cbec392a657b1761d5ec75d37b8cdcefdafeaf31d2f1302f10fe3ca32b99b36aae031fce622e88211f274b9e951ef63b99e6293e06c5f2f2689c1be33a8da42b1e68bc7846ed8347800662f273ea59d36e9ee9d0a7e84a16f8c3e8808786be296f2a7d6962d5c9d92b6ee5f63fb4b9f27f44e39bae1c5ff214d07ad2f08194439a36b2a62d4e25752f60bffc5eb8ea2da16896131ce20e5c7d11ed5c47a800892f75e24288eccf10072c283dd35e051e2603f37cc1fff29295e30b9ec17939081682b88e4bfead685a2ca9c4e9397b64cc13e6453c530de4257506f6eda007c587ad30e0202428a8d96eeef533f8ed0a65fe756721f186b461bfe6b22626dc07f1be2fdf5c92461de028d44e1b3316e9fb098333e2159d8caade810d8996da9e1f0a95be486449ee96de2ac10c44c6390c545bf9ecfc2e88b00fb34339453e52eea8c2bde2608a62d5dd5c97e203dc0ca90aff44816f2b99a5944da2c1289386426fc661061f2d35e6c00fd4ade800b5b79587ac3fa15b9e7dda206485dc3f8089059ab2edc14a88b766f237d9512ca465ade5338612c4d24316c326987407963387900b76c3f21a1b74507559a99db5a2a3909c51263c916b48ffbbad0dc63d053117f218c0a8a64e51a848fa747df00b227835ea70c001e28c0d2c469c1905d7312523574f889e9bf6ddfa74b9df46a60e083ba44eb91b25926900d7978cdc51d2fc3ff526c15d3cdcaf0802a6a1ea1e572575f6b2a8da9e71fc454370a2b7d7e35e2cc8a990e7ecd657daa389728509754a1f83f6617fe1c711c7ed1ab90393479d66989ca7e32c7dd30d1ae8a38f8bf92063716892b044b3d7b3eb15d1d185d66505be4434d4dd050acc4293c7514d88b7702a5269b6d65842e877471354dac5911f50bf1b0a51ac70e0b810c6735e353d3896e71f84ffd72355b80441094fe7000fe4b62c995f458dfc8f3af79294602953212fdde31f778addcf11f6b129f8c2ae99e812ccb262332a9b5b9ee3cd87801c02574d7ca2980b9aa14f5e7914cd799fed1ea6d135945e0d9a1708d83a355ec4290499c5e216995835d8ecce2afbd4fed4f565789ed41b297131af03d8577957ecc77a8660940c53711fecae512ed80a3281fc0ca60584f14810f97db1d893f1fd7b52cb3580964bc8099c978191f21aca1be1f88b400a3f563b9afd412d4350df2ff3b7c8b1e5ef29f8de21a02a60172705e7af026fb46ee60f6a2086952cc64684d1b4125e5671162d92a28b39cbbfe60a8bf591a1b8d7300d8d6540e6e8fdb07ec47dfdc601ee778261b6fd60f745f26fced355765e0b356d48c5b4f83f97b14146ac605591a80174aab091ac3cf8cbe2d543d75ca2b0deb524b82f3600e00a1fe33ce9a834d9750338f07f5c3858662f85533f154e88bf04013d65eb4de3fd0abdcace41f254624a0359aef0ba8bf7e90c7f98495b0a31a84ba89674b75ef4c471e08683e959841658057a6a5c32316b2da3a2ed7e7f2bdccf69f1f3a6a3caa8de6a1cced00251e1276d357cf4541998f4180fd04c6415d4f63dd4b6b2f9ad80daa3952a134d7a6c9f47889cb08e012322c94cfa70d96cb2d0a8d7f452f313c1eb6cc4f95a140625f667446ca73172cd60021a135daebf6ba9b383ce1eb55432be2bb388e8366d42ce3744b83d02969fbd0169042135fb39626f6ba4cc2d7ef9339b18bda099ba154f81ec9abc1abc2235b7e3f9fdb9b22259005a359898b2e5f1255ca37fddf1a04ae70de9008c06a18f9f4b09df00427158079548a4189236ce8615137a575ef9cc5bc281bb33b615580a86c94d42c366b5473f49e37291f84f5d65db3eef378894fa23e5239779500a6a48ce0f1a32ead0842589ca73cdb1e08944002e89f974afdd85243476978b3b815ff4244c3b90220f68a6e1a008ef6d436a3b5e19befc3acbc1a9f3d3bb4f0c57612a070062d7164fca5c49e50b6d4080f6e441f03c3d57d637d92d1b93e5c4960f6fdd5239aeee5675e98fedf705f8fe6c524822587cb181ef76b2d8d3d4630762225d74a5390da806b887ecef12cff6d3071262c89120f5c7df235ac3110636e5c2f3c410d5ff976aa3adfe862d19afd6c5891d189741cae5ab5e12ce51ba29d241492394d5d57dc5a6a3a42df64e9f8a08c72d33dc6c51a16645a38297e0df18e717f76a0ed36c906b6930766a477a9db9a91975497446e9d4550682393d1e585c6ada97157acf5df80ef2f265b13fcf1fcae6c6a4006efb86d3a11c38f08cc3b235b6b256d54d17e8eba13c0a8a004bd482e864870a13c9d05054d9b932d36ca8f38ce754f5dd475d240e142fbeb28098c506f5a53a1c70467836bf3af05c08d12d5a1c28abda8e68bdb628246c0e268908a2f68d51ab27f008257e53b38c92e9c1d717454bc9eedf21fdf1d19c0971503015a21a98ab605e3b8d5bfbcdccbd2910c38b93fdb2b4d3c1c6024417a4e786ec62385dd66e10cfb44d6d53b8f241a40f9bf38743af6c3d4f63a606cecb27d50549cd231c0deef18547646e82ac38145ec601baa150668cd7d3c385dc80f3f98a22db9ddf3dde2429b92ab5d040094c86b68fd4c611b2f1d97ad7752da68158e505fe5026aecef20553563b3d94533e0040bc4060345cdf71edf7aff91662f7329e21a55ede68ac134c7186bd7889f6170eab501600b7c8254b8ddda34d6ab17cce10f5aed41d1971adc3def564b9ac56abc7f356b7f5c0d014ccf7142b01fd2e05950815ac762357f2464307f9352666a9862cf5ccfde288895f5ce95c3a1e29d07a9fcc5485a07f9661c8a8a5c4e9dd3886ed34a69508e7ce8a0f36beac5b5b4b8208030992a86b20c9a127602da2cdd732b7a4c7ee7150083aaa7291f550696c2838892392c21376c3881971f5cc119c322e43233037b2c515179b9a15c7ee4d771a6be3e7f30691faab9dce996ea53c774922972249a7c9412bb482de76f6cf59526b6ac93a032e245fb72419c5abab005a7f1a3acd11990a98a353fbb4f1e56c029c8f952b46ba9b0c27d279d0e4d61247348e8dc7edc156b9a8f39a66fc0890e6ee7cd08dfb4d8687aa3f31f85d0aa1252a31fe019596388117e20bea2c8275614e9eecfd646a2a7e5b0f9ccaa717cd0d60432f40b533ae87786f0a1ad85675c34a5989fc060da1ccc91c3e3f0f12632222ea6af53ac3f7ac7086a5d39a3fadd56e0b4a6348fbd9848a38558838826e610312bc98022e735aba86de56661983f406f8ff067ac38cc2cb724f3070a83714b3d5b28f799363f31a462f33dff50edc51b02368997f432ed5b1a6fdfe7cda8a67ce93d0d574494ee6a404dea0ce7385aad2b09605220e121b03f9e71aaa4e91d970215ff5377e7bca90a006d19454d177e735c3d382d6ae9c20d27d9180957d50fb40f0ac13c2228c2bd32e2c4e53aec9c7652308dcc27643c2d83d79b38cd02468c28b99764507a2bd88ca5d1240297a42510cd942524e9cd248cd80532e83e97ac06fb8956ce24b0be5a79561642a7140d6aeb238d1dcd607dd72c3c275725c6c5fe274b29bdf4609d0dc4bc92b64b3b784249ecf4b75d29c583237508c951eccd6754db4573e37103f39a28b034c7754a7e839ed1d0aada01ec4b770e60e81a8b0224217ceec842f8c9a300d47856b086063014457b9fee749b8e7edc353bcaa05455de8faad451e7706f7a296d434c6bf8d105f593a2ac5cd7e39b2e40d8810224a098250782f490d26f2076b083f3173b2af7b1d4eeb49b96757cdd828e89179338ac1dad6fcd115e51111a86fed25e1009bf40dda6a92593e9df08b84ac7dd5f1c6ae9e6ff95494df9403ed831b8a51413ce5cfb85ab816005ed3a87cba5396dab1a110c12fb067b14f54f27ab3e61ddb3f9fec371a9ed42a9ca330e78e055968b5284a8a2c99378a127886e2a4d076f76eacaebb2e36fa0720d08af30a28483c0ccadf8cb8a1c57284af2ec9f9ef42a0c5333d60c083cd90845827a53ded012d3b23af6270454eeda9bfeaea59a285a96e05942704f4993fe41b41503ca251ec1f6bdae00eab25f41cea30c42879673b2b7b56973c7e821f082ab765cd7db7ca270d89a63bd5a385bd78b8be38ccec161de22b9ea1f8dc85dc1090de163662f438732c806e2a1cfeafb5e844eae8c7891f90232d4f69a7ef83295668eb64aec60943885e759f7d1cf48e5b9f58cb3441e2c86fb48de0b6f54aa3007dea45f0168bb3a2e4cb5ca243e2fd199373a0165fd4e4e5d797ea0ab1e72b58714bef692c3d5386441944990131c71ab20655b53f64a3959684d4714d870b43134b16d1d7e8a1f57ad967ab2f304a54aa9b8cbf9fcfc897e3bdccaa0f3d4153b89aa05b5fa6cdaa853d7b00f4b50e1ef11982caafe73e0ca75296552edfb8fe4b7d502bd11619f5ed32fbe65d6f4b13ae6faabcc09965d6abfb3fe0b7ac03fe376abd52d8f59b0db4d35d05bc3872e34df8ebf5df3db38549b93698d082e4e3c7dd5d0d2dd1952f3e791df515f55b7733318bc483d62b2ceb5b8f399668070164bbbccb02e610e8dee6518f6efdd5c5b4ecdc7d73361b147f442d2258211606318f2cf0ffddced7bb352f44551595824687366b82fd47c114ec0c3a91cb1c1b003dce72fc735848284e5154c0d103b45ab827f69c248c3344dcf79447575e219c07adb8727ce165f9ccb36a7a24ea5d0301851899a307b447d4f829e4a57edd4e887ba30ff8c338079966d5fe03626a7855bfa36c626eaa6ca0b4492e2d23555d3afd5d50a720c62cd6e06ee78a29e8d8b20f23a95890ee1bdb7b70f938e3943a8543c06b48c16037efcc8dbeec4624926712c961ecf8e5ca2580283abbc53fdaf2ca68460e5bdd28c521026b0703d911a2488473ea44febd4d318c7514e21e8736d07297fea673669aa4e3308c2d0bd824c1b73574c4a7c37ebaac0792f109519bd2dea0162f4bc69586dd4717701ee542f3f6ff0402c2340529e461b0bc36a42490f893f40085de1358698f2b8e1448924c6b9a3a33d3f1d40fd28029c4beed9484d956bf9b4415f6c599067689a8e912595271bbc3f1e7fa4b0ff3a78408bb7321b122e66a1d4d98d71cb004d66e2642a0ffc55619d32a7ef14b04bb84e0f04cec1aaa11735ec7f66cd9689e73346946b5c38c36ea86a33d437c13ca3ae78c0ec21e10f19fefb95732dce59459beb25cb02912dfbd205b755f6f9e848f8c4c23707dd2ff63de6abe5ef4bdd8a5b7a411261ae7c12bbd853952f0987ecdc2033f7c81aaeb0f991de2528d52fcaa718e7a1802ca599d19d83cd59d2f71b04f18b821fd3775743d0b7ca2d9c5e05fde22334853f6e39dfadabf2032f8266d5ac5e97ffcc13110567c361f1b9071ecedc9ee5dc653c223fb902156ed3001f93ab'
+ },
+ TestSignatureGenerationSLHSHA2128s{
+ priv: 'be4bfeaaf8e4fbe9bdc93b44d621380a48090ab3599d40d3bcbcfb50c0564d7b48f8846d7ba5fa5ef49151563e84bce614b947b2be7565f4fcf7ad7a5ee899f9'
+ entropy: 'df096f9d0302657c0f9b6974b80c59eb'
+ msg: 'eb29cb0687183747a27d51778eb7282fd52778778ea810131092cc90e4e3500d348908e88622a237c28d5309f70c7b895a2027262f6d94f4125129294ff9d4f6'
+ sig: '387364e440c43f36d5cbecf78ddfa7f1bd52bb3e8106ef942388825b5190e0e7765a83bb807c7b098b5ea4b1dd21e23c6181c8ba82101906d3856dad4bfa62e816b011c3c58337fe8bc680d6f5f5031f032843ac9abad7c0796245e3748755e9aa513788b7479373f8f2d9d370614cc537a594be1fa4dd1a64b70721c4fd1134b1ba87a064cb291818dbe9b3f6a19d2c5fd1b24c88124a11a9889d7d760a399822825b5167a5ed5fd47c0622977fac96dbbb9079e5b0a646fb67b9791e881dd99a26b8339d9fa001362f9c97c9a3b860d59ffc9ab7375b73b717109e03f187da9ef005630763ce06bc0d18aa2da00eeea4940567c93c2b7230f55590259001d8d9f94d87e1a6fc0fa7cc76e4959bea5b451be66dcbefca49e21813776f3345dda3d8269a3e68a622204fb3ffe362f95ad0f5bbf18b375306f141d44a70c9b5f95120ce6fad4765955f5dd2e0716bfed79007b28b447019f22f981b3e737c1be4a230ccdb897cfe2b2d282faa91387680247f72b5a091736a0ed87168ed71e5ce0b7021674eb9c203795d04d5ba44cd19ef32060fa085308e939a83b2cf00e5db18ddcf205e95a4e48d350e26d97e7777aadb85eb78b5006b6e829ad2dcde0a0a101739871db2fd3036d0c77c247fc1c726b8826019dcd804721e7304f4d2858f5d2f29f87452693e14a6b9df27097bb5f5bd29b54814ad0d80e3cb0d0fedf3fe42cf584c1c3d986c8929081b5fa06996dccef67f93c62ccc9ae57f2be204d2b04d2f326cd8dd97c1ef351cd101312cd23f964884f7c79f8053aa9cdaa95c0990403474f7a76f02aa61e2cd0252a8bab84cb4fb8397320882737e8771d408879b032a44b8562ab41d646781ac1cf5596f5c29e5d4650eac1cbcae551874afa2d46c143572f3e7e826c0d2b6ab249bf3777570c802c881aa80c5de9b06d7bb9c87bf2bd12e82f806bae57f32f8bed88562da4d5a4c48cc9950390e95b508faff7543673e624ed438c9b4eb8a2a055478f79d98edc1b942156a14cd0ce4d0d049123407306175bafe3f6b1622c8423cbd31cc46e135ae75d61b0b74024444af8dc1680c9c8f511d5598ec92d0c2b40ec462f5482358f4b803c1e2e77d2e1d6dafa440e23800be4cdfd10568c0d9a4e2fde113f31d495b0e8b0eaa815874352a3447f74ac1134d49f158d8cd86f9a055d700ab8fcaccfc82ecff216ebabee300fcbfa73e3452e1d051ba012f7dda395836f70feb87931e5c90125defc399349ae9a4103c3a85a9fa79a38bf8bda98c90e27712b6b67ed991a47b95bf33e0ccc0b7b4d5ac404b917907f55649f7f6cb3cc7f1335471d1489ba40e30311b22e1744e4fb92e68b2daab4e728d26c995eac88b5e95e3b8605d3ef2e71773c02128f8b2c9b055aa204e6dba68a31e08ec4d9c8b149aac139e60783ba51dbfd16738a9f9f54529f260df6d749cef03b008c08f76d11dd8d00f7232bfd2bc22932cc6b0f88bddbbea13291bfd9614fe6f051ebf9d295ba09df2b03d9a040e771f0ebdf205340e334cc3d3d40ba546383700b4688934150d9c6affa5e6ecaa6ef9846ade386bd571ff180583dbdb13d633096b0d20bbf51ea5fa9a98d9d83f3685f87e78d684dc8dddf2250b917eb4e046bc81e46296ff12375f2e3d7f7beaa120108090862d145f05cbc9bd52c71a204032eb8754ceb6531ff077cad16dc955bb9cc6644f308c48be48e22b84a93215c27301fb459fc704a077c81af05e2a0d3e946b2b6e15b56b1e7718fcfb00b317f6d7c345143322c32fd2ce79e421629d2117accae16af5322f90e22c3931f8d6192890c75f7aa51e990746313d3f97f38fbaeed0e00d48cec9ec722c5332b19ef46f0626b6f03ca15d60b06d041c7b39f5f2d1eb90a0ef8f6d8ac066e49e5d5bb04263dfed241aa9e0e623b1f08d33cb22ddc31c889747eed19c0bc5300cad7ea713dd50cdae0c1ed8709051a0d044b42a9e7e6cb43e0700ef7687d0fbcd704fcd879fe1f3de894ac5d0dc48e5b2040c88a7d424011dcce91b97348d80479de6caa80ff8a6f1b426bb03e619a039f04c21fce746e31cfd4fc905b024acb5857eec432c66603be796f074799e74f7d953b034e837d6aa2d72dce7827d32fa02b04b9cb5215e7f0c67f64fa55e63f3bc58607cfad3bb0892482b9afe4c13d73076dbfed0fdb2a575a9b1b10d4bcde9fceb30a76706ee39ae9f9ce58ddd1bbbc52c0b10b2116b9df3563c441e991cb49911eb244dcc1c675ee6ac23196b5af91be2b852b6e1c62c158266f5b22fe6e8019cd5c780c89319c45df8ecb049e6fbe6ff9ae3a801c3e15c5848c5d275ebbefa57cbdd96740e857c3a2a173290f7c71dfadc95da4a5c45645919dd0c8b1e20438e6cfb912569845cf2b0270d65949a09e0752a06d42e96d73e1c96b63153f28f04dbcc509779f5c4ce0d88833ca9690e73f8a2b16dbd37f0a5d63cd175befcced3bb6541e844df1172d2ba2b4297ef76f9f01ddb58f2fbf073ea22ff543ff9dffdd1bb419acb5f0d7f739f8f717f84a02a3f03750324bc30e4ecda5acdf53bc77d8d21fe5290fce64994a45c80bf5631880a303586c817de84282d1d8ff596aa95e51740f1c46e877badf7085687cd362d27e52ab57303c831813dfc03f87dee3c344eddba2dc663c517603da2d21ef66a39e6be054f511de6a69e4306ae10baa0ddb57aa626561fb1f9521b12d92f75782ec119dc41e82f60c8b6199c31db4f6aafb36d9196254a3856edcf8d38ab4fd17f091344ccc22520802a1cfcd485ac0a4f6a6489f98672857cc8343c25a7a6dc7fc8bf41df905aec371c06092a06c86c41c6e784495a339858213f83ccf2b635f9839cd128444fa8bf766c7c1d3ca486e5d7d74a038959a87884e21e12417d64a68f695940a6a89d95fa5371c44d9a86baecff1c98d83040fd8e1e7a5a97c46b1219b1d7e9225cfa26279e2b5ec7552618769d1213ba0920b69557fa57d9affebcd74cd2f11c2c5b9215eedf03214d213426037d83d447ae3f01929246bb8d25578c63c3c190eade26db6983032d3b56617d90aeea2dbfa635d1311f7ae5d633a686fcd8d0ffe765ae7cb486d384b60b3d3da8e561d4bf75c3976c0bdac0aac0fa78ba0be27da88d87337ea0692e0de95e74124b328a50e8eb2c923f4c5b869d2e5e1ddeaf6c053c1be94f7a24e0ddc59fd3664da4436c940a06ba8bf95af9dc31c67efea7f6c42c18ca40088e3210462b4a1d9e5353d4d39e01e5692abf5ce6a2ed086c187313d1c5888ae874f310ea297c6cc45367cb2634326f30023cf3f0fd4e015c09f9f69dcadda7d7e44ae567cfeff06dc5bdcf0fcee74c7cd3cda20a80b83471e91af53f85c793a130dae12cb583eef5ca18e761e2a894a904e5efeb7bfaf7519a8f267572e44a048165d2cfc8ef1cbf072a697e926d3cbc9877fbcff72ef3ab8c9ed5743d1706297bef5208ec5addac92ddf29e89a0a02e6d29954cbfce9da9a676e33abd3606f2bbf387d9e6232af2d59758b9e681956cc0ad2f47893292da3cac04ca3f621e00d535a32e9838d735c1d9f460429dfd6a15730c24ba696a55099dcde6608bfc8641287b7b1e46a0d9240f39776bcfe05edb17fd0e1c2d0e449af57169f3aed1c20d16a0b404f40a460789ac34a7f033efd1d92ef8044b40e7ff5f96f4f321672f509391692bc29c6b89abde14c845d88b3a9ad5f98d7a61171942bb3def099b7ff1af500d8120b2d93aedb65eb401e336316f8178aad31e5e4c9f114a2dd6d138b5522a59f255ce434c3fd62c6d68f3c81b91792bf46c2abc26f6a1737d68d9ba5d4e7c5f87e9d43d769fa57205d8bd1b74139b2635f9e636e88b799f3487f514a3dfdc3696f799d3f7a9996b550c2cf36a630a864aa9e4544775e00ee52223a2ad2ab400af94a8849292ef2e0da028bee220a7996e545525f40a395cebf10b4d9492156915186dda50b3111c62eea8b915244f812f5845b73c2f2ef1a91963399a1d44ad8f3f5d64162f1a9f9da844776ed800fa6baf204091dbc76e650d8a2bd9eb7364b9aec9b52c17ce27e7effae75405ec660ba15f6b0940b20de7c09fe4ff5b5dc3865905f7a30a0c9ee1b1f51418462add015e463fec13b9f883d430fd1dc3a89d85214ea11d623a02eeae46af30ddb31f23b0df52e768d0c1abeaa72f84efc7f2b42d7611d2b9231a391de2adb11a4202722cd57b8682f8c82d9fb29d30c233151dd2041a7c45b2525a52fc910ec60404b44778416b9c875ff152f4919d5a72349400c0eb2b1bd91c4a0e2fc82d05d92330ffd874ad7603deeb5fd2a332426bb7f6bc416855ead6dae1d0ee1c50f0f6d26cfc665b2a7aae9847e437aa04e55235ea8d73fee474bb3e31c994cd6928f180f49e162b42a4a2ebee9475dfeeba27bc31ea4f9b9176a86b5ed911274f6e24140ffc5409292a2dd2a649866dda859689f00d26c06fd25727e80412bbd4d39108414f7f894c412ab05cf8e001bf6827ac78b99b9f15082874456884ff0913c0080ca73ed8d8f40aeae488fb104d86dd06e61adb1084ea725daf0c878339dec8e7928707b238e8f0575500a59071bba79f25a5b5bbc387c0287c5e1cb611685e5f67411b7e7076c4413ff7f8bd64db117bcf0ac88e80cacc129e841b9edd204f9fb1cb9bb217f9daefb76140c858dab27a7e3dfda8f325051acfd0d1e117f4edc6b341366d3688adb3dae62ddfd3bc254ac3f0803b6fb13304d3295aac6af21977fee23335bc95de72375e763e2e236f68be8f03594d5661e640df516da43725195cf2a4cffe1812b7a57c05d05ee5177001be819e365cc395c12f22d3aea7269186b68b315b27bcfb3d12208363c33acad0ccbde4dd42eb3492218e0020f7ac08823efdc68292d3c29ab0c2d131daeec8dd99a22b16833435c0e50bc25ee77a32c286561ae2adae39f978d70c5839240da2c4178b0f6cd57ff7b33d31b86305fbf95a460913486df2a27d503da7a034df8d820d6321494958011a06bdf8f3cd0d6920f8c2c8421165c987ec32491822f541a742bcbe9960527ab122f80459627031a15584bae52e2fd0e8a760da7f0b6c5360ad9b0f63f5f0a1fc5b0e403f8d1970ceef64944c594ce9f9203490cce5c7d59a64fdff4dd8997fd59a8df609b41c1ce835c7498059fafac805cdeed137ee84a364eebf0833bab583e488fba4336c8558f2ddb04376beaf2d280a9d74a3e32defac7ff3836c70a1dddb16c75a812b564d38e258249f6678b8a5bb0cf79bcbddea9ffd5295c64de154adcd39ba0e2de1e70608db4a9393b74a4ee76f111ebd3f7ba154a9800d8a37bf26ea5fe90d0ee164825505551f82c28d046e92d49397c02684e5b207e2f941390b0d9e658f6afaa5dcdbdf40d9a5d253f85a8f6c9c65dd6f41d127f916acbd7901a4f717e11ff0e1097b09f4aeed52622eca7f1d117fbde24ab54d85d38a2b7d279b8e54fa4f84570631815e0fcd88deac499c26f181301fad930108a36d684bd6c62b2c46651c241f41d4da2b46c477288db5bd07fc59d33a762dcc93a89b9d160a9ab17638d420f565181491b9d973ba0367fc071790a6ee5e42bc3b53a5d8b6d67df4eab1ef32a636cafe00d9d1068d2741670c6cd25386e0bd6f645e2c958c4e71186eff5e9951b0e3ddf8ad99fedb9c28fd1ff9ced30621d637f30db9c54a112467272a1a14e5481133b7a27e482e9fbedb468b99bdf49e0b42e6de8c824097c8cb036ddd0485d729d5ef914f69c9d80d25f937cf777216e5f73e795de787c5cb64ab9eb4ada9fb0f6f9eab38f4655bec18487ba711e3860a7a9e022b2d82a4440c2be64aaf78da1751926a792e5c10cd80a450ebd8515cb00deed9518aa232e487d2a2de5c289b6252a253ee21b4e17e5673964a1d5904e4787be720a4c8db4029fe064023550fc6ffe7b78d2a74ff8fec1f84b06be5dc0b016f6682058c16b6214fc22528d2b13250e610f7ea92538d83d371da1d655b3383dd1568b18fae143702e92a1b6d6f73ee4f1d331dab55a928417d2a4521349964aff40b66696ca6e06d7050370c05837517fb36268309fba1e45f2b9271ef353078ee7f98e8bf7e8763ca848a44a22a31cd785fb1949c711c486edb2d9c3c2af8b8da9bce69892249e5d6d3852156e104e5ea08d9eb60cba22cf384f633451dccb047c00b142124cb9e0b801740f64b064652ee099e60d38a8f0bd8442b70b3205699ab11838a53cb318162323ff5e72446bf43e06543298a776c9a0f10fb925650184ed1cbf8fce081c8c8db21e9cacb2e3d124ec9c77a100a536d70a99dc677ff6b2e0f09efc5463ae4d506d342ace605b20b3cc715973a1682a6e9d2fc3d4c1289d4376248a8a94e9037e5af93b0870d4042dd5b4c807dd397659bcd97f78e63b6473b96ad1fb9c4257fe8775bb10689a5a40032d23f1b9709914b1185d488fb3dd55b756f73fb4951e00b30697924774ca76b7b4618607890458d82214b1fb352d514b3bacf52f91f22acd3b4169dfe3b58499d1392c2edf8d83eec44b902e370e353f01fe37e5b5a7be46d8a0da98997f49a8ff03b18dbe8ed444ac52fa1f20036edfd4bbba93b155c21a528da00adfd3f7b256bb30fd4c87053a1be36ebfae37644bf275723cf8abc18e5c420b2b18801f6d147b4d6d7290834dd8fc67f2bc763d7cea51e3015904bba985e488ac8524784ab9d401e97a13dddb98f1ce8f9039d58aaba05e8f932f1729c1a77fb8eef487b56e2c2ae5da54fb4b121c4a8d24a32729e84f6b6c4fb1ac436434a34dce51df8c74f4c438058d08491e09a2fc3abddc17222e4f9b65566ad095bee2a583ab0c9c43fd081fdbeeb70740a672e7508f86ae419af92a5c4826e40fabe71de5e048b3a2d5638e7c68b07d49d9e3819b36ae9b485b2e0a1de9e84c636627aa976c51889f45466b3c03ea5b027b3922500412b7719627f33eac4dd4160dcfa0de538140ee40c0f87ee05f2e2a3e84214fdfb2a9031d078ae9e9d527f0b3a00285caa627c8060de2db84e95b03eb5c4b262195f17e4e77fe93b43412eac19f0f21e0726c8483df00351488795fa9b09d1b2edb5af2254a769ea6286a058dac82bcaaa42ff69ba36e268dbda11b77a28a31871f6c7bac465a1c057bf18f2c391c68d81d13b23ed8baa9701cf08bc6472f79bbc6fb51463ebc2fe4d81d65fcf49c717947f002ed061463ae79e12c4cc6584470ccc1f074b6cbce8f7fe92b6cbbbe8dae730536c4a405da20e504ceff8ca5ea9b76b85cefabed39af40d2dfd30fdcf1c1a8f1ab8555ac9c613b8d734fba7773c7782a1257b6851b4922de617dce2f3028db5ad926a792289167e5e9c17fb29778d19e9a9438e8f886c9be89f41cd1dd6b007646a60eaebda91312b2dcf996f317122759d4e5da266b32d1341ae7be1f5c24023c39814f53591d8154e85292568f9626dd17c61d9295ddb160c568d93413772d89db3e6a7cb6cbe0ee8db0e4f913fddf43d98be0079056bdad47864bb56d409b8dcd3f21a3f08be58467140bea13ec6417d4ff97e7d1d8970a140e2fbb7f595be0c8349fecf49382931bbec4e5e42c671c737e33d432c03e078ebc37f290dd4c8861dbabd67e0c81bef3ad1444521f88b553f10830566c38cb2056730740dd75db963070213613af1d3fcec04aa5c4e0dbc50e785745cadd3689db7798db5b69fab02d59b3fec3274e8fb985a92038d77c0f0ccda923c0429af6116fd3d9bb8a18c295c8fa0b0dc29dddb7e848be0f734e4a6e4dab8331376834041186c4192bde30037c10de03fa10cfc5240c9b048d1b28b0cb170dd71d56e2d4d302e9eb32997fc7ad4efd3f0d6d0e3b472ba63dfad7b460e984ba7d5798d55e6a5bc4665c9734545de571fd8a99acdc6f48f9c885fe833afd91e1a7a6a4317d78b6ba2829ea2290fb152078b9b8bd96c43d364081fe9d42627f44d1a9a466f16debc027ecacd398d76bb1886e0323d2caddc0725c5e965f8f9e33141732e101d9f0a5ffd161e90dfc1c0589da857dbcad1fda2c9930ae47d5da367961d177e2a533563ec4fcd09ee55e6719880bb6da834e774860881113e7192628a1847df612a5eb1506f24d7a53d07bb36aab3af34d7786098ac421984440cf6a2429d70f12469e9f568b695a9da64736892318fcd30ce4dd2d1d0f76e1f29552d7f7d2b4a470f927da503816c1a50e9afb0113d8afc99bf2fa693ce01141c1fbb77134537fc815b22fffe89a12dfc4d70d10eeb729779c0f4f8f1a6afe91dd804e3aca5e7d61b0a58bdfe8c9377309a94e890cadedd1b5c81fde2503eb5f0db18210b4bc35bdb2f2e184f762bd97c53bd4b226e592b2ae10d0761b0ec05597465b714e40587a61b5ff7c6028b1dfa96737a2f3c424c4aac65e69456b284e3bfb73b1fa3129fe23c995ce289799f0e277b3756d89d23003c2b9249e1316b08d3370795167cc2fc9bb241cf3b18ff96dc4d8f86e01558029090c9d632e74b7c0c2048a14884a92f2e37dfe57d8fb7c23283e00e441d859f945b243825b43364d3e36594361ae466c78ab1ce5e4a68a93614e766f15f83054892b0b8d02f900e3eb4f742ba6586ffb8d3b823f682cdab746d729afdacb210b8b7365f1ff7df6be53fb617a85b46d3b0a634ee831b3f8bbf925fc0d45a02d46dcaaf1ae2db55dbff0002f50f3661f24a43a504820e738f766a4786c2a47aec49c9f16c724efe7b351ad6db4214ea9904a0224cfd184c7cda406d7ccd2c68865c189fe8860bc3cfe5fff4abaaaa9dc75fbb20b515f8078a2e52faef1c127ced3b98dd79f565423f383cce46579d9b414741750dd5908d09e48d1390fdb3986fd626635b63769fa3370272bae3ab1d0f0d20a157fb8a988bc1cf8df70f66f02cc88c7b7195b52b60916f7e5d7555e174da9984963a37325dd2f063e4db70d212c096a23ef6f8b8e738941808ad2ea6fde171d809091ea9aa7626936b2e8e3edbab97f170c0fd00cb624b2a99643a126959741c1e7bb23ff5646d06ab3fa093346c0f0d28d3fbd3ff54fffaf1f15f581caf0b812b18b0c5d325601de5fe501089d0e7900655ff40c91e18f69d143aaee54b0260e773610c496777369f0830111b5a55600c2dc053022bf7365f22bf704a30d3cff2f87eae98a4aea4db61623b2fe5e82642700c2b557411d177a3f4126e7ed809537ab4bfd373a13013b36104dc93c8bebe994cf16d22898feefba901c963ff2ab153ff28957aac83f7b6989a40c0e25f228f8ac051fda82d7bd89ea801ce5d05e77508bca041fcdf22267a6bcfc56492072a161a762881ab794eec10a96b3224f88e5f314bfe169876f646397b3fd6a7d05a1d7c360c420913f6bcc9f962cab7a698fb3a4e627d8b58175e89fe9d855a219dc20034615f5ca65d7e2efbeefd6b0575a50134a3c473b3aeeedf9c7b365a7ad200f0963c468ad9ae900df7e3e07bc0764c8bcfb107b02b92177e17f47b2e1554b7fc66973d3c52209746cc3faaadc580844e88bafe84f7c9b24be6a5d5dcc406c34f9a4b41c4502a1c3ea52126c2457035718ea3b89b15ba1ba1281d22033fe0058e8d13ffe2da9c31a931293cc2dc9d7e25926662c1213b7d8f088c4be72258b5adb082ed403ef7313f76c86a536b5cf7a404e8e00539311ef896b5bfc6884b0b5f3d29660718c388cd8d70fe01f63399633045eef594b0424a34bad3932c20d1c8a2ab35565d8733270b3e82fca2f1c7a43e66158a8936f0ce7342c533814c954c5d8221dea45136dcc45d49d59eecb8959eab6fe4aa19d0683d9696f06bcd8779d16b5221bcb2ef5cb897fdc86bc7c6671adcbc915119bd8e4705f79a964df59bd9b841b7842fa4fed89c672f2c649a8e2ce96f00ba32fa5a37663000a3adc7a7f5c56c7b298535e0120a72251fac6177c8a4f8b50e5aa42c56308c5f997a7d3f165642f874fd0f3c0db09ee0dd02c614feda9001f45985d68639cd6d8dc5d52e802e6888a60d2fcf3721bc45f2ac9ee1f0e4d137ae255f388c6808e6985e4e6d638a1f5410f6befff343371db9b94fc98f41f7a7748e77d2ea1fc7315030d536bcbe6f3b5fd436c39b4cd43ba4914c4bdedaf8a9541c7b1774c79c0b0fa11d557a4dd495138cdf29d1761ef778589d2346b3aabaa9caf3aac387746e027336ae5e405d0da814cff3e88ab11dcd9412c50cb2024111679307da3b809c1b503db3f838938f65bd5d9c33aa8e2c6f1999f69380aa2eaeb632246a910b4da0843f5a85b50da175abc94b16e9c8c28b5feee851e59ea4ff275aad08f5fc0225db1cd89e8626af177d57efbf782b72fd068714c10542abc085b2079d4c2004daa6ba703a661dac469e0edbd2126ae7929c77b974961004fdb0b324863fd2c9e00b46028603f237b3e2ac0a049c9040ab91e40da687e50e61ba41d7b96daf440b1dd0c8dfd8151035ce59e16cc2cfd128bfcb35b43523a2de3eed801de3c798c1233412d266bcd36d0d85684364b0dbe5ae69336fe55c266b23906fce2eea43b8d6dc3e28bc77462bef4b5c553c6a0183010dd81b7fb01015868afef81c79e96edd3fbde849245c92c121521b02801426585af2ebcdcc7fd07e60ad6a0525215d7795382f3438472c34078782d481059d42f3b87d3e3ec62344bf6720e2e6c3d32ba83aa16a28da36b3ce3b114cdc0acfec6174ea363ba47658fd9f8e404aa51ab3fdd081009cff459710aa374332ae766b58fccb15e8ee428fbfaa695d6592d27b5416a97cce44d29d990fbc93a13e68b61ab5e189f897a11ba4c6e95b565a8308ffb29c5ee9d96bd792b437edb80cfccc79a4a2586d9eaca30b2bfadfdb94ccd7c12176a4e18871fcb7094f79715e0d07a0e33eb73a76d1f332b6b188c90c667ab29dd3e640cff8c9d2c252f84625fb83340f1d1b6bdea2b55f29186f7389fcc46ac0f5bc867eb0ad75d0565964048ca2c962e676d24e7588698bda1fb3c71238034a693da528d8780e1ca8451c79d52945d72719c1b7ad8ae69bcf37b2c70f23584cb2eac9e63132b477306b21956a1b155280d5a25ad1f3104cdaecf3ac166d8665d1198da425aba2'
+ },
+ TestSignatureGenerationSLHSHA2128s{
+ priv: '03d3b1c80c61d8f13ffa8ab1f2515d2071c4afd7d2b91d979cf8f4b6dd907ef2a0985f04c61e90ef3af41d6fbba798d070b5f35f53599f764ad53121ae24da8d'
+ entropy: '426827d1935bb4642b404799bafc62d6'
+ msg: 'f724'
+ sig: '0cae4b13c588d34cade7c04001dbd9aba9eaba67004cdd551aa1d0eeeaa36d8a2a35b9864564d85079654a9b75951401f482512e9c9e8aa16755bb80868e2a77511a5b14f4c244b928de487dcd03a1458e4dae9e74ca65f71999ad4c24b0100ce5e30a7a1637688af010a5af1537f87dedae85987f9cceb8bb259ac64f90d5113eb0fe8c996655e5223b03072b73cb38052ae7ec098f800c654b7731e99c543af8da0734bfa3c59653f6dd82b585a93e7aeb8051f7b237774d4b5ec57de9c1938d0f99bf56b9d49b745d1864bd0942a6b5c99c5d3f8c74829e2f9d1b69b7143a2b18a7d4fdb31013a611d6a0aa56fc7ff49eb36f70531e122bf14aeed11adf09af727cfc95d2046cd5e146b1aa2c50c092104617a059c47b1333513b0af66693b3bbb326ca7851d02809e8a72ca54bbc4f10b3ae2a6f34146523fa48dab754c989ca18b21560b52997c0a96928f181c14f0f2437f1eac007fc6215951a453348c3268066538f66ab0bfc6d1c1dfa775e4f04819bedc7086b988e1d2a09b23c54956a59ca7849183709f6f58643aab0f8d96b693e002f5b7c6bc1b2edce760e38da74da1fbf9c701931fe68edda80952dd485bae8af84cfc55b19c24cd3eeebb909758431696148f146ff92bbf11a28ff3669bae04a679daf30cd35b01cff31ab604f2c0e6c8e1ed1a5056545e1b572a633f800e63a2154bab816cb4115f8885a51b965166e71a3a5bf5bc0c38c297941b8ab1b178835da471154abbbf6cc1087dcb9bfd6b58c9c488582747be517756512f06e835d385871551b1bca7ef87c350a56600b6012e7fa2539f4135d855f391bf1c253540c313e479ce4fc3242a319b525d074aceead3d09c0af366f614284dd5b577a2d0a3e2f527426394a53a756c395ca167b8d4e288e4b70ddd04ea26e39f2da35a9ea7e52fb037b7c8ed5808504e6e99c9f6862b73696e8ab1aaa1cf3742701ebe2f3cbfd4b488f32134088b894a6cfcce94f4a39b963b56f6b08a5f68eb9f95e94ace2ed6eb2f4e94f57b2d42ef9ce917432cb19da8c58bd02d9e37548a3003f7d0850b4478128e68fbc0895ccf45b79e5aaeccfaaf9ab308f46e2bd7e578aa52c27f2fe8587105ff0e4a651af8c53a6f945106f7155d9597d992b0316ed677ec19427f147b6e49fbe4ef897ea723469fe39267e5649cc4808cb98e462e6f0a7061f9029dcbbe9a6787f4909fad4099af4782892673604762c84608810ab18577af16d4988d12b2d9cc0903a49e834312f7f31f2e45f8c2dc1efc5166f304cd8ec9be956a576d64f1d19eee4ec202428e348c45d678546dbbf5da4822384c3a6155f4b63228a9cbefede298aafee33e7671607a567c7694a368c8c3ccfc5d19cd98979038ca75ceff52d18e19451ab53c0f5c9d071132321db21b05e9ec19d78ee2c309489a1ec5b7544a2d9ad38a3d8c3bc49235ed189d7fe446059ec2de889ab9da38dd63c5a3297cf92a2f366e91856e221e1063cb0d36241f1d5e990ed32d37d9186d14a9fc595ec039ef369d3a91cfa67e6017abf2301b7c53b6c4bf9f8731de8656feffaf8f006c0b5a0ee7b6d2cb74a90de6bec0a005bea3d17a39b0a9d25b3bedfd99ab5bec4d8c0577df04f8f67a1eb1cd8f329bd225ab9404cd8237f5a296fded520ba3fa42ab81b2399d74f9df40e49c8e3dc1e4d0ddbab27df8704d8d56ec8879290f51765b7dd98d5984ba836a5272528c87af5b1623028bc74908cddc50ec0277126a3be2f8d2f0eb25f642a69ae629d4099eb6ecc8f748b320f877b82ec51d48deb697354597dbb3b0355b5f80074296482ec9ac7f99241d605164f5cb092ecaf6009c040abaa65768f2379b017e33ee0696709c0e05a18cb98f93146712e9b4853c4b927afdbd3992cf61c295399ce695ec92aca20de145f2ee2503fd9a2fb264f5d941468800e5c402c6cca6de5d6f076a950497c971ab03aca63a2f3ef38e0a98a732f6630875e86f09d2b92a63bd37ae1315370b3ab562412fcdd2bb82d043993941cde9550b74cbd875f13d82fac9c0222d38bebd43a44744c9cb3e048f18bdd3f2e03ce2b8909187273a8839cda5ee6a3e313a780bc18f6a0e530e1f9a807c8d9b683161f1c4aa03f17271457929310229c26373bdd795e38a2b46bb26d8e68937205fd6d34f296814f1665ced940adad52617097b6e985a6483719f4f7f357c48e861eff3047258bb8ffa0994579024286a84f3339e219254e8ac2cf3596de2f7f2c2a6425a33ff1895540c8ef6da47685eba9934ed4fd01b4c1a5e9db467a6048f304fce11cb0dcc6eb24af7b339f4b2cefc10b9c67c84e09309728cc4c5a27a489878e9273581067f91e576a7bc591723629e553e840f22db62fc55632e36d100972f070793686d84d22600e58f19804a239945dd9ad889fdff17ec60da20ee67e8fb25dc156ba1c9b5f97f28e02a0ee2d226d05ebe639836150976541c35673e8d10871ac1b698baf196d1ce4e0b17c9bbe03edc36df15b35c45a910f6c0c13b4df18a410362142929b118a5336d265868333fb83129f150ec255776f7a44400b1f26ce4286e74280e29672008bac856f540e6b5ceb79787536204818d495fba01707e69511caef1bcea2a3d68f327ebca006d693df1411c71bfffc6fc40ea82b5a56d4eb1618e15026d695ab5b21dee3b3446cb19271da057d321a5e7b28de9d53611d2e4834d1a658e5254e65e1070715517c16b0e0e48569bb322601a03fa04e0b83f102a5c3bb149de3cc214c559ac355ad1820d9e97c340c266cddebf0b6f0436d9bd3bfb785c0880f78ee6ec62909aa51ebd8eb8cb38f632b16b3ec8e5f41c43c06696a12f6ed759cae698dba6476678d7cee2e9ebe2efeb62f8ca107dd092c93b19af137e20bba7beb6b9daead8bd3ae8d347ad56f28b654362416aa217478e7938239694fd2d554549b405cbf236bae8b54946b675f85e1fb81b2c87ad6c1f0f1721b2a2035b4aef844760bb916d0fa633a85b64122780790da87cb597c841861c22841c05c6f059d9f661cdbe01412bfaa78864288f9401e6582469a737693dfa41233394ea1f95eb1168d956515b01715bc5901c457cebfd114b8cf25a1af8c8bc843fc26da374e08f71edb0f97812c014fb17d56dc436753ab0e37b4dc8261bc6e9ae4d9770fb36a9d1303271824cb55e4be303387f898855bcd7d8ac82136ca83e55d973cb1a3d118e33ae09844e0270b8f4f088d3345dbbab54466d00ff52c875783b9443bc0a56420f6e0e15be7fcf4af4873959d7e0c022c11c1bcdac4d93aae6c80af2518c9d88bd0837df4d4cfb68d237f602855707a0b198b4474986d54a2cecdc6821ea2393f787de975c3081364641d19db819e9fe5b351757964761666bd6e191be0dc1734fea2830f670f2b25af9282991e49795f1835dd063d2ccdfe4ace5e2227b0a357a67afd0a97fd0bf1fb7d13a83814a9f05bd648056a415f2ecc1dbd33265a52ac619bd54768061fd773e98e3142c059bd2d4f05eaadd6865cd57117bcb8ae46c538747c537d94aed09ecdf3c7fe8bb1cba10ca4f36cadabe545e7d5e9629ecf24a4b9b38fdf39a1b588c2887f6e69852303b79d6f6cf7d4dcde319457891711630f2b5a2701ac537ac5feab5cb60b822e0c5691e6ef5b941ffab5235ee846ce89135ec04469a27da610aa6371e8fcf064ecbe5de8c8361951b5e867a07ccc3ee25c37f69570157893e053c5d37ccdb29143f2caf82b32c5e199f8fe8f3910a06032468c5d98d6cb7173bc2515245497162bf4384a43df57521f0b303fe193a0c8706b0617d155ad05fa029856d299dcc2c66973dc5e02547be3f5f438cf9fe5b69806ccdde4b406dd38b7f762e50dcd16cb3dc3b36129efc21544a5b9585a4ca830a586fc4dfa3c4a5a675f04a1186b2d147256c1747d4cf21f0dc4b77909c6c981ecc0a26e0cd47c1dbcdb3d3e222f7a300dffb4f441d383b15f5c608e9b5691a5389aedb9b2a1e01bdb0f4252e7bb9c5440c80f22340b66a9bcbc54e8d2e7aca144bf3c70854b65dca854085ce11b7b42935302c4e46b207eabc2f11bf7f08797cdc23638ed3f05af3a1c133a5d6e63f3350b2bb3262a30a3bef91baae8182642cd745bc1298f882cc601363bf2a00b76d09aff66c37b7ba1e923667238372594b183c3613bc270847bc0bb20e2168876b479efefa43336d45b2d091a4e2dba9ba4e387ae7a8902398a8ec2eb4f93212eca04312bd6fa66e11a3f79d5b5724a3c4d2a05b95c056bcd06caa2de163376380bf873b532bace7faa0692b92a1c68da27be3142eddfc0e08fd9653974636fbfaf2e6230fe2d0e8bc7dd55c76d10f652a388e64e2f4a2b797a67e2a10d18d13ed7f6faa23e2e48ed448322956ca1d5e74b5661702eac87b39b1a4bbc5e0fa8e944e34aea02fccde0f7a4e504a23d31ebe4d0decd1751993595d318fce2f27626b1c7ba75e41c04169fee8c6ee11bc36241bf24ac4f7fe6ceb73311c93653d3112b10b1e9ac55c615d9ff51f29c160c0c8998efe6803df4b820aba122b5ae42551f966cd95914019b9e5101ac7caeff8a98d09aa21b17e3f71696921dfe5fb4be8c84a8f6e32304f0fe28fa3d9d5096617954bf4f6994f6f1df5d24b9b4120dc68a527e3be24b0afbdc23a6548fad38ad00dcc573e70b53148c4e2cfd1e7e163650600152e32f35c7af61ef43648c5e291ed89f58c35915e2aa093c7187f6e0fce650a92a5973a31dfcdb08713839394ecf34e56f005566c77d5b04fffa446174b19f556de669cdfd95b39c4922fbaf0212163c6fd380d416b2dd2fbc009e55a9df04d5dc78d8ef21231a5209a869c1bad1d85c24d18d05969acb538abed3d74ce1df005e0558f2335e8d29376501140c16aad527a03e78a81c5333fc72c98910d0fef53443032283e0f4d6e9d72c61d72f5a2abd5d46e37b5bf11cda74eee7a1ea5cba4b57f7aaa72e6c7e6795e09e674ac832e3835c7e91843836b9eb51f5ed809b2ed80cc4219fb4f35450465c6da641a7f4b242ba0fe6854f73886e961a7fad69574a706900fd88982747a515f81da1ad46fa3b9da73be82d4c359d602a93ee4b51699f5d64898fb563a92b5b2b184844b3cb46c98095fcc9200c60b30819dfb70cc2d1bf46c4e46655f220e96bcd3fcde4aa7270daaab5a62078718a5983d3e89adc4ef9df52523ba82eaa6ca070c25a553cdeafc1c9600484a5f5271c3ba93349442e6292617dcb1c10be38bcd3c307da63c5b59062b8e2cff7afaad88478cca736a4820bf628e99e924a9624458981d463c6990dbc43fe456f9ddb12ce8ff7960813b8701541be0c69361c00d41d9278d441c0634b0c18b8139bae6c7a7eb729d1f3f958c92f1cef493f70f9b1cab566552368e064c45fd452b513c308c9dd0217fc41b9b714689920fc05a113dde064c8759155fbb3969864900b2018661b9585eed150f025f8742b9a57a1371a5002f0aabf01c0f3d2ef7903902afadc982c50e12c68404e5829d05520b77430201c2223e0b6ae23493843328caf230f59496ba8e49f3722413f94e04f597add70500c1aeabf883d290c518c17d5b973b1112a73faa5909a4d60882c6a6b030b75193fdaa3598adaf6843bc8eaba87b517356b86733fd8ef16ce5663d2346d30f648ef422cacf2a31ca0acdfe9b0ca71e80a311662dcdce06df227cb3d49f804df2a4d4469f231f716f9bb51966e01cccac438f6aa7ddc4f135f9af765c9426b347158584744419d47bb4f4fe28e06cdafba3368c8ea519b54abffe98cdee8057903504d768fdcdf5bb5075e4af80d49073595b59438408ed5b6b94690e7f359d4bc9ca7d7d2921075c00327d2a10388bc074cf7a9ff4b1e9b322a61624c182ad06769b5d5a73624c919a45089bc6c28e069c139cb9504b256b526226662f215a7c09b2b7763c7772a0958658c85c6095d0a1ad9aded43dd2d75c0dc89a6abb253944c7b584bb56b5770712a1d1536cdb31c13d6ef0c9e47ec3b22a4207234f776fa7509128a2ad144328cc95b89c3ca7609e1e9e31e16cf42ebe95746bf0a58bf44971ba761b8e52847f66181c0d22239e9cc1c399f5ce075f40ddb3ffa97fd1826f0b7214166ba6554b67faecb689733036bd7cab02c9a8227d3676f10c594a2cfd56b4c3d74f53f23a45767a53f71e1c898bb46a298f95b2f621996e6a16de40103a59cc7141c7ba482b82dad402a80b03db9af06bd1880e350026acc9e72dd4e22fc2ac22a69c93d35cbb13e2d41946b99d9566021d4f295fc6f889c9a9a3396f2bb298e9cc40fde269e56d1e312c575ff0d739e82131dbface3ff5400b095e6f5938ddf87f275acbfd8c34e9d51c10e9872b64337be6de08fa51e7321bbf4203bea54ed4e5678f48cd38e571241497326fbce8f9c230192b95c2a598c55bd171e3cd7b4b9e0c611577ac99026e01ea78c2d701fc5546cca580bcbc45e837afe122bc14246b77fb1139541cbb37e967fdff66862de08c6d273832806f6b43bc0957e022cfc19d221c17d2a74b0707eb9586797e645b4061b257cb85794383d5c4aa54262524f3a01c86029600eace178ab6e16631a1533eae86eb124231ccd2477c68125ebef5bd32d28c143c251622e17de5adabd3caced57cfa2e79b7d673d885e93d2c7f46c21172a32b1f1d3040f699a6e47f9e947a3e3ab6dcccd86d4080fbdd79ec942019afdc5f0250ee62d0d49811e4f94e493c5c853b29b7c1d709159d4afd0f5c3c2c0a01bad22fc3486f374625292f258916a4af909bb2218bb1fc22ede12d41b38d720864be4182ebcefb38e3bf0aa1cd007441612d05b326315de7abd99441db6e14127dc204f9cab67ee21ee6e15a3765fc03e3e755215e34a730a307b8588d7feb42a68f569c9ca5616140049d8d32c85d567fbd741d7637225390971a97dfa700f29fbf152d5818e4a7f18eef7ab9fb4b4b0780ecc849fc02b15d3dd00653a6baa9eb3166ea2fec7c0618862b21b79eec50b5ac9e78b426e9e34a6f42777b714fe84f24d1b443d6e8807162538303537128ef386d6cc720c0cf4dadc17fea08c1380ec756d04521938cf57a5e5dbe1e49cae43331f70b8925382d130dc6e9c419fd9ee53f058178207cae9f4821d593fa14f9a1847bde1ed71d66f6853e75e2c4087cc768a7b3e94dc301bcc6978bc3981d6b26ef4c995f5dbed7ee98054b0731c21a29e7ee72e6d0d4cd1d478b1e2eb1e5b5d81583f573454f089d4d382eacc162d3b56e3c22a21b1a6450b9473a4b480dde8ab6f3058751beac7c0afc29d9869c4cab33438ff9327f5b0b808fad82b87f323348b627160428d70483cccb7c103b3c23cb67cb3255e13a9a2fd518e74dd00eb9bd9f668f0979fea3c039b1f2969b177d1f4e1b1229bf771f258b37e430779dab94bb158e16e5bacd6210180aa9b65d794203b8190cefe295451ecd64bef7992b4ae5552d37c12ca6acada895522d66c37d98e915b4d34fac28668411f83762801e99da02d3689956baaeabdf271f8ffa4bac005f259b59630bd19e6411c077a788914437b86a0d1d06e229988deb47a77a64e45a1b8e303782faacefc40fabc6cc6d1dfadf695b4f6e482022392b5ac79a79bae050e062c4588fc235fe48a394bfd69a27f09d264150190206c48172a9477db70d291354401a11973c5816f941d8f1913d32e4677a8d4d7654e35e784c2468a33c0f4c8ff699ba14a29ed2d6cd634b5bd90fd79c9e491f6c4ada1b97a85946a7923f5164434df6e898418c90e8fbe006411daa058942cd61fddfbc9571543de2affa1779da1ad1c825623a5dd7cb94d4c6c3f39bc2237f40d626ce23f85e6a2cd7204bdc2fce67210421e3d8389b2922564678c3ed38c9018deb514c4829d30ca5684a223094c2e80d0154bafd2a0502015fc0b20cdf35f37604aff4ad1b448d3e707f0f3da51b6eddc573c187cc298489d67cb5b68ca2b87b4699ef6f90d40ab569f94e74bccf9ab3131779a0eef2327fa319d65eca4a276bfd4c46c7243e4b7cb671f609f640b6a7f5c03ffbb486d1799db72a0c3c4b575f2430ab155d4f86145a1d97b0a316a1075dd8863396e9c09d2bf915db138491c5e941fce49933d77f87954878e76c6106ca29543ac937ea956d797e3ff949a213eb8baba6df994253f6938cd226de14d9ca3d4022f6896dd6f062162d687c5cf420203dfb09f727dba8b239c2cb92d57e6fa7b0491ca9c2469c60a833bad2762cd2106ac6d0c1054f395231a9adc3fccb236fc833c7a00c64d8d91debc1b9cf780c560a7550e508ca1697757597eb1baf778acaaf038fb357b4147c5c4c0aeae31c436d86c95b85e0ca853e3d1924d432edaa5bd9fc256003fc985a4faab7fd078666519ccc32f9d85fd92f0d0ffd8f4a87989b1290f95a857ae5127285d0274b41d0e60df6ca6eb52d18e8194b888032d103a74e8998dcc752cb47aade3295973fe25845c89570539f8eaeddb4eae84a1575469a91967aa472627af80211249e64ea04bc8762a434f719e021002f8e0c296a05634fc87d6a65e70cb80633cb121718d7926ecd86f7ada3e27fa8da5b6d24cce3f5a5b4bc8424d91d2a16431de6292d72364a187552bd9a12d195dba6790023996b800079633132b7fc10daae1afe0fed93aa666819d1c1f8f0a420e1e60c6a47f4c0d9a0201ce0301327569d8963f264886b0a19e4a90eae591d63592ffa3d301e7d35f07f61f226ad0bce825cf1c8b022831b0045ba9752dba01bec610860f24e4bbcd828adbc1b8443c7f8d7ffc7a99e80c21c16e3757d4b36bfca89f54ac8762cacbb2b83b74184a3643be0638748c8f1b4caeb21bc53ffacbec97c530714e66da08784ba1578ae67a3169951649563dc14d9126fa1cacd13278ee87dfb69fe95e5361d6ad3107f2453b9502b3c260508f7e96c5be1d792e9f7ec612d6746820a83f627b47962a66a1664bd853f6a74fd6a170111f2416d6315e9d5819de958df9a98279732eb582e6dff0712ecef22a317feb705eb73e0c7a46a2e8db7a62f7744360f95dc13bc371438231eb91cc07a53628511ce0af1145865e75ee4e7fb548f5d4c7bb14ddbea7bf5af374a5a01243b9cd7c267861c8adc5db38b661f2ad9a22acd82af1eee315a4f5b78ca8a0515237c84e9f7313ca73719655c9486cb0cad6dadc4a0a9b6a90f4d2ef2a257b8c06843f0a0c632cba5647e2e3541f325adda11af50436100b68b2fb676f99465244a130386d84ac19c31775d76ec2e0605338c8418f03bd521ffc60218cdcc5e45f789e68baa08a1e310c60aeffa5306f006c1e8462cfe31d09354b28e79d03e76fdd21703c29a6bb9fafbc65379ccabdcf0d72499496a73442904ebf77c2b41240a977dc69a7bea8dc005aa4d27ff2b37794731451dc4d8673e8ae7855934b74c71df57302ee71c04670064161c93cb6d18ff4e08c0230178b1dced8ee2027cd709ccdd28ef04d688b088af9bc7b8a58a9772e48066244ebb28a0dfaad032db2e2f2cf59ff936fd4ad710014d58d19af0172d7fd318ffa3e8eda71ac917845e844d4ec6d3bcd567422c955f367850093417ba8bb6e6504ec76319cdb5dc2baa689ba144cfaa76e4aa509c4536ce907e2a653c460f93097010b74b7147ed3bcb34db0e19ca469d97985a5fb40925666ca2ce5d6bd9d1d94a9fb1ffe2947e0633f528e542db7bee04d812e3ed791f68ef8b77ce2f687e27b285c0e6bb1d14f09085f91c49caefe1741ecfbffc306a0bab869d7e110d34405c50907af1789b34b6058c10beeb8ae9d6c8841f0e8a618a0855e2f301f0411b37e5ea00c12c74a6d1bc8c195d404db7123042b1c84b3963dcf710a26f703165e68e6952f7c5b76c4ddb690ed0aed0c5e53f2070ed431ca7c36014cb7c30e72a15f70ebeed7dab2c9c3c89ad26e5dc2dcb0cac509d6d047308be7368eb2e06950687b81ec5c16067d6904d647e29d8db9195a023afb1fa3f6b69a82b0344b016400bcdde0f5c95c58a633b6a66543d7a5fb5fc7eec64b56f63e382092c9e86af1fdbc4310b3ed8b72d2413932991daac97f87e3bda685b07367ecd87ea38d3bbe17292ac1aaebea467aa3e1f215e04942e334534fc952959eabf7c5f7991711cd51f9746cfc906c47766265cc25188118e3a65526386f3e67712ec491e5ef6e54c47394605dec1abfd0e4b268ca38deadc86d6b1819671b590d1ae9d05b86a7c5ba6f8406bc57e8ca41907df0ec84a3dc66932321c631e7702e1bd43960d6f111ce766797d86fda813bb67c46ff076406225f90e54ab88223af28ac3423f096c60efb6b29b7d770b7407b1f4cd645e9205d97d7ec873432eaca820ad860635208bded78651bedbef7c9e3eb3d1a1de417bc1edc2e7979785086bfb2bb53522a83ed41801581ea5e31779ff59c061db023c34c84f836a9f02ca0cd0020d4c1d53c2897c5bf378cc9ba74686d750053b63bde387c4f6c627be021953559807eb6db191dae2334afafd3b043e688114984b551da17dd10268b846f8d05ec844c0fe9f16e652af1522bdf153ea98dda997d288391ca2592c2e5161eb0cedabdfb0db8fb32d3f8d902f57aa4d4be71a2e5bc75520176efb70b92700593365c32a746d6c0ce26a3592a375ff970afe89a02c30898b1a0375d94615b221e7152ac0e0f887b195577d338079ccc9f2061d0a3e90ce058424a89fe81bb7f6c693f7591157e902cc7d07d58564210291ea699259f0addea60f962e3e4ebba73ac70c67fb529499f20b0af6cf7adcfa7508e4f1fa8d9869de6b1b71c74810117141cbdc49c254c3bacd855409ee08524a5c142d966a6a6728dd6529d38a7aa095eac7f4bd1ee0619ecde87fe86b189eea82a81ce71a188fd773c30a2c8d22745561df788305afae47144bf635d5583cea2b4a861feee4b0315aef0e0f576d1c552eb6e9a6f4a1a5449bb165ed8564a84f56cf64dbbbed4bfb241f48c099f568a06300156a363b00c1372c5c042e4742a8f59c13d5865c18edae0b645b7f2b8686c63a51db05753f626410dd08ef08c37d6b6a9fa52546abeee6ec5a966f2b3'
+ },
+]
diff --git a/vlib/x/crypto/slhdsa/slhdsa_sigver_test.v b/vlib/x/crypto/slhdsa/slhdsa_sigver_test.v
new file mode 100644
index 0000000000..6a7c2a5166
--- /dev/null
+++ b/vlib/x/crypto/slhdsa/slhdsa_sigver_test.v
@@ -0,0 +1,94 @@
+// Copyright (c) blackshirt. All rights reserved.
+// Use of this source code is governed by an MIT license
+// that can be found in the LICENSE file.
+// vtest build: has_modern_openssl?
+module slhdsa
+
+import encoding.hex
+
+struct TestSignatureVerifySLHSHA2128s {
+ pbk string
+ msg string
+ sig string
+ valid bool
+}
+
+fn test_slh128s_signature_verification_from_samples() ! {
+ for idx, item in samples_slh128s_signature_verified {
+ pbk := hex.decode(item.pbk)!
+ msg := hex.decode(item.msg)!
+ sig := hex.decode(item.sig)!
+
+ // create public key
+ mut pbkey := PublicKey.from_bytes(pbk, .sha2_128s)!
+ // for testing, set encoding option into 0
+ opt := SignerOpts{
+ encoding: 0
+ }
+ valid := pbkey.verify(sig, msg, opt)!
+ assert valid == item.valid
+
+ pbkey.free()
+ }
+}
+
+// This samples of data was copied and adapted into V from BoringSSL signature verification test located at
+// https://boringssl.googlesource.com/boringssl.git/+/chromium-stable/crypto/slhdsa/slhdsa_sigver.txt
+// Its only availables for sha2_128s
+const samples_slh128s_signature_verified = [
+ TestSignatureVerifySLHSHA2128s{
+ pbk: '9c0b487a467b79234031eed3569055ffea884d68408b0f7a960ecdde04f6aa2a'
+ msg: '1b9dcd809ca93f5192af4f8ca9e2ae0b3221325279709d9d24169a2ef98a604a54ba8b006e272bd32a2ff703736b4503b9c48b93a94fa3a79d3ca8c77c69818ab2c2f8'
+ sig: 'efe10647796960ab92a3602a3d8451c2124bae8daec699d92b8bb752145fbcca3802b82f5eea1c8e961530d202380628f7ca05378713e28cec298b9e65e813df4d1a67740d92e5207aa42ee73b55c72ecf5192076c270550cc5066d45c95f07a0eeaca5b63456313c6e2ba616b23742bb741c77cc7197112788bbc43a411a3629bb809ca65277971da730f9b5b2208e2e957b1364411edf606179b34d087d6e689b06fc3b23a4a6fec1d84556ca0031b7bd4f6f626bfa515b5faf567a2f94974e9253c040718223132e6460b30dbb57d74e3f82fb537cbdde882273d1c9151ee2ca5518129f85fa64679eb8021d67503a7a26750d7258f9ac093ffdb53691afef05de62c95a7e6076eb4d9727aa1ac9b9f647b33fc7102e037ebd3f006b5f479e532a882211119aa75686b5a0f4e078324cc2aad5260c54f869c8a3c01391e42635637cd9479f1f8a1b19908891b72400927220c72c3c5153c62942c9e8f5ea2044dd62596ef026fe2a56238813a5af175506c99a25a1950efd60544d24501d09865315621f9b1219841c1f00f5b06ee0d60ae54364c43c7ed714c7099380224c73d6239ad98b3277b60aead1ab205dcfb0360d4d0b7d4c0befacc69ca46bc34ec899c74f386b11bc37be5a1b8e4c7e04cc86d04c2c3983a68fa54fb6aed7e2eae6dcb1acb36632fd6159eae655b32d0529dfd8ecf0fa9d2439b4626a17bdfa9af5b87f49e973bf3b26c94008b90e185c2a0f1127432d5114fd34a7f70e6e1f9bb948b48d864d3cc6fdd3ceab0f063f25ec9cb531b0fef1a66e6b5c44fdad40ba550f2c7a9fa466a508cfb30296c149c4548de282a792727b0900575e9e66e95507eb3a569793092a89e42ad3d658db15d330f04acc194edc7dec7f90736ed851b27a84dfe444bdfcba288eb79f9a0599eb4fb622fc2748770470d22e1990b4d4f4b1212cd5915ccb31eaca7a5d43220d3a41b67ed4af68f165587274e7d88512f88b491dae5cf88e4cd9f39e490f508bbbc60b9127985da654f0d7211443ff44b9a40298daca5ce768b86cbbd9dde9b33f149f5b276cfd24c94fe75e8a4ccab822b1d28e76e38e763044ff8a8a2b5602692b86b1c012f261637ff304473ab10a223a03b19d09eb434f57c3a9d07f5b29265d26c48c7cf14684cd08862dc26eac370217ab0979ad709ff94eaf2961d93532e82d6f70f7becb79f6a43006cca20396c21a180637382bbe4c4429c8a2c9b4482615249f3cc5035fde868a7a9a9b6e943cb00d1c93f11baee2dbe1b9c7f37f27b0062c78c000ce09790bb65856b1d77812943ed0b65fd8b19d83a87223a01aa686462976fa655450b52efedfd7f6dcf7de329650503a7258ef8042951feb36d09be408aa6a659ae2cc0f876503e4ab8bfc5ad10f92ccd34ada5a46bfd3e5c1ec16622accec7493ef7b5f43af4f0a262e3ee437c2645fd63f54bf6cb8dbe03589f18a611f19632887ced759546f4e152b443811ff0e723b1bc401b3177d56e104824e69ff1903d38533cf2c9804e766544d7368f56160c397ac81ee695b1768f3ca6edaa7740d48c4b0d404b69843b4d371d3c7b6d1a92078d64402a16474418566b486bba42c0e8659c95ab1c876554038ce9c8cfa930f60cf2ebace8a66e994a3140deaaad2477edc263b9bbe801103f4490cf48d03f99f85d8bbfbf9cf4d2f205ed1284317630e50eb03f9aa2d3b99e1dff49342ec7e1adc8bad1ecb8e9d117030700f751d679f647d06cd50dca5494a2ade2b0010ae6fb09cb0ef1f548eeef081137bf944ed2267a696264aa4ab1a7cb5cf1196c48b96a6293822c1a242ac06692b641926425fcb4c6854457533cd333cae82703757ff77940e38283764ebe6b1f16668ab383dc975244a7c7efac4dd649df527b193044041fad3a5522a850b6c1b3dcc35fb20d886d1fe91b4d1ddcbb5e5699bc149850ae5adecb1d688a06600d2fde426224d75b280e8563d9bff9dfdb70bfc4abe12f29ae6bc89624cdec52ed31f5988c958a6abf2691884fa630a9a30071166cf62d21512fd926aab3a2bdcd8045cf2ef54ece5ff779e440c58737ef696470dd959951992e99945ef4cf09111f52702bac82b8051fd9fe9d7fd49114d2065cf68f43bfe6f46418e756da54435ec67901945deef4cb9357582fba27aa825de6e7edaac408646ff1071cbdba92a82aa9239800ce43daa8cd5e43a0701e86e6608819ffe33db74b93876fb51fc9bb41fa5dcd46bc6b11f98b4b17839fd7de56aff2e8a60486f9b3822d7308e6cfb0293a322aa582d9be32b53b0b3f579ee2f1444b45ce5382e14b408813f5ff27287c7fac3eae0535b79ada1749fcf09cf227563467bd737091a0943ad7c68cd6c82e5b3f3ac0978abbdc250ae1f7c3cc79286205d091f3e9de0209802b46e66493b45d67cab140f817c1f877ca118fba49fe3291041bd3a4d632c0f9ac93b0170f331fc75e92570bb4536b10b4336ae5a03ee9b4950787de7a648160337a82c32d5fe759b2ba1af24360fa900840b412b912cb463b1a759651850eb1f6866d7214bbe5be85d3c5839b5df6abed9e60446fc8255a2c7d658e887eefca64edf61d2c360da007a6b4023d3d24ea2c022d5ed569b58e65c92ddfddfa4a6a7af397ae3e6b7a92dbaeeecaa1e291af91b1aece2c11a0f6831a55b092a2409e1d3908115203aeb5597a4143a93b069d20cbd5c03afe0029dfb172b492fbedd3ba68de55323fcbe1d9cf6c582923789dba882f8922a46ee09513bad2ad7bb26e4691fefd001d89a20fcc0b4801bd97dec58ed3453ab6aa28213eedd30bddb3fc56f7c77bf18305fb890c3bd9edf96368641f19d676af702e635dc481bdab30f501ef15bdb978036c2c6b2f5083782561fda465d735f00d0868fdb3e2f45ab0ee705999d1dc0bea46300d8cab70c0b31d082e2caf922ec9bb20725296f21db3ad17d67d9b3c62e65eadb9569b270b96315d521e1b7a86afec65af1d382af43d1fc112b60e184931a36608493d5cf7098735e148f7c141ed87be5f5ca8fcdca07ffe8f7198ac5bde9861710934dc28d58e797dccac9944f5e8c57e9a208dc3fb362d0b88c213d78dbc5550ef9f03c8706d7bc3e345f3c49d7aa6d45b9dcb840890997181ce75912a45044ce27aed3ab4adcd00b03e3db600eebef5f101436f78060551f6fccfee3997991646327aa9111995b30711f058c11060dcc96d926bc423f33c51769dd661b1bacb81e4ad7889e70c783a59c780f0d27eaeaa2555e8f36ca6c23d2d30f6e5b301e9d7db5768bd9166a260030ba7fdfca851dd0a99f6b45c97d4ec6baa3fe084baa9490fe5355feeb4ef2c4ef4fe15b2c7e469c7d963c1355eca6f8f4aae83879987dc610ae5ada4c1f6072f1a07a51ecb6cb6c3cdd67e645a431837aa8706dbb591f9b3fe4454515e2852574219bae91238298c5dc21dd25be3e14411eb3307a4b9263c46483a134ba4e5284cef0a9b280703547087ebf0215b217ff41e75e421970edd6c1c76b50d4d0a5d110251a786fe24939213368b70dc8eb90f8bd26f41849a433aa04c7ce54a5a87e4257209828bbdd3379333cc8cd2a992d1091deb3c7b0b780bf9310ef743267171b647d5969f4705b3950d6be44a01315a0fd1ebd17a83be3baf61005e8a8ccd3a53043ed6442aeb38b615d1179c0931575ac1dfffb061e4fb77d9db39e1ffe341cd577781b58c6a37a4e967721d7c00089391c73e84db671043826946d77532540b32daa8aab78ae8a5a0e32aaf3ac4e5f056383e16e7dfe388ec74ca6e151400b9b16b01e7bfac3ae7d151bfec101a2513e16808191c2278072ba44425507caa2dae151921fea5472946717f1bf8f10c373b234bf8ab23cf3845a614b2cc5e79741d76bf6973fe5250a5156e68a8610d5c6c51d279fd69dd54a2cf7d4ef71acf0383791903baf0e29cf058b061050d6c70f505bff33a170c1b306640536a2367089aa6e8652f9c63a8f70976b377c710c2ddeddc80441487bc4a3f1e1d69606d3f1c549d91e0a3f28e8e549b04f758d2fb6710f20036f69faa1d66bcc748312e9b7362ddf651a448fd8c6ac50d9ee9312f770d4ec3b1f07ae1d31e0229a7f4d3f5e041b12a4517cfbf7ef9554c0ac0f0eddbc3191b805c82cf83a04f9064132fdbfd094d77e79aedbf56b50aa37977b4c91b396480b960aedabd564dc6363066c29d4d0d39b53cf47dfc6e02d858ad1d17e35b1e29984e65dacc12528a87d452f237a1f856ae4e733437eeeba552418a2f6ca85855700b7698f7af5199bf548a5302e96cad4fb3b84fe2a13cab4130b0d7b9458a254fa91fc6b9780f75aea187f0386158a9f8d3c4f7b3d609dbc81cab40dc342771fe0a89435030cba3187bc4aa25e92e776e7400a861d15fd054ffd9031b8f300d64d629ff1674b4df082a1321bb7e4e61e1f3ec52ee987563a60fafa2cd9ab8b2ac594c7058be9e757f3cfeeb9dae72016912b48f9d5975c2ca3a91a39ed4016bfc2d53f90dcd53ba8c4870e5fdbfba855c7e6a1df01454e99b2e11aa70d527fae0dc9e483d506bbbfc340df11f770ae52d78e1102bf2af27f380ce4710064a12314b15beba76fe020ea4cf6ed5d973a582ecbb31ff949dcdee279cd8d21815b9b2f50bc5d3afab44e745df50fb19565a8193d42de047294bb976079a601b6415d81d6b7b6c1ad73d59f9bf7716beb22dbf05e9c22ac2d2741fc355f3247b505f26f45f0fb354eceaa270720167539ad0a09e0040ac4f8db38e9f711d69291ada1f7235485c1c5bb2a0030e7cd49f2944a628e5988c3d57f5577ee5c4ee26c99f7b7cc5b462a6027fe216c9978e12fd17f7e8293b6b00ac17a8bece776d4dd7ebb694d630b38dae0cf9e74dd891e644f3c904c17356a22726479bca2722e712944817e4bf127fce5eee34ae605636a5de3ec0dd11e5b8ec6d13478a5f17aebab9ef25d80eb85dae64d84f423b1fc354715d1bc722bad486fee6b928d13331179e17701bdf570aed3a92421673fafbf317ae0a715e53a7be9a32f878ae6717ec4ed125c4466c78667a7469a3fdb225d5614741a6b946ff28faf23c4cc64df5c9db443dbff0e81f241e1a5c091df603472ed2b9ea05af69c5e3183076a63b13e4aaffb0239d01a3b062e9617d03bff8e3b94f21ef5cd2b08d9a4c377c57dd58c0c46b1208dfd6291fa8362cd4a212f5f65442b406753f3dfffceb3594bb694b384cf34140fbbc656c8dda0ebd444532ff99cf313edc0c7e4d168c81a67ab4ba18ffaf6ea2c2ecaf1b499ab56fffee18d2951485902fe5043117420d2d824251496d5304ab96eb88fb2be95dec1364ea6bb5eff6f404242ec1df431d1b13f5e53389cf88f5ecd54bf6e1b60bdd6a4709ddc07a7ad019e06eed1438a0db7389f1fea794e6297f4cf9b8ae3efa0692e750bfbd7c5118b60004cc61d0e9fd79c52500c57b6bd8b856c92e528be05ce0b2415699523a915b21bebc957f0a3443ef17e7448d4e79dab0eb6244830b7cf690d28bcc348a0665dbffcdfe5e4cf1eabb124e32587d5a5c786dca2cc2c883fa96e41dd8114552aa058a29c3e1c82e474d0f4cad74fb1e3e34426a3b8183d36312483b66e061004b1ac5b0b5348264918e09f00929f45130e501626318795cc11580d0c95f844b4b7dd785a1adf954f297440fb4fa2734d90c88e4d534c603036c7739ec7721a1e7c425337dc83881a906a797dc286d12fbba0c1643d3a97c5e50cacfaef80c700e70fd553c2bfc3b2e278bd1050febd86be57c59ef5f363a088571b0f2dcbb6d50e7e293721335a2a3442c9e3bbd2025b35e75cd86e040b798477f2c2841579f6fd2a4cac4685d5008625132c8a5e26c663d7fa82c289d156febde3f666c11b18abb91b233fdf36f32bf077da9be685f174e7f7a39b292a555405abbd636ecd68e71a11de6443ec0e35f7f322afb744e6a3eb222dd494e91055f6d273a00d911ec3e7d316b153f7312508e1762556cc13a9aa2d4631c74a334871faffbb839cac6e2ff1af53af01ced615bc057759dffeb2366a99eb31ab08e06a0bdbd0dca62768015ec95ab37a7cc5b2d318493ec9182dc76a54e1f1d5c0256cc9c677417f7e0a838917eac552a999c1abbba835720413294dc6df9d0eafed88050b44456d3637c9b081bbb8e2db5bf6cce2ba856e276260c339e63c709e66937d2eb2da7f0c2286fab692b33c921a9ce5eefd29309ed738833848ad255e3959db362a52bbb2b70594d29303080ec569c8ca3d82b13dfd0689e7c81c5dd8d3b888565ab7f4e00aa14423b7e28e90d0f4e1b2c33a8c40b11cbd000b749fc603428b195fb6d257739836a7ad7015dad383c94d77637d975e549e6a4141c604982a08aa29605f1567744ef6cf26712836f5d1b13cffcce6b59a2aae20a9cdf624fcf800001a11ed769bec91d8ede74f8e065701f7c6b48c747e90a478bd3327af1fec8ae0edd9de6756413289c144029976fc79d6bb865d66ac3c4b662fd990da1d71c8e5aa633fffd31db2d5baca09a959fb72420121f40edc1d31f4e0e6c4f36d9053040fb05f34d86e99d35d5c0bafe2ca4db711466f567e5e61237c6f80178e265c4ee10fbf0d7fba8320f213c40624a2c8df3929fae679c2e7ce96a6fa27546ff0a584f81f329b939aeb4fbd0a0510f0f60a3873b4c57a94ff2aa31c17b608e4d101ea20c6d13fbdcfb2c80ce40f78b1a39ffd02b7bc4870b01e75ae10cbfe5d4b844a819d6ed46eb231e826c000362a5b92f4c513710fc712f44020ec23356636121810c72faa7126410a3a677ee4054447bfe06114fa51b3529e74260e63063963e0ad7bc1a6f6f21a38546c169f26d24a15a58c0ff00b85c39d5f0fff13f4ce9b895f917e9e740ea49de0032935c5b72f792a6e1fbf9e556cc3ce4583a2890e0e484fb48fbe297ef0d0f3df247cfb5153f19eb12ad51018eddad89986170cb602cfe8ecc467074d6e5e3698d2f18b94f32ecf55c7b32b1063bb6b2f01d334e00d79b61462abc101d96f0b4e16059e17cb54f0dfb15c3fa24980d2d2e9e2550fe8826f77cda6812f9b7b74135a3372fa4cd578ec2f751dba48a21f821c401d18b49c6a444e2cfdf494169c8b11adb45072dadea165b3442a4360c1017f0704c27625bcb01c819cc54587fcaca816452c54013d6b959516d367fed89a7d3a75f3b73fa4a67798da02d2fbb41de8a4f8c5af8891f42099c712904d41469d8846d49112580d2aa63121afbada58212c75632d292e5e431e66e30abd84b4b7ba4f98979f2c1a3e9c07758e6f2b68f87ba4f47dac41a2af3f6c93f3a4ac71209b5bc1582d900a91b331fd14e0da5b195028157873a3f2bcade82df7bff265819211b56d020b07906986669611b618fabac1a48fd1ceb34ae0371995e362b6b507c7daa2d939d68fb68c0e495ae095543d3eb7d75e0d876f018fcd17f155ccd6d749f17dac7c0f0a2ff8eb80ab02841e36a3a129ba06718bebc61fdcac04ca741d2e64dc78d008c87e0143e74fa7369d528a163f4db6c78db325d88d5847e6400835a7fcc55935817996b3d8ecb98a57bc70e2a29fa839691e131e3129ef312d1ef5bbf6531a4e9df5bf4bd841e8042816281c74cdeff8678e3396bdc70625d602c64253528950bdc420b97d794d87f454b743d5903143810ec5d60a5d1a29899744fc95fbadf876de16039b7e94d99a52300f150f2bfd9a7e2270b0489e213911e958627e48cc46262c5325b76d4cea9272d2d72923c08169486c42cb937c18728138b90cd960c7c40f91f21e620a323e7531a41a44641214a7914b5f14b48e233909026672e319e84747f4f6ff7a443dd2177bc82cbb28816912e9ede9c3a69207b4b4ed0a2482d3e1dc9de213516483629f98cee34094306fabbb11b096dfe9419067ff02290dc84623449818d2f242ce9c0ca652843fa7d6987704576ca4cfa27da8b6b6f847dfebffce629c861f47136e9c661c94468064226285928574baecc34a4e525b604c15f61b6132dd901fcbc45d9a86f57d85319c4940da636441155540dbbb971ee487dc8445f306cca550f1a0ec16e68817088485b7ea645211bbf32572a7a73be7bfa8bb278b1a4b6627bc6aa3f95ae7ceb413e9a078ec054854846560363511f4690f094f706f7922f39b7951a281a20c3fd0a2feee20159374a2b25abaf1d5c12bea3c3d3bd197833915a97590ea8ae802068dc74fe56bcce8d543126b4260897e69feda81ad80281ce7561267e7d994d1769811ffcf78b196f5480fcdebb44be64a7ee14b58641850d356538852390125400c4112e5958930dfde266bbe5da5ff4e3d3f6748d8e0605a5a2f920a311fe846fd173be0416afeba4a73811ba766e9acdda33859aaad087a8b6b6ace4461eb72ca9ff100f91c8272ffb0bd94dc792a8257ef1ac1fc6d71b48a0f04c0b2d900615ef83f284820d570c01886754ceaa5065768eb9bf565d8690c813b1f741539d262edca2fad1e2ca102396836372f2b56db94c695370f1537c9989c40923aa0ec5268bd71e70ad9d3d9fc63aec63b3780021d16c89c484e844682b3648cacd92451f3142e358102465ebd2fd07f5c8a75952e2b7c750cbcaf028bdbbd572fd534ef4afedd6c54ce9b579eed1b18b811c2229d40ca138abb0d058bfdba92bd383b080e0c2dcd67fa5dc96703b4293729513ef700487f5d0ac9a08612976bfeba45fe6bb1f96d03f8d350438423c15cd2e7e826a96b7618f34d010c0582db3f780efb5299ee8ab868118263e081d58119555d2a8244aaf475c00291c7ad81f58bc6b9558c9f0c6f0ef8ea5399576411672082848c880b6c4b476b878ccb9976f1764a10c13eb0b0a03a1776b455cca2a40db13e317bf31b5f4255a626b93c0d867b97923db2fa75b095c554962007c251e486a06c6971f67c1e54dc95c85049ea911ec0dd4e63bd56d8cf0b409d0abede71ffd3728510bbb446f6557a5b47ba42c74c6007c878a14a50e0f9b68a4cfb128f110a08ffd18b241470c8e11f396254dffeeb3b1cd26a910191373568566211525e987a2a495f695bc76d3587bf1a8b7334383868ee882afc01e9efca8272ac6641b1c4241bacd77e5618620740e023e91104076a62930496faa6c5ccb063fb1abbc078d635251ddc3fc2fd321c7321a2f4db5c51e039dbc3ec1b5ef536783ca098e71149583bd15f0d550ca83a54c8dcb4b488218199fdfa40effe178d96df1b40950d87938460318524f2d8e98e1ec6a975fac870037c42e2f15571d8047f9142c97d3a9c1eab9aa8a4c5c9fdcc688992f68089c4dfe7954ba7c6cf3f7a58fca52a679cc0eecc9b2d6f4cfa59f4bc232c20b5d371c05205c38fc8ddb10ddee7dad6786c697fcc2546489c5a93fa48134d95f9ec948921b9fa29c55f440cf90fb565949a027e126a2d974321ec5188c5190d20b7310502b410cb7555124a6190d7070038cb4e4415057f5a4f37c2f808ea3b98185228cd9f08c9a6e66c9036ad4845faa089cf619b42a3c9c3126a14b5a9b516c156845317b68a8dfcf5de20d7c7520d10ea2700e8c32d08e82891cfa118fd984276567586411f7866dbe8e5cd85e8f395c9ccd8a07d9f6737c95c121b78aada0925ff2dab5880b6b7c0c31477358c765081cafb2540c529c18b8d5ac815ed147010cfd386ed64f52e6aa693966c971c91a293c97f92f998f57d7c510e70675fec520c164645053c92736161269444fa5576a79874aa93eccb2b21b61820df1540aaeb48fd1bc2b49a893c441bb86e55499670c1646a9fc0e50d4c052b8650f6fd1c2665c22a02db96f75f4322f7e44877d2c0658e2f525cdd1acfb7b74f5ca1eb08ab8e2fa7e67a06421d722c085df0331185b44447e487de3ab21253cf8f13bd1e75e977f037eb09f21b436e17ec7133b5d7af10cf7f96917e93f903774615eca54beb57661acfdc483055d61de9155158b385065b467e6ce95ab25b7c3049422230563729b2770289e3cf1aa1ac0e7aa310016982f8a91c41cace649e3f80cb01dc3dda76b5a5baa88a44f520c036c5bb63bb13f303e44d0e71ceba9569619478445cfbda69f4b326386d677d7a42527d32fbfdb80f9c23f758fdd848e81824f99b68b0c48b3f4f60bc094c495ad87ecbd4486564445d298ddaf260b6eba5b22e4a425fdd8b0af994a5e2126d6f9d8898c4b9db2a4860f9baacf5ba1d8a02f3d4b607a8084fe00d59195b119eda3e25a3cdad6775542af9001a93989a83162e5ed18c4c0a117e254e4fea7ab03ae8fbb6b6323f7797fe97a768b1b9b3cb58df0a566d4ed8ddbbe0a07f0ae311ce4d5ccc6a14cfd4bf84279ab9962e657a23ee2286d208e8813bba8de5051dc895ca1db86f4039ec908fccf15aec7b01f0cabc75d55ccd04251ab666cf0cc8f4f7122baa1681e0babb2225dc5641f46d41cfb9c8482299f10905a3df142f0e90dbef7c78d30b0eebc57855631229d5ccc66e3386ede585a800dce8a63654054db05f5fa70cb0a6aaf9de4e66438a8925558879e20f1f9ba31652054da3b34dcab15ab18280b079e45227e19c891cb53f10100bb9aa736c3b93fe7480b589dfa774b7f4911fdd2f0e2ba0fd2abcff2537c9f7d5f6efb30c8adfd124ce24ea2804b2a1477f8fd0cfc65fab9adfd54af9853f258735a777816ec2867f2ae9cc08f45f01f8fa1e3f4a5da9dbecffffdff7245495b62ff2ed02005bd3fe84a367eb5074d56f0fe88caa4135296a826c8c9bd21fae872062b9714802448ec47a3a538acb69c87f93344a2ca36c4d23091ff6cf18d44f95ee28a20b66311e8d553019f16bd5871f4c7db02cb3acce119ca1f50c8feaa99d1aebcaf918c5eeeedd50f467abfee4b74f33efa2aa9dada1b2ddb59a36e2a04e232f3b54c20205d58368c2c46e9c262465ecbca1df20961c5d28a19ba843f08bce427e7a7a983d63ee77c8f3248d142a13d74384b8084047ae1716f4a4be284c263bff292893ecb98a73d877885b3ea2ee617ced1311ce158be217920587a94e0b3faecbe9e934c2af233a7443e84e748408ab7c77070b638cbc157c75ebad6afafa1ed85d43f5fd27e'
+ valid: false
+ }, /*
+ TestSignatureVerifySLHSHA2128s{
+ pbk: '507d6635a4c00f4bc736631a2c2b2188a0fe22e75800707d68b70d6fc1b2fafd'
+ msg: 'aebbbfb373acd2a4b775e1c6f19c600e5585694684d043dcc0c23bb4924514'
+ sig: 'cefcc8d3d4f86004eaae49e49236e5b5de5dee75c02d04aa698c8b756808901c68fb205146d8ee0f4cee31b866b1b52333dd889e210f4b30af28939e23e289f7a35c00ed8a5ca887866832031205bf8b5a3c77fe091813803fc563f7e303200a0b9f51446b241f2f3340b622f831f972312adc9a37367309247a29407fc4d84e20bb872f37c8a9c75c78c846c8e98262c50d6a694d1230b20e487c9da99ed719205a427110cdc4f67ff36a5843cde2bc344cfb07d08e3eb6f441ffaaf963e3395d548c7db6a668211629ef0cf05c126aea0644d1b0fa5f72446ab3b8b794f009c76eedbb8c17378e6144f8b3b3dd6c1dc71c26a4884f8aea0db2fa7e1f05e5950899a570ec01538beca5f2fb9303c9c61a3701748fae49d1b91142d30778461dfed8c14dc3d2f9103dabef4f0ddf279774af57501e3cb98d9912e1c6fc0ce8c372700d1a84b4901f37e2e5e407f4cf17e18d1af070b70d841f5750318135b407ccefc821e0c3dd557ceeba9f96a115e15b69fc7d92b3deb4126b613ce97ab050b4c462cf3e9f23213131a1fe2497a527ad8cd823c14f17ccd177f7ec033c27b183d380665a01d7a83997e289ff056b334132b33d9acd927681b5b4d4ce1f8828215db3c284fb7685576258e6b8eb4b0e4fb4067dd5b41fea46bb4e994de34fad14016fa8c4b96c285ab483d1a8cee0f91501b5571ccc503276255d47d3e456393ab64873d6a878fa51604238f29fcc9150fd5877e2526ec528a592dba1768b080cc42d3c2db15841cff81eff0902c9cc9d4d2bd51d2f5cef77f0e0c7be218baef797ea877743be71af9fd838731e95ed8b1a951a70614814a24f11778e020790d6262d71cd25ba9f189d28d3fd59d9960a1baec3133122d283a1cc4ebd68bde96e2222691681a3e83671d1ce6703108e595ecfad2910a5006e74f569b756861264ee0444058b7cd1cfd12c7d1f76e06f0c1072732e1799e13e684b20825a1c9d97cfe1ae2184085eb2adfbd9d698010183659128acede7f663af1908c730f056f6e68644d1efb51603fb96d67268cb033bdbb34f3abe64ec4363958a9b5f1c2e06ed6ec4872ffc96d7ab139c342d946a1d5b2393dfd33ff41563baf8f4e80de15b2e69f9ac37466ad4aa49ed8c45c30cba60095db290a098a139e4697691c3517565b8c5a4e81dba072218b9c2f8ad55a90df94f6a4785ad3ebef880cb9e3c530275504079a00150e1893eaeca90270a13cdcd95f27a499ae661220b56764c0574441a867c177793d1dbb79ec1a3894c0adedcebac248b8918c2f5d00a2f85abc840afa43a7ecb90649e122438d703227b1dc7cac6543558236d99b4eaf41b888f765792e83998c38efe8fadf1ef64b55e171bbfe88ed87d7f8069ba8061b2cd0ec51c492db483fe0de1f1d5b95962592a05f9c91dfa782681ecec3f8686e1ae66f11cdb01d0f80e4acee014c767ea3ec15ff9b73f758822098ec58b1b195e2e6d3192b290cec26fd3d82f3a0f8054b923ef1a5b8b27f566cd02575a150b4f58045af4f69607c5d731bf996c12383621a5ac98309ef3fea1705b0c68d641bc8e876220a0917e4abefc420d700d727d8cec3e67f868d1616ba5d57e475b26fcf7f7605e2a9eda6ce3892dde5b7efd20bc6dbfe60ee53f523749a5a6bf7c6648f1a66dc60e41f7d35214a2046c2790a3c2414570bcd42f1383fd6de7c3fe5226d5671811300236a7bf2f86075b8710f4b631535c866e5b98b6c4a6c2269cd0cfb607ecabf00eeade936e0479476054ccfd4e9aa0c60284ba436703bf4cbec35c2dd1c19e2a6d24f55a79f8008d1e0517230f20b428fd3f612216dd97841cc784c1b8675913a3bca2d23c158bfbfbcb577b5665092858450621ccbb32968468f87de2975d40c90c28c242818083f47c08bb73245d7be2b3c2c737a1a670cb6fa1c1b8a2b94571735ee1b6bf8f1f527a1fa32d9762d75c2ca3096ebba77c05528b6847a069ba7a09022f4e91b2fb0051757549d0f6721c942dbd6fb428ba393627cb4cbe5d2eebb55b622720c479480e1f52a6e2891ec3ac2b51fbd4ccc2d0483c71c5ba6129684e80f8436511f170bbe78b2091c7cce4f04af444d5d268006022400b9c94c052cc301865590537ff7fa7b0af65c3127a77522b6491ecc1aa3cb176db1b997791734664377cb3296c91896ab2f6b713cea1d1522f08d4fec68ca472f06c4296a0991a1f292ca1bd5ce0fc6c87b2305c6c65806fab6c8f312674b4d4db73b41eaca291d4b5752a4557076aa5fe4f4881370e8588e876b348846a661bb184c19bf526245752cef2fa2af988414232a610ee2125e5aea6a32fd9288b7afcd7ac8252f77aeb74544e1e075d898b39c2c49154408878cd3beac57ca5ff422aea647c870836c8b6ac2d95a5e2af05514dc6cb556c63be8f6ea501070c5dacfe4fac6cd0b63e4ae392caa1184c404144a6615c9a5a73aac9f6c17375d4ea9caf71b22be4d09d74f02b0fe747fbe2af292695370c67376a5f907c145ab85fd7fdb445d288af264c098b1a79f519c266c7db226e0fe5215c6eb6900980cc1e7483f2f722caf1e0a4d8963658b68df3e737ee0d53a862c5885970efae5a7531c908caa8f8d2d23521f49082cff997709ea146fcac18a454e1448240ae64641d33072f163d91ff9f0a44e7100cb336cefd8405e688c504269de4a8b588c667b17a630651607c8ecdddf282f07b1d019703cd7e0d2bf723fa4d699d0dc167bfe1a19e4264c4c3294f6b6168553426d35284fd1c23badf6ddcae16284cae3a39d05127a694d54acf211c13d7c9a94af939b75db89f25371b598bb2706a1b6b6b7a31b74c93b99fde0be439c62683933d4b34fb3bbcfa918c11155fa8bf7e86924afd7bc68e87def69342b214782290b40a8211f388f3d24d821b38d5992b7b161c579d8683247b15d18ef8b65bb68fc4ba59a3779088db143b86581365092816259a78b59062b01c96ec093e7cb8cb7caea4cf1a35514fd5fcf91b8cf753c99f9916280c6b9fc3f547cd784bbceee64c499afeb6d81f124ecf56dbccd2099fc6924ffc179deb5bbb8c1a348416efeba433cc8fff80f865437abf30db46b6802188e3db7c5b862190b85eeda2e3d09bf1bc0a0952777ea7d91c97fe97b0b1902ce2364bc50576cc3f86656230b8ef62ab031b969b7b5bd55d39db05bf113c28f67ecefffda7d9d5edcb1b157278ee9ef0fedf3d431836a13b30332778ebe0d15e6f67d98f38e19f2a6cd36167b7135a098c0f3e11af1e2d5cb76414632542eba5d854ce96b29a6058b7190419df624b963d31d0510dc6004e694ce852547d769f57ac0196d1aa6a978a5d460d2627f2243dafa0769adcb36deadda6547674be185afe96bd0cc2d30abe876ce1c75803eef9f997ee3ab6b877c943c573ebeb085e755d1007353bd34af29c6cad02feadffd9cdf7cfb577395cbcb772510c7c18c0e22d6102d3d13753bc1a9ff692616c3bc14eb68dcbf041bc6e051ad686285ca5cd184018b39473d4d3d7ef3265c6cf6b21c0e068f56b3922b0db3fc2bcbf33c8f17e8296e578beb7e5b4ab4639fa9f628809126a42f09367bc298c5aca0aa5b1dea8f1e888c2fa6feaa3777bac933485bdd88dbf82a4110c9b410164ff332dbed297de6ef8be376e3a8bd9e7887a75e1c0007ed3fad6ea6a1e74e8375cbae6118ca45b8a27bfea1a837952755b71b5a4657652a9216938b16d8fb766ca67fbb019c661045df8eba66aaa6226e49dba37af3943f185f5fa931319597176e62d432344ac0fe3960b241bbb242e13614b7aeacb5fc1cd2d53736e40d229e50b3fd64b796040e788a72e46ba9e3eb8b9d8a1efd00b1e1b7895baa2591ea5f2aa3fc2f2e170d165f26922692a9559452438878e686c9e0032e66065850144fbf213d42f4bcb90e57d12b081f2a3501a47cb5bc02f3544e73c7987ab038ebaaf64fa23009059d115118eef2c126e809cc580f370577570bd3f8d5a0f108ca828eb630b4e2777a77bb48ebb5faca6695fa56f3d28cf79e9cffb3d6f975fcb3ecfa46c23b2ed425e17ff439790804977c453730660eaa3a5757a713b35721e358c34c88a94b6185d28503dd1d5ab0e03aa25c64a90d88bd6957dd93d5465ca40371ce92736b54643492e62f37ac9d453724a3be828734f531b157ded84ed7b23b25d20b6fabae5c54cceb9526cdb0734b69f8551d0fd29a8606d3010974b7caf905747d3cc8fc988643205b0dd8d872ca65bc6f9dd81f960881065cdfe9aaa681cc93d083861a6cbc6b2cc52d40bad8e772e660f590b9a784ad841f74edf1c7c76d04ffeb42cf82cfbcebb4cfa68242e148354f4b31826f328d02f406a60892c433466cb7fe627d31ffca186e407e9e81ab931bb9f83f0b4b5b5c432f1d690ea343a10a538e17cc3db1530c938edb602199e47e8b3be129ba6e1762bcd84870a6484a1bbe743d990a7880d78dba93ca11847bd54e621cfb29842443aeed3a5472b212c4fe724c8267398e0844b51f67ab9287e12de3e66ff096066150a7af6d10b0234776a4c524b57a707e8658eda348e61b263cf31e5b293e5dd5a8e16efd24e7f9ff7574e48af77a7156fddc31e2fe91ec0464320fa2942bfe10ac69b805446ec02673d3c4c747c1cbd75c8db610accd8ad5e1131e5f8df0ae610883361fea2f3a420ea8c60527d2819e7469915ec7f9f57d4fbfdcd40ac479fd0c6092614ba95e766546ac9e4e54ac12d4b7b81b52c5755f9bce4b49094027e2d44524d465b9aedafb9b9be21fa0011fcc61ec1512a6ee05df72de7fee13dc92b8e989cec71268246df1c38081a6a4504b9c576325a3165f8fe15d11860a3eccae3a4b85e8cc6c5739bbbdf595b2679c113834619925f7dc2b9eb11bf3da796ed2cbcdf8e3acf85255b3277235763fb847be0c5ce73b19c26c4323457c5309dbbec2ce1c0a01698e5151d9aaaaf4dd3ba0e7283fce6ab67309aae70ede0a0d835b1331d208f6cb487b86ed6a366929aa5334b1d796e3f36201f458a929eafab3fa6e730d84ade8f942bfc4b54247522f71fcdc4ab42b2bc047597642ff8dabd24d2cd8da0f22eb8d0f382241ffeff4389eaaba79ac555d23a0c8b9c17e80cf4ec3eb825be081aed0f502f6fa83b690cce233ddf174989f27edd13e98d7e44470f81fe39344c620e5d6b37472049667d610120898efcabf28e11cd1f8ffb34a193e585e2133a3d330018866970d119c7ef899a81318ad918f4e1784cffeda4cf61d4a643094ec68aea55197e249fad631e69c08f2263036e89e85655a8009cc93774961b374780f918b55d391e39cc68d075d94537c1e8eb309363879bf8ff26934fdf11a66502f28799eb053fa026d84cca8adad2f9cd7d26cdb3205ec9322588c929b45ad91aea236b6da50988342b8cc747ac25757905533852bd7207202a334fc996bc77d13ad49b34f98d791ee61930a28e25232047937bff6d235a6a3e638321c3b02c739d1a55d86fab6618fa4fd4443a89650563cb67342c0d8ec59fa5b57010a7f80b345267e837d8b30c998004332a522603b5072d386260550207bc2749d195d3cff6989ce90eada4c20752f51ced52cdb2095d5be3fe8c8d61d063327a67cd01a18831ae9f1abdcdab9bb823feec2bba44bc8f656e075567743f39dff0c2dd4a9a4617f79515896b6e9f706decfba3bdb07b4eccffce7b779172fce3073c74dcb52d32d4c299606420b856f78f229827f920dfcb05a09b3be4c558eac2a195c6d69e5c396ae47abf8819363acfcad2c7b26af9be8a1c3bf657f895e5d0a1c1db134e0f5ae5e1d2c748a81126a3619b7a26d3eb48945d2538b58cbd3b0945d0f7ccd784640f04e4e64bc3addff403a9b9660ff2bbbf57555f036115056bc04fa1bc068a06acfd30c814339c11a80ec35132bd8943c7d6415b7e015574c693dcadacc0cfd711c1464e09f614c6a7cda14d1e629d26cfc1c44e2d9cec79f9091ef5e475530106bfef64059660902ed82617fdcece968953dfd8a4614c784d25b8eb93172fb7daff5ea3ad8d088e8f2ba4ed7031a08525650c9e8c69b7040e691187a8bc17f134a73d5968aa1a514f8400775e93ada4e62e3c163ed5ddab506806b5a2c88e069afa650fd8d89fada36a723bdd62639a441eade8a3f5641992ef51ada4686edc28c708fbfc1603864053599ebf26e8c02ccebef94a09fe536469a9945c7e1418217111f728d35ecb236fae2d2ff4388c6cef6efc3f5f45711fec04e935c1b250561cf358b881c3f1c865d60b446af98a30b94411957d7ddb86b0bc7cd1e939bba26ded69570094f0df255b71dfa666135b8bca8b7bc9d2603747dfe0605213b15d13b2dddb0de06022bf6eb6fda3f981e35cc44223ba9b55b1a14f0c56c28b28eb7777544221fed6cbdc2cb289325a2fad27ffcff6df831ca2f9e9f69e5fb74a97d83eb60f0bed621d67b89b6be607face738607ed15a736900c353aab10b94cf15d7ad389897ac1a9b7cccdcaf35eb59a37e45af9c52d01303b9b93295728ab55bdf9a6cbcb48ee1b3101b285a5265b5d4db7d1f78a77b0d80a02f97cd6e3df8f95ed5bcc3bf4156f34bd3678ad801171d05b9e94b52c1955ce735ec0dc0bb85b99e05f30d755bbcb9b10d0d9653ab4d72cd82ea12df388f8e82112c1df9d8ce195f9a78aad0aff68e41fe2c5075e2eb0f7c108af4a754355e9055074716256f5329212735c894cf4ac950ee60de8c308c0ab8ed795b59af0d3a4157ef7272b62caa24bbf77afe609cc500d21616a7a5786e85c45bcc88b8fc7ed1749cced1ba79ead26b2c29f065876a35c02cff0c539bbb7c391c15f1e72ee314a876329df1079872c39c262d8221b17aa2ca358b2653cb5e352737b352eba5af9ed3d57dc8576fed41105338d69b000033ee5647796b59bb38ec0b46c8e3a5f671a5209929087a8b5cde5b619da2c37df6ca3b2777df18971027388c07baa25c4a851a925504e6514b69d2e4d82113418adaf911e5a9ce4c0859b6eb9773cf3299d24193b7211dea3f64451623bbcdef0f2e4a4154675273a3b39d903d29ea93b063055dd8a8edf7bdb67c9a5cc3612b83cb0379fdea981fe759bf61b0da07aebd3074077788f0c1df701f22fe99b0774f1f7f8e6a29f66459f624f071c534e55e58d8103fcf6f93e93df0c86c42a9ef2bb02cb76c320d5cc09f90f48a8eb3e3d7d85157a157c36fd6200eeeba5c270d8fa4c3ce285a4ab1f2798b75994d257c98e4297930acdfc942559ffe710834da7315c83ae557d25fb1f5191d7660ef802eea5d8e63b41cb2c16ebdd1b2445683b984a9ea3027b35f579efb0908aa6bba7592919de3c829f571796f89c5b59c82e0108f29b544906e439b6f8ceefb2adddd799dc2841e10caee91b00022104177ea8107917402a901ae11023a68a3ee7cfefa846dbd996ef7cf28cf66b559f7933704e0b118a04f1d1459f70c966bb01a24b118c94d19f8982563436f2f5129649dea4910fc5d208d8ba2dfebba9b30697f6f39af70874ae5273c7c8883590c85f8ebff33c79d4241fde704170b68725360dca88217ba645867952279d640f8d5a3a96ef5f081f3db1ad3a981c8cfb44ff285d1c9f5a38f94119bb9dfdc16fed5e7fd90c01013c9c138d10a1bc253ffb9e8aeccb1c4b8904c9f09fd2a5b2f40f7085e5a05f74970e3ec1ee849e5975622c55eb972130ea158be672cc48cf8f9771403a473e11b42b3ab16ed8d23c7c272a2df6b317e62de70500a4d433e5151c0f6701a7626d415f6410462a2e82f75953590494abfc429f47e4e8f0614fa3dc9702d64a5e9726f072651aef5241bb8ae79a7fb840a9b3a7dc6c17c1c539633a36f86df9a81bf6d503fea368c5143297954588172cf157747a38faeb8c7863e2e674ba11a41a780ca027c7200822269c2bc1d110035d573348d3c0770985969c6d6c44df2be39c6492c22ba2b2b98e67f29dd93c889e01825f056950566da628660f373c5a61eed552ce03c036204a190938e18301d43a06299df00d47341a071392b1f1e8524ac0e4843a1cd21f48059082fdac4036b012a8d023050093645e3b8e6c70700a505690529484a1762b4c4d3b57f96ed0f5e1094ce0b6d1fe1f1252d612fea5a3bf7fa61dc142d82438e9813c3d9b963bcedaf29dfc4bc8c9377ae49597906a8611f17741970f1b408055b369c2cde4feb8cf92fff4b17bc7f225f497d22b4487281319ad5412ff81811900c018590189533de037a1eeb7ace4921fd399354999314bcf64c7e1a77e81a1443c8fe0415ff93a9259188248123410765ad4489e20ac4b613a3624e36e6ac465f1695086632c88c95b20a4dbf4f4cd8d79d81a2fb8ac4b7e9ea08dd635ec12841d18d6b1e595086061d8e520aac35ee0670f68ec8d8fb61f31f5e807713dc88b7a3c47d7a73110221abf889af8fb961ef32649c1695ba62aa94311eef57c8a97200c873459bf646bbba08b308227e58bb9bba6ed07bb2d8ead62cebc0026d17f21067a13160a00d2225268e71016f8d1959fe97b44aa538c867b8dcc32d334a61a18946276654b9da6843f6e44722a2e8063467bf2522cc2f4c93b747a815ee878f4c6348be113d90d8609400790444d7151a3f6e1917ec1deddb96fdaf29c8285e2c4d4bd98d5b398a8e86876217278e43f042a3d0162b8f43a6ae0884753af7e4a6fbc2eff4ddcd42af10b2d7df24f2daca5b34793735b44158de3ab72d965dc22c0d350c1c16d7de32fd189ee64b37aa6a81357308db044f56091525ad1f193db85574c52e82622fdf40ccfd71d1e7c944ff56add8d49b2d6125f7ff51c56a8833244aeda2983375992c94aa58c115d31bae380d3fe61d1b034aa3e7684de640bf7ddf343ce4756db86eda502f90ba35847c39991ea2184452ba9be2cf36060798cf7f6ba0731033ddfc83946bbdbe3b0e813858470cf4b28e5b886a73a52070966b67b0ca4dd658fcbb8240ddd2f1bd140445da35d6eba2c65fd379b38d2e1a49d1c35bf3282979f8f010b467a5871ee3f4519ce274cc454f74a94589ead5976b6f180469da2d28b17e5537b2b47b6a59f5951a2260c2cd9dbcf520cba06c072aaf75272a7834c48142312c82b97e410d200c2126553066335e0a5ed8d841006942d696fffdd8789ecec6bc448643f35275e541d40e0568b0e024ac2d5ceebaf715b95f0372dbb5abb9939155b56fd287acd6921e7550924fa7eb239bf242743a7dd275543a8fcb653e4d43b88b84e9e48518c8475f0a48c657cb07c4d662367052a89b0becb05ca541680e2419e691ee6263cb913b7709e2cb148a609836b9a2ee3aead2c7aa03a6fcb1ff805aab6710694a5b6be384ea553bc9e79e56966d2378badd0a1e9813adb9112b877f57a4dc33e85dbf9863d042f27c68cd5431f3ac8e2930b57bde98d0569541e3f233553b3c7588b1e9dea640cfc9e2de0f6999ed535c0c3337de38083022878c0f5f7610b01602c31177b5a8b3b231f21cad5f92c057940bf7b686bc596ff10858ea91cf27df54840a0a66680bae1b8cfd62ab4e05f707267c809167ca9d2b89031cc7ff3cf1bc8c0fba88e41417f197e124a39c5d36af8ed48cd3d9fab0268c754930d1609ac96713aca5315617a39912ed5c46c8bd6f32f80e4510abd48eebb291816715cdbab61b05af10e47fb3dca483dd98cd88e0a6da8d92042f67a5e24edc9f367cd17af1b8a74e03120b620ef69816e9c241b6578ce1bc038065f05745d8f85bfe8e9d360cfb3250528c64f8e577df5a15804e67b0f748a32da1ee8fbb1f4f852539cf655fc8e2706a9f0fcad78174fd338313006e075ec24f2c8148eb1a7598d29a7d89e33e859f09069a087ae686a8b5b0e324d3b27016abd6477a1cafb833901fb1fdbdca0e71b6f0f332c6acf2808461f56366113a8ab8d5133e21f53b539f10f99c5746dd2022bd2b11a6d825dbb0fd95ab6a6e6d5cea48fe5b017aa50c8c02bbcccad39d283c48e1222362ba1f0b19ed8207db904d3d529600e467fc582027b34c82d8acb98a6b805a83930b612c75feedcaa25c73207493701bda5e08945d8c2d3aa56fbb3b47b620d8e7b945610c9f6804845d526f779679b05195ac2ca89451593fc8d7ccbe181c299612901222c34a8347596cb5a4ecea0dd348904117ef216f4ad249e2d1f55a57f3271fc9f923504aac2bcc88f1ec7250f46f42caf5e60d61c0ff9572a16b20cb1f2ebaf28f36215597ce8ad81de3dc2e287ffc49531a0b40ce41741be2fc290a1c8e675ddd255f852cae27939a5976441284b49c78b83c22e3fb041212ba337c783a2548e674772d1a31194785ddf357e115f4bb6889e157f530c7148d717055632bebe1fd17f703025e9e6bf50cc2b015b542566bbc1a18d9cc4e2332d06554d57d1d73cb06f94208adec6dcc4b7ac169d5c302d7eb13aecfd86daba5aae839c7a5f1e8a126cd087d87b99378ac7f9cb72cf44e53de9c980bf671bfc12d7375d93e40304d03236f1f7e6896e9886005e3fca813c70d380608297b1b3edb94068c6b4399e864976e157f2603d666f444bdd5ae9eefd24f4a8e6c8c3cd5bb04638a5a630853f2f6087f297989ec924ca33b885c3d0dde6c138519d0095f633723d2532342f567081d5a1bf3318f6b2d0b38abd2b833726da86aac1eca26ac49890bc70ce7e7d5158bcc7023da44a2a7a561ff01b58a5e7746777767e4873e45f0d4db6f9399b439546397f14990e8147b80fa29a7550b8526453246dfc4c2500b2358298c151b2209a90cabe1c990ecc104b9032ac29ae1fa17b72398d900cc9c85c91a4a1b382593313e1b2524aa1592ea7b896823368eff4a71facc7c046fa8cab58655cf89da745cd777fcefc4eebd883a4fcaffe9b529a4c32bb4ce50f72faf3212a42e4552c272174d28547bc569ac31e68e48077cc8bd9f2417df7d8e76d6ae07ebff4bf13312b4a20150b80a2b7dc98d3c16d5cd07e22a37d91012c20f5146470b34d4b91014155d54303bed883ad204683c0f7d49a90362ba8def54e4a2214a694a45573618739c0e541817fe45f71088339'
+ valid: true
+ },
+ */
+ TestSignatureVerifySLHSHA2128s{
+ pbk: 'b31826a9c03c1d1e9da67ece57879e0e4ef1ec125fd5f581fa28f01044d0eed9'
+ msg: '8a4e07dbdc77b8053cc949f987e6960ab79c606d9e285d6123b72730aa625b1920e3d7dd1e04601ccaf14cff025c03f0a8177278ab36fb612b26e03c9482f688c94b568bd63f2129150ca49a8a888804f4bcb2a1eb2565766fae1c3f2e75286f8bd7888a61f8ac5bb85d9e10ad6a1048660eb2bdf1826052d5b783839ada87b2'
+ sig: 'c3621d36a21f4754ec93dbe072fc2acf4167d02186baf84fac23a4915d942b30574812521568cc0d52f27c7c76945971b1b59d6744486acd1dc25ff3589d68cfb612c8e6836db00cff8b239290281fcbd8da190b9f36bf1a084842c16e77278e77423e75b1890c7b278abac6dd1435757cf0fd336c80a0b5a802202fae021cac791e65c84321f8aac7f2e331accc95f9b3cf3fd68bfe75c794904004fdd940179659ea2625f4d7f672d461f457dec5dbdcdd9966b156fa2d631363f7283cf35a72109b00ba1bed7943fe00d0857b60b2b55758b70ce1660b19b104214d50bbc92329d0214051ddd623050f36a55684a8a55cd1328e212569bfec0aaf4913baa5ff92185ac603cdd267f801e4feb00ed1e87b98b4a243d6d8b2b5fa8d2bfbf2904d7e926a52c6fde736b608dc72e4d2af01c596b36f056c02916108880c357c13e4dbec03c4f2901e7def917541e00ab35391ca947ec55e0f0b0ffb91026bdba4df371ca9009c061cc2d9cbec133ee3e593e2be15bedbb08294a96d6f7cc46530bdabf127402fb9ac6e16df3f5abf05e3b324b7c4fbe800314ac877eb01289d0ea3ec919f8fe94439da47659551f0d3c7066633fa8d2a43aea3592f05c93249c07c127c32b75a5d6b4f1b118f513b4e34125975cf4097cc9c460828dd5457a72f1ec0230b9077aef0ccd49817c0af5c8b7a9d236faff2c4f67dbe3b1814b46741c51591c6f44ea32a5425d43b845beb2cd0a48e877de6cf3cea0bb550d878387796b890187116d9099a032859ddd0ff4c671efae781a519c110c9867a3deb53c8f76b022b0193844ca69967aa0f89e0d0ea047c6f35cff5bfa8725965bdddfc057c1e70e565a5c70d4279fe9651b788fd93d921f5dccccb0ee59ad0f385d453bc7ccd28f9918ead6793df45c119ef996c9ee0e9082b2098bb59f388a36a354ba9674c1b2feb72b7cdcf6a415dc60bf519fb4b7446da66c0bcfe5766d5868e3e1fb93994a0c723890efee849cadbc7c4994e56736aa27abb215670c236dbfc3cd69039639e1d80dd806df738aca44f7bc3c0ebeb6219f9f7ca6a79b9678e0853ae11085f29f92e8d4bd1ab4e5df02136d1f90a0b4d844e1d2d7bced2797d36ac16dad6fa06b834fe225ce6675e1f0d0795148187974cdd3eed3a97a815ef2413abae9d0b3dac6f685d82625784a2b246e1802fe526d3b5b4889345f23e23cd86131f21806f7a8d782daf2c36db7f08f2815e49c59ca73645530cbd5ffbc61e2ca49a9d80bae6da42269b10dd31eacfe206bdc08d67b0744eaa1105ce6d55608df74a559bf6e5da99b23b1ccc7f4aba312b16e1105b47140fd7367020a5c11111a333df39671f5d3237b57eebd76ef485a86c2cc202f36b09a108217095933fd2a9fd43f1b1d7531ab355cbd613652f40c0c71969e75dabab7e6a39aa447a096e0cea11b6b64db40a569eefc76463ffae1368b19975ebf318c4dfe93ab947b1e4c046037d180f36b38a01fa10f098913d7680541a07a41a575272017fa19ba8490083c9a64d92de4173032fdef08933db2a6325c9c01e748ef50f37ade046b8a03d7552c29877069224ed6b9ade019c0734b22dafd5103bd34f8514545c04aa3b47c4bb1217a7e13a177ef2aa956457c03251c60e01f9a66865b893a5c0659ca9932bdc4a62082bdc7d1df7f0161d44d4e32d390e39c25c71336cdc13b23eb7533459de5f0c47f4f9137f0f16b2764f4c904bb5115e15bc4b9bb3ebd284f530661343ad5f9713950f65c23fabe14429e30677a769b64aad38d33821ade1e3977782e83eee003d7f2dafca2397819ee36a736df2519af3cb3eff5c5a838f6fef5a589d36a21b2006e93acba365610172a1bc7bbbfeaa7fbed92e78bedcacf6da7bd2308e331350a91a18aca81968dc5fd1df0d0113aac532cb151092a9b7ccd912683fd990362acf5c4d01115eac01e15e0afc7655fc14df82a9558882765bf8427e722ba0b86b7c968f84f877f947dffe551f3ae182c9d95a527d3cbb2a044506931de7715c4d2f7c95f78c58d569a34e6b89462eb7f75e241945b693a8734d049b7e3aa9d1f00a81e1af503eeeae0bc4ea7f9aeb6567c0d05997d3172fc17e9bf2153dab7bd5d93b822937c1b8f4b3c841b1ac04b904a986089e8dc534a7a91cba4435997704bcd111d4a5195222b272881530d5453265b917fd170ee1131cddb5ec096105f09538b9c28511a26ca9af97d44b0bcc2dcabeb2e8653493736df1a07c34d36a09fc570855331935df6945195a23f59a6161c209d398de393c6e29b428336f9712d31db0adeeb5c48f6bc866d688d11da179ac01ccbe056c05cbaf467a5703054dd69af288b832dd3f6bbe0dc5cfdda74eae22c5e457f9deb65aecbadbf20aa92ae3987cbfdbf695218239eb887bca5620bbbf64f4eb18abbf42592ba40bcf64a6ce9de84c84ebb423d5e9114730554bb22a8867ed7df0b2b33b9e3f47d4a0c42eddd79d36f4be27df24c5d0d65a2e92a5548f65235e9fb202fd5b356db94bd2106d86fa45219689c125956250e7c8eec851f7b094abe588a5f69c8e641c97e15ad6f08c5a89c7cf2f27af82d25d01c9a32333e56ce6629e4249fabc779db9d695b08559098bc6b7c103c93a282fd26d500e7d765b94cfc7ae56dbc9a5ab516a8ea0ff4e5ab031e112a76e015d79f4ddfd7973558ac56a7faf185db656239f23406a8f140441af6d013bfe22d118564bc1c76a65f6c4ffb3bbad6b3d22442c1e8b877ff3eef93724a32a94b0ec5d9109a0858b3126afc84a2c930464e2e11f2f9f3729ba20f97592ce9592eef6e55c1246642e14c7a1e12349e680a323c6f5a0b9e9d286dc061ee8e8d783ba9fcdb1be9488022a8e99e9a7d69d1a50716a3a9e090128e36f24420cebd5715285e2f2f837e3581799d146f742afa40e0c3be78b07ab855b23f5f93f62cef61b14c0c0a2bc3ffa85c179bb31f27a0fd9ff96385026f9017859169ec15d8554879d85790c8352906eff40450eb85fb2d743c487471e2bc018b754736297e1d20773fab6dc01173f9a5532e2fd952aa47e8453fa04c9aaeebba0e6ed23b01e92b7a58509c4d60718f0571231afddad09d9ec87ae17e72f757350fb17910e1ca266ba12bf6e6ae32205451bac6d51496fdd7b4fdc7ba429b47fb5084c9b4ed5ce8d2309e2d51287d0747c59f6531e796f1b082422d3ad9c6ddfc16f7cc9fc1d19e4282275e8c8c966c7b6559a3392e2f851cbdffc958b822ee56e6045387db193646e4d41d42afb4ac8972cd0f8eadb4830ae1202cb8b468c041a17ddd0114df73958bce008bf3ccdc245778a58442ebe8af829d38b43db67dc6d27b6641c148ca558f93ee436b226f2e8434b3724f660691338ea97a87c90ca9a0a5e1edfda8c828462a5e5296174bc5dc74fd69c581f92b4c7f359619b9dc9403f2e0877fed0775e9a4b39a8b6646b50c1b93be000fb5550f540eaaa8d917da9125f5d52f766924302fa4ecda68f88318bcae458011fdc3036673b1f2db702bdbe85b69f381e36985c156d3ddaaf8a90dd2c18b1a372464f8b73ef43bbf80adee1cdc1ec34f7958d70ae0861e4a9a18c6ada467ae0d19b6e3836434009e4afe650d3292c9ef187c0575bc38d72ec91a34b009c8749bbe59c410559653d855eff064ac5712249e8fc755e204f03ad55480e25dfeec7ba10eea2b8a3d0d7f3d8a74f4d761fb261e83fb26002c38d3d21a9fa80753868411f78a1f747ef54e2f9b02193cc810e06c23b8df9c1ff2ad2b322977b655eab514b754f4e6f388c6233bb5d8df97fea45df265a7926bbe0cd7cd3b27fdee6127df1f573bf3e725632a8379532de9db1a7490d0597fc82fe61166f7e0dc0e5cff6df34f5f89027b5cc0a0d3b4106d7dbc0290a122facde7776d5023e4f3a8c3bf2dbde9ed09d1660042209812465d2bd4e11ce24aae4607e5cde991d5fb810e0504c25ad6d90f8cdfdd257baff1b820ec81040e169d88356c78c1deee6c540cf7e6cafa68448b8c4ad259c9d063f3584a8f1405bf6a0bdd632c7f384d865a9b5c7b44f8ed51fef56e6dae90c49a953390e549319c935c401ad03d22bf9e7d06f8ecbc4e686d1a2c626ddbe5cb6f70cb1d426da0df3fc7dee802245f43eeef88b81afe36c4d9e1c00d7fd6e988dcc4877133d893c34cf05e1a0e156e54d96537755c13b7787f97103d3daaf9acbf60dfd8497458fffcfe671bc6d1424bef049a6e830ac16fbffe8c3b9486bf108744b7613e4c292b04603a80d1d42b46759ba338a6d70591251dfb1af60a392fc55ba28a6752912b9479d0736bab9902576379d6d9e08a1fbec2de0cc8f0d144d0979badd2ddf1ac7ae12bbd898a835e8f9580be1eac32eac4ae29a69e6ecab75ac11f79b60274d8b85bf8b0348faed059c0436425481167677a00ca3b2deeb07f95107281d39e32a6bd273133726dc9dc18d7305706f76f5ad30e5afebf02ed4a8a254f1aa9ce84f19cebf96e59eb8c157ac6b1586ba0faf43c81643b6c6137fb87680ab63846dd261749e7175d2b76e625375c2000a2d3c2adb8c533b0366bbf63dd468a9d5bd2efd696b3fe3f8f73368a78f4e8159842304a9100b2346a02efd741d58731882373870d359614ac049e1d0c2115803a6aae42b20c37b062b8106a44297474602f41ae138204d999082572d7a26408465ee8693517a9bbd74511c61e5adabf454503bc291fd7b79f25b70183dc13ba046d1aa7fc42a74a46c2d969446073d09d79616ffbd995a5848ba6c91f894eaadd932ac1531e72381fc977f0e982c6f646e67c104dd5754b741c72fd31f8d21738267ada0fa758a97727cb29b05c2cac90aca7ae53fb91df4a3b01ddbb0401c1abe47722272b396c663b37f870a68fade5342c1b6c7b394bbe0c4c04b1fda993f612ea83c8c9d97f9613a7f66d3794cde335ac24d45bc4448f8074b0990507d2c22f2832b85d929aa3f96b855fcc528f9b27adf86e6821ea4df2e0b9583b3f8c5bff7da25263b76d0adce46d2448ed87140c0cef2a0417040ba771abc32b0bb36eaad109b14763343fa994a9a8abd53c71ec3686d52b235e89c07c68c4b65ab8fda4ec3d746b35cf0715fd09593aea321067ebef23e7c342faf5abd365cbb0f014aba36fe65e500f33a0d669d1bf79a24081fd21aab90c5fb41de510d2de93ecb70218dde04b309c60be8e23ec1b1bebadb5f79c795766ade4baf33efb0e7e6228bcb8bb3a7a634759b8466a466602724630ef88cbefef76ed0bec8779808846113754b5bc98ef0aa01b058af137d8dd28e1fcc7acd1f2150625660830359e416d3dca2dc0c82d25a6bbe529db7965f740a53bfd7bed9dfaf5b81a3e4b7ed551319ddb7bb7f995a4df884060a4052e6e76ddc14d0a5cd55e99cf27d8921a1fb91e0a77d1b98a0a849ca4dee7d35fa22c54dcae441ba77e4c5b87cfe68f831b7628b1479d103c26c906a5d17c652697dc95fe9c7131fcb07a9218da3038a5142c1c8958a184b52e98c987d393f5f38d8257ec3f1c2fc245692cfad0982471540babf3b0656fcf0f81e1e6a5c6677cc23c50b8d7acbe95ef99d324ad0b79bd8b7ab54bca78668761e5e563ae1f8401d02b0469a49c104cc476b183e38374d8c04238df766fa882662d4512484c01d57349c5741118a20facf2a395e1b7827f7ad3977e41301a1726a2de8a8c226b7cc5d77f002b8e11c7d9a28e189f4a500ace377f77088f043a0df8b5c44920f32bfb958392ed4be52d902d5777240ed43e45247123309eacb5ff4396fda4c8e4f20cfffe7837df64ec092251fd32e9aaeb691e0c176ddc84f0adefdc655ea05169813a502fe8bf3b45b2543f6a82cede8a7b991263e9966dce64b91b4d3184ea55bde0efb919f80b061dde4bf99e6173850a17ec1017cfae9b7bfad0620bd20ba58bb350c3a2bab2776d8b3e1826b500343d15fdd62733b8454a64e5c32419d9e02b268817a9a858e50a61824a54ca265ee330794d972aac54399ea9415192d2b61833e99d258b3f4c0dcc0ce6996655bacbd3f54fb4a40c5e9068e7b39b404d80dbc0108ba39b84fa9d22fc3cea1bb3d5670d90a65833dc2a7ef33bac2717ac84353eef707c77c4ca212762f8703e49c2a738f48c0b52d4ddc686b2d8159236407921d4bc6269176cd9d49f40e7d1b485e226fe71c1805e00c14f5d6d53aa8f69f6cdc3d51bd8f0080afbe5c4853cde847355a5a523a4ba804a3c056cb6e4332ce413ed6ef7fd45cad94da394b391e9675047a975157b54a8b9f917ade4413d7beb7eaf1f921c21efbe305ebaacc962f558b60da7608e48448098b31796c869b909367218a08ae5a67516fc865c09b8ae99850071d7ade81569be527d40c90f9f57cc0c6f81d3e8daba0a202b906b7d3496b5fda74b22dbce5f53c455971a1085abcd579b4b78ce0675a7e865933e4ea595526b8ac5f7fa9bdc3c9a2d866b73102756d2377e6cb5c12ebb28ef787b113e0c060a02c945a84aa5a6e538b2730a9f3f61fa2462d0de82d023a20cf008ed743e136fd3537ab7a373fb71f810cf1e007fccd10a1bd1ec1d303d1cc7b710060710b24d142d451952c6c5d43cbff5f10039d0003a50ba9bfa04d8a081550a12d3a5945f64cbf7aa2025316d34dfa899ed560140acc5b4251ce462bb2e936ffeeca2ad00385be6c76a03146cae9b6aac073770cf1d3998c0fdf9b628cd1b1e79954bc0c767d8b05a02ad1e21dde705dfead1a216bff8f0d4337d10c24179995f932392d941e745862c2c730f7b545f9c52870cfc897380d7f3cf951f953b6c3f0de49fe34c42f119e616ebbf1f878513f34d4c9f3ac94e5b8d0cb81e3eb656d1e0571ee569a81da43de497bf45c5eb60349c7c8637ee5616e9d161b635e36937154b9c451e755b28a24cb7ceaa31e2c9d2f893cf2178cc63b0fdac18e10e4a2988b6b837d575496409a75918ea99068ffae1422bde6405a4ad63a30cc4f5db90eeec4e91e29fcc03b8049b9e06b9dd9fb9be3a300f0924abd4155f2b6a111eff85a0db740844d03a916487564c49910e24d52af645a71b65672ba8c06be735dd17e1279c8e1c142b391c339e6b8b23f1f0ef4f99bfe9a8901d98503ec60fe1d217badfbff335227f3c61679d2fddafe2d3d8dcf79d0db6f0083323a55369d050f982e9ad49085ec52596b2b011c964218ee991b4700403b2c88033246e6446a13fd882eb621871efe6faf4151d0ed7e13f936422e6306937c82cc7922b9c043e6d148a2c2645cc8d12c7f26c43e46292ca36f2913758f7594fa7b6f6dbb374545f6d17112949d6613188524e61aeec28f08167d85a75529c0dc6e7d61ff74988929f2addd24e2ab524fdc00aa25ee8a592db65593ff013e17cf854e0732fcb28296c0d98d129d67a0ba034369a68c5c238a4b837e11b13803e7dabf335a9696abb9ebc8eeedcf880f479ea74dbda766100ab55f4d570d50ede4e0650086b609615c853fa25ad4d6224c4db9abc85514919b7cadf55f642c4366fd11d1675683913905e1da9ca8026d863a26c7aa6c5ac48f204be827071c3ab2861551cadcc4f0d20345f527d16dafc91d0d46ca4d1fc155d1fd71a89d207babb6f7157bd9ccb08c6584998f3c32d649e96b7a1cdff4cbfa7ea6651643b571ac6c8f996ebb70056dfbd8dbf837f576562f7bd85bfaf8ee3ede5db8c2fad1dfec9dcef6f7468a802a5819c0f9517169dc0e20337c0d10b95865b45ce49db3cc768ae3ff954faae72cccb9c3c158478de7e42dbb84915b974f27acb920f5eb3d0ecbbf05dd72211e94268ee6de78828aae4a9197ae7ab033fea10bb6765366730408385eb893897752e97be2a72668064659a8a202bcba40e9ef74f87ce4f7c8fd37ebd4a858c4e261a5210082aaf81625bcf758d97532ca94b7b914ca5a01ec1c780d056a543206a5878045aa71f0b5aaaa18b54f58ddd9b5753e04289fc37c7b4dcf57c844c747e2b4a388a1f54805d206137dd245a7b12caeb0ed874fef189710301d8e8d7a240b2a3191690d39872eb9b113a843fb87f1234b662eca11dc4ba60ee8ed325cd721d2eacaf4ee9539ffd80dc6e1e78e06ae3627bde4535757d28f8954b8a88a16c699c07494f92064e26aad8d26ef3c0d15a07ad1037341a88179ca093e1947dea1b0dcdbc742b77a74e7cee4c5c41e8c7611fd90c3e4fbd603c740dbe5c6e597fddef15f2a36c534da88d9f0f6d9f89fa59de32634b66a68cf48fc65b7f86438fcfbee17c3f38db402a164707449acd99279788da5dc7cd3d0ee230da3fcd500fb64014a02ab1d9d0b40dc5cdd19bf7bee76c46f4ed0ca37581d3ff97e9c2b7e4672df830429d739e730d9b939736a2da05beb3f292f54b36d848ca1be9a56922047c6fdb51c630753bb3f2f8789e8ee3d54fb9cd8ad82eb71c4bb9573936377074ee76572c3359be4cb817232136d908c7b3e61898c3cc41ff9a5554fd220343865be2f50de8f284e15fef42d3c9151c741bf8ebb9d09b8ec95fa5fa4cdb4fcd31076c6fb522d4de28a7ea422e07d482fbb8594594efb078df7bbc69426a9449b4a6565919e0d89aaab7fbd0c5efe2e6bf5bc3c321ea0e7897f1f37e0b55c13d2349fbe68152ff8ef3aa672c709bf86d3d6a2a0ed904913e821dd0bc618c4e18e9e913c1d7a29b678ab6bc92b439e3ace8e24f6c1e8da54506b6131d3cc4ee197dd9973e505ae9a416b14a63e8264c46c8832b53835bd99065f4261e9fe1a694bc9cf1ee25a8e7d5383cf043e793faa85c1238b6114467955d5b23eec90818a2be369ffbb886ed1082adc891530ccfa2b4b91e754f96dc29269999665ba580f015599b9a11a64e94d706a5544dcc11b98285f26fd4fe5f8df0854bdbc8d218edcc138a6e4957415385185f016c37216bac551e835b28604adbfa204b211d0988ceec7125a1eeed5c9b050ef572fbc35342296fc98352c03d5e2b919a01d5023bbea59560c1f538bad4d1b4a5bcc46648550f5f402f6849a13f72c4fb66105151f1f7590d91a19bf9a5e969ccfa4031b0f2c00f70199abc7a7b72e3eb86ff828f053934e1e1da2fc0ae8c88039966c4ea1901148bd9f0e9633d8e4bd03f1bcd42eaa6d0b30d197351ffbf926b4e2b76159a870d67066878107db0efbdb70735f5af003f6307fc3ff46e202f2d1cc186102a1989d516710dc6325686e2c25c68078375f8648b83a62a75370f58fc8be4051658d1527141fb6c8323d1e96cd07460f0cda7c4aa4beb6ed618abb6b6f5baf69a3134ab95992cd8d212bbe865a25c6b2f3d063098053535de6e85d426e8231a612934f323f370a9017557e3c968f09f5d8f2f4674aa9666b596ebb3bbce54f3cf0245e27c4c2702464aec01825533b66b5262aa7336689d6f82d14037714f6baea7816e992e0150cd2cd290d61ea8530642a830464b1627c03cd606e6c244d92c93913ca72d5a73e2e158f4398b7502dc234b9e5d804e0e2e4a7f37051454a3ef163eb8e2f8a0f7c8a164492778c790bfcc0f52d6da5fa857396f8430ce0b433961911f02b34f286a2a432618b90ecaa576e226b5f2d8bbaf93db08bb18a97f4167542d6ac9c09d78a972a654039a248540c8e49d92c2115adb0ebf4960a321ffe0a8ef2c147a9c12ce2a49b836f24abc4657ae96af51914b7e7ff49a92ac9e6b3827b47969a4b3207fcba55ea433fa447db7a965ac3202ccaf209a43520dd5f53f64c5a2b5e7b961070ffe8d08be97688da235738a8e646bf28ef53a062fbe6b201b37d939e3e417fcdc5ad828823428e2feec0dbdc7a9123840192dded84c1cae5d28bdb473f9c02551d506995fcbf7ea219305bbd79d7010308c1f3be35b5f020e215b403219ed1bf65608740f91938393fea5e4a828056633e4ee053ab914ec5bb74c0da2fd5104be9b679c0df44434971c1ad499f670ad29e7c47b7bbcd1ea16b3d911eb3fbd56094ae456de230483586f1898c09e057322f480bb8ea9d278af6651405e3c4e9d2218eac98ac0a08c1e080ec36aa74c65e6778cad28837392aa8f281452b4d6553d242aa88a09ea02988ac5fb535f52dfde532a51d5a0cbe66f71a2b135b2fed0057290041e19f7d7dd3fb5f3039a01caff24171985659bb0ae33b20203b6f0d035f7d669256b1672c147b585dabb8208c9bc200298f1709245b12293043bed88f36fcc06680c0fd7a5bdededfc7b8fd273408db21038a73a0f8f7f621d6cdcf29f11951fe61da0f227a2b486ad94fde26aef5d7ebc1fca186977b2200e8df24813e3ae1aee10a0585a570dab7c6569b2dd2d80ef4335187c2dc4d1a61c78e48425874e67ae5231892adf734349969961e06e3e9f3942db78a9f57e6b3302dc73c36ac192d1a4d3dec4e291fbb456162dae873598849a167b3b4148610f7cddcecee4609b10f49abb93f5ecb9a6c4b7336322fcc8ab1a22b06511f60a61ff1171775b5ba1bf10d2bff863dc2543f1c10e9b4233de22dc7e2771aa1624f639753b683fc8a3724959001d3461df4941998c946afc9bf715095f20cae1829bd8ba3a8604f1f6f53edf6d1c3cc53f68f1513f4f0aa9a47373db3f1b38d9e1fa070b224b97d2f1586ec01136d8afb612e94b76b3a0dfc1038dffd42133400db2e78264f64059731f02ebca7d93b479f0256e07005deb8c3088f6bbaf3821198c8e6f3802be72c5504bc3ec1e4e9fd9464190fb25132a0ae5a911d5168336fb269ab4bfd58cd8568a0d25beabfa7a5ddadbeb2ea0d63b2219b001c325beee4afb3827d17666ba9f27d9c51061bfad5509d4eccf66027d4a65a5ac1762e1c72d1a275e274ad0768a399586ac07759b255a277852642573fb721fcd5678e84619e3ecc86f1121664f54733fe213ef716c2d6c6f578ae2925d9d207cc54c3bf0dc563b974bd2817e405c90959cf99d4ce2bd3bc15093396c547701c185ceb20eaab237eaf75170a8e985cce1c70771033278b780950bbf4976f89e5b9a71aa0f612711ab63203caeda4bddb9202904e8afe4ddac8d1c6ff59a7ed026e4bec89d6cfb632b1dd0914ba858125c681a95e2aa34ba706a8694d8e45eb9c65'
+ valid: false
+ },
+ TestSignatureVerifySLHSHA2128s{
+ pbk: 'de4dac64aebce7d48ba91cd715515d0fcc208da8d4e41c7a7f9d5bffb66a43c5'
+ msg: '8d00'
+ sig: '2dacf7830511002dffa6a2414525b8a590b5521f9e06158ecdad6a8e24acba5d7da2f6451866464806b0ea68b1982a30a5167d491305c10895a04ea5f846ff3c46867a408134ef5939173c35331d91a19f7c9991a36ceb03be529ed24b473fd0097bf77ed0e71364a8e45dfc71c31c40e96b6ebbbd3bdec22adf5f98ddbf5c8bbdee24088519b93a5dd033594ea895d1dcc16f0a36d1694f18d35ec48f3b0657503565d1e6a0286e83114a99c403178b66e4d8e2dc63a77c9472f30611116184eab0890dc9e2e98b0d47d96c8fc67044feb7b46f67ab60e6638352b8f07e387f041323e7df7b93c76d67dee91c778b818fc0fd2f207e26ba25165ab510f76afe7e92114f465a76e0c8b92f5c1d142e42d36c9a0a3984162833227950b2137a7cfb9cda1a78085dbeb4a9be53f63b20f0c9ffa6d44e8b8d8bd2de9d939988029353c905d71a3200d28c9e4ddbf44b7fea3998f3c6c5e2cbd6d811432a2669dd3b0effe6e904ed79b738c517eaf204de0d3debeedd8a29446f2d0497b749b0e5206c70718f69a03687950e6bda2ef23dfb837364ed4d15fb31c2eb7c6e5e88a8987074253d1f184701b419e45bafe74782b8f932bb97e78d6b48d4649366308a04d707114b1d42ee17433e4a2292ec9f9538bf85cac7cc0991ba5890bf80533b6a8a2a1bc533ba049a10c5c054ed03362016a81eebd6897dc353fc29f14b141a22e85ab8003d6862f7ab4af2af4e29ae217fe2ae635b63e69c9e3c2a65fe85dbd2f17198423fe86818416c8967c22a1122de9fda3eb6b34895e33ef3243a563beb403ff58b7f8c77847a826670509f186b8d3ec808dad8255d8c091f0f3c861f12e6319de66852bff5629ed34ea466de062f673163efae197cec1d30a94d7ad20c45d5be7c21a069f061563208dbb08f1c8c279bef7bcfa2baf05c0bfbca81251914767bd6faae79d9092e5ebdae9a282675f3f40bc85757b46e90d43e190f3e84f16199c3967ff2acccd842828b9cca973753cfbcf6cd4fbe4cb2c00c34435cfbb6b203fd18d43679a6f4c421124002e702a2b210752912d22b3790b402a05d006f7fb254bb1059e3f61f6f364c3b3725c91600480889377e33b2aa67a46b6ffe2bc7550de80d91f9cb01a02fa170e9dee2c9ab4808d9a209b33d737c7c1a7076d14abd97650fa54db59d3d81f7ca857602512879261b30d6f48edb00fbb50685797814dcf4d798dab8a67efed17625ce2ddf676ec21556128410de597687ca7fbf5a7487662d8e64201101a9b498b383c707be18b781fd84185ce5df09932561b1b803a4c56a360b394a9d83be582f0b7464274d05f313f208a59d89c94ce729379035de931b35a1eaee6ee303b570a6d10077620d1905a7cf24d82a0845d1ee3b80c3da821ad4a1fff6dfc6c5b5f56c2b76bce7ddedb8a39e639ef62b7b765f43c1df486a8584f520e819cd02cd61d78f254e4de2ca645acdc7bb97b6233cf0dca9539fffba9e915653770eb6bfb1c6875e814ce3f94c7670c3d422c317ad8574d8ec4e44b10beefca786e59a67b041643419bf35ed0ab0701a3fc9c6ae6eb216e9798e3ea0648c057da983591068c10ad2e270bb3920435d0d0da07d9ab29ea8ce8d0955c1b2fdfe56e219e66e53395b308468072e52abe91686f14bd973ca0fd348449b9e996d1c8d2200f70db66c9a2bc440b2f418121fb49c136d8862e4bf545071404b38e34fe1336542b601d2cb02a13a7d92bfb86714957e8a779bedb568b3d4e27bad503fc17276554b9777c07a63a78df4d6970f714d76a0acf79b5745b44f6f837b1c1f4797f9c4779cea6ddde09a7c40e7abcb20070e11db7bb222d78185f49ac30412d04132a52aca5897ab18fe37d25b5f23822d1a2287cbda90a5937d54fe5dd7e8d2720e891c9921a91f59166c9f9ac63cd07d15d2134de02f38b8926427a56a2dab76e79091f79dfa0ec38405800cbff56045fe854f4763f0a93050af6dc8191f2f4e7b06864a21f7dd051569c0a57521da59db4b2a040e7f3a48bebfa70c9bd4e808044312147058cffcd7413f236a9bd2b5f50adc61d3e8cdae92107843ada272f51f11f366db3da2ca98d394752e43cfbd076382a03a85727b21fee06caab927a7c81baeb515ffa0e7a228fd1b9e7632681b2cf675a7e9e9efd79a5d32ab76084754a8f3cc9234648ea40103a119bef7d9b2775d8d1e3728335abd048a29af2628f747d27b3487aca78b1e3f900e4e56766a276343272d7c6aba044749a004b76d448001647c7e50760a4b0fd25c2f309bb7581e4e4ec74f2e640a6506ab01591e35e0d7e0e51b9426d59585c39e3d7bc8515dbd70713ef3d4d9f01d6a5f81d40f2aed59ca8e3ed5363a0643f89d640afdd0fd17441295fae1046ecab84dfe9f931b443c7943cadd116ef4a0c8d6e4f426a67edbfb0faa5f7fdf2dfac4137428c318ab7aed807f6525bcb3d213ee9c9b51a75ba5bbedc053dc7e5109a2309ed89636e61e354ac2cd5d0f5e395fd3c141db63389fa72b3eb85a74991f12fd381cbde4a2e923c08521cb22ddfd99158e6c5cef8f39a80b0b8daf293075368dc2abbcee534e65be6f3d494552c7d31e974ba3d1b1493e9ef2d426ed8f44341bb60129c8d54fd9d783f518501c71c2a7879757bbc97f910e52ed6cf7ba62ebfbf1ca62e681ab05908e29326bb9626d12bed0980a0d2708da506afc8dc53cf19fa6fd7b08958d147241d65d575388d87689ef14c08e1ec2a595b44638afe26f84580b4ffb25d90ca626d15afda78f4f26c7a9d5d163a21822ee8a8300829875d0415137ac1455574d5026642b26d6d9a2b1d6f0b07395cc9c7d0c1530c1dddf689eb144c1a40b482d449f9c9b837c2c87670d1cb740633df2321feee6530e17b7c46ecc038fa8966cc02c1c802f191c9a2f0017b0bedfcfb03220b94fce8e3b70876fd57c3bd60b331c28c89347b6ba154f55ad877f079fc4d019f97109503ad3ff2171ea4b55ab7bf0393921906fc5265c5e6c739a5de230a2527b7c1b64cb0c57e19fe71cf564d26841b70199ac91236ff90c231d8a4b1a53ad7f6307cd832c3264ae7c6c3a233b032d7d5d150250ce3924249c4fb86c411771abc13c224214eb31098a6f818463022f9666c3f2cc898a6e1fd181172259c8aaef0bf4ca1e612421d2fd57e2998bc20ee3a2905d607a5e677e73f07429cfcf231c8965e131b6b1926cf0625bfaabcb228fa52cef12e2b91b7beb457f8e43f67618bc7df54a5df14d81fbad4d76bafddaa3a8b3f445d3fe84d72878131baf03d2d3ec6edfa69279b36b8f2cb4a357d8d12eeac38b2bd73d1c58c02eab49dcd82f91a948f1f38219d52f19a919edba6f950a5f5594a026639148d13e5a4048699e15db01d677af078b414d8db88083a1e830892a8705c295fcefeeb69b90b9a15a272be7e1ea850ef35081645b890768efb91df4b41397aeaf5e7d4271e0709f5f9dcb8eec84c9c85c95be73b17490caaf3e0b67711504b965116911ff9f62f676c0f05bc57ff73d4cb8cdc917eace92aedff056ae3731a46e0fca54d8b8bef5b62797984dea2ce187dde9a7573e13d97ed7b51daa7135b192751ea0da8277712f783143f4d3066be8d4800ed66d76bd176551dd6ec3878db96ea80b7e5619edc4362be1ae002f914a02838f8e87d846d94efac14dd734de45a83a1eb3b6210ec14293170e04c9911547aad542ddfc8a6f043bd22179cdea570a094ffd3f4980d8befe646c907380201f9805f2317c0407ba6d41118e204369e173aad9425477143b2be8b0af1b04ef5fc90677538542ad782df4d1636b3ecd630aaa0becf78ad5172985f3c7b3cea581adb2b40b44b4ad087cfd1c03deb57cfce6affe29d8ededf4ec5d72f903ddeb1a837ba6230863ce46de281a6f5e328ce39c2729194eeb16aeb5ca59b489c24fe22936a774d232060a0994b1dbf31b858adb089ddeb20816fc2316c3b4eda707c2662fbb8ff6c70e199054de743121b74671e20608db57a06e9d538b62af06cb1e897a7ad60c054bd46f1b82ac15929883f872d245d30099f40f0cd015ec9d746f06abc9ff2ceb8bbc36b85f8446e77c1f06d678957f4240e8cfffa478f4dd3863e87602097b04ba04cfb75a33c724e84d04ea237f2d840c0de2bcd5082dd68a5b94ea339202a8852066cee1777188c57e58e0d440ad02b1accd78a2ba5f55ee1c8237360c790a85908c11b479ec7cca3e7d758ecb14c5917e63f5487cd11607b4015030334a368eb54fc75371bea4a3ba0d5ecda0c44dccb124d092443bff752391d5da621034f796471c639517c03b21848471d6ba22c2099117bdd835368fa680c1d86df9515a657c3374b5881049f80ea2c791a9ceea3edf2ccd3ea4bc94db68634d5970479a18ae624f7737fc35bb661154daa30c1a4379a5519a07de11805aecbe3631e3ec66719af9a0dd18ecd824d4b24d1d541a713a2061908f838d58af007f411a74d430e06943de0ef141f502ae242349654e1151ff9dc293279e7e7f4cdbf9cdfd4d391e6a8a56b48fada27f2628671dd294a8cad84346f38e937f65b7c204ef07dc476504fb1242331f27057f67a3bfaeac154918c90e49878b162f8882e8b14673b8672ad7716931637e2e72110073ebaff17f06b293068d9bc2406d81e8c4262bacab080d1041643bcb45c39d2e10a9439c544789a920b41516da34fc50f4a29fbe877fdf0992df17632497cd41eeb2905d1a47db538f8dde560dc9bd52126cd418007c6d08adf0e6871bb65ad02d10459ab12a0bbed9c0968241b02d0cbc29c5848732f5057f165e5703b3b604b845f3d5bf9b067c94752341fe13f433ade20d1f0a5f737955ef80efb051ca9aa9c15dd1f090db9ea35912d1b7aaac5e5a7e9f1c8b7b6b42c528152ab5f32b0d68b3c636526882ecc2551b8cc1490578dae6ce1efb3799cb5e039f0ecb420430c11cc41f8a3e665da98a40b1a1843bc8c755541f3412151a394614f009078cc89a9e0e9db8c54eebae9c5d396c64f5e0d78d2df8a7d0d0d2c66b901565c6a96487c141ed61a8b1123b6f77372fad181428c1d123d9c314e4d264a22073d88c7ff4c5a4047f4ccdbeb4ac62e6fe768b7acb828e04660c38eb3b30a77cd77318a62ad9b11e58c07e1ecb25ce0bc92a7fc9186e5175d746bb4db311f0979f9315a5f57e26f15f7ec7a4c0f06eb3e4d33e581eebb531ef232d3b5e12058cbfb3f81bbadcb3c82b481a9739d82a6b463422d8d7a4f4d04ee858f6ac5235de6be93016441c84630bf88de7a1a0b350705118ca279dbbffbb275a577a715740902722845c681960bc6521c25fa58562c522f78d53fa7e826f333cfe880274a85adb44f273228ceae8a070a3dccaee6259a80352f4147835adb327e758acd6b131288dd62d99b312a2222d7d63a0e4d596899d15e14f0aa4e2f4c68df79e223bdaab4b3adfe3ef8ad38db13d3a79fdc0c6912885cebbaab2432ab1b0657a341b55519b07c5bb14ae9b702d36219a639464e12ee58a6ce3263a53608ee770da7f72f121ac5575ecff31530c24167a8f3455379d5a810ca9121697fe879532c76890ee23e8c78c1867267174cad269c95765a3576efa4cb04b00cdc36ab7c2e47edd3695048e6c138bd7ca228d5b2d9bc89a85dae1bc9250900d03a42f70ce28084dce5b805ef070b90f08a0dcd07220a5a88dfb532d89bf566d0bb75416efe3ecb929ec346a7fd38be5b4ff7deb2c36feddbc474913678da0508db8088e2d91a3aefe579515a5fe0c3ba5282d2ece4f0cd130e347d406aad08047c451575ddd182ee2c58764a2991af63f243c25869fba6f1ce4cb7e721a6974cce25b7acbd5ce66d864d97f87a86ab40b061461bfe31f6f1f6c92a917f0cb1f19013400553e46b83d4535f565ed1f685742894acb678ce701cda68d9c1e09b9211230c800176d58538cdba4bd09786a08437e2399b985e702cd9b1e948a5d56bf1d734c624f8cc53b1c55b088a1eac6d3a16f252bf82e490f22f1147d4deba6642947c39b7165085300ddac2bd46a339fa89c78d0e4f604d12e22f65d6d47363cbe494d226d8b234f640eba81cf0e0cd11274a1fcd728cc4afdcc706868160de8fff14f66883c026deb41506dbe6bbb25c37d8f921352f70815d13019b34c493b653337d91dc732882babee989c6419fbf484586857e401c2c50821ce4b1d8b6f4c97cad28891b81e4cfc4bd66f30a54c0aad5c34c42ec87c4d6fdc303fe421e731f2582de84b8e3a3a964e3c48d480ba8ab9526aeb9d723292b05ea3d4fcc0370984fabca44f7bff95b01009e18af5af6b8cee22cfecd4860b281c5bfd5cec0f273144415f28f6bc8605158cfcfe0521bac0bbbb06c8ac73b33fac76c5d608e97fa9405b21defd8b88e79a2a3f79a0ce6f5ac30023172a90a7b2daebae9d558c54d2caf15c88a6bba9f8324e7f40798dec57f802f7918d6a9d283afaefbc893763a5d0bc7f3f9fc322aaaaa8350e097710e5febfda6f00e1ece1298991ad91617a6ea705803ad4bc0e2594298fc31f67d571af9d2ba078318fbd6ffb99d70867e10733590fa814691c6ee9ee2ab81a4fce50daadbdd0dac81f52937529b47b2b0cc367406d348b96ece246dd18d0bfff57db7b2cc07d7217fd8ed6bf2b42da35b3d16c4db6dd673a4d6d7e9e7af4cc9a72e873d7b2e65efbea2d23e9ddb21194aec201f710a06b940c60c6b905aad7c9eaff1a93a4deb40319469ec8b021af0e231c237536613126f35de0041833e3831ac31b2584781910f337aa239dfb817ba91b6322cc3b5f9fe3891103b48f06339afc1b12f06613c3ee8f24af1bbe4ef3f1fc5a3017f279ee3aa45ae9278d595c281a381d0a1921ee263dc675871ef9c8ec4180596baa327111bea0f38ab0b5a23f4f6eec564d8ceb3279a21ea1c899386c3b219974d3ffe73cb5d022a474521bca065989c61bc5c3dc07c446cba8988ee6019f5dd3af791fa0b46fbbb2f303f2477aeae401a26864e31e71ebb2d1a9cc1b76bd8b48ac590b9fe3c7ffc6678625976fdaf26f54cd19c2488e0e076f6cad603a430ad1f4961a7c91bf82f565537b3b59b34f3586cf4bc00ecd38a539ae72ddd9ecb9f53e4033c6a8f60b1c5f860d6577cbe40d32ff81e172123691ad1a2167ca991e9f973607e5cbf4259e386ff04b758b5a76827e5304e3e23d64329afe074e94e582ab5f657e2bf2f1fb99004a3e4bc9a990fed227b647affa758976acc7fb9ef0430fcfc9cf0e78bb477bf123fd95185f3362f783d2d5c06e3ce198dd190a01fb9fa4b269d3c4b6c34258b6b73e8db58f1b2f909f741b92a1f8b58939dd93a392ce77d0139cd5654c4fc5f85ed59ea11c76ad7449b191c474cd6005e0dbbeda00cf6eca37fe23a7640fff98688a95834ddb9b9b36740cd71dc3fe68c1d36b21060b23a93d56712401b643bf44cb0be0e85b6cc658ad5dcb6127239cd91652cf744fc051edf4d54a999989b8070d0e697ad0e3587ac054012afa2611d2ac1982c96938c233cf4ccdf14dbdddd72492141e4395ef45ec08e0d643190f57859d46e8ee0d5606582fc72cd06c41a62044817eac4f652fbc3445ff048c20ebd45c810a7f33aa3abd380a7eb2fb1a6ae162c1076577390af3a5dfa9ec50e2073e95bffbbf8001775111f1dc49b6511705d9546092a936f06ae94c8b0239ed89d4491ea1821ff28bca3d41c3b6ed2b8e0727b04721f22b28bc67bc9362dbcf90be9d6a5a6110fb124b133ecf0e3e9f66e9adbe6b83bf555a3a739bb2f52c3cc342d970e0b03b16e9187867fd7a85c2396a448ea04c89a28b37f57af502d3eeb3191ebf6a9899e4605cd9f6ec6a98c7e5348722c8a42d19d273c77605d65428813f90fbcfda205baef5924ca7f589cbac96342cc3987a8185b1a4fed58127737ebe2193a1606ad42a06382ab4ad8db7b032c45bbeee5d93b39658649fc1c27b33983382c70301206e167258eccd3efe696ee18bd5275cb21c4acea62482eed973d64bba9fb9dd993b7c5264655af57de0606b13b5616e5551f09170b602d675626f56808136b6e5bed81913b70f2f5148562c67b1fadb15da1f500b279419d44dafb27ac26ed3a8a522ae9898a9746dfc553d5466aee423b66668532138cdd7efde6a746e41a74ed5f4be2c1ddb45b54f91f23e3731926a2794d805b856397b37a77807d516e57d33c28bafb1328f74296e54f31d9c1b29c6bdd0c6ab61dbb7a339d358cd94dce56f531667fb76c7fbabf1f3bf7179f0dba594ffe54e8157f1a7f3eb9e2caba87195228610aa593ebb1db25078584111028517c226c6f50cfc68e789505f48b52d93c298d484e05d9b06ab2a2c2f3058c786206deee7a53a5beec13a9ab4caf37ce0f995c11f09ce830bf58f2758d161c406d4e5b45c6eb7aae9bafdae7ea38ebaea5b3d690e1388dee206489af6378f84f5e7c6797a425f4ac16b7b5e8fc72a8bbb077bb58502b657a5fbdf719da035d8d69a02073840a1120b8fe1202d2706f95322d3fb8bdf6058ce8dbe0c98d32800b4195875de90907f0c3ec242852de75d309c4bc81935a8f0226ff4c38bb05e0871ec2ef41de121d3d4cd3382339f180bfdc706a1732d9e5e3a3e2a1436c3f820d306bcba2d38ead46ac28453134363bded21d3507ce7064c5ff7282125f4f4345b26b68755a624d2c6fcb5689ab3f934e19f2eb07a0f5bc5c9f3ba264868d2c1936e8958e483c8b93761d28b889a6df259b574e97cf86784fa186207e073b25edfc86e1ceb4897fae2fc3c31b4036b0a57dadaf6ff4b4fadd5cb6effd3ac60e523dbb0241bd7ec24da851656381b7c53acf317327fccbcb2d5bee5e71da92c2b0f4aa4b987743a84a94eeecf06b777d46ffdfa2b8bdfab99b762eb940bb49f2723c43628a0f52d8b11739b7af9866fa21c13b12d4a70cf92fa0e151c65f5e20dfdf522afc4418fd5bcf299441768013112805e0e1188f2d680b500ae3959f45f6846b0ae2fc3b3ed67971673e1ab937f1b8b6c21fa136887770b33caba079bf3db357d971714cc25dec1a23d5b84c18b1c2a747d9eaf1b8545575c1ba52a8d6c44e733c5fa8518d9085c2b8743006eaf095ee6337dab7697cf092dd7ea6d0c134f11817dc0927486293193860c9f5e46ce048205ff93de2863971bb0393aa76d61813ca0297a9a02ff92145c06b5143fb90b44a79dd1558507b1e65914a7e4a7aeb1d2469bea3009192f345c43dd4d2f8ee585bf8a85844e3f9dadd1f9539ed1c08dfbeb8613e93e1a6089f6e648369c072ce02900d3223b7d0e00404bc26f3d94409993df53ef28dffa9293028841045c72aec1aba0964cee7995c563f60ee6a66d533de22d7146577a019ad76bd06c0bafdfc65a8fb5cb3d2f155c57a7f6e58eaca6ebbb615571c76efe0d96b592eecc115c05548d0a9a626f43bdc938b2e67bf969ff74a9e3a27f8b1b4a807f910516019c359bf3080f7cc2f9298b9ea1539102b8981ab16216f356003ccfc2c7f3fa241df9fab621b3a96dca438ef617a3ad705fda087d8fe2160faba32f226e6a9350347edb63f2db70b60a6cf1107c77db500388a11f87cd3f5f520cb911265e91b7c559c77940707f121f261f722f7244c9e368053613eb7d46179f651d5ba221906377c49595c5b2869006fb7965965c60eb1b4548ea02b3707838e7ac70d6dfe8bd1a3f082e0f09977d73e77445b5a36e2964322049248847a7db38aeb9b274bf6b7be80b207533867e2d99d562adb479ed2507935e6cec28348b6e1138b782e15805bafe49f8d5675db16d5147b16fb91bbe810baa30df531bb8b8b126ba04a6b579ba7157c3297d7acc5bc51a791487e79d8b90430c6cceb0d84b7c8613fc1060381c76e3571d7fc892ac582041b8ccd63303dcd2bd47d6d93655dff9a9dce826841d2da5fff2ccd986af9ff41b26b45dbee97e7d171efc38eb70c7fb2ac754ce3202c13058f8363cafd59187aeceda823c459ae2ceacfdc213a8b5a8bbedd4eaa295697d06af301cd676284dbc5f00f672217c5972604011c9e4c2f25d292228d438c4572f61a538ff4ca01256bbf35bf230bd9ddfca441ec9e13cad00cb6cd91031013f239df2cc64319aa27d6f578cdb382945cff16be4b75cfeb0db3d755378e0c89aa2b56c30c69d2be6be1b90aae0eaba567efd31ab990114c26be71db17eb68aefa32306dcb8e4b9c15b2a5386566e91a7e37f06cad6779a02bdbfda011d29bd04fc76b97b0f13561d3b459f33435e8f3c4377e675ca6c2ce114c51f7a602a1fb786ec845b0a1d6775c4fa4295c113ed7cf6e71b8dba441e47ae4c6b63c8d57461a4e59d44ab1b2cbee1dd95e650572b954d88f4382bb71f5936f4432b8d087e45a34759649ef7e18171706db8077e2d7f9c55dc871a6d7f9a45ea3e2dfeac0be05c2060055e52b63302f5052ef5f5ae46c973156d47803c304554a5efd29705bdb650358c6f864a6b13a069351ab263847ed43e768b64f4ecddb869d2eecba6f492c248952634077bf913955529ec5dca8b3a64b9ddbefbc042892191a46263dc538fa63fd4731d6800d6a38544bfdf27d481e74171fa4a10f53c44873895983660b78f46953766adf27f10fb080af9ab368d7b5467ffc8ecd60685e3b6dceba9f65a343d9125e613fe08ac8a222ad04e435c8e1c29fd123d7c887ddc78314689e870bb20e12ff43325066cd8bfb231affc1e854849e2defb5097d7ed465268b4558ed6c16cba11620e1c30ba7506fc63e3f9b920c8e2bea12a9daec8071a9ab88a62d7fc04aef010163733139869338c5bab334ed5e78a2ee268517d85f80e103feb2ac67264a543c326b6c62cfa195e3b39de9908eb369c44a6bfe1e6d5e38d52cf289a7f8f347aa177f0e914d96f871ff431757e73b9369d4dbbc5f5dd8c516a89875b1d3a29b01be6561ea0e42d8e3c219bf7415785d1b1cf3cd26acb85a8c86f4ee9b1f61262d136b3eee3c9e9ab0d475ef4e801995064e49d68496074e3caa21e1e158ff13904763eee305a1bd72ce4ceec57cb679be603ea8183ada33294e0faf7c9b1131f0252ccc694'
+ valid: true
+ },
+ TestSignatureVerifySLHSHA2128s{
+ pbk: 'a21207c0f63475fdc0e4bb74236803352e3799b7915d3bd9d290dd1d2b2c330d'
+ msg: '04c1567025442898d1cff952156e13eb4d124f6e0107f6aeeacf2dd6056d0e388554c0173a291b0fbef8c7bee746b026ec30d66513d0edc5d991994053e791988ee199c594ff1c2378623eefcdd03f841080be97059c1a1e195517564d9371fde7948e27cbc0a6'
+ sig: 'a78f1f0e51e00c0449c809d3069b7ad0f916a22cd183bede503757f038d58babcce020191aa369cd00e6e27197f193981a93d209a6be5ac5cd7c4a3f5f117fab7669367fd1048e8468df6d6df877b218b0c75e0179d95902a96058b992f09d59fdd72ea3a2bc6198afb1ec2bc8e1502e8002f2fae2c9f9dcdf411bf8f97e294c04cccf4c50e16763abc8bd9a4f36657402e965274debb97e71e7fd6e92eaf08a50f60e9e2dfd0fc7289ae49e31a505e0117f410d5896c5a78f5995c2dfd1eb817a3bb4cfae652cbce59d5ba8f24d595477da6558efe2190207fd33ff9a0b1567ce336fc2060cc74ed07a7cfcb158dd97c749ec2f0640db5435d9c31fc3e49116c57119067bbcfb53244b63a892185e0110ab2502fc71ca9223c2817428de6b5224ff58795b8fe671b32929b7ea2e3d362f2018bed9b332e2bf9bb39f096daa67e4dcb97187662ab2d6a8e257cd3f2e4a32d874a6103966696f9d98f73a383f3ffdce391f0862cdb147ed611db1a55b99810b5da8c18b0bdb6e6e07ad1080667e2487dbb32824d488d367f7e494d64c33cd79e4eb471291f5cafba2b1baa95a1ed5d00042deaaa030cf06cb8f0758076740a47545d7fe83cd94067fad06a2f18eb214c8154f798bd2cc2f37387a1ff492d9bc004af61e2ed466dac8a6a9d8c6c08b3d9465f4d296e4b07df2808393e9ed2903ba25492bdef7cc769a547b8a0e3bab76ac5d18489db7003994bf7d40b9c35fca83a4ef1d6e7c206f04fe87003414ce97a45b78fd91ba94a556ae6f8f0bbc4521101041dd21104430b791ddd30914dc2f0977f8e0c4bb81f08d055e90e150448e09db7e9a298cb978c5b5ea7a9d0f76db8935bcce23c55302fcc03cb7106a6cc22706b68acff42ee565a05fb38637829e3bbff25524ffdc83e9b4b5ef7021688d636a496c31ee066d343158c3970b42bb47765084abc3579b62dcfc5956d9ca0db8223d2c163dca4d45afcc10429f58ecc63096ef7c6a6c1f0e4ed4ebd0056896b9cfeafd21aeab6606f21c863da1b1eb8b26fa7f30f2e8e8d95566a3a6e768d4cb73cbfd3cf9848793a504dced9735ad23a806b767d31b1a4d29c1cc8f429adce79db6ef657b8ddad148e34e95a97fec33c50d1ec3fefdec3272bd3193cc7535877c13a48799de549600de0d624df8851c3c65d11c0d5c538effd722facd617602ac1db85c22c3d70b099a72019dd1496532b07957caaf640618b3a04bf0b7981708826ec470d9450cda6891566649401deb2997fbed9bd7523fc95ceb146d5bbb99f93a945052fc8544c1d8dc0c66729ec10e1b38397ecaf0c7e34ebc5545b53bfa53271eae4401c0ef5a9ea0c01b969a41c4c808f1510c870e5fd41370cdf31bd52e63553183bab13fa3f4fac881dab68f0d2b9a1184b5d0eaec5bed4e414cc84b70bc64295fb16df1111f1e89e6783a673199c63d87a3a83355a27eab6e52b5eb88f82180222768301e84363fb0aab38c3bd08481410f09fb28dfcd1ed764859d8c1615142a98c92f14c8b509e18252d9b0c5ba8c59580695935f03b3a6c0f7a66f67ac27f35d578de5b3215ee61fcfc3ba2b79e749d7b0d55accc59eca4c82539a74d9576d9ddf4b1d41e19ade5c404644725e430deb2e81b29f84dd93779a8a546244f8191e7771126490c8dbc4000d3178f19c1e10d4fc98de01b1818af63aaea884a1a452881e2d2264518271ba831043f9d2bd8988917f04d9b8f1dac504ef1da4a199836357cd4e35abb754e9b65675830a3ee44e8e4ce29e53f6cccba94d1636b8dcbbd4076e5aaf06d49e806612ae28abc02c42459772e3a4c48423fdc8ba35a4d30bc29b58db4d7904200cd1847b572ffe9e30da762398dd9be68b5464842d9b853c73973dc522fb54fef36e578a095f9d0eefa28287c02ede9794360a9060fd4ac0cee9abb521f1a2de9ff2aec1506d91a4fcdfb64f7f8fa32236f60d215e50ae291eb78314aef88e2364cabc565fe4f61e0feb7563fe1a6c94e8e8d98fe5fa9cc39771d3662ac16441caee39f4e683a1cc5e94816a116d6361747091a75d2c5e2613e52a6f6163ab411bbc34003fee1d54f87e1bbb63c0bf8a4fe75881ae2601e607b14311305fabcc1d9920e8e100bc8ff65c3838c94c3e40e586cf1e5a90e1021c95163494c9b196bb2851679456d7a5d04f44edd8348cce5904ca47cedd905415196d0ebc9ecb08f13fcc4271055353f4758665eef38f97c6ee56e818f01268a4e04a4d4ea1e5963791d549a59e276e4480e7a8f8278b7e6b92430a54987d955eb11870e37ce30c2ecc8b27ec56a49f95cf556c85477191aea317f0dca0a54ac0827fdc86eb2512c8e768fa0fb666a9e5c47bbb5ee47b00546995036a55c503fa670fb782bfb69876f7c2568ed8eb0b99550ec2346c63f2a8b8af93d85f0fbb5c75a61c21adeea3b4a96821305337845a16596cff5a167525243e5d9963bc0911d541861c93eed1bc06caa7d16cf48ea64cebb434e4024e25b7f1615fc497705f5e8e89ce84e57ac9a4ed90fd955dc82e0f588d83b0b4447255db54d7c53eae046b08db0447dc460967b5877e800cde0a4c260702e0dfae2523d59195b91129b2aa5d399338a27a21cc78eced6912af65721b46c267b9316d908a093f7a08d3e94274ac5375d0c75c4d519634ff151287a40a7bdf47423b68f7c562066d759a4c208b7c7f5603f3764e10512edb9bad496dfe9876d87dd00f508379197722779a4f39bd34d1fd550aed976b5b293a6861fed3aa00e345c710720b3f098f852e77766ce1bc03ec711089155bd0b195f0109b4ecc665c5e8bdb2a48e9ff5055f2adbfc1f572c445c28722d30c1054b6236c50f7d2d5526543bb4fc33c03d0795d7b7c7f1554fec36cc4296bb5ba22159835a727720e756162c79759a0c993714928eb0dd14cd8729d2929aa1b50af5d46b4a9ad8d40996ddd05d0188c3d2533828ec62c6fd527ab6ba418d5b5d447d69bd2ac010e314986c23a1a7a53758dc38813560c7f421a3dc29d0c874408760b5109de3311e4663c86b1901ee0d054d0ce19ab093e6c525e5850bf6d8ed1d64952d4c249dadd50a53387b9e333d7041221dd3c817f3e181e396613c0696aa6e5734cdbbc31f9ab650e4d0c1fff536e55cdfc6f87b20a238a9a81a01035de6e4b9d932560191556afe32df5567e83db0fd35b6ae95933897bb6b83168856a613fb0b968ca4b8851811ec093455e3702eff4f3a366da91ba9697e28ef54683682a3af38ae1e3316d2c8c838ee0af772163229d7d9f62fcdcc765d15353df0345cbb1fbc56218cdaaf2dafdda33e20d152669825c00d6a7c2b2be2f72b6ccfda4546cb7ff91c6b1e272e486661e97f65d2a28390894318e32428de3681e28c36cbd0bc664e7652f483c7456b83f6d6a44f1c5f5d630323d3b002fd9eb8eeccf44b36a96c583f530ef7e56945bb342a6a70f78543a89b300d6817b2b05cb854fdba99d81a43dac2925b1c56041302e0b5602723600eac2a5b4eb468975ae2269b3cf84f98ab304e8cc16eb7c3a23b3788f0f175363503fe79f87b6563da28f1c60ae0e0b6f25abf7abca3d7a0629a071740c6a1312d3356ec7f6d9332391e69fc002d745f189954598408105ed1c52eeb5a701c8c0ad898b7fb083de06696eddb83b40a53c63e7b308a9717d25d8fbe24ce15bef470c1594770f1486030ddfccbede02afe390ca79f41c5933caba3378c59df0f795f04ba842bf25b9ae8ea72b4f7dbb3f9d4084b1b0d59c573291849b5c0da2e344dd8f6a0aee855478bd5081333dfdb4e3e15460d8d5fec203a49b9c163e7d5fe0352b422418ce591fe55179decbc86a3eb47a5f44f6ce2936424893196a3b963708f98c9b37085af6b843a4b48978b93d51676d45a10ea2c6c867695fcf51a49ee3c8d4319d4cae26ff8dfbd2c2e50dd33675154544fe3bb734ae36122a2307e1db819dd569cfd2e0916c84788b60da34b67dc3a53354bae3a884c67f3eb1024c52c21d570e16c11854247066ed9306b3b278a40380c100c32a1aeab5f74714ef1c7996b62537e08a21cc8430846cccd723f4827dde6ec5a1c6353556e015d4820d6969298266e8e5aa4dd4d15d5040ee21c8e091fe6e99e69618382ca11249b338d0899afafb55c938302f3d931eea372909bef07fe113c21b1f359e8b3bc96a5cbd1bc7b83b8f1292ee0be7828af6c42325b8415095b3e93252d67e855953ea74766c5e9f304c10a5880edaab4f6d8d4ccac7dba9f0cd306a8e4bda5c81b9959f3f2910fa10602bd6a361bf90e5fac96bb3a6c7ada2c14ef3567eb4dcd76c41e81c21b1516d05355deca0a5e0dfc913b79f882319d79a5f2853145ff8c168b2b2a1bdc3932baf1f78a1b385381614d753c8d304973de1607fb2de3c75822a0f64c3a7752e93bbb0e4e30aa8202aacf66160cad7a9ccdcd9139d5bedf99ac659a1e0a1ba5eefc445d6b9d715a13efc222ee4306bf6eb3000b234431521917447cad119db138c2a00add6503131f6c85e442b86a054da68819c7affa056ecdacb9eed793dc25b2ad82ca7cfb4099d54c1e640e3215d3c5772773592708dc70fd9cbd505fd4b3e17722d2332a1c7bc697d4d02ffcd169e0e540a825d589783aab33539b3933d9f00cc982eb130b220ba28718d615da6f0f2b0e5c3d8ebea472768227c8ebdb3d32684acfc5c8b4e2603101169c2612ad85d4e5fa747c231e731b23d3db2da8a7f44c00148ce4cdf52de1f296f1113a1d337c4574a72822cccc3910dc7d74c1734b17b00a57c00459c4c1c7475a45cde8457733a256268a6c14193f52a33924eb73790d119126fb54f0503a08a2830fdd8747b0ef45609d801364024309425d5462a497d59146bf25c824af2fb86bda72873566f8304ce4618e1e26669b4a3b6fed8a4db68d4a019ec2a5ef3a62a0cc9be584ab4c60c3024e0cad6f9fec846af535cfd18f5d1ecbcd56acf5c42f4ecef9521f3eea4a66d5b31d1649f00995fc5f455058f378a2588ad7840d35c23230b5dc574c47736f4575e8b9087c511539b48ae9afbef6cf9a851363f7c6160f6673ced5bb63f0b1ff27a23f828405017288316174638d8edba8494538a7d414b02e7c428e9a2c64bf28b47a10ec3886823ad5549c6a5a025d810eb06954460c388ce1009d8e0cdb9ae2e0cf2f96bbc2820c02896691c15d7cd4c41d38f62881661a8520d96f0291515d23bc8b3a122bdae81fe06bf4b2c400508ca080eac0970f375eae02606665c7f50a1dba681f0641af393acaa3081733299622d90adb8ede50d770025241719776a729f5afd180c1288e5acab30ed4dc2b6ca936e2f045b9b6d323968d3054e5caea19e747dbc040e3d0fae7ab0bb5faed4c2d84d0f2fd47adc3a80be1e18e8a155b2420d84dada4b2c79a681125cea4f27b61f94f0194d30542b8429c984472c105c7b99bd6fb23a247a7a3e449a72d36513e426cc0aeb4e249f9b177b22f453b1b8a85b503a797d97a73df0b40bdcb1f888e845471c4aaf787c463f1b218d626b2ba9690c9c9dd3b06de685d78d11c52464f01773dac1e8f04bd2b2f26a156fbbca71c09e55b48281cfaa298ce040ee665c71efc9d3071b20e0c3adbdbd6f19b6191c6f4ff0abce6a80294d3fcc9e58b85c70bf9ed23fd72787df60a7e42c8a6c0804e9c23b58e1560b5e1ab2d36695988deebc98af0136cbecc83e2d8aab59db80f8bce958abaeac62b58afadfcae6414ca1bc2295e5b7eb0f3172aff9234c1456f32cfd718bdd4a35706f2c98da9f7fdc6d171202d2b431ca5e1735cbe7cd81ac1bdc119454c26bf3ff5aa88170fc451ac51d66f159903c26bc4fa997d739a139fd8af57744b897cf2d46e3497bb66967c93d4c7d2d93d80cae1b2525469ea399d72babba6c355d8fbe9507385b9e417291fc3ca8b500cd1c071aad7501047a02ae7a48c5602e30ee0edadd567e9700aaba7c72933eb5a6157f88e7c69c2829a401e6ecd3a6d8a13e095abee7bb9e4711284bf782011c9cdd00f3fda45ce2c69d74d821d804f3ae386465aed4789abf5839ecdab118e21a1da449805660fb27397ebcdd986f518a5dcf97ef3571f24cec274ddbee1f470aedfd0fd5f84055fa32950ca773273e990288b36d8ca3da0b8969640df42ce9f64bc6915bb2faa2facd1f808336bc7e8562cfe63e507775b36e8a2bf10239c69b919a0e2f24fe058b86122eb2bfb09d136c4e748cdfb93dc88d2c84f9f9b46f118c2feb8b827a5a1102a05327d52368ba2bc1718cb87854d229a1c4c9fdb3e38ccd14ebe95bc768ab86afb6823888f9eec334d7682e9b04ffd38dc39cfa0260aa5c5011c1006ee796fd42a0c2c44151b8fa90cee3ea08712775c106e3ff7d3716ec3b33e33b7458fb7b5b933346f9772dffae79c665ba457e7ee25571714fded7ea10c0a9b6787828122433b7532596218fc6be63e0dc460a61ad6f58bf5160abdff16e37d9823f5fa6514ecae15b3b86df62819065dc2cc4cf96b810f64948aab81a2a29fc024c86158fb56ffefd150780f8d8a3f189ecaf25113317e9a1f6b6c7a41fcaeacb9ebf771ef6b2e0fe430948438463ef822df0469c239219646fbfcaa6a42e7542f651de9950cfeb37d6dca4425dbb2edbd6313f4d528f3f6f899596b27245c2d868c45e92503c6bc1d52424e418d981400a55d7e526fd85eabef59d821464f61c334f92556ab21f4778714f05be556c7cced0eb93592f0761f5ce19723ebc27633d14b1b661187950a3e9a1111bb31fddb3724aa5e0be7692c5f95d58c517df329a5e3b23e781523936fbf1f6a4ca66a239b7c46b0451fa8a6f7ea730532651e03d2fff58174c2b7d2bf85ddb4ae4a9bd0dd4d6f903174218770886481cb7d3ba28c2ad91962790d5c631b47b914b9b8c5e2570fc6522ff0fee4895a93c5f3a5ab38bd5f9d6e1a73b17d87dacd8f4391a4c423d66d16d820b82d877e8c9bbcde02c903568e28680150bdb860530ab5216c2eb42385193d53afda8c9463663ecc90a06ad5ca90678be34e2b8be500a63cfb8548ea83d97387c34756f5d86b5593912c1a2bd81dda1b6ef17d3986d5776e107c88ff0feb43c45dfe18d6a270dacdf7d733f1674f14d649db2c0474f4b886a2c4a91d1115e21ce9f2b765f9042f5387162c236ca7524aaad9cbf47e0a74ec9e5448960de5d99b64d55f442b0f57026e0869093c622ea93afbeafa978c27c844c8233dd6af36b1eeccb646f133acad366121183ebcbee79aa8b075fda7d8ba53ec39c4f4826412fc726a6db2a47065358735cd11401d96e576ebdfacb7896638b5488db846c68988777a696ac1bb9cd579ba36ecfe21c4497df54355ef157a600d6daa8c30c6118f28815f5d1b352026b5abf1bcea648efd5760c53557bcad7cff98349e0bafef394dde3c173e55e82d05667aec5c064d7d274ab3125b5436fc75859d96b203a7555ae3dafaf60c9c0cfb613816f0452526c38be61a841dc9f449b1b655bd2c0c4e4f20e8edd9c0ff4deaadfe729d4a13a0a579b1ea46008fc477391b4b9cabca9653856a8faae30c1898b791ffd29ebe9bcd18dd6e461031ac68cf11ecbe0ab4a49e907019117874e0c3dc689ef66d0c3539a097822d59f5f9143af59fa24ad380f2add17b0f34d855177110ebbe0129c87efd763cb6a24984bb17a446822366967890297dae5965a93384dc7daa855abb6c80f8a703cbc2fc85afcf9e847676d97b935d033a894e6f8193c5580f1294ff9e26985766e8f9c5e59dbfb4d1984ba830c338f64de92b281eb991bde86ffb8bcfabbcda3ff3c42a3c0fd4f94e540ef960e4bb73b2b71aa3364e95c15094aa8989ec08b5159da2bf90cd853df7f564cd21939b938339d98cca3c5d232f3a43faff7a04c8b039490d303c18ca392a2961635860c259491718e8a5ed65eed709971679a81c4cf670e6573c1d9cdae6ae609979d74fb865e1cff299b27454be5c8328b902ad4d7356be0588ed816899935e971f2e83a40e4117ec6d99d27f5dfd53cd01d33fb63e8d790f31282b2f26945122709665ba30ed4c5c6344b00ca08796c25c6220e8fdd2f77a12321258513470a1e05c24c5e2e1a01e5bfc6f2de86eb47ccce2f423bc650ca9f2baf28c93e80fff27033c22e1adfda95ca8eab0d407e4910d8ced694dc8a27526e757b0af32a05614d465866428cad93a335c8399a2574936993874a4a2e87956a12762be4f22b3f2bcdd628dc918b5dc049e1bb401d7df5b77a273237ae986f550a90b783a97199eb52194a785d949d7c7e34412539cb354a025d149100228e832c77c034c27424887c91128a61abb799e3584cb8e002ac3edf6dee57baafddcfd24a49a682eece2bca327c6404d1efec4471df5c30e6def64d352324419813479444ea39b020d82faa622ee39cf69c37398847440b1dd10b14bc331a083f3fe3a919a644c3f7c917860ad1f6d550dea89424bcf703b01497842bc3de57a7e3f7ad598ff98d3bc00a8a94d77e92438ef62d9b5327d84675f7b5c6aaa98ac79e35732aebee73f61a9bec8e5b1e410a7067ebe6cc811009e44e158e74216858e415d24d00fc163f5f0920339c4cc9e2e56c2b3100d012324f3c7c5c8151c003edd20ad9a8bb29fbd4a82164d607e9676f768dfd03dc10288732e3e13bead89c0d7f886abe1f5add8a167e254ed2e0ca99780912ced044991e57ece6696e5b55f498f40a1fe5c309655c73421ece7b71192d585722c193adee08f4a5f187e4b9d4ffddb43764d18e15d6c779275cecce4aee68df78512a17328e930c0be9718ab36b5f288276e458687f08e14db576b706af9c5f952aea15d5ab279781c73071dccc815511c95591d7003ecbb9fe0e523c850db4cd63e3a33c017fded66b27369668ccf54bb10ced65176c40bb4ce1731c9ea1ceef723a483f213d7e84f72a465a1fbeabb6a2e3a7a40d69eb612872421a417ec6829aa99b19c1f594f38e9760887ed3fef9ac5d8e53cbe2b0a7d8b9c55e8a88db8e25cf2e13bb902a0b60fa2035d502914ccf37d5a90f7de7c0e31e7acf7975362670e089fb9cf76753b02d67b02dcfc369b6e45728805918cdf610535f0c413d374d79cbff3ba58a36952fbc9432bc0c9f404bd4908a945c289bfa6357fbcb53cde7c602f47ece1e368b71aac15d585475b1dd3a8ca338b27e8a797db01420f4f2a6c34a7ca26ddd7f74a851d85ca3e2a3fc9077d2f834c80edd98e4a5ff67f665391b08e14a577c7d080da9eb28abf10867f5f51745b6fd04f2776fdfed37fd7991209e3d6e4f4fa135735be21394c87eea2ffa0d6a206c55dc8948493ee4d54b55cf8848dd23e189431c45f975069321308bbd90f6d394263c1e652929fab475b7a456d4c72a7494a1c7c65ec5dce35ab598f5f92afad4f6550b0e335a58f37cc40e3bb0ef7998b374ca9dda11120626672d93a936664d922b4e8d468fcdf071d0017dc54383504e5173939b662dae374f823255d03f1ef24abb7f0f27baf3a3db6b1a7ae23419fc85f573055e314e128c0941c1e7131db9b1597c37c4acd239769ec650aaec757fd7b00056e6f4403cf0dec9027a5815684d484a7d515ab7397cfdb9ce3875d60abfcd7483c5fea5714d99926685551572c6fa6c39d02a9b59becd59f4b0ba95f4a7116b2e4f14cc6e68f15ead44e825b9436a4fb83de58c098269028091612ca89fde8ba99703ca53c0c6396a609a58adcc8f1a1631347bcb249f34eef92d4e01600343e7060741cb975d29c86619b851f380ffba9977bc350c71d329f7246a7422cc67a550cde224986737444ab43a3192c3d9e226b8f2cfe9653d2518495c5e8d709c6f4f58b8007f88f081b0611b3287330aae3965146696b2aacad5589f1c862540fa296a71ef1b64edcb446f51d0ec0997127e8a59c464b2b8f0b97ad7f79e97c9ee7b25f4eba3fd842be36dcba48b241719ed61c0a559bd4c65eab54bd777d331186fa558a081f3f664c2cbfa9870ab182c0df4cbc066557684e8798cd2ec5eaf756be1b93eab7fc0d99492df79582789637dc735b3d9832bdd42b523dd5663a00586ea7cf1a0cf0c1a01aa85e2f69617b37384774b9248268802cacde58d20d2cf171c720a68dfc1c215c5afb2423cc62bec7ee422db65164b126ae43f41bded8b304322f50bd613e4ca5108227394d566571f46b5a516ed0fcddb22cc949786733831c4d88f58cb2e2f8f5e3eae363613705f412d64cfbd0812a3376604cfa7feb0beb2274220562cdb90b72607ee0e6e16ff9930cdb317cf503df3434dc732208bfb78fc4fe1f1fc20dd534552ecec114bd10214651097a69f4f1110d20294913f7e3015dcd31ff07b28ac23374481b53c4e6a4ae2599d761d96c88af09b6c109a0b5b103032162e3dd4f988d4bc7da13ffab2b687ed3ce2c62a1fe9fbdb3b579ac270e5ba6565008b8eaa9899e82c54de6b21b7831fd7c56627ef4685778b0efdffefb52893ec98a10c9bddfb67ebfcade92b323720024d7a667d8000b674de3236a52e5dbe062bf2696b44d001ad6758f3399bd26761f89f2170a110c0639b2ab81667f94cf5916711393cab91ea6ac5b2bb85a56f18033ba663120373a98ad8008fda8241c6e12a385173911c592a695a06deaf8a94d901608666d59b36729d6194579f4f420a237357fdfb30d0682e1769a2b9a752d5a29adfeb0860752c9107cdd280a468dcbeca0dd40ea96b8bc378c9495eaacddc1214f1930a295ad07118f28bf94260f2c68f2af7be5277e3157e4c451d6884853a626e1568e1c042356e6621805ab0848286b0b32c4aa49aab79707e1664fbe92887eb285003832f0ca329e6fc2719b576b4c9646c5482d04e27052dfe57a2a8c3fe11106bbff8f3c277b2013d50612a130a3ce6b23a904c10650131b47619b2fbd37e095da69edc1f9dd2191f9475a7f55474769fab0614d85088e3cf5b38a1544876848c439a0b77f694eebc11a75ac0baea92784425d0ae39677af79fbd4ebf4228b95377692263a9361f18b29d2154be561cce088d52dfe07f762e7178408ae8f76f514599295c32321895'
+ valid: false
+ },
+ TestSignatureVerifySLHSHA2128s{
+ pbk: '3dd6ad6dc886e370b5cb3909cded99e67292f34028295071c0b47a5bf92fd7ee'
+ msg: '3f'
+ sig: '36ba339230b38122d5433e6e7e6d818ed0f2c5e165e338974e7d7b24fe7fac639e81c443f89dd82b71a45bd85dcc25737f7701509f700e67f14ef02b43dccfaf41d0a11ce52ad7f6b4349cd30bf5742cab7cd8041281093d17b7a7bcba8f4a1cf90786d76998abbc89431f44c991035f1cf0bb0d94fb6d1e311c86aa2845afa6a21475a3dd16bcc4839cd620ed783dfefd3287fedc4452a83c6169c39d4af3c0714d34dd09fbc4de704524e79c4be600a21cd749a7eca9fbbce2680243a87afdda4c49163af344d93f7c08273cc49b2450da626120f858e117287855791bbc902620a645f785d1bbbf5f29b3e61c253276e6a693d202925773f5ff28ab3cc58a50601aba560c024b19adb93ebfdba71566483649d31e1b8764f9ee34d117c3e85126fb0071c0ba0f8dc532918c5485ef453ecd16e958e0a8deaf4294fa70a1c8e944f9436523d7f3ab1d2c652a1d62043138dae046a573e72744b0b0581125ac135e1d9f8eb071cecf296c741df6686d08e25ed45c3b7ac4cae7dfacd8f4312283e9bce2c79c78d2a06084f969f363bd39b549d64ea7008b7a5f592620b63a06c570dfca5c48c75bf5bd488bb07b471ba4ae20950872cf0fe0d60f69bbfffe87b59f50467943acd34e007db232be3cf9e3355701efe667f8674c40c2c2daef8149cd031798707e736f440b94ec5982f550d4940c23fa770a9371577b376cd70bfa769d2da8e2feec828a2c67d91d101b62a18a2bbf38e478ab79f34d11f12b482e0c1d204a1ab1a28b1f7a1d7da4142306613e0d5cc64d697add853bd7c11ea15ab46bee122fef2f6708ea706c95cc842e6b25c392f533f5e9dc0ee8f2e4207f34ef25a02e588c80bb0e0c0ce565d5ca9d7f5f26fb6a850e9fd9abf3324abd991b714e98a86f035d3181ebbe68ab3f46f6601191426f4132a6ff9ec784bafd38d475b068fc64cf850f1ad6c04942e3f4612c7426b22f33857322835ce52dae388b14d8ce73060b079a9a9d5a8614d0201714ae74a6f909db77dfa4f970ff4f9e04cc9883164a04dfb80c9d1f535475f0267971b55f48c86838e02ec28ad3d3e18f90e8420eb52e6486870dc9eb1043c7c375a9f1f7aa96096a3e8c89a3b0e1cf81887bc34be139737d78dee84058874fc3c9163ed9ae023be75924db798f947ea7713ae6d2491b38e8809bfef7bce0f9461c02bba6f73133b22de18c14a9e8e23ca1eca81a69649de33581be754d0923e804d4c153db6d711419963033915089d146d8e01c19ab12029c5282ed59b61c195f9b7380f5e5cf6aee945ce224953597df6503280683bb44cc8dc1f42bdadc5de2e05526862e4763c9c7ccbc98c50df85a76ad10cffd21423d7db0f6c1635e32be49cbf25b4378dd902422155d03baa9d32aa9c3f3e4f6d32553da0ac647ae197df21dde3d876b5e478d90242f0ffe89585187372c48467ae94cfc7eeab72fa91ab88cbe30beaadd7b55543227ab5ac6837e53f6c7c0803fadafa3c8c3fc5e4f6e44da61a0b3589501e63a6bec755d2046e002c530637c47584bead31997aaacb0fe30507702826934db0a02adb10546b295d44541203ed0c57304ab4f16d2d56ec7e7d5924a54c5f34622a73f9b9befaebbced7970f224e30206c5f77a43e52104d11455491d80a698e4901ec227e931280614e2719a75b8059696b279ae493c5518a04be621d50eb8daf8212765ca1df279e587a8ea2378ef9743e729a202b082154480a2c775656e61717c9635471dea945096457445373d081594c9c6e8c6ec5cc05cbe4199103f43afa9c5739067e147a7e28bb8f066219da5cafd0f4d71d6fe9b696b1fc3d022f90aa480d4c8675e13003c30c2c40526254cc481eb1bc07306833e5118f81b6a76980baa2bf49d07af378f9c7ef024f702766f1750230acc7d31303b1c61c6972b888321dfc3f26f99d8294d0f5e649cff798992b9b1bb38d03a618bc085653caa1d7365f92f6a377a50efb12336632a4b87e881ccbeffe32e0a361c0642174a2e4f45328011d418fd1284103f026c993549480365e9aee7ac74c562364abc4d0b46772f061f611b9709952633c02664a01d959f5c7f0a4760226149eda532c4e1a62969a962cb70bac620fee1810d40dc05db94d6f7cceb87eb8853ae264451b9feddbc07e027ed0c5039def465f63cb1605355339f4eee36082db38216390844ee367f8b010f4c03fe94f5e570135e3161a22875054089a5bea5c8d3ca92ddf970a6c2df16ffd9e884acb88ed7eb21aca2c0fdd27fced574d5c95533ec7c636b5c5e316d55b34fa1dc18cb3b02a92c16bb94ab0b089d06cba1c02b19635c7104698c3859591f90a364286096add4fa5a894d6836701eefcfef94db02204bf6ed4ec6e1c082b5e106529f44661effcdedb93326ba7ad772e0677a3199e354570815ad2fc1e4480b16b7dffab803dfb07cac43fa09816485109dcb2abe18e53802926b6af1261ef928fed8aed00522ee1c6b9b3ddb6d90613df74a41e8efc9b9369fefbc919b9c2e0d7d856b1954e65af86124069099402f4421026eae8172f4d42d8b09150b1e10eeac48d2500a76094ca5dd871f1d27e36afc3715fb9b03f065129c66225afc2700ecde68127bd16f19203f08ab9eceb6fc8605b8f6d2c0c930467439a7d4332823e3deb3c7a76970c60f66687fa3d4a7c01befe123dbe4545e26185d24fbdf10a2b5dcd934ebcc0b95af6fc3950896a6124ae3d8a075040bf6b9e0872e26cb3626d8268d8eb973a89404eb23f755b1b3b1a4d4c59a20683a1646f6ef1334d73b8eac4a820883a04254ac057d5ada6dcd3f7857c4fd6007400b877ac40022d2e94a450f4d1bcc6c878fe1e64cbc02d1fa5f45880391209f879d5c1da899d72a2821b797d89fe889c6d524de7d8b7ee004f6619b21f4e79a01ed1115e18376a086f311886b59f8fbaf8ae745434fdf9a243c6d020d4ff45def94cd14e70c6ab8bead47d3e9c0a3acd38cdf78e98ff6c21d3b1be3e9fe9bc8e09438db71580f92ad62f5a3c001dc2690619aa4e951a7508cb0bbe9b1b7ab294e0f0220064172870b8dbfcd998e8abe966ba92df7062c33e4441dc2652e2b2b56e3278fb6f7361fe3b08ba890eac7b62569e607b049feeff57c66542c86458eb1dd83918f263aa59f9da3a68df85634a067db6ba30365d3a270a853227439e8ee70d4c74458fce7aa0623e39a28b2bd270cd49a9a07161e1659c44f909d22fb4f220b841165d21fb8bf809c9ddab6dc1d8103f62b0573f6e6c8a71e1c140ed2904a4dda2c66913c9bcd5605ebba9c68d8a50a8b0483bcb4fd7beb8f85c128bc16da7e215ec9dd6729d45bb455a99acad94722f2ad4de6a5e5171e46f82ecd5bde1da15d9b51cd38b1ca7815209ee6c78628b2ef3d27aacf8bbffe920850555e3b04a6793b7c44e5cf26bbf06d592623e9cf827f36f43324ee647e7dc904bc15930ae0e3c29d5bb22195a0991b8949e26512d73f46f23e2b714d7b93de9d9ec2e9029ced2b2d2b6c0536a6fded5890ae2b8b6decac6979ea954b9840f410e671b3c59815595f6c8dbc44eeebf5139f2a3c07b0af004ab34fad89b8f256c7f8408ba6573684edc409263e6ddf27890e34dcdb3af16a87824c6f465a1b095a9cb4d77b3fece7054730b4c885a60eebc3b51eb93aabd2903a4b3a98340b9e1aa8806a3d9a787ea437f86440ed9bd838c207a2733f616ed4c0bad93588e92b7649316bfddca91c9ce1a1a87bea1708178c6524a6bc83751c8526a041e4ed5a7b2cf151a0cb46695b82c58f76f65b08d654c80b6b2b997cc484f35417c5675420e30a892aaa1da120f27672d0a34f2f9a5672a042c98b7fcc2a5136b527026b630a4a416bdd478942ee05d2986f6d7e84200b8b3c99cd67c8802ae4012f888f6c2c2fcb1d861ee3117add1db2b45e25cfdcd7cb87fab287c18b1e0c6af5b66ca437c7e51259bb9f9a70a08554697c7398b2771b601959cee434bde731f98480bf2918ea2e46a42de2f6033050ba08c09491fd74ce6b077dbf6e0313b4bbf68f78b164337e33b2590e79779632bedfe7f0b8f99879e906af4e297aebf9c6ab309757645028e4a3a775bcfd611c04d8d08ada7fdaaa2bb4f5c2ce240f0921ec83eef70a8e57b410511710ccd018eb0d5449e82f38b7c6f7e3963f1ecfde5da27ac1192d47c9b37b6e3f3f5adfd3b47f9a5eb8643e41b92bcb2963681616b9ba53bd513b8dd50846a03f394c40372899b9d84e87d0cef59b9c3b12b439c328c62d200551c166418026f59ea5d7ee2e4478bc17bdd5971dc727d9b73f1cea714974456ddcd1ef1b5df50a184bdb1487f50c03bdcb5ee1bd6640a90cd67809fdad6f5dfb09119e64eb975e35db28a35c40168c106fe0ee2c4737619f0415f0be3ecba5a9716eaf9472ff55c0fee62b8167abed36f7a9030e676f84da701cc75c84980826179e79d9298994abe3ff93c4340e37599fa7585cde3c8f8dc849b5547a96d638abda656113c22bea02aff03d26588483a5234d07ff178719f89d58cd42a867a206d5772b9327a28afb4453645f74e533c1bcd0880f4c00b0e3d85820dd8e3a0d9a702ec28b5bcec6f6be7d5217f69b2611122814a3f400d2a1f63874fcb1109d5f4fbc5017e279b58b1710eb4e355c242a7113a9e825ab87160f9ac558f8c3dbb3de543fbac03c93406fc52971e1534030b223522d576e6b4fc3986b929c898bd16eae7d70d4fd5d6e9ee65b7e2a01c35165f95f7b4394b9b8235a1e9290e5cb54f087701b07a878fc57aecea59f13483efbdffee98fa06b9c577c087f1e099847f794317952d7af67b110ed5c9e742c5e0e77d5b526e06abd72f1a87a6736b2f6f7e2b82f8c551c3c72d74dfc4fe497654974089795ac28dbea136ed802acedd8719bd2de71fdbc23687eddedc434167de8583ff87e37f82484939fc16d45b42136cd56b440e6e000d633bbeeb0e7be67fb42610c9db600e060db4059562de3570bced185bed2e76e58cd4f3e4b7c56f1aaa5c560af5d1ad90051a2f252dbd1f699d7dea6502e632ea04e4ea608b88a0d854a0960300df205fbb2f5c4caaf3c9ba4fd900611ebe082a6e21c152c57224939eb61ba32aac569fc80e7be130d08100bf20afb03d467ca7bd52e9f8768030da890e107c27bdef08332df607309e008f82a53b5ab46f156c8b47a132f547bb75d2ec4660bac45d0f7df765f12915ba2b227b9151f5ac706badb7d300b9bb2566ffb1fe38b70f3eba7902eaf9b986846c64bf3c702a08085f22e091dc8edb0eb9bc5531689eeac1ec905181608340defaaf6a3055c0dfa8b2b31e57e239bea432b0a919f3d0c2f56d8447097688c36f96c92bc98721687f3ab88b3a20ae5893e4adc47f38bdd84be4251e3584bd8b44a9b6f2b76841fb4961889480005e1b7d2b343babc284cd6e0662f623769602b1fe12d858771ddc5793676f2f4a3b6dbcf3ed1aefb59f380ddc7151461712ae791dd6d6e5878c379da99b35fcfcc3ff0fa310625a6052af6a35dbec6c9fa3f4d88c1b459031161c58170455fc2130917455c675c336e9ffc286f29bb98d37e3883272cdfb0b24806f6d50481afdb776f1e23dd317f9dfabc5f50a8aab141d6703be3ef55f275b3bd1ec7acbfcfb1d276b57d2360eb5d8f017172076b11f386df122b8f5659b47dd7387b49aecccb0f62c7811168b75de7a4b262d32a5e06b586a92792a3ce4b010b0b4100fa15601ee15682755fcf47e6091999fa4b81b5ca6796e84e4c358684658c91374a06da5103c0e6d0b681ccc936526b76d372ede5543cba86c7d0f72811ead9bd404374111fd22a8d960e667ff416c1223a3626173f3d58eb19fa56662a60b9afbe38bdb9b0417a97b7edefb924111dcc6a281bbadef9f7f4798f3c72f5b5b5f5a0832a105c8761fd297c6684bb2705d2d98919d2eb60fa7d87d9eb6070b1f0fe59859b626023510a476eb112fb76c3fb9e494c1f725972900658534a1262b81950c5e78ad5602442fc459d03444d76db81dd4507350c0a3b4b91c90494ecefc66d51a1e8c8af8516bf515f4c16f3d1324db49a5428cbc31749ffa20a3a0b6b96236fc3bb4524189f79df14f5090fd062cc2c43b72731b7a9b970d7a3691c3a6ed0427ed2b8db2bde3b383a860be8f1d805bdfd3564803695437f8752deb078aad671dc83354ebb78d9c2bdf4f7831e50c29e4a52d0efdc5b9be03cd2038db0296ca8f04c435be06e4aa83bd46e49730ff94c16ea10afba30dab4c93635fb2199f7cf233b328f92c820d648130e0b2d30bd05a375017f15a0e923aad67f266cedc3bf83103212760b1f6eae42792c6ea9959137242065f30de08f07faf72433d9ee5e1e2f13bdb239fb20f7f607fdaf480f4e00bb9f9b35ce2d089b93205b36c2c640e3ad8106822ad849ec36c4be27b165d666cda650bc9ee36d93f69702cda45944c59f7c8f73a21c7de58dc82477ad315cc1a5f30897d665f69b04c34a9b4304832ef66c2d833ea5ee3184f7ddff51211d294648c19b26b49e380646250c989f7494f6d913aea9acb38adb3bbef4aeb1099b2bcc04d805d32ff31212c5a0c5abec0790a44c3c9d609db306f98d9fa2df3fd5f34ca594f4400ac98250d13f253a8ea29ed96768611baf3c687164707d2dc9f733057ec63a4bca960cc2a774b844c533ea54310e02229c437f869addc7bee9ad700823eae887c7081cb4c0676e898886229d49c0170fd6d82a69933ad504e99df89ff6780c7085e13e2dddaaed3514d878d3d1ced10da3915defd6caae3ed8fd850409f9c711ba5aa75599e02dc3dc728157679cf851209252dc34af972f1fb0d46e4361c4240c5de74d0839d5a592777c809942940047a5b6976d359a8f5bcc2d84326e9699fef2f5ff999ee36503894ee56c8a651360079ee8215e3555c2568e08488e850ab7d5ef20fff6a6c9a02ab0f7e84b89fd8bc5a43740bcf5b37711797446f6d9eed99cee813ec0858cb730d94e988fbe0d719a5973cb3e2a6cb40a4b122a94a527d5645384d672f33a15b21cad21dbe6fd1bfbafdd8c046722d1a951132ff2bd5ccb7da818cc5e2127e309c23a82b68be8b1b175fb4fbaf63f05d5fe65f695ff1938514082ed0ce250b755f7d9acd5dfd82e391930a146aa056ab9de783ae6e3905417f68c01b2a1b2d19e4aabbd8172cf1f3dd1ca4a32fdb73339a8f2aca94832492c927f644e9ccd16cc4bbeabc0299be38dff610c0f6b97b5641d498faee001215c54d9ebb94049f78fbcd3113eb7a8ffadd5a5de91728d4edcdbe5a0e23e29b6786853849695304332b8e6c42bc08f3dded3c7a7b821fbd90bfaa6d80e6ef44d8a7967ab37419de71c3c8eaf32e8b79598b3651f972c84e8af9ea8b76fa20393adc0b5aad828c193d53d501859576c3d2ab7f3a3542fb41fa63cdb777b4281caee36872ffade50d0f8be24e0548ede1d7566a18879a348e206602769fcf66f8507c746c4f528d7294be8c7db8a7462bee530262e6ead5930ca863dd3aa4a603b0e15c027cff2c667be5190374b2a0633a8bdb3f6cbc7d75f784df02a2d5c17459d6e56c0289ed0181b306b2e0043d4ee62181dc79b5ee8a2e288e739f8af4077b09b21af3e3dabcb65b485a7f3e2365f33f39575cb6e572271a77c6c3b2ad4fab2b58066b41dbca20d779a000f52d13d56f78b041779cad8bc3ea0ac593779bf915aa871c06583b72dfc7e22dc23f08e4ca0d7c33a2da7c03b78bf02273d2aaf1c959b144ad1c179b4a1d70acf258a9251d435a1929f108af73bf22e4345bf12f538fe3f2ebd0ca3b3bb8254dc1e1e8d60c789bc7ca4753ad28c6daad67f1256e209fe47363adc359ef695b1c204ae125841f12cf88079c1369f35e5a281c479fd9cb54f430eba52d5272442468fc9bacf10d66413ac11824451bfd94b5aa8e7bcc6cd2a62c27565139a67ffc5d4c0688c7f82bace8214d3431f3bb9c8361b11546fdbcddb9f1f2e6c8479c61c22ac65ce541c407d821b7b034c0746b5a24e87eb86e228a500e2e8bdce33c4a4bf163281ab0de5590f5272d99d68766aa52364c906644b5200e6c8746dd7d58eece6a02994187e3695027578106f73be1a81e81d54e2b229995624248dbf44e2c93b987eeb8dc611f7caf8cfc452d9d9515b4207ba1412818de4d8addcb3eb1273a7894cb3e2f935f3282cb77b503d1e82b26614dc99ba90794ae340165cacae2a8a8f9cc9d653f513331e35ec87a2c2eefa614c5e1cd72cba22afb23a809b6cf85b84f0a26c74563b423ae78c06088827c2ff477cbafb6c2f012d32ed11be2c0667b52f33e8ca5fe45a154844892180b72bb92be55966879bc65aad33732120063440b64a105e50e595834e41d855a6a57e0fbfbda68ba62d73e71395e135aa4678e5e9a045638f0a2f71218a3062f6b2edf062454a4a0290ad9c585f60cd8838857d314c39066ad51c6887751c8e230ae425e716d8bcbe613330eaa3e34d9bcbaa371f1b5fc080ac22359a6884314959ee6c59df75acc3503b100a9ea61dc7e8905f8799ffbe765aa0591b40b4e3531fce8ec4df479e21acd57e44d7f68aed3792636c59fd7e6f1406ad7d269deec318d0cdba6f4a243ff4c3c8e2dba672989b330a67395dbd0e11033854889d3ec77a4c56b6d60f4be9aa61f6f50e92b9bbbabcd35a7b03b0cfea20998c429526d24cd03cf396254f25ece3df429ef3ff3172f482c0578b650de2f08466a458a620b8941dc30ede9c451ac9f64bce953483e7c265c75a5c74f40d4f44658084302db07c8322f3faa0987597cc60db7aa2ae94ddda1379d2921498b7b7c67507111385ad1347a4c90161e2ee883ff6d1e1cd66faa6b5255e3e28b4a3c3947dced5aa322e902b06eea19b9ffbb4e6b6330901cb4bcb9f9f8aea9cfffca1bd9befb3a13d2c593857f6c825e0b37fd99866641e5bc34938a46307a72ff25554c9bf058996fd9c75a05ab7991dc0fbabbf14b1dd5076b3c270b2c095fa978b0cb2922a78d5b161140aa0737ad90c1194e0a86254b2a31feb844a41fb7d290dadbf4a4536b3d30f301bb98cb9de19fe1a860f4f25ac9566faadd01558789bc42911bfa80bb27f256df7c596e96f3d037b510f8c899356752f186e21556edc04ed5bb80d258ca9b2d41efe81fffca8c7325488fb494afe867fcbd6637dc7177893e2781007040b0298cc306bc2487181450bc81518795446627ab78bdd9aa8ba6f7558d715fc6a1bd8f6e4fa4ad98e2c83544e1e2e82b22bcf4331ad08c4c65a881f8ea3b8a332744dff7486e7a2e80fc3c99b020e9561577cf0a1301372345bbc5e474ba0b97d68c9e4c13e7e0d04b3d74902e3125e7d629003ef9daa8483f9d5ad6960363efb5086bba999ad26699622978ca9a4925509e79a62be749d9044e41f5f5aeae9ea94cd5dc900de78d9d9d1cc8db7cf27b8c40b9576cd50ff1c69479f2729d75974d302e6dae0e9e648ad96074848fc888874691e0ad372fc310122af38888cf2d0996f22b26fa07e481824feac3ac2c2917a9b609ff15e70b8fda6e6e97475a593c4f9504a1d5c2e19da30d3f2fc77e46c96c8967eff702fcf84806029da9664099c5fdf78f2d782d7e9b1b50e3425378525225a1cdb81475346b993f9747fd79d36293eea21e71a7510e52adc864c22188de8b827d036e28c65a5b6c6d1ee30b8aa7004a651b21617949f68dc57e6861a04f9e58b76fad49a5f0572cc7a0a4c7cb9454c4bad03bf69999c6e44b6df239cb03173cf7951bc3231b2b8ab00e8dc6f4f0eb2ebe000c9f34a1e376fe6b155154fc8a6044b63103656b1633537f4059026627377c2d54cad5675f0033cc6a2f5b7410875541ff4e060c94ca9f87ba44a1e749e3030f9ff4aaa991dbb83e241a5bcacc9ef639c7ef1ab5a00196e92a6d6c77bab8a055ef65c67c0368a3234d2a79b0c1a456193f67127249fc4836d6b794f07bdeca3ecd9372fb8b6a0adbe087f546709d9638cfcd9376cdd15b751ea0dec1057d04cfe775d7e3807871949ced2f8276abdf144b2cce7c5777de0b0027f53396bf5b4b0b2987bfc3a03dc6a11960d9db8438a22998f4dd2250ce346534b6c1a4360ab107571010f755b2b7a04831898a4a7b637d02a6e6564a1244e4b3ab31a98c6e7d774955b522fb1655a0ac000a98fa70d9ac70fb9cbb9927013c596b5c1dda6e5633877346ec32d7dfe77b6bf42297ad47de451350e6890d9802c95fd158f6e558a23acd65264fe9915c1a25d3beea38b1008c10e060f196269b7e5773234cdde41af3d7c965ee22980ad3986278b980a9d6b7fadc9c18391e5dc13fc62956eccdbba92c15932f545a466c5273aa7e28fdf5adc9248fc914047e803aef343dfdcb66e7aab5916005b1c0421d8777b7dc34bd743e7d903c38d9da2ee425a93f9f4833e92710593220c58be31f8e6894935bad6ae761843e88e313b6049830b5e7db379d1c1493aa2872918fc8cc07c5e2c0452bd582105b8f5eab27966998a6750e4b637706de760c0593dddbd08f8b09d305879cd13cfea2a2a2a94072534ab60120dfca33202bb63294ba80167e2fd7c18208e04464c4bd733f99bbebaf53320558f7cde3c63700ec9be4425083545901b30c74f07283d0ef42126d9d78092f4210efe3ef664c8485615aa7e711f0a7380911a1ce3e1812b868f6ed70840187e3345fa910837c48b6c1dd0d867cd85107e83b41ef1c02e0ba7a5de158b20b21005ba7b8af13dd7e63bd9b510d24058d4643169e18e6ef74ad0e11eb30425d79f5bd25ae9abb9adf8089805615ae0981b20fdd5e4116d566be9646b0d4b936e80379b93b7797dc73a34d9f41df78336ca617e79d9fd9988185f5cd0cc74b236e6465244a7598dc15ffe3788bfb06052461ee320a3f516bc09f096e91488da89e01935e8ca8af32aded7e99b892766031640b1b754793101faf4bbae1f7b005eaf3acda3fb69ce0b4c92db3bf7e60784739306ae0935fb35ac9b62cda1b6a851f74378259bd4e71878919375bbf36a575de32439355c19b75ba491cffe6270b367110f3fc43c4bb21ef2d64d858a5fa'
+ valid: true
+ },
+ TestSignatureVerifySLHSHA2128s{
+ pbk: 'ac376ce9c7700fd27039a75bb74622dc6ae1f7f99100f80bf4eba17614d9e3cd'
+ msg: '21e9a27edb1f76d2ad5a00b0623cc9e46b8d03d5ad44c58d962163d249ef166ef1c4a2abae6d0fbb4fd3b9b2a4801490c9bd21fc160f2bc49450ecebdb'
+ sig: '798aab181c7cc147448d8c08b81c4812e97cd3dd045b5b86b61411cc16013aab707872c9fc1fcbe22ce4a50991ff41beef29c5ebef16c2788d28b9f436767a77c9861ffd829ef70aaae2af61077f5542ea59cfb5cc261839cd9b2dcb9ab754c74845892f8daca24c14a27295210e559e489b8e069a138644faeac714ee48fc535ec2712f7d9a103c1c64e315d9f1fb16b9c43bbced95a7df107fd85f58b21ad374b7c167f5a7a7eb432601ca88a10fcd0b8048a40328314d82911589a9899a38a8cc0c228679ef64993c157a10d7521c6f19660a3d56a0c81aaca963f0fbe4d95b0380476fdea2362445383165a5b5c128c33b3fd3d41cc5491543f6c04470c5f50ea5865bb5c1ed37ff4fe26471a25ead0b0a6d62013821bf4debd6b70c0155636d5a8ca6e6978a0eee5ca5ca71ceaaf2e7319e1f5c163d53b939c22c9065dddd2beb24a293f1cabdc335981b0f82982618b3d91cba8d387d69f404ec25906ce737dadc8083b4983e31d6d71efedb6ee670bed421ee62f3abcbfb2e5b8d576eb11e5a5d46d73a1d90ed20a36bffc6ccdd6718bfefda6f094725a32d3968fa471cb633c9952e853a36d9e76641dc404a57a128511d2684271f15a32c9b9e986bb180810a70f75b9456556bb407359cc30b50cd0ae6a1b524ccd1a0874fe8aa50446f389ba60de3616c3e84e1270ed9dddab8cfea4a9d7b6a0198250c0fd7e8dcd835d7d2fb1be0b275c97c7a26e4b05acf88b53c8ae1f8b6fa663a95535276357b7b0f3c204cc61fba9626fbae3a96e13199e6c592c83198fdd42564a891e038fea59ff1796c99ed499985bec712185fa1ad0f9b5c46a6589b836c8f0308ff74b306c42adf6414d7425a125e7d4a12f26b7760b9e39d7f80ecb00bf073bdec280412651ea5b4526fe0ba0afdb41df2242bb722869afc2a7e9ecbc4e1c0d62fdae7afe9966c9e38e07a1cc624198982ebeb5a9b4f9ce4d0c3223e88cfdcdd819cd65f932bfd013f8d3f311c730034a007511f0e723639ed68095341db84a538830e0f099035515149d80db43eb416ff6e852444813797c396e69ee60cb30cd356fcc8e65aa9ebad75f87c109d24b88cc8d3eb4442166c3f5cd6063930705e7084d447a82ce250062e5c894ccc269f268c89b74687b90d6e4b97ffd4dd1176bdc0f249973df502aebde4bad1ceed390127cacb782060fd6b978fff51f108879aa69d6426def5cfd189a27023570e392bff5b8377116ff4d751e2d1eee70680e3f7926d68d8096aa20b5119fb09020d0e2b2832eac1b4907a5d4d785c4cd93db96cd9e542a63c2e3d096293a323ebc90b6bac48ddb0b7cf1f94d3028b943b309779e7ac56b3f80495ec31d3cccfb798656e3e8d3f61329ec7c89970b8097ccea5ecda0a92fab053d129159c95c07cc04aee987c4ace462bb6ff8d818e0ecc53eea3ea396fdb54a62f6e5130d7dce37676b7a2b61a87dd97f99575ae20af93962732336137ae96f3c22a8bf38323c927000335e0adaa9413dd54f1a994163d73987215729f2d71fb1c342e0276c858db38bd421db222e6060092991bba429f3abd1125ca665033cec8839b74c201ffd9fa9a18f951fc698f5cac73d1e53f8715cd0d341b60a2f5417a543896bb5fb9e11c26384e62bad26b39d2174a6d1016b801b5cf84831c7ee9134b5b57596996b1f5bf176682b3cac0b9d2e4a8572afecad6a8e7b423e7c086b98eb4eb0d9292bc18c221da50fd6aaa529287b850a97352d2f936e0dce0c08f7cf7bc02621c9ade36e35a28014cf63c2e6a8c19b29f42180f6b6a99595fa9a6b5f86300ce884abafe7e98a602679751c0db00c22d924f25cf633557c2932cab597a2e3fa78d0a7fdcca54dc0c13ee0d9b8024835777b844b2810e395f3a70c52f21f6564ead87baf1c6f808033814e36875b40f0d11e159c157e7240dad7034271771b6d4865f9518e64f83dd9d0138abb840f08512ddee06edfb400745e60f5c9c29c8d4e1ffda9a5d06808909d298cf0d9b2d4726ff3cd0abaee29767789e0b8c26d2af15bdf87383aa36e22359b0978bbe0f4b241a3e408a3bc87797de0c41f41b0c75d8cf4f25d6b30793094f3dcb6c815829e8c40384747978c7170df6b134cd12facfcf232ba115a6ece390f7142207d6c35a6a038d1c1abd965d0f9b75d5304ccd2db249e8ed9b69d6c26ad6be7644fef981dc3260aefcfcee2331042ed5afb057e02a2ca0ab690fe7f86157052a6230c3ab05f782cb3a76bde530ce40bed9ceb71a4aaffb80b293b3f8a173b4b13c6f782a60da3750f0818a58e6cdf3db452ddcd707a722a00781cb95e5482615ac3a4d6a286d5a6680c572ccfd32ab87b469620c0a07a07dbcf7b2ae89967794fe8c65eb301a8aa9eadc73178607404d80c5d92a9249dd8527f0af54fb903d33676c1ca721f41182ece3765b40ce5c0c781a342b2b997486b73e0e94647f1ce8f68b6655c47f74df2056cab2eb6ddfc03de55ae6011adbdf4a21a06f23b4d76f10eb6c1c0a80f0ba23d32f11dc62c0f8140f5711588c73374203ed77df00a6091fc94bedc9d86797fbf63fadee53d9171150d08d80b70252e45d5661d81066fafdb730804affc324305d6beace434c2ce82e44aed8d2ac0169a41cfe1a244940e753f6009f224a135bc1e8cbfc1f1ecf670fde2a1edee2189d5619d3070a8849fad19de86b44e7dba87f5a0929e979c4374e05ea3e3a5484a83da450848d592d0905837625cee73dc8e87abe1d1917846ee16b6f642f2605ec3f7e597edf0880145963e8f5bbcca05257ed99f78d549bede9af965f9b4a2bc8cd6be0e1c4459a887e99451b2bc80142cd8840438187b03cc92e498e05315bcf88087d47fe9cde8c0395ae8509854ec63bfdcee760674baf6e178169c009958f91699e8265ce6a15d1836186ed45960d01509beb13a3a45329acec9719f588bbea06e40b5275ecbf390ce9632822c1e11cbde0fa1cfd57f08a8b5306cbbd763b0b45efd3ef12ea9f25d3a4de950bc71ef9574b7a237d9fa3a6512098c7ef3aaf4fd4abc4fe82048ea910c7c81adf0a3a432fcfc2f948cfe9d213773076c4d7c39e1c7ec64a1202970454d302dacff4f09ac85a88184900ec6fc5dc67b26996e240b5a043c596f42cbff88c1ecb5edaef3e4e190b4f9f5e945f27157006fece83120112fc895966e07ee0bf745c6170fe7f918159ca366f378bb7b1c5241bc334f3488606c3890cbbf48aad6245bd05e58242718996c058fc2fe8d150fc3616526dff035e50ee97de70a2ff66bfaa42e9683d64ce0a3455a695665febb508f348ede32938ac7bb3705466d80eada08eb75e7236984c2d36f3ec4054296616c71ec26665063471a9597c74a1f734417eb9ee18c4cf0269cd8823b107285a3a11ac439294111621fd2b2a08650b87c8c5d37ff532f71ef2054e62b78db8598929800449b8841e0a65e5c4e63be9e19a4cb752d09867355f9ca574b385e8c120e50ce7a5ee2c5c887f50e92f9f7919d5b77f1278173512fdc69c2d79401fc6717ae4005b16c4365fddbf2134b93e8b135085ad4d2bea00bfd0bea019ae5937f55457117dc00bc48bf9fafa156e038ea469b9fddca45b40da370380596e9589b49d608c701d4756dd256d49d8d4abff50386448f0660114f7785bfb438e6b47f68827ad5fb1c0bd423c10c4d2dc6ca7d3f42e53e21cfc93d84a52b6970ade7d7a369d7d166cd2735f2c254ead355899bf40ccc56e5689dfa61c40ec36ea11678ab767902e429666a0e9ea5205f0133464f823257678c7e853abce5a53e9e31f073e8d9f36990f48d637d9a6767b65f6f16adc540479d0d5f5372c16e5e58d9e086b37db8ed15855011e617602618f7c5e77803effef341bf6b2b0c9491c03c7c817c220c592730b3aca34c911941d2ca37f02c85fb2dde2501a1649d800fcde66e9c23283d2331e781545932f02be49c40dc708ce66ad3fe07c5b5046dc17b36f94bd3ef1ab0ec7fca180ffb46ce97c59be48be1a6d6c5d49a2dc3e4f6b900aaf5463a07806329c0b64f163150bdc743ffafdc4f4ad039b516849ed6c8cdbb8d2ff306f5c794abe259d6ec4dfc78728354f5b9cf0ddeb69f04e8615a96018dd809a767f9372cf51a75731739e749e18bc4ee66f146337bb70e0fa0358f2ad09d45d40ca1fcbc54ef902c704d016c6c217515858202d5873da358ea17eb190ade31891a32e45a23be17d72d6bfcb9cf949c641f66b269286df19b54715c0f18891ec704968d896ae95bc7e1c8a9dfec873932cedfb8434fcea92bece98fe23bdfacd6c34c6f9fd307d457084e6a47afe2eefa9dd2cf74ef39a0ac1852a7ed4f382221f8903a43e8cee511f2d895f6d7c3b1f0f97cb1945c6c545d4def429ecf338c25ef9744689002abf2af5c7f7d97cd07118bcc6e64392c425135d3447cbf635bb8ad622e92cfedb562883ec00d2977c8b6df501325dd6d5df3e95f754a9c778b4aa793c782ff6e3d0e8740e426178910850757f52b3c4d82fe75e38274779c1bda7b028af4fcba7dd8ac12d909b6040e9204654df987bde3cef9b1e0a66e9b9af48b80bffafbd10505aa2b36737806a0de02297be71a27f21a5bb5997d5f0c623fa554e567114e51bd49ae8930b6fd6470790686b27293689082628ed0422e58c76d7f78d84b927cbf0fd1664337f7f82a47f021a9a83f05bcb3b96853946a33b66757a850da87a1387cd5336c2f26de286f31841ad2ba4443ba8092e8fe43486ea38a5e60431ee2d4453c7495df52e89d90dd81884ab3ec37b3314c9062aae8baac66905a6cd54537d668458a3ed22b63eef5c6bd8c991935cf631eb4578f5c3749833d2ca1b6455a56b4813d50caf3c71807f9a77032da1c9feca3c0f1c51e25b650dc55e3a49127cd16c45d4719a79e2886418f05d9d85d7383c98b0c17326156d79b81e85ddc20f94be3d7ff241d7034c8a0312d68cd6a206c42f1059684f58f5f94c1d6dc0a9785e166b3e16a65d11535191c5ace798b2ac1d523716c42d3b8c43cb5f1cef46312c47c203ed4096c7b343b5db888315e79c5aa4b24a33ce1cfdeda7aa62eee47c9d62c7ee736b53564fbf90b84aa8d24a7bf0842710f8d83ad71fbd4d9cf78416b71d5b6014ac63ea55c93630bace2b428d4046aeddf9898b126566bda38a6a620b2a3038e499cae8e74f6790b74c17f9cc1d701d52d065aea9bc6f0a6062d860714627a63526f1e2917fd613590645b26669aaecc0eb73ccc02fd34dde84634e4a0f4b64584b66105b5f93bb4d2ba8408dc4482e2cc97fe94edff6b87e7846ef09e33b6c02a57508b5bc89b4b77221f310d6cecb8d8f80338be9df777fc7835a588bfdad94a026b094c8c644c83b71a30b6086a51f88961bceafcd8d6492b17b86c79e7b66848ac344dd91a48187794839022094c850cd543ca7c19b6209116c23284682f69a2a9ad7250f03d31756f7d38e93e04e9502df6d4e2fa1e409da0d0b71308f51451fe03d30a842a2a5266fabebea48a969170d1dd960eab413b9aa6e3c27ea16e89afdf026869fa0b9403d9e99d8536c0a25edce3bf7cdfee978c29dad3014ae17175e14c2bfcd963c3ccb90fa1b2f8d25e217eea192dd2b23df1a60209e35950be90bd30aaf872d36a69bc7856af4b9c699abfb433a7d27e4239440b8c3b99140093874639159e1f480e46cf55de9600539d2c68023d103bf2be32419dc561f37287606c9d70d1dcc12158354f2a041b21dbe678c51faed5aa2536256b4961dfc2617147ce57c9c374854b9a4435a52221fc2b898589ab355871618f4cde84ac1ce1d8d29cc31d16829ff876d8408aafd927daf1fe741fe18ced2c24bd897c50bc4028420d499314f59b6f8cf443a9ef1b0c8519a8ed334a0b08fb98dd9a5c04cc26857b7a2a9030b6522a7165e316176e48ba4f480fb8632491fb7af57d655f1acc5297aeebb6f3feb25689a994e5988617c4ca6ecd970074bc425db7ae5263ddab4cdd8fe032be21bdf8f9ea52651874b9e44d08e7ed5756f068ae1ae197759e73e2479cb3a528b6b6499c9cf63c03d556057575c988a468baeb2130931debf4b64ffc20e75fa532bd73b895809c533d476ea2a5ac8b4abd67a5dfcc45ce7da713bf86459331d48f694005ff00f88300f2591c78cbdbf2db84ced7bd9e3d5c76835198fa69a6db1d437e02fd7f3ccdf80720c04d812349c91d68191b1fbd9bbb3699e72764dd28825b21ce1d68200d40bd6cacb17ee8ff39eaed915aa78c6c55ae68a75a56f07b54aeda31af2d54a4b23c6ebebf75f4d34d64e7e6ee9c7dc89570d6da7ff0d1767defd5eefe6e03fadcd68678500e9a1b9f2e611902d317dda778d6792274d1257864463ec3d1d2f5d8ec2276d4f3ad14703bb7411a723a70fea1c83b05a52303409ac8a463361c6436192e1b0d4603a31388906f94c6ad8bf8c8a0828df56dbb84b8399cb6cd32c58839c25643557d2b9d15655b786ea765ac448235a563c300b73c24b6b9aa42d5f6f670fad98ffbc49c82c2a7621922719c4613cd5c95053fefae052966dd4a18ff57470c6fe900309579d88bf80f20faf4375072cbfa172daa08929b55949cfe26f3a35cdd663146339deefa4af50b8bd415a34decde496acc6d352b2e29d77ec5e1f06077755b81583133a90ec954c928058235366d1c925db77ac02ec1d29e3cf97a09d8b77555c6c8269d65c8245f759e38f191df2b374fd55122c82e16ded0a63bd1e5f8f03ea8c8acbc66396eddcc2578c1f454c7d896ba24fa19873191c03fe6aea2a444a1ee1e8b94820301d46995ce03ca599450511438f13d5c14e8cf6951329638c5124b21ce82b281c32c8ed1ad3b9a5ada31953b3cc8c869530afdcf98fc125dfbf94983127f08bee08f1ff883af2bf5ddce7781459d34d83db5687185f34f2fe7d1a019a2c8e23904aa69b6f72cc9fc032338c7a349395e19522f8aeddf224c20b8d2f528c03f87980a4d9d512e2df7a988bed6882191ed5939d3726f4c7538518bac2cb281188129be87b5fb26e1a572536e895db8dd22c32fbc66555929a9b45e4f576267aa24e4adaa1c5725883e70b09a8436a09cb18e5a76ac92fc55e31c9dda50b28f5d47904f52697928c8403113422193471ba1af58656ccf78b1ebdd46aa54c76e1270a903a7817737d58a06fcef39c0ef73f6e92eadb3af22b5015949fcfa4367f06e29b8d0f88ced17b75e3bc6692af6f4a2c5fc56176c2c6091c6a1d59f65aa53ed66f856d59114258371a07f349082f1c12331ad11f0d0b4c9dd49ed5d3669605f64da213167bb08067ae1cc5dada5638980b8cf859901219b620fd9f8234c14e89eaff01c734cad55d46bda5e0debb8e2926040f7c95d165729450d9dcdfb1700d3dacf9a0a5e5b993ca83c88f55a79e2984e1e95038bf9b5fcec785f00651bdd1acbd5da7cf92beb49ca23f5623198a3bffcc71b63643b0489bec4660c3f152d52de64c4b39a2588412ca1958b606ccf8c8ad4fe58c06ef29855e57566a653223b5d8eadf56319bd5536d518e16ddbd35476f34e6fc7802c961811d55f3ee1a710186ec5441c807cf10ab38bed61bb6bca92c4d49828121940cda3fb2a244541d48ac1891f961cd2c5a160b914503a78cd677fe4c5c8023b26dd8d13c4e68121f3bec651c97126b12d2ce81301a173e57ec317ed71fa4b293df2630d638d1486f50d6b7d6205f2ff44b88b32f1ead64e52f1ebf2aa7ba706e5cdbcfb1baf6f6e9a8571404d1f28ae1258c32f9d2a7a840a1ee707362c9994db51840ce92e13482d37a30e2f682aaddcd4ff1059a75c77262a5bdf3826f0ad4d1e7d180137e7f24c4a1b40bcdc614072724d68d8e66ef35fdeade2bf1ef6f21e293407c683cc0bc50d5f5b879cda95e18750b473e4c708b9aec8063e5a9a6e98d4e0a90daa766a96304a83acd711ec71d2b33e770da902bb08765ab400c87c30d059da7e41305db8c0b590fbfc4ad54f5168319990a84a6426c6f46c47f032c4937eda06a25c134384c87f7c501045861c36f6d3d33e5db9b41e73146db61d4b27b37d1ca016ed237a2f69cb5c8db08e9ca002dc44a91a6a0947a79a3300409ab473b6e631c847964aa849f3e191b365664e66b9553b8cd060fd50feaaa46952898872eac9421dda0fb4d5c6522c62537af593b8eedc1212001a459277f5e730cb8720109d007dcf9e6a8ea6d64555821db0b47898acf0ddca56b14ae8869934bedd3a806886edbeb50212dc70587d59e915d24ad1c50fd0711722ee96600ca960d4a58303a5a7be564779f430f535758c318b4410eb0fe0f15653e1b2ab2ce1479399ebda7f2a91ac2a2b63de324e5fefce4c51c3eaacee1e2604a489d307858af9cd8fd7d69fc7d38bfbd89e43a3f66a2f075e7efb53c779697e154ff51b62c5a43b68b3e803291345f237c53bd3269228bb1820f26d0de88e5c60f23bb9852bb9f34cc282d57583c8508fdda476340f2452656f090ff1d764fe682a6fc5b5431a9397ee2ed5ee748a8153c631d20add1eb740ae6a014e3d057157907be2a6497ffc838ec49b6fac0c3d4a9df761c0fc6b522e44d3c8205258f417925b960da346bfd8baa6cec38e640f9d6421a7f3054e3a4c96cca20eaf2163a03f7019fede36aa677401fb8dd4af32736f65eb6557aa19859867e27b2c5265f1e1d5940f23a3e74ce5d051ffcbe26caa3cdd83406c1186d0e33e741326e35d9218e2d424f6d6168dbb0fadb2aaa31615fafda0b34cb17b9384ef9dbe3441c6f0ddcea20bd9989ec3fd02e63fa98fb6e6cf3eba9f89b5e05069276cd77894e36d6de2d5b48163b2dfe9e28e2190fa2e9ba33811264ac23f89448dcbe0ca6df4a00fde43b6de9d0be405ed845e5230ed4bd6e7a58ebd17192b8f463a684a58be3320bc5c6b2610db8b5559d2627426f24e11fcb8641144c9a5f4377d9b0d87e2bb565b9f45b52f366c1f966888fbbe3023d0f891d86af6e3a990215499eeaf8f0a7bf788371fae75e8d0fa4ecc9290637da891c889874facfcd1ab19567b3f965852b69067259237066529e8a4f88e0249098b035ff1003ca03e0c94280c6d201bc60e72064db961e991b66c132efd87c5acada1cb840c4fe13b29fcc57977240bcaf83506f164d0682d9fe57cae698a69ea9e0bc9c15e19604859ed688db80c842489013511504bff36408dbcd8f8bbc48bdea48913f8085af19f20990c7e50e9ace71b434425bb840035adf74a4038c5fcfe7545cd265561a657b5ae75ba6ec0c5a02f6e69763e70e65292c5508bbda41fd43f14962ca39c5778b454cc5d3db2ec942aa472ee428e5bbf3740fd8734d6340734014485c763745523c7aeae15f157054bbe8ad6cc353c06f0d0538aedf380959dd0ac8c4532ed1c889f3cfc08958f18c0491b16be03713d0e52c5d851f478b2bc82eba4a77915edd70c89d671c5d827353d3934ce8415eb3de874a3b0ddbf74d41241e76b1e33dfd83e9178ffefd869535c56d6ade35b2e177beb2260cec36aa8d84f732a3652a2ab800fb275c2ae9ab8b09c90d88a563a843b7cd8fcbb5ebc7e48bb8b5d546cc654726c45dfd629a18edf33fb45a47fa04d37ef30886bc1d900b22d1c2482776b9e2dbca5fc47751a1c46c57b4cde81d5f02ab34e263b7f086e3f197e34350fada320e49c25772b1a00dabcfbd3abedd919646e974ed856c900284ba2b81811ebb5bfef0d522c874a70989b1149fc88b1f34ba727b3dfc6f8a1bc234814d65a7ea66db75d60d286f0ec79393d0a6ce9c207be875dfbd052140953a3e07917ce6116753a67e57d4788008255427b77bb402a0438b6a1d86c6503752fcb0a3c5848cce737ec76a6e8ff7e3dde19670c1b7943a9e4bf299865462a86479aa529f4c270514eba2ed689d2d5a8678e0e06ed71445576bd98cfee5aa65f504cf9063117b8048ceec431128e05aa071af4c9c29d7247875e8706a6f016767d82626f17e405186619e29744ba28ae2ce7ef3398d67c0f967202b5cbdf4c8f25f2f381070fe1503b652f0693ef2aa2274f86b3f35b61361bcf5e6a57a5b37a36ec8f91e96418811ce6febaae05d11da136561d0113616b0b612c0f73e7665b4170263cf4a9caa05fd92cc46670582a0b9b90093a97e1aeddbe3b76365f69ac4de34e1c253a8d5a853e1fcae3ed8c652d3b6e2fab82f6e63e567796f0571a432a34addf8e3757400000f9d8bf63526799bd4e2004155b4a90b24f6e77f29e738e4dc34e9a0d01686b32b3febcbf47af0b2e8009c6e982d56d22b2e2742ac4b1b50e61daff73f963c680350f482a41fd7bfcb0883f74e4c726f32f0713d40be6214ccfd03113d6777b4e2f8b8409556f889b0ccc7a35afd4b342746318c1367acb1ca3c3fb380fd6c505668476d48ad322ec801800e6730a7afa09ff9e072a168331d0402726a60ee3bf1c45b7e315d72f54cc5efc7cc74ce64572974c1d2fe4b7497e72833741f82ed59f51cc6758716cbe342252118044e756be6ac7e7ab2b08032834c1ed17705ca9e898521d8536adb9681ab08755c9f16750ca1e6c537c651800e4b701cd6799fc16da8e3984cc4fc4eb5bc6eac47ee6194873634bb92c161045a9e48ba75ad6822526239ad9d4ad955759b645618a8e8608c49d243aa9decf52388b9192dc8613d972bf89e1f1e31d9c01748eaf8c4c975ab48f06a17df6e34421232c29ee1a6b4cf7cf4fab4d8e2eb403022183a92b4650b8a5faa2c598ef3806ca04e7c3d1e08537b5a1d9a71b1ccaec3dbd4abc3bd7cc354334b577cfd524e6b6418f306db1da2d57e6d76a49faf6d31b71d53833ab9813b49c55dfc733ea517ffcac589a715996e82fc6b550112bc84530b62e14ceb20456c4e5885e25cd2ecea12f005b77379e455eb91044697e6f3e75990047dd31daf3e29ef4373e8dc9dd95e5d34a35de4a4ba6306a5b2d604d15eb6b3f2cd31e528335465a5382cc94659bc6d8e8dfb102bfa0ff6bc5c5123eef7937a6360634a86794e1b1b57d1b6ff1d832655764d4c79eb5569e8f941a693d68f22fa5b4f7998a322507f5ee38b849273973b0472'
+ valid: false
+ },
+ TestSignatureVerifySLHSHA2128s{
+ pbk: '90c17eea2ee4ecf9e9158339844171fce6891d26c11de869a81fbb3622fdf9cf'
+ msg: 'b897f15adc12154cee4751cf79acb6f3d31768a21a2a9414b9176a9a5bfb4855c06f707f65'
+ sig: '82fa9f26e48af74a9e987759ddd32f2c84cc4413d93f5f5ffdfaa6e9245294e735c22720a6975ce772cca6b73c5f25af1c53c30ee233ad8ffd12da19ed84fcfc9cba0d2accce27c75424ed2261801b28dc47a9ee6367837be72a7c651690734995ea8d9061fde894adb645f2d4a7406ca1836f285a66f91e7464b4131579d8b37ae71170321a7f072d5895ece5e7e2aadaf1f98bc47893c123a391cfbd207c40d38476a0d1438b5eb6400493bcb65f922307249e83db00981256c846e181872790854c940a9815348a7bf5ade59d09b723ec65a420c6de705371cab753126cc8f86b8e4129372ba758a4d19e9c5f761cc82a33f341393817ad1888b4d6bf7ce9ca1e993bcf3010a32d5663f52d694f2767fa02afdb9e726c27d43d7539fc9a7a8be1b4995a722403fa899c723f556b6c166898b87d1b65b73b9e98345323f5eea1811048ca2b5b3260624fcad17e0147d44885b0281b4e5c6389c5c265f0c25d61622f7c3dac2845986d39a818c9a660c98b9ddd6ca09d34e4036f303cc4d13709a883bd602d05e4c56c6c9956994e4267e793beac6c5c81f8a575c9c2ebeb02ae760a404b7715217b045d0c5100899a6557ed6f24c8abbd7c61715fa906faed0083c5299f6411815aef4d5cade4f0ce45e9413dc49dc20da13b86cf48d7259f2048608690862e0736a6e32101304c805a47028e28f1f44aadc15b5e7b3d6c8f596b85540f52a53f8920a28dc8954bb2d306cd98bb9d1d06e7cc6701bee38a21338db8bffb43ab4e3c192c782084fdf4a33b17addfd9d7760f201143f03278eb9519448648daa4d41c8a7208e03bc0a90c8cb6c81385a3fa3e68fa52185d8d0124781935d8d33e1dfb4933146004b58f9b39dd2ae8193b78ff3ecdde8e2a3289cd8e7f63e525db64ed3fb510a8c671b8934e19a9dd8b487051af806c4e6e927a636e969372373ade00037a698f5e73a3c98050e1d29de40400289b1aae620968267cefb49ada722981516daaf4ed7659776ea685e2b7e039bacdffda2306b158cd81da0bbee7ca8fcb3fbe3754b1588244bf8fbd0fb246f76496b5865698329f0591ea2fdf3be22a2e10c2fe619baf35bd9f55ed86d6664c28fe7ae8e837d7e968ea0def2fca17506ae037e4a08bef94bb9dd4056ff2c6fbb2661f6ba3c7fd64eeb43bbba60c8d9d8ec7bf7fef28a462122d9ebf436c111d7e19b3db7dddf8f882aa9793012a945457543e2dac850bcf62d82ff667000c984ec4bd1f653ad38a12c3103eafb04ed211f9201e040f560cdcd9df18515df9cbdce835b7499759588547838e1f04d509efa2ec588fa204b58570cebaeddeb3bd92e4dbfbeb28a132d8f6d91f0e193872ef1bfff0ee585ae0146cd685abfc4a8d67411a56de18663fbd30991a5edc85ca5c1ed256a3bacc4f8ca3a469486efdf72d5e625090242b36db2d746af30b69cc4862e3a3a55b17cab1071cff25a90b0206b3f33f38b740dc8f0fd2121bd08fd521c332b5c9ac59a8f93c6611437d965be1e9893f5a806e595f16e6dd3ffe1b71234885d54fd9aa9309bc41f4a38d07a6cc14be015f18168bbde115df49639e8390078a69c80917025c144fb57b225424a86c256a3b9cb1535cae0b9914c23bebfe5454360e37d9e47224f9ed55896af15f0cef5bb3df931037eb900490017952883862ff37d0ac4aed95b7b744720c8a39d5f1fe1abaf4633da564e743471b7f6fe6f081bcd44fdb234ecde612259b44499828a54bb44096fddaa6a7111034ed81a202878d45632ffef6d9b6154d2cd04d5869714f4e03238b2f03656ed64adefe73ed3ae567f8f55fcdca2d22760eba588737e4f05292725cdb5f71e33e4b7e2aa62d61487fde9430fc674ff9b7a73cde7ba6ab261c7f7bc67c10248afb494a7e3b358194163f1e07b70017f80d63dd7d33995050efc17599fb952066bf066ea205fcf8b61075474db2a79c77e7b11f2429315ea5bb1362402aa74f3506f15ff930b1cf5f7a1e8c154c57c2edce3a1cc71614b3359a96324606e62df001cb18c5a0a1e496bb44fc7d9c09f4fedad5baba050445dd2afc8ab4d17a77ba15ed8cef6c811a94e3d7265cc4a2e666a0a4dcef9e25bb4481339988e0805a968d45f547df5fe69d69db368316e59d121c5158e3c76115f368aaf106ba5c22b50c00a66251741d9eb77d5c7829899d39ec14a0cbb1098f6fa397cec02af59837fa7bf6b58cb8fdd37cc7310a1187ba3b01e4df9ae0516cebb6faeef2fbd9677da60363f10bbc4f42facbe44baf4c9f612abf8abaa22e2cfe5fbc92efa2688640f0b624da291ea526137d191be8fe59b0c507787e6f4f6595bd469be0b3709a7601b0de610cdca0a6536b06d1ed699ae5f87f5ae15560de70ba35f72ec8cf38523f6e95ec8bb61df7f09e8694acd26efa161dc79abd69b78d2ef9a678e8be5bdbc3d242b31052a5a5cb714f833860d83fec3aa5e62e2f82f9e6cb7cf015d176801ce1604f67d95d08bea08d7901e706f496a4a370cabb8c94fb93f9a5d6f7c18f1ec5b5c5e68f637ffa8a64ab6ff22629e0a676356b239e3e542cfb1358b5152d01a4ad46827c4fc2a29df74be89c9a918abacdfa33356bf80d55db7549f4a1dbeb6c103280f7f0a665eb1e4f0e9996c09b1240e7dcda49090bd79fb545d5c0342b8e8ae64d7fe5c066d52a4b06d23cd7b7c8e8e0979f8e5afbe41e09d5f19e3f8bf8543c4f5eedf8a63373a41b2013ee9ee8a48031110fbce08b681d1c3cf222e8004c0bf62c86c2e028b7e05886e6f45b469545c8012c58000a3a7091b5dd494da9dfc92d3be6b4c958e3981691067ed1d2171a93b38a85d64c0ac2c16c3142650de9b4aa370cdee4bdf6bc6dc9bd26469249d3dbe25d2acdfcab7cc8290dc6ef0ee34ce94a8a3243f545e2aa1a2ff27f7abc0b66676aede777aac8118255192db878e3ac77f93d9ff72c7cab6649c7d5f0ef03f883f5c312dc26beb487da8d185c0af971000e95f75e58a9ec3bface61d7111dc8301f1c5f892e1421dc5142ef521bd99ea9ce71ddc41acd59b038927891602fcdc20bd9813a14625434b7570d00e55c39ae3553403d7508c1ff4e45fd5f63041806de5dd6c0ab74299608ceb7925e477b48a7a1ef6144de0d5129f495a950f09c2fef3ccd8644207d26363867bac76af02bbefd84e3c910019aff835cdeb7ddcf698a33cd4cb0a69615861bb7962b5d6a96a5ff789f3006230ed3f330e3889cf513c4a6f866f4591810a654136f04ff17998eb264b31f1bed329c00a92b15c9beefdfbcbe107b7907f8e7e575cc5abe420179c5b94eec9c349c16d8ba1023f82afc67fa558de921fb4afd90a2bab3c1bf38298b266f59ef014c5b579dcab91e10f9506145e421c0d3363daa038a1eb9b77b282211d6394c6d71c0f26fc91076f39cb57d52cb5b9c7434229bbbd9fb856836b032e91451a787ebe1889eeaacb4284f57327dc4e93474530533fe8aa524758dd64bdaf747e51cf7bfd44027f9ae94dafa5d0500d2e172a3e651097c6b49295752da6ea6fde235da04efc5451d1f9f2e2f7fda62c54583ad57cdbabce502637b0fb055c475c9b66bc2075618e24e8b10af5154673e34387f51aa37386248a3eeaf8f993d5712f511f7149f2d196de19764702e19cdfbe55024f18ad41a09436a1893df8a5ddb97bf2db5029f06fe6eaa674c12a41d4e0ae1a94b4fa45c4d1573c43589ecb40d4aa8b3d497eec612b9454dd0433938b89dec7232460a6390b92becfc8eaff1b86c34f7cbc590a47753f1c410e3b8e4003334fa7ffcd8ba21e172f08dc6fa1a221839402a79f3b65dd217363980c845b4200670a24405030228f5e59481b6e34145155e66110d1c8a3ca9d6157b9deb84e0c5bf556caf053b3165abfca0c90f46a1eb7d70629706568869eec3ac5f26a0e9dd1936dab247a693d6cce61de7a05f315d53f0d88453a023b6c677f2685c148436a0da44719d06039a39212da2bb6f641ffbe4349f837d7854c9f26fd94002fe5e798d15d79b089c4d655976f369b81e8e28182312d5f78885c5acee2d31635f24daa5c7d480b2c73f3570a3f3b3aa2cff4cb40d04f2ff6c7359acc7ed35ec6b72bcedf56575ca3d51624a78baa96bf1c7d9fb65a9888c6ff987c12bf0559ceb5813a0aa212b17442ab0605b234917f96df5d9a44107e34da06cec7ae297c338da23a7b5769323a3bbe865369924b19643df826a7736b0d099b3ad47cdb9eefbd53861cace406ac622cd81420f305e2ccb2554c5c389c4f4fcf03b980f66d43bf1bd74f07e0a58788c2063a8a81a5731483d2bd5936ba51ddd0a274999edaa7c69e3ce6238401ec6cd42739ece4f93abc241845c2f77fb5d7be419de8594ef30ac2b596854ec04ce2e2369d31f724672a98560b17a448527b97e1119bbf244c67974105e5ec0a1e7cc24d888e964c5246617fe9a8c9dffc0d625dfb7d25897556024684d088efe503a6a328ef48a2aebdd66cf8a22be7bf1adc17d9d42ba1b7a6e1c5b9b8bb3ea185a419d25d844d2965c32b2bad737b0d3809d2b3d7df3b10c8c5fd0e64a8e8a850888a2a19e9648d8791ca0fefccff5be7117f7084ac998544283589b1a033d0746b43a6713ecfb3a103187c910531c731b70d8821304c4607eab6cdb675526bb305f2107f37fbf9819176f19d766d086f7bbcf2204a08444d4d42648484eacff3c5e2658a91167ae0ab9e3d1e11ea303dff0b07eda4dca49fd81453cca57a8302448778833e940257dd732d260d2c95925171ebf45779d55b23e90d46d4e44a8f50bd49d22aa057f7f92348fe867d462c45a85230bb937301426ef6cd1fb110e47ebc0f3a36cb1feba86c387ad7adafe60e358eb98bd4db99e5ce1990afadf963e0b30f40d2e830c004035772c1305c2c5d6e8bc9521fb6ce77c84521d26ba227c2ef6f35d12fabcc37b3e26ad24d1159528d147b809eed115da56de9c7abb60462c2899452ea97236b89e45234066ed20472c12729fc750027693af7ce7bca4403c82f8cf521cc548870f5363424c8a167c05dc21dbcca1c0ad0f3deb49e3c505a1caa0e05d75a8bce1acddb7d903124ba68946f90e4f1677f9f84461be8c26ca03f84e1da233356f26e8cd187707d15d44b78218d32e5b6e49f49a437a5b532cc84a1b936c4d6de38568bc4102bf4ff5f631ddf3e92c96df683f951358ac2da9e87018ea87f21c803a6115f2529cf3de858794c35acdeb1f05f5f1308e44ca7635a11841ade51e5fec2b72456f52a0a42379863d82226ad88d3368f72245df5f6ba34ec022909542c93257b8bec2c1cc667b7595007a4dea3091b3d370235689a10760a64914684ba27ea189422ca8486811a37cecd8046d7b2f48512daaf2a8c29280867b6446fb3c5e4ad725064102b9952388362db369265602b1a62b5da627a4185cad1571bfc5de4a04e893faae0b0683a1d1deff364f255b16c735bc9b5951fdc5ab9bd9c22f8a02283bdd426db24cb79e36d6d8970a364d14b5512c15aad856b27802719fdc516fac348f0c2ee83dc9b95a98dd5bc37a10c3fcb3bf6cfcb51145dc2cc2ca1d037353238b2ad7e8ccd676e4fc88f702e7664dd9ea864888998d110b5f4ade32804d23af33eeeb7edd44a2b38e64abc3f24700b81f81f609f45d371018e64c659cdadd9ebf1407a6176c587841418da5e03ff28f542cd64b19fb99ccd2b7509ae86252de7cf0e751d8e36a85737b1bf15a358408b476cc2cdbec97a0e7f6716e23a926d5f603ad3eaf460cb25fb73a17aa5dd6b98c031d57b456172a623e6fde46818bb1847c8e59ff5e32bfe9c10c09804359a1a59db7a6e4ba7ba282f1c88b638fdccf1104be2a92f827d436dfa6d4a50217490c788024366d06b8d164ff995e2d52de5c3afb9e49987e2f888e194c21511a69d1035533528a556325da66d927c0f2e15bf78b0f6535a846ef4f08c134ddcbdc58eb15c3263610ff64e74bcf69cdb5606e831c1c82a6704736ed5663b921647f3bb2c5c3e6751a4524df9742cd7a1de8c4b15a43e9681ec81d472f06b6e41ea04fb464c377589fe5b0c829f8a1d0f3d2eb6d535618417b4a3aeb206276a5b9517520588c4e23708e6b1a27fcf04e679098c0eed01cc900316bde89582c88e393de8813a8c25c98f84045e480829655b939359a3a31204391cc4240bc282516e3a7b36ccd189b80c9e234e913f544634ef69c33ad4d0874f924f05a45017afbe1214ba3e32c19581edcfb45a96ca9e39d60d6804bfaa19af29ed5d3128e687a6cbba054e687b7ea14dcd8b38ce21616bd6922ca0c085c9dde393a5acfc9358511f97ad2ad789f599f0f54c2e8bff8fb77e1510d3f21d173c2ab50e85379018a94c61cced0619aaeca22d095fbd7a09baff5d01b2278447e0d3fa3433c796c7557c7fd0f54882d4150851a165ad60feab84d492364f690324bb50b8786212aa671178d3622e9170deccad2d077671f79148a029947e7f562f434838ca8eb2e844c1b8c3ff7b83e7bc8acbd4d09ce0519d4c6e34151a289da2a2bb3acdde12621961dda331f03277f0d6ac5e7d2c740be67cd0e0f7726370f3c0b6e82cabad9c55676d771da4100a5bd931d1da1b0cc51cef548369cbefbfdcef91886944ec7dd07ddd63a40e476238689690fa6bc2a506428999cb9b22693b06f723ca51aa27635a40928c98d63603b151984532ff438126a6543a41dd9e3c19a77799c585738ad3181a8e3d491d525f6782a756c883a716d49a300e581a78eafb33d8e586a539f3108902ce2fe813268601449be1fc2311d4806a13740ee75982e5fe05c246a0a97d0548af251c30f93b7bfd982d553c34ceb2560e1a8f0e7d3c3e15621a4c789cef1017a746f61763198fc52cd6617700e6a990231f2c02e2ecab3f68bdb69105d25f65d9528709639db6ef9b5043c91b0fe5d7cbed550d3021634ad5904954df0f39f2328d83429a6ec6f3cb9e012fcd943bfead5cea693c73b38c16ea974d7d7f4474c75d6723d2defed52450747bd629cf1a346c8516a2b606365c82b1878b945c01acdab0ca8891cc67daf881f267e5140b599ffa073efc03101767d9a1e57c52db91ec2da65b0756c1c80212b18667a16b6fb602b15edbcb1ae7502c3ea08b9112a89bf1c96e12b34d15ec8e9ebbf6013ec847000e169dc9f21d002964826e7aea0453a10e5405dac4af9cd348c81458e08a2a738c1c5c96811fde226e9f2c047bffefa28e5f097d8ac667285d611906a3c5102416672d716c9decbe0247c5cba32d9dec0dd4c769d8568a8abedc1513cd4e71b53bb4d7525828d2b3a51c3ee727cc4fd00264cf5fea9fddf8dc62ca6d47e76e377cef8da03906f086de525186998621e3ec3a51367130ad0d1c9452b16d77a3410449a865c843d26a658b619815a0789de9f110685eb63ed668c1341aab9bb827a16caf6596aa5bb17036f285cb6c243bd76ad5b352f7c67f54c8340e9c82120cb05258f6ecf32a15e67ae1f6e246223a3f877fdb50ba7ab5b9046c14d30c5669c38803fa0feeb8fa7c7c99e42ec2df67b9be948923d22d017fed6180f2cb3f52b4b0476bda4986c2037423e23b63d908cec0a03d0c83adb8ca8d91199e0e01b08f7fdbfcdd79829e87d33a8c7169d04293b2f81ae746ce2995f2ca9d2a40fa7c2b708d5d3934670ca69d8cef810ed697d7a1d8c8bdc39629b2c4297368249dada8776223d687a79246d19ed903921d27ac6409a5697323b3ac4c4bd4cc92ce589d835109a7b56e31a1863178bc2c54d8bfebe6d4e87032f0009fcc3c99082df1ae23aab92d49520b35b88be422cf258b8c1dd72c6d8399ca7894f80c1f69de3e3ba5ac1a4a78f7714a11c02a18e6c5024eef8b62db47cc8c08ec42f9b2e329226995ede0af7a98ef4dd34e2b7cd3f254241d6d3e14d68a61d412fc214881a1a2ac2150cb43ce7625879b5c7d05aaf5923201a5d303d6ef8cdccad0e387d51c97384c72218807fa164d88f214331807e9198ad16318b985bf6bb654e322c04d1fab13a5d27a9796f6a661d8cda7dc0d714eb53a05c222b253ea484870fa03fb30fc11af723dc9336b283491ca5d8da251f8468c6bfc1bd88b1806010130ce52b4c68f68ba792575297d3c4c64cf2ddd5a9624c7a650c1b2edd08e037057710a03d232c8c59bf0b4fc5d10c880c23519828e80ace51a08d74ad55ab4ddf2937012b3e8ca9d65c6aaf49d6c231938269dbea66979044f6174bc64c7a814a49c8506362d7d24e4adb49ee3fb1accf73ae16578b6b67222de34cfc6cd0240ea4961cc6fc1649f9ea7471e3471c8c94acd007efc65f9acea8e7ecb75b21d3b9a04df3802407ceaeb305b9519699758b107b1a50578438d0ac1a37862373e8baa23e568340208f5b2f71f992d809597c657fe88fd5123bdf0266e3a23fe0f72e0134e2ad57ade2768d918e336d2f0eee44ef86760c8260912fa7230bf5b0e14611506d721f58c760101b404d58becd4cc85101616ed99643299ab706179a280f188e5e6cd723b8d3cea4957a1a4eb73aad94cb1657e2f75c09ef601ba860e1febe2b23d27c6577ca48004cd2d28f8bb6705b4831056daed2ef3d11ac739707672d7cd917336456512ac22237db56f7809680d30d1424c58789d5029eb0ab7a4f4f1d0fd3e3ca04baf912fce453a1c05899acca25e9d5de810ffb988064663ae6235f75d6fa961a4afae65446fda67026449fae0c5de5e7dd059d63a5b54c1c2bb159ef80c90c7445a628e7c1921346348de32aba312e89cebca9a25efd653283165e7f34863cac89a2886f58ab8829e646cc3969bf1a02fc9bb26c9d09a65fac263a2617bf1d026b0438f9f657774728a12b282e9e295c3da61b0165647b507f00264f98b4e977445206fb696721be536ae108b93e7c0fcd6c29ef095dfcbc095f4a731800f3422bab99819a2b714b7f8a0f1dab2b52094b715b1ca75ff7875cc7e196f015c277ede0abbfa6d40cf7a2652492356422dae7961e5cd6c2a940ee7dbb594c428395c64b1716dccb2ddda8e9bb405c7a424a01aae44813cbd66ba1732d128043c199a25413a48f8c11bdd2f613538ab5f0e7b627869f0bd5c1bbb75712bf4a5eb4259d2571b7915030aef00f41ad3d96f556237cab6c34d27e2af5d16a5fccb59f001290ea64380838f912b7e50656f5fea7c6cf01aa5f087938abbcaf755409ba496de2b5efffe966ea64079011cb685f49ec7900a14645f728ea4717b013cc0c7d565a1c01c3c5bd3d4e51bc8cb27036fb6391a5dab53ace122fefa89d790526e487cc142e7d5b4e7088feff0e403dba68ca138802ec3d87c2cd6eab39f21e1b04c190f6209805c2301c113088dc0b5ad96fd5cf1d861cbd4ee90d1b0387d7161516799d51887e5aefd0f8c0f3593c460ec0ff658234a2736d8d2796ea8b23f386c0fc9509828f48a881764ca10f968f31c59f97f29463372f4e6045e1a0727852245b61904e7d140be14d563caca6e57e4c419694ca7f7882d4e8a8cacd13b6b568c85bf34129b98f5278d18755a5d8190afc830c94b063f94be1172f014041d1d6d2d23e85a88ea65ad49c3c5f0ef78a84188220a25e120566358546c6fd883c2f7de8d22305d5524e487f8a4467b3e12fcafca74a8e2662f699112c342201dd362bcc6c3edb552e81c30149792ed2e7aac4e635aa6dc6523b33d446d79c7f1912700eb3c90230e01d4ca1ecd6d4d031306d065b2f5675a7cffbf27beed6041ebcdff69b7ab00426866625f215d4db46b380fdd0810f08668b0bd1ad6006da12b5bc39c005c504a6816f2c5c22d0788478008dae1688cefb4f9cdea94dc36c565d815b2ee510c63ef2dc2d1148f5712588bac7d11d14dbb2f5a0b6fb4f5f80fe515dea987dd9884b851d26bed2a60095045c240131053bed774739b7c628c66a6cf8c709fc579f8f1767bdd2c06d5c1e3ffcbba045530d142ceb34248492670d91e805746a96ee4608a854fb13aaeff53df586d169c5818a3d06baa50c093e1cbec784aaea1088c3a7d59ed1607d610f787526f2bc00a012b01f0cdb887e37add3639755f45cedfd70378cb5faf93afa92fe81c7177ab97a19114a553afd31728328c49c314d79a6e869c3f658aac498f71458eb9cb8561d36ae968fac6773afca74c7f514a9deca7797b5d14fc95691fef6004a417485a6470bb9d6d9ac8387d4bf308dceda3d1d8a5630f0581123f8d4716ac5901202624c1587629b982b596e3c8550c3b32bc487b44c5553d31766f9b08aa1abab5fcab5497a5d6e44e861bf994d7bea73b98f81576fada1fe0eaaa7d6c35b189a14d0bfa63d7db84d10d31d317cecf580688121fedfa383b5fffd06e89af04aa41db397d04b6ab58c14f657f524514794284c1a33af1052332e9060719a472f8eaa3ba20bc7058b5d424c035269b5ec5e86ffdbcbd10179ea6b107540ec4f796453974ba4b9d2f4f36c59929fc15774a8090494359f0e537193b39338d0865bd9707fdb4559a9c4a27b725f185d4f73cd3c776b18204cb4280071eeab64fbdb12d0dd417a7f5a73eb21608794607af37c39c38d1ce87ec38eb232722853fb7be7123dbbb94663eba1c57b481c3b38ce2c21af551e72a9eb1dd3a5ba526d7177042dd9fb5987783e3867db8361c43b2a71e437a0caf0e3f3d28cf6d57ba59b717f14a87e0ca16e5d984a489e5ba34a4469383e5d4cc23c4aad0dc9d8695498abee1af437922c76f7dde83c5a0a2204818ce708c4fda759b053d949c5c498bc8fafb34e259ff4fcb7b6c04f8d974df0d096c463582d31ba4f490d55702e13f4fd82e7107c7041721d26eed468b33b0a3a3eee960304ac70e8120e6043069006de73dad00eab51d775488c35a29a6364b5f8c40bb0f5233d2ec666dec32cdd6c775e7363922b0c335ae1cf313b10ce1c5dd6b647e279d27e50397e8bb31bea4ccc757f71ed7aa995820d2c74b46c8859fe3015b31bff3270d4a27711b950d96d7cfded356b825452c825dab642474b928b9a96ad66940799084de3f63f1b1f161667224bd216abab3d02820e8f1f06d0d3065904bdfbab379cfd'
+ valid: false
+ },
+ TestSignatureVerifySLHSHA2128s{
+ pbk: '95ab9f808b34e34796c4f7b09c554bed61e8bb8800a12dda2fc80d0c45420c3b'
+ msg: '42f78db178ee85a9ad1131e87e4a0d'
+ sig: 'd9c0a55cc8c58bf37c8c2b5dee94415dbce233d9a0240d0a3260bf21d4ad5abdc47884ac7bd539806b36d34890ac3c19a9c048bc1c71eaeb2c21195dde14a2c811a68cad55b65198b7bd267683161de8c02e9368c2c648f5e83ab8c18c54a1ceee137b8bafa6544769fbfdea1e6d30c4abf38803af57120706ee25eb11aa744cce44d47b561b90b682c32a658a9e4393e9c3f6ae7b60b54ffb30f686e81ac0e0010e17311759a6d66565e1ca61f9ca06a2470d008590c50d87f70d36ed23f3039125195d60bc7803685d11dfa69a0ec11771df7be6d3c1cdf33f5517cd07e1d87087863a7039a3896af3e351827c13269bb42d601a8586a8dfa98c205be880e96fd2775806d2a02742d4ad55e1d067401a9bc710a0dbee443cee791508849e975c572e9dff01a9e3686c1c3adc2a9a5b10391e415f5c2a7547b6b24ee6b94bb6fc769abaf48db8ac0f21666d4f858732641d20d4b9c236cd5851da2e735e374395da78916ac9cffc147260446e8a08d9221624f4531339173ec7ef423d1eb2882b276aa3664efee703b319a599914f84005961fa569fdf1999ebc886c24e5527d4e07d5455125ffbe2fa00fb005054d9a4dc9d1c21b13254517c2bb05375fda9f7582c395b87fa4e7afac1eae6eb054cc7f3f79d20346582d4d06ff079defda9faea1c3873b8ad1a7f08a632c98f4d0ca1b7304a67c9cb2892be3b29591f6ce96266e234af6df22db20b6a96a41b467a333caf81eb60a4d0707769aba789e128be14814e2316195019be5606d2b6aa4421f15c653c7dd3a565f0a7fac375d17dbbe019482ba70b61481614cc03f8d38a8419d461fa7cd0c68626efee5de5d8ea80b4cfd72a2c560d1d6074769b93abbcf9105e0ab510cab584b2d3855b7e5f1ff4502b745148f7d2d34b9e2c778db5cf8aea866b9f63906ad875a1c225bf679a958887b28b32722f12d68fac1ffbe8ee0d3a44f2e3ee0c2567a8aeb811b6e92b87ac252a00cc725b9f6ee94d242201710e653f18738e98ec7c6c61875bbc81c3f3715ee67cc44b421e5e6481d4a7062a25468b99ffad9172031347aa86ea192d0e7f6ee6b070bddb72df1c872041bad6fe61acf71d1237ed12344a9035852ccc3ecb7343c2f189c75bbe53af2c7c9b8b644eae071579ccd7c156aaf1dec22c7d682178ed1f8e2b48cc22883c2ac63218e037241d88fba6adc0fc3abd6c56621276bf48517ea2056554510422209f7b580f4a11e1776df20d3cfe4db1eccb1c0f3c078af12a2cef84c4b0ebad9755f10f3416f78b027b95b40a0c1a7abd8c755699cf4763f74b6fb8c598cfda9d93fdb5f8685d466f2f9d8255b2dd643e4229d1258e2cf596a0a631ad6b68b0af8bbc5fb2c27d18b0d65346023ecab329e111316a1b757605b4b54dccf1d2f944fb59dabf1a69ef860f3847fb89b274a7f50dfade31f216a8b5936d2f8ad181a2f4b723c47509c3532f0bd40b01029239761119438c67475df231fbf428c468c2156625420c655fbf3b93d858064b1d5b7fa564276c3d19b09540406387c77ff95e7e0c14245a9cde6e14d3dfe52b77c30bf3b2176502468724fa47159f6feec63d020630ec6f79a6e21afe02c7659f56692d21728180922633e863e2df5114e1457403af56690caa28a88c28cb8c0548479996250f08147dd7b41e8a340f7b22bc406a9a7a72f76ac71cbd1377e953512637ce79cdab058e012a923e44d7f34ad3257053342ead7b42360b28db7d13fb52c32dc26c8b09707fdd022f440af5d1ba5e8eab4dc812553eb3f8f2cfcfef660f5256f3d643b44ace6167daa9e6e51656a29447b9802d0cb32ea5464baddfe972ff89942ddbcc2ae8d55d9107ff98579a9b59fd8d7f35594af3584a288f1fa30d9e378c8d4b6b2b35e1441fc2c679c5c4ac2bd7e7679975d073d4a15ecb8f8bdb27b18dce1e850cca6ba6d6b6969c161c52f2cb82b74272e4f8145e0c0e1a721e46f3d60af2886eab7c4368893adff3cdfe3a9f4a9f713ffb0314238120059b1754ddade3cfc757ff5f4db4a87c26f0e34aadbe7efcc63f21cadd3d20c30f810e0712a1e48b095cf6f36ffdbcf87e981db7d6295fcfdf20d72ba4ff991a8021ca77440040b51132a3500eff2724817d393f4222c11b137aa9669ec8f8fc599d1574134bddb315021cfd7f943ff295748776b709176731912d099d017a46bd70f61bc97f74103c3a3cdd769cd8f9eba34e32dc7e21cd64aa2c328bb45100f4f7f69cf179087d35cd87a5cc8973b1e02783e7b4d57c157768e94313a69e83014ef0ae1dda85d5778d5d0f40d3500c06be0793ca3b01419359cef3905b8e28d27f6c63e790bfa92eff37c105d0a39d559743c57b49ae2fc5687813e69521934bb6e4b565650a4181e1ce3e76a13089e2dd5527b83973e72ec4fda294148e353eb5c042863b3759cffc270f962cefa6770fdc9ab627d5f0aed88bdc6d166b11846dff032ef19c3f46eaa77882f83d702eab4a3adbf9613dd743cc2179defda22313c22d19b46338324b63b05bc3e75954e87a3b697358ae0c344031792e126b2fbf2d9023661d0a907d84f126df5760d010371eafb3e38287f54e1034933aa577e8a2ef9b242507e51e6e64e7186e36743d6c0c6e34a8c7f34dca046a9b8c4775abd04455dd6812fd5989bcb34cab2ce7e014e695ce86beb8af90440623e504e014b9e4eb9cd9e1e2a7d4fa48beda9f73e2ba812b130bcc970f4b0014b8a4a60635fe72692f8cc843743f3972c08cc988c3478b4f6993e9c3cbb89874dcacbc7d6d3d58c56357cae0343350b18d925707066650f98c3b2359e085d47f602d50f29ea0d2016f5a67c196288e9eb316f8d48c339fa196d160a93ad0191b5a33eb7885ecb6c8d502b3d96c9ebf8b7ed21d41eb4fc7dea758fea8dec14fe2137418ead09d4565ccf097437ff6388091e3fb73947ebd1e51e70a0fb64fea99233ffcd7a9b2fe594d9369b2f90b583c62ed80a8b778e7f69d7d5705c7603dfca9f18f0230637bdd6947aadfa835f21aeca12aaa1e4203f95457ae7b7e0bef97540205a6242adf32a93b361a6fed0f1a0326e50d9974cd0935a882ff78a7cc8d8db36a170553ef4ef82eb8429a912c0eb73bf5ba9060fa4d7ef089d41e320b30f23c9340e826a54548257e7036cd7d1feed64bbd6d44baba1de09ac540cb558c50062c41bcb8eb942eb921199bbc368be47ff9edf4c689313441a30b3deece5a3931bd67f35a1b0f2b462abd98b7e21ae28206f6ba35367f94bb2551479bfb8d55776f1b22dc537fa3b94471c2762a2d5cae6a6a1fe375a5dd99d89e37dc0dde775620d1ade011675c5e82a3223472c6b481fab153fbbd1b686337f5e85fd58df835806039253ed2414d32dba8ebd89caf7eff1466a69bfdcc2905a9956017509007dfaed4c268c062defe70ceb1d3d74e8bcf03c3c1b3cca572e7cc7aff07d8ef6c269382f37d3489edbf2177afca9b05b548f62deee2bc2684c7f7aa15f5a4ca1b4b96f43957e38d63f1e4aa2001bd0d56bd81c4bb6971255a804a6934a2864da0faa590ac8e27db38d1bd6a6494c65fd833f2f5a51b0dbcc5077ffbc48e598bbc1f70905c6ce0fc345b67c4ac011c4b5164bc7115ebb52cd15999e1ff259eca6e339e6ee269c3e01bb5fb70f1e77ca00143b97e8190c114affbf3ee181e2c9dfcfe95a4c94c067df0503e1a203cdbd3e47b0c26cdaadc584029f90a29e7431995b8838d8129c7e791d997d356dc72a4de9efb2112353bae03d9d15aad7c531e487722f575475ae4b561e1e7ce52db485d04747f25a9da58185d1246fca6f66600b6d32d7b8e7cff8f2e6b418d638aaffc15ea50ca00c4f97090618c9e0d853be03c1f65ffad03ec8e82b887ef17a3f9f61f525b4ae36a1e06d117e0ea32689c3bfe51156607475431f651b3543d497357b3bac73d32af9deaf7e3c32b0bffea2b5380e4f4e34483b388e801e6f8c5743673b29c4cbac56d0689e9042977efdc65fb22f120985e9ea52ad26f2dced4e4e31d8cf9a8e88ef21c06450b8f8451c4e5d77458760f1f791d630430d879cd5ea610ee6e87bf6a7b6088541505d5b7e68e72920ba534afe09b0e0ccb10f87149696c6f4d09f74ffcfc5f8603b2c7aeec1ce4c3fb0cf013ad6e99df160ba2662e4812784862dbf7ea131b7623b0fbe38fd280330e93db74c68932e1a2b6dd81cac34b03ed49348a6b17b2df9fdfd07e1fd4bf42bc92b15652bf28ddac2690ddf2b99b50ec234f5ce96bf20ecc80ea6bf8cef5491919eefadb8b9db1dd305ebc2cf0cfc1aae317dc4639c40e8284d6002bf0cf4828c11b5e65e737007d17810dde44460db326f87ff878caf271e4256b586f6d74a1ae9db75bd4883a9525255fcaae8216eac407f1b5a9c54819647e0641b6d55afcd921964313f747a3a93fde5eb56acd0197380cb8b04302b26e174127a7428a992b4d528a637d57b301fd125b359742f8b7e36a6cc57753fe79b8a554cd2cd3648d6235a90c85f8856ad92a2e3b6a1b9d00069b2ff7fa16f961a5e663a9e6ee88b1b92c6c89fbeb23cfd581901e23df1d34aed5cea1388d6feb317fe92e5356d91b1b21b69cde5c150cb6d64a47de0d2be67b8791d54f1199fc5a92c767391424dfff6d0746b55551f792ed4e58fceec4d4df6b3977cb5f6b155e55cf411465178cc55661697776b3dc63cd5a3482ef01f7d8bb9c833ff8f06a761e6929e4a1bc26628a037f6e251aea89bf1da559ab2fe649f0c04d0aafb7c0b220a33eb3a14a65f04f7a8874b9b0bdbb826b645db93e931e9f2cfdd5ce27f3d5f310800b755faef2d6c50e61ed6e53fe1cae00e2153e2713d93aec571a156025ed84047b2669c4524a3977f2abc6376c6735ff4fcf52c43152c6fe0bcc9ad600965163cca5c2aecff29b772a6d668830f51c261fb4a4d890d53fa8b25aaec67810930761c458d5af8092511a74e6d2eeff44506abf16858fdbfe377e90823a97816be0f1bee1fe5d1df32ebd71e2aedfd8181dfa19b1ae249b720d9f7aa2fb2f43a59d3eacf9f9fc2f0aafeee31389cecdf737b84e6a87fa89293231642ab174c966778fd0294a5a8a8be003f0dbd33e17e79e57ef25c81662ee4a2080d1803107318fd52a769038df0aaa6a14993358fcf4cdda1b95f4c180736b0cb4107529e3ca0e2005899a32f3b43647a13189737825948bedce03ce8359be52f978d293f79c0056eacfd0734c0f2d88a00e83f4c90ad4040ce32eed9b23efc38587ed67b9f6c26797aefba9d8704a70509071fb7733516094d1f823dd119660f77bdfde1ec54d7485bf6e35c9766d6476ec28dc9c12675e7616bf4f0f696fe399c85c658153cb0299ecaffeb092068164fb117f47b10fa4de99eee2b54f21e5f93389be1e95cc127974befcc43656477f672443f46a9cb35341cfcfebc1f9e195583a65b3320d583ad93cf75adb3c5cd9e96d31e35056f8b740b0070aabcbb088058cf965976caa110c6d6ad727425d152eb73cbff75f5ed5e8ee056539f06073612e80db94b6c535d3cf9fe0c8b0c11abd6c9123d4c59d4a4d8eea6bf018bbf302f6324b2afc6bba7d21781364cb6f48aba971f84f8abc12a544ebd9f644580f19d726d57f808e76a7b3e74028121cf2d25ba16c041d46e20540f32ce7ad723ccb9955dee99c56c5e1e378812b8090827ce4fcb5184546f1ab6887d30daf87b6f53e8493078b2889c1885d2b1651675aa25998604dd1a060e9f0785d902c806f15d20b17ecd55ec9fcc224eb5192c5a6a3c8b99a045f314efa9bdb0e0c55b2a9afea66fd75ee0ba10bf77d3df9ae322bd094bc6070bb82beb0c71542d60fdd5aa0ee2d5e9dcc436561fc0384694bad4619ac1122205efd9b4c84ff56ca1ac75d2a7a3ee6364b067b2c2d0cd5565a118f8af7628e946b664e863197d91c7d061a1a3b763c4dc8cb05fb32c7e91ed04b732dd261a550bb104f67cad7d71741d3ae985a5ede593b9fa0ceeb98f08363a5c899738f204235703e9e022621410dbcd5210fe4e93a235da17890c722e595a91b74baa5c1814e9a29dfe6114b3345e17ba35435e07b8a4163807a1ba25087215600c439b2fb2e5dd105ec9c72caed04ac67f80f982ea2f0468d1ae01b6a9f3471b16f9da7dd953eb6539de7737621cc6e0f6a95353057fac556ecf9c642d2a1f62e599d72092ef05bb32f14e1efb140ae3634dd0532087e01ab550f73bc2438e3c3e0af0d21fa69404786ad3c3bef217f618fd534cbedf150cbdaf00cf3ce1eeae35b5d9b915c27dfcea51955c558bb2fff172336599cfd2e8fa7940aabcaa06246f3a8bff6b4e74972a8db9aee633dc31c500c6904eb993002ae08398e6762f74248b39f0e2066205570117c5019d92a7226d46775ee2f39b0ac6ad38e49d41f04f82580dd7e5069b00b4112b79a74863020c2f25b727f1ab837f16e7eb1ad445a1705fbe5903aa1e92dc23844c874556dd4a126374846516fe699d42fe0f42fb6f0ff5f3ed15135a3e2525a37a991693bf4f541f34b1560364b02c7d5bdd9095a42c0412ee3edb605e2dc22a6a10627f4607bced494c68d96976b05c163550e3bf1ef17a496159c224e0fb43cffdb3e8e6716c20d852b3d6920e492d663f6f87f333e7264e08d8261ce4c0e09b48a47eba9221637cf43b227977105078921baca2f02afb0c33834f63074e057d190e4846b2582b3966f9f3db8c0288e4ad8489eef8b9e53b8cfa501fbc246962b256c0c0391d1879ccc3e890837daa80188c7f9e2bc5b973d85e3ebae5d8f3b3913cf04158d9dfd1375a3162a1234037b3ee3d57596c53705eec97f9a70db4d762785016cb6e45774215f6742016052a3c3eb7b062bc125da66dfceeebc95becd43eae2595df3cbf76af7df2ae7f743231f884160f77bb60735d9b7a1a1ede297ca3bbf329459447a52f92878c7d433cb6a0f48b1eb8e87f6e68e58fb77fd58c78df67f5364a95468246e1a2a4195043ce478253f200c24eae473a528db7402d20f45dfe9d21c982cb06d792d308bb24b7177e151b8499136a9d3ecae13e715aa1565f05b39cf440d2ae65c4eb798181a78bcad2198b6f0f5631aa99441fc81be48e725ea17c4924b044a9b1edf88d0c2b8fa273b6d4ba1e465224a9fe24ed93fc5d89afdeb1a856a41d21f87c8b15a0b78cab6b31e5416b1e4d070e32bb1ddcad6d09058c9fdd683b8246653dc3dd855e2eafeaa11d3529841e622db8b7577a8a7038e879aaac20139e8b913e4d1528b5974e3bc64ddd57318b30ba73aedf1bac01f30dbd1055a1364700df20fd820808ef96167bd72a5cf438f0010c77a39f1c0231d9cee4887cd5965c95e8b4bf4bdd68905eefd99e0fda36d09df04eb6892e1a4bc179b4fc6b02facc7f4ccecdec3687bc14a5a8fb21129e2a6b668c86aa60f58447ceeddc18700a5c255951d6016db68468918774141c2a7090f50ef1c4a628f07c678aeb56b4cc9fe139aa13d9d03932455aadbb7a232565103af63a5e62a55e1d0875391ac7c8839287fae2d1a2d89107d81f7433606aa16613c62f46b7dc09a8b75b0e9a58f96ce01a75aa57e102801a29294c975eb41624b91a2193a462ff9e3b42cc7529b5180c28d68ea0989ef21288c8216fde2eaddf82b6ee9f15f3b04cbab660e923013ba26520a07ec9210d6843d489a95d389442e840cbe3fcbdb4c5a7f4957ea36c7ac931dd31c67699778a3eab136ccd4f7fa585722a1b56e060d1f8afea5ec47660ec5370712fb5c4fe269f63306ca9e6b47b33a779cc51333e1e5b5443904a8881cc99a65ac2c792b24d8f189fda697a910cd5bdb8396e6491a8757e18986fde13fec8f0e16d961128061a3c4cb825ebcb92f8dce794895a8549f4c870742ae84f91ad41aaa2066c28becb7046682c293f27ff76994763977f4caad24d8fcc1599682d2303b43298cfdb413fa0e92f88f63b1492918bf9183e8f806c207a6d43a27d9d33db67386111058fb6145b6adb9e78d81372c0bfb313b2b0ef1bf7cc56e6414e3753f93d1e358fcaac3d5ed70274e68b4dfa8a6ba853c981b973d637dc3440cd559540f4d7d499cb0e03d98bcab7dfe9ea4edc51ea01287df11cbeaf49687eee25a9d75a77a3b20b49796e27424c6bc42c42baf9f5e6576eb3ee438bbe777253484f43a887f2a45b489874f70c2cc86d5e9ae2fe938854fdd99b4281da4cbca9b55c0d9622dff3ec976442ed472077f03a88e5244c74966862cb63ddea5958cee9096802c33cffbf498158df87031ce758def9413976f514f9dc0c0925b23b1b9083c198f9baf5bd6dc239752300d4957eafb8d71db8a002772fbef7ea71940e5ce21ec5b1cef18e8ab5629aa3b37d84fe03ed30439a9e6c57a1c24692bb23a4dc8c45497587d7afdac24a36a8ae76d3cc55e89db8ba22cf8d40cdb01251f0b735ffb055181e74161a54070a3fa96cabc6de98127d26ef61941e312af7d5e14f2d785c79bcccedc06dbd1f929da920d407c488cbc3ee4fcf8cd5d05ccf9c2e60630b4c64b0d4582809e1acc5b793988925fda601195a082c4e7f1eb1b0530b5f30d878ed2bf02f46c3d9450a9da830084fd749de6d4241b7a2fce094d7f8960764b2df40b6e4508de5468e7b9f6269279ddc9e473ef08e971e4ecdc1ae202175e45db1f50101735ab896a2e0fab2580012494bb0ea9ec6e3b862a48f2715f79855e49b27eef1a5ad39bcec663a0801de36418de46757c44c0229f6cf06d2d0ef43a2302eaf6d15d34e57e52900c964b67680617d627d51d1458078d8a9c29d82d1d07cb169b869083af99ee3a782639fba0dbff746d21eec2ede26321739843799b6d0ac3dd30bf9f4ba1fa98a0bf24e2440941609b2412e43b4110a950d3b99bed938753ce885067c5ed5dafda65d81ac2a131e6cf502aadec2fe73f08a1385c8fc113670e36ba6fa0c8f6ba13f8d48d93d1e43423d493d19c89f9129c43f2653ed0470e074079a75cdf4607e6c3ef970dd08524dadef29a617decf83a34dfc65eef856bd7dca2ee062ee7394f206c90c83e13fa2d3bb3aeae2704132f5eef66a4f859730a6d371cd212e0abdd95420438fc3e20e7644aed9a7671059ade080207344492f20ed2e1eed1913a2a8a94c95b643ecf37064568b74b134bf4f063b346c59c4d796f0381dd98a2343b672e3f7580dbdff66af56f02fc4215ea947948ae2329a23b60879554e2acabf89e75495fbe0273468da38d0d867c32830c928a487404f372fcaacb8eff5b7ccced7aa154d3600d5b2631cd10c55eb499b74a5e4fcb8a54b4995f9de6af76265e8ab913a1cee04e9cb9b8f5fb3b34a4f7c444d70ff6e74e38734cc8f95160d4313d4b42e2ba1648f05ce73e34a11f5271d0e31e401906f0a6cca385f32362c61d4cd305c5d060380a5f77c058aed0dfc83ab1df2d6a23efeca91e93b04c1c8fd9a004a9213cf437bc098520aa33e8422435257b658a4ae955ad234dbe1a3383c5bebbc2e8717f75e99d58e9b5c2a2e4203a8993d3093caf19fef0e27644dbf01b838fad87f75727e00652c761e93267224421e5fcd4d16f2460517dec0bc3349b9ff5b66c8f8f2f7cfcc9d87029488854c3e23979d5838a407df8396d57c9962120487425f2be05659671d017ca9601d2cba9c890a5da985fe5613f86e4a8faa440b7c68c59202095f08bd97c7ff25f42fdfc3601de98579d0d082420f8fc1e6cea7095f95a364e90559000b879af34f9a8ecf3e45caac8ecef0026e04d293822c2457cff126da6e71a8775c0a02c07afadba6131289747abc63dbf39468f960769d1c9314b427457af1f269e60d6522d8067d8477f2d458e0e6eb5fb2e111059252bca8fe3439f003eae1e818f4474d482d46b488393e813c16f89b7964c67ce88fc7c36b2e36c35023bc6dc09143e9abb9fc285ae6eda897e3a8e966b2510ce585b573846bd2a7621c5a8111a4df3a8b688fd053bcb2d28b08668e43dcb8f36ae4c134fecce3b4cd0e3ae631798fc6bd7bf89e82e45480b47f3af6982d03a63e6f61e70d74c33b3f42f069b8d2a222a0d38e4920da34ad3f70586a7b833c960251ff1ae90a1eace59c40220c17e6d9eb00f66d7f39ef15d9b55dbe47c2131ad1e6e10078fca2041bdadd3d8010a4c2fa58b43f7f2333a4dc8ae38fdcab8317ff72a441a4e34fe0db7358fe5881933e7016680980b6522d51f6762e87052b1d9f4cf627dbac1e4de98e270fa80195fa2be5b543f3a64558bcdf53e8016da134a74784a73fc3abc8dbe588ef1e3cacb3f447372c6675e50db0983d2f8bc1ee4bc4a5624bb7ed601d77c6b842a534b19842ea7f82efef7ae4595813561adf475fc24ef949cfbfda6d240aefdfdda79f954f9f7c641078efd593b8b46e216c0108893215c2d03a1da142701f76c7bcf2f06ba5cb215d453a801a36ffa3722460afe2311f751bab81575a7e7708bb4b46836a435947e4b174fc0887bef0d96f761c7b77920e968269fb3046b2255f19738b723e8d5a2f877edf103cbb58551af97bc944380694db5585506484cceaf0a2949fe85a48395755a9e43c974b40ef315fc8320f0ea0db65c9986b48a68d1c7fd9fa118171194b09ce22af4e9ccca0081162468c1a57ba8cc3746e52d172699793082215db24609ececc85750d80f850f3993126378071aa892454d3dd14654d82574d8ff9e772cdfdf847fb2113abd469b2d5989b83ace45563cff83277d5219442e45d1da29d6434c029fe15cba89d6a32a3183a229b6ca46c6ba3b862d6ce7030e601f857c22bbcd9563fa26fa0b8dedc3a0bd0605a6e49ac1512dd922b89aa6af5cd7ce788d4e4e3ddcf49bd09bad4de2c935b0e72e925a7caf49e33d99aba612dcbd1de09e601f99c614b4153ddc4c0ea1bf09b1dc404ab19b654c5ed6057af4e1875c458452771137523e9dc643307f205c5a3bbaac7e035d972de5048bcc8f730ab7ee92a0a4655009e5541490ba44afa31a4de11fb0a42682719ddf552c68a53886c21026f67b1811b2d7624f190825ca34b49eb51d45e0f408cdd029fe00c3fab0363fc326e90056d294d718a3ddc975a9aa'
+ valid: false
+ },
+]
diff --git a/vlib/x/crypto/slhdsa/usage_test.v b/vlib/x/crypto/slhdsa/usage_test.v
new file mode 100644
index 0000000000..224b7e59e2
--- /dev/null
+++ b/vlib/x/crypto/slhdsa/usage_test.v
@@ -0,0 +1,28 @@
+// Copyright (c) blackshirt. All rights reserved.
+// Use of this source code is governed by an MIT license
+// that can be found in the LICENSE file.
+// vtest build: has_modern_openssl?
+import x.crypto.slhdsa
+
+fn test_slhdsa_basic_default_functionality() ! {
+ // creates default key
+ mut pvkey := slhdsa.PrivateKey.new()!
+
+ // example of message
+ xmsg := 'Sample message'.bytes()
+
+ // signing the message with the key
+ sig := pvkey.sign(xmsg)!
+
+ // example of public key
+ mut pbkey := pvkey.public_key()!
+
+ // verify signature with the public key
+ verified := pbkey.verify(sig, xmsg)!
+ println(verified)
+ assert verified == true
+
+ // release
+ pvkey.free()
+ pbkey.free()
+}