From 89da411981808437f094de2682e70ee8d7e44d52 Mon Sep 17 00:00:00 2001 From: Emanuele Cesena Date: Mon, 11 Mar 2024 21:37:54 +0000 Subject: [PATCH] ed25519: refactor --- contrib/codegen/gen_wycheproofs.py | 153 + contrib/ed25519/dalek_target/Cargo.toml | 11 + contrib/ed25519/dalek_target/Makefile | 19 + contrib/ed25519/dalek_target/src/lib.rs | 76 + src/ballet/ed25519/Local.mk | 10 +- src/ballet/ed25519/avx/fd_ed25519_fe.c | 704 -- src/ballet/ed25519/avx/fd_ed25519_fe.h | 193 - src/ballet/ed25519/avx/fd_ed25519_fe_avx.h | 322 - .../ed25519/avx/fd_ed25519_fe_avx_inl.h | 836 --- src/ballet/ed25519/avx/fd_ed25519_ge.c | 657 -- src/ballet/ed25519/avx512/fd_curve25519.c | 186 + src/ballet/ed25519/avx512/fd_curve25519.h | 146 + .../ed25519/avx512/fd_curve25519_secure.c | 127 + src/ballet/ed25519/avx512/fd_f25519.c | 13 + src/ballet/ed25519/avx512/fd_f25519.h | 221 + src/ballet/ed25519/avx512/fd_r43x6.h | 10 +- src/ballet/ed25519/avx512/fd_r43x6_ge.c | 674 -- src/ballet/ed25519/avx512/fd_r43x6_ge.h | 47 +- .../ed25519/avx512/fd_r43x6_ge_dmul_table.c | 41 - .../ed25519/avx512/fd_r43x6_ge_smul_table.c | 105 - src/ballet/ed25519/avx512/fd_r43x6_inl.h | 17 +- src/ballet/ed25519/avx512/test_r43x6.c | 7 +- src/ballet/ed25519/fd_curve25519.c | 270 + src/ballet/ed25519/fd_curve25519.h | 253 + src/ballet/ed25519/fd_curve25519_scalar.c | 360 + src/ballet/ed25519/fd_curve25519_scalar.h | 180 + src/ballet/ed25519/fd_curve25519_secure.c | 144 + src/ballet/ed25519/fd_curve25519_tables.c | 958 +++ src/ballet/ed25519/fd_ed25519.h | 30 +- src/ballet/ed25519/fd_ed25519_fe.c | 10 - src/ballet/ed25519/fd_ed25519_ge.c | 66 - src/ballet/ed25519/fd_ed25519_private.h | 142 - src/ballet/ed25519/fd_ed25519_user.c | 921 +-- src/ballet/ed25519/fd_f25519.c | 143 + src/ballet/ed25519/fd_f25519.h | 257 + src/ballet/ed25519/fd_ristretto255.c | 235 + src/ballet/ed25519/fd_ristretto255.h | 137 + src/ballet/ed25519/fd_x25519.c | 371 +- src/ballet/ed25519/fd_x25519.h | 32 +- .../ed25519/fuzz_ed25519_sigverify_diff.c | 102 + src/ballet/ed25519/fuzz_ed25519_verify.c | 2 +- src/ballet/ed25519/ref/fd_curve25519.c | 249 + src/ballet/ed25519/ref/fd_curve25519.h | 226 + src/ballet/ed25519/ref/fd_curve25519_secure.c | 151 + src/ballet/ed25519/ref/fd_ed25519_fe.c | 601 -- src/ballet/ed25519/ref/fd_ed25519_fe.h | 397 - src/ballet/ed25519/ref/fd_ed25519_ge.c | 507 -- src/ballet/ed25519/ref/fd_f25519.c | 28 + src/ballet/ed25519/ref/fd_f25519.h | 326 + .../table/fd_curve25519_table_avx512.c | 2407 +++++++ .../ed25519/table/fd_curve25519_table_ref.c | 2792 +++++++ .../ed25519/table/fd_ed25519_ge_bi_precomp.c | 48 - .../table/fd_ed25519_ge_bi_precomp_avx.c | 112 - .../table/fd_ed25519_ge_k25519_precomp.c | 1354 ---- .../ed25519/table/fd_f25519_table_avx512.c | 66 + .../ed25519/table/fd_f25519_table_ref.c | 66 + .../table/fd_r43x6_ge_smul_base_small_table | Bin 49152 -> 0 bytes src/ballet/ed25519/test_ed25519.c | 769 +- src/ballet/ed25519/test_ed25519_cctv.c | 6418 +++++++++++++++++ .../test_ed25519_signature_malleability.c | 6 +- src/ballet/ed25519/test_ristretto255.c | 518 ++ src/ballet/ed25519/test_x25519.c | 23 + src/ballet/ed25519/test_x25519_wycheproof.c | 3127 ++++++++ src/ballet/fiat-crypto/curve25519_32.c | 1565 ++++ src/ballet/fiat-crypto/curve25519_64.c | 972 +++ src/ballet/fiat-crypto/curve25519_scalar_64.c | 2049 ++++++ src/util/fd_util_base.h | 28 + src/util/log/fd_log.h | 4 + src/waltz/quic/tests/test_quic_client_flood.c | 4 +- 69 files changed, 26079 insertions(+), 7922 deletions(-) create mode 100644 contrib/ed25519/dalek_target/Cargo.toml create mode 100644 contrib/ed25519/dalek_target/Makefile create mode 100644 contrib/ed25519/dalek_target/src/lib.rs delete mode 100644 src/ballet/ed25519/avx/fd_ed25519_fe.c delete mode 100644 src/ballet/ed25519/avx/fd_ed25519_fe.h delete mode 100644 src/ballet/ed25519/avx/fd_ed25519_fe_avx.h delete mode 100644 src/ballet/ed25519/avx/fd_ed25519_fe_avx_inl.h delete mode 100644 src/ballet/ed25519/avx/fd_ed25519_ge.c create mode 100644 src/ballet/ed25519/avx512/fd_curve25519.c create mode 100644 src/ballet/ed25519/avx512/fd_curve25519.h create mode 100644 src/ballet/ed25519/avx512/fd_curve25519_secure.c create mode 100644 src/ballet/ed25519/avx512/fd_f25519.c create mode 100644 src/ballet/ed25519/avx512/fd_f25519.h delete mode 100644 src/ballet/ed25519/avx512/fd_r43x6_ge_dmul_table.c delete mode 100644 src/ballet/ed25519/avx512/fd_r43x6_ge_smul_table.c create mode 100644 src/ballet/ed25519/fd_curve25519.c create mode 100644 src/ballet/ed25519/fd_curve25519.h create mode 100644 src/ballet/ed25519/fd_curve25519_scalar.c create mode 100644 src/ballet/ed25519/fd_curve25519_scalar.h create mode 100644 src/ballet/ed25519/fd_curve25519_secure.c create mode 100644 src/ballet/ed25519/fd_curve25519_tables.c delete mode 100644 src/ballet/ed25519/fd_ed25519_fe.c delete mode 100644 src/ballet/ed25519/fd_ed25519_ge.c delete mode 100644 src/ballet/ed25519/fd_ed25519_private.h create mode 100644 src/ballet/ed25519/fd_f25519.c create mode 100644 src/ballet/ed25519/fd_f25519.h create mode 100644 src/ballet/ed25519/fd_ristretto255.c create mode 100644 src/ballet/ed25519/fd_ristretto255.h create mode 100644 src/ballet/ed25519/fuzz_ed25519_sigverify_diff.c create mode 100644 src/ballet/ed25519/ref/fd_curve25519.c create mode 100644 src/ballet/ed25519/ref/fd_curve25519.h create mode 100644 src/ballet/ed25519/ref/fd_curve25519_secure.c delete mode 100644 src/ballet/ed25519/ref/fd_ed25519_fe.c delete mode 100644 src/ballet/ed25519/ref/fd_ed25519_fe.h delete mode 100644 src/ballet/ed25519/ref/fd_ed25519_ge.c create mode 100644 src/ballet/ed25519/ref/fd_f25519.c create mode 100644 src/ballet/ed25519/ref/fd_f25519.h create mode 100644 src/ballet/ed25519/table/fd_curve25519_table_avx512.c create mode 100644 src/ballet/ed25519/table/fd_curve25519_table_ref.c delete mode 100644 src/ballet/ed25519/table/fd_ed25519_ge_bi_precomp.c delete mode 100644 src/ballet/ed25519/table/fd_ed25519_ge_bi_precomp_avx.c delete mode 100644 src/ballet/ed25519/table/fd_ed25519_ge_k25519_precomp.c create mode 100644 src/ballet/ed25519/table/fd_f25519_table_avx512.c create mode 100644 src/ballet/ed25519/table/fd_f25519_table_ref.c delete mode 100644 src/ballet/ed25519/table/fd_r43x6_ge_smul_base_small_table create mode 100644 src/ballet/ed25519/test_ed25519_cctv.c create mode 100644 src/ballet/ed25519/test_ristretto255.c create mode 100644 src/ballet/ed25519/test_x25519_wycheproof.c create mode 100644 src/ballet/fiat-crypto/curve25519_32.c create mode 100644 src/ballet/fiat-crypto/curve25519_64.c create mode 100644 src/ballet/fiat-crypto/curve25519_scalar_64.c diff --git a/contrib/codegen/gen_wycheproofs.py b/contrib/codegen/gen_wycheproofs.py index 554f6e3de9..bbec6ce873 100755 --- a/contrib/codegen/gen_wycheproofs.py +++ b/contrib/codegen/gen_wycheproofs.py @@ -95,11 +95,164 @@ def _gen_ed25519(): print(r"};") +@dataclass +class XDHVerify: + tcId: int + comment: str + shared: bytes + prv: bytes + pub: bytes + ok: bool + +def _gen_x25519(): + req = requests.get( + "https://raw.githubusercontent.com/google/wycheproof/master/testvectors/x25519_test.json" + ) + assert req.status_code == 200 + file = req.json() + assert file["algorithm"] == "XDH" + assert file["schema"] == "xdh_comp_schema.json" + verify_tests = [] + for group in file["testGroups"]: + if group["type"] != "XdhComp": + print(f"Skipping {group['type']} test", file=sys.stderr) + continue + for test in group["tests"]: + verify_tests.append( + XDHVerify( + tcId=test["tcId"], + comment=test["comment"], + shared=bytes.fromhex(test["shared"]), + prv=bytes.fromhex(test["private"]), + pub=bytes.fromhex(test["public"]), + ok="ZeroSharedSecret" not in set(test["flags"]), + ) + ) + + print("/* Code generated by gen_wycheproofs.py. DO NOT EDIT. */") + print( + f"/* Generated at {datetime.datetime.now(datetime.timezone.utc).isoformat()} */" + ) + print( + """ +#include "../fd_ballet_base.h" + +struct fd_x25519_verify_wycheproof { + char const * comment; + uchar shared[32]; + uchar prv[32]; + uchar pub[32]; + uint tc_id; + int ok; +}; + +typedef struct fd_x25519_verify_wycheproof fd_x25519_verify_wycheproof_t; + +static fd_x25519_verify_wycheproof_t const x25519_verify_wycheproofs[] = {""" + ) + + for test in verify_tests: + print(f" {{ .tc_id = {test.tcId},") + print(f' .comment = "{test.comment}",') + print( + r' .shared = "' + "".join([r"\x%02x" % (x) for x in test.shared]) + r'",' + ) + print( + r' .prv = "' + "".join([r"\x%02x" % (x) for x in test.prv]) + r'",' + ) + print( + r' .pub = "' + "".join([r"\x%02x" % (x) for x in test.pub]) + r'",' + ) + print(f" .ok = {1 if test.ok else 0} }},") + + print(r" {0}") + print(r"};") + + +def _gen_cctv_ed25519(): + req = requests.get( + "https://raw.githubusercontent.com/C2SP/CCTV/main/ed25519/ed25519vectors.json" + ) + assert req.status_code == 200 + file = req.json() + verify_tests = [] + for test in file: + flags = test["flags"] + if flags: + set_flags = set(flags) + ok = not(flags) or set_flags == set(["low_order_component_A"]) or set_flags == set(["low_order_component_A", "low_order_component_R"]) + if "non_canonical_R" in set_flags and "low_order_R" not in set_flags: + raise Exception(test["number"]) + else: + ok = True + verify_tests.append( + EddsaVerify( + tcId=test["number"], + comment=test["msg"], + msg=bytes(test["msg"], 'utf-8'), + sig=bytes.fromhex(test["sig"]), + pub=bytes.fromhex(test["key"]), + ok=ok, # we implement dalek verify_strict, so all these should fail + ) + ) + + print("/* Code generated by gen_wycheproofs.py. DO NOT EDIT. */") + print( + f"/* Generated at {datetime.datetime.now(datetime.timezone.utc).isoformat()} */" + ) + print( + """ +#include "../fd_ballet_base.h" + +struct fd_ed25519_verify_cctv { + char const * comment; + uchar const * msg; + ulong msg_sz; + uchar pub[32]; + uchar sig[64]; + uint tc_id; + int ok; +}; + +typedef struct fd_ed25519_verify_cctv fd_ed25519_verify_cctv_t; + +static fd_ed25519_verify_cctv_t const ed25519_verify_cctvs[] = {""" + ) + + for test in verify_tests: + if len(test.sig) != 64: + continue + print(f" {{ .tc_id = {test.tcId},") + print(f' .comment = "{test.comment}",') + print( + r' .msg = (uchar const *)"' + + "".join([r"\x%02x" % (x) for x in test.msg]) + + r'",' + ) + print(f" .msg_sz = {len(test.msg)}UL,") + print( + r' .sig = "' + "".join([r"\x%02x" % (x) for x in test.sig]) + r'",' + ) + print( + r' .pub = "' + "".join([r"\x%02x" % (x) for x in test.pub]) + r'",' + ) + print(f" .ok = {1 if test.ok else 0} }},") + + print(r" {0}") + print(r"};") + def main(): with open("src/ballet/ed25519/test_ed25519_wycheproof.c", "w") as out: with redirect_stdout(out): _gen_ed25519() + with open("src/ballet/ed25519/test_x25519_wycheproof.c", "w") as out: + with redirect_stdout(out): + _gen_x25519() + + with open("src/ballet/ed25519/test_ed25519_cctv.c", "w") as out: + with redirect_stdout(out): + _gen_cctv_ed25519() if __name__ == "__main__": root = Path(__file__).parents[2] diff --git a/contrib/ed25519/dalek_target/Cargo.toml b/contrib/ed25519/dalek_target/Cargo.toml new file mode 100644 index 0000000000..c86ffa295d --- /dev/null +++ b/contrib/ed25519/dalek_target/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "dalek_target" +version = "0.1.0" +edition = "2021" +publish = false + +[lib] +crate-type = ["cdylib"] + +[dependencies] +ed25519-dalek = "=1.0.1" diff --git a/contrib/ed25519/dalek_target/Makefile b/contrib/ed25519/dalek_target/Makefile new file mode 100644 index 0000000000..ceb7f7d7df --- /dev/null +++ b/contrib/ed25519/dalek_target/Makefile @@ -0,0 +1,19 @@ +RUSTFLAGS:= +RUSTFLAGS+=-Cpasses=sancov-module +RUSTFLAGS+=-Cllvm-args=-sanitizer-coverage-inline-8bit-counters +RUSTFLAGS+=-Cllvm-args=-sanitizer-coverage-level=4 +RUSTFLAGS+=-Cllvm-args=-sanitizer-coverage-pc-table +RUSTFLAGS+=-Clink-dead-code +RUSTFLAGS+=-Cforce-frame-pointers=yes + +RUST_VERSION:=1.76.0 + +CARGO?=cargo + +.PHONY: clean build + +build: + RUSTFLAGS="$(RUSTFLAGS)" $(CARGO) +$(RUST_VERSION) build --target x86_64-unknown-linux-gnu --release + +clean: + $(CARGO) clean diff --git a/contrib/ed25519/dalek_target/src/lib.rs b/contrib/ed25519/dalek_target/src/lib.rs new file mode 100644 index 0000000000..8b9ef82f2b --- /dev/null +++ b/contrib/ed25519/dalek_target/src/lib.rs @@ -0,0 +1,76 @@ +use ed25519_dalek::{Keypair, PublicKey, SecretKey, Signature, Signer}; +use std::ffi::c_int; + +#[no_mangle] +pub extern "C" fn ed25519_dalek_sign( + sig: *mut u8, + msg: *const u8, + sz: u64, + public_key: *const u8, + private_key: *const u8, +) -> c_int { + let secret = match SecretKey::from_bytes(unsafe { + std::slice::from_raw_parts(private_key, 32) + .try_into() + .unwrap() + }) { + Ok(sk) => sk, + Err(_) => return -1, + }; + + let public = match PublicKey::from_bytes(unsafe { + std::slice::from_raw_parts(public_key, 32) + .try_into() + .unwrap() + }) { + Ok(pk) => pk, + Err(_) => return -1, + }; + + let keypair = Keypair { + secret: secret, + public: public, + }; + + let signature = keypair.sign(unsafe { std::slice::from_raw_parts(msg, sz as usize) }); + + unsafe { + std::ptr::copy_nonoverlapping(&signature.to_bytes() as *const u8, sig, 64); + } + return 0; // success +} + +#[no_mangle] +pub extern "C" fn ed25519_dalek_verify( + msg: *const u8, + sz: u64, + sig: *const u8, + public_key: *const u8, +) -> c_int { + let signature = match Signature::from_bytes(unsafe { + std::slice::from_raw_parts(sig, 64) + .try_into() + .unwrap() + }) { + Ok(s) => s, + Err(_) => return -1, + }; + + let public = match PublicKey::from_bytes(unsafe { + std::slice::from_raw_parts(public_key, 32) + .try_into() + .unwrap() + }) { + Ok(pk) => pk, + Err(_) => return -1, + }; + + let ok = public + .verify_strict( + unsafe { std::slice::from_raw_parts(msg, sz as usize) }, + &signature, + ) + .is_ok(); + + return if ok { 0 } else { -1 }; +} diff --git a/src/ballet/ed25519/Local.mk b/src/ballet/ed25519/Local.mk index 86beed2224..5bc839df3b 100644 --- a/src/ballet/ed25519/Local.mk +++ b/src/ballet/ed25519/Local.mk @@ -1,11 +1,17 @@ -$(call add-hdrs,fd_ed25519.h fd_x25519.h) -$(call add-objs,fd_ed25519_fe fd_ed25519_ge fd_ed25519_user fd_x25519,fd_ballet) +$(call add-hdrs,fd_ed25519.h fd_x25519.h fd_f25519.h fd_curve25519.h fd_curve25519_scalar.h) +$(call add-objs,fd_f25519 fd_curve25519 fd_curve25519_scalar fd_ed25519_user fd_x25519,fd_ballet) +$(call add-objs,fd_ristretto255,fd_ballet) $(call make-unit-test,test_ed25519,test_ed25519,fd_ballet fd_util) $(call make-unit-test,test_ed25519_signature_malleability,test_ed25519_signature_malleability,fd_ballet fd_util) $(call make-unit-test,test_x25519,test_x25519,fd_ballet fd_util) +$(call make-unit-test,test_ristretto255,test_ristretto255,fd_ballet fd_util) $(call make-fuzz-test,fuzz_ed25519_verify,fuzz_ed25519_verify,fd_ballet fd_util) $(call make-fuzz-test,fuzz_ed25519_sigverify,fuzz_ed25519_sigverify,fd_ballet fd_util) +$(call make-fuzz-test,fuzz_ed25519_sigverify_diff,fuzz_ed25519_sigverify_diff,fd_ballet fd_util) $(call run-unit-test,test_ed25519) $(call run-unit-test,test_ed25519_signature_malleability) $(call run-unit-test,test_x25519) +$(call run-unit-test,test_ristretto255) + +#$(call make-unit-test,fd_curve25519_tables,fd_curve25519_tables,fd_ballet fd_util) diff --git a/src/ballet/ed25519/avx/fd_ed25519_fe.c b/src/ballet/ed25519/avx/fd_ed25519_fe.c deleted file mode 100644 index 0680826181..0000000000 --- a/src/ballet/ed25519/avx/fd_ed25519_fe.c +++ /dev/null @@ -1,704 +0,0 @@ -#include "../fd_ed25519_private.h" -#include "fd_ed25519_fe_avx.h" - -fd_ed25519_fe_t * -fd_ed25519_fe_frombytes( fd_ed25519_fe_t * h, - uchar const * s ) { - - /* FIXME: THIS CAN PROBABLY BE ACCELERATED BY DOING 4 64-BIT LOADS AND - THEN UNPACKING FOR HIGH ILP. UNCLEAR IF BELOW DOES A FULL - REDUCTION THOUGH SO THIS ALTERNATIVE MIGHT YIELD ONLY AN EQUIVALENT - INTERMEDIATE REPRESENTATION (AND FOR SANITY WE ARE KEEPING - INTERMEDIATES BIT LEVEL EXACT TOO). CHECK FD_LOADS ELSEWHERE TO - MAKE SURE THIS IS THE CASE IN GENERAL. */ - - long h0 = (long) fd_ulong_load_4_fast( s ); - long h1 = (long) fd_ulong_load_3_fast( s + 4 ) << 6; - long h2 = (long) fd_ulong_load_3_fast( s + 7 ) << 5; - long h3 = (long) fd_ulong_load_3_fast( s + 10 ) << 3; - long h4 = (long) fd_ulong_load_3_fast( s + 13 ) << 2; - long h5 = (long) fd_ulong_load_4_fast( s + 16 ); - long h6 = (long) fd_ulong_load_3_fast( s + 20 ) << 7; - long h7 = (long) fd_ulong_load_3_fast( s + 23 ) << 5; - long h8 = (long) fd_ulong_load_3_fast( s + 26 ) << 4; - long h9 = (long)((fd_ulong_load_3 ( s + 29 ) & 0x7fffffUL) << 2); /* Ignores top bit of h. */ - - long m39u = (long)FD_ULONG_MASK_MSB(39); - long carry9 = h9 + (1 << 24); h0 += (carry9 >> 25)*19L; h9 -= carry9 & m39u; - long carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & m39u; - long carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & m39u; - long carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & m39u; - long carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & m39u; - - long m38u = (long)FD_ULONG_MASK_MSB(38); - long carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - long carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & m38u; - long carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - long carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & m38u; - long carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & m38u; - - h->limb[0] = (int)h0; h->limb[1] = (int)h1; - h->limb[2] = (int)h2; h->limb[3] = (int)h3; - h->limb[4] = (int)h4; h->limb[5] = (int)h5; - h->limb[6] = (int)h6; h->limb[7] = (int)h7; - h->limb[8] = (int)h8; h->limb[9] = (int)h9; - return h; -} - -uchar * -fd_ed25519_fe_tobytes( uchar * s, - fd_ed25519_fe_t const * h ) { - - /* Load limbs of h */ - - int h0 = h->limb[0]; int h1 = h->limb[1]; - int h2 = h->limb[2]; int h3 = h->limb[3]; - int h4 = h->limb[4]; int h5 = h->limb[5]; - int h6 = h->limb[6]; int h7 = h->limb[7]; - int h8 = h->limb[8]; int h9 = h->limb[9]; - - /* Write p=2^255-19; q=floor(h/p). - Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))). - - Proof: - Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4. - Also have |h-2^230 h9|<2^231 so |19 2^(-255)(h-2^230 h9)|<1/4. - - Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9). - Then 0> 25; - q = (h0 + q) >> 26; q = (h1 + q) >> 25; - q = (h2 + q) >> 26; q = (h3 + q) >> 25; - q = (h4 + q) >> 26; q = (h5 + q) >> 25; - q = (h6 + q) >> 26; q = (h7 + q) >> 25; - q = (h8 + q) >> 26; q = (h9 + q) >> 25; - - /* Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. */ - - h0 += 19*q; - - /* Goal: Output h-2^255 q, which is between 0 and 2^255-20. */ - - int m26 = (int)FD_ULONG_MASK_LSB(26); - int m25 = (int)FD_ULONG_MASK_LSB(25); - - h1 += h0 >> 26; h0 &= m26; h2 += h1 >> 25; h1 &= m25; - h3 += h2 >> 26; h2 &= m26; h4 += h3 >> 25; h3 &= m25; - h5 += h4 >> 26; h4 &= m26; h6 += h5 >> 25; h5 &= m25; - h7 += h6 >> 26; h6 &= m26; h8 += h7 >> 25; h7 &= m25; - h9 += h8 >> 26; h8 &= m26; /*h10=carry9*/ h9 &= m25; - - /* Pack the results into s */ - - *(ulong *) s = (((ulong)(uint)h0) ) | (((ulong)(uint)h1)<<26) | (((ulong)(uint)h2)<<51); - *(ulong *)(s+ 8) = (((ulong)(uint)h2)>>13) | (((ulong)(uint)h3)<<13) | (((ulong)(uint)h4)<<38); - *(ulong *)(s+16) = (((ulong)(uint)h5) ) | (((ulong)(uint)h6)<<25) | (((ulong)(uint)h7)<<51); - *(ulong *)(s+24) = (((ulong)(uint)h7)>>13) | (((ulong)(uint)h8)<<12) | (((ulong)(uint)h9)<<38); - - return s; -} - -fd_ed25519_fe_t * -fd_ed25519_fe_mul( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f, - fd_ed25519_fe_t const * g ) { - - /* Notes on implementation strategy: - - Using schoolbook multiplication. - Karatsuba would save a little in some cost models. - - Most multiplications by 2 and 19 are 32-bit precomputations; - cheaper than 64-bit postcomputations. - - There is one remaining multiplication by 19 in the carry chain; - one *19 precomputation can be merged into this, - but the resulting data flow is considerably less clean. - - There are 12 carries below. - 10 of them are 2-way parallelizable and vectorizable. - Can get away with 11 carries, but then data flow is much deeper. - - With tighter constraints on inputs can squeeze carries into int. */ - - long f0 = (long)f->limb[0]; long f1 = (long)f->limb[1]; - long f2 = (long)f->limb[2]; long f3 = (long)f->limb[3]; - long f4 = (long)f->limb[4]; long f5 = (long)f->limb[5]; - long f6 = (long)f->limb[6]; long f7 = (long)f->limb[7]; - long f8 = (long)f->limb[8]; long f9 = (long)f->limb[9]; - - long g0 = (long)g->limb[0]; long g1 = (long)g->limb[1]; - long g2 = (long)g->limb[2]; long g3 = (long)g->limb[3]; - long g4 = (long)g->limb[4]; long g5 = (long)g->limb[5]; - long g6 = (long)g->limb[6]; long g7 = (long)g->limb[7]; - long g8 = (long)g->limb[8]; long g9 = (long)g->limb[9]; - - long g1_19 = 19L*g1; /* 1.959375*2^29 */ - long g2_19 = 19L*g2; /* 1.959375*2^30; still ok */ - long g3_19 = 19L*g3; - long g4_19 = 19L*g4; - long g5_19 = 19L*g5; - long g6_19 = 19L*g6; - long g7_19 = 19L*g7; - long g8_19 = 19L*g8; - long g9_19 = 19L*g9; - - long f1_2 = 2L*f1; - long f3_2 = 2L*f3; - long f5_2 = 2L*f5; - long f7_2 = 2L*f7; - long f9_2 = 2L*f9; - - long f0g0 = f0*g0 ; long f0g1 = f0 *g1 ; - long f0g2 = f0*g2 ; long f0g3 = f0 *g3 ; - long f0g4 = f0*g4 ; long f0g5 = f0 *g5 ; - long f0g6 = f0*g6 ; long f0g7 = f0 *g7 ; - long f0g8 = f0*g8 ; long f0g9 = f0 *g9 ; - - long f1g0 = f1*g0 ; long f1g1_2 = f1_2*g1 ; - long f1g2 = f1*g2 ; long f1g3_2 = f1_2*g3 ; - long f1g4 = f1*g4 ; long f1g5_2 = f1_2*g5 ; - long f1g6 = f1*g6 ; long f1g7_2 = f1_2*g7 ; - long f1g8 = f1*g8 ; long f1g9_38 = f1_2*g9_19; - - long f2g0 = f2*g0 ; long f2g1 = f2 *g1 ; - long f2g2 = f2*g2 ; long f2g3 = f2 *g3 ; - long f2g4 = f2*g4 ; long f2g5 = f2 *g5 ; - long f2g6 = f2*g6 ; long f2g7 = f2 *g7 ; - long f2g8_19 = f2*g8_19; long f2g9_19 = f2 *g9_19; - - long f3g0 = f3*g0 ; long f3g1_2 = f3_2*g1 ; - long f3g2 = f3*g2 ; long f3g3_2 = f3_2*g3 ; - long f3g4 = f3*g4 ; long f3g5_2 = f3_2*g5 ; - long f3g6 = f3*g6 ; long f3g7_38 = f3_2*g7_19; - long f3g8_19 = f3*g8_19; long f3g9_38 = f3_2*g9_19; - - long f4g0 = f4*g0 ; long f4g1 = f4 *g1 ; - long f4g2 = f4*g2 ; long f4g3 = f4 *g3 ; - long f4g4 = f4*g4 ; long f4g5 = f4 *g5 ; - long f4g6_19 = f4*g6_19; long f4g7_19 = f4 *g7_19; - long f4g8_19 = f4*g8_19; long f4g9_19 = f4 *g9_19; - - long f5g0 = f5*g0 ; long f5g1_2 = f5_2*g1 ; - long f5g2 = f5*g2 ; long f5g3_2 = f5_2*g3 ; - long f5g4 = f5*g4 ; long f5g5_38 = f5_2*g5_19; - long f5g6_19 = f5*g6_19; long f5g7_38 = f5_2*g7_19; - long f5g8_19 = f5*g8_19; long f5g9_38 = f5_2*g9_19; - - long f6g0 = f6*g0 ; long f6g1 = f6 *g1 ; - long f6g2 = f6*g2 ; long f6g3 = f6 *g3 ; - long f6g4_19 = f6*g4_19; long f6g5_19 = f6 *g5_19; - long f6g6_19 = f6*g6_19; long f6g7_19 = f6 *g7_19; - long f6g8_19 = f6*g8_19; long f6g9_19 = f6 *g9_19; - - long f7g0 = f7*g0 ; long f7g1_2 = f7_2*g1 ; - long f7g2 = f7*g2 ; long f7g3_38 = f7_2*g3_19; - long f7g4_19 = f7*g4_19; long f7g5_38 = f7_2*g5_19; - long f7g6_19 = f7*g6_19; long f7g7_38 = f7_2*g7_19; - long f7g8_19 = f7*g8_19; long f7g9_38 = f7_2*g9_19; - - long f8g0 = f8*g0 ; long f8g1 = f8 *g1 ; - long f8g2_19 = f8*g2_19; long f8g3_19 = f8 *g3_19; - long f8g4_19 = f8*g4_19; long f8g5_19 = f8 *g5_19; - long f8g6_19 = f8*g6_19; long f8g7_19 = f8 *g7_19; - long f8g8_19 = f8*g8_19; long f8g9_19 = f8 *g9_19; - - long f9g0 = f9*g0 ; long f9g1_38 = f9_2*g1_19; - long f9g2_19 = f9*g2_19; long f9g3_38 = f9_2*g3_19; - long f9g4_19 = f9*g4_19; long f9g5_38 = f9_2*g5_19; - long f9g6_19 = f9*g6_19; long f9g7_38 = f9_2*g7_19; - long f9g8_19 = f9*g8_19; long f9g9_38 = f9_2*g9_19; - - long h0 = f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38; - long h1 = f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19; - long h2 = f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38; - long h3 = f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19; - long h4 = f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38; - long h5 = f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19; - long h6 = f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 + f7g9_38 + f8g8_19 + f9g7_38; - long h7 = f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 + f8g9_19 + f9g8_19; - long h8 = f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 + f8g0 + f9g9_38; - long h9 = f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0 ; - - /* |h0| <= (1.65*1.65*2^52*(1+19+19+19+19)+1.65*1.65*2^50*(38+38+38+38+38)) - i.e. |h0| <= 1.4*2^60; narrower ranges for h2, h4, h6, h8 - |h1| <= (1.65*1.65*2^51*(1+1+19+19+19+19+19+19+19+19)) - i.e. |h1| <= 1.7*2^59; narrower ranges for h3, h5, h7, h9 */ - - long m38u = (long)FD_ULONG_MASK_MSB(38); - long m39u = (long)FD_ULONG_MASK_MSB(39); - - long carry0 = h0 + (1L << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - long carry4 = h4 + (1L << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - /* |h0| <= 2^25 */ - /* |h4| <= 2^25 */ - /* |h1| <= 1.71*2^59 */ - /* |h5| <= 1.71*2^59 */ - - long carry1 = h1 + (1L << 24); h2 += carry1 >> 25; h1 -= carry1 & m39u; - long carry5 = h5 + (1L << 24); h6 += carry5 >> 25; h5 -= carry5 & m39u; - /* |h1| <= 2^24; from now on fits into int */ - /* |h5| <= 2^24; from now on fits into int */ - /* |h2| <= 1.41*2^60 */ - /* |h6| <= 1.41*2^60 */ - - long carry2 = h2 + (1L << 25); h3 += carry2 >> 26; h2 -= carry2 & m38u; - long carry6 = h6 + (1L << 25); h7 += carry6 >> 26; h6 -= carry6 & m38u; - /* |h2| <= 2^25; from now on fits into int unchanged */ - /* |h6| <= 2^25; from now on fits into int unchanged */ - /* |h3| <= 1.71*2^59 */ - /* |h7| <= 1.71*2^59 */ - - long carry3 = h3 + (1L << 24); h4 += carry3 >> 25; h3 -= carry3 & m39u; - long carry7 = h7 + (1L << 24); h8 += carry7 >> 25; h7 -= carry7 & m39u; - /* |h3| <= 2^24; from now on fits into int unchanged */ - /* |h7| <= 2^24; from now on fits into int unchanged */ - /* |h4| <= 1.72*2^34 */ - /* |h8| <= 1.41*2^60 */ - - /**/ carry4 = h4 + (1L << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - long carry8 = h8 + (1L << 25); h9 += carry8 >> 26; h8 -= carry8 & m38u; - /* |h4| <= 2^25; from now on fits into int unchanged */ - /* |h8| <= 2^25; from now on fits into int unchanged */ - /* |h5| <= 1.01*2^24 */ - /* |h9| <= 1.71*2^59 */ - - long carry9 = h9 + (1L << 24); h0 += (carry9 >> 25)*19L; h9 -= carry9 & m39u; - /* |h9| <= 2^24; from now on fits into int unchanged */ - /* |h0| <= 1.1*2^39 */ - - /**/ carry0 = h0 + (1L << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - /* |h0| <= 2^25; from now on fits into int unchanged */ - /* |h1| <= 1.01*2^24 */ - - h->limb[0] = (int)h0; h->limb[1] = (int)h1; - h->limb[2] = (int)h2; h->limb[3] = (int)h3; - h->limb[4] = (int)h4; h->limb[5] = (int)h5; - h->limb[6] = (int)h6; h->limb[7] = (int)h7; - h->limb[8] = (int)h8; h->limb[9] = (int)h9; - return h; -} - -fd_ed25519_fe_t * -fd_ed25519_fe_sq( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ) { - - /* See fd_ed25519_fe_mul for discussion of implementation strategy. */ - - long f0 = f->limb[0]; long f1 = f->limb[1]; - long f2 = f->limb[2]; long f3 = f->limb[3]; - long f4 = f->limb[4]; long f5 = f->limb[5]; - long f6 = f->limb[6]; long f7 = f->limb[7]; - long f8 = f->limb[8]; long f9 = f->limb[9]; - - long f0_2 = 2L*f0; long f1_2 = 2L*f1; - long f2_2 = 2L*f2; long f3_2 = 2L*f3; - long f4_2 = 2L*f4; long f5_2 = 2L*f5; - long f6_2 = 2L*f6; long f7_2 = 2L*f7; - - long f5_38 = 38L*f5; /* 1.959375*2^30 */ long f6_19 = 19L*f6; /* 1.959375*2^30 */ - long f7_38 = 38L*f7; /* 1.959375*2^30 */ long f8_19 = 19L*f8; /* 1.959375*2^30 */ - long f9_38 = 38L*f9; /* 1.959375*2^30 */ - - long f0f0 = f0 *f0 ; long f0f1_2 = f0_2*f1 ; - long f0f2_2 = f0_2*f2 ; long f0f3_2 = f0_2*f3 ; - long f0f4_2 = f0_2*f4 ; long f0f5_2 = f0_2*f5 ; - long f0f6_2 = f0_2*f6 ; long f0f7_2 = f0_2*f7 ; - long f0f8_2 = f0_2*f8 ; long f0f9_2 = f0_2*f9 ; - - long f1f1_2 = f1_2*f1 ; long f1f2_2 = f1_2*f2 ; - long f1f3_4 = f1_2*f3_2 ; long f1f4_2 = f1_2*f4 ; - long f1f5_4 = f1_2*f5_2 ; long f1f6_2 = f1_2*f6 ; - long f1f7_4 = f1_2*f7_2 ; long f1f8_2 = f1_2*f8 ; - long f1f9_76 = f1_2*f9_38; - - long f2f2 = f2 *f2 ; long f2f3_2 = f2_2*f3 ; - long f2f4_2 = f2_2*f4 ; long f2f5_2 = f2_2*f5 ; - long f2f6_2 = f2_2*f6 ; long f2f7_2 = f2_2*f7 ; - long f2f8_38 = f2_2*f8_19; long f2f9_38 = f2 *f9_38; - - long f3f3_2 = f3_2*f3 ; long f3f4_2 = f3_2*f4 ; - long f3f5_4 = f3_2*f5_2 ; long f3f6_2 = f3_2*f6 ; - long f3f7_76 = f3_2*f7_38; long f3f8_38 = f3_2*f8_19; - long f3f9_76 = f3_2*f9_38; - - long f4f4 = f4 *f4 ; long f4f5_2 = f4_2*f5 ; - long f4f6_38 = f4_2*f6_19; long f4f7_38 = f4 *f7_38; - long f4f8_38 = f4_2*f8_19; long f4f9_38 = f4 *f9_38; - - long f5f5_38 = f5 *f5_38; long f5f6_38 = f5_2*f6_19; - long f5f7_76 = f5_2*f7_38; long f5f8_38 = f5_2*f8_19; - long f5f9_76 = f5_2*f9_38; - - long f6f6_19 = f6 *f6_19; long f6f7_38 = f6 *f7_38; - long f6f8_38 = f6_2*f8_19; long f6f9_38 = f6 *f9_38; - - long f7f7_38 = f7 *f7_38; long f7f8_38 = f7_2*f8_19; - long f7f9_76 = f7_2*f9_38; - - long f8f8_19 = f8 *f8_19; long f8f9_38 = f8 *f9_38; - - long f9f9_38 = f9 *f9_38; - - long h0 = f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38; - long h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38; - long h2 = f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19; - long h3 = f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38; - long h4 = f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38; - long h5 = f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38; - long h6 = f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19; - long h7 = f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38; - long h8 = f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38; - long h9 = f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2; - - long m38u = (long)FD_ULONG_MASK_MSB(38); - long m39u = (long)FD_ULONG_MASK_MSB(39); - - long carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - long carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - - long carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & m39u; - long carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & m39u; - - long carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & m38u; - long carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & m38u; - - long carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & m39u; - long carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & m39u; - - /**/ carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - long carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & m38u; - - long carry9 = h9 + (1 << 24); h0 += (carry9 >> 25)*19L; h9 -= carry9 & m39u; - - /**/ carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - - h->limb[0] = (int)h0; h->limb[1] = (int)h1; - h->limb[2] = (int)h2; h->limb[3] = (int)h3; - h->limb[4] = (int)h4; h->limb[5] = (int)h5; - h->limb[6] = (int)h6; h->limb[7] = (int)h7; - h->limb[8] = (int)h8; h->limb[9] = (int)h9; - return h; -} - -fd_ed25519_fe_t * -fd_ed25519_fe_sq2( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ) { - - /* See fd_ed25519_fe_mul for discussion of implementation strategy. */ - - long f0 = f->limb[0]; long f1 = f->limb[1]; - long f2 = f->limb[2]; long f3 = f->limb[3]; - long f4 = f->limb[4]; long f5 = f->limb[5]; - long f6 = f->limb[6]; long f7 = f->limb[7]; - long f8 = f->limb[8]; long f9 = f->limb[9]; - - long f0_2 = 2L*f0; long f1_2 = 2L*f1; - long f2_2 = 2L*f2; long f3_2 = 2L*f3; - long f4_2 = 2L*f4; long f5_2 = 2L*f5; - long f6_2 = 2L*f6; long f7_2 = 2L*f7; - - long f5_38 = 38L*f5; /* 1.959375*2^30 */ long f6_19 = 19L*f6; /* 1.959375*2^30 */ - long f7_38 = 38L*f7; /* 1.959375*2^30 */ long f8_19 = 19L*f8; /* 1.959375*2^30 */ - long f9_38 = 38L*f9; /* 1.959375*2^30 */ - - long f0f0 = ((long)f0 )*((long)f0 ); long f0f1_2 = ((long)f0_2)*((long)f1 ); - long f0f2_2 = ((long)f0_2)*((long)f2 ); long f0f3_2 = ((long)f0_2)*((long)f3 ); - long f0f4_2 = ((long)f0_2)*((long)f4 ); long f0f5_2 = ((long)f0_2)*((long)f5 ); - long f0f6_2 = ((long)f0_2)*((long)f6 ); long f0f7_2 = ((long)f0_2)*((long)f7 ); - long f0f8_2 = ((long)f0_2)*((long)f8 ); long f0f9_2 = ((long)f0_2)*((long)f9 ); - - long f1f1_2 = ((long)f1_2)*((long)f1 ); long f1f2_2 = ((long)f1_2)*((long)f2 ); - long f1f3_4 = ((long)f1_2)*((long)f3_2 ); long f1f4_2 = ((long)f1_2)*((long)f4 ); - long f1f5_4 = ((long)f1_2)*((long)f5_2 ); long f1f6_2 = ((long)f1_2)*((long)f6 ); - long f1f7_4 = ((long)f1_2)*((long)f7_2 ); long f1f8_2 = ((long)f1_2)*((long)f8 ); - long f1f9_76 = ((long)f1_2)*((long)f9_38); - - long f2f2 = ((long)f2 )*((long)f2 ); long f2f3_2 = ((long)f2_2)*((long)f3 ); - long f2f4_2 = ((long)f2_2)*((long)f4 ); long f2f5_2 = ((long)f2_2)*((long)f5 ); - long f2f6_2 = ((long)f2_2)*((long)f6 ); long f2f7_2 = ((long)f2_2)*((long)f7 ); - long f2f8_38 = ((long)f2_2)*((long)f8_19); long f2f9_38 = ((long)f2 )*((long)f9_38); - - long f3f3_2 = ((long)f3_2)*((long)f3 ); long f3f4_2 = ((long)f3_2)*((long)f4 ); - long f3f5_4 = ((long)f3_2)*((long)f5_2 ); long f3f6_2 = ((long)f3_2)*((long)f6 ); - long f3f7_76 = ((long)f3_2)*((long)f7_38); long f3f8_38 = ((long)f3_2)*((long)f8_19); - long f3f9_76 = ((long)f3_2)*((long)f9_38); - - long f4f4 = ((long)f4 )*((long)f4 ); long f4f5_2 = ((long)f4_2)*((long)f5 ); - long f4f6_38 = ((long)f4_2)*((long)f6_19); long f4f7_38 = ((long)f4 )*((long)f7_38); - long f4f8_38 = ((long)f4_2)*((long)f8_19); long f4f9_38 = ((long)f4 )*((long)f9_38); - - long f5f5_38 = ((long)f5 )*((long)f5_38); long f5f6_38 = ((long)f5_2)*((long)f6_19); - long f5f7_76 = ((long)f5_2)*((long)f7_38); long f5f8_38 = ((long)f5_2)*((long)f8_19); - long f5f9_76 = ((long)f5_2)*((long)f9_38); - - long f6f6_19 = ((long)f6 )*((long)f6_19); long f6f7_38 = ((long)f6 )*((long)f7_38); - long f6f8_38 = ((long)f6_2)*((long)f8_19); long f6f9_38 = ((long)f6 )*((long)f9_38); - - long f7f7_38 = ((long)f7 )*((long)f7_38); long f7f8_38 = ((long)f7_2)*((long)f8_19); - long f7f9_76 = ((long)f7_2)*((long)f9_38); - - long f8f8_19 = ((long)f8 )*((long)f8_19); long f8f9_38 = ((long)f8 )*((long)f9_38); - - long f9f9_38 = ((long)f9 )*((long)f9_38); - - long h0 = f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38; h0 += h0; - long h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38; h1 += h1; - long h2 = f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19; h2 += h2; - long h3 = f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38; h3 += h3; - long h4 = f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38; h4 += h4; - long h5 = f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38; h5 += h5; - long h6 = f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19; h6 += h6; - long h7 = f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38; h7 += h7; - long h8 = f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38; h8 += h8; - long h9 = f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2; h9 += h9; - - long m38u = (long)FD_ULONG_MASK_MSB(38); - long m39u = (long)FD_ULONG_MASK_MSB(39); - - long carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - long carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - - long carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & m39u; - long carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & m39u; - - long carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & m38u; - long carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & m38u; - - long carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & m39u; - long carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & m39u; - - /**/ carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - long carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & m38u; - - long carry9 = h9 + (1 << 24); h0 += (carry9 >> 25)*19L; h9 -= carry9 & m39u; - - /**/ carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - - h->limb[0] = (int)h0; h->limb[1] = (int)h1; - h->limb[2] = (int)h2; h->limb[3] = (int)h3; - h->limb[4] = (int)h4; h->limb[5] = (int)h5; - h->limb[6] = (int)h6; h->limb[7] = (int)h7; - h->limb[8] = (int)h8; h->limb[9] = (int)h9; - return h; -} - -fd_ed25519_fe_t * -fd_ed25519_fe_invert( fd_ed25519_fe_t * out, - fd_ed25519_fe_t const * z ) { - fd_ed25519_fe_t t0[1]; - fd_ed25519_fe_t t1[1]; - fd_ed25519_fe_t t2[1]; - fd_ed25519_fe_t t3[1]; - - /* Compute z**-1 = z**(2**255 - 19 - 2) with the exponent as - 2**255 - 21 = (2**5) * (2**250 - 1) + 11. */ - - fd_ed25519_fe_sq ( t0, z ); /* t0 = z**2 */ - fd_ed25519_fe_sq ( t1, t0 ); - fd_ed25519_fe_sq ( t1, t1 ); /* t1 = t0**(2**2) = z**8 */ - fd_ed25519_fe_mul( t1, z, t1 ); /* t1 = z * t1 = z**9 */ - fd_ed25519_fe_mul( t0, t0, t1 ); /* t0 = t0 * t1 = z**11 -- stash t0 away for the end. */ - fd_ed25519_fe_sq ( t2, t0 ); /* t2 = t0**2 = z**22 */ - fd_ed25519_fe_mul( t1, t1, t2 ); /* t1 = t1 * t2 = z**(2**5 - 1) */ - fd_ed25519_fe_sq ( t2, t1 ); - for( int i=1; i< 5; i++ ) fd_ed25519_fe_sq( t2, t2 ); /* t2 = t1**(2**5) = z**((2**5) * (2**5 - 1)) */ - fd_ed25519_fe_mul( t1, t2, t1 ); /* t1 = t1 * t2 = z**((2**5 + 1) * (2**5 - 1)) = z**(2**10 - 1) */ - fd_ed25519_fe_sq ( t2, t1 ); - for( int i=1; i< 10; i++ ) fd_ed25519_fe_sq( t2, t2 ); - fd_ed25519_fe_mul( t2, t2, t1 ); /* t2 = z**(2**20 - 1) */ - fd_ed25519_fe_sq ( t3, t2 ); - for( int i=1; i< 20; i++ ) fd_ed25519_fe_sq( t3, t3 ); - fd_ed25519_fe_mul( t2, t3, t2 ); /* t2 = z**(2**40 - 1) */ - for( int i=0; i< 10; i++ ) fd_ed25519_fe_sq( t2, t2 ); /* t2 = z**(2**10) * (2**40 - 1) */ - fd_ed25519_fe_mul( t1, t2, t1 ); /* t1 = z**(2**50 - 1) */ - fd_ed25519_fe_sq ( t2, t1 ); - for( int i=1; i< 50; i++ ) fd_ed25519_fe_sq( t2, t2 ); - fd_ed25519_fe_mul( t2, t2, t1 ); /* t2 = z**(2**100 - 1) */ - fd_ed25519_fe_sq ( t3, t2 ); - for( int i=1; i<100; i++ ) fd_ed25519_fe_sq( t3, t3 ); - fd_ed25519_fe_mul( t2, t3, t2 ); /* t2 = z**(2**200 - 1) */ - fd_ed25519_fe_sq ( t2, t2 ); - for( int i=1; i< 50; i++ ) fd_ed25519_fe_sq( t2, t2 ); /* t2 = z**((2**50) * (2**200 - 1) */ - fd_ed25519_fe_mul( t1, t2, t1 ); /* t1 = z**(2**250 - 1) */ - fd_ed25519_fe_sq ( t1, t1 ); - for( int i=1; i< 5; i++ ) fd_ed25519_fe_sq( t1, t1 ); /* t1 = z**((2**5) * (2**250 - 1)) */ - return fd_ed25519_fe_mul( out, t1, t0 ); /* Recall t0 = z**11; out = z**(2**255 - 21) */ -} - -fd_ed25519_fe_t * -fd_ed25519_fe_pow22523( fd_ed25519_fe_t * out, - fd_ed25519_fe_t const * z ) { - fd_ed25519_fe_t t0[1]; - fd_ed25519_fe_t t1[1]; - fd_ed25519_fe_t t2[1]; - - fd_ed25519_fe_sq ( t0, z ); - fd_ed25519_fe_sq ( t1, t0 ); - for( int i=1; i< 2; i++ ) fd_ed25519_fe_sq( t1, t1 ); - - fd_ed25519_fe_mul( t1, z, t1 ); - fd_ed25519_fe_mul( t0, t0, t1 ); - fd_ed25519_fe_sq ( t0, t0 ); - fd_ed25519_fe_mul( t0, t1, t0 ); - fd_ed25519_fe_sq ( t1, t0 ); - for( int i=1; i< 5; i++ ) fd_ed25519_fe_sq( t1, t1 ); - - fd_ed25519_fe_mul( t0, t1, t0 ); - fd_ed25519_fe_sq ( t1, t0 ); - for( int i=1; i< 10; i++ ) fd_ed25519_fe_sq( t1, t1 ); - - fd_ed25519_fe_mul( t1, t1, t0 ); - fd_ed25519_fe_sq ( t2, t1 ); - for( int i=1; i< 20; i++ ) fd_ed25519_fe_sq( t2, t2 ); - - fd_ed25519_fe_mul( t1, t2, t1 ); - fd_ed25519_fe_sq ( t1, t1 ); - for( int i=1; i< 10; i++ ) fd_ed25519_fe_sq( t1, t1 ); - - fd_ed25519_fe_mul( t0, t1, t0 ); - fd_ed25519_fe_sq ( t1, t0 ); - for( int i=1; i< 50; i++ ) fd_ed25519_fe_sq( t1, t1 ); - - fd_ed25519_fe_mul( t1, t1, t0 ); - fd_ed25519_fe_sq ( t2, t1 ); - for( int i=1; i<100; i++ ) fd_ed25519_fe_sq( t2, t2 ); - - fd_ed25519_fe_mul( t1, t2, t1 ); - fd_ed25519_fe_sq ( t1, t1 ); - for( int i=1; i< 50; i++ ) fd_ed25519_fe_sq( t1, t1 ); - - fd_ed25519_fe_mul( t0, t1, t0 ); - fd_ed25519_fe_sq ( t0, t0 ); - for( int i=1; i< 2; i++ ) fd_ed25519_fe_sq( t0, t0 ); - - fd_ed25519_fe_mul(out, t0, z ); - return out; -} - -void -fd_ed25519_fe_mul2( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, fd_ed25519_fe_t const * ga, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, fd_ed25519_fe_t const * gb ) { - FE_AVX_INL_DECL(f); FE_AVX_INL_DECL(g); - FE_AVX_INL_PAIR_SWIZZLE_IN2( f, fa,fb, g, ga,gb ); - FE_AVX_INL_MUL(f,f,g); - FE_AVX_INL_SWIZZLE_OUT2( ha,hb, f ); -} - -void -fd_ed25519_fe_mul3( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, fd_ed25519_fe_t const * ga, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, fd_ed25519_fe_t const * gb, - fd_ed25519_fe_t * hc, fd_ed25519_fe_t const * fc, fd_ed25519_fe_t const * gc ) { - FE_AVX_INL_DECL(f); FE_AVX_INL_DECL(g); - FE_AVX_INL_PAIR_SWIZZLE_IN3( f, fa,fb,fc, g, ga,gb,gc ); - FE_AVX_INL_MUL(f,f,g); - FE_AVX_INL_SWIZZLE_OUT3( ha,hb,hc, f ); -} - -void -fd_ed25519_fe_mul4( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, fd_ed25519_fe_t const * ga, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, fd_ed25519_fe_t const * gb, - fd_ed25519_fe_t * hc, fd_ed25519_fe_t const * fc, fd_ed25519_fe_t const * gc, - fd_ed25519_fe_t * hd, fd_ed25519_fe_t const * fd, fd_ed25519_fe_t const * gd ) { - FE_AVX_INL_DECL(f); FE_AVX_INL_DECL(g); - FE_AVX_INL_PAIR_SWIZZLE_IN4( f, fa,fb,fc,fd, g, ga,gb,gc,gd ); - FE_AVX_INL_MUL(f,f,g); - FE_AVX_INL_SWIZZLE_OUT4( ha,hb,hc,hd, f ); -} - -void -fd_ed25519_fe_sqn2( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, long na, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, long nb ) { - FE_AVX_INL_DECL(f); - FE_AVX_INL_SWIZZLE_IN2( f, fa,fb ); - FE_AVX_INL_SQN( f,f, na,nb,1L,1L ); - FE_AVX_INL_SWIZZLE_OUT2( ha,hb, f ); -} - -void -fd_ed25519_fe_sqn3( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, long na, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, long nb, - fd_ed25519_fe_t * hc, fd_ed25519_fe_t const * fc, long nc ) { - FE_AVX_INL_DECL(f); - FE_AVX_INL_SWIZZLE_IN3( f, fa,fb,fc ); - FE_AVX_INL_SQN( f,f, na,nb,nc,1L ); - FE_AVX_INL_SWIZZLE_OUT3( ha,hb,hc, f ); -} - -void -fd_ed25519_fe_sqn4( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, long na, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, long nb, - fd_ed25519_fe_t * hc, fd_ed25519_fe_t const * fc, long nc, - fd_ed25519_fe_t * hd, fd_ed25519_fe_t const * fd, long nd ) { - FE_AVX_INL_DECL(f); - FE_AVX_INL_SWIZZLE_IN4( f, fa,fb,fc,fd ); - FE_AVX_INL_SQN( f,f, na,nb,nc,nd ); - FE_AVX_INL_SWIZZLE_OUT4( ha,hb,hc,hd, f ); -} - -void -fd_ed25519_fe_pow22523_2( fd_ed25519_fe_t * outa, fd_ed25519_fe_t const * za, - fd_ed25519_fe_t * outb, fd_ed25519_fe_t const * zb ) { - FE_AVX_INL_DECL(z); - FE_AVX_INL_SWIZZLE_IN2( z, za,zb ); - FE_AVX_INL_POW22523( z, z ); - FE_AVX_INL_SWIZZLE_OUT2( outa,outb, z ); -} - -void -fd_ed25519_fe_mul121666( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ) { - int f0 = f->limb[0]; int f1 = f->limb[1]; - int f2 = f->limb[2]; int f3 = f->limb[3]; - int f4 = f->limb[4]; int f5 = f->limb[5]; - int f6 = f->limb[6]; int f7 = f->limb[7]; - int f8 = f->limb[8]; int f9 = f->limb[9]; - - long h0 = 121666L * f0; long h1 = 121666L * f1; - long h2 = 121666L * f2; long h3 = 121666L * f3; - long h4 = 121666L * f4; long h5 = 121666L * f5; - long h6 = 121666L * f6; long h7 = 121666L * f7; - long h8 = 121666L * f8; long h9 = 121666L * f9; - - long carry9 = (h9 + (1L << 24)) >> 25; - long carry1 = (h1 + (1L << 24)) >> 25; - long carry3 = (h3 + (1L << 24)) >> 25; - long carry5 = (h5 + (1L << 24)) >> 25; - long carry7 = (h7 + (1L << 24)) >> 25; - - h0 += carry9 * 19L; h9 -= fd_long_shift_left(carry9, 25); - h2 += carry1; h1 -= fd_long_shift_left(carry1, 25); - h4 += carry3; h3 -= fd_long_shift_left(carry3, 25); - h6 += carry5; h5 -= fd_long_shift_left(carry5, 25); - h8 += carry7; h7 -= fd_long_shift_left(carry7, 25); - - long carry0 = (h0 + (1L << 25)) >> 26; - long carry2 = (h2 + (1L << 25)) >> 26; - long carry4 = (h4 + (1L << 25)) >> 26; - long carry6 = (h6 + (1L << 25)) >> 26; - long carry8 = (h8 + (1L << 25)) >> 26; - - h1 += carry0; h0 -= fd_long_shift_left(carry0, 26); - h3 += carry2; h2 -= fd_long_shift_left(carry2, 26); - h5 += carry4; h4 -= fd_long_shift_left(carry4, 26); - h7 += carry6; h6 -= fd_long_shift_left(carry6, 26); - h9 += carry8; h8 -= fd_long_shift_left(carry8, 26); - - h->limb[0] = (int)h0; h->limb[1] = (int)h1; - h->limb[2] = (int)h2; h->limb[3] = (int)h3; - h->limb[4] = (int)h4; h->limb[5] = (int)h5; - h->limb[6] = (int)h6; h->limb[7] = (int)h7; - h->limb[8] = (int)h8; h->limb[9] = (int)h9; -} - diff --git a/src/ballet/ed25519/avx/fd_ed25519_fe.h b/src/ballet/ed25519/avx/fd_ed25519_fe.h deleted file mode 100644 index 2bd490896f..0000000000 --- a/src/ballet/ed25519/avx/fd_ed25519_fe.h +++ /dev/null @@ -1,193 +0,0 @@ -#ifndef HEADER_fd_src_ballet_ed25519_fd_ed25519_private_h -#error "Do not include this directly; use fd_ed25519_private.h" -#endif - -#include "../../../util/simd/fd_avx.h" - -/* See ../ref/fd_ed25519_fe.h for documentation of these APIs */ - -struct fd_ed25519_fe_private { - int limb[16] __attribute__((aligned(64))); /* only 0:9 matter */ -}; - -typedef struct fd_ed25519_fe_private fd_ed25519_fe_t; - -FD_PROTOTYPES_BEGIN - -fd_ed25519_fe_t * -fd_ed25519_fe_frombytes( fd_ed25519_fe_t * h, - uchar const * s ); - -uchar * -fd_ed25519_fe_tobytes( uchar * s, - fd_ed25519_fe_t const * h ); - -static inline fd_ed25519_fe_t * -fd_ed25519_fe_copy( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ) { - wi_t h07 = wi_ld( f->limb ); wi_t h89 = wi_ld( f->limb+8 ); - wi_st( h->limb, h07 ); wi_st( h->limb+8, h89 ); - return h; -} - -static inline fd_ed25519_fe_t * -fd_ed25519_fe_0( fd_ed25519_fe_t * h ) { - wi_t z = wi_zero(); - wi_st( h->limb, z ); wi_st( h->limb+8, z ); - return h; -} - -static inline fd_ed25519_fe_t * -fd_ed25519_fe_1( fd_ed25519_fe_t * h ) { - wi_t z = wi_zero(); - wi_st( h->limb, z ); wi_st( h->limb+8, z ); - h->limb[0] = 1; - return h; -} - -FD_FN_UNUSED static fd_ed25519_fe_t * /* Work around -Winline */ -fd_ed25519_fe_rng( fd_ed25519_fe_t * h, - fd_rng_t * rng ) { - uint m26 = (uint)FD_ULONG_MASK_LSB(26); uint m25 = (uint)FD_ULONG_MASK_LSB(25); - h->limb[0] = (int)(fd_rng_uint( rng ) & m26); h->limb[1] = (int)(fd_rng_uint( rng ) & m25); - h->limb[2] = (int)(fd_rng_uint( rng ) & m26); h->limb[3] = (int)(fd_rng_uint( rng ) & m25); - h->limb[4] = (int)(fd_rng_uint( rng ) & m26); h->limb[5] = (int)(fd_rng_uint( rng ) & m25); - h->limb[6] = (int)(fd_rng_uint( rng ) & m26); h->limb[7] = (int)(fd_rng_uint( rng ) & m25); - h->limb[8] = (int)(fd_rng_uint( rng ) & m26); h->limb[9] = (int)(fd_rng_uint( rng ) & m25); - return h; -} - -static inline fd_ed25519_fe_t * -fd_ed25519_fe_add( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f, - fd_ed25519_fe_t const * g ) { - wi_t f07 = wi_ld( f->limb ); wi_t f89 = wi_ld( f->limb+8 ); - wi_t g07 = wi_ld( g->limb ); wi_t g89 = wi_ld( g->limb+8 ); - wi_t h07 = wi_add( f07, g07 ); wi_t h89 = wi_add( f89, g89 ); - wi_st( h->limb, h07 ); wi_st( h->limb+8, h89 ); - return h; -} - -static inline fd_ed25519_fe_t * -fd_ed25519_fe_sub( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f, - fd_ed25519_fe_t const * g ) { - wi_t f07 = wi_ld( f->limb ); wi_t f89 = wi_ld( f->limb+8 ); - wi_t g07 = wi_ld( g->limb ); wi_t g89 = wi_ld( g->limb+8 ); - wi_t h07 = wi_sub( f07, g07 ); wi_t h89 = wi_sub( f89, g89 ); - wi_st( h->limb, h07 ); wi_st( h->limb+8, h89 ); - return h; -} - -fd_ed25519_fe_t * -fd_ed25519_fe_mul( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f, - fd_ed25519_fe_t const * g ); - -fd_ed25519_fe_t * -fd_ed25519_fe_sq( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ); - -fd_ed25519_fe_t * -fd_ed25519_fe_invert( fd_ed25519_fe_t * out, - fd_ed25519_fe_t const * z ); - -static inline fd_ed25519_fe_t * -fd_ed25519_fe_neg( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ) { - wi_t f07 = wi_ld( f->limb ); wi_t f89 = wi_ld( f->limb+8 ); - wi_t z = wi_zero(); - wi_t h07 = wi_sub( z, f07 ); wi_t h89 = wi_sub( z, f89 ); - wi_st( h->limb, h07 ); wi_st( h->limb+8, h89 ); - return h; -} - -static inline fd_ed25519_fe_t * -fd_ed25519_fe_if( fd_ed25519_fe_t * h, - int c, - fd_ed25519_fe_t const * f, - fd_ed25519_fe_t const * g ) { - wi_t f07 = wi_ld( f->limb ); wi_t f89 = wi_ld( f->limb+8 ); - wi_t g07 = wi_ld( g->limb ); wi_t g89 = wi_ld( g->limb+8 ); - wc_t m = wc_bcast( c ); - wi_t h07 = wi_if( m, f07, g07 ); wi_t h89 = wi_if( m, f89, g89 ); - wi_st( h->limb, h07 ); wi_st( h->limb+8, h89 ); - return h; -} - -static inline void -fd_ed25519_fe_swap_if( fd_ed25519_fe_t * f, - fd_ed25519_fe_t * g, - int c ) { - wi_t f07 = wi_ld( f->limb ); wi_t f89 = wi_ld( f->limb+8 ); - wi_t g07 = wi_ld( g->limb ); wi_t g89 = wi_ld( g->limb+8 ); - wc_t m = wc_bcast( c ); - wi_t h07 = wi_if( m, g07, f07 ); wi_t h89 = wi_if( m, g89, f89 ); - wi_t i07 = wi_if( m, f07, g07 ); wi_t i89 = wi_if( m, f89, g89 ); - wi_st( f->limb, h07 ); wi_st( f->limb+8, h89 ); - wi_st( g->limb, i07 ); wi_st( g->limb+8, i89 ); -} - -static inline int -fd_ed25519_fe_isnonzero( fd_ed25519_fe_t const * f ) { - uchar s[32] __attribute((aligned(32))); fd_ed25519_fe_tobytes( s, f ); - wi_t s07 = wi_ld( (int const *)s ); - return !wc_all( wi_eq( s07, wi_zero() ) ); -} - -static inline int -fd_ed25519_fe_isnegative( fd_ed25519_fe_t const * f ) { - uchar s[32]; fd_ed25519_fe_tobytes( s, f ); - return ((int)(uint)s[0]) & 1; -} - -fd_ed25519_fe_t * -fd_ed25519_fe_sq2( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ); - -fd_ed25519_fe_t * -fd_ed25519_fe_pow22523( fd_ed25519_fe_t * out, - fd_ed25519_fe_t const * z ); - -void -fd_ed25519_fe_mul2( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, fd_ed25519_fe_t const * ga, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, fd_ed25519_fe_t const * gb ); - -void -fd_ed25519_fe_mul3( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, fd_ed25519_fe_t const * ga, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, fd_ed25519_fe_t const * gb, - fd_ed25519_fe_t * hc, fd_ed25519_fe_t const * fc, fd_ed25519_fe_t const * gc ); - -void -fd_ed25519_fe_mul4( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, fd_ed25519_fe_t const * ga, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, fd_ed25519_fe_t const * gb, - fd_ed25519_fe_t * hc, fd_ed25519_fe_t const * fc, fd_ed25519_fe_t const * gc, - fd_ed25519_fe_t * hd, fd_ed25519_fe_t const * fd, fd_ed25519_fe_t const * gd ); - -void -fd_ed25519_fe_sqn2( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, long na, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, long nb ); - -void -fd_ed25519_fe_sqn3( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, long na, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, long nb, - fd_ed25519_fe_t * hc, fd_ed25519_fe_t const * fc, long nc ); - -void -fd_ed25519_fe_sqn4( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, long na, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, long nb, - fd_ed25519_fe_t * hc, fd_ed25519_fe_t const * fc, long nc, - fd_ed25519_fe_t * hd, fd_ed25519_fe_t const * fd, long nd ); - -#define FD_ED25519_FE_POW25523_2_FAST 1 - -void -fd_ed25519_fe_pow22523_2( fd_ed25519_fe_t * out0, fd_ed25519_fe_t const * z0, - fd_ed25519_fe_t * out1, fd_ed25519_fe_t const * z1 ); - -void -fd_ed25519_fe_mul121666( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ); - -FD_PROTOTYPES_END - diff --git a/src/ballet/ed25519/avx/fd_ed25519_fe_avx.h b/src/ballet/ed25519/avx/fd_ed25519_fe_avx.h deleted file mode 100644 index 900a2ed51f..0000000000 --- a/src/ballet/ed25519/avx/fd_ed25519_fe_avx.h +++ /dev/null @@ -1,322 +0,0 @@ -#ifndef HEADER_fd_src_ballet_ed25519_fd_ed25519_private_h -#error "Do not include this; use fd_ed25519_private.h" -#endif - -/* Some quick extensions to the wl APIs useful here */ - -/* wl_addn adds up the n wls. */ - -#define wl_add0() wl_zero() -#define wl_add1( a ) (a) -#define wl_add2( a,b ) wl_add( (a), (b) ) -#define wl_add3( a,b,c ) wl_add2( wl_add2( (a),(b) ), (c) ) -#define wl_add4( a,b,c,d ) wl_add2( wl_add2( (a),(b) ), wl_add2( (c),(d) ) ) -#define wl_add5( a,b,c,d,e ) wl_add2( wl_add3( (a),(b),(c) ), wl_add2( (d),(e) ) ) -#define wl_add6( a,b,c,d,e,f ) wl_add2( wl_add3( (a),(b),(c) ), wl_add3( (d),(e),(f) ) ) -#define wl_add7( a,b,c,d,e,f,g ) wl_add2( wl_add4( (a),(b),(c),(d) ), wl_add3( (e),(f),(g) ) ) -#define wl_add8( a,b,c,d,e,f,g,h ) wl_add2( wl_add4( (a),(b),(c),(d) ), wl_add4( (e),(f),(g),(h) ) ) -#define wl_add9( a,b,c,d,e,f,g,h,i ) wl_add2( wl_add5( (a),(b),(c),(d),(e) ), wl_add4( (f),(g),(h),(i) ) ) -#define wl_add10( a,b,c,d,e,f,g,h,i,j ) wl_add2( wl_add5( (a),(b),(c),(d),(e) ), wl_add5( (f),(g),(h),(i),(j) ) ) - -FD_PROTOTYPES_BEGIN - -/* wl_shr_x19 returns [ (x0>>n)*19L (x1>>n)*19L ... (x3>>n)*19L ] */ - -static inline wl_t -wl_shr_x19( wl_t x, - int n ) { - x = wl_shr( x, n ); - return wl_add3( x, wl_shl( x, 1 ), wl_shl( x, 4 ) ); -} - -/* wl_dbl_mix(f) for f = [fa fb fc fd] returns - [fa-fb-fc fb+fc fc-fc fd-fb+fc] */ - -static inline wl_t -wl_dbl_mix( wl_t f ) { - wl_t _zero = wl_zero(); /* Should be hoisted */ - wl_t _mask = wl(-1L, 0L, 0L,-1L); /* Should be hoisted */ - wl_t _tmp = wl_permute( f, 1,0,2,3 ); /* = [ fb fa fc fd ] */ - _tmp = _mm256_unpacklo_epi64( _tmp, wl_sub( _zero, _tmp ) ); /* = [ fb -fb fc -fc ] */ - return wl_add3( wl_and( f, _mask ), /* = [ fa 0 0 fd ] */ - wl_permute( _tmp, 1,0,0,1 ), /* + [-fb fb fb -fb ] */ - wl_permute( _tmp, 3,2,3,2 ) ); /* + [-fc fc -fc fc ] */ -} - -/* wl_sub_mix(f) for f = [fa fb fc fd] returns - [fc-fb fc+fb 2*fa-fd 2*fa+fd] */ - -static inline wl_t -wl_sub_mix( wl_t f ) { - wl_t _zero = wl_zero(); /* Should be hoisted */ - wl_t _mask = wl( 0L, 0L,-1L,-1L); /* Should be hoisted */ - wl_t _tmp = wl_permute( f, 2,2,0,0 ); /* tmp = [ Z Z X X ] */ - return wl_add3( _tmp, /* h = [ Z Z X X ] */ - wl_and( _tmp, _mask ), /* + [ 0 0 X X ] */ - _mm256_unpackhi_epi64( wl_sub( _zero, f ), f ) ); /* + [ -Y Y -T T ] */ -} - -/* wl_subadd_12(f) for f = [fa fb fc fd] returns - [fa fb-fc fb+fc fd] */ - -static inline wl_t -wl_subadd_12( wl_t f ) { - wl_t _zero = wl_zero(); /* Should be hoisted */ - wl_t _mask = wl( 0L,-1L,-1L, 0L); /* Should be hoisted */ - wl_t _tmp = wl_permute( f, 2,2,2,2 ); /* tmp = [ C C C C ] */ \ - return wl_add( wl_permute( f, 0,1,1,3 ), /* h = [ A B B D ] */ \ - wl_and( _mm256_unpacklo_epi64( _tmp, wl_sub( _zero, _tmp ) ), _mask ) ); /* + [ 0 -C C 0 ] */ -} - -FD_PROTOTYPES_END - -#include "fd_ed25519_fe_avx_inl.h" - -FD_PROTOTYPES_BEGIN - -static inline long * -fe_avx_ld4( long * z, - fd_ed25519_fe_t const * a, - fd_ed25519_fe_t const * b, - fd_ed25519_fe_t const * c, - fd_ed25519_fe_t const * d ) { - FE_AVX_INL_DECL( vz ); - FE_AVX_INL_SWIZZLE_IN4( vz, a, b, c, d ); - FE_AVX_INL_ST( z, vz ); - return z; -} - -static inline long * -fe_avx_ld3( long * z, - fd_ed25519_fe_t const * a, - fd_ed25519_fe_t const * b, - fd_ed25519_fe_t const * c ) { - FE_AVX_INL_DECL( vz ); - FE_AVX_INL_SWIZZLE_IN3( vz, a, b, c ); - FE_AVX_INL_ST( z, vz ); - return z; -} - -static inline long * -fe_avx_ld2( long * z, - fd_ed25519_fe_t const * a, - fd_ed25519_fe_t const * b ) { - FE_AVX_INL_DECL( vz ); - FE_AVX_INL_SWIZZLE_IN2( vz, a, b ); - FE_AVX_INL_ST( z, vz ); - return z; -} - -static inline void -fe_avx_st4( fd_ed25519_fe_t * a, - fd_ed25519_fe_t * b, - fd_ed25519_fe_t * c, - fd_ed25519_fe_t * d, - long * z ) { - FE_AVX_INL_DECL( vz ); - FE_AVX_INL_LD( vz, z ); - FE_AVX_INL_SWIZZLE_OUT4( a, b, c, d, vz ); -} - -static inline void -fe_avx_st3( fd_ed25519_fe_t * a, - fd_ed25519_fe_t * b, - fd_ed25519_fe_t * c, - long * z ) { - FE_AVX_INL_DECL( vz ); - FE_AVX_INL_LD( vz, z ); - FE_AVX_INL_SWIZZLE_OUT3( a, b, c, vz ); -} - -static inline void -fe_avx_st2( fd_ed25519_fe_t * a, - fd_ed25519_fe_t * b, - long * z ) { - FE_AVX_INL_DECL( vz ); - FE_AVX_INL_LD( vz, z ); - FE_AVX_INL_SWIZZLE_OUT2( a, b, vz ); -} - -static inline long * -fe_avx_zero( long * z ) { - FE_AVX_INL_DECL( vx ); - FE_AVX_INL_ZERO( vx ); - FE_AVX_INL_ST ( z, vx ); - return z; -} - -static inline long * -fe_avx_permute( long * z, - long const * x, - int imm_l0, - int imm_l1, - int imm_l2, - int imm_l3 ) { - FE_AVX_INL_DECL ( vx ); - FE_AVX_INL_LD ( vx, x ); - FE_AVX_INL_PERMUTE( vx, vx, imm_l0, imm_l1, imm_l2, imm_l3 ); - FE_AVX_INL_ST ( z, vx ); - return z; -} - -static inline long * -fe_avx_copy( long * z, - long const * x ) { - FE_AVX_INL_DECL( vx ); - FE_AVX_INL_LD ( vx, x ); - FE_AVX_INL_ST ( z, vx ); - return z; -} - -static inline long * -fe_avx_add( long * z, - long const * x, - long const * y ) { - FE_AVX_INL_DECL( vx ); - FE_AVX_INL_DECL( vy ); - FE_AVX_INL_LD ( vx, x ); - FE_AVX_INL_LD ( vy, y ); - FE_AVX_INL_ADD ( vx, vx, vy ); - FE_AVX_INL_ST ( z, vx ); - return z; -} - -static inline long * -fe_avx_sub( long * z, - long const * x, - long const * y ) { - FE_AVX_INL_DECL( vx ); - FE_AVX_INL_DECL( vy ); - FE_AVX_INL_LD ( vx, x ); - FE_AVX_INL_LD ( vy, y ); - FE_AVX_INL_SUB ( vx, vx, vy ); - FE_AVX_INL_ST ( z, vx ); - return z; -} - -FD_FN_UNUSED static long * /* Don't even try to inline this due to instruction limits */ -fe_avx_mul( long * z, - long const * x, - long const * y ) { - FE_AVX_INL_DECL( vx ); - FE_AVX_INL_DECL( vy ); - FE_AVX_INL_LD ( vx, x ); - FE_AVX_INL_LD ( vy, y ); - FE_AVX_INL_MUL ( vx, vx, vy ); - FE_AVX_INL_ST ( z, vx ); - return z; -} - -FD_FN_UNUSED static long * /* Don't even try to inline this due to instruction limits */ -fe_avx_sqn( long * z, - long const * x, - int na, - int nb, - int nc, - int nd ) { - FE_AVX_INL_DECL( vx ); - FE_AVX_INL_LD ( vx, x ); - FE_AVX_INL_SQN ( vx, vx, na,nb,nc,nd ); - FE_AVX_INL_ST ( z, vx ); - return z; -} - -FD_FN_UNUSED static long * /* Don't even try to inline this due to instruction limits */ -fe_avx_sq( long * z, - long const * x ) { - FE_AVX_INL_DECL( vx ); - FE_AVX_INL_LD ( vx, x ); - FE_AVX_INL_SQ ( vx, vx ); - FE_AVX_INL_ST ( z, vx ); - return z; -} - -static inline long * -fe_avx_sq_iter( long * z, - long const * x, - ulong n ) { - if( !n ) fe_avx_copy( z, x ); - else { - fe_avx_sq( z, x ); - for( n--; n; n-- ) fe_avx_sq( z, z ); - } - return z; -} - -static inline long * -fe_avx_pow22523( long * h, - long const * f ) { - long t0[ 40 ] __attribute__((aligned(64))); - long t1[ 40 ] __attribute__((aligned(64))); - long t2[ 40 ] __attribute__((aligned(64))); - fe_avx_sq ( t0, f ); - fe_avx_sq_iter( t1, t0, 2UL ); - fe_avx_mul ( t1, f, t1 ); - fe_avx_mul ( t0, t0, t1 ); - fe_avx_sq ( t0, t0 ); - fe_avx_mul ( t0, t1, t0 ); - fe_avx_sq_iter( t1, t0, 5UL ); - fe_avx_mul ( t0, t1, t0 ); - fe_avx_sq_iter( t1, t0, 10UL ); - fe_avx_mul ( t1, t1, t0 ); - fe_avx_sq_iter( t2, t1, 20UL ); - fe_avx_mul ( t1, t2, t1 ); - fe_avx_sq_iter( t1, t1, 10UL ); - fe_avx_mul ( t0, t1, t0 ); - fe_avx_sq_iter( t1, t0, 50UL ); - fe_avx_mul ( t1, t1, t0 ); - fe_avx_sq_iter( t2, t1, 100UL ); - fe_avx_mul ( t1, t2, t1 ); - fe_avx_sq_iter( t1, t1, 50UL ); - fe_avx_mul ( t0, t1, t0 ); - fe_avx_sq_iter( t0, t0, 2UL ); - fe_avx_mul ( h, t0, f ); - return h; -} - -static inline long * -fe_avx_lane_select( long * z, - long const * x, - int c0, - int c1, - int c2, - int c3 ) { - FE_AVX_INL_DECL ( vx ); - FE_AVX_INL_LD ( vx, x ); - FE_AVX_INL_LANE_SELECT( vx, vx, c0, c1, c2, c3 ); - FE_AVX_INL_ST ( z, vx ); - return z; -} - -static inline long * -fe_avx_dbl_mix( long * h, - long const * f ) { - FE_AVX_INL_DECL ( vf ); - FE_AVX_INL_LD ( vf, f ); - FE_AVX_INL_DBL_MIX( vf, vf ); - FE_AVX_INL_ST ( h, vf ); - return h; -} - -static inline long * -fe_avx_sub_mix( long * h, - long const * f ) { - FE_AVX_INL_DECL ( vf ); - FE_AVX_INL_LD ( vf, f ); - FE_AVX_INL_SUB_MIX( vf, vf ); - FE_AVX_INL_ST ( h, vf ); - return h; -} - -static inline long * -fe_avx_subadd_12( long * h, - long const * f ) { - FE_AVX_INL_DECL ( vf ); - FE_AVX_INL_LD ( vf, f ); - FE_AVX_INL_SUBADD_12( vf, vf ); - FE_AVX_INL_ST ( h, vf ); - return h; -} - -FD_PROTOTYPES_END - diff --git a/src/ballet/ed25519/avx/fd_ed25519_fe_avx_inl.h b/src/ballet/ed25519/avx/fd_ed25519_fe_avx_inl.h deleted file mode 100644 index e638dd4eb0..0000000000 --- a/src/ballet/ed25519/avx/fd_ed25519_fe_avx_inl.h +++ /dev/null @@ -1,836 +0,0 @@ -#ifndef HEADER_fd_src_ballet_ed25519_fd_ed25519_private_h -#error "Do not include this; use fd_ed25519_private.h" -#endif - -/* FE_AVX_INL_DECL declares 10 wl_ts named f0, f1, ... f9 for holding 4 - field elements as a 10x4 long matrix in the local scope. Each lane - of the wl_t holds the 10 limbs of a field element. */ - -#define FE_AVX_INL_DECL(f) wl_t f##0; wl_t f##1; wl_t f##2; wl_t f##3; wl_t f##4; \ - wl_t f##5; wl_t f##6; wl_t f##7; wl_t f##8; wl_t f##9 - -/* FE_AVX_INL memory operations ***************************************/ - -/* FIXME: ADD SWIZZLE IN1/OUT1 VARIANTS TOO? */ - -/* FE_AVX_INL_LD loads into h the 4 field elements in the 40 long - (32-byte aligned) memory region pointed to by p. The memory region - layout is: - ha0 hb0 hc0 hd0 - ha1 hb1 hc1 hd1 - ... - ha9 hb9 hc9 hd9 */ - -#define FE_AVX_INL_LD( h, p ) do { \ - long const * _p = (p); \ - h##0 = wl_ld( _p + 4*0 ); h##1 = wl_ld( _p + 4*1 ); \ - h##2 = wl_ld( _p + 4*2 ); h##3 = wl_ld( _p + 4*3 ); \ - h##4 = wl_ld( _p + 4*4 ); h##5 = wl_ld( _p + 4*5 ); \ - h##6 = wl_ld( _p + 4*6 ); h##7 = wl_ld( _p + 4*7 ); \ - h##8 = wl_ld( _p + 4*8 ); h##9 = wl_ld( _p + 4*9 ); \ - } while(0) - -/* FE_AVX_INL_ST stores the 4 field elements in f into the 40 long - (32-byte aligned) memory region pointed by p. The memory region - layout is: - fa0 fb0 fc0 fd0 - fa1 fb1 fc1 fd1 - ... - fa9 fb9 fc9 fd9 */ - -#define FE_AVX_INL_ST( p, f ) do { \ - long * _p = (p); \ - wl_st( _p + 4*0, f##0 ); wl_st( _p + 4*1, f##1 ); \ - wl_st( _p + 4*2, f##2 ); wl_st( _p + 4*3, f##3 ); \ - wl_st( _p + 4*4, f##4 ); wl_st( _p + 4*5, f##5 ); \ - wl_st( _p + 4*6, f##6 ); wl_st( _p + 4*7, f##7 ); \ - wl_st( _p + 4*8, f##8 ); wl_st( _p + 4*9, f##9 ); \ - } while(0) - -/* FE_AVX_INL_SWIZZLE_IN4 loads 4 field elements pointed to by a,b,c,d - into a 10x4 long matrix stored in 10 wl_ts declared via - FE_AVX_DECL_INL. - - Does limbs 0:7 as a 8x8->8x8 int matrix transpose (recursive top down - implementation) optimized for the case where input row 1,3,5,7 are zero. - Result can be treated as a 8x4 long matrix with no additional operations. - - Does limbs 8:9 as a 8x2->2x8 int matrix transpose (recursive top down - implementation) optimized for the case where input rows 1,3,5,7 are - zero. Result can be treated as a 2x4 long matrix with no additional - operations. - - These two transposes are then interleaved for lots of ILP. */ - -#define FE_AVX_INL_SWIZZLE_IN4( v, a,b,c,d ) do { \ - int const * _a = (a)->limb; \ - int const * _b = (b)->limb; \ - int const * _c = (c)->limb; \ - int const * _d = (d)->limb; \ - wi_t _z = wi_zero(); \ - wi_t _r0 = wi_ld( _a ); \ - wi_t _r8 = wi_ld( _a+8 ); \ - wi_t _r2 = wi_ld( _b ); \ - wi_t _ra = wi_ld( _b+8 ); \ - wi_t _r4 = wi_ld( _c ); \ - wi_t _rc = wi_ld( _c+8 ); \ - wi_t _r6 = wi_ld( _d ); \ - wi_t _re = wi_ld( _d+8 ); \ - wi_t _ta = _r0; _r0 = _mm256_permute2f128_si256( _ta, _r4, 0x20 ); \ - /**/ _r4 = _mm256_permute2f128_si256( _ta, _r4, 0x31 ); \ - wi_t _tc = _r2; _r2 = _mm256_permute2f128_si256( _tc, _r6, 0x20 ); \ - /**/ _r6 = _mm256_permute2f128_si256( _tc, _r6, 0x31 ); \ - wi_t _ti = _r8; _r8 = _mm256_permute2f128_si256( _ti, _rc, 0x20 ); \ - /**/ _rc = _mm256_permute2f128_si256( _ti, _rc, 0x31 ); \ - wi_t _tk = _ra; _ra = _mm256_permute2f128_si256( _tk, _re, 0x20 ); \ - /**/ _re = _mm256_permute2f128_si256( _tk, _re, 0x31 ); \ - wi_t _te = _r0; _r0 = _mm256_unpacklo_epi32 ( _te, _r2 ); \ - /**/ _r2 = _mm256_unpackhi_epi32 ( _te, _r2 ); \ - wi_t _tg = _r4; _r4 = _mm256_unpacklo_epi32 ( _tg, _r6 ); \ - /**/ _r6 = _mm256_unpackhi_epi32 ( _tg, _r6 ); \ - /**/ _r8 = _mm256_unpacklo_epi32 ( _r8, _ra ); \ - v##0 = _mm256_unpacklo_epi32( _r0, _z ); \ - v##1 = _mm256_unpackhi_epi32( _r0, _z ); \ - v##2 = _mm256_unpacklo_epi32( _r2, _z ); \ - v##3 = _mm256_unpackhi_epi32( _r2, _z ); \ - v##4 = _mm256_unpacklo_epi32( _r4, _z ); \ - v##5 = _mm256_unpackhi_epi32( _r4, _z ); \ - v##6 = _mm256_unpacklo_epi32( _r6, _z ); \ - v##7 = _mm256_unpackhi_epi32( _r6, _z ); \ - v##8 = _mm256_unpacklo_epi32( _r8, _z ); \ - v##9 = _mm256_unpackhi_epi32( _r8, _z ); \ - } while(0) - -/* FE_AVX_INL_SWIZZLE_IN3 is FE_AVX_INL_SWIZZLE_IN4 optimized for a zero - d column. */ - -#define FE_AVX_INL_SWIZZLE_IN3( v, a,b,c ) do { \ - int const * _a = (a)->limb; \ - int const * _b = (b)->limb; \ - int const * _c = (c)->limb; \ - wi_t _z = wi_zero(); \ - wi_t _r0 = wi_ld( _a ); \ - wi_t _r8 = wi_ld( _a+8 ); \ - wi_t _r2 = wi_ld( _b ); \ - wi_t _ra = wi_ld( _b+8 ); \ - wi_t _r4 = wi_ld( _c ); \ - wi_t _rc = wi_ld( _c+8 ); \ - wi_t _ta = _r0; _r0 = _mm256_permute2f128_si256( _ta, _r4, 0x20 ); \ - /**/ _r4 = _mm256_permute2f128_si256( _ta, _r4, 0x31 ); \ - wi_t _tc = _r2; _r2 = _mm256_permute2f128_si256( _tc, _z, 0x20 ); \ - wi_t _r6 = _mm256_permute2f128_si256( _tc, _z, 0x31 ); \ - wi_t _ti = _r8; _r8 = _mm256_permute2f128_si256( _ti, _rc, 0x20 ); \ - /**/ _rc = _mm256_permute2f128_si256( _ti, _rc, 0x31 ); \ - wi_t _tk = _ra; _ra = _mm256_permute2f128_si256( _tk, _z, 0x20 ); \ - wi_t _te = _r0; _r0 = _mm256_unpacklo_epi32 ( _te, _r2 ); \ - /**/ _r2 = _mm256_unpackhi_epi32 ( _te, _r2 ); \ - wi_t _tg = _r4; _r4 = _mm256_unpacklo_epi32 ( _tg, _r6 ); \ - /**/ _r6 = _mm256_unpackhi_epi32 ( _tg, _r6 ); \ - /**/ _r8 = _mm256_unpacklo_epi32 ( _r8, _ra ); \ - v##0 = _mm256_unpacklo_epi32( _r0, _z ); \ - v##1 = _mm256_unpackhi_epi32( _r0, _z ); \ - v##2 = _mm256_unpacklo_epi32( _r2, _z ); \ - v##3 = _mm256_unpackhi_epi32( _r2, _z ); \ - v##4 = _mm256_unpacklo_epi32( _r4, _z ); \ - v##5 = _mm256_unpackhi_epi32( _r4, _z ); \ - v##6 = _mm256_unpacklo_epi32( _r6, _z ); \ - v##7 = _mm256_unpackhi_epi32( _r6, _z ); \ - v##8 = _mm256_unpacklo_epi32( _r8, _z ); \ - v##9 = _mm256_unpackhi_epi32( _r8, _z ); \ - } while(0) - -/* FE_AVX_INL_SWIZZLE_IN2 is FE_AVX_INL_SWIZZLE_IN3 optimized for a zero - c column. */ - -#define FE_AVX_INL_SWIZZLE_IN2( v, a,b ) do { \ - int const * _a = (a)->limb; \ - int const * _b = (b)->limb; \ - wi_t _z = wi_zero(); \ - wi_t _r0 = wi_ld( _a ); \ - wi_t _r8 = wi_ld( _a+8 ); \ - wi_t _r2 = wi_ld( _b ); \ - wi_t _ra = wi_ld( _b+8 ); \ - wi_t _ta = _r0; _r0 = _mm256_permute2f128_si256( _ta, _z, 0x20 ); \ - wi_t _r4 = _mm256_permute2f128_si256( _ta, _z, 0x31 ); \ - wi_t _tc = _r2; _r2 = _mm256_permute2f128_si256( _tc, _z, 0x20 ); \ - wi_t _r6 = _mm256_permute2f128_si256( _tc, _z, 0x31 ); \ - wi_t _ti = _r8; _r8 = _mm256_permute2f128_si256( _ti, _z, 0x20 ); \ - wi_t _tk = _ra; _ra = _mm256_permute2f128_si256( _tk, _z, 0x20 ); \ - wi_t _te = _r0; _r0 = _mm256_unpacklo_epi32 ( _te, _r2 ); \ - /**/ _r2 = _mm256_unpackhi_epi32 ( _te, _r2 ); \ - wi_t _tg = _r4; _r4 = _mm256_unpacklo_epi32 ( _tg, _r6 ); \ - /**/ _r6 = _mm256_unpackhi_epi32 ( _tg, _r6 ); \ - /**/ _r8 = _mm256_unpacklo_epi32 ( _r8, _ra ); \ - v##0 = _mm256_unpacklo_epi32( _r0, _z ); \ - v##1 = _mm256_unpackhi_epi32( _r0, _z ); \ - v##2 = _mm256_unpacklo_epi32( _r2, _z ); \ - v##3 = _mm256_unpackhi_epi32( _r2, _z ); \ - v##4 = _mm256_unpacklo_epi32( _r4, _z ); \ - v##5 = _mm256_unpackhi_epi32( _r4, _z ); \ - v##6 = _mm256_unpacklo_epi32( _r6, _z ); \ - v##7 = _mm256_unpackhi_epi32( _r6, _z ); \ - v##8 = _mm256_unpacklo_epi32( _r8, _z ); \ - v##9 = _mm256_unpackhi_epi32( _r8, _z ); \ - } while(0) - -/* FE_AVX_INL_SWIZZLE_OUT4 writes a 10x4 long matrix (where every - element is fits into 32-bits) in 10 wl_t into 4 field elements. The - input 10x4 long matrix can be reinterpreted for free as a 10x8 int - matrix where columns 1,3,5,7. - - This then does a 8x8 int matrix transpose (recursive bottom up - implementation) for the first 8 rows. As the first step does - transposes for 2x2 subblocks, the zeros in columns 1,3,5,7 - immediately get compacted into the rows 1,3,5,7 and thus can be - immediately discarded. - - Similar, the last two rows are done as an 2x8 int matrix transpose in - the same matter and the operations are interleaved for lots of ILP. */ - -#define FE_AVX_INL_SWIZZLE_OUT4( a,b,c,d, v ) do { \ - wf_t _z = wf_zero(); \ - wf_t _r0 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##0 ), _mm256_castsi256_ps( v##1 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _r2 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##2 ), _mm256_castsi256_ps( v##3 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _r4 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##4 ), _mm256_castsi256_ps( v##5 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _r6 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##6 ), _mm256_castsi256_ps( v##7 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _r8 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##8 ), _mm256_castsi256_ps( v##9 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _ta = _r0; _r0 = _mm256_shuffle_ps( _ta, _r2, _MM_SHUFFLE(2,0,2,0) ); \ - _r2 = _mm256_shuffle_ps( _ta, _r2, _MM_SHUFFLE(3,1,3,1) ); \ - wf_t _tb = _r4; _r4 = _mm256_shuffle_ps( _tb, _r6, _MM_SHUFFLE(2,0,2,0) ); \ - _r6 = _mm256_shuffle_ps( _tb, _r6, _MM_SHUFFLE(3,1,3,1) ); \ - wf_t _tc = _r8; _r8 = _mm256_shuffle_ps( _tc, _z, _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _ra = _mm256_shuffle_ps( _tc, _z, _MM_SHUFFLE(3,1,3,1) ); \ - wf_t _td = _r0; _r0 = _mm256_permute2f128_ps( _td, _r4, 0x20 ); \ - _r4 = _mm256_permute2f128_ps( _td, _r4, 0x31 ); \ - wf_t _te = _r2; _r2 = _mm256_permute2f128_ps( _te, _r6, 0x20 ); \ - _r6 = _mm256_permute2f128_ps( _te, _r6, 0x31 ); \ - wf_t _tf = _r8; _r8 = _mm256_permute2f128_ps( _tf, _z, 0x20 ); \ - wf_t _rc = _mm256_permute2f128_ps( _tf, _z, 0x31 ); \ - wf_t _tg = _ra; _ra = _mm256_permute2f128_ps( _tg, _z, 0x20 ); \ - wf_t _re = _mm256_permute2f128_ps( _tg, _z, 0x31 ); \ - int * _a = (a)->limb; \ - int * _b = (b)->limb; \ - int * _c = (c)->limb; \ - int * _d = (d)->limb; \ - wi_st( _a, _mm256_castps_si256( _r0 ) ); \ - wi_st( _a+8, _mm256_castps_si256( _r8 ) ); \ - wi_st( _b, _mm256_castps_si256( _r2 ) ); \ - wi_st( _b+8, _mm256_castps_si256( _ra ) ); \ - wi_st( _c, _mm256_castps_si256( _r4 ) ); \ - wi_st( _c+8, _mm256_castps_si256( _rc ) ); \ - wi_st( _d, _mm256_castps_si256( _r6 ) ); \ - wi_st( _d+8, _mm256_castps_si256( _re ) ); \ - } while(0) - -/* FE_AVX_INL_SWIZZLE_OUT3 is FE_AVX_INL_SWIZZLE_OUT4 optimized to - discard the d column */ - -#define FE_AVX_INL_SWIZZLE_OUT3( a,b,c, v ) do { \ - wf_t _z = wf_zero(); \ - wf_t _r0 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##0 ), _mm256_castsi256_ps( v##1 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _r2 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##2 ), _mm256_castsi256_ps( v##3 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _r4 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##4 ), _mm256_castsi256_ps( v##5 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _r6 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##6 ), _mm256_castsi256_ps( v##7 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _r8 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##8 ), _mm256_castsi256_ps( v##9 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _ta = _r0; _r0 = _mm256_shuffle_ps( _ta, _r2, _MM_SHUFFLE(2,0,2,0) ); \ - _r2 = _mm256_shuffle_ps( _ta, _r2, _MM_SHUFFLE(3,1,3,1) ); \ - wf_t _tb = _r4; _r4 = _mm256_shuffle_ps( _tb, _r6, _MM_SHUFFLE(2,0,2,0) ); \ - _r6 = _mm256_shuffle_ps( _tb, _r6, _MM_SHUFFLE(3,1,3,1) ); \ - wf_t _ra = _r8; _r8 = _mm256_shuffle_ps( _ra, _z, _MM_SHUFFLE(2,0,2,0) ); \ - /**/ _ra = _mm256_shuffle_ps( _ra, _z, _MM_SHUFFLE(3,1,3,1) ); \ - wf_t _tc = _r0; _r0 = _mm256_permute2f128_ps( _tc, _r4, 0x20 ); \ - _r4 = _mm256_permute2f128_ps( _tc, _r4, 0x31 ); \ - /**/ _r2 = _mm256_permute2f128_ps( _r2, _r6, 0x20 ); \ - wf_t _rc = _r8; _r8 = _mm256_permute2f128_ps( _rc, _z, 0x20 ); \ - /**/ _rc = _mm256_permute2f128_ps( _rc, _z, 0x31 ); \ - /**/ _ra = _mm256_permute2f128_ps( _ra, _z, 0x20 ); \ - int * _a = (a)->limb; \ - int * _b = (b)->limb; \ - int * _c = (c)->limb; \ - wi_st( _a, _mm256_castps_si256( _r0 ) ); \ - wi_st( _a+8, _mm256_castps_si256( _r8 ) ); \ - wi_st( _b, _mm256_castps_si256( _r2 ) ); \ - wi_st( _b+8, _mm256_castps_si256( _ra ) ); \ - wi_st( _c, _mm256_castps_si256( _r4 ) ); \ - wi_st( _c+8, _mm256_castps_si256( _rc ) ); \ - } while(0) - -/* FE_AVX_INL_SWIZZLE_OUT2 is FE_AVX_INL_SWIZZLE_OUT3 optimized to - discard the c column */ - -#define FE_AVX_INL_SWIZZLE_OUT2( a,b, v ) do { \ - wf_t _z = wf_zero(); \ - wf_t _r0 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##0 ), _mm256_castsi256_ps( v##1 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _r2 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##2 ), _mm256_castsi256_ps( v##3 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _r4 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##4 ), _mm256_castsi256_ps( v##5 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _r6 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##6 ), _mm256_castsi256_ps( v##7 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _r8 = _mm256_shuffle_ps( _mm256_castsi256_ps( v##8 ), _mm256_castsi256_ps( v##9 ), _MM_SHUFFLE(2,0,2,0) ); \ - wf_t _ta = _r0; _r0 = _mm256_shuffle_ps( _ta, _r2, _MM_SHUFFLE(2,0,2,0) ); \ - _r2 = _mm256_shuffle_ps( _ta, _r2, _MM_SHUFFLE(3,1,3,1) ); \ - wf_t _tb = _r4; _r4 = _mm256_shuffle_ps( _tb, _r6, _MM_SHUFFLE(2,0,2,0) ); \ - _r6 = _mm256_shuffle_ps( _tb, _r6, _MM_SHUFFLE(3,1,3,1) ); \ - wf_t _ra = _r8; _r8 = _mm256_shuffle_ps( _ra, _z, _MM_SHUFFLE(2,0,2,0) ); \ - /**/ _ra = _mm256_shuffle_ps( _ra, _z, _MM_SHUFFLE(3,1,3,1) ); \ - /**/ _r0 = _mm256_permute2f128_ps( _r0, _r4, 0x20 ); \ - /**/ _r2 = _mm256_permute2f128_ps( _r2, _r6, 0x20 ); \ - /**/ _r8 = _mm256_permute2f128_ps( _r8, _z, 0x20 ); \ - /**/ _ra = _mm256_permute2f128_ps( _ra, _z, 0x20 ); \ - int * _a = (a)->limb; \ - int * _b = (b)->limb; \ - wi_st( _a, _mm256_castps_si256( _r0 ) ); \ - wi_st( _a+8, _mm256_castps_si256( _r8 ) ); \ - wi_st( _b, _mm256_castps_si256( _r2 ) ); \ - wi_st( _b+8, _mm256_castps_si256( _ra ) ); \ - } while(0) - -/* FE_AVX_INL_PAIR_SWIZZLE_IN4 is an optimized implementation of: - FE_AVX_INL_SWIZZLE_IN4( v, a,b,c,d ) - FE_AVX_INL_SWIZZLE_IN4( w, e,f,g,h ) - Basically, the 2 8x8 transposes are done as before but the 2 2x8 - transposes are merged into 1 2x4 transpose. */ - -#define FE_AVX_INL_PAIR_SWIZZLE_IN4( v, a,b,c,d, w, e,f,g,h ) do { \ - wi_t _z = wi_zero(); \ - int const * _a = (a)->limb; int const * _e = (e)->limb; \ - int const * _b = (b)->limb; int const * _f = (f)->limb; \ - int const * _c = (c)->limb; int const * _g = (g)->limb; \ - int const * _d = (d)->limb; int const * _h = (h)->limb; \ - wi_t _r0 = wi_ld( _a ); wi_t _s0 = wi_ld( _e ); \ - wi_t _r8 = wi_ld( _a+8 ); wi_t _s8 = wi_ld( _e+8 ); \ - wi_t _r2 = wi_ld( _b ); wi_t _s2 = wi_ld( _f ); \ - wi_t _ra = wi_ld( _b+8 ); wi_t _sa = wi_ld( _f+8 ); \ - wi_t _r4 = wi_ld( _c ); wi_t _s4 = wi_ld( _g ); \ - wi_t _rc = wi_ld( _c+8 ); wi_t _sc = wi_ld( _g+8 ); \ - wi_t _r6 = wi_ld( _d ); wi_t _s6 = wi_ld( _h ); \ - wi_t _re = wi_ld( _d+8 ); wi_t _se = wi_ld( _h+8 ); \ - wi_t _ta = _r0; _r0 = _mm256_permute2f128_si256( _ta, _r4, 0x20 ); wi_t _ua = _s0; _s0 = _mm256_permute2f128_si256( _ua, _s4, 0x20 ); \ - /**/ _r4 = _mm256_permute2f128_si256( _ta, _r4, 0x31 ); /**/ _s4 = _mm256_permute2f128_si256( _ua, _s4, 0x31 ); \ - wi_t _tc = _r2; _r2 = _mm256_permute2f128_si256( _tc, _r6, 0x20 ); wi_t _uc = _s2; _s2 = _mm256_permute2f128_si256( _uc, _s6, 0x20 ); \ - /**/ _r6 = _mm256_permute2f128_si256( _tc, _r6, 0x31 ); /**/ _s6 = _mm256_permute2f128_si256( _uc, _s6, 0x31 ); \ - /**/ _r8 = _mm256_permute2f128_si256( _r8, _s8, 0x20 ); /**/ _ra = _mm256_permute2f128_si256( _ra, _sa, 0x20 ); \ - /**/ _rc = _mm256_permute2f128_si256( _rc, _sc, 0x20 ); /**/ _re = _mm256_permute2f128_si256( _re, _se, 0x20 ); \ - wi_t _te = _r0; _r0 = _mm256_unpacklo_epi32 ( _te, _r2 ); wi_t _ue = _s0; _s0 = _mm256_unpacklo_epi32 ( _ue, _s2 ); \ - /**/ _r2 = _mm256_unpackhi_epi32 ( _te, _r2 ); /**/ _s2 = _mm256_unpackhi_epi32 ( _ue, _s2 ); \ - wi_t _tg = _r4; _r4 = _mm256_unpacklo_epi32 ( _tg, _r6 ); wi_t _ug = _s4; _s4 = _mm256_unpacklo_epi32 ( _ug, _s6 ); \ - /**/ _r6 = _mm256_unpackhi_epi32 ( _tg, _r6 ); /**/ _s6 = _mm256_unpackhi_epi32 ( _ug, _s6 ); \ - wi_t _ti = _r8; _r8 = _mm256_permute2f128_si256( _ti, _rc, 0x20 ); /**/ _rc = _mm256_permute2f128_si256( _ti, _rc, 0x31 ); \ - wi_t _tk = _ra; _ra = _mm256_permute2f128_si256( _tk, _re, 0x20 ); /**/ _re = _mm256_permute2f128_si256( _tk, _re, 0x31 ); \ - /**/ _r8 = _mm256_unpacklo_epi32 ( _r8, _ra ); /**/ _rc = _mm256_unpacklo_epi32 ( _rc, _re ); \ - v##0 = _mm256_unpacklo_epi32( _r0, _z ); w##0 = _mm256_unpacklo_epi32( _s0, _z ); \ - v##1 = _mm256_unpackhi_epi32( _r0, _z ); w##1 = _mm256_unpackhi_epi32( _s0, _z ); \ - v##2 = _mm256_unpacklo_epi32( _r2, _z ); w##2 = _mm256_unpacklo_epi32( _s2, _z ); \ - v##3 = _mm256_unpackhi_epi32( _r2, _z ); w##3 = _mm256_unpackhi_epi32( _s2, _z ); \ - v##4 = _mm256_unpacklo_epi32( _r4, _z ); w##4 = _mm256_unpacklo_epi32( _s4, _z ); \ - v##5 = _mm256_unpackhi_epi32( _r4, _z ); w##5 = _mm256_unpackhi_epi32( _s4, _z ); \ - v##6 = _mm256_unpacklo_epi32( _r6, _z ); w##6 = _mm256_unpacklo_epi32( _s6, _z ); \ - v##7 = _mm256_unpackhi_epi32( _r6, _z ); w##7 = _mm256_unpackhi_epi32( _s6, _z ); \ - v##8 = _mm256_unpacklo_epi32( _r8, _z ); w##8 = _mm256_unpacklo_epi32( _rc, _z ); \ - v##9 = _mm256_unpackhi_epi32( _r8, _z ); w##9 = _mm256_unpackhi_epi32( _rc, _z ); \ - } while(0) - -/* FE_AVX_INL_PAIR_SWIZZLE_IN3 is FE_AVX_INL_PAIR_SWIZZLE_IN4 optimized - for zero d and h columns. */ - -#define FE_AVX_INL_PAIR_SWIZZLE_IN3( v, a,b,c, w, e,f,g ) do { \ - wi_t _z = wi_zero(); \ - int const * _a = (a)->limb; int const * _e = (e)->limb; \ - int const * _b = (b)->limb; int const * _f = (f)->limb; \ - int const * _c = (c)->limb; int const * _g = (g)->limb; \ - wi_t _r0 = wi_ld( _a ); wi_t _s0 = wi_ld( _e ); \ - wi_t _r8 = wi_ld( _a+8 ); wi_t _s8 = wi_ld( _e+8 ); \ - wi_t _r2 = wi_ld( _b ); wi_t _s2 = wi_ld( _f ); \ - wi_t _ra = wi_ld( _b+8 ); wi_t _sa = wi_ld( _f+8 ); \ - wi_t _r4 = wi_ld( _c ); wi_t _s4 = wi_ld( _g ); \ - wi_t _rc = wi_ld( _c+8 ); wi_t _sc = wi_ld( _g+8 ); \ - wi_t _ta = _r0; _r0 = _mm256_permute2f128_si256( _ta, _r4, 0x20 ); wi_t _ua = _s0; _s0 = _mm256_permute2f128_si256( _ua, _s4, 0x20 ); \ - /**/ _r4 = _mm256_permute2f128_si256( _ta, _r4, 0x31 ); /**/ _s4 = _mm256_permute2f128_si256( _ua, _s4, 0x31 ); \ - wi_t _tc = _r2; _r2 = _mm256_permute2f128_si256( _tc, _z, 0x20 ); wi_t _uc = _s2; _s2 = _mm256_permute2f128_si256( _uc, _z, 0x20 ); \ - wi_t _r6 = _mm256_permute2f128_si256( _tc, _z, 0x31 ); wi_t _s6 = _mm256_permute2f128_si256( _uc, _z, 0x31 ); \ - /**/ _r8 = _mm256_permute2f128_si256( _r8, _s8, 0x20 ); /**/ _ra = _mm256_permute2f128_si256( _ra, _sa, 0x20 ); \ - /**/ _rc = _mm256_permute2f128_si256( _rc, _sc, 0x20 ); \ - wi_t _te = _r0; _r0 = _mm256_unpacklo_epi32 ( _te, _r2 ); wi_t _ue = _s0; _s0 = _mm256_unpacklo_epi32 ( _ue, _s2 ); \ - /**/ _r2 = _mm256_unpackhi_epi32 ( _te, _r2 ); /**/ _s2 = _mm256_unpackhi_epi32 ( _ue, _s2 ); \ - wi_t _tg = _r4; _r4 = _mm256_unpacklo_epi32 ( _tg, _r6 ); wi_t _ug = _s4; _s4 = _mm256_unpacklo_epi32 ( _ug, _s6 ); \ - /**/ _r6 = _mm256_unpackhi_epi32 ( _tg, _r6 ); /**/ _s6 = _mm256_unpackhi_epi32 ( _ug, _s6 ); \ - wi_t _ti = _r8; _r8 = _mm256_permute2f128_si256( _ti, _rc, 0x20 ); /**/ _rc = _mm256_permute2f128_si256( _ti, _rc, 0x31 ); \ - wi_t _tk = _ra; _ra = _mm256_permute2f128_si256( _tk, _z, 0x20 ); wi_t _re = _mm256_permute2f128_si256( _tk, _z, 0x31 ); \ - /**/ _r8 = _mm256_unpacklo_epi32 ( _r8, _ra ); /**/ _rc = _mm256_unpacklo_epi32 ( _rc, _re ); \ - v##0 = _mm256_unpacklo_epi32( _r0, _z ); w##0 = _mm256_unpacklo_epi32( _s0, _z ); \ - v##1 = _mm256_unpackhi_epi32( _r0, _z ); w##1 = _mm256_unpackhi_epi32( _s0, _z ); \ - v##2 = _mm256_unpacklo_epi32( _r2, _z ); w##2 = _mm256_unpacklo_epi32( _s2, _z ); \ - v##3 = _mm256_unpackhi_epi32( _r2, _z ); w##3 = _mm256_unpackhi_epi32( _s2, _z ); \ - v##4 = _mm256_unpacklo_epi32( _r4, _z ); w##4 = _mm256_unpacklo_epi32( _s4, _z ); \ - v##5 = _mm256_unpackhi_epi32( _r4, _z ); w##5 = _mm256_unpackhi_epi32( _s4, _z ); \ - v##6 = _mm256_unpacklo_epi32( _r6, _z ); w##6 = _mm256_unpacklo_epi32( _s6, _z ); \ - v##7 = _mm256_unpackhi_epi32( _r6, _z ); w##7 = _mm256_unpackhi_epi32( _s6, _z ); \ - v##8 = _mm256_unpacklo_epi32( _r8, _z ); w##8 = _mm256_unpacklo_epi32( _rc, _z ); \ - v##9 = _mm256_unpackhi_epi32( _r8, _z ); w##9 = _mm256_unpackhi_epi32( _rc, _z ); \ - } while(0) - -/* FE_AVX_INL_PAIR_SWIZZLE_IN2 is FE_AVX_INL_PAIR_SWIZZLE_IN2 optimized - for zero c and g columns. */ - -#define FE_AVX_INL_PAIR_SWIZZLE_IN2( v, a,b, w, e,f ) do { \ - wi_t _z = wi_zero(); \ - int const * _a = (a)->limb; int const * _e = (e)->limb; \ - int const * _b = (b)->limb; int const * _f = (f)->limb; \ - wi_t _r0 = wi_ld( _a ); wi_t _s0 = wi_ld( _e ); \ - wi_t _r8 = wi_ld( _a+8 ); wi_t _s8 = wi_ld( _e+8 ); \ - wi_t _r2 = wi_ld( _b ); wi_t _s2 = wi_ld( _f ); \ - wi_t _ra = wi_ld( _b+8 ); wi_t _sa = wi_ld( _f+8 ); \ - wi_t _ta = _r0; _r0 = _mm256_permute2f128_si256( _ta, _z, 0x20 ); wi_t _ua = _s0; _s0 = _mm256_permute2f128_si256( _ua, _z, 0x20 ); \ - wi_t _r4 = _mm256_permute2f128_si256( _ta, _z, 0x31 ); wi_t _s4 = _mm256_permute2f128_si256( _ua, _z, 0x31 ); \ - wi_t _tc = _r2; _r2 = _mm256_permute2f128_si256( _tc, _z, 0x20 ); wi_t _uc = _s2; _s2 = _mm256_permute2f128_si256( _uc, _z, 0x20 ); \ - wi_t _r6 = _mm256_permute2f128_si256( _tc, _z, 0x31 ); wi_t _s6 = _mm256_permute2f128_si256( _uc, _z, 0x31 ); \ - /**/ _r8 = _mm256_permute2f128_si256( _r8, _s8, 0x20 ); /**/ _ra = _mm256_permute2f128_si256( _ra, _sa, 0x20 ); \ - wi_t _te = _r0; _r0 = _mm256_unpacklo_epi32 ( _te, _r2 ); wi_t _ue = _s0; _s0 = _mm256_unpacklo_epi32 ( _ue, _s2 ); \ - /**/ _r2 = _mm256_unpackhi_epi32 ( _te, _r2 ); /**/ _s2 = _mm256_unpackhi_epi32 ( _ue, _s2 ); \ - wi_t _tg = _r4; _r4 = _mm256_unpacklo_epi32 ( _tg, _r6 ); wi_t _ug = _s4; _s4 = _mm256_unpacklo_epi32 ( _ug, _s6 ); \ - /**/ _r6 = _mm256_unpackhi_epi32 ( _tg, _r6 ); /**/ _s6 = _mm256_unpackhi_epi32 ( _ug, _s6 ); \ - wi_t _ti = _r8; _r8 = _mm256_permute2f128_si256( _ti, _z, 0x20 ); wi_t _rc = _mm256_permute2f128_si256( _ti, _z, 0x31 ); \ - wi_t _tk = _ra; _ra = _mm256_permute2f128_si256( _tk, _z, 0x20 ); wi_t _re = _mm256_permute2f128_si256( _tk, _z, 0x31 ); \ - /**/ _r8 = _mm256_unpacklo_epi32 ( _r8, _ra ); /**/ _rc = _mm256_unpacklo_epi32 ( _rc, _re ); \ - v##0 = _mm256_unpacklo_epi32( _r0, _z ); w##0 = _mm256_unpacklo_epi32( _s0, _z ); \ - v##1 = _mm256_unpackhi_epi32( _r0, _z ); w##1 = _mm256_unpackhi_epi32( _s0, _z ); \ - v##2 = _mm256_unpacklo_epi32( _r2, _z ); w##2 = _mm256_unpacklo_epi32( _s2, _z ); \ - v##3 = _mm256_unpackhi_epi32( _r2, _z ); w##3 = _mm256_unpackhi_epi32( _s2, _z ); \ - v##4 = _mm256_unpacklo_epi32( _r4, _z ); w##4 = _mm256_unpacklo_epi32( _s4, _z ); \ - v##5 = _mm256_unpackhi_epi32( _r4, _z ); w##5 = _mm256_unpackhi_epi32( _s4, _z ); \ - v##6 = _mm256_unpacklo_epi32( _r6, _z ); w##6 = _mm256_unpacklo_epi32( _s6, _z ); \ - v##7 = _mm256_unpackhi_epi32( _r6, _z ); w##7 = _mm256_unpackhi_epi32( _s6, _z ); \ - v##8 = _mm256_unpacklo_epi32( _r8, _z ); w##8 = _mm256_unpacklo_epi32( _rc, _z ); \ - v##9 = _mm256_unpackhi_epi32( _r8, _z ); w##9 = _mm256_unpackhi_epi32( _rc, _z ); \ - } while(0) - -/* FE_AVX_INL arithmetic operations ***********************************/ - -/* FE_AVX_INL_ZERO sets the 4 field elements stored in 10 wl_ts declared - via FE_AVX_INL_DECL to zero. */ - -#define FE_AVX_INL_ZERO( h ) do { \ - wl_t _z = wl_zero(); \ - h##0 = _z; h##1 = _z; \ - h##2 = _z; h##3 = _z; \ - h##4 = _z; h##5 = _z; \ - h##6 = _z; h##7 = _z; \ - h##8 = _z; h##9 = _z; \ - } while(0) - -/* FE_AVX_INL_PERMUTE permutes the lanes of the f and stores the results - in g. imm_l* should be compile time and in 0:3. In place operation - is fine. */ - -#define FE_AVX_INL_PERMUTE( h, f, imm_l0,imm_l1,imm_l2,imm_l3 ) do { \ - h##0 = wl_permute( f##0, (imm_l0), (imm_l1), (imm_l2), (imm_l3) ); \ - h##1 = wl_permute( f##1, (imm_l0), (imm_l1), (imm_l2), (imm_l3) ); \ - h##2 = wl_permute( f##2, (imm_l0), (imm_l1), (imm_l2), (imm_l3) ); \ - h##3 = wl_permute( f##3, (imm_l0), (imm_l1), (imm_l2), (imm_l3) ); \ - h##4 = wl_permute( f##4, (imm_l0), (imm_l1), (imm_l2), (imm_l3) ); \ - h##5 = wl_permute( f##5, (imm_l0), (imm_l1), (imm_l2), (imm_l3) ); \ - h##6 = wl_permute( f##6, (imm_l0), (imm_l1), (imm_l2), (imm_l3) ); \ - h##7 = wl_permute( f##7, (imm_l0), (imm_l1), (imm_l2), (imm_l3) ); \ - h##8 = wl_permute( f##8, (imm_l0), (imm_l1), (imm_l2), (imm_l3) ); \ - h##9 = wl_permute( f##9, (imm_l0), (imm_l1), (imm_l2), (imm_l3) ); \ - } while(0) - -/* FE_AVX_INL_COPY does h = f. In place operation is fine. */ - -#define FE_AVX_INL_COPY( h, f ) do { \ - h##0 = f##0; h##1 = f##1; \ - h##2 = f##2; h##3 = f##3; \ - h##4 = f##4; h##5 = f##5; \ - h##6 = f##6; h##7 = f##7; \ - h##8 = f##8; h##9 = f##9; \ - } while(0) - -/* FE_AVX_INL_ADD does a simple add of the corresponding lanes of f and - g (with no reduction) and stores the result in h. In place operation - is fine. */ - -#define FE_AVX_INL_ADD( h, f, g ) do { \ - h##0 = wl_add( f##0, g##0 ); \ - h##1 = wl_add( f##1, g##1 ); \ - h##2 = wl_add( f##2, g##2 ); \ - h##3 = wl_add( f##3, g##3 ); \ - h##4 = wl_add( f##4, g##4 ); \ - h##5 = wl_add( f##5, g##5 ); \ - h##6 = wl_add( f##6, g##6 ); \ - h##7 = wl_add( f##7, g##7 ); \ - h##8 = wl_add( f##8, g##8 ); \ - h##9 = wl_add( f##9, g##9 ); \ - } while(0) - -/* FE_AVX_INL_SUB does a simple subtract of the corresponding lanes of f - and g (with no reduction) and stores the result in h. In place - operation is fine. */ - -#define FE_AVX_INL_SUB( h, f, g ) do { \ - h##0 = wl_sub( f##0, g##0 ); \ - h##1 = wl_sub( f##1, g##1 ); \ - h##2 = wl_sub( f##2, g##2 ); \ - h##3 = wl_sub( f##3, g##3 ); \ - h##4 = wl_sub( f##4, g##4 ); \ - h##5 = wl_sub( f##5, g##5 ); \ - h##6 = wl_sub( f##6, g##6 ); \ - h##7 = wl_sub( f##7, g##7 ); \ - h##8 = wl_sub( f##8, g##8 ); \ - h##9 = wl_sub( f##9, g##9 ); \ - } while(0) - -/* FE_AVX_INL_MUL does a multiply of the corresponding lanes of f and g - (with partial reduction) and stores the result in h. In place - operation is fine. */ - -#define FE_AVX_INL_MUL( h, f, g ) do { \ - wl_t _19 = wl_bcast( 19L ); \ - \ - wl_t _g1_19 = wl_mul_ll( _19, g##1 ); wl_t _g2_19 = wl_mul_ll( _19, g##2 ); \ - wl_t _g3_19 = wl_mul_ll( _19, g##3 ); wl_t _g4_19 = wl_mul_ll( _19, g##4 ); \ - wl_t _g5_19 = wl_mul_ll( _19, g##5 ); wl_t _g6_19 = wl_mul_ll( _19, g##6 ); \ - wl_t _g7_19 = wl_mul_ll( _19, g##7 ); wl_t _g8_19 = wl_mul_ll( _19, g##8 ); \ - wl_t _g9_19 = wl_mul_ll( _19, g##9 ); \ - \ - wl_t _f1_2 = wl_add( f##1, f##1 ); wl_t _f3_2 = wl_add( f##3, f##3 ); \ - wl_t _f5_2 = wl_add( f##5, f##5 ); wl_t _f7_2 = wl_add( f##7, f##7 ); \ - wl_t _f9_2 = wl_add( f##9, f##9 ); \ - \ - wl_t _f0g0 = wl_mul_ll( f##0, g##0 ); wl_t _f0g1 = wl_mul_ll( f##0, g##1 ); \ - wl_t _f0g2 = wl_mul_ll( f##0, g##2 ); wl_t _f0g3 = wl_mul_ll( f##0, g##3 ); \ - wl_t _f0g4 = wl_mul_ll( f##0, g##4 ); wl_t _f0g5 = wl_mul_ll( f##0, g##5 ); \ - wl_t _f0g6 = wl_mul_ll( f##0, g##6 ); wl_t _f0g7 = wl_mul_ll( f##0, g##7 ); \ - wl_t _f0g8 = wl_mul_ll( f##0, g##8 ); wl_t _f0g9 = wl_mul_ll( f##0, g##9 ); \ - \ - wl_t _f1g0 = wl_mul_ll( f##1, g##0 ); wl_t _f1g1_2 = wl_mul_ll( _f1_2, g##1 ); \ - wl_t _f1g2 = wl_mul_ll( f##1, g##2 ); wl_t _f1g3_2 = wl_mul_ll( _f1_2, g##3 ); \ - wl_t _f1g4 = wl_mul_ll( f##1, g##4 ); wl_t _f1g5_2 = wl_mul_ll( _f1_2, g##5 ); \ - wl_t _f1g6 = wl_mul_ll( f##1, g##6 ); wl_t _f1g7_2 = wl_mul_ll( _f1_2, g##7 ); \ - wl_t _f1g8 = wl_mul_ll( f##1, g##8 ); wl_t _f1g9_38 = wl_mul_ll( _f1_2, _g9_19 ); \ - \ - wl_t _f2g0 = wl_mul_ll( f##2, g##0 ); wl_t _f2g1 = wl_mul_ll( f##2, g##1 ); \ - wl_t _f2g2 = wl_mul_ll( f##2, g##2 ); wl_t _f2g3 = wl_mul_ll( f##2, g##3 ); \ - wl_t _f2g4 = wl_mul_ll( f##2, g##4 ); wl_t _f2g5 = wl_mul_ll( f##2, g##5 ); \ - wl_t _f2g6 = wl_mul_ll( f##2, g##6 ); wl_t _f2g7 = wl_mul_ll( f##2, g##7 ); \ - wl_t _f2g8_19 = wl_mul_ll( f##2, _g8_19 ); wl_t _f2g9_19 = wl_mul_ll( f##2, _g9_19 ); \ - \ - wl_t _f3g0 = wl_mul_ll( f##3, g##0 ); wl_t _f3g1_2 = wl_mul_ll( _f3_2, g##1 ); \ - wl_t _f3g2 = wl_mul_ll( f##3, g##2 ); wl_t _f3g3_2 = wl_mul_ll( _f3_2, g##3 ); \ - wl_t _f3g4 = wl_mul_ll( f##3, g##4 ); wl_t _f3g5_2 = wl_mul_ll( _f3_2, g##5 ); \ - wl_t _f3g6 = wl_mul_ll( f##3, g##6 ); wl_t _f3g7_38 = wl_mul_ll( _f3_2, _g7_19 ); \ - wl_t _f3g8_19 = wl_mul_ll( f##3, _g8_19 ); wl_t _f3g9_38 = wl_mul_ll( _f3_2, _g9_19 ); \ - \ - wl_t _f4g0 = wl_mul_ll( f##4, g##0 ); wl_t _f4g1 = wl_mul_ll( f##4, g##1 ); \ - wl_t _f4g2 = wl_mul_ll( f##4, g##2 ); wl_t _f4g3 = wl_mul_ll( f##4, g##3 ); \ - wl_t _f4g4 = wl_mul_ll( f##4, g##4 ); wl_t _f4g5 = wl_mul_ll( f##4, g##5 ); \ - wl_t _f4g6_19 = wl_mul_ll( f##4, _g6_19 ); wl_t _f4g7_19 = wl_mul_ll( f##4, _g7_19 ); \ - wl_t _f4g8_19 = wl_mul_ll( f##4, _g8_19 ); wl_t _f4g9_19 = wl_mul_ll( f##4, _g9_19 ); \ - \ - wl_t _f5g0 = wl_mul_ll( f##5, g##0 ); wl_t _f5g1_2 = wl_mul_ll( _f5_2, g##1 ); \ - wl_t _f5g2 = wl_mul_ll( f##5, g##2 ); wl_t _f5g3_2 = wl_mul_ll( _f5_2, g##3 ); \ - wl_t _f5g4 = wl_mul_ll( f##5, g##4 ); wl_t _f5g5_38 = wl_mul_ll( _f5_2, _g5_19 ); \ - wl_t _f5g6_19 = wl_mul_ll( f##5, _g6_19 ); wl_t _f5g7_38 = wl_mul_ll( _f5_2, _g7_19 ); \ - wl_t _f5g8_19 = wl_mul_ll( f##5, _g8_19 ); wl_t _f5g9_38 = wl_mul_ll( _f5_2, _g9_19 ); \ - \ - wl_t _f6g0 = wl_mul_ll( f##6, g##0 ); wl_t _f6g1 = wl_mul_ll( f##6, g##1 ); \ - wl_t _f6g2 = wl_mul_ll( f##6, g##2 ); wl_t _f6g3 = wl_mul_ll( f##6, g##3 ); \ - wl_t _f6g4_19 = wl_mul_ll( f##6, _g4_19 ); wl_t _f6g5_19 = wl_mul_ll( f##6, _g5_19 ); \ - wl_t _f6g6_19 = wl_mul_ll( f##6, _g6_19 ); wl_t _f6g7_19 = wl_mul_ll( f##6, _g7_19 ); \ - wl_t _f6g8_19 = wl_mul_ll( f##6, _g8_19 ); wl_t _f6g9_19 = wl_mul_ll( f##6, _g9_19 ); \ - \ - wl_t _f7g0 = wl_mul_ll( f##7, g##0 ); wl_t _f7g1_2 = wl_mul_ll( _f7_2, g##1 ); \ - wl_t _f7g2 = wl_mul_ll( f##7, g##2 ); wl_t _f7g3_38 = wl_mul_ll( _f7_2, _g3_19 ); \ - wl_t _f7g4_19 = wl_mul_ll( f##7, _g4_19 ); wl_t _f7g5_38 = wl_mul_ll( _f7_2, _g5_19 ); \ - wl_t _f7g6_19 = wl_mul_ll( f##7, _g6_19 ); wl_t _f7g7_38 = wl_mul_ll( _f7_2, _g7_19 ); \ - wl_t _f7g8_19 = wl_mul_ll( f##7, _g8_19 ); wl_t _f7g9_38 = wl_mul_ll( _f7_2, _g9_19 ); \ - \ - wl_t _f8g0 = wl_mul_ll( f##8, g##0 ); wl_t _f8g1 = wl_mul_ll( f##8, g##1 ); \ - wl_t _f8g2_19 = wl_mul_ll( f##8, _g2_19 ); wl_t _f8g3_19 = wl_mul_ll( f##8, _g3_19 ); \ - wl_t _f8g4_19 = wl_mul_ll( f##8, _g4_19 ); wl_t _f8g5_19 = wl_mul_ll( f##8, _g5_19 ); \ - wl_t _f8g6_19 = wl_mul_ll( f##8, _g6_19 ); wl_t _f8g7_19 = wl_mul_ll( f##8, _g7_19 ); \ - wl_t _f8g8_19 = wl_mul_ll( f##8, _g8_19 ); wl_t _f8g9_19 = wl_mul_ll( f##8, _g9_19 ); \ - \ - wl_t _f9g0 = wl_mul_ll( f##9, g##0 ); wl_t _f9g1_38 = wl_mul_ll( _f9_2, _g1_19 ); \ - wl_t _f9g2_19 = wl_mul_ll( f##9, _g2_19 ); wl_t _f9g3_38 = wl_mul_ll( _f9_2, _g3_19 ); \ - wl_t _f9g4_19 = wl_mul_ll( f##9, _g4_19 ); wl_t _f9g5_38 = wl_mul_ll( _f9_2, _g5_19 ); \ - wl_t _f9g6_19 = wl_mul_ll( f##9, _g6_19 ); wl_t _f9g7_38 = wl_mul_ll( _f9_2, _g7_19 ); \ - wl_t _f9g8_19 = wl_mul_ll( f##9, _g8_19 ); wl_t _f9g9_38 = wl_mul_ll( _f9_2, _g9_19 ); \ - \ - h##0 = wl_add10( _f0g0, _f1g9_38, _f2g8_19, _f3g7_38, _f4g6_19, _f5g5_38, _f6g4_19, _f7g3_38, _f8g2_19, _f9g1_38 ); \ - h##1 = wl_add10( _f0g1, _f1g0 , _f2g9_19, _f3g8_19, _f4g7_19, _f5g6_19, _f6g5_19, _f7g4_19, _f8g3_19, _f9g2_19 ); \ - h##2 = wl_add10( _f0g2, _f1g1_2 , _f2g0 , _f3g9_38, _f4g8_19, _f5g7_38, _f6g6_19, _f7g5_38, _f8g4_19, _f9g3_38 ); \ - h##3 = wl_add10( _f0g3, _f1g2 , _f2g1 , _f3g0 , _f4g9_19, _f5g8_19, _f6g7_19, _f7g6_19, _f8g5_19, _f9g4_19 ); \ - h##4 = wl_add10( _f0g4, _f1g3_2 , _f2g2 , _f3g1_2 , _f4g0 , _f5g9_38, _f6g8_19, _f7g7_38, _f8g6_19, _f9g5_38 ); \ - h##5 = wl_add10( _f0g5, _f1g4 , _f2g3 , _f3g2 , _f4g1 , _f5g0 , _f6g9_19, _f7g8_19, _f8g7_19, _f9g6_19 ); \ - h##6 = wl_add10( _f0g6, _f1g5_2 , _f2g4 , _f3g3_2 , _f4g2 , _f5g1_2 , _f6g0 , _f7g9_38, _f8g8_19, _f9g7_38 ); \ - h##7 = wl_add10( _f0g7, _f1g6 , _f2g5 , _f3g4 , _f4g3 , _f5g2 , _f6g1 , _f7g0 , _f8g9_19, _f9g8_19 ); \ - h##8 = wl_add10( _f0g8, _f1g7_2 , _f2g6 , _f3g5_2 , _f4g4 , _f5g3_2 , _f6g2 , _f7g1_2 , _f8g0 , _f9g9_38 ); \ - h##9 = wl_add10( _f0g9, _f1g8 , _f2g7 , _f3g6 , _f4g5 , _f5g4 , _f6g3 , _f7g2 , _f8g1 , _f9g0 ); \ - \ - wl_t _m38u = wl_bcast( (long)FD_ULONG_MASK_MSB(38) ); \ - wl_t _m39u = wl_bcast( (long)FD_ULONG_MASK_MSB(39) ); \ - wl_t _b24 = wl_bcast( 1L << 24 ); \ - wl_t _b25 = wl_bcast( 1L << 25 ); \ - \ - wl_t _c0 = wl_add( h##0, _b25 ); h##1 = wl_add( h##1, wl_shr ( _c0, 26 ) ); h##0 = wl_sub( h##0, wl_and( _c0, _m38u ) ); \ - wl_t _c4 = wl_add( h##4, _b25 ); h##5 = wl_add( h##5, wl_shr ( _c4, 26 ) ); h##4 = wl_sub( h##4, wl_and( _c4, _m38u ) ); \ - wl_t _c1 = wl_add( h##1, _b24 ); h##2 = wl_add( h##2, wl_shr ( _c1, 25 ) ); h##1 = wl_sub( h##1, wl_and( _c1, _m39u ) ); \ - wl_t _c5 = wl_add( h##5, _b24 ); h##6 = wl_add( h##6, wl_shr ( _c5, 25 ) ); h##5 = wl_sub( h##5, wl_and( _c5, _m39u ) ); \ - wl_t _c2 = wl_add( h##2, _b25 ); h##3 = wl_add( h##3, wl_shr ( _c2, 26 ) ); h##2 = wl_sub( h##2, wl_and( _c2, _m38u ) ); \ - wl_t _c6 = wl_add( h##6, _b25 ); h##7 = wl_add( h##7, wl_shr ( _c6, 26 ) ); h##6 = wl_sub( h##6, wl_and( _c6, _m38u ) ); \ - wl_t _c3 = wl_add( h##3, _b24 ); h##4 = wl_add( h##4, wl_shr ( _c3, 25 ) ); h##3 = wl_sub( h##3, wl_and( _c3, _m39u ) ); \ - wl_t _c7 = wl_add( h##7, _b24 ); h##8 = wl_add( h##8, wl_shr ( _c7, 25 ) ); h##7 = wl_sub( h##7, wl_and( _c7, _m39u ) ); \ - /**/ _c4 = wl_add( h##4, _b25 ); h##5 = wl_add( h##5, wl_shr ( _c4, 26 ) ); h##4 = wl_sub( h##4, wl_and( _c4, _m38u ) ); \ - wl_t _c8 = wl_add( h##8, _b25 ); h##9 = wl_add( h##9, wl_shr ( _c8, 26 ) ); h##8 = wl_sub( h##8, wl_and( _c8, _m38u ) ); \ - wl_t _c9 = wl_add( h##9, _b24 ); h##0 = wl_add( h##0, wl_shr_x19( _c9, 25 ) ); h##9 = wl_sub( h##9, wl_and( _c9, _m39u ) ); \ - /**/ _c0 = wl_add( h##0, _b25 ); h##1 = wl_add( h##1, wl_shr ( _c0, 26 ) ); h##0 = wl_sub( h##0, wl_and( _c0, _m38u ) ); \ - } while(0) - -/* FE_AVX_INL_SQN squares the lanes of f and then scales each lane by - either 1 or 2 (per lane specified, n* should be compile time constant - in 1:2) with partial reduction and stores the result in h. In place - operation is fine. */ - -#define FE_AVX_INL_SQN( h, f, na,nb,nc,nd ) do { \ - wl_t _f0_2 = wl_add( f##0, f##0 ); wl_t _f1_2 = wl_add( f##1, f##1 ); \ - wl_t _f2_2 = wl_add( f##2, f##2 ); wl_t _f3_2 = wl_add( f##3, f##3 ); \ - wl_t _f4_2 = wl_add( f##4, f##4 ); wl_t _f5_2 = wl_add( f##5, f##5 ); \ - wl_t _f6_2 = wl_add( f##6, f##6 ); wl_t _f7_2 = wl_add( f##7, f##7 ); \ - \ - wl_t _38 = wl_bcast( 38L ); wl_t _19 = wl_bcast( 19L ); \ - \ - wl_t _f5_38 = wl_mul_ll( _38, f##5 ); wl_t _f6_19 = wl_mul_ll( _19, f##6 ); \ - wl_t _f7_38 = wl_mul_ll( _38, f##7 ); wl_t _f8_19 = wl_mul_ll( _19, f##8 ); \ - wl_t _f9_38 = wl_mul_ll( _38, f##9 ); \ - \ - wl_t _f0f0 = wl_mul_ll( f##0, f##0 ); wl_t _f0f1_2 = wl_mul_ll( _f0_2, f##1 ); \ - wl_t _f0f2_2 = wl_mul_ll( _f0_2, f##2 ); wl_t _f0f3_2 = wl_mul_ll( _f0_2, f##3 ); \ - wl_t _f0f4_2 = wl_mul_ll( _f0_2, f##4 ); wl_t _f0f5_2 = wl_mul_ll( _f0_2, f##5 ); \ - wl_t _f0f6_2 = wl_mul_ll( _f0_2, f##6 ); wl_t _f0f7_2 = wl_mul_ll( _f0_2, f##7 ); \ - wl_t _f0f8_2 = wl_mul_ll( _f0_2, f##8 ); wl_t _f0f9_2 = wl_mul_ll( _f0_2, f##9 ); \ - \ - wl_t _f1f1_2 = wl_mul_ll( _f1_2, f##1 ); wl_t _f1f2_2 = wl_mul_ll( _f1_2, f##2 ); \ - wl_t _f1f3_4 = wl_mul_ll( _f1_2, _f3_2 ); wl_t _f1f4_2 = wl_mul_ll( _f1_2, f##4 ); \ - wl_t _f1f5_4 = wl_mul_ll( _f1_2, _f5_2 ); wl_t _f1f6_2 = wl_mul_ll( _f1_2, f##6 ); \ - wl_t _f1f7_4 = wl_mul_ll( _f1_2, _f7_2 ); wl_t _f1f8_2 = wl_mul_ll( _f1_2, f##8 ); \ - wl_t _f1f9_76 = wl_mul_ll( _f1_2, _f9_38 ); \ - \ - wl_t _f2f2 = wl_mul_ll( f##2, f##2 ); wl_t _f2f3_2 = wl_mul_ll( _f2_2, f##3 ); \ - wl_t _f2f4_2 = wl_mul_ll( _f2_2, f##4 ); wl_t _f2f5_2 = wl_mul_ll( _f2_2, f##5 ); \ - wl_t _f2f6_2 = wl_mul_ll( _f2_2, f##6 ); wl_t _f2f7_2 = wl_mul_ll( _f2_2, f##7 ); \ - wl_t _f2f8_38 = wl_mul_ll( _f2_2, _f8_19 ); wl_t _f2f9_38 = wl_mul_ll( f##2 , _f9_38 ); \ - \ - wl_t _f3f3_2 = wl_mul_ll( _f3_2, f##3 ); wl_t _f3f4_2 = wl_mul_ll( _f3_2, f##4 ); \ - wl_t _f3f5_4 = wl_mul_ll( _f3_2, _f5_2 ); wl_t _f3f6_2 = wl_mul_ll( _f3_2, f##6 ); \ - wl_t _f3f7_76 = wl_mul_ll( _f3_2, _f7_38 ); wl_t _f3f8_38 = wl_mul_ll( _f3_2, _f8_19 ); \ - wl_t _f3f9_76 = wl_mul_ll( _f3_2, _f9_38 ); \ - \ - wl_t _f4f4 = wl_mul_ll( f##4, f##4 ); wl_t _f4f5_2 = wl_mul_ll( _f4_2, f##5 ); \ - wl_t _f4f6_38 = wl_mul_ll( _f4_2, _f6_19 ); wl_t _f4f7_38 = wl_mul_ll( f##4, _f7_38 ); \ - wl_t _f4f8_38 = wl_mul_ll( _f4_2, _f8_19 ); wl_t _f4f9_38 = wl_mul_ll( f##4, _f9_38 ); \ - \ - wl_t _f5f5_38 = wl_mul_ll( f##5, _f5_38 ); wl_t _f5f6_38 = wl_mul_ll( _f5_2, _f6_19 ); \ - wl_t _f5f7_76 = wl_mul_ll( _f5_2, _f7_38 ); wl_t _f5f8_38 = wl_mul_ll( _f5_2, _f8_19 ); \ - wl_t _f5f9_76 = wl_mul_ll( _f5_2, _f9_38 ); \ - \ - wl_t _f6f6_19 = wl_mul_ll( f##6, _f6_19 ); wl_t _f6f7_38 = wl_mul_ll( f##6, _f7_38 ); \ - wl_t _f6f8_38 = wl_mul_ll( _f6_2, _f8_19 ); wl_t _f6f9_38 = wl_mul_ll( f##6, _f9_38 ); \ - \ - wl_t _f7f7_38 = wl_mul_ll( f##7, _f7_38 ); wl_t _f7f8_38 = wl_mul_ll( _f7_2, _f8_19 ); \ - wl_t _f7f9_76 = wl_mul_ll( _f7_2, _f9_38 ); \ - \ - wl_t _f8f8_19 = wl_mul_ll( f##8, _f8_19 ); wl_t _f8f9_38 = wl_mul_ll( f##8, _f9_38 ); \ - \ - wl_t _f9f9_38 = wl_mul_ll( f##9, _f9_38 ); \ - \ - wl_t _m = wl( 1L-na, 1L-nb, 1L-nc, 1L-nd ); \ - \ - h##0 = wl_add6( _f0f0 , _f1f9_76, _f2f8_38, _f3f7_76, _f4f6_38, _f5f5_38 ); h##0 = wl_add( h##0, wl_and( h##0, _m ) ); \ - h##1 = wl_add5( _f0f1_2, _f2f9_38, _f3f8_38, _f4f7_38, _f5f6_38 ); h##1 = wl_add( h##1, wl_and( h##1, _m ) ); \ - h##2 = wl_add6( _f0f2_2, _f1f1_2 , _f3f9_76, _f4f8_38, _f5f7_76, _f6f6_19 ); h##2 = wl_add( h##2, wl_and( h##2, _m ) ); \ - h##3 = wl_add5( _f0f3_2, _f1f2_2 , _f4f9_38, _f5f8_38, _f6f7_38 ); h##3 = wl_add( h##3, wl_and( h##3, _m ) ); \ - h##4 = wl_add6( _f0f4_2, _f1f3_4 , _f2f2 , _f5f9_76, _f6f8_38, _f7f7_38 ); h##4 = wl_add( h##4, wl_and( h##4, _m ) ); \ - h##5 = wl_add5( _f0f5_2, _f1f4_2 , _f2f3_2 , _f6f9_38, _f7f8_38 ); h##5 = wl_add( h##5, wl_and( h##5, _m ) ); \ - h##6 = wl_add6( _f0f6_2, _f1f5_4 , _f2f4_2 , _f3f3_2 , _f7f9_76, _f8f8_19 ); h##6 = wl_add( h##6, wl_and( h##6, _m ) ); \ - h##7 = wl_add5( _f0f7_2, _f1f6_2 , _f2f5_2 , _f3f4_2 , _f8f9_38 ); h##7 = wl_add( h##7, wl_and( h##7, _m ) ); \ - h##8 = wl_add6( _f0f8_2, _f1f7_4 , _f2f6_2 , _f3f5_4 , _f4f4 , _f9f9_38 ); h##8 = wl_add( h##8, wl_and( h##8, _m ) ); \ - h##9 = wl_add5( _f0f9_2, _f1f8_2 , _f2f7_2 , _f3f6_2 , _f4f5_2 ); h##9 = wl_add( h##9, wl_and( h##9, _m ) ); \ - \ - wl_t _m38u = wl_bcast( (long)FD_ULONG_MASK_MSB(38) ); \ - wl_t _m39u = wl_bcast( (long)FD_ULONG_MASK_MSB(39) ); \ - wl_t _b24 = wl_bcast( 1L << 24 ); \ - wl_t _b25 = wl_bcast( 1L << 25 ); \ - \ - wl_t _c0 = wl_add( h##0, _b25 ); h##1 = wl_add( h##1, wl_shr ( _c0, 26 ) ); h##0 = wl_sub( h##0, wl_and( _c0, _m38u ) ); \ - wl_t _c4 = wl_add( h##4, _b25 ); h##5 = wl_add( h##5, wl_shr ( _c4, 26 ) ); h##4 = wl_sub( h##4, wl_and( _c4, _m38u ) ); \ - wl_t _c1 = wl_add( h##1, _b24 ); h##2 = wl_add( h##2, wl_shr ( _c1, 25 ) ); h##1 = wl_sub( h##1, wl_and( _c1, _m39u ) ); \ - wl_t _c5 = wl_add( h##5, _b24 ); h##6 = wl_add( h##6, wl_shr ( _c5, 25 ) ); h##5 = wl_sub( h##5, wl_and( _c5, _m39u ) ); \ - wl_t _c2 = wl_add( h##2, _b25 ); h##3 = wl_add( h##3, wl_shr ( _c2, 26 ) ); h##2 = wl_sub( h##2, wl_and( _c2, _m38u ) ); \ - wl_t _c6 = wl_add( h##6, _b25 ); h##7 = wl_add( h##7, wl_shr ( _c6, 26 ) ); h##6 = wl_sub( h##6, wl_and( _c6, _m38u ) ); \ - wl_t _c3 = wl_add( h##3, _b24 ); h##4 = wl_add( h##4, wl_shr ( _c3, 25 ) ); h##3 = wl_sub( h##3, wl_and( _c3, _m39u ) ); \ - wl_t _c7 = wl_add( h##7, _b24 ); h##8 = wl_add( h##8, wl_shr ( _c7, 25 ) ); h##7 = wl_sub( h##7, wl_and( _c7, _m39u ) ); \ - /**/ _c4 = wl_add( h##4, _b25 ); h##5 = wl_add( h##5, wl_shr ( _c4, 26 ) ); h##4 = wl_sub( h##4, wl_and( _c4, _m38u ) ); \ - wl_t _c8 = wl_add( h##8, _b25 ); h##9 = wl_add( h##9, wl_shr ( _c8, 26 ) ); h##8 = wl_sub( h##8, wl_and( _c8, _m38u ) ); \ - wl_t _c9 = wl_add( h##9, _b24 ); h##0 = wl_add( h##0, wl_shr_x19( _c9, 25 ) ); h##9 = wl_sub( h##9, wl_and( _c9, _m39u ) ); \ - /**/ _c0 = wl_add( h##0, _b25 ); h##1 = wl_add( h##1, wl_shr ( _c0, 26 ) ); h##0 = wl_sub( h##0, wl_and( _c0, _m38u ) ); \ - } while(0) - -/* FE_AVX_INL_SQ does a square of the corresponding lanes (with partial - reduction) and stores the result in h. In place operation is fine. */ - -#define FE_AVX_INL_SQ( h, f ) do { \ - wl_t _f0_2 = wl_add( f##0, f##0 ); wl_t _f1_2 = wl_add( f##1, f##1 ); \ - wl_t _f2_2 = wl_add( f##2, f##2 ); wl_t _f3_2 = wl_add( f##3, f##3 ); \ - wl_t _f4_2 = wl_add( f##4, f##4 ); wl_t _f5_2 = wl_add( f##5, f##5 ); \ - wl_t _f6_2 = wl_add( f##6, f##6 ); wl_t _f7_2 = wl_add( f##7, f##7 ); \ - \ - wl_t _38 = wl_bcast( 38L ); wl_t _19 = wl_bcast( 19L ); \ - \ - wl_t _f5_38 = wl_mul_ll( _38, f##5 ); wl_t _f6_19 = wl_mul_ll( _19, f##6 ); \ - wl_t _f7_38 = wl_mul_ll( _38, f##7 ); wl_t _f8_19 = wl_mul_ll( _19, f##8 ); \ - wl_t _f9_38 = wl_mul_ll( _38, f##9 ); \ - \ - wl_t _f0f0 = wl_mul_ll( f##0, f##0 ); wl_t _f0f1_2 = wl_mul_ll( _f0_2, f##1 ); \ - wl_t _f0f2_2 = wl_mul_ll( _f0_2, f##2 ); wl_t _f0f3_2 = wl_mul_ll( _f0_2, f##3 ); \ - wl_t _f0f4_2 = wl_mul_ll( _f0_2, f##4 ); wl_t _f0f5_2 = wl_mul_ll( _f0_2, f##5 ); \ - wl_t _f0f6_2 = wl_mul_ll( _f0_2, f##6 ); wl_t _f0f7_2 = wl_mul_ll( _f0_2, f##7 ); \ - wl_t _f0f8_2 = wl_mul_ll( _f0_2, f##8 ); wl_t _f0f9_2 = wl_mul_ll( _f0_2, f##9 ); \ - \ - wl_t _f1f1_2 = wl_mul_ll( _f1_2, f##1 ); wl_t _f1f2_2 = wl_mul_ll( _f1_2, f##2 ); \ - wl_t _f1f3_4 = wl_mul_ll( _f1_2, _f3_2 ); wl_t _f1f4_2 = wl_mul_ll( _f1_2, f##4 ); \ - wl_t _f1f5_4 = wl_mul_ll( _f1_2, _f5_2 ); wl_t _f1f6_2 = wl_mul_ll( _f1_2, f##6 ); \ - wl_t _f1f7_4 = wl_mul_ll( _f1_2, _f7_2 ); wl_t _f1f8_2 = wl_mul_ll( _f1_2, f##8 ); \ - wl_t _f1f9_76 = wl_mul_ll( _f1_2, _f9_38 ); \ - \ - wl_t _f2f2 = wl_mul_ll( f##2, f##2 ); wl_t _f2f3_2 = wl_mul_ll( _f2_2, f##3 ); \ - wl_t _f2f4_2 = wl_mul_ll( _f2_2, f##4 ); wl_t _f2f5_2 = wl_mul_ll( _f2_2, f##5 ); \ - wl_t _f2f6_2 = wl_mul_ll( _f2_2, f##6 ); wl_t _f2f7_2 = wl_mul_ll( _f2_2, f##7 ); \ - wl_t _f2f8_38 = wl_mul_ll( _f2_2, _f8_19 ); wl_t _f2f9_38 = wl_mul_ll( f##2 , _f9_38 ); \ - \ - wl_t _f3f3_2 = wl_mul_ll( _f3_2, f##3 ); wl_t _f3f4_2 = wl_mul_ll( _f3_2, f##4 ); \ - wl_t _f3f5_4 = wl_mul_ll( _f3_2, _f5_2 ); wl_t _f3f6_2 = wl_mul_ll( _f3_2, f##6 ); \ - wl_t _f3f7_76 = wl_mul_ll( _f3_2, _f7_38 ); wl_t _f3f8_38 = wl_mul_ll( _f3_2, _f8_19 ); \ - wl_t _f3f9_76 = wl_mul_ll( _f3_2, _f9_38 ); \ - \ - wl_t _f4f4 = wl_mul_ll( f##4, f##4 ); wl_t _f4f5_2 = wl_mul_ll( _f4_2, f##5 ); \ - wl_t _f4f6_38 = wl_mul_ll( _f4_2, _f6_19 ); wl_t _f4f7_38 = wl_mul_ll( f##4, _f7_38 ); \ - wl_t _f4f8_38 = wl_mul_ll( _f4_2, _f8_19 ); wl_t _f4f9_38 = wl_mul_ll( f##4, _f9_38 ); \ - \ - wl_t _f5f5_38 = wl_mul_ll( f##5, _f5_38 ); wl_t _f5f6_38 = wl_mul_ll( _f5_2, _f6_19 ); \ - wl_t _f5f7_76 = wl_mul_ll( _f5_2, _f7_38 ); wl_t _f5f8_38 = wl_mul_ll( _f5_2, _f8_19 ); \ - wl_t _f5f9_76 = wl_mul_ll( _f5_2, _f9_38 ); \ - \ - wl_t _f6f6_19 = wl_mul_ll( f##6, _f6_19 ); wl_t _f6f7_38 = wl_mul_ll( f##6, _f7_38 ); \ - wl_t _f6f8_38 = wl_mul_ll( _f6_2, _f8_19 ); wl_t _f6f9_38 = wl_mul_ll( f##6, _f9_38 ); \ - \ - wl_t _f7f7_38 = wl_mul_ll( f##7, _f7_38 ); wl_t _f7f8_38 = wl_mul_ll( _f7_2, _f8_19 ); \ - wl_t _f7f9_76 = wl_mul_ll( _f7_2, _f9_38 ); \ - \ - wl_t _f8f8_19 = wl_mul_ll( f##8, _f8_19 ); wl_t _f8f9_38 = wl_mul_ll( f##8, _f9_38 ); \ - \ - wl_t _f9f9_38 = wl_mul_ll( f##9, _f9_38 ); \ - \ - h##0 = wl_add6( _f0f0 , _f1f9_76, _f2f8_38, _f3f7_76, _f4f6_38, _f5f5_38 ); \ - h##1 = wl_add5( _f0f1_2, _f2f9_38, _f3f8_38, _f4f7_38, _f5f6_38 ); \ - h##2 = wl_add6( _f0f2_2, _f1f1_2 , _f3f9_76, _f4f8_38, _f5f7_76, _f6f6_19 ); \ - h##3 = wl_add5( _f0f3_2, _f1f2_2 , _f4f9_38, _f5f8_38, _f6f7_38 ); \ - h##4 = wl_add6( _f0f4_2, _f1f3_4 , _f2f2 , _f5f9_76, _f6f8_38, _f7f7_38 ); \ - h##5 = wl_add5( _f0f5_2, _f1f4_2 , _f2f3_2 , _f6f9_38, _f7f8_38 ); \ - h##6 = wl_add6( _f0f6_2, _f1f5_4 , _f2f4_2 , _f3f3_2 , _f7f9_76, _f8f8_19 ); \ - h##7 = wl_add5( _f0f7_2, _f1f6_2 , _f2f5_2 , _f3f4_2 , _f8f9_38 ); \ - h##8 = wl_add6( _f0f8_2, _f1f7_4 , _f2f6_2 , _f3f5_4 , _f4f4 , _f9f9_38 ); \ - h##9 = wl_add5( _f0f9_2, _f1f8_2 , _f2f7_2 , _f3f6_2 , _f4f5_2 ); \ - \ - wl_t _m38u = wl_bcast( (long)FD_ULONG_MASK_MSB(38) ); \ - wl_t _m39u = wl_bcast( (long)FD_ULONG_MASK_MSB(39) ); \ - wl_t _b24 = wl_bcast( 1L << 24 ); \ - wl_t _b25 = wl_bcast( 1L << 25 ); \ - \ - wl_t _c0 = wl_add( h##0, _b25 ); h##1 = wl_add( h##1, wl_shr ( _c0, 26 ) ); h##0 = wl_sub( h##0, wl_and( _c0, _m38u ) ); \ - wl_t _c4 = wl_add( h##4, _b25 ); h##5 = wl_add( h##5, wl_shr ( _c4, 26 ) ); h##4 = wl_sub( h##4, wl_and( _c4, _m38u ) ); \ - wl_t _c1 = wl_add( h##1, _b24 ); h##2 = wl_add( h##2, wl_shr ( _c1, 25 ) ); h##1 = wl_sub( h##1, wl_and( _c1, _m39u ) ); \ - wl_t _c5 = wl_add( h##5, _b24 ); h##6 = wl_add( h##6, wl_shr ( _c5, 25 ) ); h##5 = wl_sub( h##5, wl_and( _c5, _m39u ) ); \ - wl_t _c2 = wl_add( h##2, _b25 ); h##3 = wl_add( h##3, wl_shr ( _c2, 26 ) ); h##2 = wl_sub( h##2, wl_and( _c2, _m38u ) ); \ - wl_t _c6 = wl_add( h##6, _b25 ); h##7 = wl_add( h##7, wl_shr ( _c6, 26 ) ); h##6 = wl_sub( h##6, wl_and( _c6, _m38u ) ); \ - wl_t _c3 = wl_add( h##3, _b24 ); h##4 = wl_add( h##4, wl_shr ( _c3, 25 ) ); h##3 = wl_sub( h##3, wl_and( _c3, _m39u ) ); \ - wl_t _c7 = wl_add( h##7, _b24 ); h##8 = wl_add( h##8, wl_shr ( _c7, 25 ) ); h##7 = wl_sub( h##7, wl_and( _c7, _m39u ) ); \ - /**/ _c4 = wl_add( h##4, _b25 ); h##5 = wl_add( h##5, wl_shr ( _c4, 26 ) ); h##4 = wl_sub( h##4, wl_and( _c4, _m38u ) ); \ - wl_t _c8 = wl_add( h##8, _b25 ); h##9 = wl_add( h##9, wl_shr ( _c8, 26 ) ); h##8 = wl_sub( h##8, wl_and( _c8, _m38u ) ); \ - wl_t _c9 = wl_add( h##9, _b24 ); h##0 = wl_add( h##0, wl_shr_x19( _c9, 25 ) ); h##9 = wl_sub( h##9, wl_and( _c9, _m39u ) ); \ - /**/ _c0 = wl_add( h##0, _b25 ); h##1 = wl_add( h##1, wl_shr ( _c0, 26 ) ); h##0 = wl_sub( h##0, wl_and( _c0, _m38u ) ); \ - } while(0) - -/* FE_AVX_INL_SQ_ITER squares of the lanes (with partial reduction) of x - n times and stores the result in h. In place operation is fine. */ - -#define FE_AVX_INL_SQ_ITER( h, f, n ) do { \ - FD_AVX_COPY( h, f ); \ - for( ulong _n=(n); _n; _n-- ) FD_AVX_SQ_INL( h, h ); \ - } while(0) - -/* FE_AVX_INL_POW22523 applies fd_ed25519_pow22523 to the lanes of f and - stores the result in h. In place operation is fine. Note that we - actually implement this one out of line even in inline contexts to - keep instruction footprint reasonable. */ - -#define FE_AVX_INL_POW22523( h, f ) do { \ - long _f[ 40 ] __attribute__((aligned(64))); \ - FE_AVX_INL_ST( _f, f ); \ - FE_AVX_INL_LD( h, fe_avx_pow22523( _f, _f ) ); \ - } while(0) - -/* FE_AVX_INL miscellaneous *******************************************/ - -/* FE_AVX_INL_LANE_SELECT does - h(n) = f(n) if cn is non-zero and 0 otherwise - for n in 0:3. In-place operation fine. Recommended that cn be - compile time constants. */ - -#define FE_AVX_INL_LANE_SELECT( h, f, c0,c1,c2,c3 ) do { \ - wl_t _mask = wl( -(long)!!(c0), -(long)!!(c1), -(long)!!(c2), -(long)!!(c3) ); \ - h##0 = wl_and( f##0, _mask ); \ - h##1 = wl_and( f##1, _mask ); \ - h##2 = wl_and( f##2, _mask ); \ - h##3 = wl_and( f##3, _mask ); \ - h##4 = wl_and( f##4, _mask ); \ - h##5 = wl_and( f##5, _mask ); \ - h##6 = wl_and( f##6, _mask ); \ - h##7 = wl_and( f##7, _mask ); \ - h##8 = wl_and( f##8, _mask ); \ - h##9 = wl_and( f##9, _mask ); \ - } while(0) - -/* FE_AVX_INL_DBL_MIX( h, f ) does - [ha hb hc hd] = [fa-fb-fc fb+fc fc-fc fd-fb+fc]. - In place operation fine. */ - -#define FE_AVX_INL_DBL_MIX( h, f ) do { \ - h##0 = wl_dbl_mix( f##0 ); h##1 = wl_dbl_mix( f##1 ); \ - h##2 = wl_dbl_mix( f##2 ); h##3 = wl_dbl_mix( f##3 ); \ - h##4 = wl_dbl_mix( f##4 ); h##5 = wl_dbl_mix( f##5 ); \ - h##6 = wl_dbl_mix( f##6 ); h##7 = wl_dbl_mix( f##7 ); \ - h##8 = wl_dbl_mix( f##8 ); h##9 = wl_dbl_mix( f##9 ); \ - } while(0) - -/* FE_AVX_INL_SUB_MIX( h, f ) does - [ha hb hc hd] = [fc-fb fc+fb 2*fa-fd 2*fa-fc] - In place operation fine. */ - -#define FE_AVX_INL_SUB_MIX( h, f ) do { \ - h##0 = wl_sub_mix( f##0 ); h##1 = wl_sub_mix( f##1 ); \ - h##2 = wl_sub_mix( f##2 ); h##3 = wl_sub_mix( f##3 ); \ - h##4 = wl_sub_mix( f##4 ); h##5 = wl_sub_mix( f##5 ); \ - h##6 = wl_sub_mix( f##6 ); h##7 = wl_sub_mix( f##7 ); \ - h##8 = wl_sub_mix( f##8 ); h##9 = wl_sub_mix( f##9 ); \ - } while(0) - -/* FE_AVX_INL_SUBADD_12( h, f ) does - [ha hb hc hd] = [fa fb-fc fb+fc fd] - In place operation fine. */ - -#define FE_AVX_INL_SUBADD_12( h, f ) do { \ - h##0 = wl_subadd_12( f##0 ); h##1 = wl_subadd_12( f##1 ); \ - h##2 = wl_subadd_12( f##2 ); h##3 = wl_subadd_12( f##3 ); \ - h##4 = wl_subadd_12( f##4 ); h##5 = wl_subadd_12( f##5 ); \ - h##6 = wl_subadd_12( f##6 ); h##7 = wl_subadd_12( f##7 ); \ - h##8 = wl_subadd_12( f##8 ); h##9 = wl_subadd_12( f##9 ); \ - } while(0) - diff --git a/src/ballet/ed25519/avx/fd_ed25519_ge.c b/src/ballet/ed25519/avx/fd_ed25519_ge.c deleted file mode 100644 index 949e1ee526..0000000000 --- a/src/ballet/ed25519/avx/fd_ed25519_ge.c +++ /dev/null @@ -1,657 +0,0 @@ -#include "../fd_ed25519_private.h" -#include "fd_ed25519_fe_avx.h" - -/* Internal use representations of a ed25519 group element: - - ge_p1p1 (completed): ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T - ge_precomp (Duif): (y+x,y-x,2dxy) */ - -struct fd_ed25519_ge_p1p1_private { - fd_ed25519_fe_t X[1]; - fd_ed25519_fe_t Y[1]; - fd_ed25519_fe_t Z[1]; - fd_ed25519_fe_t T[1]; -}; - -typedef struct fd_ed25519_ge_p1p1_private fd_ed25519_ge_p1p1_t; - -struct fd_ed25519_ge_precomp_private { - fd_ed25519_fe_t yplusx [1]; - fd_ed25519_fe_t yminusx[1]; - fd_ed25519_fe_t xy2d [1]; -}; - -typedef struct fd_ed25519_ge_precomp_private fd_ed25519_ge_precomp_t; - -static inline fd_ed25519_ge_precomp_t * -fd_ed25519_ge_precomp_0( fd_ed25519_ge_precomp_t * h ) { - fd_ed25519_fe_1( h->yplusx ); - fd_ed25519_fe_1( h->yminusx ); - fd_ed25519_fe_0( h->xy2d ); - return h; -} - -struct fd_ed25519_ge_cached_private { - fd_ed25519_fe_t YplusX [1]; - fd_ed25519_fe_t YminusX[1]; - fd_ed25519_fe_t Z [1]; - fd_ed25519_fe_t T2d [1]; -}; - -typedef struct fd_ed25519_ge_cached_private fd_ed25519_ge_cached_t; - -/**********************************************************************/ - -/* FIXME: THIS SEEMS UNNECESSARILY BYZANTINE (AND, IF THE POINT IS - DETERMINISTIC TIMING, THIS COULD BE ACHIEVED MUCH MORE CLEANLY AND - WITH LESS OVERHEAD). */ - -static inline int /* In {0,1} */ -fd_ed25519_ge_precomp_negative( int b ) { - return (int)(((uint)b) >> 31); -} - -static inline int /* In {0,1} */ -fd_ed25519_ge_precomp_equal( int b, - int c ) { - return (int)((((uint)(b ^ c))-1U) >> 31); -} - -static inline fd_ed25519_ge_precomp_t * -fd_ed25519_ge_precomp_if( fd_ed25519_ge_precomp_t * t, - int c, - fd_ed25519_ge_precomp_t const * u, - fd_ed25519_ge_precomp_t const * v ) { - fd_ed25519_fe_if( t->yplusx, c, u->yplusx, v->yplusx ); - fd_ed25519_fe_if( t->yminusx, c, u->yminusx, v->yminusx ); - fd_ed25519_fe_if( t->xy2d, c, u->xy2d, v->xy2d ); - return t; -} - -static fd_ed25519_ge_precomp_t * -fd_ed25519_ge_table_select( fd_ed25519_ge_precomp_t * t, - int pos, - int b ) { /* In -8:8 */ - -# include "../table/fd_ed25519_ge_k25519_precomp.c" - - int bnegative = fd_ed25519_ge_precomp_negative( b ); - int babs = b - (int)((uint)((-bnegative) & b) << 1); /* b = b - (2*b) = -b = |b| if b<0, b - 2*0 = b = |b| o.w. */ - fd_ed25519_ge_precomp_0( t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 1 ), k25519_precomp[ pos ][ 0 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 2 ), k25519_precomp[ pos ][ 1 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 3 ), k25519_precomp[ pos ][ 2 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 4 ), k25519_precomp[ pos ][ 3 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 5 ), k25519_precomp[ pos ][ 4 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 6 ), k25519_precomp[ pos ][ 5 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 7 ), k25519_precomp[ pos ][ 6 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 8 ), k25519_precomp[ pos ][ 7 ], t ); - fd_ed25519_ge_precomp_t minust[1]; - fd_ed25519_fe_copy( minust->yplusx, t->yminusx ); - fd_ed25519_fe_copy( minust->yminusx, t->yplusx ); - fd_ed25519_fe_neg ( minust->xy2d, t->xy2d ); - fd_ed25519_ge_precomp_if( t, bnegative, minust, t ); - return t; -} - -/**********************************************************************/ - -static inline fd_ed25519_ge_p2_t * -fd_ed25519_ge_p3_to_p2( fd_ed25519_ge_p2_t * r, - fd_ed25519_ge_p3_t const * p ) { - fd_ed25519_fe_copy( r->X, p->X ); - fd_ed25519_fe_copy( r->Y, p->Y ); - fd_ed25519_fe_copy( r->Z, p->Z ); - return r; -} - -static inline fd_ed25519_ge_p2_t * -fd_ed25519_ge_p1p1_to_p2( fd_ed25519_ge_p2_t * r, - fd_ed25519_ge_p1p1_t * const p ) { - fd_ed25519_fe_mul3( r->X, p->X, p->T, - r->Y, p->Y, p->Z, - r->Z, p->Z, p->T ); - return r; -} - -static inline fd_ed25519_ge_p3_t * -fd_ed25519_ge_p1p1_to_p3( fd_ed25519_ge_p3_t * r, - fd_ed25519_ge_p1p1_t const * p ) { - fd_ed25519_fe_mul4( r->X, p->X, p->T, - r->Y, p->Y, p->Z, - r->Z, p->Z, p->T, - r->T, p->X, p->Y ); - return r; -} - -static inline fd_ed25519_ge_p1p1_t * -fd_ed25519_ge_p2_dbl( fd_ed25519_ge_p1p1_t * r, - fd_ed25519_ge_p2_t const * p ) { - fd_ed25519_fe_t t0[1]; - fd_ed25519_fe_add ( r->Y, p->X, p->Y ); - fd_ed25519_fe_sqn4( r->X, p->X, 1L, - r->Z, p->Y, 1L, - r->T, p->Z, 2L, - t0, r->Y, 1L ); - fd_ed25519_fe_add ( r->Y, r->Z, r->X ); - fd_ed25519_fe_sub ( r->Z, r->Z, r->X ); - fd_ed25519_fe_sub ( r->X, t0, r->Y ); - fd_ed25519_fe_sub ( r->T, r->T, r->Z ); - return r; -} - -static inline fd_ed25519_ge_p1p1_t * -fd_ed25519_ge_p3_dbl( fd_ed25519_ge_p1p1_t * r, - fd_ed25519_ge_p3_t const * p ) { - fd_ed25519_ge_p2_t q[1]; - fd_ed25519_ge_p3_to_p2( q, p ); - fd_ed25519_ge_p2_dbl ( r, q ); - return r; -} - -static inline fd_ed25519_ge_p1p1_t * -fd_ed25519_ge_madd( fd_ed25519_ge_p1p1_t * r, - fd_ed25519_ge_p3_t const * p, - fd_ed25519_ge_precomp_t const * q ) { - fd_ed25519_fe_t t0[1]; - fd_ed25519_fe_add ( r->X, p->Y, p->X ); - fd_ed25519_fe_sub ( r->Y, p->Y, p->X ); - fd_ed25519_fe_mul3( r->Z, r->X, q->yplusx, - r->Y, r->Y, q->yminusx, - r->T, q->xy2d, p->T ); - fd_ed25519_fe_add ( t0, p->Z, p->Z ); - fd_ed25519_fe_sub ( r->X, r->Z, r->Y ); - fd_ed25519_fe_add ( r->Y, r->Z, r->Y ); - fd_ed25519_fe_add ( r->Z, t0, r->T ); - fd_ed25519_fe_sub ( r->T, t0, r->T ); - return r; -} - -/**********************************************************************/ - -int -fd_ed25519_ge_frombytes_vartime( fd_ed25519_ge_p3_t * h, - uchar const * s ) { - - static const fd_ed25519_fe_t d[1] = {{ - { -10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116 } - }}; - - static const fd_ed25519_fe_t sqrtm1[1] = {{ - { -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482 } - }}; - - fd_ed25519_fe_t u[1]; - fd_ed25519_fe_t v[1]; - fd_ed25519_fe_frombytes( h->Y, s ); - fd_ed25519_fe_1 ( h->Z ); - fd_ed25519_fe_sq ( u, h->Y ); - fd_ed25519_fe_mul ( v, u, d ); - fd_ed25519_fe_sub ( u, u, h->Z ); /* u = y^2-1 */ - fd_ed25519_fe_add ( v, v, h->Z ); /* v = dy^2+1 */ - - fd_ed25519_fe_t v3[1]; - fd_ed25519_fe_sq ( v3, v ); - fd_ed25519_fe_mul( v3, v3, v ); /* v3 = v^3 */ - fd_ed25519_fe_sq ( h->X, v3 ); - fd_ed25519_fe_mul( h->X, h->X, v ); - fd_ed25519_fe_mul( h->X, h->X, u ); /* x = uv^7 */ - - fd_ed25519_fe_pow22523( h->X, h->X ); /* x = (uv^7)^((q-5)/8) */ - fd_ed25519_fe_mul ( h->X, h->X, v3 ); - fd_ed25519_fe_mul ( h->X, h->X, u ); /* x = uv^3(uv^7)^((q-5)/8) */ - - fd_ed25519_fe_t vxx [1]; - fd_ed25519_fe_t check[1]; - fd_ed25519_fe_sq ( vxx, h->X ); - fd_ed25519_fe_mul( vxx, vxx, v ); - fd_ed25519_fe_sub( check, vxx, u ); /* vx^2-u */ - if( fd_ed25519_fe_isnonzero( check ) ) { /* unclear prob */ - fd_ed25519_fe_add( check, vxx, u ); /* vx^2+u */ - if( FD_UNLIKELY( fd_ed25519_fe_isnonzero( check ) ) ) return FD_ED25519_ERR_PUBKEY; - fd_ed25519_fe_mul( h->X, h->X, sqrtm1 ); - } - - if( fd_ed25519_fe_isnegative( h->X )!=(s[31] >> 7) ) fd_ed25519_fe_neg( h->X, h->X ); /* unclear prob */ - - fd_ed25519_fe_mul( h->T, h->X, h->Y ); - return FD_ED25519_SUCCESS; -} - -int -fd_ed25519_ge_frombytes_vartime_2( fd_ed25519_ge_p3_t * h0, uchar const * s0, - fd_ed25519_ge_p3_t * h1, uchar const * s1 ) { - - /* Note: experiments found no significant difference from aggressively - inlining field element operations in microbenchmarks. So we use - non-inlined versions to reduce L1 instruction cache pressure in - real world scenarios. */ - - fd_ed25519_fe_frombytes( h0->Y, s0 ); fd_ed25519_fe_frombytes( h1->Y, s1 ); - fd_ed25519_fe_1 ( h0->Z ); fd_ed25519_fe_1 ( h1->Z ); - - static long const ldd00[40] __attribute__((aligned(64))) = { - (long)(uint)-10913610, (long)(uint)-10913610, 0L, 0L, /* Do not sign extend */ - (long)(uint) 13857413, (long)(uint) 13857413, 0L, 0L, /* " */ - (long)(uint)-15372611, (long)(uint)-15372611, 0L, 0L, /* " */ - (long)(uint) 6949391, (long)(uint) 6949391, 0L, 0L, /* " */ - (long)(uint) 114729, (long)(uint) 114729, 0L, 0L, /* " */ - (long)(uint) -8787816, (long)(uint) -8787816, 0L, 0L, /* " */ - (long)(uint) -6275908, (long)(uint) -6275908, 0L, 0L, /* " */ - (long)(uint) -3247719, (long)(uint) -3247719, 0L, 0L, /* " */ - (long)(uint)-18696448, (long)(uint)-18696448, 0L, 0L, /* " */ - (long)(uint)-12055116, (long)(uint)-12055116, 0L, 0L /* " */ - }; - - long vh[40] __attribute__((aligned(64))); - long vu[40] __attribute__((aligned(64))); - long vv[40] __attribute__((aligned(64))); - long vw[40] __attribute__((aligned(64))); - - fe_avx_ld2( vh, h0->Y, h1->Y ); - - fe_avx_sq ( vu, vh ); - fe_avx_mul ( vv, vu, ldd00 ); - vu[0] -= 1L; vu[1] -= 1L; /* u = y^2-1 */ - vv[0] += 1L; vv[1] += 1L; /* v = dy^2+1 */ - fe_avx_sq ( vw, vv ); /* vv30 <> vw */ - fe_avx_mul ( vw, vw, vv ); /* v3 = v^3 */ - fe_avx_sq ( vh, vw ); - fe_avx_mul ( vh, vh, vv ); - fe_avx_mul ( vh, vh, vu ); - fe_avx_pow22523( vh, vh ); /* x = (uv^7)^((q-5)/8) */ - fe_avx_mul ( vh, vh, vw ); - fe_avx_mul ( vh, vh, vu ); /* x = uv^3(uv^7)^((q-5)/8) */ - - fe_avx_sq ( vw, vh ); /* vw <> vvxx */ - fe_avx_mul ( vw, vw, vv ); - fe_avx_sub ( vv, vw, vu ); /* vv <> vcheck */ - - /* FIXME: COULD PAIR AND USING SWIZZLE_OUT4 (EST SAVE ~(low tens ns)) */ - /**/ fe_avx_st2( h0->X, h1->X, vh ); - fd_ed25519_fe_t u0 [1]; fd_ed25519_fe_t u1 [1]; fe_avx_st2( u0, u1, vu ); - fd_ed25519_fe_t vxx0 [1]; fd_ed25519_fe_t vxx1 [1]; fe_avx_st2( vxx0, vxx1, vw ); - fd_ed25519_fe_t check0[1]; fd_ed25519_fe_t check1[1]; fe_avx_st2( check0, check1, vv ); - - /* FIXME: COULD VECTORIZE (EST SAVE ~O(low hundreds ns)) */ - - static fd_ed25519_fe_t const sqrtm1[1] = {{ - { -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482 } - }}; - - if( fd_ed25519_fe_isnonzero( check0 ) ) { /* unclear prob */ - fd_ed25519_fe_add( check0, vxx0, u0 ); /* vx^2+u */ - if( FD_UNLIKELY( fd_ed25519_fe_isnonzero( check0 ) ) ) return FD_ED25519_ERR_PUBKEY; - fd_ed25519_fe_mul( h0->X, h0->X, sqrtm1 ); - } - - if( fd_ed25519_fe_isnonzero( check1 ) ) { /* unclear prob */ - fd_ed25519_fe_add( check1, vxx1, u1 ); /* vx^2+u */ - if( FD_UNLIKELY( fd_ed25519_fe_isnonzero( check1 ) ) ) return FD_ED25519_ERR_SIG; - fd_ed25519_fe_mul( h1->X, h1->X, sqrtm1 ); - } - - if( fd_ed25519_fe_isnegative( h0->X )!=(s0[31] >> 7) ) fd_ed25519_fe_neg( h0->X, h0->X ); /* unclear prob */ - if( fd_ed25519_fe_isnegative( h1->X )!=(s1[31] >> 7) ) fd_ed25519_fe_neg( h1->X, h1->X ); /* unclear prob */ - - fd_ed25519_fe_mul2( h0->T, h0->X, h0->Y, h1->T, h1->X, h1->Y ); - return FD_ED25519_SUCCESS; -} - -uchar * -fd_ed25519_ge_tobytes( uchar * s, - fd_ed25519_ge_p2_t const * h ) { - fd_ed25519_fe_t recip[1]; fd_ed25519_fe_invert( recip, h->Z ); - fd_ed25519_fe_t x[1]; - fd_ed25519_fe_t y[1]; fd_ed25519_fe_mul2( x, h->X, recip, y, h->Y, recip ); - fd_ed25519_fe_tobytes( s, y ); - s[31] ^= (uchar)(fd_ed25519_fe_isnegative( x ) << 7); - return s; -} - -uchar * -fd_ed25519_ge_p3_tobytes( uchar * s, - fd_ed25519_ge_p3_t const * h ) { - fd_ed25519_fe_t recip[1]; fd_ed25519_fe_invert( recip, h->Z ); - fd_ed25519_fe_t x[1]; - fd_ed25519_fe_t y[1]; fd_ed25519_fe_mul2( x, h->X, recip, y, h->Y, recip ); - fd_ed25519_fe_tobytes( s, y ); - s[31] ^= (uchar)(fd_ed25519_fe_isnegative( x ) << 7); - return s; -} - -fd_ed25519_ge_p3_t * -fd_ed25519_ge_scalarmult_base( fd_ed25519_ge_p3_t * h, - uchar const * a ) { - fd_ed25519_ge_p1p1_t r[1]; - fd_ed25519_ge_p2_t s[1]; - fd_ed25519_ge_precomp_t t[1]; - - int e[64]; - for( int i=0; i<32; i++ ) { - e[2*i+0] = (int)(( (uint)a[i] ) & 15U); - e[2*i+1] = (int)((((uint)a[i]) >> 4) & 15U); - } - - /* At this point, e[0:62] are in [0:15], e[63] is in [0:7] */ - - int carry = 0; - for( int i=0; i<63; i++ ) { - e[i] += carry; - carry = e[i] + 8; - carry >>= 4; - e[i] -= carry << 4; - } - e[63] += carry; - - /* At this point, e[*] are in [-8,8] */ - - fd_ed25519_ge_p3_0( h ); - for( int i=1; i<64; i+=2 ) { - fd_ed25519_ge_table_select( t, i/2, e[i] ); - fd_ed25519_ge_madd ( r, h, t ); - fd_ed25519_ge_p1p1_to_p3 ( h, r ); - } - - fd_ed25519_ge_p3_dbl ( r, h ); - fd_ed25519_ge_p1p1_to_p2( s, r ); - fd_ed25519_ge_p2_dbl ( r, s ); - fd_ed25519_ge_p1p1_to_p2( s, r ); - fd_ed25519_ge_p2_dbl ( r, s ); - fd_ed25519_ge_p1p1_to_p2( s, r ); - fd_ed25519_ge_p2_dbl ( r, s ); - fd_ed25519_ge_p1p1_to_p3( h, r ); - - for( int i=0; i<64; i+=2 ) { - fd_ed25519_ge_table_select( t, i/2, e[i] ); - fd_ed25519_ge_madd ( r, h, t ); - fd_ed25519_ge_p1p1_to_p3 ( h, r ); - } - - /* Sanitize */ - - fd_memset( e, 0, 64UL*sizeof(int) ); - - return h; -} - -static int * -fd_ed25519_ge_slide( int * r, - uchar const * a ) { - - for( int i=0; i<256; i++ ) r[i] = (int)(1U & (((uint)a[i >> 3]) >> (i & 7))); - - for( int i=0; i<256; i++ ) { - if( !r[i] ) continue; - for( int b=1; (b<=6) && ((i+b)<256); b++ ) { - if( !r[i+b] ) continue; - if ( r[i] + (r[i+b] << b) <= 15 ) { r[i] += r[i+b] << b; r[i+b] = 0; } - else if( r[i] - (r[i+b] << b) >= -15 ) { - r[i] -= r[i+b] << b; - for( int k=i+b; k<256; k++ ) { - if( !r[k] ) { r[k] = 1; break; } - r[k] = 0; - } - } else break; - } - } - - return r; -} - -#if 1 /* FIXME: MAKE COMPILE TIME SWITCH? */ - -/* This verison aggressively inlines all field element operations. It - is ~5% then the below but might create an excessive amount of L1 - cache pressure. */ - -fd_ed25519_ge_p2_t * -fd_ed25519_ge_double_scalarmult_vartime( fd_ed25519_ge_p2_t * r, - uchar const * a, - fd_ed25519_ge_p3_t const * A, - uchar const * b ) { - -# include "../table/fd_ed25519_ge_bi_precomp_avx.c" - - int aslide[256]; fd_ed25519_ge_slide( aslide, a ); - int bslide[256]; fd_ed25519_ge_slide( bslide, b ); - - FE_AVX_INL_DECL( vr ); - FE_AVX_INL_DECL( vt ); - FE_AVX_INL_DECL( vu ); - - long Ai[8][40] __attribute__((aligned(64))); // A,A3,A5,A7,A9,A11,A13,A15 - do { - - static long const l111d2[40] __attribute__((aligned(64))) = { /* This holds 1 | 1 | 1 | d2 */ - 1L, 1L, 1L, (long)(uint)-21827239, /* Do not sign extend */ - 0L, 0L, 0L, (long)(uint) -5839606, /* " */ - 0L, 0L, 0L, (long)(uint)-30745221, /* " */ - 0L, 0L, 0L, (long)(uint) 13898782, /* " */ - 0L, 0L, 0L, (long)(uint) 229458, /* " */ - 0L, 0L, 0L, (long)(uint) 15978800, /* " */ - 0L, 0L, 0L, (long)(uint)-12551817, /* " */ - 0L, 0L, 0L, (long)(uint) -6495438, /* " */ - 0L, 0L, 0L, (long)(uint) 29715968, /* " */ - 0L, 0L, 0L, (long)(uint) 9444199 /* " */ - }; - FE_AVX_INL_DECL( v111d2 ); - FE_AVX_INL_LD( v111d2, l111d2 ); - - FE_AVX_INL_SWIZZLE_IN4( vr, A->Z, A->Y, A->X, A->T ); - - //fd_ed25519_ge_p3_to_cached( Ai[0], A ); - FE_AVX_INL_MUL ( vu, vr, v111d2 ); - FE_AVX_INL_SUBADD_12( vu, vu ); - FE_AVX_INL_ST ( Ai[0], vu ); /* Z, YminusX, YplusX, T2d */ - - //fd_ed25519_ge_p3_dbl( t, A ); - FE_AVX_INL_PERMUTE ( vt, vr, 2,1,2,0 ); - FE_AVX_INL_PERMUTE ( vr, vr, 1,0,3,2 ); - FE_AVX_INL_LANE_SELECT( vr, vr, 1,0,0,0 ); - FE_AVX_INL_ADD ( vt, vt, vr ); - FE_AVX_INL_SQN ( vt, vt, 1,1,1,2 ); - FE_AVX_INL_DBL_MIX ( vt, vt ); - - //fd_ed25519_ge_p1p1_to_p3( A2, t ); - FE_AVX_INL_PERMUTE( vr, vt, 2,1,0,0 ); - FE_AVX_INL_PERMUTE( vt, vt, 3,2,3,1 ); - FE_AVX_INL_MUL ( vr, vt, vr ); - - FE_AVX_INL_SUBADD_12( vr, vr ); // hoisted from ge_add below - - for( int i=0; i<7; i++ ) { - - //fd_ed25519_ge_add( t, A2, Ai[i] ); - FE_AVX_INL_MUL ( vt, vr, vu ); - FE_AVX_INL_ADD ( vu, vt, vt ); - FE_AVX_INL_SUB_MIX( vt, vt ); - // Fused final perm for add with the below - - //fd_ed25519_ge_p1p1_to_p3( u, t ); - FE_AVX_INL_PERMUTE( vu, vt, 3,1,0,0 ); - FE_AVX_INL_PERMUTE( vt, vt, 2,3,2,1 ); - FE_AVX_INL_MUL ( vt, vt, vu ); - - //fd_ed25519_ge_p3_to_cached( Ai[i+1], u ); - FE_AVX_INL_MUL ( vu, vt, v111d2 ); - FE_AVX_INL_SUBADD_12( vu, vu ); - FE_AVX_INL_ST ( Ai[i+1], vu ); /* Z, YminusX, YplusX, T2d */ - } - } while(0); - -//fd_ed25519_ge_p2_0( r ); - FE_AVX_INL_ZERO( vr ); - vr0 = wl_insert( vr0,1, 1L ); - vr0 = wl_insert( vr0,2, 1L ); - - int i; - for( i=255; i>=0; i-- ) if( aslide[i] || bslide[i] ) break; - for( ; i>=0; i-- ) { - - //fd_ed25519_ge_p2_dbl( t, r ); - FE_AVX_INL_PERMUTE ( vt, vr, 0,1,0,2 ); - FE_AVX_INL_PERMUTE ( vu, vr, 1,0,3,2 ); - FE_AVX_INL_LANE_SELECT( vu, vu, 1,0,0,0 ); - FE_AVX_INL_ADD ( vt, vt, vu ); - FE_AVX_INL_SQN ( vt, vt, 1,1,1,2 ); - FE_AVX_INL_DBL_MIX ( vt, vt ); - - for( int j=0; j<2; j++ ) { /* a or b */ - int slide_i = (j ? bslide : aslide)[i]; /* cmov */ - if( FD_UNLIKELY( slide_i ) ) { /* empirically observed */ - long const * precomp = j ? bi_precomp[0] : Ai[0]; - - //fd_ed25519_ge_p1p1_to_p3( u, t ); - FE_AVX_INL_PERMUTE( vu, vt, 2,1,0,0 ); - FE_AVX_INL_PERMUTE( vt, vt, 3,2,3,1 ); - FE_AVX_INL_MUL ( vt, vu, vt ); - - //fd_ed25519_ge_{add,sub,madd,msub}( t, u, {Ai,Ai,bi_precomp,bi_precomp}[ ({+aslide,-aslide,+bslide,-bslide}[i]) / 2 ] ); - FE_AVX_INL_LD( vu, precomp + 40UL*(ulong)(fd_int_abs( slide_i ) >> 1) ); - if( slide_i<0 ) FE_AVX_INL_PERMUTE( vu, vu, 0,2,1,3 ); /* FIXME: ABSORB INTO TABLE? */ - FE_AVX_INL_SUBADD_12( vt, vt ); - FE_AVX_INL_MUL ( vt, vt, vu ); - FE_AVX_INL_SUB_MIX ( vt, vt ); - if( !(slide_i<0) ) FE_AVX_INL_PERMUTE( vt, vt, 0,1,3,2 ); /* FIXME: Use branchless conditional select instead? */ - } - } - - //fd_ed25519_ge_p1p1_to_p2( r, t ); - FE_AVX_INL_PERMUTE( vr, vt, 3,2,3,3 ); /* vr = t->{T,Z,T,T} */ - FE_AVX_INL_MUL ( vr, vt, vr ); - } - - FE_AVX_INL_SWIZZLE_OUT3( r->X, r->Y, r->Z, vr ); - return r; -} - -#else - -/* This version has a lot lower instruction footprint because it is not - aggressively inlined. It about ~5% slower in a microbenchmark but - might be faster in real world situations due to lower cache pressure. */ - -fd_ed25519_ge_p2_t * -fd_ed25519_ge_double_scalarmult_vartime( fd_ed25519_ge_p2_t * r, - uchar const * a, - fd_ed25519_ge_p3_t const * A, - uchar const * b ) { - -# include "../table/fd_ed25519_ge_bi_precomp_avx.c" - - int aslide[256]; fd_ed25519_ge_slide( aslide, a ); - int bslide[256]; fd_ed25519_ge_slide( bslide, b ); - - long vr[40] __attribute__((aligned(64))); - long vt[40] __attribute__((aligned(64))); - long vu[40] __attribute__((aligned(64))); - - long Ai[8][40] __attribute__((aligned(64))); // A,A3,A5,A7,A9,A11,A13,A15 - do { - - static long const l111d2[40] __attribute__((aligned(64))) = { /* This holds 1 | 1 | 1 | d2 */ - 1L, 1L, 1L, (long)(uint)-21827239, /* Do not sign extend */ - 0L, 0L, 0L, (long)(uint) -5839606, /* " */ - 0L, 0L, 0L, (long)(uint)-30745221, /* " */ - 0L, 0L, 0L, (long)(uint) 13898782, /* " */ - 0L, 0L, 0L, (long)(uint) 229458, /* " */ - 0L, 0L, 0L, (long)(uint) 15978800, /* " */ - 0L, 0L, 0L, (long)(uint)-12551817, /* " */ - 0L, 0L, 0L, (long)(uint) -6495438, /* " */ - 0L, 0L, 0L, (long)(uint) 29715968, /* " */ - 0L, 0L, 0L, (long)(uint) 9444199 /* " */ - }; - - fe_avx_ld4( vr, A->Z, A->Y, A->X, A->T ); - - // Note: fe_avx_copies could be optimized out - - //fd_ed25519_ge_p3_to_cached( Ai[0], A ); - fe_avx_mul ( vu, vr, l111d2 ); - fe_avx_subadd_12( vu, vu ); - fe_avx_copy ( Ai[0], vu ); /* Z, YminusX, YplusX, T2d */ - - //fd_ed25519_ge_p3_dbl( t, A ); - fe_avx_permute ( vt, vr, 2,1,2,0 ); - fe_avx_permute ( vr, vr, 1,0,3,2 ); - fe_avx_lane_select( vr, vr, 1,0,0,0 ); - fe_avx_add ( vt, vt, vr ); - fe_avx_sqn ( vt, vt, 1,1,1,2 ); - fe_avx_dbl_mix ( vt, vt ); - - //fd_ed25519_ge_p1p1_to_p3( A2, t ); - fe_avx_permute( vr, vt, 2,1,0,0 ); - fe_avx_permute( vt, vt, 3,2,3,1 ); - fe_avx_mul ( vr, vt, vr ); - - fe_avx_subadd_12( vr, vr ); // hoisted from ge_add below - - for( int i=0; i<7; i++ ) { - - //fd_ed25519_ge_add( t, A2, Ai[i] ); - fe_avx_mul ( vt, vr, vu ); - fe_avx_add ( vu, vt, vt ); - fe_avx_sub_mix( vt, vt ); - // Fused final perm for add with the below - - //fd_ed25519_ge_p1p1_to_p3( u, t ); - fe_avx_permute( vu, vt, 3,1,0,0 ); - fe_avx_permute( vt, vt, 2,3,2,1 ); - fe_avx_mul ( vt, vt, vu ); - - //fd_ed25519_ge_p3_to_cached( Ai[i+1], u ); - fe_avx_mul ( vu, vt, l111d2 ); - fe_avx_subadd_12( vu, vu ); - fe_avx_copy ( Ai[i+1], vu ); /* Z, YminusX, YplusX, T2d */ - } - } while(0); - -//fd_ed25519_ge_p2_0( r ); - fe_avx_zero( vr ); - vr[1] = 1L; - vr[2] = 1L; - - int i; - for( i=255; i>=0; i-- ) if( aslide[i] || bslide[i] ) break; - for( ; i>=0; i-- ) { - - //fd_ed25519_ge_p2_dbl( t, r ); - fe_avx_permute ( vt, vr, 0,1,0,2 ); - fe_avx_permute ( vu, vr, 1,0,3,2 ); - fe_avx_lane_select( vu, vu, 1,0,0,0 ); - fe_avx_add ( vt, vt, vu ); - fe_avx_sqn ( vt, vt, 1,1,1,2 ); - fe_avx_dbl_mix ( vt, vt ); - - for( int j=0; j<2; j++ ) { /* a or b */ - int slide_i = (j ? bslide : aslide)[i]; /* cmov */ - if( FD_UNLIKELY( slide_i ) ) { /* empirically observed */ - long const * precomp = j ? bi_precomp[0] : Ai[0]; - - //fd_ed25519_ge_p1p1_to_p3( u, t ); - fe_avx_permute( vu, vt, 2,1,0,0 ); - fe_avx_permute( vt, vt, 3,2,3,1 ); - fe_avx_mul ( vt, vu, vt ); - - //fd_ed25519_ge_{add,sub,madd,msub}( t, u, {Ai,Ai,bi_precomp,bi_precomp}[ ({+aslide,-aslide,+bslide,-bslide}[i]) / 2 ] ); - /* FIXME: The copy permute here could be optimized a little bit */ - fe_avx_copy( vu, precomp + 40UL*(ulong)(fd_int_abs( slide_i ) >> 1) ); - if( slide_i<0 ) fe_avx_permute( vu, vu, 0,2,1,3 ); /* FIXME: ABSORB INTO TABLE? */ - fe_avx_subadd_12( vt, vt ); - fe_avx_mul ( vt, vt, vu ); - fe_avx_sub_mix ( vt, vt ); - if( !(slide_i<0) ) fe_avx_permute( vt, vt, 0,1,3,2 ); /* FIXME: Use branchless conditional select instead? */ - } - } - - //fd_ed25519_ge_p1p1_to_p2( r, t ); - fe_avx_permute( vr, vt, 3,2,3,3 ); /* vr = t->{T,Z,T,T} */ - fe_avx_mul ( vr, vt, vr ); - } - - fe_avx_st3( r->X, r->Y, r->Z, vr ); - return r; -} - -#endif diff --git a/src/ballet/ed25519/avx512/fd_curve25519.c b/src/ballet/ed25519/avx512/fd_curve25519.c new file mode 100644 index 0000000000..e25870b235 --- /dev/null +++ b/src/ballet/ed25519/avx512/fd_curve25519.c @@ -0,0 +1,186 @@ +#include "../fd_curve25519.h" +#include "./fd_r43x6_ge.h" + +/* + * Add + */ + +/* fd_ed25519_point_add_with_opts computes r = a + b, and returns r. + + https://eprint.iacr.org/2008/522 + Sec 4.2, 4-Processor Montgomery addition and doubling. + + This implementation includes several optional optimizations + that are used for speeding up scalar multiplication: + + - b_Z_is_one, if b->Z == 1 (affine, or decompressed), we can skip 1mul + + - b_is_precomputed, since the scalar mul loop typically accumulates + points from a table, we can pre-compute kT into the table points and + therefore skip 1mul in during the loop. + + - skip_last_mul, since dbl can be computed with just (X, Y, Z) + and doesn't need T, we can skip the last 4 mul and selectively + compute (X, Y, Z) or (X, Y, Z, T) during the scalar mul loop. + */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_add_with_opts( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b, + FD_PARAM_UNUSED int const b_Z_is_one, + int const b_is_precomputed, + FD_PARAM_UNUSED int const skip_last_mul ) { + + if( b_is_precomputed ) { + fd_ed25519_point_t tmp[2]; + FD_R43X6_GE_ADD_TABLE_ALT( r->P, a->P, b->P, tmp[0].P, tmp[1].P ); + } else { + FD_R43X6_GE_ADD( r->P, a->P, b->P ); + } + return r; +} + +/* fd_ed25519_point_add computes r = a + b, and returns r. */ +fd_ed25519_point_t * +fd_ed25519_point_add( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ) { + return fd_ed25519_point_add_with_opts( r, a, b, 0, 0, 0 ); +} + +/* fd_ed25519_point_add_final_mul computes just the final mul step in point add. + See fd_ed25519_point_add_with_opts. */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_add_final_mul( fd_ed25519_point_t * restrict r, + fd_ed25519_point_t const * a ) { + fd_ed25519_point_set( r, a ); + return r; +} + +/* fd_ed25519_point_add_final_mul_projective computes just the final mul step + in point add, assuming the result is projective (X, Y, Z), i.e. ignoring T. + This is useful because dbl only needs (X, Y, Z) in input, so we can save 1mul. + See fd_ed25519_point_add_with_opts. */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_add_final_mul_projective( fd_ed25519_point_t * restrict r, + fd_ed25519_point_t const * a ) { + fd_ed25519_point_set( r, a ); + return r; +} + +/* + * Sub + */ + +/* fd_ed25519_point_sub sets r = -a. */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_neg_precomputed( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a ) { + /* use p instead of zero to avoid mod reduction */ + FD_R43X6_QUAD_DECL( _p ); + _p03 = wwl( 8796093022189L, 8796093022189L, 8796093022189L, 8796093022189L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L ); + _p14 = wwl( 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L ); + _p25 = wwl( 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 1099511627775L, 1099511627775L, 1099511627775L, 1099511627775L ); + FD_R43X6_QUAD_LANE_SUB_FAST( r->P, a->P, 0,0,0,1, _p, a->P ); + FD_R43X6_QUAD_PERMUTE ( r->P, 1,0,2,3, r->P ); + return r; +} + +/* fd_ed25519_point_sub_with_opts computes r = a - b, and returns r. + This is like fd_ed25519_point_add_with_opts, replacing: + - b->X => -b->X + - b->T => -b->T + See fd_ed25519_point_add_with_opts for details. + */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_sub_with_opts( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b, + int const b_Z_is_one, + int const b_is_precomputed, + int const skip_last_mul ) { + + fd_ed25519_point_t neg[1]; + if (b_is_precomputed) { + fd_ed25519_point_neg_precomputed( neg, b ); + } else { + fd_ed25519_point_neg( neg, b ); + } + return fd_ed25519_point_add_with_opts( r, a, neg, b_Z_is_one, b_is_precomputed, skip_last_mul ); +} + +/* fd_ed25519_point_sub computes r = a - b, and returns r. */ +fd_ed25519_point_t * +fd_ed25519_point_sub( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ) { + return fd_ed25519_point_sub_with_opts( r, a, b, 0, 0, 0 ); +} + +/* + * Dbl + */ + +/* Dedicated dbl + https://eprint.iacr.org/2008/522 + Sec 4.4. + This uses sqr instead of mul. + + TODO: use the same iface with_opts? + */ + +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_partial_dbl( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a ) { + FD_R43X6_GE_DBL( r->P, a->P ); + return r; +} + +fd_ed25519_point_t * +fd_ed25519_point_dbl( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a ) { + FD_R43X6_GE_DBL( r->P, a->P ); + return r; +} + +/* + * Ser/de + */ + +int +fd_ed25519_point_frombytes_2x( fd_ed25519_point_t * r1, + uchar const buf1[ 32 ], + fd_ed25519_point_t * r2, + uchar const buf2[ 32 ] ) { + //TODO: consider unifying code with ref + return FD_R43X6_GE_DECODE2( r1->P, buf1, r2->P, buf2 ); +} + +/* + Affine (only for init(), can be slow) +*/ +fd_ed25519_point_t * +fd_curve25519_affine_frombytes( fd_ed25519_point_t * r, + uchar const _x[ 32 ], + uchar const _y[ 32 ] ) { + fd_f25519_t x[1], y[1], z[1], t[1]; + fd_f25519_frombytes( x, _x ); + fd_f25519_frombytes( y, _y ); + fd_f25519_set( z, fd_f25519_one ); + fd_f25519_mul( t, x, y ); + FD_R43X6_QUAD_PACK( r->P, x->el, y->el, z->el, t->el ); + return r; +} + +fd_ed25519_point_t * +fd_curve25519_into_affine( fd_ed25519_point_t * r ) { + fd_f25519_t x[1], y[1], z[1], t[1]; + FD_R43X6_QUAD_UNPACK( x->el, y->el, z->el, t->el, r->P ); + fd_f25519_inv( z, z ); + fd_f25519_mul( x, x, z ); + fd_f25519_mul( y, y, z ); + fd_f25519_set( z, fd_f25519_one ); + fd_f25519_mul( t, x, y ); + FD_R43X6_QUAD_PACK( r->P, x->el, y->el, z->el, t->el ); + return r; +} diff --git a/src/ballet/ed25519/avx512/fd_curve25519.h b/src/ballet/ed25519/avx512/fd_curve25519.h new file mode 100644 index 0000000000..e0af56fae9 --- /dev/null +++ b/src/ballet/ed25519/avx512/fd_curve25519.h @@ -0,0 +1,146 @@ +#ifndef HEADER_fd_src_ballet_ed25519_fd_curve25519_h +#error "Do not include this directly; use fd_curve25519.h" +#endif + +/* fd_curve25519.h provides the public Curve25519 API. + + Most operations in this API should be assumed to take a variable + amount of time depending on inputs. (And thus should not be exposed + to secret data). + + Const time operations are made explicit, see fd_curve25519_secure.c */ + +#include "../../fd_ballet_base.h" +#include "../fd_f25519.h" +#include "../fd_curve25519_scalar.h" +#include "./fd_r43x6_ge.h" + +/* struct fd_curve25519_edwards (aka fd_curve25519_edwards_t) represents + a point in Extended Twisted Edwards Coordinates. + https://eprint.iacr.org/2008/522 */ +struct fd_curve25519_edwards { + FD_R43X6_QUAD_DECL( P ) __attribute__((aligned(FD_F25519_ALIGN))); +}; +typedef struct fd_curve25519_edwards fd_curve25519_edwards_t; + +typedef fd_curve25519_edwards_t fd_ed25519_point_t; +typedef fd_curve25519_edwards_t fd_ristretto255_point_t; + +#include "../table/fd_curve25519_table_avx512.c" + +FD_PROTOTYPES_BEGIN + +/* fd_ed25519_point_set sets r = 0 (point at infinity). */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_set_zero( fd_ed25519_point_t * r ) { + FD_R43X6_GE_ZERO( r->P ); + return r; +} + +/* fd_ed25519_point_set_zero_precomputed sets r = 0 (point at infinity). */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_set_zero_precomputed( fd_ed25519_point_t * r ) { + r->P03 = wwl( 1L,1L,1L,0L, 0L,0L,0L,0L ); r->P14 = wwl_zero(); r->P25 = wwl_zero(); + return r; +} + +/* fd_ed25519_point_set sets r = a. */ +FD_25519_INLINE fd_ed25519_point_t * FD_FN_NO_ASAN +fd_ed25519_point_set( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a ) { + r->P03 = a->P03; + r->P14 = a->P14; + r->P25 = a->P25; + return r; +} + +/* fd_ed25519_point_from sets r = (x : y : z : t). */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_from( fd_ed25519_point_t * r, + fd_f25519_t const * x, + fd_f25519_t const * y, + fd_f25519_t const * z, + fd_f25519_t const * t ) { + FD_R43X6_QUAD_PACK( r->P, x->el, y->el, z->el, t->el ); + return r; +} + +/* fd_ed25519_point_from sets (x : y : z : t) = a. */ +FD_25519_INLINE void +fd_ed25519_point_to( fd_f25519_t * x, + fd_f25519_t * y, + fd_f25519_t * z, + fd_f25519_t * t, + fd_ed25519_point_t const * a ) { + FD_R43X6_QUAD_UNPACK( x->el, y->el, z->el, t->el, a->P ); +} + +/* fd_ed25519_point_dbln computes r = 2^n a, and returns r. + More efficient than n fd_ed25519_point_add. */ +FD_25519_INLINE fd_ed25519_point_t * FD_FN_NO_ASAN +fd_ed25519_point_dbln( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + int n ) { + FD_R43X6_GE_DBL( r->P, a->P ); + for( uchar i=1; iP, r->P ); + } + return r; +} + +/* fd_ed25519_point_sub sets r = -a. */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_neg( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a ) { + /* use p instead of zero to avoid mod reduction */ + FD_R43X6_QUAD_DECL( _p ); + _p03 = wwl( 8796093022189L, 8796093022189L, 8796093022189L, 8796093022189L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L ); + _p14 = wwl( 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L ); + _p25 = wwl( 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 1099511627775L, 1099511627775L, 1099511627775L, 1099511627775L ); + // FD_R43X6_QUAD_LANE_SUB_FAST( r->P, a->P, 1,0,0,1, _p, a->P ); + // FD_R43X6_QUAD_FOLD_UNSIGNED( r->P, r->P ); + int _mask = 0x99; /* 1001 1001 */ + r->P03 = wwv_sub_if( _mask, _p03, a->P03, a->P03 ); + r->P14 = wwv_sub_if( _mask, _p14, a->P14, a->P14 ); + r->P25 = wwv_sub_if( _mask, _p25, a->P25, a->P25 ); + return r; +} + +/* fd_ed25519_point_is_zero returns 1 if a == 0 (point at infinity), 0 otherwise. */ +FD_25519_INLINE int +fd_ed25519_point_is_zero( fd_ed25519_point_t const * a ) { + fd_ed25519_point_t zero[1]; + fd_ed25519_point_set_zero( zero ); + return FD_R43X6_GE_IS_EQ( a->P, zero->P ); +} + +/* fd_ed25519_point_eq returns 1 if a == b, 0 otherwise. */ +FD_25519_INLINE int +fd_ed25519_point_eq( fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ) { + return FD_R43X6_GE_IS_EQ( a->P, b->P ); +} + +/* fd_ed25519_point_eq returns 1 if a == b, 0 otherwise. + b is a point with Z==1, e.g. a decompressed point. */ +FD_25519_INLINE int +fd_ed25519_point_eq_z1( fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ) { /* b.Z == 1, e.g. a decompressed point */ + return fd_ed25519_point_eq( a, b ); +} + +FD_25519_INLINE void +fd_curve25519_into_precomputed( fd_ed25519_point_t * r ) { + FD_R43X6_QUAD_DECL ( _ta ); + FD_R43X6_QUAD_PERMUTE ( _ta, 1,0,2,3, r->P ); /* _ta = (Y1, X1, Z1, T1 ), s61|s61|s61|s61 */ + FD_R43X6_QUAD_LANE_SUB_FAST( _ta, _ta, 1,0,0,0, _ta, r->P ); /* _ta = (Y1-X1,X1, Z1, T1 ), s62|s61|s61|s61 */ + FD_R43X6_QUAD_LANE_ADD_FAST( _ta, _ta, 0,1,0,0, _ta, r->P ); /* _ta = (Y1-X1,Y1+X1,Z1, T1 ), s62|s62|s61|s61 */ + FD_R43X6_QUAD_FOLD_UNSIGNED( r->P, _ta ); /* r = (Y1-X1,Y1+X1,Z1, T1 ), u44|u44|u44|u44 */ + + FD_R43X6_QUAD_DECL ( _1112d ); + FD_R43X6_QUAD_1112d ( _1112d ); + FD_R43X6_QUAD_MUL_FAST ( r->P, r->P, _1112d ); + FD_R43X6_QUAD_FOLD_UNSIGNED( r->P, r->P ); +} + +FD_PROTOTYPES_END diff --git a/src/ballet/ed25519/avx512/fd_curve25519_secure.c b/src/ballet/ed25519/avx512/fd_curve25519_secure.c new file mode 100644 index 0000000000..e001051322 --- /dev/null +++ b/src/ballet/ed25519/avx512/fd_curve25519_secure.c @@ -0,0 +1,127 @@ +#include "../fd_curve25519.h" +#include "./fd_r43x6_ge.h" + +/* All the functions in this file are considered "secure", specifically: + + - Constant time in the input, i.e. the input can be a secret + - Small and auditable code base, incl. simple types + - No local variables = no need to clear them before exit + - Clear registers via FD_FN_SENSITIVE + */ + +/* FD_R43X6_GE_ADD_TABLE_ALT is similar to FD_R43X6_GE_ADD_TABLE, + with 3 minor differences: + 1. order of arguments: P3, P2 points in extended Edwards coordinates, + T1 precomputed table point + 2. T1 = (Y-X : Y+X : Z==1 : kT) + 3. temp vars as input, so we can safely clear them in the caller +*/ +#define FD_R43X6_GE_ADD_TABLE_ALT( P3, P2, T1, _ta, _tb ) do { \ + FD_R43X6_QUAD_MOV ( _ta, T1 ); /* _ta = (Y1-X1,Y1+X1,Z1 ,T1*2d), s61|s61|s61|s61 */ \ + FD_R43X6_QUAD_PERMUTE ( _tb, 1,0,2,3, P2 ); /* _tb = (Y2, X2, Z2, T2 ), s61|s61|s61|s61 */ \ + FD_R43X6_QUAD_LANE_SUB_FAST( _tb, _tb, 1,0,0,0, _tb, P2 ); /* _tb = (Y2-X2,X2, Z2, T2 ), s62|s61|s61|s61 */ \ + FD_R43X6_QUAD_LANE_ADD_FAST( _tb, _tb, 0,1,1,0, _tb, P2 ); /* _tb = (Y2-X2,Y2+X2,Z2*2,T2 ), s62|s62|s61|s61 */ \ + FD_R43X6_QUAD_MUL_FAST ( _ta, _ta, _tb ); /* _ta = (A, B, D, C ), u62|u62|u62|u62 */ \ + FD_R43X6_QUAD_FOLD_UNSIGNED( _ta, _ta ); /* P3 = (A, B, D, C ), u44|u44|u44|u44 */ \ + FD_R43X6_QUAD_PERMUTE ( _tb, 1,0,3,2, _ta ); /* _tb = (B, A, C, D ), u62|u62|u62|u62 */ \ + FD_R43X6_QUAD_LANE_SUB_FAST( _tb, _tb, 1,0,0,1, _tb, _ta ); /* _tb = (E, A, C, F ), s62|u62|u62|s62 */ \ + FD_R43X6_QUAD_LANE_ADD_FAST( _tb, _tb, 0,1,1,0, _tb, _ta ); /* _tb = (E, H, G, F ), s62|u63|u63|s62 */ \ + FD_R43X6_QUAD_PERMUTE ( _ta, 0,2,2,0, _tb ); /* _ta = (E, G, G, E ), u44|u44|u44|u44 */ \ + FD_R43X6_QUAD_PERMUTE ( _tb, 3,1,3,1, _tb ); /* _tb = (F, H, F, H ), u44|u44|u44|u44 */ \ + FD_R43X6_QUAD_MUL_FAST ( _ta, _ta, _tb ); /* _ta = (X3, Y3, Z3, T3 ), u62|u62|u62|u62 */ \ + FD_R43X6_QUAD_FOLD_UNSIGNED( P3, _ta ); /* P3 = (X3, Y3, Z3, T3 ), u44|u44|u44|u44 */ \ + } while(0) + +/* fd_ed25519_point_add_secure computes r = a + b. + + It's equivalent to fd_ed25519_point_add_with_opts( r, a, b, 1, 1, 0 ), + i.e. it assumes that b is from a precomputation table. + + This implementation has no temporary variables and clears registers on return. + The intent is to avoid that an attacker can retrieve information about b, + that was chosen in const time based on a secret value. */ +FD_25519_INLINE void FD_FN_SENSITIVE +fd_ed25519_point_add_secure( fd_ed25519_point_t * restrict r, + fd_ed25519_point_t const * restrict a, + fd_ed25519_point_t const * restrict b, + fd_ed25519_point_t * restrict tmp0, + fd_ed25519_point_t * restrict tmp1 ) { + + FD_R43X6_GE_ADD_TABLE_ALT( r->P, a->P, b->P, tmp0->P, tmp1->P ); + +} + +/* FD_R43X6_GE_DBL_ALT is similar to FD_R43X6_GE_DBL, + with 2 minor differences: + 1. removed _BB, by reordering instructions + 2. temp vars as input, so we can safely clear them in the caller +*/ +#define FD_R43X6_GE_DBL_ALT( P3, P1, _ta, _tb ) do { \ + FD_R43X6_QUAD_PERMUTE ( _ta, 1,1,2,0, P1 ); /* _ta = (Y1, Y1,Z1, X1), u44/u44/u44/u44 */ \ + FD_R43X6_QUAD_LANE_ADD_FAST( _ta, _ta, 1,0,0,0, _ta, P1 ); /* _ta = (X1+Y1, Y1,Z1, X1), u45/u44/u44/u44 */ \ + FD_R43X6_QUAD_SQR_FAST ( _ta, _ta ); /* _ta = ((X1+Y1)^2,B, Z1^2,A ), u61/u61/u61/u61 */ \ + FD_R43X6_QUAD_FOLD_UNSIGNED( _ta, _ta ); /* _ta = ((X1+Y1)^2,B, Z1^2,A ), u44/u44/u44/u44 */ \ + FD_R43X6_QUAD_LANE_ADD_FAST( _ta, _ta, 0,0,1,0, _ta, _ta ); /* _ta = ((X1+Y1)^2,B, C, A ), u44/u44/u45/u44 */ \ + FD_R43X6_QUAD_PERMUTE ( _tb, 3,3,3,3, _ta ); /* _tb = (A, A, A, A ), u44/u44/u44/u44 */ \ + FD_R43X6_QUAD_LANE_ADD_FAST( _tb, _tb, 0,0,1,0, _tb, _ta ); /* _tb = (A, A, A+C, A ), u44/u44/u45/u44 */ \ + FD_R43X6_QUAD_LANE_SUB_FAST( _tb, _tb, 1,0,0,0, _tb, _ta ); /* _tb = (A-(sum)^2,A, A+C, A ), u45/u44/u45/u44 */ \ + FD_R43X6_QUAD_PERMUTE ( _ta, 1,1,1,1, _ta ); /* _ta = (B, B, B, B ), u44/u44/u44/u44 */ \ + FD_R43X6_QUAD_LANE_ADD_FAST( _tb, _tb, 1,0,0,1, _tb, _ta ); /* _tb = (E, A, A+C, H ), u46/u44/u45/u45 */ \ + FD_R43X6_QUAD_LANE_SUB_FAST( _tb, _tb, 0,1,1,0, _tb, _ta ); /* _tb = (E, G, F, H ), u46/u45/u46/u45 */ \ + FD_R43X6_QUAD_PERMUTE ( _ta, 0,1,1,0, _tb ); /* _tb = (E, G, G, E ), u46/u45/u45/u46 */ \ + FD_R43X6_QUAD_PERMUTE ( _tb, 2,3,2,3, _tb ); /* _tb = (F, H, F, H ), u46/u45/u46/u45 */ \ + FD_R43X6_QUAD_MUL_FAST ( _ta, _ta, _tb ); /* _ta = (X3, Y3,Z3, T3), u62/u62/u62/u62 */ \ + FD_R43X6_QUAD_FOLD_UNSIGNED( P3, _ta ); /* P3 = (X3, Y3,Z3, T3), u44/u44/u44/u44 */ \ + } while(0) + +/* fd_ed25519_point_dbln_secure computes r = 2^n a. + + It's equivalent to fd_ed25519_point_dbln( r, a, n ). + + This implementation has no temporary variables and clears registers on return. + The intent is to avoid that an attacker can retrieve information about a, + that's a partial aggregation of secretly chosen points. */ +FD_25519_INLINE void FD_FN_SENSITIVE +fd_ed25519_point_dbln_secure( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + int n, + fd_ed25519_point_t * restrict tmp0, + fd_ed25519_point_t * restrict tmp1 ) { + FD_R43X6_GE_DBL_ALT( r->P, a->P, tmp0->P, tmp1->P ); + for( uchar i=1; iP, r->P, tmp0->P, tmp1->P ); + } +} + +/* fd_ed25519_point_if sets r = a0 if secret_cond, else r = a1. + Equivalent to r = secret_cond ? a0 : a1. + Note: this is const time, as the underlying wwl_if is const time. */ +FD_25519_INLINE void FD_FN_SENSITIVE +fd_ed25519_point_if( fd_ed25519_point_t * restrict r, + uchar const secret_cond, /* 0, 1 */ + fd_ed25519_point_t const * a0, + fd_ed25519_point_t const * a1 ) { + r->P03 = wwl_if( -secret_cond, a0->P03, a1->P03 ); + r->P14 = wwl_if( -secret_cond, a0->P14, a1->P14 ); + r->P25 = wwl_if( -secret_cond, a0->P25, a1->P25 ); +} + +/* fd_ed25519_point_neg_if sets r = -r if secret_cond, else r = r. + Equivalent to r = secret_cond ? -r : r. + Note: this is const time, as the underlying wwl_if is const time. */ +FD_25519_INLINE void FD_FN_SENSITIVE +fd_ed25519_point_neg_if( fd_ed25519_point_t * FD_RESTRICT r, + fd_ed25519_point_t * const a, + uchar const secret_cond /* 0, 1 */ ) { + FD_R43X6_QUAD_DECL( _p ); + _p03 = wwl( 8796093022189L, 8796093022189L, 8796093022189L, 8796093022189L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L ); + _p14 = wwl( 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L ); + _p25 = wwl( 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 1099511627775L, 1099511627775L, 1099511627775L, 1099511627775L ); + r->P03 = wwv_sub_if( 136, _p03, a->P03, a->P03 ); + r->P14 = wwv_sub_if( 136, _p14, a->P14, a->P14 ); + r->P25 = wwv_sub_if( 136, _p25, a->P25, a->P25 ); + FD_R43X6_QUAD_PERMUTE( r->P, 1,0,2,3, r->P ); + r->P03 = wwl_if( -secret_cond, r->P03, a->P03 ); + r->P14 = wwl_if( -secret_cond, r->P14, a->P14 ); + r->P25 = wwl_if( -secret_cond, r->P25, a->P25 ); +} diff --git a/src/ballet/ed25519/avx512/fd_f25519.c b/src/ballet/ed25519/avx512/fd_f25519.c new file mode 100644 index 0000000000..b1c85995b6 --- /dev/null +++ b/src/ballet/ed25519/avx512/fd_f25519.c @@ -0,0 +1,13 @@ +#include "../fd_f25519.h" + +/* fd_f25519_rng generates a random fd_f25519_t element. + Note: insecure, for tests only. */ +fd_f25519_t * +fd_f25519_rng_unsafe( fd_f25519_t * r, + fd_rng_t * rng ) { + uchar buf[32]; + for( int j=0; j<32; j++ ) { + buf[j] = fd_rng_uchar( rng ); + } + return fd_f25519_frombytes( r, buf ); +} diff --git a/src/ballet/ed25519/avx512/fd_f25519.h b/src/ballet/ed25519/avx512/fd_f25519.h new file mode 100644 index 0000000000..be54f65c0f --- /dev/null +++ b/src/ballet/ed25519/avx512/fd_f25519.h @@ -0,0 +1,221 @@ +#ifndef HEADER_fd_src_ballet_ed25519_fd_f25519_h +#error "Do not include this directly; use fd_f25519.h" +#endif + +#include "../../fd_ballet_base.h" +#include "fd_r43x6.h" + +#define FD_F25519_ALIGN 64 + +/* A fd_f25519_t stores a curve25519 field element in 5 ulong, aligned to 64 bytes */ +struct fd_f25519 { + fd_r43x6_t el __attribute__((aligned(FD_F25519_ALIGN))); +}; +typedef struct fd_f25519 fd_f25519_t; + +#include "../table/fd_f25519_table_avx512.c" + +FD_PROTOTYPES_BEGIN + +/* + * Implementation of inline functions + */ + +/* fd_f25519_mul computes r = a * b, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_mul( fd_f25519_t * r, + fd_f25519_t const * a, + fd_f25519_t const * b ) { + FD_R43X6_MUL1_INL( r->el, a->el, b->el ); + return r; +} + +/* fd_f25519_sqr computes r = a^2, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_sqr( fd_f25519_t * r, + fd_f25519_t const * a ) { + FD_R43X6_SQR1_INL( r->el, a->el ); + return r; +} + +/* fd_f25519_add computes r = a + b, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_add( fd_f25519_t * r, + fd_f25519_t const * a, + fd_f25519_t const * b ) { + (r->el) = fd_r43x6_add( (a->el), (b->el) ); + return r; +} + +/* fd_f25519_add computes r = a - b, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_sub( fd_f25519_t * r, + fd_f25519_t const * a, + fd_f25519_t const * b ) { + (r->el) = fd_r43x6_fold_signed( fd_r43x6_sub_fast( (a->el), (b->el) ) ); + return r; +} + +/* fd_f25519_add computes r = a + b, and returns r. + Note: this does NOT reduce the result mod p. + It can be used before mul, sqr. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_add_nr( fd_f25519_t * r, + fd_f25519_t const * a, + fd_f25519_t const * b ) { + (r->el) = fd_r43x6_add_fast( (a->el), (b->el) ); + return r; +} + +/* fd_f25519_sub computes r = a - b, and returns r. + Note: this does NOT reduce the result mod p. + It can be used before mul, sqr. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_sub_nr( fd_f25519_t * r, + fd_f25519_t const * a, + fd_f25519_t const * b ) { + (r->el) = fd_r43x6_sub_fast( (a->el), (b->el) ); + return r; +} + +/* fd_f25519_add computes r = -a, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_neg( fd_f25519_t * r, + fd_f25519_t const * a ) { + (r->el) = fd_r43x6_neg_fast( (a->el) ); + return r; +} + +/* fd_f25519_add computes r = a * k, k=121666, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_mul_121666( fd_f25519_t * r, + FD_FN_UNUSED fd_f25519_t const * a ) { + (r->el) = fd_r43x6_fold_unsigned( fd_r43x6_scale_fast( 121666L, (a->el) ) ); + return r; +} + +/* fd_f25519_frombytes deserializes a 32-byte buffer buf into a + fd_f25519_t element r, and returns r. + buf is in little endian form, according to RFC 8032. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_frombytes( fd_f25519_t * r, + uchar const buf[ 32 ] ) { + ulong y0 = ((ulong *)buf)[0]; /* Bits 0- 63 */ + ulong y1 = ((ulong *)buf)[1]; /* Bits 64-127 */ + ulong y2 = ((ulong *)buf)[2]; /* Bits 128-191 */ + ulong y3 = ((ulong *)buf)[3] & 0x7fffffffffffffff; /* Bits 192-254 */ + r->el = fd_r43x6_unpack( wv( y0, y1, y2, y3 ) ); + return r; +} + +/* fd_f25519_tobytes serializes a fd_f25519_t element a into + a 32-byte buffer out, and returns out. + out is in little endian form, according to RFC 8032. */ +FD_25519_INLINE uchar * +fd_f25519_tobytes( uchar out[ 32 ], + fd_f25519_t const * a ) { + wv_stu( out, fd_r43x6_pack( fd_r43x6_mod( a->el ) ) ); + return out; +} + +/* fd_f25519_if sets r = a0 if cond, else r = a1, equivalent to: + r = cond ? a0 : a1. + Note: this is constant time. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_if( fd_f25519_t * r, + int const cond, /* 0, 1 */ + fd_f25519_t const * a0, + fd_f25519_t const * a1 ) { + r->el = fd_r43x6_if( -!!cond, a0->el, a1->el ); + return r; +} + +/* fd_f25519_swap_if swaps r1, r2 if cond, else leave them as is. + Note: this is constant time. */ +FD_25519_INLINE void +fd_f25519_swap_if( fd_f25519_t * restrict r1, + fd_f25519_t * restrict r2, + int const cond /* 0, 1 */ ) { + wwl_t zero = wwl_zero(); + wwl_t m = wwl_xor(r1->el, r2->el); + m = wwl_if( -!!cond, m, zero ); + r1->el = wwl_xor( r1->el, m ); + r2->el = wwl_xor( r2->el, m ); +} + +/* fd_f25519_set copies r = a, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_set( fd_f25519_t * r, + fd_f25519_t const * a ) { + r->el = a->el; + return r; +} + +/* fd_f25519_is_zero returns 1 if a == 0, 0 otherwise. */ +FD_25519_INLINE int +fd_f25519_is_zero( fd_f25519_t const * a ) { + return ( ( wwl_eq( a->el, fd_r43x6_zero() ) & 0xFF ) == 0xFF ) + || ( ( wwl_eq( a->el, fd_r43x6_p() ) & 0xFF ) == 0xFF ); +} + +/* + * Vectorized + */ + +/* fd_f25519_muln computes r_i = a_i * b_i */ +FD_25519_INLINE void +fd_f25519_mul2( fd_f25519_t * r1, fd_f25519_t const * a1, fd_f25519_t const * b1, + fd_f25519_t * r2, fd_f25519_t const * a2, fd_f25519_t const * b2 ) { + FD_R43X6_MUL2_INL( r1->el, a1->el, b1->el, + r2->el, a2->el, b2->el ); +} + +FD_25519_INLINE void +fd_f25519_mul3( fd_f25519_t * r1, fd_f25519_t const * a1, fd_f25519_t const * b1, + fd_f25519_t * r2, fd_f25519_t const * a2, fd_f25519_t const * b2, + fd_f25519_t * r3, fd_f25519_t const * a3, fd_f25519_t const * b3 ) { + FD_R43X6_MUL3_INL( r1->el, a1->el, b1->el, + r2->el, a2->el, b2->el, + r3->el, a3->el, b3->el ); +} + +FD_25519_INLINE void +fd_f25519_mul4( fd_f25519_t * r1, fd_f25519_t const * a1, fd_f25519_t const * b1, + fd_f25519_t * r2, fd_f25519_t const * a2, fd_f25519_t const * b2, + fd_f25519_t * r3, fd_f25519_t const * a3, fd_f25519_t const * b3, + fd_f25519_t * r4, fd_f25519_t const * a4, fd_f25519_t const * b4 ) { + FD_R43X6_MUL4_INL( r1->el, a1->el, b1->el, + r2->el, a2->el, b2->el, + r3->el, a3->el, b3->el, + r4->el, a4->el, b4->el ); +} + +/* fd_f25519_sqrn computes r_i = a_i^2 */ +FD_25519_INLINE void +fd_f25519_sqr2( fd_f25519_t * r1, fd_f25519_t const * a1, + fd_f25519_t * r2, fd_f25519_t const * a2 ) { + FD_R43X6_SQR2_INL( r1->el, a1->el, + r2->el, a2->el ); +} + +FD_25519_INLINE void +fd_f25519_sqr3( fd_f25519_t * r1, fd_f25519_t const * a1, + fd_f25519_t * r2, fd_f25519_t const * a2, + fd_f25519_t * r3, fd_f25519_t const * a3 ) { + FD_R43X6_SQR3_INL( r1->el, a1->el, + r2->el, a2->el, + r3->el, a3->el ); +} + +FD_25519_INLINE void +fd_f25519_sqr4( fd_f25519_t * r1, fd_f25519_t const * a1, + fd_f25519_t * r2, fd_f25519_t const * a2, + fd_f25519_t * r3, fd_f25519_t const * a3, + fd_f25519_t * r4, fd_f25519_t const * a4 ) { + FD_R43X6_SQR4_INL( r1->el, a1->el, + r2->el, a2->el, + r3->el, a3->el, + r4->el, a4->el ); +} + +FD_PROTOTYPES_END diff --git a/src/ballet/ed25519/avx512/fd_r43x6.h b/src/ballet/ed25519/avx512/fd_r43x6.h index 16f33fad4f..1ac530bf10 100644 --- a/src/ballet/ed25519/avx512/fd_r43x6.h +++ b/src/ballet/ed25519/avx512/fd_r43x6.h @@ -88,9 +88,11 @@ add_fast maps unreduced x unreduced to unsigned (among others), see fold_unsigned above sub_fast maps unreduced x unreduced to signed (among others), see fold_signed above + or, reduced x reduced to unsigned (among others), see fold_unsigned above mul_fast maps unreduced x unreduced to unsigned, see fold_unsigned above sqr_fast maps unreduced to unsigned, see fold_unsigned above neg maps unreduced to unreduced + or, reduced to reduced add maps unreduced x unreduced to unreduced sub maps unreduced x unreduced to unreduced mul maps unreduced x unreduced to unreduced @@ -711,9 +713,9 @@ fd_r43x6_mod_nearly_reduced( fd_r43x6_t x ) { return fd_r43x6( y0, y1, y2, y3, y4, y5 ); } -/* fd_r43x6_neg_fast(x) returns z = -x +/* fd_r43x6_neg_fast(x) returns z = -x, computed as z = p - x fd_r43x6_add_fast(x,y) returns z = x + y - fd_r43x6_sub_fast(x,y) returns z = x - y + fd_r43x6_sub_fast(x,y) returns z = x - y, computed as z = x + (p - y) These will be applied to lanes 6 and 7 and these assume that the corresponding limbs of x and y when added / subtracted will produce a @@ -738,9 +740,9 @@ fd_r43x6_mod_nearly_reduced( fd_r43x6_t x ) { sll - umm -> snn, smm - ull -> snn sll - smm -> snn, smm - sll -> snn */ -#define fd_r43x6_neg_fast( x ) wwl_sub( wwl_zero(), (x) ) +#define fd_r43x6_neg_fast( x ) wwl_sub( fd_r43x6_p(), (x) ) #define fd_r43x6_add_fast( x, y ) wwl_add( (x), (y) ) -#define fd_r43x6_sub_fast( x, y ) wwl_sub( (x), (y) ) +#define fd_r43x6_sub_fast( x, y ) wwl_add( (x), wwl_sub( (fd_r43x6_p()), (y) ) ) /* fd_r43x6_mul_fast(x,y) returns z = x*y as an unsigned fd_r43x6_t with lanes 6 and 7 zero where x and y are unreduced fd_r43x6_t's diff --git a/src/ballet/ed25519/avx512/fd_r43x6_ge.c b/src/ballet/ed25519/avx512/fd_r43x6_ge.c index e64bcecf68..e6ff1806d5 100644 --- a/src/ballet/ed25519/avx512/fd_r43x6_ge.c +++ b/src/ballet/ed25519/avx512/fd_r43x6_ge.c @@ -73,20 +73,6 @@ fd_r43x6_ge_decode( wwl_t * _P03, wwl_t * _P14, wwl_t * _P25, y3 &= ~(1UL<<63); - // If the resulting value is >= p, decoding fails. - - /* To do this, we add 19 to y ( which yields a 256-bit result, since y - is in [0,2^255) after clearing the most significant bit of y3 ) and - see if bit 255 is set. If so, then y+19>=2^255, which implies y>=p. */ - - ulong c = 19UL; - ulong t; - t = y0 + c; c = (ulong)(t>63 ) ) goto fail; - fd_r43x6_t y = fd_r43x6_unpack( wv( y0, y1, y2, y3 ) ); // 2. To recover the x-coordinate, the curve equation implies x^2 = @@ -210,15 +196,6 @@ fd_r43x6_ge_decode2( wwl_t * _Pa03, wwl_t * _Pa14, wwl_t * _Pa25, y3a &= ~(1UL<<63); y3b &= ~(1UL<<63); - ulong ca = 19UL; ulong cb = 19UL; - ulong ta; ulong tb; - ta = y0a + ca; ca = (ulong)(ta>63 ) ) goto faila; - /**/ if( FD_UNLIKELY( tb>>63 ) ) goto failb; - _sa[0] = y0a; _sb[0] = y0b; _sa[1] = y1a; _sb[1] = y1b; _sa[2] = y2a; _sb[2] = y2b; @@ -273,654 +250,3 @@ fd_r43x6_ge_decode2( wwl_t * _Pa03, wwl_t * _Pa14, wwl_t * _Pa25, # endif } - -void -fd_r43x6_ge_smul_base_ref( wwl_t * _R03, wwl_t * _R14, wwl_t * _R25, - void const * _vs ) { - uchar const * _s = (uchar const *)_vs; - - // Section 6 "class EdwardsPoint" [page 51] - // - // def __mul__(self,x): - // r=self.zero_elem() - // s=self - // while x > 0: - // if (x%2)>0: - // r=r+s - // s=s.double() - // x=x//2 - // return r - - FD_R43X6_QUAD_DECL( R ); FD_R43X6_GE_ZERO( R ); /* R = neutral point, in u44|u44|u44|u44 */ - FD_R43X6_QUAD_DECL( S ); FD_R43X6_GE_ONE ( S ); /* S = base point, in u44|u44|u44|u44 */ - - for( int b=0; b<255; b++ ) { /* Note: s_255 is zero */ - int sb = (((int)_s[ b>>3 ]) >> (b&7)) & 1; - if( sb ) FD_R43X6_GE_ADD( R, R, S ); /* R += S, in u44|u44|u44|u44 */ - FD_R43X6_GE_DBL( S, S ); /* S *= 2, in u44|u44|u44|u44 */ - } - - FD_R43X6_QUAD_MOV( *_R, R ); /* return R, in u44|u44|u44|u44 */ -} - -FD_IMPORT( fd_r43x6_ge_smul_base_large_table, "src/ballet/ed25519/table/fd_r43x6_ge_smul_base_large_table", wwl_t, 7, "" ); -/* 384 KiB */ - -void -fd_r43x6_ge_smul_base_large( wwl_t * _R03, wwl_t * _R14, wwl_t * _R25, - void const * _vs ) { - uchar const * _s = (uchar const *)_vs; - - /* 8-bit table lookup based with table precomp and table symmetry. - Theory: - - R = sum_{i in [0,256)} s_i 2^i B - - Reshape the sum: - - R = sum_{i in [0,2)} sum_{j in [0,16)} sum_{k in [0,8)} s_l 2^l B - - where: - - l = 16 j + 8 i + k - - Factoring out the 2^(8*i), we have: - - R = sum_{i in [0,2)} 2^(8 i) sum_{j in [0,16)} sum_{k in [0,8)} s_l 2^(16 j + k) B - - The k sums can be precomputed into a table: - - table(j,w) = sum_{k in [0,8)} w_k 2^(16 j+k) B - - The table is indexed [0,16)x[0,256). With this table, we have: - - R = sum_{i in [0,2)} 2^(8 i) sum_{j in [0,16)} table(j,s_{m+7:m}) - - where m = 16*j + 8*i. That is, when i=0 / i=1, we are summing - table lookups over the even / odd bytes of s. Expanding the i sum: - - R = (2^8) sum_{j in [0,16)} table(j,s[2j+1]) - + sum_{j in [0,16)} table(j,s[2j ]) - - As such, we accumulate all the odd bytes, double the result 8 times - and then finish accumulating the even bytes. This yields the basic - structure below. - - The original sum can be thought of as over bytes of s: - - R = sum_{i in [0,32)} s[i] 2^(8 i) B - - and we note that the s[i] can be thought of as arbitrary integers. - As we result, if we do: - - t[i] = s[i] - 2^8 carry - t[i+1] = s[i+1] + carry - - for some integer valued carry, the sum above will not be changed. - Using this, we can transform s[i] from the range [0,256) to the - range [-128,128] quickly. This yields: - - R = (2^8) sum_{j in [0,16)} (sgn s[2j+1]) table(j,|s[2j+1])|) - + sum_{j in [0,16)} (sgn s[2j ]) table(j,|s[2j ])|) - - where sgn x is -1,0,+1 if x is negative,zero,positive. The benefit - of this is that we now only need to index the table [0x16)x[1,128). - This results in a table half the size. The negating of the table - entries is a very small amount of extra (branchless) work. - - The last optimization is to note that we can optimize the - representation of the table entries to save some calculations in - the accumulation. Specifically, ADD_TABLE needs - (Y-X,Y+X,2*Z,2*d*T) and we can normalize the table such that Z is - 1. This allows us to store: - - (Y-X,Y+X,-2*d*T,2*d*T) - - as reduced fd_r43x6_t in a FD_R43X6_QUAD in the table. When we - load a table entry, if we need to negate it, we swap the lanes 0,1 - and lanes 2,3 and blend in 2*Z = 2 into FD_R43X6_QUAD lane 2 to get - the desired ADD_TABLE input. - - This results in the below. - - The upshot is that the reference version does ~256 GE_DBL and ~128 - GE_ADD while this only does ~8 GE_DBL and ~32 (faster) - GE_ADD_TABLE. - - This is the same algorithm used by OpenSSL scalarmult_base but, - unlike that implementation, this actually documents how it works - (which then enables one to much better optimize it) and this works - 8-bits at a time instead of a 4-bits at a time. This plus the use - of a faster fd_r43x6 representation (instead of the r25.5x10) and - then an AVX-512 accelerated implementation of that faster - representation are the main sources of speedups for this - implementation. - - Working 8-bits at a time requires use of a significantly larger - table than the OpenSSL implementation but modern cores have large - caches and FD use cases expect that tiles will be specialized for - operations like signing. So using a larger fraction of those - caches for larger tables is justified. - - We could work more than 8-bits at a time but the table size doubles - for each additional bit such that the table rapidly becomes - impractical to store. Additionally, the number of GE_DBL scales - linearly with this such that, at some point, it becomes - counterproductive (i.e. the increased number of GE_DBL reduces the - benefit of having fewer GE_ADD_TABLE). That is, the costs grow - exponentially while the benefits improve sublinearly. - - Other reshaping of the sum are possible but this above seems to - result in the best result practically. */ - - /* Transform s into a 32 signed 16-bit int limb representation. At - this point, _s[0:30] are in [0,256) and _s[31] is in [0,128). */ - - short _t[32]; - - int carry = 0; - for( int i=0; i<31; i++ ) { - - /* At this point, carry in [0,1] */ - - int si = ((int)_s[i]) + carry; /* In [ 0,256] */ - carry = (si>=128); /* In [ 0, 1] (0 if ti in [0,127], 1 if ti in [128,256]) */ - _t[i] = (short)(si - 256*carry); /* In [-128,128) (0:127 map to 0:7, 8:16 map to -8:0) */ - } - - /* At this point, carry in [0,1] */ - - _t[31] = (short)(((int)_s[31]) + carry); /* In [0,128] */ - - /* Accumulate the odd bytes, scale and then accumulate the even bytes - as per the above. At this point _t[0:30] in [-128,128) (fits into - schar), _t[31] in [0,128] (almost fits into a schar), or, more - generically, _t[*] in [-128,128]. */ - - FD_R43X6_QUAD_DECL( R ); FD_R43X6_GE_ZERO( R ); /* R = neutral point, in u44|u44|u44|u44 */ - - FD_R43X6_QUAD_DECL( two ); - two03 = wwl( 2L,2L,2L,2L, 0L,0l,0L,0L ); - two14 = wwl_zero(); - two25 = wwl_zero(); /* two = 2|2|2|2, in u44|u44|u44|u44 */ - - int i = 2; - do { - i--; - - for( int j=0; j<16; j++ ) { - int w = (int)_t[2*j+i]; - - FD_R43X6_QUAD_DECL( T ); - - /* Direct table lookup might be vulnerable to timing attacks as - performance can depend on the data cache state, branch - prediction cache state, etc, all of which are affected by - recently passed s (among other things). - - The OpenSSL style mitigation loads the entire table over the - course of the calculation and branchlessly selects out the - needed table entries to make the timing independent of the s - passed. This is much more expensive and can thrash the cache, - especially if done as a one-off calculation in a thread that - does lots of other unrelated stuff. */ - -# if 1 /* No timing attack mitigations */ - - if( FD_UNLIKELY( !w ) ) continue; /* Shortcut if nothing to do */ - int l = (3*128)*j + 3*((int)fd_int_abs( w ) - 1); - wwl_t perm = wwl_if( w<0 ? 0xff : 0x00, wwl( 1L,0L,3L,2L,5L,4L,7L,6L ), wwl( 0L,1L,2L,3L,4L,5L,6L,7L ) ); - T03 = wwl_if( (1<<2)|(1<<6), two03, wwl_permute( perm, fd_r43x6_ge_smul_base_large_table[ l + 0 ] ) ); - T14 = wwl_if( (1<<2)|(1<<6), two14, wwl_permute( perm, fd_r43x6_ge_smul_base_large_table[ l + 1 ] ) ); - T25 = wwl_if( (1<<2)|(1<<6), two25, wwl_permute( perm, fd_r43x6_ge_smul_base_large_table[ l + 2 ] ) ); - -# else /* OpenSSL style timing attack mitigations */ - - int idx = (int)fd_int_abs( w ) - 1; - T03 = wwl( 1L,1L,0L,0L, 0L,0L,0L,0L ); /* (1,1,0,0) */ - T14 = wwl_zero(); - T25 = wwl_zero(); - for( int k=0; k<128; k++ ) { - int keep = (idx==k) ? 0xff : 0x00; - int l = (3*128)*j + 3*k; - T03 = wwl_if( keep, fd_r43x6_ge_smul_base_large_table[ l + 0 ], T03 ); - T14 = wwl_if( keep, fd_r43x6_ge_smul_base_large_table[ l + 1 ], T14 ); - T25 = wwl_if( keep, fd_r43x6_ge_smul_base_large_table[ l + 2 ], T25 ); - } - wwl_t perm = wwl_if( (w<0) ? 0xff : 0x00, wwl( 1L,0L,3L,2L,5L,4L,7L,6L ), wwl( 0L,1L,2L,3L,4L,5L,6L,7L ) ); - T03 = wwl_if( (1<<2)|(1<<6), two03, wwl_permute( perm, T03 ) ); - T14 = wwl_if( (1<<2)|(1<<6), two14, wwl_permute( perm, T14 ) ); - T25 = wwl_if( (1<<2)|(1<<6), two25, wwl_permute( perm, T25 ) ); - -# endif - - /* At this point T in u44|u44|u44|u44 */ - - FD_R43X6_GE_ADD_TABLE( R, T, R ); /* R += T, R in u44|u44|u44|u44 */ - } - - if( i ) for( ulong rem=8UL; rem; rem-- ) FD_R43X6_GE_DBL( R, R ); /* R *= 2, R in u44|u44|u44|u44 */ - - } while( i ); - - FD_R43X6_QUAD_MOV( *_R, R ); /* return R, in u44|u44|u44|u44 */ -} - -FD_IMPORT( fd_r43x6_ge_smul_base_small_table, "src/ballet/ed25519/table/fd_r43x6_ge_smul_base_small_table", wwl_t, 7, "" ); -/* 48 KiB */ - -void -fd_r43x6_ge_smul_base_small( wwl_t * _R03, wwl_t * _R14, wwl_t * _R25, - void const * _vs ) { - uchar const * _s = (uchar const *)_vs; - - /* See ge_smul_base_large for details. This operates 4-bits at time - instead of 8-bits. That is, this is the original OpenSSL algorithm - converted to use AVX-512 accelerated curve operations. */ - - /* Unpack s into a 64 signed 4-bit int limb representation. */ - - schar _t[64]; - - for( int i=0; i<32; i++ ) { - int si = (int)_s[i]; - _t[2*i+0] = (schar)(si & 15); - _t[2*i+1] = (schar)(si >> 4); - } - - /* At this point _t[0:62] in [0,16), _t[63] in [0,8) */ - - int carry = 0; - for( int i=0; i<63; i++ ) { - int ti = ((int)_t[i]) + carry; /* In [ 0,16] */ - carry = (ti>=8); /* In [ 0, 1] (0 if ti in [0,7], 1 if ti in [8,16]) */ - _t[i] = (schar)(ti - 16*carry); /* In [-8, 8) (0:7 map to 0:7, 8:16 map to -8:0) */ - } - _t[63] = (schar)(((int)_t[63]) + carry); /* In [0,8] */ - - /* At this point _t[0:62] in [-8,8), _t[63] in [0,8], or, more - generically, _t[*] in [-8,8] */ - - FD_R43X6_QUAD_DECL( R ); FD_R43X6_GE_ZERO( R ); /* R = neutral point, in u44|u44|u44|u44 */ - - FD_R43X6_QUAD_DECL( two ); - two03 = wwl( 2L,2L,2L,2L, 0L,0l,0L,0L ); - two14 = wwl_zero(); - two25 = wwl_zero(); /* two = 2|2|2|2, in u44|u44|u44|u44 */ - - int i = 2; - do { - i--; - - for( int j=0; j<32; j++ ) { - int w = (int)_t[2*j+i]; - - FD_R43X6_QUAD_DECL( T ); - - /* See details above re mitigations */ - -# if 0 /* No timing attack mitigations */ - - if( FD_UNLIKELY( !w ) ) continue; /* Shortcut if nothing to do */ - int l = (3*8)*j + 3*((int)fd_int_abs( w ) - 1); - wwl_t perm = wwl_if( w<0 ? 0xff : 0x00, wwl( 1L,0L,3L,2L,5L,4L,7L,6L ), wwl( 0L,1L,2L,3L,4L,5L,6L,7L ) ); - T03 = wwl_if( (1<<2)|(1<<6), two03, wwl_permute( perm, fd_r43x6_ge_smul_base_small_table[ l + 0 ] ) ); - T14 = wwl_if( (1<<2)|(1<<6), two14, wwl_permute( perm, fd_r43x6_ge_smul_base_small_table[ l + 1 ] ) ); - T25 = wwl_if( (1<<2)|(1<<6), two25, wwl_permute( perm, fd_r43x6_ge_smul_base_small_table[ l + 2 ] ) ); - -# else /* OpenSSL style timing attack mitigations */ - - int idx = (int)fd_int_abs( w ) - 1; - T03 = wwl( 1L,1L,0L,0L, 0L,0L,0L,0L ); /* (1,1,0,0) */ - T14 = wwl_zero(); - T25 = wwl_zero(); - for( int k=0; k<8; k++ ) { - int keep = (idx==k) ? 0xff : 0x00; - int l = (3*8)*j + 3*k; - T03 = wwl_if( keep, fd_r43x6_ge_smul_base_small_table[ l + 0 ], T03 ); - T14 = wwl_if( keep, fd_r43x6_ge_smul_base_small_table[ l + 1 ], T14 ); - T25 = wwl_if( keep, fd_r43x6_ge_smul_base_small_table[ l + 2 ], T25 ); - } - wwl_t perm = wwl_if( (w<0) ? 0xff : 0x00, wwl( 1L,0L,3L,2L,5L,4L,7L,6L ), wwl( 0L,1L,2L,3L,4L,5L,6L,7L ) ); - T03 = wwl_if( (1<<2)|(1<<6), two03, wwl_permute( perm, T03 ) ); - T14 = wwl_if( (1<<2)|(1<<6), two14, wwl_permute( perm, T14 ) ); - T25 = wwl_if( (1<<2)|(1<<6), two25, wwl_permute( perm, T25 ) ); - -# endif - - /* At this point T in u44|u44|u44|u44 */ - - FD_R43X6_GE_ADD_TABLE( R, T, R ); /* R += T, R in u44|u44|u44|u44 */ - } - - if( i ) for( ulong rem=4UL; rem; rem-- ) FD_R43X6_GE_DBL( R, R ); /* R *= 2, R in u44|u44|u44|u44 */ - - } while( i ); - - FD_R43X6_QUAD_MOV( *_R, R ); /* return R, in u44|u44|u44|u44 */ -} - -void -fd_r43x6_ge_fma_ref( wwl_t * _R03, wwl_t * _R14, wwl_t * _R25, - void const * _vs, - wwl_t P03, wwl_t P14, wwl_t P25, - wwl_t Q03, wwl_t Q14, wwl_t Q25 ) { - - /* See smul_base_ref above for details how this works */ - - uchar const * _s = (uchar const *)_vs; - for( int b=0; b<255; b++ ) { - int sb = (((int)_s[ b>>3 ]) >> (b&7)) & 1; - if( sb ) FD_R43X6_GE_ADD( Q, Q, P ); /* Q += P, in u44|u44|u44|u44 */ - FD_R43X6_GE_DBL( P, P ); /* P *= 2, in u44|u44|u44|u44 */ - } - - FD_R43X6_QUAD_MOV( *_R, Q ); /* return Q, in u44|u44|u44|u44 */ -} - -void -fd_r43x6_ge_sparse_table( wwl_t * table, - wwl_t P03, wwl_t P14, wwl_t P25, - int max ) { - - FD_R43X6_QUAD_DECL( P2 ); FD_R43X6_GE_DBL( P2, P ); /* P2 = 2*P, in u44|u44|u44|u44 */ - FD_R43X6_QUAD_DECL( wP ); FD_R43X6_QUAD_MOV( wP, P ); /* wP = P, in u44|u44|u44|u44 */ - - for( int w=1; w<=max; w+=2 ) { - if( FD_LIKELY( w>1 ) ) FD_R43X6_GE_ADD( wP, wP, P2 ); /* wP += 2*P, in u44|u44|u44|u44 */ - - /* At this point wP = [w]P */ - - fd_r43x6_t wPX, wPY, wPZ, wPT; - FD_R43X6_QUAD_UNPACK( wPX, wPY, wPZ, wPT, wP ); - int l; - - fd_r43x6_t YmX = fd_r43x6_sub_fast( wPY, wPX ); /* YmX = Y-X, in s44 */ - fd_r43x6_t YpX = fd_r43x6_add_fast( wPY, wPX ); /* YpX = Y+X, in u45 */ - fd_r43x6_t Z2 = fd_r43x6_add_fast( wPZ, wPZ ); /* Z2 = 2*Z, in u45 */ - fd_r43x6_t T2d = fd_r43x6_mul_fast( wPT, fd_r43x6_2d() ); /* T2d = T*2*d, in u62 */ - fd_r43x6_t nT2d = fd_r43x6_neg_fast( T2d ); /* nT2d = -T*2*d, in s62 */ - - FD_R43X6_QUAD_DECL( T ); - - FD_R43X6_QUAD_PACK( T, YmX, YpX, Z2, T2d ); /* T = Y-X|Y+X|2*Z| T*2*d, in s44|u45|u45|u62 */ - FD_R43X6_QUAD_FOLD_SIGNED( T, T ); /* T = Y-X|Y+X|2*Z| T*2*d, in u44|u44|u44|u44 */ - l = 3*((max+w)>>1); - table[ l + 0 ] = T03; - table[ l + 1 ] = T14; - table[ l + 2 ] = T25; - - FD_R43X6_QUAD_PACK( T, YpX, YmX, Z2, nT2d ); /* T = Y+X|Y-X|2*Z|-T*2*d, in u45|s44|u45|s62 */ - FD_R43X6_QUAD_FOLD_SIGNED( T, T ); /* T = Y+X|Y-X|2*Z|-T*2*d, in u44|u44|u44|u44 */ - l = 3*((max-w)>>1); - table[ l + 0 ] = T03; - table[ l + 1 ] = T14; - table[ l + 2 ] = T25; - } -} - -/* fd_r43x6_ge_sparsen converts a little endian uint256 number in - [0,2^255) into a sparse representation such that: - - s = sum(i=0:255) s_i 2^i - = sum(i=0:256) t_i 2^i - - where t_i are mostly zero and the non-zero values are odd and in - [-max,max]. */ - -static void -fd_r43x6_ge_sparsen( int * _t, /* 256-entry */ - void const * _vs, /* 32-byte, assumes bit 255 zero */ - int max ) { /* should be positive, odd and << INT_MAX */ - - uchar const * _s = (uchar const *)_vs; - - /* Unpack s bits into _t */ - - for( int i=0; i<255; i++ ) _t[i] = ((int)_s[i>>3] >> (i&7)) & 1; - _t[255] = 0; /* Guarantee 0 termination even if bad data passed */ - - /* At this point _t[*] in [0,1] */ - - int i; - - for( i=0; i<256; i++ ) if( _t[i] ) break; /* Find first non-zero t */ - - while( i<256 ) { - - /* At this point [0,i) have been made sparse and t[i] is 1. - Absorb as many tj for j in (i,256) into ti as possible */ - - int ti = 1; - - int j; - for( j=i+1; j<256; j++ ) { - int tj = _t[j]; - if( !tj ) continue; - - /* At this point, we've zeroed out (i,j) and we know tj is - 1. We also know that ti is odd and in [-max,max]. Thus, if - 2^shift>(2*max), ti +/- 2^shift*tj is _not_ in [-max,max] and - we can't merge this j and any following into i. */ - - if( j-i > 30 ) break; /* make sure delta doesn't overflow */ - int delta = 1 << (j-i); /* even */ - if( delta>(2*max) ) break; - - /* See if we can add tj to ti. If so, this implies we are - subtracting 1 from tj, making it 0. */ - - int tip = ti + delta; /* odd + even -> odd */ - if( tip<=max ) { /* Yep ... add it to ti and zero it out */ - ti = tip; /* odd */ - _t[j] = 0; - continue; - } - - /* See if we can instead subtract tj from ti. This implies we are - adding 1 to tj, making it 2. We carry-propagate this into tk - for k>j, turning tj and possibly later tk to 0. We note that - delta for the next iteration will be so large that we can't - possibly absorb it into ti so we can abort this inner loop. - - Note that if this carry propagates to _t[255] (which is - strictly zero initially), we have _t[k]==0 for k in [j,254) and - _t[255]==1. The outer loop iteration will resume at i==255 and - detect it is done when it can't scan further for additional j - to absorb. Hence we will never carry propagate off the end and - the loop below is guaranteed to terminate. */ - - int tim = ti - delta; /* odd + even -> odd */ - if( tim>=-max ) { /* Yep ... sub it from ti and carry propagate */ - ti = tim; /* odd */ - _t[j] = 0; - for(;;) { - j++; - if( !_t[j] ) { _t[j] = 1; break; } - _t[j] = 0; - } - break; - } - - /* We can't absorb tj into ti */ - - break; - } - - /* Finalize ti and advance */ - - _t[i] = ti; - i = j; - } -} - -void -fd_r43x6_ge_fma_sparse( wwl_t * _R03, wwl_t * _R14, wwl_t * _R25, - void const * _vs, - wwl_t P03, wwl_t P14, wwl_t P25, - wwl_t Q03, wwl_t Q14, wwl_t Q25 ) { - - /* We don't have the luxury of precomputing a large table for P - off-line like we did above for B. But, like above, we can treat - the si as integer valued (not just binary valued). Via the - transformation: - - si + delta - sj - delta 2^(j-i) - - where j>i, we can introduce sparsity to reduce the number of - non-zero terms we have to compute. - - To do this usefully, we need to introduce this sparsity such that - there are only a handful of values that need to be considered. - This allows us to precompute on the fly a small table of the needed - P multiples. - - The sparsen algorithm above can convert a binary array into a - sparse array in fast O(N256 time where the non-zero values are odd - and in [-MAX,+MAX]. We can compute a table with these multiplies - (utilizing symmetry to only do expensive computations for half the - table). - - The choice of MAX balances between increasing computation for the - table computation nd decreasing work for the Horner's rule like - accumulation loop. Odd values in [-9,+9] empirically found to be - good. */ - -# define MAX (9) - - wwl_t Ptable[3*(MAX+1)]; fd_r43x6_ge_sparse_table( Ptable, P03, P14, P25, MAX ); - - /* Sparsen s into zero or odd values in [-MAX,+MAX] */ - - int _w[256]; fd_r43x6_ge_sparsen( _w, _vs, MAX ); - - /* Compute R = [s]P using the P multiple table and sparse s */ - - FD_R43X6_QUAD_DECL( R ); FD_R43X6_GE_ZERO( R ); /* R = neutral point, in u44|u44|u44|u44 */ - - int i; - - for( i=255; i>=0; i-- ) if( _w[i] ) break; /* Find highest index non-zero _w */ - - for( ; i>=0; i-- ) { - int w = _w[i]; - if( FD_UNLIKELY( w ) ) { - int l = 3*((MAX+w)>>1); - FD_R43X6_QUAD_DECL( T ); - T03 = Ptable[ l + 0 ]; - T14 = Ptable[ l + 1 ]; - T25 = Ptable[ l + 2 ]; - /* At this point, T in u44|u44|u44|u44 */ - FD_R43X6_GE_ADD_TABLE( R, T, R ); /* R += T, in u44|u44|u44|u44 */ - } - if( FD_LIKELY( i ) ) FD_R43X6_GE_DBL( R, R ); /* R *= 2, in u44|u44|u44|u44 */ - } - - /* Compute R = [s]P + Q */ - - FD_R43X6_GE_ADD( R, R, Q ); /* R += Q, in u44|u44|u44|u44 */ - FD_R43X6_QUAD_MOV( *_R, R ); /* return R, in u44|u44|u44|u44 */ - -# undef MAX -} - -void -fd_r43x6_ge_dmul_ref( wwl_t * _R03, wwl_t * _R14, wwl_t * _R25, - void const * _vs, - void const * _vk, - wwl_t A03, wwl_t A14, wwl_t A25 ) { - uchar const * _s = (uchar const *)_vs; - uchar const * _k = (uchar const *)_vk; - - /* See smul_base_ref above for details how this works */ - - FD_R43X6_QUAD_DECL( B ); FD_R43X6_GE_ONE( B ); /* B = base point, in u44|u44|u44|u44 */ - FD_R43X6_QUAD_DECL( R ); FD_R43X6_GE_ZERO( R ); /* R = neutral point, in u44|u44|u44|u44 */ - - for( int b=0; b<255; b++ ) { /* Note: s_255 and k_255 are zero */ - int sb = (((int)_s[ b>>3 ]) >> (b&7)) & 1; - if( sb ) FD_R43X6_GE_ADD( R, R, B ); /* R += B, in u44|u44|u44|u44 */ - FD_R43X6_GE_DBL( B, B ); /* B *= 2, in u44|u44|u44|u44 */ - - int kb = (((int)_k[ b>>3 ]) >> (b&7)) & 1; - if( kb ) FD_R43X6_GE_ADD( R, R, A ); /* R += A, in u44|u44|u44|u44 */ - FD_R43X6_GE_DBL( A, A ); /* A *= 2, in u44|u44|u44|u44 */ - } - - FD_R43X6_QUAD_MOV( *_R, R ); /* return R, in u44|u44|u44|u44 */ -} - -FD_IMPORT( fd_r43x6_ge_dmul_sparse_table, "src/ballet/ed25519/table/fd_r43x6_ge_dmul_sparse_table", wwl_t, 7, "" ); /* 384 KiB */ - -void -fd_r43x6_ge_dmul_sparse( wwl_t * _R03, wwl_t * _R14, wwl_t * _R25, - void const * _vs, - void const * _vk, - wwl_t A03, wwl_t A14, wwl_t A25 ) { - - /* This works very similar to fma_sparse above except it sparsens both - s and k (and then with independently configurable max since we can - precompute the B table off line. Note: MAXK ~ 2047 such that this - uses (almost) the same amount of memory as used by - smul_base_large_table. Ignoring memory costs, increasing MAXS - increases performance, albeit by increasingly small amounts. The - table above will need to be recomputed if MAXS is changed. */ - -# define MAXS (2047) -# define MAXK (9) - - wwl_t Atable[3*(MAXK+1)]; fd_r43x6_ge_sparse_table( Atable, A03, A14, A25, MAXK ); - - /* Sparsen s and k into a range of zero or odd values in [-MAXS,+MAXS], [-MAXK,+MAXK] */ - - int _ws[256]; fd_r43x6_ge_sparsen( _ws, _vs, MAXS ); - int _wk[256]; fd_r43x6_ge_sparsen( _wk, _vk, MAXK ); - - /* Compute R = [s]B + [k]A using the B and A multiple tables, sparse s - and sparse k */ - - FD_R43X6_QUAD_DECL( R ); FD_R43X6_GE_ZERO( R ); /* R = neutral point, in u44|u44|u44|u44 */ - - int i; - - for( i=255; i>=0; i-- ) if( FD_UNLIKELY( _wk[i] | _ws[i] ) ) break; /* Find highest index non-zero _wk or _ws */ - - for( ; i>=0; i-- ) { - - /* TODO: USE FN CALL OR LOOP TO MERGE COMMON CODE? */ - /* TODO: CONSIDER COMPUTING NEGATIVE ON THE FLY TO GET TWICE TABLE - SIZE FOR SAME MEMORY FOOTPRINT FOR THE SPARSE TABLE */ - - int ws = _ws[i]; - if( FD_UNLIKELY( ws ) ) { - int l = 3*((MAXS+ws)>>1); - FD_R43X6_QUAD_DECL( T ); - T03 = fd_r43x6_ge_dmul_sparse_table[ l + 0 ]; - T14 = fd_r43x6_ge_dmul_sparse_table[ l + 1 ]; - T25 = fd_r43x6_ge_dmul_sparse_table[ l + 2 ]; - /* At this point, T in u44|u44|u44|u44 */ - FD_R43X6_GE_ADD_TABLE( R, T, R ); /* R += T, in u44|u44|u44|u44 */ - - } - - int wk = _wk[i]; - if( FD_UNLIKELY( wk ) ) { - int l = 3*((MAXK+wk)>>1); - FD_R43X6_QUAD_DECL( T ); - T03 = Atable[ l + 0 ]; - T14 = Atable[ l + 1 ]; - T25 = Atable[ l + 2 ]; - /* At this point, T in u44|u44|u44|u44 */ - FD_R43X6_GE_ADD_TABLE( R, T, R ); /* R += T, in u44|u44|u44|u44 */ - } - - if( FD_LIKELY( i ) ) FD_R43X6_GE_DBL( R, R ); /* R *= 2, in u44|u44|u44|u44 */ - - } - - FD_R43X6_QUAD_MOV( *_R, R ); /* return R, in u44|u44|u44|u44 */ - -# undef MAXK -# undef MAXS -} diff --git a/src/ballet/ed25519/avx512/fd_r43x6_ge.h b/src/ballet/ed25519/avx512/fd_r43x6_ge.h index ed2e2916e3..8ea4acf8cd 100644 --- a/src/ballet/ed25519/avx512/fd_r43x6_ge.h +++ b/src/ballet/ed25519/avx512/fd_r43x6_ge.h @@ -81,11 +81,11 @@ fd_r43x6_ge_is_eq( wwl_t X03, wwl_t X14, wwl_t X25, (int)(!fd_r43x6_is_nonzero( fd_r43x6_sub_fast( yn1, yn2 ) /* in s62 */ )); } -/* FD_R43X6_QUAD_1122d(Q) does Q = (1,1,2,2*d). (X,Y,Z,T) will be +/* FD_R43X6_QUAD_1112d(Q) does Q = (1,1,2,2*d). (X,Y,Z,T) will be reduced fd_r43x6_t. */ -#define FD_R43X6_QUAD_1122d( Q ) do { \ - Q##03 = wwl( 1L, 1L, 2L, 3934839304537L, 0L, 0L, 0L, 521695520920L ); \ +#define FD_R43X6_QUAD_1112d( Q ) do { \ + Q##03 = wwl( 1L, 1L, 1L, 3934839304537L, 0L, 0L, 0L, 521695520920L ); \ Q##14 = wwl( 0L, 0L, 0L, 507525298899L, 0L, 0L, 0L, 6596238350568L ); \ Q##25 = wwl( 0L, 0L, 0L, 15037786634L, 0L, 0L, 0L, 309467527341L ); \ } while(0) @@ -117,25 +117,23 @@ fd_r43x6_ge_is_eq( wwl_t X03, wwl_t X14, wwl_t X25, #if 1 /* Seems very slightly faster than the below */ #define FD_R43X6_GE_ADD( P3, P1, P2 ) do { \ - FD_R43X6_QUAD_DECL ( _1122d ); \ + FD_R43X6_QUAD_DECL ( _1112d ); \ FD_R43X6_QUAD_DECL ( _ta ); \ FD_R43X6_QUAD_DECL ( _tb ); \ - FD_R43X6_QUAD_1122d ( _1122d ); /* (1, 1, 2, 2*d ), u43|u43|u43|u43 */ \ + FD_R43X6_QUAD_1112d ( _1112d ); /* (1, 1, 1, 2*d ), u43|u43|u43|u43 */ \ FD_R43X6_QUAD_PERMUTE ( _ta, 1,0,2,3, P1 ); /* _ta = (Y1, X1, Z1, T1 ), s61|s61|s61|s61 */ \ FD_R43X6_QUAD_PERMUTE ( _tb, 1,0,2,3, P2 ); /* _tb = (Y2, X2, Z2, T2 ), s61|s61|s61|s61 */ \ FD_R43X6_QUAD_LANE_SUB_FAST( _ta, _ta, 1,0,0,0, _ta, P1 ); /* _ta = (Y1-X1,X1, Z1, T1 ), s62|s61|s61|s61 */ \ FD_R43X6_QUAD_LANE_SUB_FAST( _tb, _tb, 1,0,0,0, _tb, P2 ); /* _tb = (Y2-X2,X2, Z2, T2 ), s62|s61|s61|s61 */ \ - FD_R43X6_QUAD_LANE_ADD_FAST( _ta, _ta, 0,1,0,0, _ta, P1 ); /* _ta = (Y1-X1,Y1+X1,Z1, T1 ), s62|s62|s61|s61 */ \ + FD_R43X6_QUAD_LANE_ADD_FAST( _ta, _ta, 0,1,1,0, _ta, P1 ); /* _ta = (Y1-X1,Y1+X1,Z1*2, T1 ), s62|s62|s61|s61 */ \ FD_R43X6_QUAD_LANE_ADD_FAST( _tb, _tb, 0,1,0,0, _tb, P2 ); /* _tb = (Y2-X2,Y2+X2,Z2, T2 ), s62|s62|s61|s61 */ \ - FD_R43X6_QUAD_FOLD_SIGNED ( _ta, _ta ); /* _ta = (Y1-X1,Y1+X1,Z1, T1 ), u44|u44|u44|u44 */ \ - FD_R43X6_QUAD_FOLD_SIGNED ( _tb, _tb ); /* _tb = (Y2-X2,Y2+X2,Z2, T2 ), u44|u44|u44|u44 */ \ - FD_R43X6_QUAD_MUL_FAST ( _ta, _ta, _1122d ); /* _ta = (Y1-X1,Y1+X1,Z1*2, T1*2d), u62|u62|u62|u62 */ \ - FD_R43X6_QUAD_FOLD_UNSIGNED( _ta, _ta ); /* _ta = (Y1-X1,Y1+X1,Z1*2, T1*2d), u44|u44|u44|u44 */ \ FD_R43X6_QUAD_MUL_FAST ( _ta, _ta, _tb ); /* _ta = (A, B, D, C ), u62|u62|u62|u62 */ \ + FD_R43X6_QUAD_FOLD_UNSIGNED( _ta, _ta ); /* _ta = (Y1-X1,Y1+X1,Z1*2, T1*2d), u44|u44|u44|u44 */ \ + FD_R43X6_QUAD_MUL_FAST ( _ta, _ta, _1112d ); /* _ta = (Y1-X1,Y1+X1,Z1*2, T1*2d), u62|u62|u62|u62 */ \ + FD_R43X6_QUAD_FOLD_UNSIGNED( _ta, _ta ); /* _ta = (A, B, D, C ), u44|u44|u44|u44 */ \ FD_R43X6_QUAD_PERMUTE ( _tb, 1,0,3,2, _ta ); /* _tb = (B, A, C, D ), u62|u62|u62|u62 */ \ FD_R43X6_QUAD_LANE_SUB_FAST( _tb, _tb, 1,0,0,1, _tb, _ta ); /* _tb = (E, A, C, F ), s62|u62|u62|s62 */ \ FD_R43X6_QUAD_LANE_ADD_FAST( _tb, _tb, 0,1,1,0, _tb, _ta ); /* _tb = (E, H, G, F ), s62|u63|u63|s62 */ \ - FD_R43X6_QUAD_FOLD_SIGNED ( _tb, _tb ); /* _tb = (E, H, G, F ), u44|u44|u44|u44 */ \ FD_R43X6_QUAD_PERMUTE ( _ta, 0,2,2,0, _tb ); /* _ta = (E, G, G, E ), u44|u44|u44|u44 */ \ FD_R43X6_QUAD_PERMUTE ( _tb, 3,1,3,1, _tb ); /* _tb = (F, H, F, H ), u44|u44|u44|u44 */ \ FD_R43X6_QUAD_MUL_FAST ( _ta, _ta, _tb ); /* _ta = (X3, Y3, Z3, T3 ), u62|u62|u62|u62 */ \ @@ -179,12 +177,11 @@ fd_r43x6_ge_is_eq( wwl_t X03, wwl_t X14, wwl_t X25, FD_R43X6_QUAD_PERMUTE ( _tb, 1,0,2,3, P2 ); /* _tb = (Y2, X2, Z2, T2 ), s61|s61|s61|s61 */ \ FD_R43X6_QUAD_LANE_SUB_FAST( _tb, _tb, 1,0,0,0, _tb, P2 ); /* _tb = (Y2-X2,X2, Z2, T2 ), s62|s61|s61|s61 */ \ FD_R43X6_QUAD_LANE_ADD_FAST( _tb, _tb, 0,1,0,0, _tb, P2 ); /* _tb = (Y2-X2,Y2+X2,Z2, T2 ), s62|s62|s61|s61 */ \ - FD_R43X6_QUAD_FOLD_SIGNED ( _tb, _tb ); /* _tb = (Y2-X2,Y2+X2,Z2, T2 ), u44|u44|u44|u44 */ \ FD_R43X6_QUAD_MUL_FAST ( _ta, _ta, _tb ); /* _ta = (A, B, D, C ), u62|u62|u62|u62 */ \ + FD_R43X6_QUAD_FOLD_UNSIGNED( _ta, _ta ); /* _ta = (A, B, D, C ), u44|u44|u44|u44 */ \ FD_R43X6_QUAD_PERMUTE ( _tb, 1,0,3,2, _ta ); /* _tb = (B, A, C, D ), u62|u62|u62|u62 */ \ FD_R43X6_QUAD_LANE_SUB_FAST( _tb, _tb, 1,0,0,1, _tb, _ta ); /* _tb = (E, A, C, F ), s62|u62|u62|s62 */ \ FD_R43X6_QUAD_LANE_ADD_FAST( _tb, _tb, 0,1,1,0, _tb, _ta ); /* _tb = (E, H, G, F ), s62|u63|u63|s62 */ \ - FD_R43X6_QUAD_FOLD_SIGNED ( _tb, _tb ); /* _tb = (E, H, G, F ), u44|u44|u44|u44 */ \ FD_R43X6_QUAD_PERMUTE ( _ta, 0,2,2,0, _tb ); /* _ta = (E, G, G, E ), u44|u44|u44|u44 */ \ FD_R43X6_QUAD_PERMUTE ( _tb, 3,1,3,1, _tb ); /* _tb = (F, H, F, H ), u44|u44|u44|u44 */ \ FD_R43X6_QUAD_MUL_FAST ( _ta, _ta, _tb ); /* _ta = (X3, Y3, Z3, T3 ), u62|u62|u62|u62 */ \ @@ -224,18 +221,18 @@ fd_r43x6_ge_is_eq( wwl_t X03, wwl_t X14, wwl_t X25, FD_R43X6_QUAD_PERMUTE ( _ta, 1,1,2,0, P1 ); /* _ta = (Y1, Y1,Z1, X1), u44/u44/u44/u44 */ \ FD_R43X6_QUAD_LANE_ADD_FAST( _ta, _ta, 1,0,0,0, _ta, P1 ); /* _ta = (X1+Y1, Y1,Z1, X1), u45/u44/u44/u44 */ \ FD_R43X6_QUAD_SQR_FAST ( _ta, _ta ); /* _ta = ((X1+Y1)^2,B, Z1^2,A ), u61/u61/u61/u61 */ \ - FD_R43X6_QUAD_LANE_ADD_FAST( _ta, _ta, 0,0,1,0, _ta, _ta ); /* _ta = ((X1+Y1)^2,B, C, A ), u61/u61/u62/u61 */ \ - FD_R43X6_QUAD_PERMUTE ( _tb, 3,3,3,3, _ta ); /* _tb = (A, A, A, A ), u61/u61/u61/u61 */ \ - FD_R43X6_QUAD_PERMUTE ( _BB, 1,1,1,1, _ta ); /* _BB = (B, B, B, B ), u61/u61/u61/u61 */ \ - FD_R43X6_QUAD_LANE_ADD_FAST( _tb, _tb, 1,0,0,1, _tb, _BB ); /* _tb = (H, A, A, H ), u62/u61/u61/u62 */ \ - FD_R43X6_QUAD_LANE_SUB_FAST( _tb, _tb, 0,1,1,0, _tb, _BB ); /* _tb = (H, G, G, H ), u62/s61/s61/u62 */ \ - FD_R43X6_QUAD_LANE_ADD_FAST( _tb, _tb, 0,0,1,0, _tb, _ta ); /* _tb = (H, G, F, H ), u62/s61/s63/u62 */ \ - FD_R43X6_QUAD_LANE_SUB_FAST( _tb, _tb, 1,0,0,0, _tb, _ta ); /* _tb = (E, G, F, H ), s62/s61/s63/u62 */ \ - FD_R43X6_QUAD_FOLD_SIGNED ( _tb, _tb ); /* _tb = (E, G, F, H ), u44/u44/u44/u44 */ \ - FD_R43X6_QUAD_PERMUTE ( _ta, 0,1,1,0, _tb ); /* _tb = (E, G, G, E ), u44/u44/u44/u44 */ \ - FD_R43X6_QUAD_PERMUTE ( _tb, 2,3,2,3, _tb ); /* _tb = (F, H, F, H ), u44/u44/u44/u44 */ \ - FD_R43X6_QUAD_MUL_FAST ( _ta, _ta, _tb ); /* _ta = (X3, Y3,Z3, T3), u62|u62|u62|u62 */ \ - FD_R43X6_QUAD_FOLD_UNSIGNED( P3, _ta ); /* P3 = (X3, Y3,Z3, T3), u44|u44|u44|u44 */ \ + FD_R43X6_QUAD_FOLD_UNSIGNED( _ta, _ta ); /* _ta = ((X1+Y1)^2,B, Z1^2,A ), u44/u44/u44/u44 */ \ + FD_R43X6_QUAD_LANE_ADD_FAST( _ta, _ta, 0,0,1,0, _ta, _ta ); /* _ta = ((X1+Y1)^2,B, C, A ), u44/u44/u45/u44 */ \ + FD_R43X6_QUAD_PERMUTE ( _tb, 3,3,3,3, _ta ); /* _tb = (A, A, A, A ), u44/u44/u44/u44 */ \ + FD_R43X6_QUAD_PERMUTE ( _BB, 1,1,1,1, _ta ); /* _BB = (B, B, B, B ), u44/u44/u44/u44 */ \ + FD_R43X6_QUAD_LANE_ADD_FAST( _tb, _tb, 1,0,0,1, _tb, _BB ); /* _tb = (H, A, A, H ), u45/u44/u44/u45 */ \ + FD_R43X6_QUAD_LANE_SUB_FAST( _tb, _tb, 0,1,1,0, _tb, _BB ); /* _tb = (H, G, G, H ), u45/u45/u45/u45 */ \ + FD_R43X6_QUAD_LANE_ADD_FAST( _tb, _tb, 0,0,1,0, _tb, _ta ); /* _tb = (H, G, F, H ), u45/u45/u46/u45 */ \ + FD_R43X6_QUAD_LANE_SUB_FAST( _tb, _tb, 1,0,0,0, _tb, _ta ); /* _tb = (E, G, F, H ), u46/u45/u46/u45 */ \ + FD_R43X6_QUAD_PERMUTE ( _ta, 0,1,1,0, _tb ); /* _tb = (E, G, G, E ), u46/u45/u45/u46 */ \ + FD_R43X6_QUAD_PERMUTE ( _tb, 2,3,2,3, _tb ); /* _tb = (F, H, F, H ), u46/u45/u46/u45 */ \ + FD_R43X6_QUAD_MUL_FAST ( _ta, _ta, _tb ); /* _ta = (X3, Y3,Z3, T3), u62/u62/u62/u62 */ \ + FD_R43X6_QUAD_FOLD_UNSIGNED( P3, _ta ); /* P3 = (X3, Y3,Z3, T3), u44/u44/u44/u44 */ \ } while(0) /* FD_R43X6_GE_IS_SMALL_ORDER(P) returns 1 if [8]P is the curve neutral diff --git a/src/ballet/ed25519/avx512/fd_r43x6_ge_dmul_table.c b/src/ballet/ed25519/avx512/fd_r43x6_ge_dmul_table.c deleted file mode 100644 index 0e7d9b71f8..0000000000 --- a/src/ballet/ed25519/avx512/fd_r43x6_ge_dmul_table.c +++ /dev/null @@ -1,41 +0,0 @@ -#include "../../fd_ballet.h" -#include "fd_r43x6_ge.h" - -#include - -int -main( int argc, - char ** argv ) { - fd_boot( &argc, &argv ); - - /* This is the code that was used to generate the table for - dmul_sparse. */ - - char const * path = fd_env_strip_cmdline_cstr( &argc, &argv, "--path", NULL, NULL ); - int max = fd_env_strip_cmdline_int( &argc, &argv, "--max", NULL, 2047 ); - - if( !path ) FD_LOG_ERR(( "--path not specified" )); - if( !(max & 1) ) FD_LOG_ERR(( "--max should be odd" )); - - ulong sz = ((ulong)(3*(max+1)))*sizeof(wwl_t); - - FD_LOG_NOTICE(( "Using --path %s --max %i (sz %luB)", path, max, sz )); - - FD_LOG_NOTICE(( "Computing table" )); - - wwl_t * table = (wwl_t *)fd_alloca( 128UL, sz ); - FD_R43X6_QUAD_DECL( B ); FD_R43X6_GE_ONE( B ); - fd_r43x6_ge_sparse_table( table, B03, B14, B25, max ); - - FD_LOG_NOTICE(( "Saving table" )); - - FILE * file = fopen( path, "wb" ); - if( FD_UNLIKELY( !file ) ) FD_LOG_ERR(( "fopen failed" )); - if( FD_UNLIKELY( fwrite( table, sz, 1UL, file )!=1UL ) ) FD_LOG_ERR(( "fwrite failed" )); - if( FD_UNLIKELY( fclose( file ) ) ) FD_LOG_WARNING(( "fclose failed; attempting to continue" )); - - FD_LOG_NOTICE(( "pass" )); - - fd_halt(); - return 0; -} diff --git a/src/ballet/ed25519/avx512/fd_r43x6_ge_smul_table.c b/src/ballet/ed25519/avx512/fd_r43x6_ge_smul_table.c deleted file mode 100644 index 900730bc68..0000000000 --- a/src/ballet/ed25519/avx512/fd_r43x6_ge_smul_table.c +++ /dev/null @@ -1,105 +0,0 @@ -#include "../../fd_ballet.h" -#include "fd_r43x6_ge.h" - -#include - -int -main( int argc, - char ** argv ) { - fd_boot( &argc, &argv ); - - /* This is the code that was used to generate the tables used by - ge_smul_small and ge_smul_large. Defaults are small symmetrized - table for accelerated scalar multiplication by 256 bit ulongs. Use - NK==8 for the corresponding large table. */ - - char const * path = fd_env_strip_cmdline_cstr( &argc, &argv, "--path", NULL, NULL ); - int NK = fd_env_strip_cmdline_int( &argc, &argv, "--NK", NULL, 4 ); - int NJ = fd_env_strip_cmdline_int( &argc, &argv, "--NJ", NULL, 256/(2*NK) ); - int W0 = fd_env_strip_cmdline_int( &argc, &argv, "--W0", NULL, 1 ); - int W1 = fd_env_strip_cmdline_int( &argc, &argv, "--W1", NULL, 1<<(NK-1) ); - - if( !path ) FD_LOG_ERR(( "--path not specified" )); - - int NW = W1-W0+1; - ulong sz = ((ulong)(NJ*NW*3))*sizeof(wwl_t); - - FD_LOG_NOTICE(( "Using --path %s --NJ %i --NK %i --W0 %i --W1 %i (NW %i sz %luB)", path, NJ, NK, W0, W1, NW, sz )); - - FD_LOG_NOTICE(( "Computing table" )); - - wwl_t * table = (wwl_t *)fd_alloca( 128UL, sz ); - - FD_R43X6_QUAD_DECL( Bj ); FD_R43X6_GE_ONE( Bj ); - - /* At this point Bj = B */ - - for( int j=0; j>k) & 1; - if( sb ) FD_R43X6_GE_ADD( Q, Q, P ); - FD_R43X6_GE_DBL( P, P ); - - /* At this point P = 2^(NJ*j+k+1) B */ - } - - /* At this point, Q = w 2^(NJ*j) B */ - - /* This below could be streamlined more (e.g. mul4 to get - qx,qy,1,qt from QT and one_QZ) but this is all done out of band - and simpler to follow done as below. */ - - fd_r43x6_t QX,QY,QZ,QT; - FD_R43X6_QUAD_UNPACK( QX,QY,QZ,QT, Q ); - (void)QT; - - fd_r43x6_t one_QZ = fd_r43x6_invert( QZ ); - - fd_r43x6_t qx = fd_r43x6_mul( QX, one_QZ ); - fd_r43x6_t qy = fd_r43x6_mul( QY, one_QZ ); - fd_r43x6_t qt = fd_r43x6_mul( qx, qy ); - fd_r43x6_t qt2d = fd_r43x6_mul( fd_r43x6_2d(), qt ); - - FD_R43X6_QUAD_DECL( T ); - FD_R43X6_QUAD_PACK( T, fd_r43x6_mod( fd_r43x6_sub_fast( qy, qx ) ), /* Y-X, reduced */ - fd_r43x6_mod( fd_r43x6_add_fast( qy, qx ) ), /* Y+X, reduced */ - fd_r43x6_mod( fd_r43x6_neg( qt2d ) ), /* -T*2*d, reduced */ - fd_r43x6_mod( qt2d ) ); /* T*2*d, reduced */ - - int idx = (j*NW + (w-W0))*3; - table[ idx + 0 ] = T03; - table[ idx + 1 ] = T14; - table[ idx + 2 ] = T25; - } - - for( int rem=2*NK; rem; rem-- ) FD_R43X6_GE_DBL( Bj, Bj ); - - /* At this point Bj = 2^(NJ*(j+1)) B */ - - } - - FD_LOG_NOTICE(( "Saving table" )); - - FILE * file = fopen( path, "wb" ); - if( FD_UNLIKELY( !file ) ) FD_LOG_ERR(( "fopen failed" )); - if( FD_UNLIKELY( fwrite( table, sz, 1UL, file )!=1UL ) ) FD_LOG_ERR(( "fwrite failed" )); - if( FD_UNLIKELY( fclose( file ) ) ) FD_LOG_WARNING(( "fclose failed; attempting to continue" )); - - FD_LOG_NOTICE(( "pass" )); - - fd_halt(); - return 0; -} diff --git a/src/ballet/ed25519/avx512/fd_r43x6_inl.h b/src/ballet/ed25519/avx512/fd_r43x6_inl.h index 99228bcd70..b63ce956a3 100644 --- a/src/ballet/ed25519/avx512/fd_r43x6_inl.h +++ b/src/ballet/ed25519/avx512/fd_r43x6_inl.h @@ -152,12 +152,18 @@ FD_PROTOTYPES_BEGIN /* FD_R43X6_QUAD_LANE_SUB_FAST does: D = [ (imm0 ? (PX-QX) : SX) (imm1 ? (PY-QY) : SY) (imm2 ? (PZ-QZ) : SZ) (imm3 ? (PT-QT) : ST) ] imm* should be in [0,1]. */ - #define FD_R43X6_QUAD_LANE_SUB_FAST( D, S, imm0,imm1,imm2,imm3, P, Q ) do { \ - int _mask = 17*(imm0) + 34*(imm1) + 68*(imm2) + 136*(imm3); \ - D##03 = wwv_sub_if( _mask, P##03, Q##03, S##03 ); \ - D##14 = wwv_sub_if( _mask, P##14, Q##14, S##14 ); \ - D##25 = wwv_sub_if( _mask, P##25, Q##25, S##25 ); \ + int _mask = 17*(imm0) + 34*(imm1) + 68*(imm2) + 136*(imm3); \ + FD_R43X6_QUAD_DECL( M ); \ + M##03 = wwl( 8796093022189L, 8796093022189L, 8796093022189L, 8796093022189L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L ); \ + M##14 = wwl( 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L ); \ + M##25 = wwl( 8796093022207L, 8796093022207L, 8796093022207L, 8796093022207L, 1099511627775L, 1099511627775L, 1099511627775L, 1099511627775L ); \ + M##03 = wwv_sub( M##03, Q##03 ); \ + M##14 = wwv_sub( M##14, Q##14 ); \ + M##25 = wwv_sub( M##25, Q##25 ); \ + D##03 = wwv_add_if( _mask, P##03, M##03, S##03 ); \ + D##14 = wwv_add_if( _mask, P##14, M##14, S##14 ); \ + D##25 = wwv_add_if( _mask, P##25, M##25, S##25 ); \ } while(0) /* FD_R43X6_QUAD_FOLD_UNSIGNED(R,P) does: @@ -183,7 +189,6 @@ FD_PROTOTYPES_BEGIN /* FD_R43X6_QUAD_FOLD_SIGNED(R,P) does: R = [ fd_r43x6_fold_signed(PX) fd_r43x6_fold_signed(PY) fd_r43x6_fold_signed(PZ) fd_r43x6_fold_signed(PT) ] */ - #define FD_R43X6_QUAD_FOLD_SIGNED( R, P ) do { \ long const _b0 = 19L<<23; \ long const _bb = 1L<<20; \ diff --git a/src/ballet/ed25519/avx512/test_r43x6.c b/src/ballet/ed25519/avx512/test_r43x6.c index d0c881bcac..8bffaedcb4 100644 --- a/src/ballet/ed25519/avx512/test_r43x6.c +++ b/src/ballet/ed25519/avx512/test_r43x6.c @@ -290,10 +290,13 @@ fd_r43x6_add_fast_ref( fd_r43x6_t x, FD_FN_CONST static fd_r43x6_t fd_r43x6_sub_fast_ref( fd_r43x6_t x, fd_r43x6_t y ) { - union { __m512i v; long lane[8]; } xx, yy, zz; + union { __m512i v; long lane[8]; } xx, yy, zz, pp; xx.v = x; /* Arb */ yy.v = y; /* Arb */ - for( ulong i=0UL; i<8UL; i++ ) zz.lane[i] = xx.lane[i] - yy.lane[i]; + pp.v = fd_r43x6_p(); + for( ulong i=0UL; i<8UL; i++ ) { + zz.lane[i] = xx.lane[i] + ( pp.lane[i] - yy.lane[i] ); + } return zz.v; /* Arb */ } diff --git a/src/ballet/ed25519/fd_curve25519.c b/src/ballet/ed25519/fd_curve25519.c new file mode 100644 index 0000000000..c28daecdad --- /dev/null +++ b/src/ballet/ed25519/fd_curve25519.c @@ -0,0 +1,270 @@ +#include "fd_curve25519.h" +#include "../hex/fd_hex.h" + +/* + * Secure implementations (const time + clean temp vars) + */ +#include "fd_curve25519_secure.c" + +#if FD_HAS_AVX512 +#include "avx512/fd_curve25519.c" +#else +#include "ref/fd_curve25519.c" +#endif + +#define WNAF_BIT_SZ 4 +#define WNAF_TBL_SZ (2*WNAF_BIT_SZ) + +/* Max batch size for MSM. */ +#define MSM_MAX_BATCH 32 + +/* + * Ser/de + */ + +fd_ed25519_point_t * +fd_ed25519_point_frombytes( fd_ed25519_point_t * r, + uchar const buf[ 32 ] ) { + fd_f25519_t x[1], y[1], t[1]; + fd_f25519_frombytes( y, buf ); + uchar expected_x_sign = buf[31] >> 7; + + fd_f25519_t u[1]; + fd_f25519_t v[1]; + fd_f25519_sqr( u, y ); + fd_f25519_mul( v, u, fd_f25519_d ); + fd_f25519_sub( u, u, fd_f25519_one ); /* u = y^2-1 */ + fd_f25519_add( v, v, fd_f25519_one ); /* v = dy^2+1 */ + + fd_f25519_sqrt_ratio( x, u, v ); + + fd_f25519_t vxx [1]; + fd_f25519_t check[1]; + fd_f25519_sqr( vxx, x ); + fd_f25519_mul( vxx, vxx, v ); + fd_f25519_sub( check, vxx, u ); /* vx^2-u */ + if( fd_f25519_is_nonzero( check ) ) { /* unclear prob */ + fd_f25519_add( check, vxx, u ); /* vx^2+u */ + if( FD_UNLIKELY( fd_f25519_is_nonzero( check ) ) ) { + return NULL; + } + fd_f25519_mul( x, x, fd_f25519_sqrtm1 ); + } + + if( fd_f25519_sgn(x)!=expected_x_sign ) { /* 50% prob */ + fd_f25519_neg( x, x ); + } + + fd_f25519_mul( t, x, y ); + fd_ed25519_point_from( r, x, y, fd_f25519_one, t ); + + return r; +} + +uchar * +fd_ed25519_point_tobytes( uchar out[ 32 ], + fd_ed25519_point_t const * a ) { + fd_f25519_t x[1], y[1], z[1], t[1]; + fd_ed25519_point_to( x, y, z, t, a ); + fd_f25519_inv( t, z ); + fd_f25519_mul2( x, x, t, + y, y, t ); + fd_f25519_tobytes( out, y ); + out[31] ^= (uchar)(fd_f25519_sgn( x ) << 7); + return out; +} + +/* + * Scalar multiplication + */ + +fd_ed25519_point_t * +fd_ed25519_scalar_mul( fd_ed25519_point_t * r, + uchar const n[ 32 ], + fd_ed25519_point_t const * a ) { + short nslide[256]; + fd_curve25519_scalar_wnaf( nslide, n, WNAF_BIT_SZ ); + + fd_ed25519_point_t ai[WNAF_TBL_SZ]; /* A,3A,5A,7A,9A,11A,13A,15A */ + fd_ed25519_point_t a2[1]; /* 2A (temp) */ + fd_ed25519_point_t t[1]; + + /* pre-computed table */ + fd_ed25519_point_set( &ai[0], a ); + fd_ed25519_point_dbln( a2, a, 1 ); // note: a is affine, we could save 1mul + fd_curve25519_into_precomputed( &ai[0] ); + for( int i=1; i=0; i-- ) { if( nslide[i] ) break; } + for( ; i>=0; i-- ) { + fd_ed25519_partial_dbl( t, r ); + if( nslide[i] > 0 ) { fd_ed25519_point_add_final_mul( r, t ); fd_ed25519_point_add_with_opts( t, r, &ai[ nslide[i] / 2], nslide[i]==1, 1, 1 ); } + else if( nslide[i] < 0 ) { fd_ed25519_point_add_final_mul( r, t ); fd_ed25519_point_sub_with_opts( t, r, &ai[(-nslide[i]) / 2], nslide[i]==-1, 1, 1 ); } + + /* ignore r->T because dbl doesn't need it, except in the last cycle */ + if (i == 0) { + fd_ed25519_point_add_final_mul( r, t ); // compute r->T + } else { + fd_ed25519_point_add_final_mul_projective( r, t ); // ignore r->T + } + } + return r; +} + +fd_ed25519_point_t * +fd_ed25519_double_scalar_mul_base( fd_ed25519_point_t * r, + uchar const n1[ 32 ], + fd_ed25519_point_t const * a, + uchar const n2[ 32 ] ) { + + short n1slide[256]; fd_curve25519_scalar_wnaf( n1slide, n1, WNAF_BIT_SZ ); + short n2slide[256]; fd_curve25519_scalar_wnaf( n2slide, n2, 8 ); + + fd_ed25519_point_t ai[WNAF_TBL_SZ]; /* A,3A,5A,7A,9A,11A,13A,15A */ + fd_ed25519_point_t a2[1]; /* 2A (temp) */ + fd_ed25519_point_t t[1]; + + /* pre-computed table */ + fd_ed25519_point_set( &ai[0], a ); + fd_ed25519_point_dbln( a2, a, 1 ); // note: a is affine, we could save 1mul + fd_curve25519_into_precomputed( &ai[0] ); + for( int i=1; i=0; i-- ) { if( n1slide[i] || n2slide[i] ) break; } + for( ; i>=0; i-- ) { + fd_ed25519_partial_dbl( t, r ); + if( n1slide[i] > 0 ) { fd_ed25519_point_add_final_mul( r, t ); fd_ed25519_point_add_with_opts( t, r, &ai[ n1slide[i] / 2], n1slide[i]==1, 1, 1 ); } + else if( n1slide[i] < 0 ) { fd_ed25519_point_add_final_mul( r, t ); fd_ed25519_point_sub_with_opts( t, r, &ai[(-n1slide[i]) / 2], n1slide[i]==-1, 1, 1 ); } + if( n2slide[i] > 0 ) { fd_ed25519_point_add_final_mul( r, t ); fd_ed25519_point_add_with_opts( t, r, &fd_ed25519_base_point_wnaf_table[ n2slide[i] / 2], 1, 1, 1 ); } + else if( n2slide[i] < 0 ) { fd_ed25519_point_add_final_mul( r, t ); fd_ed25519_point_sub_with_opts( t, r, &fd_ed25519_base_point_wnaf_table[(-n2slide[i]) / 2], 1, 1, 1 ); } + + /* ignore r->T because dbl doesn't need it, except in the last cycle */ + if (i == 0) { + fd_ed25519_point_add_final_mul( r, t ); // compute r->T + } else { + fd_ed25519_point_add_final_mul_projective( r, t ); // ignore r->T + } + } + return r; +} + + +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_multi_scalar_mul_with_opts( fd_ed25519_point_t * r, + uchar const n[], /* sz * 32 */ + fd_ed25519_point_t const a[], /* sz */ + ulong const sz, + ulong const base_sz ) { + short nslide[MSM_MAX_BATCH][256]; + fd_ed25519_point_t ai[MSM_MAX_BATCH][WNAF_TBL_SZ]; /* A,3A,5A,7A,9A,11A,13A,15A */ + fd_ed25519_point_t a2[1]; /* 2A (temp) */ + fd_ed25519_point_t t[1]; /* temp */ + + if( base_sz ) { + fd_curve25519_scalar_wnaf( nslide[0], &n[32*0], 8 ); + } + for( ulong j=base_sz; j=0; i-- ) { + fd_ed25519_partial_dbl( t, r ); + if( base_sz ) { + if( nslide[0][i] > 0 ) { fd_ed25519_point_add_final_mul( r, t ); fd_ed25519_point_add_with_opts( t, r, &fd_ed25519_base_point_wnaf_table[ nslide[0][i] / 2], 1, 1, 1 ); } + else if( nslide[0][i] < 0 ) { fd_ed25519_point_add_final_mul( r, t ); fd_ed25519_point_sub_with_opts( t, r, &fd_ed25519_base_point_wnaf_table[(-nslide[0][i]) / 2], 1, 1, 1 ); } + } + for( ulong j=base_sz; j 0 ) { fd_ed25519_point_add_final_mul( r, t ); fd_ed25519_point_add_with_opts( t, r, &ai[j][ n / 2], (n==1), 1, 1 ); } + else if( n < 0 ) { fd_ed25519_point_add_final_mul( r, t ); fd_ed25519_point_sub_with_opts( t, r, &ai[j][(-n) / 2], (n==-1), 1, 1 ); } + } + + /* ignore r->T because dbl doesn't need it, except in the last cycle */ + if (i == 0) { + fd_ed25519_point_add_final_mul( r, t ); // compute r->T + } else { + fd_ed25519_point_add_final_mul_projective( r, t ); // ignore r->T + } + } + return r; +} + +fd_ed25519_point_t * +fd_ed25519_multi_scalar_mul( fd_ed25519_point_t * r, + uchar const n[], /* sz * 32 */ + fd_ed25519_point_t const a[], /* sz */ + ulong const sz ) { + + fd_ed25519_point_t h[1]; + fd_ed25519_point_set_zero( r ); + + for( ulong i=0; i MSM_MAX_BATCH) { + return NULL; + } + return fd_ed25519_multi_scalar_mul_with_opts( r, n, a, sz, 1 ); +} + +/* + * Init + */ + +fd_ed25519_point_t * +fd_curve25519_affine_add( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ) { + fd_ed25519_point_add_with_opts( r, a, b, 1, 0, 0 ); + return fd_curve25519_into_affine( r ); +} + +fd_ed25519_point_t * +fd_curve25519_affine_dbln( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + int const n ) { + fd_ed25519_point_dbln( r, a, n ); + return fd_curve25519_into_affine( r ); +} diff --git a/src/ballet/ed25519/fd_curve25519.h b/src/ballet/ed25519/fd_curve25519.h new file mode 100644 index 0000000000..32622dbbed --- /dev/null +++ b/src/ballet/ed25519/fd_curve25519.h @@ -0,0 +1,253 @@ +#ifndef HEADER_fd_src_ballet_ed25519_fd_curve25519_h +#define HEADER_fd_src_ballet_ed25519_fd_curve25519_h + +/* fd_curve25519.h provides the public Curve25519 API. + + Most operations in this API should be assumed to take a variable + amount of time depending on inputs. (And thus should not be exposed + to secret data). + + Const time operations are made explicit, see fd_curve25519_secure.c */ + +#if FD_HAS_AVX512 +#include "avx512/fd_curve25519.h" +#else +#include "ref/fd_curve25519.h" +#endif + +/* curve constants. these are imported from table/fd_curve25519_table_{arch}.c. + they are (re)defined here to avoid breaking compilation when the table needs + to be rebuilt. */ +static const fd_ed25519_point_t fd_ed25519_base_point[1]; +static const fd_ed25519_point_t fd_ed25519_base_point_wnaf_table[128]; +static const fd_ed25519_point_t fd_ed25519_base_point_const_time_table[32][8]; + +FD_PROTOTYPES_BEGIN + +/* fd_ed25519_point_add computes r = a + b, and returns r. + formulas are complete, i.e. it can be a == b. + Cost: 9mul */ +fd_ed25519_point_t * +fd_ed25519_point_add( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ); + +/* fd_ed25519_point_dbln computes r = 2^n a, and returns r. + More efficient than n fd_ed25519_point_add. */ +fd_ed25519_point_t * +fd_ed25519_point_dbln( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + int const n ); + +/* fd_ed25519_point_sub computes r = a - b, and returns r. + formulas are complete, i.e. it can be a == b. + Cost: 9mul */ +fd_ed25519_point_t * +fd_ed25519_point_sub( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ); + +/* fd_ed25519_point_set sets r = 0 (point at infinity). */ +fd_ed25519_point_t * +fd_ed25519_point_set_zero( fd_ed25519_point_t * r ); + +/* fd_ed25519_point_set_zero_precomputed sets r = 0 (point at infinity). */ +fd_ed25519_point_t * +fd_ed25519_point_set_zero_precomputed( fd_ed25519_point_t * r ); + +/* fd_ed25519_point_set sets r = a. */ +fd_ed25519_point_t * +fd_ed25519_point_set( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a ); + +/* fd_ed25519_point_from sets r = (x : y : z : t). */ +fd_ed25519_point_t * +fd_ed25519_point_from( fd_ed25519_point_t * r, + fd_f25519_t const * x, + fd_f25519_t const * y, + fd_f25519_t const * z, + fd_f25519_t const * t ); + +/* fd_ed25519_point_sub sets r = -a. */ +fd_ed25519_point_t * +fd_ed25519_point_neg( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a ); + +/* fd_ed25519_point_is_zero returns 1 if a == 0 (point at infinity), 0 otherwise. */ +int +fd_ed25519_point_is_zero( fd_ed25519_point_t const * a ); + +/* fd_ed25519_affine_is_small_order returns 1 if a has small order (order <= 8), 0 otherwise. */ +FD_25519_INLINE int +fd_ed25519_affine_is_small_order( fd_ed25519_point_t const * a ) { + /* There are 8 points with order <= 8, aka low order: + 0100000000000000000000000000000000000000000000000000000000000000 ( 0 : 1 ) P0: order 1 + ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f ( 0 : -1 ) P1: order 2 + 0000000000000000000000000000000000000000000000000000000000000000 ( b0.. : 0 ) P2: order 4 + 0000000000000000000000000000000000000000000000000000000000000080 ( 3d.. : 0 ) -P2: order 4 + 26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05 ( 4a.. : 26.. ) P3: order 8 + 26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85 ( a3.. : 26.. ) -P3: order 8 + c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a ( 4a.. : c7.. ) P4: order 8 + c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa ( a3.. : c7.. ) -P4: order 8 + + We could test: + fd_ed25519_point_t r[1]; + fd_ed25519_point_dbln( r, a, 3 ); + return fd_ed25519_point_is_zero( r ); + + When the point is affine (Z==1), we can simply check: + - X==0 + - or, Y==0 + - or, Y==2a..., or Y==c7... + + And if the point is not affine, we could do 1 single dbl and check for X==0 or Y==0 + (currently not implemented as not needed). + */ + fd_f25519_t x[1], y[1], z[1], t[1]; + fd_ed25519_point_to( x, y, z, t, a ); + return fd_f25519_is_zero( x ) | fd_f25519_is_zero( y ) + | fd_f25519_eq( y, fd_ed25519_order8_point_y0 ) + | fd_f25519_eq( y, fd_ed25519_order8_point_y1 ); +} + +/* fd_ed25519_point_eq returns 1 if a == b, 0 otherwise. */ +int +fd_ed25519_point_eq( fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ); + +/* fd_ed25519_point_eq returns 1 if a == b, 0 otherwise. + b is a point with Z==1, e.g. a decompressed point. */ +int +fd_ed25519_point_eq_z1( fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ); /* b.Z == 1, e.g. a decompressed point */ + +/* fd_ed25519_scalar_validate is an alias of fd_curve25519_scalar_validate + It checks whether the given Ed25519 scalar n matches the canonical byte + representation. Not constant time and thus should not be exposed to secrets. + Returns s if canonical, NULL otherwise. */ + +FD_25519_INLINE uchar const * +fd_ed25519_scalar_validate( uchar const n[ 32 ] ) { + return fd_curve25519_scalar_validate( n ); +} + +/* fd_ed25519_scalar_mul computes r = n * a, and returns r. + n is a scalar. */ +fd_ed25519_point_t * +fd_ed25519_scalar_mul( fd_ed25519_point_t * r, + uchar const n[ 32 ], + fd_ed25519_point_t const * a ); + +/* fd_ed25519_scalar_mul_base_const_time computes r = n * P, and returns r. + n is a scalar. P is the base point. + Note: const time implementation, safe to use with n secret. */ +fd_ed25519_point_t * +fd_ed25519_scalar_mul_base_const_time( fd_ed25519_point_t * r, + uchar const n[ 32 ] ); /* can be a secret */ + +/* fd_ed25519_scalar_mul computes r = n1 * a + n2 * P, and returns r. + n1, n2 are scalars. P is the base point. */ +fd_ed25519_point_t * +fd_ed25519_double_scalar_mul_base( fd_ed25519_point_t * r, + uchar const n1[ 32 ], + fd_ed25519_point_t const * a, + uchar const n2[ 32 ] ); + +/* fd_ed25519_multi_scalar_mul computes r = n0 * a0 + n1 * a1 + ..., and returns r. + n is a vector of sz scalars. a is a vector of sz points. */ +fd_ed25519_point_t * +fd_ed25519_multi_scalar_mul( fd_ed25519_point_t * r, + uchar const n[], /* sz * 32 */ + fd_ed25519_point_t const a[], /* sz */ + ulong const sz ); + +/* fd_ed25519_multi_scalar_mul computes r = n0 * B + n1 * a1 + ..., and returns r. + n is a vector of sz scalars. a is a vector of sz points. + the first point is ignored, and the base point is used instead. */ +fd_ed25519_point_t * +fd_ed25519_multi_scalar_mul_base( fd_ed25519_point_t * r, + uchar const n[], /* sz * 32 */ + fd_ed25519_point_t const a[], /* sz */ + ulong const sz ); + +/* fd_ed25519_point_frombytes deserializes a 32-byte buffer buf into a + point r, and returns r (on success, NULL on error). + buf is in little endian form, according to RFC 8032. + Cost: 1sqrt ~= 1inv ~= 250mul */ +fd_ed25519_point_t * +fd_ed25519_point_frombytes( fd_ed25519_point_t * r, + uchar const buf[ 32 ] ); + +/* fd_ed25519_point_frombytes_2x deserializes 2x 32-byte buffers buf1, buf2 + resp. into points r1, r2, and returns r. + buf1, buf2 are in little endian form, according to RFC 8032. + It returns 0 on success, 1 or 2 on failure. + Cost: 2sqrt (executed concurrently if possible) */ +int +fd_ed25519_point_frombytes_2x( fd_ed25519_point_t * r1, + uchar const buf1[ 32 ], + fd_ed25519_point_t * r2, + uchar const buf2[ 32 ] ); + +/* fd_ed25519_point_validate checks if buf represents a valid compressed point, + by attempting to decompress it. + Use fd_ed25519_point_frombytes if the decompressed point is needed. + It returns 1 if buf represents a valid point, 0 if not. */ +FD_25519_INLINE int +fd_ed25519_point_validate(uchar const buf[ 32 ] ) { + fd_ed25519_point_t t[1]; + return !!fd_ed25519_point_frombytes( t, buf ); +} + +/* fd_ed25519_point_tobytes serializes a point a into + a 32-byte buffer out, and returns out. + out is in little endian form, according to RFC 8032. */ +uchar * +fd_ed25519_point_tobytes( uchar out[ 32 ], + fd_ed25519_point_t const * a ); + +/* fd_ed25519_affine_tobytes serializes a point a into + a 32-byte buffer out, and returns out. + out is in little endian form, according to RFC 8032. + a is an affine point, i.e. a->Z == 1; compared to + fd_ed25519_point_tobytes, this function doesn't require inv. */ +FD_25519_INLINE uchar * +fd_ed25519_affine_tobytes( uchar out[ 32 ], + fd_ed25519_point_t const * a ) { + fd_f25519_t x[1], y[1], z[1], t[1]; + fd_ed25519_point_to( x, y, z, t, a ); + fd_f25519_tobytes( out, y ); + out[31] ^= (uchar)(fd_f25519_sgn( x ) << 7); + return out; +} + +/* fd_curve25519_into_precomputed transforms a point into + precomputed table format, e.g. replaces T -> kT to save + 1mul in the dbl-and-add loop. */ +void +fd_curve25519_into_precomputed( fd_ed25519_point_t * r ); + +/* + Affine (only for offline building precomputation tables, can be slow) +*/ +fd_ed25519_point_t * +fd_curve25519_affine_frombytes( fd_ed25519_point_t * r, + uchar const x[ 32 ], + uchar const y[ 32 ] ); + +fd_ed25519_point_t * +fd_curve25519_into_affine( fd_ed25519_point_t * r ); + +fd_ed25519_point_t * +fd_curve25519_affine_add( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ); + +fd_ed25519_point_t * +fd_curve25519_affine_dbln( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + int const n ); + +FD_PROTOTYPES_END + +#endif /* HEADER_fd_src_ballet_ed25519_fd_curve25519_h */ diff --git a/src/ballet/ed25519/fd_curve25519_scalar.c b/src/ballet/ed25519/fd_curve25519_scalar.c new file mode 100644 index 0000000000..d5c5e8630e --- /dev/null +++ b/src/ballet/ed25519/fd_curve25519_scalar.c @@ -0,0 +1,360 @@ +#include "fd_curve25519_scalar.h" + +uchar * +fd_curve25519_scalar_reduce( uchar out[ 32 ], + uchar const in [ 64 ] ) { + + /* Load the 512 bits to reduce */ + + ulong in0 = fd_ulong_load_8_fast( in ); + ulong in1 = fd_ulong_load_8_fast( in + 8 ); + ulong in2 = fd_ulong_load_8_fast( in + 16 ); + ulong in3 = fd_ulong_load_8_fast( in + 24 ); + ulong in4 = fd_ulong_load_8_fast( in + 32 ); + ulong in5 = fd_ulong_load_8_fast( in + 40 ); + ulong in6 = fd_ulong_load_8_fast( in + 48 ); + ulong in7 = fd_ulong_load_8_fast( in + 56 ); + + /* Unpack into 23 21-bit integers and a 29-bit straggler */ + + ulong mask = FD_ULONG_MASK_LSB( 21 ); + + long s0 = (long)( in0 & mask); long s1 = (long)((in0>>21) & mask); long s2 = (long)((in0>>42) & mask); + long s3 = (long)(((in0>>63) | (in1<<1)) & mask); long s4 = (long)((in1>>20) & mask); long s5 = (long)((in1>>41) & mask); + long s6 = (long)(((in1>>62) | (in2<<2)) & mask); long s7 = (long)((in2>>19) & mask); long s8 = (long)((in2>>40) & mask); + long s9 = (long)(((in2>>61) | (in3<<3)) & mask); long s10 = (long)((in3>>18) & mask); long s11 = (long)((in3>>39) & mask); + long s12 = (long)(((in3>>60) | (in4<<4)) & mask); long s13 = (long)((in4>>17) & mask); long s14 = (long)((in4>>38) & mask); + long s15 = (long)(((in4>>59) | (in5<<5)) & mask); long s16 = (long)((in5>>16) & mask); long s17 = (long)((in5>>37) & mask); + long s18 = (long)(((in5>>58) | (in6<<6)) & mask); long s19 = (long)((in6>>15) & mask); long s20 = (long)((in6>>36) & mask); + long s21 = (long)(((in6>>57) | (in7<<7)) & mask); long s22 = (long)((in7>>14) & mask); long s23 = (long)( in7>>35 ); + + /* Do the reduction */ + + s11 += s23*666643L; s12 += s23*470296L; s13 += s23*654183L; s14 -= s23*997805L; s15 += s23*136657L; s16 -= s23*683901L; s23 = 0L; + s10 += s22*666643L; s11 += s22*470296L; s12 += s22*654183L; s13 -= s22*997805L; s14 += s22*136657L; s15 -= s22*683901L; s22 = 0L; + s9 += s21*666643L; s10 += s21*470296L; s11 += s21*654183L; s12 -= s21*997805L; s13 += s21*136657L; s14 -= s21*683901L; s21 = 0L; + s8 += s20*666643L; s9 += s20*470296L; s10 += s20*654183L; s11 -= s20*997805L; s12 += s20*136657L; s13 -= s20*683901L; s20 = 0L; + s7 += s19*666643L; s8 += s19*470296L; s9 += s19*654183L; s10 -= s19*997805L; s11 += s19*136657L; s12 -= s19*683901L; s19 = 0L; + s6 += s18*666643L; s7 += s18*470296L; s8 += s18*654183L; s9 -= s18*997805L; s10 += s18*136657L; s11 -= s18*683901L; s18 = 0L; + + long carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); + long carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); + long carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); + long carry12 = (s12 + (1L << 20)) >> 21; s13 += carry12; s12 -= (long)((ulong)carry12 << 21); + long carry14 = (s14 + (1L << 20)) >> 21; s15 += carry14; s14 -= (long)((ulong)carry14 << 21); + long carry16 = (s16 + (1L << 20)) >> 21; s17 += carry16; s16 -= (long)((ulong)carry16 << 21); + + long carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); + long carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); + long carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); + long carry13 = (s13 + (1L << 20)) >> 21; s14 += carry13; s13 -= (long)((ulong)carry13 << 21); + long carry15 = (s15 + (1L << 20)) >> 21; s16 += carry15; s15 -= (long)((ulong)carry15 << 21); + + s5 += s17*666643L; s6 += s17*470296L; s7 += s17*654183L; s8 -= s17*997805L; s9 += s17*136657L; s10 -= s17*683901L; s17 = 0L; + s4 += s16*666643L; s5 += s16*470296L; s6 += s16*654183L; s7 -= s16*997805L; s8 += s16*136657L; s9 -= s16*683901L; s16 = 0L; + s3 += s15*666643L; s4 += s15*470296L; s5 += s15*654183L; s6 -= s15*997805L; s7 += s15*136657L; s8 -= s15*683901L; s15 = 0L; + s2 += s14*666643L; s3 += s14*470296L; s4 += s14*654183L; s5 -= s14*997805L; s6 += s14*136657L; s7 -= s14*683901L; s14 = 0L; + s1 += s13*666643L; s2 += s13*470296L; s3 += s13*654183L; s4 -= s13*997805L; s5 += s13*136657L; s6 -= s13*683901L; s13 = 0L; + s0 += s12*666643L; s1 += s12*470296L; s2 += s12*654183L; s3 -= s12*997805L; s4 += s12*136657L; s5 -= s12*683901L; s12 = 0L; + + long carry0 = (s0 + (1L << 20)) >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); + long carry2 = (s2 + (1L << 20)) >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); + long carry4 = (s4 + (1L << 20)) >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); + /**/ carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); + /**/ carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); + /**/ carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); + + long carry1 = (s1 + (1L << 20)) >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); + long carry3 = (s3 + (1L << 20)) >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); + long carry5 = (s5 + (1L << 20)) >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); + /**/ carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); + /**/ carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); + /**/ carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); + + s0 += s12*666643L; s1 += s12*470296L; s2 += s12*654183L; s3 -= s12*997805L; s4 += s12*136657L; s5 -= s12*683901L; s12 = 0L; + + carry0 = s0 >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); + carry1 = s1 >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); + carry2 = s2 >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); + carry3 = s3 >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); + carry4 = s4 >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); + carry5 = s5 >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); + carry6 = s6 >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); + carry7 = s7 >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); + carry8 = s8 >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); + carry9 = s9 >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); + carry10 = s10 >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); + carry11 = s11 >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); + + s0 += s12*666643L; s1 += s12*470296L; s2 += s12*654183L; s3 -= s12*997805L; s4 += s12*136657L; s5 -= s12*683901L; s12 = 0L; + + carry0 = s0 >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); + carry1 = s1 >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); + carry2 = s2 >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); + carry3 = s3 >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); + carry4 = s4 >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); + carry5 = s5 >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); + carry6 = s6 >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); + carry7 = s7 >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); + carry8 = s8 >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); + carry9 = s9 >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); + carry10 = s10 >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); + + /* Pack the results into out */ + + *(ulong *) out = (((ulong)s0 ) ) | (((ulong)s1 )<<21) | (((ulong)s2 )<<42) | (((ulong)s3 )<<63); + *(ulong *)(out+ 8) = (((ulong)s3 )>>1) | (((ulong)s4 )<<20) | (((ulong)s5 )<<41) | (((ulong)s6 )<<62); + *(ulong *)(out+16) = (((ulong)s6 )>>2) | (((ulong)s7 )<<19) | (((ulong)s8 )<<40) | (((ulong)s9 )<<61); + *(ulong *)(out+24) = (((ulong)s9 )>>3) | (((ulong)s10)<<18) | (((ulong)s11)<<39); + return out; +} + +uchar * +fd_curve25519_scalar_muladd( uchar s[ 32 ], + uchar const * a, + uchar const b[ 32 ], + uchar const c[ 32 ] ) { + + /* Load a, b and c */ + + ulong ia0 = fd_ulong_load_8( a ); ulong ib0 = fd_ulong_load_8( b ); ulong ic0 = fd_ulong_load_8( c ); + ulong ia1 = fd_ulong_load_8( a + 8 ); ulong ib1 = fd_ulong_load_8( b + 8 ); ulong ic1 = fd_ulong_load_8( c + 8 ); + ulong ia2 = fd_ulong_load_8( a + 16 ); ulong ib2 = fd_ulong_load_8( b + 16 ); ulong ic2 = fd_ulong_load_8( c + 16 ); + ulong ia3 = fd_ulong_load_8( a + 24 ); ulong ib3 = fd_ulong_load_8( b + 24 ); ulong ic3 = fd_ulong_load_8( c + 24 ); + + /* Unpack each into 11 21-bit integers and a 25-bit straggler */ + + ulong mask = FD_ULONG_MASK_LSB( 21 ); + + long a0 = (long)( ia0 & mask); long a1 = (long)((ia0>>21) & mask); long a2 = (long)((ia0>>42) & mask); + long a3 = (long)(((ia0>>63) | (ia1<<1)) & mask); long a4 = (long)((ia1>>20) & mask); long a5 = (long)((ia1>>41) & mask); + long a6 = (long)(((ia1>>62) | (ia2<<2)) & mask); long a7 = (long)((ia2>>19) & mask); long a8 = (long)((ia2>>40) & mask); + long a9 = (long)(((ia2>>61) | (ia3<<3)) & mask); long a10 = (long)((ia3>>18) & mask); long a11 = (long)( ia3>>39 ); + + long b0 = (long)( ib0 & mask); long b1 = (long)((ib0>>21) & mask); long b2 = (long)((ib0>>42) & mask); + long b3 = (long)(((ib0>>63) | (ib1<<1)) & mask); long b4 = (long)((ib1>>20) & mask); long b5 = (long)((ib1>>41) & mask); + long b6 = (long)(((ib1>>62) | (ib2<<2)) & mask); long b7 = (long)((ib2>>19) & mask); long b8 = (long)((ib2>>40) & mask); + long b9 = (long)(((ib2>>61) | (ib3<<3)) & mask); long b10 = (long)((ib3>>18) & mask); long b11 = (long)( ib3>>39 ); + + long c0 = (long)( ic0 & mask); long c1 = (long)((ic0>>21) & mask); long c2 = (long)((ic0>>42) & mask); + long c3 = (long)(((ic0>>63) | (ic1<<1)) & mask); long c4 = (long)((ic1>>20) & mask); long c5 = (long)((ic1>>41) & mask); + long c6 = (long)(((ic1>>62) | (ic2<<2)) & mask); long c7 = (long)((ic2>>19) & mask); long c8 = (long)((ic2>>40) & mask); + long c9 = (long)(((ic2>>61) | (ic3<<3)) & mask); long c10 = (long)((ic3>>18) & mask); long c11 = (long)( ic3>>39 ); + + /* Do the muladd */ + + long s0 = c0 + a0*b0; + long s1 = c1 + a0*b1 + a1*b0; + long s2 = c2 + a0*b2 + a1*b1 + a2*b0; + long s3 = c3 + a0*b3 + a1*b2 + a2*b1 + a3*b0; + long s4 = c4 + a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0; + long s5 = c5 + a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0; + long s6 = c6 + a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0; + long s7 = c7 + a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0; + long s8 = c8 + a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0; + long s9 = c9 + a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0; + long s10 = c10 + a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0; + long s11 = c11 + a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0; + long s12 = a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1; + long s13 = a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2; + long s14 = a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3; + long s15 = a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4; + long s16 = a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5; + long s17 = a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6; + long s18 = a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7; + long s19 = a8*b11 + a9*b10 + a10*b9 + a11*b8; + long s20 = a9*b11 + a10*b10 + a11*b9; + long s21 = a10*b11 + a11*b10; + long s22 = a11*b11; + long s23 = 0L; + + /* Reduce the result */ + + long carry0 = (s0 + (1L << 20)) >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); + long carry2 = (s2 + (1L << 20)) >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); + long carry4 = (s4 + (1L << 20)) >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); + long carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); + long carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); + long carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); + long carry12 = (s12 + (1L << 20)) >> 21; s13 += carry12; s12 -= (long)((ulong)carry12 << 21); + long carry14 = (s14 + (1L << 20)) >> 21; s15 += carry14; s14 -= (long)((ulong)carry14 << 21); + long carry16 = (s16 + (1L << 20)) >> 21; s17 += carry16; s16 -= (long)((ulong)carry16 << 21); + long carry18 = (s18 + (1L << 20)) >> 21; s19 += carry18; s18 -= (long)((ulong)carry18 << 21); + long carry20 = (s20 + (1L << 20)) >> 21; s21 += carry20; s20 -= (long)((ulong)carry20 << 21); + long carry22 = (s22 + (1L << 20)) >> 21; s23 += carry22; s22 -= (long)((ulong)carry22 << 21); + + long carry1 = (s1 + (1L << 20)) >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); + long carry3 = (s3 + (1L << 20)) >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); + long carry5 = (s5 + (1L << 20)) >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); + long carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); + long carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); + long carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); + long carry13 = (s13 + (1L << 20)) >> 21; s14 += carry13; s13 -= (long)((ulong)carry13 << 21); + long carry15 = (s15 + (1L << 20)) >> 21; s16 += carry15; s15 -= (long)((ulong)carry15 << 21); + long carry17 = (s17 + (1L << 20)) >> 21; s18 += carry17; s17 -= (long)((ulong)carry17 << 21); + long carry19 = (s19 + (1L << 20)) >> 21; s20 += carry19; s19 -= (long)((ulong)carry19 << 21); + long carry21 = (s21 + (1L << 20)) >> 21; s22 += carry21; s21 -= (long)((ulong)carry21 << 21); + + s11 += s23*666643L; s12 += s23*470296L; s13 += s23*654183L; s14 -= s23*997805L; s15 += s23*136657L; s16 -= s23*683901L; s23 = 0L; + s10 += s22*666643L; s11 += s22*470296L; s12 += s22*654183L; s13 -= s22*997805L; s14 += s22*136657L; s15 -= s22*683901L; s22 = 0L; + s9 += s21*666643L; s10 += s21*470296L; s11 += s21*654183L; s12 -= s21*997805L; s13 += s21*136657L; s14 -= s21*683901L; s21 = 0L; + s8 += s20*666643L; s9 += s20*470296L; s10 += s20*654183L; s11 -= s20*997805L; s12 += s20*136657L; s13 -= s20*683901L; s20 = 0L; + s7 += s19*666643L; s8 += s19*470296L; s9 += s19*654183L; s10 -= s19*997805L; s11 += s19*136657L; s12 -= s19*683901L; s19 = 0L; + s6 += s18*666643L; s7 += s18*470296L; s8 += s18*654183L; s9 -= s18*997805L; s10 += s18*136657L; s11 -= s18*683901L; s18 = 0L; + + carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); + carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); + carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); + carry12 = (s12 + (1L << 20)) >> 21; s13 += carry12; s12 -= (long)((ulong)carry12 << 21); + carry14 = (s14 + (1L << 20)) >> 21; s15 += carry14; s14 -= (long)((ulong)carry14 << 21); + carry16 = (s16 + (1L << 20)) >> 21; s17 += carry16; s16 -= (long)((ulong)carry16 << 21); + + carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); + carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); + carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); + carry13 = (s13 + (1L << 20)) >> 21; s14 += carry13; s13 -= (long)((ulong)carry13 << 21); + carry15 = (s15 + (1L << 20)) >> 21; s16 += carry15; s15 -= (long)((ulong)carry15 << 21); + + s5 += s17*666643L; s6 += s17*470296L; s7 += s17*654183L; s8 -= s17*997805L; s9 += s17*136657L; s10 -= s17*683901L; s17 = 0L; + s4 += s16*666643L; s5 += s16*470296L; s6 += s16*654183L; s7 -= s16*997805L; s8 += s16*136657L; s9 -= s16*683901L; s16 = 0L; + s3 += s15*666643L; s4 += s15*470296L; s5 += s15*654183L; s6 -= s15*997805L; s7 += s15*136657L; s8 -= s15*683901L; s15 = 0L; + s2 += s14*666643L; s3 += s14*470296L; s4 += s14*654183L; s5 -= s14*997805L; s6 += s14*136657L; s7 -= s14*683901L; s14 = 0L; + s1 += s13*666643L; s2 += s13*470296L; s3 += s13*654183L; s4 -= s13*997805L; s5 += s13*136657L; s6 -= s13*683901L; s13 = 0L; + s0 += s12*666643L; s1 += s12*470296L; s2 += s12*654183L; s3 -= s12*997805L; s4 += s12*136657L; s5 -= s12*683901L; s12 = 0L; + + carry0 = (s0 + (1L << 20)) >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); + carry2 = (s2 + (1L << 20)) >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); + carry4 = (s4 + (1L << 20)) >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); + carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); + carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); + carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); + + carry1 = (s1 + (1L << 20)) >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); + carry3 = (s3 + (1L << 20)) >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); + carry5 = (s5 + (1L << 20)) >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); + carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); + carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); + carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); + + s0 += s12*666643L; s1 += s12*470296L; s2 += s12*654183L; s3 -= s12*997805L; s4 += s12*136657L; s5 -= s12*683901L; s12 = 0L; + + carry0 = s0 >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); + carry1 = s1 >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); + carry2 = s2 >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); + carry3 = s3 >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); + carry4 = s4 >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); + carry5 = s5 >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); + carry6 = s6 >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); + carry7 = s7 >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); + carry8 = s8 >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); + carry9 = s9 >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); + carry10 = s10 >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); + carry11 = s11 >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); + + s0 += s12*666643L; s1 += s12*470296L; s2 += s12*654183L; s3 -= s12*997805L; s4 += s12*136657L; s5 -= s12*683901L; s12 = 0L; + + carry0 = s0 >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); + carry1 = s1 >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); + carry2 = s2 >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); + carry3 = s3 >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); + carry4 = s4 >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); + carry5 = s5 >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); + carry6 = s6 >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); + carry7 = s7 >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); + carry8 = s8 >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); + carry9 = s9 >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); + carry10 = s10 >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); + + /* Pack the results into s */ + + *(ulong *) s = (((ulong)s0 ) ) | (((ulong)s1 )<<21) | (((ulong)s2 )<<42) | (((ulong)s3 )<<63); + *(ulong *)(s+ 8) = (((ulong)s3 )>>1) | (((ulong)s4 )<<20) | (((ulong)s5 )<<41) | (((ulong)s6 )<<62); + *(ulong *)(s+16) = (((ulong)s6 )>>2) | (((ulong)s7 )<<19) | (((ulong)s8 )<<40) | (((ulong)s9 )<<61); + *(ulong *)(s+24) = (((ulong)s9 )>>3) | (((ulong)s10)<<18) | (((ulong)s11)<<39); + return s; +} + +void FD_FN_NO_ASAN +fd_curve25519_scalar_wnaf( short _t[ 256 ], /* 256-entry */ + uchar const _vs[ 32 ], /* 32-byte, assumes valid scalar */ + int bits ) { /* range: [1:12], 1 = NAF */ + short max = (short)((1 << bits) - 1); + uchar const * _s = (uchar const *)_vs; + + /* Unpack s bits into _t */ + + for( int i=0; i<255; i++ ) _t[i] = ((short)_s[i>>3] >> (i&7)) & 1; + _t[255] = 0; /* Guarantee 0 termination even if bad data passed */ + + /* At this point _t[*] in [0,1] */ + + int i; + + for( i=0; i<256; i++ ) if( _t[i] ) break; /* Find first non-zero t */ + + while( i<256 ) { + + /* At this point [0,i) have been made sparse and t[i] is 1. + Absorb as many tj for j in (i,256) into ti as possible */ + + short ti = 1; + + int j; + for( j=i+1; j<256; j++ ) { + short tj = _t[j]; + if( !tj ) continue; + + /* At this point, we've zeroed out (i,j) and we know tj is + 1. We also know that ti is odd and in [-max,max]. Thus, if + 2^shift>(2*max), ti +/- 2^shift*tj is _not_ in [-max,max] and + we can't merge this j and any following into i. */ + + short delta = (short)(1 << fd_int_min( j-i, 14 )); /* Note: delta is even, and delta <= 2^14 */ + if( delta>(2*max) ) break; + + /* See if we can add tj to ti. If so, this implies we are + subtracting 1 from tj, making it 0. */ + + short tip = (short)(ti + delta); /* odd + even -> odd */ + if( tip<=max ) { /* Yep ... add it to ti and zero it out */ + ti = tip; /* odd */ + _t[j] = 0; + continue; + } + + /* See if we can instead subtract tj from ti. This implies we are + adding 1 to tj, making it 2. We carry-propagate this into tk + for k>j, turning tj and possibly later tk to 0. We note that + delta for the next iteration will be so large that we can't + possibly absorb it into ti so we can abort this inner loop. + + Note that if this carry propagates to _t[255] (which is + strictly zero initially), we have _t[k]==0 for k in [j,254) and + _t[255]==1. The outer loop iteration will resume at i==255 and + detect it is done when it can't scan further for additional j + to absorb. Hence we will never carry propagate off the end and + the loop below is guaranteed to terminate. */ + + short tim = (short)(ti - delta); /* odd + even -> odd */ + if( tim>=-max ) { /* Yep ... sub it from ti and carry propagate */ + ti = tim; /* odd */ + _t[j] = 0; + for(;;) { + j++; + if( !_t[j] ) { _t[j] = 1; break; } + _t[j] = 0; + } + break; + } + + /* We can't absorb tj into ti */ + + break; + } + + /* Finalize ti and advance */ + + _t[i] = ti; + i = j; + } +} diff --git a/src/ballet/ed25519/fd_curve25519_scalar.h b/src/ballet/ed25519/fd_curve25519_scalar.h new file mode 100644 index 0000000000..1669d4929e --- /dev/null +++ b/src/ballet/ed25519/fd_curve25519_scalar.h @@ -0,0 +1,180 @@ +#ifndef HEADER_fd_src_ballet_ed25519_fd_curve25519_scalar_h +#define HEADER_fd_src_ballet_ed25519_fd_curve25519_scalar_h + +/* fd_curve25519_scalar.h provides the public Curve25519 scalar API. + + All operations in this API should be assumed to take a variable + amount of time depending on inputs. (And thus should not be exposed + to secret data) */ + +#include "../fd_ballet_base.h" + +static const uchar fd_curve25519_scalar_zero[ 32 ] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const uchar fd_curve25519_scalar_one[ 32 ] = { + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +/* l = 2^252 + 27742317777372353535851937790883648493 + = 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed + l-1 = 0x10...ec */ +static const uchar fd_curve25519_scalar_minus_one[ 32 ] = { + 0xec, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, + 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, +}; + +FD_PROTOTYPES_BEGIN + +/* fd_curve25519_scalar_reduce computes s mod l where s is a 512-bit value. s + is stored in 64-byte little endian form and in points to the first + byte of s. l is: + + 2^252 + 27742317777372353535851937790883648493. + + The result can be represented as a 256-bit value and stored in a + 32-byte little endian form. out points to where to store the result. + + Does no input argument checking. The caller takes a write interest + in out and a read interest in in for the duration of the call. + Returns out and, on return, out will be populated with the 256-bit + result. In-place operation fine. */ + +uchar * +fd_curve25519_scalar_reduce( uchar out[ 32 ], + uchar const in [ 64 ] ); + +/* fd_curve25519_scalar_validate checks whether the given Ed25519 scalar n + matches the canonical byte representation. + Not constant time and thus should not be exposed to secrets. + Returns s if canonical, NULL otherwise. */ + +static inline uchar const * +fd_curve25519_scalar_validate( uchar const s[ 32 ] ) { + ulong s0 = *(ulong *)(&s[ 0 ]); + ulong s1 = *(ulong *)(&s[ 8 ]); + ulong s2 = *(ulong *)(&s[ 16 ]); + ulong s3 = *(ulong *)(&s[ 24 ]); + ulong l0 = *(ulong *)(&fd_curve25519_scalar_minus_one[ 0 ]); + ulong l1 = *(ulong *)(&fd_curve25519_scalar_minus_one[ 8 ]); + ulong l2 = *(ulong *)(&fd_curve25519_scalar_minus_one[ 16 ]); + ulong l3 = *(ulong *)(&fd_curve25519_scalar_minus_one[ 24 ]); + return ( + (s3 < l3) + || ((s3 == l3) && (s2 < l2)) + || ((s3 == l3) && (s2 == l2) && (s1 < l1)) + || ((s3 == l3) && (s2 == l2) && (s1 == l1) && (s0 <= l0)) + ) ? s : NULL; +} + +/* fd_curve25519_scalar_muladd computes s = (a*b+c) mod l where a, b and c + are 256-bit values. a is stored in 32-byte little endian form and a + points to the first byte of a. Similarly for b and c. l is: + + 2^252 + 27742317777372353535851937790883648493. + + The result can be represented as a 256-bit value and stored in a + 32-byte little endian form. s points to where to store the result. + + Does no input argument checking. The caller takes a write interest + in s and a read interest in a, b and c for the duration of the call. + Returns s and, on return, s will be populated with the 256-bit + result. In-place operation fine. */ + +uchar * +fd_curve25519_scalar_muladd( uchar s[ 32 ], + uchar const * a, + uchar const b[ 32 ], + uchar const c[ 32 ] ); + +static inline uchar * +fd_curve25519_scalar_mul ( uchar * s, + uchar const * a, + uchar const * b ) { + return fd_curve25519_scalar_muladd( s, a, b, fd_curve25519_scalar_zero ); +} + +static inline uchar * +fd_curve25519_scalar_add ( uchar * s, + uchar const * a, + uchar const * b ) { + return fd_curve25519_scalar_muladd( s, a, fd_curve25519_scalar_one, b ); +} + +static inline uchar * +fd_curve25519_scalar_sub ( uchar * s, + uchar const * a, + uchar const * b ) { + //TODO implement dedicated neg/sub + return fd_curve25519_scalar_muladd( s, fd_curve25519_scalar_minus_one, b, a ); +} + +static inline uchar * +fd_curve25519_scalar_neg ( uchar * s, + uchar const * a ) { + //TODO implement dedicated neg/sub + return fd_curve25519_scalar_muladd( s, fd_curve25519_scalar_minus_one, a, fd_curve25519_scalar_zero ); +} + +static inline uchar * +fd_curve25519_scalar_inv( uchar * s, + uchar const * a ) { + uchar t[ 32 ]; + // TODO: use mul chain to save ~12% https://briansmith.org/ecc-inversion-addition-chains-01#curve25519_scalar_inversion + /* the bits of -2 are the same as -1, except the first few (that we skip): + -1 = 0xEC ... = b 1110 1100 ... + -2 = 0xEB ... = b 1110 1011 ... + ^ bit 7 ^ bit 0 + */ + /* bit 0 == 1 */ + fd_memcpy( t, a, 32 ); + fd_memcpy( s, a, 32 ); + /* bit 1 == 1 */ + fd_curve25519_scalar_mul( t, t, t ); + fd_curve25519_scalar_mul( s, s, t ); + /* bit 2 == 0 */ + fd_curve25519_scalar_mul( t, t, t ); + /* from bit 3 on, use -1 bits */ + for( ulong i=3; i<=252; i++ ) { + fd_curve25519_scalar_mul( t, t, t ); + if( (fd_curve25519_scalar_minus_one[ i/8 ] & (1 << (i % 8))) ) { + fd_curve25519_scalar_mul( s, s, t ); + } + } + return s; +} + +static inline void +fd_curve25519_scalar_batch_inv( uchar s [ 32 ], /* sz scalars */ + uchar allinv[ 32 ], /* 1 scalar */ + uchar const a [ 32 ], /* sz scalars */ + ulong sz ) { + uchar acc[ 32 ]; + fd_memcpy( acc, fd_curve25519_scalar_one, 32 ); + for( ulong i=0; i=0; i-- ) { + fd_curve25519_scalar_mul( &s[ i*32 ], &s[ i*32 ], acc ); + fd_curve25519_scalar_mul( acc, acc, &a[ i*32 ] ); + } +} + +void +fd_curve25519_scalar_wnaf( short slides[ 256 ], /* 256-entry */ + uchar const n[ 32 ], /* 32-byte, assumes valid scalar */ + int bits ); /* range: [1:12], 1 = NAF */ + +FD_PROTOTYPES_END + +#endif /* HEADER_fd_src_ballet_ed25519_fd_curve25519_scalar_h */ diff --git a/src/ballet/ed25519/fd_curve25519_secure.c b/src/ballet/ed25519/fd_curve25519_secure.c new file mode 100644 index 0000000000..7b15945272 --- /dev/null +++ b/src/ballet/ed25519/fd_curve25519_secure.c @@ -0,0 +1,144 @@ +#include "fd_curve25519.h" + +#if FD_HAS_AVX512 +#include "avx512/fd_curve25519_secure.c" +#else +#include "ref/fd_curve25519_secure.c" +#endif + +/* All the functions in this file are considered "secure", specifically: + + - Constant time in the input, i.e. the input can be a secret + - Small and auditable code base, incl. simple types + - Either, no local variables = no need to clear them before exit (most functions) + - Or, only static allocation + clear local variable before exit (fd_ed25519_scalar_mul_base_const_time) + - Clear registers via FD_FN_SENSITIVE + - C safety + */ + +FD_25519_INLINE void FD_FN_SENSITIVE +fd_ed25519_scalar_radix16( char secret_e[ 64 ], /* ouput: 64-entry in [-8;8] */ + uchar const secret_a[ 32 ], /* input: 32-byte, assumes valid scalar */ + char * tmp_secret_carry ) { + (*tmp_secret_carry) = 0; + + for( int i=0; i<32; i++ ) { + secret_e[2*i+0] = (char)((secret_a[i] ) & 0xF); + secret_e[2*i+1] = (char)((secret_a[i] >> 4) & 0xF); + } + + /* At this point, e[0:62] are in [0:15], e[63] is in [0:7] */ + + for( int i=0; i<63; i++ ) { + secret_e[i] = (char)(secret_e[i] + (*tmp_secret_carry)); + (*tmp_secret_carry) = (char)((secret_e[i] + 8) >> 4); + secret_e[i] = (char)(secret_e[i] - ((*tmp_secret_carry) << 4)); + } + secret_e[63] = (char)(secret_e[63] + (*tmp_secret_carry)); +} + +/* const_time_eq returns a==b ? 1 : 0. + Note: this is const time. */ +FD_25519_INLINE uchar FD_FN_SENSITIVE +const_time_eq( const uchar secret_a, const uchar secret_b ) { + return (uchar)((((uint)(secret_a ^ secret_b))-1U) >> 31); +} + +/* fd_ed25519_table_select selects an element in the table of pre-computed + points &fd_ed25519_base_point_const_time_table. + + Given (j, secret), j in 0..31, secret in -8..7: + - if secret==0 return 0 (point at infinity) + - if secret>0 return table[j][secret-1] + - if secret<0 return table[j][-secret-1] + + Note: this is const time, equivalent to the following code: + if ( secret == 0 ) { + fd_ed25519_point_set_zero_precomputed( r ); + } else if ( secret > 0 ) { + fd_ed25519_point_set( r, &fd_ed25519_base_point_const_time_table[j][secret-1] ); + } else { + fd_ed25519_point_neg( r, &fd_ed25519_base_point_const_time_table[j][-secret-1] ); + } +*/ +FD_25519_INLINE void FD_FN_SENSITIVE +fd_ed25519_table_select( fd_ed25519_point_t * r, + fd_ed25519_point_t * tmp, + int j, + char secret, + uchar * tmp_secret_idx, + uchar * tmp_secret_sgn ) { + // (*tmp_secret_sgn) = secret < 0 ? 1 : 0; + (*tmp_secret_sgn) = ((uchar)(secret)) >> 7; + // (*tmp_secret_idx) = (secret < 0) ? (uchar)(-secret-1) : (secret > 0) ? (uchar)secret-1 : 0xff; + (*tmp_secret_idx) = (uchar)(secret - (2*(*tmp_secret_sgn)*secret) - 1); // e = e - (2*e) = -e = |e| if e<0, e - 2*0 = e = |e| o.w. + + /* select the point from table in const time */ + fd_ed25519_point_set_zero_precomputed( tmp ); + + /* for( uchar i=0; i<8; i++ ) unrolled */ + fd_ed25519_point_if( r, const_time_eq( 0, (*tmp_secret_idx) ), &fd_ed25519_base_point_const_time_table[j][0], tmp ); + fd_ed25519_point_if( tmp, const_time_eq( 1, (*tmp_secret_idx) ), &fd_ed25519_base_point_const_time_table[j][1], r ); + fd_ed25519_point_if( r, const_time_eq( 2, (*tmp_secret_idx) ), &fd_ed25519_base_point_const_time_table[j][2], tmp ); + fd_ed25519_point_if( tmp, const_time_eq( 3, (*tmp_secret_idx) ), &fd_ed25519_base_point_const_time_table[j][3], r ); + fd_ed25519_point_if( r, const_time_eq( 4, (*tmp_secret_idx) ), &fd_ed25519_base_point_const_time_table[j][4], tmp ); + fd_ed25519_point_if( tmp, const_time_eq( 5, (*tmp_secret_idx) ), &fd_ed25519_base_point_const_time_table[j][5], r ); + fd_ed25519_point_if( r, const_time_eq( 6, (*tmp_secret_idx) ), &fd_ed25519_base_point_const_time_table[j][6], tmp ); + fd_ed25519_point_if( tmp, const_time_eq( 7, (*tmp_secret_idx) ), &fd_ed25519_base_point_const_time_table[j][7], r ); + + /* negate point if needed, in const time */ + fd_ed25519_point_neg_if( r, tmp, (*tmp_secret_sgn) ); +} + +/* fd_ed25519_scalar_mul_base_const_time computes a scalar mul of the base point + in const time wrt secret_scalar, clearing stack and registers before returning. + This is the main function used by fd_ed25519_sign. + All sub-functions called by fd_ed25519_scalar_mul_base_const_time are expected + to be static inline, have no local variable, and clear their registers. */ + +fd_ed25519_point_t * FD_FN_SENSITIVE +fd_ed25519_scalar_mul_base_const_time( fd_ed25519_point_t * r, + uchar const secret_scalar[ 32 ] ) { /* can be a secret */ + + //TODO: add input ptr to secure memory from the caller? + + /* memory areas that will contain (partial) secrets and will be cleared at the end */ + char secret_scalar_naf[64 + 2]; + fd_ed25519_point_t secret_tmp_points[5]; + + /* human-readable variables */ + char * tmp_secret_carry = &secret_scalar_naf[64]; + uchar * tmp_secret_idx = (uchar *)&secret_scalar_naf[64]; + uchar * tmp_secret_sgn = (uchar *)&secret_scalar_naf[65]; + fd_ed25519_point_t * selected = &secret_tmp_points[0]; // selected point from precomput table + fd_ed25519_point_t * r2 = &secret_tmp_points[1]; // temp result, to 2-unroll loop + fd_ed25519_point_t * selected2 = &secret_tmp_points[2]; // temp selectedc point, to 2-unroll loop + fd_ed25519_point_t * add_secure_tmp0 = &secret_tmp_points[3]; // tmp0 point for fd_ed25519_point_add_secure + fd_ed25519_point_t * add_secure_tmp1 = &secret_tmp_points[4]; // tmp1 point for fd_ed25519_point_add_secure + + fd_ed25519_scalar_radix16( secret_scalar_naf, secret_scalar, tmp_secret_carry ); + + fd_ed25519_point_set_zero( r ); + for( int i=1; i<64; i+=4 ) { + fd_ed25519_table_select( selected, selected2, i/2, secret_scalar_naf[i], tmp_secret_idx, tmp_secret_sgn ); + fd_ed25519_point_add_secure( r2, r, selected, add_secure_tmp0, add_secure_tmp1 ); + fd_ed25519_table_select( selected2, selected, i/2+1, secret_scalar_naf[i+2], tmp_secret_idx, tmp_secret_sgn ); + fd_ed25519_point_add_secure( r, r2, selected2, add_secure_tmp0, add_secure_tmp1 ); + } + + fd_ed25519_point_dbln_secure( r, r, 4, add_secure_tmp0, add_secure_tmp1 ); + + for( int i=0; i<64; i+=4 ) { + fd_ed25519_table_select( selected, selected2, i/2, secret_scalar_naf[i], tmp_secret_idx, tmp_secret_sgn ); + fd_ed25519_point_add_secure( r2, r, selected, add_secure_tmp0, add_secure_tmp1 ); + fd_ed25519_table_select( selected2, selected, i/2+1, secret_scalar_naf[i+2], tmp_secret_idx, tmp_secret_sgn ); + fd_ed25519_point_add_secure( r, r2, selected2, add_secure_tmp0, add_secure_tmp1 ); + } + + /* Sanitize */ + + fd_memset_explicit( secret_scalar_naf, 0, sizeof(secret_scalar_naf) ); + fd_memset_explicit( secret_tmp_points, 0, sizeof(secret_tmp_points) ); + + return r; +} diff --git a/src/ballet/ed25519/fd_curve25519_tables.c b/src/ballet/ed25519/fd_curve25519_tables.c new file mode 100644 index 0000000000..ad30972429 --- /dev/null +++ b/src/ballet/ed25519/fd_curve25519_tables.c @@ -0,0 +1,958 @@ +/* This code generates the precomputation tables stored in the table/ directory. + + To (re)generate tables: + + 1. Check Local.mk, uncomment the line: + $(call make-unit-test,fd_curve25519_tables,fd_curve25519_tables,fd_ballet fd_util) + + 2. Compile for each target backend, this will create a unit-test called fd_curve25519_tables + $ MACHINE=linux_gcc_icelake make -j + $ MACHINE=linux_gcc_noarch64 make -j + + 3. Run the scripts: + $ ./build/linux/gcc/icelake/unit-test/fd_curve25519_tables + $ ./build/linux/gcc/noarch64/unit-test/fd_curve25519_tables + + 4. Commit the changes. */ + +#include "../fd_ballet.h" +#include "fd_curve25519.h" +#include "fd_ristretto255.h" +#include "../hex/fd_hex.h" + +#include + +#define STDOUT 0 + +void +field_constant( FILE * file, char const * name, fd_f25519_t * value ) { + uchar buf[32]; + char hex[65]; hex[64] = 0; + + fd_hex_encode( hex, fd_f25519_tobytes( buf, value ), 32 ); + fprintf( file, "// 0x%s\n", hex); + fprintf( file, "static const fd_f25519_t %s[1] = {{\n", name); + + fprintf( file, " { "); + +#if FD_HAS_AVX512 + for( int i=0; i<6; i++ ) { + fprintf( file, "0x%016lx, ", value->el[i]); + } + fprintf( file, "0x0, 0x0, "); +#else + for( int i=0; i<5; i++ ) { + fprintf( file, "0x%016lx, ", value->el[i]); + } +#endif + + fprintf( file, "}\n"); + + fprintf( file, "}};\n\n"); +} + +void +field_tables_file( FILE * file ) { + uchar buf[32]; + + fd_f25519_t fd_f25519_zero[1]; + fd_f25519_t fd_f25519_one[1]; + fd_f25519_t fd_f25519_minus_one[1]; + fd_f25519_t fd_f25519_two[1]; + fd_f25519_t fd_f25519_k[1]; + fd_f25519_t fd_f25519_minus_k[1]; + fd_f25519_t fd_f25519_d[1]; + fd_f25519_t fd_f25519_sqrtm1[1]; + fd_f25519_t fd_f25519_invsqrt_a_minus_d[1]; + fd_f25519_t fd_f25519_one_minus_d_sq[1]; + fd_f25519_t fd_f25519_d_minus_one_sq[1]; + fd_f25519_t fd_f25519_sqrt_ad_minus_one[1]; + + fd_hex_decode( buf, "0000000000000000000000000000000000000000000000000000000000000000", 32 ); + fd_f25519_frombytes( fd_f25519_zero, buf ); + fd_hex_decode( buf, "0100000000000000000000000000000000000000000000000000000000000000", 32 ); + fd_f25519_frombytes( fd_f25519_one, buf ); + fd_hex_decode( buf, "ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", 32 ); + fd_f25519_frombytes( fd_f25519_minus_one, buf ); + fd_hex_decode( buf, "0200000000000000000000000000000000000000000000000000000000000000", 32 ); + fd_f25519_frombytes( fd_f25519_two, buf ); + + fd_hex_decode( buf, "59f1b226949bd6eb56b183829a14e00030d1f3eef2808e19e7fcdf56dcd90624", 32 ); + fd_f25519_frombytes( fd_f25519_k, buf ); + fd_f25519_neg( fd_f25519_minus_k, fd_f25519_k ); + + fd_hex_decode( buf, "a3785913ca4deb75abd841414d0a700098e879777940c78c73fe6f2bee6c0352", 32 ); + fd_f25519_frombytes( fd_f25519_d, buf ); + + fd_hex_decode( buf, "b0a00e4a271beec478e42fad0618432fa7d7fb3d99004d2b0bdfc14f8024832b", 32 ); + fd_f25519_frombytes( fd_f25519_sqrtm1, buf ); + + fd_hex_decode( buf, "ea405d80aafdc899be72415a17162f9d40d801fe917bc216a2fcafcf05896c78", 32 ); + fd_f25519_frombytes( fd_f25519_invsqrt_a_minus_d, buf ); + + fd_hex_decode( buf, "76c15f94c1097ce20f355ecd38a1812ce4df70beddab9499d7e0b3b2a8729002", 32 ); + fd_f25519_frombytes( fd_f25519_one_minus_d_sq, buf ); + + fd_hex_decode( buf, "204ded44aa5aad3199191eb02c4a9ed2eb4e9b522fd3dc4c41226cf67ab36859", 32 ); + fd_f25519_frombytes( fd_f25519_d_minus_one_sq, buf ); + + fd_hex_decode( buf, "1b2e7b49a0f6977ebd54781b0c8e9daffdd1f531c9fc3c0fac48832bbf316937", 32 ); + fd_f25519_frombytes( fd_f25519_sqrt_ad_minus_one, buf ); + + char const * header[] = { + "/* Do NOT modify. This file is auto generated by fd_curve25519_tables. */", + "", + "#ifndef HEADER_fd_src_ballet_ed25519_fd_f25519_h", + "#error \"Do not include this directly; use fd_f25519.h\"", + "#endif", + "", + }; + for( ulong i=0; iP03[i]); + } + fprintf( file, "},\n"); + fprintf( file, " { "); + for( int i=0; i<8; i++ ) { + fprintf( file, "0x%016lx, ", value->P14[i]); + } + fprintf( file, "},\n"); + fprintf( file, " { "); + for( int i=0; i<8; i++ ) { + fprintf( file, "0x%016lx, ", value->P25[i]); + } + fprintf( file, "},\n"); +#else + fprintf( file, " {{{ "); + for( int i=0; i<5; i++ ) { + fprintf( file, "0x%016lx, ", value->X->el[i]); + } + fprintf( file, "}}},\n"); + fprintf( file, " {{{ "); + for( int i=0; i<5; i++ ) { + fprintf( file, "0x%016lx, ", value->Y->el[i]); + } + fprintf( file, "}}},\n"); + fprintf( file, " {{{ "); + for( int i=0; i<5; i++ ) { + fprintf( file, "0x%016lx, ", value->T->el[i]); + } + fprintf( file, "}}},\n"); + fprintf( file, " {{{ "); + for( int i=0; i<5; i++ ) { + fprintf( file, "0x%016lx, ", value->Z->el[i]); + } + fprintf( file, "}}},\n"); +#endif +} + +void +points_matrix( FILE * file, char const * name, fd_ed25519_point_t values[32][8], int n, int m ) { + uchar buf[32]; + char hex[65]; hex[64] = 0; + + fprintf( file, "static const fd_ed25519_point_t %s[%d][%d] = {\n", name, n, m); + + for( int j=0; jX ); + // fd_f25519_tobytes( y, fd_ed25519_base_point->Y ); + // FD_LOG_HEXDUMP_WARNING(( "x", x, 32 )); + // FD_LOG_HEXDUMP_WARNING(( "y", y, 32 )); + + /* low order points */ + fd_f25519_t fd_ed25519_order8_point_y0[1]; + fd_f25519_t fd_ed25519_order8_point_y1[1]; + + fd_hex_decode( y, "26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05", 32 ); + fd_f25519_frombytes( fd_ed25519_order8_point_y0, y ); + fd_hex_decode( y, "c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a", 32 ); + fd_f25519_frombytes( fd_ed25519_order8_point_y1, y ); + + /* w-naf table */ + fd_ed25519_point_t base_point_2x[1]; + fd_curve25519_affine_add( base_point_2x, fd_ed25519_base_point, fd_ed25519_base_point ); + fd_ed25519_point_set( &fd_ed25519_base_point_wnaf_table[0], fd_ed25519_base_point ); + for( int i=1; i<128; i++ ) { + fd_curve25519_affine_add( &fd_ed25519_base_point_wnaf_table[i], base_point_2x, &fd_ed25519_base_point_wnaf_table[i-1] ); + } + for( int i=0; i<128; i++ ) { + /* pre-compute kT */ + fd_curve25519_into_precomputed( &fd_ed25519_base_point_wnaf_table[i] ); + } + + /* const time table */ + fd_ed25519_point_set( &fd_ed25519_base_point_const_time_table[0][0], fd_ed25519_base_point ); + for( int j=1; j<32; j++ ) { + fd_curve25519_affine_dbln( &fd_ed25519_base_point_const_time_table[j][0], &fd_ed25519_base_point_const_time_table[j-1][0], 8 ); + } + + fd_ed25519_point_t cur_base[1]; + for( int j=0; j<32; j++ ) { + fd_ed25519_point_set( cur_base, &fd_ed25519_base_point_const_time_table[j][0] ); + for( int i=1; i<8; i++ ) { + fd_curve25519_affine_add( &fd_ed25519_base_point_const_time_table[j][i], cur_base, &fd_ed25519_base_point_const_time_table[j][i-1] ); + } + + for( int i=0; i<8; i++ ) { + /* pre-compute kT */ + fd_curve25519_into_precomputed( &fd_ed25519_base_point_const_time_table[j][i] ); + } + } + + char const * header[] = { + "/* Do NOT modify. This file is auto generated by fd_curve25519_tables. */", + "", + "#ifndef HEADER_fd_src_ballet_ed25519_fd_curve25519_h", + "#error \"Do not include this directly; use fd_curve25519.h\"", + "#endif", + "", + }; + for( ulong i=0; ilimb[ 0 ] == fe1->limb[ 0 ] ) & ( fe0->limb[ 1 ] == fe1->limb[ 1 ] ) & - ( fe0->limb[ 2 ] == fe1->limb[ 2 ] ) & ( fe0->limb[ 3 ] == fe1->limb[ 3 ] ) & - ( fe0->limb[ 4 ] == fe1->limb[ 4 ] ) & ( fe0->limb[ 5 ] == fe1->limb[ 5 ] ) & - ( fe0->limb[ 6 ] == fe1->limb[ 6 ] ) & ( fe0->limb[ 7 ] == fe1->limb[ 7 ] ) & - ( fe0->limb[ 8 ] == fe1->limb[ 8 ] ) & ( fe0->limb[ 9 ] == fe1->limb[ 9 ] ); -} - -static inline void -fd_ed25519_ge_p3_mul_by_pow_2( fd_ed25519_ge_p3_t * ret, - fd_ed25519_ge_p3_t * const p, - uint k ) { - /* If k is zero then return the original point p. [2^0]P = [1]P = P */ - if ( FD_UNLIKELY( k == 0 ) ) { - *ret = *p; - return; - } - fd_ed25519_ge_p1p1_t r[ 1 ]; - fd_ed25519_ge_p2_t s[ 1 ]; - fd_ed25519_ge_p3_to_p2( s, p ); - for( uint i = 0; i < ( k - 1 ); i++ ) { - fd_ed25519_ge_p2_dbl( r, s ); - fd_ed25519_ge_p1p1_to_p2( s, r ); - } - fd_ed25519_ge_p2_dbl( r, s ); - fd_ed25519_ge_p1p1_to_p3( ret, r ); -} - -static inline int -fd_ed25519_ge_p3_is_identity( fd_ed25519_ge_p3_t * const p ) { - fd_ed25519_ge_p3_t I[1]; - fd_ed25519_fe_0( I->X ); - fd_ed25519_fe_1( I->Y ); - fd_ed25519_fe_1( I->Z ); - fd_ed25519_fe_0( I->T ); - - fd_ed25519_fe_t cmp[2]; - fd_ed25519_fe_mul( &cmp[ 0 ], p->X, I->Z ); - fd_ed25519_fe_mul( &cmp[ 1 ], I->X, p->Z ); - int x = fd_ed25519_fe_eq( &cmp[ 0 ], &cmp[ 1 ] ); - - fd_ed25519_fe_mul( &cmp[ 0 ], p->Y, I->Z ); - fd_ed25519_fe_mul( &cmp[ 1 ], I->Y, p->Z ); - int y = fd_ed25519_fe_eq( &cmp[ 0 ], &cmp[ 1 ] ); - - return x & y; -} - -int -fd_ed25519_ge_p3_is_small_order( fd_ed25519_ge_p3_t * const p ) { - fd_ed25519_ge_p3_t t[ 1 ]; - fd_ed25519_ge_p3_mul_by_pow_2( t, p, 3 ); - return fd_ed25519_ge_p3_is_identity( t ); -} diff --git a/src/ballet/ed25519/fd_ed25519_private.h b/src/ballet/ed25519/fd_ed25519_private.h deleted file mode 100644 index 88930bd288..0000000000 --- a/src/ballet/ed25519/fd_ed25519_private.h +++ /dev/null @@ -1,142 +0,0 @@ -#ifndef HEADER_fd_src_ballet_ed25519_fd_ed25519_private_h -#define HEADER_fd_src_ballet_ed25519_fd_ed25519_private_h - -#include "fd_ed25519.h" - -/* Field element API **************************************************/ - -#ifndef FD_ED25519_FE_IMPL -#if FD_HAS_AVX -#define FD_ED25519_FE_IMPL 1 -#else -#define FD_ED25519_FE_IMPL 0 -#endif -#endif - -#if FD_ED25519_FE_IMPL==0 -#include "ref/fd_ed25519_fe.h" -#elif FD_ED25519_FE_IMPL==1 -#include "avx/fd_ed25519_fe.h" -#else -#error "Unsupported FD_ED25519_FE_IMPL" -#endif - -/* Group element API **************************************************/ - -/* A fd_ed25519_ge_*_t stores an ed25519 group element. Here the group - is the set of pairs (x,y) of field elements satisfying - -x^2 + y^2 = 1 + d x^2y^2 - where d = -121665/121666. Useful representations include: - - p2 (projective): (X:Y:Z) satisfying x=X/Z, y=Y/Z - p3 (extended): (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT */ - -struct fd_ed25519_ge_p2_private { - fd_ed25519_fe_t X[1]; - fd_ed25519_fe_t Y[1]; - fd_ed25519_fe_t Z[1]; -}; - -typedef struct fd_ed25519_ge_p2_private fd_ed25519_ge_p2_t; - -struct fd_ed25519_ge_p3_private { - fd_ed25519_fe_t X[1]; - fd_ed25519_fe_t Y[1]; - fd_ed25519_fe_t Z[1]; - fd_ed25519_fe_t T[1]; -}; - -typedef struct fd_ed25519_ge_p3_private fd_ed25519_ge_p3_t; - -FD_PROTOTYPES_BEGIN - -/* FIXME: DOCUMENT THESE */ - -uchar * -fd_ed25519_ge_tobytes( uchar * s, /* 32 */ - fd_ed25519_ge_p2_t const * h ); - -uchar * -fd_ed25519_ge_p3_tobytes( uchar * s, /* 32 */ - fd_ed25519_ge_p3_t const * h ); - -int -fd_ed25519_ge_frombytes_vartime( fd_ed25519_ge_p3_t * h, - uchar const * s ); /* 32 */ - -int -fd_ed25519_ge_frombytes_vartime_2( fd_ed25519_ge_p3_t * h0, uchar const * s0, /* 32 */ - fd_ed25519_ge_p3_t * h1, uchar const * s1 ); /* 32 */ - -int fd_ed25519_ge_p3_is_small_order(fd_ed25519_ge_p3_t * const p); - -static inline fd_ed25519_ge_p2_t * -fd_ed25519_ge_p2_0( fd_ed25519_ge_p2_t * h ) { - fd_ed25519_fe_0( h->X ); - fd_ed25519_fe_1( h->Y ); - fd_ed25519_fe_1( h->Z ); - return h; -} - -static inline fd_ed25519_ge_p3_t * -fd_ed25519_ge_p3_0( fd_ed25519_ge_p3_t * h ) { - fd_ed25519_fe_0( h->X ); - fd_ed25519_fe_1( h->Y ); - fd_ed25519_fe_1( h->Z ); - fd_ed25519_fe_0( h->T ); - return h; -} - -fd_ed25519_ge_p3_t * -fd_ed25519_ge_scalarmult_base( fd_ed25519_ge_p3_t * h, - uchar const * a ); - -fd_ed25519_ge_p2_t * -fd_ed25519_ge_double_scalarmult_vartime( fd_ed25519_ge_p2_t * r, - uchar const * a, - fd_ed25519_ge_p3_t const * A, - uchar const * b ); - -/* User APIs **********************************************************/ - -/* fd_ed25519_sc_reduce computes s mod l where s is a 512-bit value. s - is stored in 64-byte little endian form and in points to the first - byte of s. l is: - - 2^252 + 27742317777372353535851937790883648493. - - The result can be represented as a 256-bit value and stored in a - 32-byte little endian form. out points to where to store the result. - - Does no input argument checking. The caller takes a write interest - in out and a read interest in in for the duration of the call. - Returns out and, on return, out will be populated with the 256-bit - result. In-place operation fine. */ - -uchar * -fd_ed25519_sc_reduce( uchar * out, - uchar const * in ); - -/* fd_ed25519_sc_muladd computes s = (a*b+c) mod l where a, b and c - are 256-bit values. a is stored in 32-byte little endian form and a - points to the first byte of a. Similarly for b and c. l is: - - 2^252 + 27742317777372353535851937790883648493. - - The result can be represented as a 256-bit value and stored in a - 32-byte little endian form. s points to where to store the result. - - Does no input argument checking. The caller takes a write interest - in s and a read interest in a, b and c for the duration of the call. - Returns s and, on return, s will be populated with the 256-bit - result. In-place operation fine. */ - -uchar * -fd_ed25519_sc_muladd( uchar * s, - uchar const * a, - uchar const * b, - uchar const * c ); - -FD_PROTOTYPES_END - -#endif /* HEADER_fd_src_ballet_ed25519_fd_ed25519_private_h */ diff --git a/src/ballet/ed25519/fd_ed25519_user.c b/src/ballet/ed25519/fd_ed25519_user.c index b63256433d..ca856f3e87 100644 --- a/src/ballet/ed25519/fd_ed25519_user.c +++ b/src/ballet/ed25519/fd_ed25519_user.c @@ -1,747 +1,312 @@ -#include "fd_ed25519_private.h" - -uchar * -fd_ed25519_sc_reduce( uchar * out, - uchar const * in ) { - - /* Load the 512 bits to reduce */ - - ulong in0 = fd_ulong_load_8_fast( in ); - ulong in1 = fd_ulong_load_8_fast( in + 8 ); - ulong in2 = fd_ulong_load_8_fast( in + 16 ); - ulong in3 = fd_ulong_load_8_fast( in + 24 ); - ulong in4 = fd_ulong_load_8_fast( in + 32 ); - ulong in5 = fd_ulong_load_8_fast( in + 40 ); - ulong in6 = fd_ulong_load_8_fast( in + 48 ); - ulong in7 = fd_ulong_load_8_fast( in + 56 ); - - /* Unpack into 23 21-bit integers and a 29-bit straggler */ - - ulong mask = FD_ULONG_MASK_LSB( 21 ); - - long s0 = (long)( in0 & mask); long s1 = (long)((in0>>21) & mask); long s2 = (long)((in0>>42) & mask); - long s3 = (long)(((in0>>63) | (in1<<1)) & mask); long s4 = (long)((in1>>20) & mask); long s5 = (long)((in1>>41) & mask); - long s6 = (long)(((in1>>62) | (in2<<2)) & mask); long s7 = (long)((in2>>19) & mask); long s8 = (long)((in2>>40) & mask); - long s9 = (long)(((in2>>61) | (in3<<3)) & mask); long s10 = (long)((in3>>18) & mask); long s11 = (long)((in3>>39) & mask); - long s12 = (long)(((in3>>60) | (in4<<4)) & mask); long s13 = (long)((in4>>17) & mask); long s14 = (long)((in4>>38) & mask); - long s15 = (long)(((in4>>59) | (in5<<5)) & mask); long s16 = (long)((in5>>16) & mask); long s17 = (long)((in5>>37) & mask); - long s18 = (long)(((in5>>58) | (in6<<6)) & mask); long s19 = (long)((in6>>15) & mask); long s20 = (long)((in6>>36) & mask); - long s21 = (long)(((in6>>57) | (in7<<7)) & mask); long s22 = (long)((in7>>14) & mask); long s23 = (long)( in7>>35 ); - - /* Do the reduction */ - - s11 += s23*666643L; s12 += s23*470296L; s13 += s23*654183L; s14 -= s23*997805L; s15 += s23*136657L; s16 -= s23*683901L; s23 = 0L; - s10 += s22*666643L; s11 += s22*470296L; s12 += s22*654183L; s13 -= s22*997805L; s14 += s22*136657L; s15 -= s22*683901L; s22 = 0L; - s9 += s21*666643L; s10 += s21*470296L; s11 += s21*654183L; s12 -= s21*997805L; s13 += s21*136657L; s14 -= s21*683901L; s21 = 0L; - s8 += s20*666643L; s9 += s20*470296L; s10 += s20*654183L; s11 -= s20*997805L; s12 += s20*136657L; s13 -= s20*683901L; s20 = 0L; - s7 += s19*666643L; s8 += s19*470296L; s9 += s19*654183L; s10 -= s19*997805L; s11 += s19*136657L; s12 -= s19*683901L; s19 = 0L; - s6 += s18*666643L; s7 += s18*470296L; s8 += s18*654183L; s9 -= s18*997805L; s10 += s18*136657L; s11 -= s18*683901L; s18 = 0L; - - long carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); - long carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); - long carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); - long carry12 = (s12 + (1L << 20)) >> 21; s13 += carry12; s12 -= (long)((ulong)carry12 << 21); - long carry14 = (s14 + (1L << 20)) >> 21; s15 += carry14; s14 -= (long)((ulong)carry14 << 21); - long carry16 = (s16 + (1L << 20)) >> 21; s17 += carry16; s16 -= (long)((ulong)carry16 << 21); - - long carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); - long carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); - long carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); - long carry13 = (s13 + (1L << 20)) >> 21; s14 += carry13; s13 -= (long)((ulong)carry13 << 21); - long carry15 = (s15 + (1L << 20)) >> 21; s16 += carry15; s15 -= (long)((ulong)carry15 << 21); - - s5 += s17*666643L; s6 += s17*470296L; s7 += s17*654183L; s8 -= s17*997805L; s9 += s17*136657L; s10 -= s17*683901L; s17 = 0L; - s4 += s16*666643L; s5 += s16*470296L; s6 += s16*654183L; s7 -= s16*997805L; s8 += s16*136657L; s9 -= s16*683901L; s16 = 0L; - s3 += s15*666643L; s4 += s15*470296L; s5 += s15*654183L; s6 -= s15*997805L; s7 += s15*136657L; s8 -= s15*683901L; s15 = 0L; - s2 += s14*666643L; s3 += s14*470296L; s4 += s14*654183L; s5 -= s14*997805L; s6 += s14*136657L; s7 -= s14*683901L; s14 = 0L; - s1 += s13*666643L; s2 += s13*470296L; s3 += s13*654183L; s4 -= s13*997805L; s5 += s13*136657L; s6 -= s13*683901L; s13 = 0L; - s0 += s12*666643L; s1 += s12*470296L; s2 += s12*654183L; s3 -= s12*997805L; s4 += s12*136657L; s5 -= s12*683901L; s12 = 0L; - - long carry0 = (s0 + (1L << 20)) >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); - long carry2 = (s2 + (1L << 20)) >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); - long carry4 = (s4 + (1L << 20)) >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); - /**/ carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); - /**/ carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); - /**/ carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); - - long carry1 = (s1 + (1L << 20)) >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); - long carry3 = (s3 + (1L << 20)) >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); - long carry5 = (s5 + (1L << 20)) >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); - /**/ carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); - /**/ carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); - /**/ carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); - - s0 += s12*666643L; s1 += s12*470296L; s2 += s12*654183L; s3 -= s12*997805L; s4 += s12*136657L; s5 -= s12*683901L; s12 = 0L; - - carry0 = s0 >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); - carry1 = s1 >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); - carry2 = s2 >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); - carry3 = s3 >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); - carry4 = s4 >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); - carry5 = s5 >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); - carry6 = s6 >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); - carry7 = s7 >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); - carry8 = s8 >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); - carry9 = s9 >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); - carry10 = s10 >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); - carry11 = s11 >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); - - s0 += s12*666643L; s1 += s12*470296L; s2 += s12*654183L; s3 -= s12*997805L; s4 += s12*136657L; s5 -= s12*683901L; s12 = 0L; - - carry0 = s0 >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); - carry1 = s1 >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); - carry2 = s2 >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); - carry3 = s3 >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); - carry4 = s4 >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); - carry5 = s5 >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); - carry6 = s6 >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); - carry7 = s7 >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); - carry8 = s8 >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); - carry9 = s9 >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); - carry10 = s10 >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); - - /* Pack the results into out */ - - *(ulong *) out = (((ulong)s0 ) ) | (((ulong)s1 )<<21) | (((ulong)s2 )<<42) | (((ulong)s3 )<<63); - *(ulong *)(out+ 8) = (((ulong)s3 )>>1) | (((ulong)s4 )<<20) | (((ulong)s5 )<<41) | (((ulong)s6 )<<62); - *(ulong *)(out+16) = (((ulong)s6 )>>2) | (((ulong)s7 )<<19) | (((ulong)s8 )<<40) | (((ulong)s9 )<<61); - *(ulong *)(out+24) = (((ulong)s9 )>>3) | (((ulong)s10)<<18) | (((ulong)s11)<<39); - return out; -} - -uchar * -fd_ed25519_sc_muladd( uchar * s, - uchar const * a, - uchar const * b, - uchar const * c ) { - - /* Load a, b and c */ - - ulong ia0 = fd_ulong_load_8( a ); ulong ib0 = fd_ulong_load_8( b ); ulong ic0 = fd_ulong_load_8( c ); - ulong ia1 = fd_ulong_load_8( a + 8 ); ulong ib1 = fd_ulong_load_8( b + 8 ); ulong ic1 = fd_ulong_load_8( c + 8 ); - ulong ia2 = fd_ulong_load_8( a + 16 ); ulong ib2 = fd_ulong_load_8( b + 16 ); ulong ic2 = fd_ulong_load_8( c + 16 ); - ulong ia3 = fd_ulong_load_8( a + 24 ); ulong ib3 = fd_ulong_load_8( b + 24 ); ulong ic3 = fd_ulong_load_8( c + 24 ); - - /* Unpack each into 11 21-bit integers and a 25-bit straggler */ - - ulong mask = FD_ULONG_MASK_LSB( 21 ); - - long a0 = (long)( ia0 & mask); long a1 = (long)((ia0>>21) & mask); long a2 = (long)((ia0>>42) & mask); - long a3 = (long)(((ia0>>63) | (ia1<<1)) & mask); long a4 = (long)((ia1>>20) & mask); long a5 = (long)((ia1>>41) & mask); - long a6 = (long)(((ia1>>62) | (ia2<<2)) & mask); long a7 = (long)((ia2>>19) & mask); long a8 = (long)((ia2>>40) & mask); - long a9 = (long)(((ia2>>61) | (ia3<<3)) & mask); long a10 = (long)((ia3>>18) & mask); long a11 = (long)( ia3>>39 ); - - long b0 = (long)( ib0 & mask); long b1 = (long)((ib0>>21) & mask); long b2 = (long)((ib0>>42) & mask); - long b3 = (long)(((ib0>>63) | (ib1<<1)) & mask); long b4 = (long)((ib1>>20) & mask); long b5 = (long)((ib1>>41) & mask); - long b6 = (long)(((ib1>>62) | (ib2<<2)) & mask); long b7 = (long)((ib2>>19) & mask); long b8 = (long)((ib2>>40) & mask); - long b9 = (long)(((ib2>>61) | (ib3<<3)) & mask); long b10 = (long)((ib3>>18) & mask); long b11 = (long)( ib3>>39 ); - - long c0 = (long)( ic0 & mask); long c1 = (long)((ic0>>21) & mask); long c2 = (long)((ic0>>42) & mask); - long c3 = (long)(((ic0>>63) | (ic1<<1)) & mask); long c4 = (long)((ic1>>20) & mask); long c5 = (long)((ic1>>41) & mask); - long c6 = (long)(((ic1>>62) | (ic2<<2)) & mask); long c7 = (long)((ic2>>19) & mask); long c8 = (long)((ic2>>40) & mask); - long c9 = (long)(((ic2>>61) | (ic3<<3)) & mask); long c10 = (long)((ic3>>18) & mask); long c11 = (long)( ic3>>39 ); - - /* Do the muladd */ - - long s0 = c0 + a0*b0; - long s1 = c1 + a0*b1 + a1*b0; - long s2 = c2 + a0*b2 + a1*b1 + a2*b0; - long s3 = c3 + a0*b3 + a1*b2 + a2*b1 + a3*b0; - long s4 = c4 + a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0; - long s5 = c5 + a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0; - long s6 = c6 + a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0; - long s7 = c7 + a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0; - long s8 = c8 + a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0; - long s9 = c9 + a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0; - long s10 = c10 + a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0; - long s11 = c11 + a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0; - long s12 = a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1; - long s13 = a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2; - long s14 = a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3; - long s15 = a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4; - long s16 = a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5; - long s17 = a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6; - long s18 = a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7; - long s19 = a8*b11 + a9*b10 + a10*b9 + a11*b8; - long s20 = a9*b11 + a10*b10 + a11*b9; - long s21 = a10*b11 + a11*b10; - long s22 = a11*b11; - long s23 = 0L; - - /* Reduce the result */ - - long carry0 = (s0 + (1L << 20)) >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); - long carry2 = (s2 + (1L << 20)) >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); - long carry4 = (s4 + (1L << 20)) >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); - long carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); - long carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); - long carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); - long carry12 = (s12 + (1L << 20)) >> 21; s13 += carry12; s12 -= (long)((ulong)carry12 << 21); - long carry14 = (s14 + (1L << 20)) >> 21; s15 += carry14; s14 -= (long)((ulong)carry14 << 21); - long carry16 = (s16 + (1L << 20)) >> 21; s17 += carry16; s16 -= (long)((ulong)carry16 << 21); - long carry18 = (s18 + (1L << 20)) >> 21; s19 += carry18; s18 -= (long)((ulong)carry18 << 21); - long carry20 = (s20 + (1L << 20)) >> 21; s21 += carry20; s20 -= (long)((ulong)carry20 << 21); - long carry22 = (s22 + (1L << 20)) >> 21; s23 += carry22; s22 -= (long)((ulong)carry22 << 21); - - long carry1 = (s1 + (1L << 20)) >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); - long carry3 = (s3 + (1L << 20)) >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); - long carry5 = (s5 + (1L << 20)) >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); - long carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); - long carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); - long carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); - long carry13 = (s13 + (1L << 20)) >> 21; s14 += carry13; s13 -= (long)((ulong)carry13 << 21); - long carry15 = (s15 + (1L << 20)) >> 21; s16 += carry15; s15 -= (long)((ulong)carry15 << 21); - long carry17 = (s17 + (1L << 20)) >> 21; s18 += carry17; s17 -= (long)((ulong)carry17 << 21); - long carry19 = (s19 + (1L << 20)) >> 21; s20 += carry19; s19 -= (long)((ulong)carry19 << 21); - long carry21 = (s21 + (1L << 20)) >> 21; s22 += carry21; s21 -= (long)((ulong)carry21 << 21); - - s11 += s23*666643L; s12 += s23*470296L; s13 += s23*654183L; s14 -= s23*997805L; s15 += s23*136657L; s16 -= s23*683901L; s23 = 0L; - s10 += s22*666643L; s11 += s22*470296L; s12 += s22*654183L; s13 -= s22*997805L; s14 += s22*136657L; s15 -= s22*683901L; s22 = 0L; - s9 += s21*666643L; s10 += s21*470296L; s11 += s21*654183L; s12 -= s21*997805L; s13 += s21*136657L; s14 -= s21*683901L; s21 = 0L; - s8 += s20*666643L; s9 += s20*470296L; s10 += s20*654183L; s11 -= s20*997805L; s12 += s20*136657L; s13 -= s20*683901L; s20 = 0L; - s7 += s19*666643L; s8 += s19*470296L; s9 += s19*654183L; s10 -= s19*997805L; s11 += s19*136657L; s12 -= s19*683901L; s19 = 0L; - s6 += s18*666643L; s7 += s18*470296L; s8 += s18*654183L; s9 -= s18*997805L; s10 += s18*136657L; s11 -= s18*683901L; s18 = 0L; - - carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); - carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); - carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); - carry12 = (s12 + (1L << 20)) >> 21; s13 += carry12; s12 -= (long)((ulong)carry12 << 21); - carry14 = (s14 + (1L << 20)) >> 21; s15 += carry14; s14 -= (long)((ulong)carry14 << 21); - carry16 = (s16 + (1L << 20)) >> 21; s17 += carry16; s16 -= (long)((ulong)carry16 << 21); - - carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); - carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); - carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); - carry13 = (s13 + (1L << 20)) >> 21; s14 += carry13; s13 -= (long)((ulong)carry13 << 21); - carry15 = (s15 + (1L << 20)) >> 21; s16 += carry15; s15 -= (long)((ulong)carry15 << 21); - - s5 += s17*666643L; s6 += s17*470296L; s7 += s17*654183L; s8 -= s17*997805L; s9 += s17*136657L; s10 -= s17*683901L; s17 = 0L; - s4 += s16*666643L; s5 += s16*470296L; s6 += s16*654183L; s7 -= s16*997805L; s8 += s16*136657L; s9 -= s16*683901L; s16 = 0L; - s3 += s15*666643L; s4 += s15*470296L; s5 += s15*654183L; s6 -= s15*997805L; s7 += s15*136657L; s8 -= s15*683901L; s15 = 0L; - s2 += s14*666643L; s3 += s14*470296L; s4 += s14*654183L; s5 -= s14*997805L; s6 += s14*136657L; s7 -= s14*683901L; s14 = 0L; - s1 += s13*666643L; s2 += s13*470296L; s3 += s13*654183L; s4 -= s13*997805L; s5 += s13*136657L; s6 -= s13*683901L; s13 = 0L; - s0 += s12*666643L; s1 += s12*470296L; s2 += s12*654183L; s3 -= s12*997805L; s4 += s12*136657L; s5 -= s12*683901L; s12 = 0L; - - carry0 = (s0 + (1L << 20)) >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); - carry2 = (s2 + (1L << 20)) >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); - carry4 = (s4 + (1L << 20)) >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); - carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); - carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); - carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); - - carry1 = (s1 + (1L << 20)) >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); - carry3 = (s3 + (1L << 20)) >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); - carry5 = (s5 + (1L << 20)) >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); - carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); - carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); - carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); - - s0 += s12*666643L; s1 += s12*470296L; s2 += s12*654183L; s3 -= s12*997805L; s4 += s12*136657L; s5 -= s12*683901L; s12 = 0L; - - carry0 = s0 >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); - carry1 = s1 >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); - carry2 = s2 >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); - carry3 = s3 >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); - carry4 = s4 >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); - carry5 = s5 >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); - carry6 = s6 >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); - carry7 = s7 >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); - carry8 = s8 >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); - carry9 = s9 >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); - carry10 = s10 >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); - carry11 = s11 >> 21; s12 += carry11; s11 -= (long)((ulong)carry11 << 21); - - s0 += s12*666643L; s1 += s12*470296L; s2 += s12*654183L; s3 -= s12*997805L; s4 += s12*136657L; s5 -= s12*683901L; s12 = 0L; - - carry0 = s0 >> 21; s1 += carry0; s0 -= (long)((ulong)carry0 << 21); - carry1 = s1 >> 21; s2 += carry1; s1 -= (long)((ulong)carry1 << 21); - carry2 = s2 >> 21; s3 += carry2; s2 -= (long)((ulong)carry2 << 21); - carry3 = s3 >> 21; s4 += carry3; s3 -= (long)((ulong)carry3 << 21); - carry4 = s4 >> 21; s5 += carry4; s4 -= (long)((ulong)carry4 << 21); - carry5 = s5 >> 21; s6 += carry5; s5 -= (long)((ulong)carry5 << 21); - carry6 = s6 >> 21; s7 += carry6; s6 -= (long)((ulong)carry6 << 21); - carry7 = s7 >> 21; s8 += carry7; s7 -= (long)((ulong)carry7 << 21); - carry8 = s8 >> 21; s9 += carry8; s8 -= (long)((ulong)carry8 << 21); - carry9 = s9 >> 21; s10 += carry9; s9 -= (long)((ulong)carry9 << 21); - carry10 = s10 >> 21; s11 += carry10; s10 -= (long)((ulong)carry10 << 21); - - /* Pack the results into s */ - - *(ulong *) s = (((ulong)s0 ) ) | (((ulong)s1 )<<21) | (((ulong)s2 )<<42) | (((ulong)s3 )<<63); - *(ulong *)(s+ 8) = (((ulong)s3 )>>1) | (((ulong)s4 )<<20) | (((ulong)s5 )<<41) | (((ulong)s6 )<<62); - *(ulong *)(s+16) = (((ulong)s6 )>>2) | (((ulong)s7 )<<19) | (((ulong)s8 )<<40) | (((ulong)s9 )<<61); - *(ulong *)(s+24) = (((ulong)s9 )>>3) | (((ulong)s10)<<18) | (((ulong)s11)<<39); - return s; -} - -int fd_ed25519_verify_batch_single_msg( uchar const msg[], /* msg_sz */ - ulong const msg_sz, - uchar const signatures[ static 64 ], /* 64 * batch_sz */ - uchar const pubkeys[ static 32 ], /* 32 * batch_sz */ - fd_sha512_t * shas[ 1 ], /* batch_sz */ - uchar const batch_sz ) { - if( FD_UNLIKELY( batch_sz == 0 ) ) { - return FD_ED25519_ERR_SIG; - } - - /* native */ - for( uchar i=0; i 0x10 ) ) return FD_ED25519_ERR_SIG; - if( FD_UNLIKELY( s[31]==0x10 ) ) { - - /* Most significant byte indicates a value close to 2^252 so check - the rest */ - - static uchar const allzeroes[ 15 ]; - if( memcmp( s+16, allzeroes, 15UL )!=0 ) return FD_ED25519_ERR_SIG; - - /* 27742317777372353535851937790883648493 in little endian format */ - static uchar const l_low[16] = { - (uchar)0xED, (uchar)0xD3, (uchar)0xF5, (uchar)0x5C, (uchar)0x1A, (uchar)0x63, (uchar)0x12, (uchar)0x58, - (uchar)0xD6, (uchar)0x9C, (uchar)0xF7, (uchar)0xA2, (uchar)0xDE, (uchar)0xF9, (uchar)0xDE, (uchar)0x14 - }; - - int i; - for( i=15; i>=0; i--) { - if( FD_LIKELY( s[i]l_low[i] ) ) return FD_ED25519_ERR_SIG; - } - if( FD_UNLIKELY( i<0 ) ) return FD_ED25519_ERR_SIG; - } - - fd_ed25519_ge_p3_t A[1]; - -# if FD_ED25519_VERIFY_USE_2POINT - /* 2-point decompression - this approach avoids doing a compression - (and hence an inversion) at the end */ - fd_ed25519_ge_p3_t rD[1]; - int err = fd_ed25519_ge_frombytes_vartime_2( A, public_key, rD, r ); if( FD_UNLIKELY( err ) ) return err; - if( fd_ed25519_ge_p3_is_small_order(A) ) return FD_ED25519_ERR_PUBKEY; - if( fd_ed25519_ge_p3_is_small_order(rD) ) return FD_ED25519_ERR_SIG; -# else - int err = fd_ed25519_ge_frombytes_vartime( A, public_key ); if( FD_UNLIKELY( err ) ) return err; - /* TODO: small order checks here too? */ -# endif +#include "fd_ed25519.h" +#include "fd_curve25519.h" - fd_ed25519_fe_neg( A->X, A->X ); - fd_ed25519_fe_neg( A->T, A->T ); - - uchar h[ 64 ]; - fd_sha512_fini( fd_sha512_append( fd_sha512_append( fd_sha512_append( fd_sha512_init( sha ), - r, 32UL ), public_key, 32UL ), msg, sz ), h ); - fd_ed25519_sc_reduce( h, h ); - - fd_ed25519_ge_p2_t R[1]; - fd_ed25519_ge_double_scalarmult_vartime( R, h, A, s ); - -# if FD_ED25519_VERIFY_USE_2POINT - /* Comparison: - r.x * R.Z == R.X - r.y * R.Z == R.Y - mod p*/ - - uchar xcheck[32] __attribute__((aligned(32))); uchar ycheck[32] __attribute__((aligned(32))); - fd_ed25519_fe_t dx[1]; fd_ed25519_fe_t dy[1]; - fd_ed25519_fe_mul2( dx, R->Z, rD->X, dy, R->Z, rD->Y ); - fd_ed25519_fe_sub( dx, dx, R->X ); fd_ed25519_fe_sub( dy, dy, R->Y ); - fd_ed25519_fe_tobytes( xcheck, dx ); fd_ed25519_fe_tobytes( ycheck, dy ); - - uchar zcheck[32] __attribute__((aligned(32))); - memset( zcheck, 0, 32UL ); - if( FD_UNLIKELY( (!!memcmp( xcheck, zcheck, 32UL )) | (!!memcmp( ycheck, zcheck, 32UL )) ) ) return FD_ED25519_ERR_MSG; - - return FD_ED25519_SUCCESS; -# else - uchar rcheck[ 32 ]; - fd_ed25519_ge_tobytes( rcheck, R ); - return memcmp( rcheck, r, 32UL ) ? FD_ED25519_ERR_MSG : FD_ED25519_SUCCESS; -# endif -} - -#else /* AVX512 implementation */ - -/* Note: direct quotes from RFC 8032 are indicated by '//' style - comments where possible. */ - -#include "avx512/fd_r43x6_ge.h" - -void * -fd_ed25519_public_from_private( void * A, - void const * private_key, +uchar * FD_FN_SENSITIVE +fd_ed25519_public_from_private( uchar public_key [ static 32 ], + uchar const private_key[ static 32 ], fd_sha512_t * sha ) { - // 5.1.5. Key Generation + // RFC 8032 - Edwards-Curve Digital Signature Algorithm (EdDSA) // - // The private key is 32 octets (256 bits, corresponding to b) of - // cryptographically secure random data. See [RFC4086] for a - // discussion about randomness. + // 5.1.5. Key Generation // - // The 32-byte public key is generated by the following steps. + // The private key is 32 octets (256 bits, corresponding to b) of + // cryptographically secure random data. See [RFC4086] for a discussion + // about randomness. // - // 1. Hash the 32-byte private key using SHA-512, storing the digest - // in a 64-octet large buffer, denoted h. Only the lower 32 bytes - // are used for generating the public key. - - uchar h[ FD_SHA512_HASH_SZ ] __attribute__((aligned(64))); - fd_sha512_fini( fd_sha512_append( fd_sha512_init( sha ), private_key, 32UL ), h ); - - // 2. Prune the buffer: The lowest three bits of the first octet are - // cleared, the highest bit of the last octet is cleared, and the - // second highest bit of the last octet is set. + // The 32-byte public key is generated by the following steps. + // + // 1. Hash the 32-byte private key using SHA-512, storing the digest in + // a 64-octet large buffer, denoted h. Only the lower 32 bytes are + // used for generating the public key. - h[ 0] &= (uchar)248; - h[31] &= (uchar)63; - h[31] |= (uchar)64; + uchar s[ FD_SHA512_HASH_SZ ]; + fd_sha512_fini( fd_sha512_append( fd_sha512_init( sha ), private_key, 32UL ), s ); - /* WARNING! Some implementations do a mod L here (including the go - implementation but not OpenSSL). The standard doesn't indicate to - do this here but it does indicate to do it in the sign operation. - The standard does not explicitly indicate to do it in the verify - operation but it can be inferred following the sign operation, - and OpenSSL does it there. The standard is quite sloppy here. - Commenting out for now to match the standard and OpenSSL behavior. */ + // 2. Prune the buffer: The lowest three bits of the first octet are + // cleared, the highest bit of the last octet is cleared, and the + // second highest bit of the last octet is set. -//fd_ed25519_sc_reduce( h, h ); /* TODO: AVX-512 VERSION (THIS IS MOD _L_, NOT MOD P) */ + s[ 0] &= (uchar)0xF8; + s[31] &= (uchar)0x7F; + s[31] |= (uchar)0x40; - // 3. Interpret the buffer as the little-endian integer, forming a - // secret scalar s. Perform a fixed-base scalar multiplication - // [s]B. + // 3. Interpret the buffer as the little-endian integer, forming a + // secret scalar s. Perform a fixed-base scalar multiplication + // [s]B. - FD_R43X6_QUAD_DECL( sB ); - FD_R43X6_GE_SMUL_BASE( sB, h ); + fd_ed25519_point_t sB[1]; + fd_ed25519_scalar_mul_base_const_time( sB, s ); - // 4. The public key A is the encoding of the point [s]B. First, - // encode the y-coordinate (in the range 0 <= y < p) as a little- - // endian string of 32 octets. The most significant bit of the - // final octet is always zero. To form the encoding of the point - // [s]B, copy the least significant bit of the x coordinate to the - // most significant bit of the final octet. The result is the - // public key. + // 4. The public key A is the encoding of the point [s]B. First, + // encode the y-coordinate (in the range 0 <= y < p) as a little- + // endian string of 32 octets. The most significant bit of the + // final octet is always zero. To form the encoding of the point + // [s]B, copy the least significant bit of the x coordinate to the + // most significant bit of the final octet. The result is the + // public key. - FD_R43X6_GE_ENCODE( A, sB ); + fd_ed25519_point_tobytes( public_key, sB ); /* Sanitize */ - fd_memset( h, 0, FD_SHA512_HASH_SZ ); + fd_memset_explicit( s, 0, FD_SHA512_HASH_SZ ); fd_sha512_init( sha ); - return A; + return public_key; } -void * -fd_ed25519_sign( void * R, - void const * M, - ulong sz, - void const * A, - void const * private_key, +uchar * FD_FN_SENSITIVE +fd_ed25519_sign( uchar sig[ static 64 ], + uchar const msg[], /* msg_sz */ + ulong msg_sz, + uchar const public_key[ static 32 ], + uchar const private_key[ static 32 ], fd_sha512_t * sha ) { - // 5.1.6. Sign + // RFC 8032 - Edwards-Curve Digital Signature Algorithm (EdDSA) // - // The inputs to the signing procedure is the private key, a 32-octet - // string, and a message M of arbitrary size. For Ed25519ctx and - // Ed25519ph, there is additionally a context C of at most 255 octets - // and a flag F, 0 for Ed25519ctx and 1 for Ed25519ph. + // 5.1.6. Sign // - // 1. Hash the private key, 32 octets, using SHA-512. Let h denote - // the resulting digest. Construct the secret scalar s from the - // first half of the digest, and the corresponding public key A, - // as described in the previous section. Let prefix denote the - // second half of the hash digest, h[32],...,h[63]. - - /* TODO: this could be separated out if bulk signing with the same key - (would save about ~400 ns per signature). Likewise, batch sha - hashing for multiple messages in parallel could be done (the - message state after the initial append of the hash private key - would be cloned across all lanes). */ - - uchar s[ FD_SHA512_HASH_SZ ] __attribute__((aligned(64))); - fd_sha512_fini( fd_sha512_append( fd_sha512_init( sha ), private_key, 32UL ), s ); - - s[0 ] &= (uchar)248; - s[31] &= (uchar)63; - s[31] |= (uchar)64; - - uchar * prefix = s + 32; - - // 2. Compute SHA-512(dom2(F, C) || prefix || PH(M)), where M is the - // message to be signed. Interpret the 64-octet digest as a - // little-endian integer r. - - /* Note: 5.1: "Ed25519 is EdDSA instantiated with ... PH(x) | x - (i.e., the identity function) ... dom2(f,c) is the empty string.") + // The inputs to the signing procedure is the private key, a 32-octet + // string, and a message M of arbitrary size. For Ed25519ctx and + // Ed25519ph, there is additionally a context C of at most 255 octets + // and a flag F, 0 for Ed25519ctx and 1 for Ed25519ph. + // + // 1. Hash the private key, 32 octets, using SHA-512. Let h denote the + // resulting digest. Construct the secret scalar s from the first + // half of the digest, and the corresponding public key A, as + // described in the previous section. Let prefix denote the second + // half of the hash digest, h[32],...,h[63]. - TODO: it is infinitely sad we hash the message _twice_, once here - and then _again_ _below_ especially given _not_ doing such dubious - things _is_ _already_ _supported_. From 5.1 again: "For Ed25519ph, - phflag=1 and PH is SHA512 instead. That is, the input is hashed - using SHA-512 before signing with Ed25519." + uchar s[ FD_SHA512_HASH_SZ ]; + fd_sha512_fini( fd_sha512_append( fd_sha512_init( sha ), private_key, 32UL ), s ); + s[ 0] &= (uchar)0xF8; + s[31] &= (uchar)0x7F; + s[31] |= (uchar)0x40; + uchar * h = s + 32; - Such would speed this up further and, give how fast the AVX-512 - accelerated ECC math is, this is increasingly important to do. - And, if we really want high performance, ideally, PH would be a - something like a block parallel version of SHA256. This would - allow us to use both SHA-NI extensions for signing and then in a - way with tons of ILP at sub message granularity without any loss of - security. */ + /* public_key is an input */ - uchar r[ FD_SHA512_HASH_SZ ] __attribute__((aligned(64))); - fd_sha512_fini( fd_sha512_append( fd_sha512_append( fd_sha512_init( sha ), prefix, 32UL ), M, sz ), r ); + // 2. Compute SHA-512(dom2(F, C) || prefix || PH(M)), where M is the + // message to be signed. Interpret the 64-octet digest as a little- + // endian integer r. - // 3. Compute the point [r]B. For efficiency, do this by first - // reducing r modulo L, the group order of B. Let the string R be - // the encoding of this point. + uchar r[ FD_SHA512_HASH_SZ ]; + fd_sha512_fini( fd_sha512_append( fd_sha512_append( fd_sha512_init( sha ), h, 32UL ), msg, msg_sz ), r ); - fd_ed25519_sc_reduce( r, r ); /* TODO: AVX-512 VERSION (THIS IS MOD _L_, NOT MOD P) */ + // 3. Compute the point [r]B. For efficiency, do this by first + // reducing r modulo L, the group order of B. Let the string R be + // the encoding of this point. - FD_R43X6_QUAD_DECL( rB ); - FD_R43X6_GE_SMUL_BASE( rB, r ); - FD_R43X6_GE_ENCODE( R, rB ); + fd_curve25519_scalar_reduce( r, r ); /* reduce r mod L */ + fd_ed25519_point_t R[1]; + fd_ed25519_scalar_mul_base_const_time( R, r ); /* R = [r]B */ + fd_ed25519_point_tobytes( sig, R ); - // 4. Compute SHA512(dom2(F, C) || R || A || PH(M)), and interpret - // the 64-octet digest as a little-endian integer k. + // 4. Compute SHA512(dom2(F, C) || R || A || PH(M)), and interpret the + // 64-octet digest as a little-endian integer k. - uchar k[ FD_SHA512_HASH_SZ ] __attribute__((aligned(64))); + /* note: all inputs to k are public values */ + uchar k[ FD_SHA512_HASH_SZ ]; fd_sha512_fini( fd_sha512_append( fd_sha512_append( fd_sha512_append( fd_sha512_init( sha ), - R, 32UL ), A, 32UL ), M, sz ), k ); - - // 5. Compute S = (r + k * s) mod L. For efficiency, again reduce k - // modulo L first. + sig, 32UL ), public_key, 32UL ), msg, msg_sz ), k ); - uchar * S = ((uchar *)R) + 32; /* See step 6 below */ - - fd_ed25519_sc_reduce( k, k ); /* TODO: AVX-512 VERSION (THIS IS MOD _L_, NOT MOD P) */ - fd_ed25519_sc_muladd( S, k, s, r ); /* " */ - - // 6. Form the signature of the concatenation of R (32 octets) and the - // little-endian encoding of S (32 octets; the three most - // significant bits of the final octet are always zero). + // 5. Compute S = (r + k * s) mod L. For efficiency, again reduce k + // modulo L first. + // + // 6. Form the signature of the concatenation of R (32 octets) and the + // little-endian encoding of S (32 octets; the three most + // significant bits of the final octet are always zero). - /* Implicitly done in step 5 */ + fd_curve25519_scalar_reduce( k, k ); + fd_curve25519_scalar_muladd( ((uchar *)sig)+32, k, s, r ); /* Sanitize */ - fd_memset( r, 0, FD_SHA512_HASH_SZ ); - fd_memset( s, 0, FD_SHA512_HASH_SZ ); + fd_memset_explicit( s, 0, FD_SHA512_HASH_SZ ); + fd_memset_explicit( r, 0, FD_SHA512_HASH_SZ ); fd_sha512_init( sha ); - return R; + return sig; } int -fd_ed25519_verify( void const * M, - ulong sz, - void const * sig, - void const * A, +fd_ed25519_verify( uchar const msg[], /* msg_sz */ + ulong msg_sz, + uchar const sig[ static 64 ], + uchar const public_key[ static 32 ], fd_sha512_t * sha ) { - // 5.1.7. Verify + // RFC 8032 - Edwards-Curve Digital Signature Algorithm (EdDSA) // - // 1. To verify a signature on a message M using public key A, with F - // being 0 for Ed25519ctx, 1 for Ed25519ph, and if Ed25519ctx or - // Ed25519ph is being used, C being the context, first split the - // signature into two 32-octet halves. Decode the first half as a - // point R, and the second half as an integer S, in the range 0 <= - // s < L. Decode the public key A as point A'. If any of the - // decodings fail (including S being out of range), the signature - // is invalid. - - uchar const * r = (uchar const *)sig; /* First half */ - uchar const * s = r + 32; /* Second half */ - - /* Since it's public, we can do the S check in variable time and we - can also do it before the decodes. This is useful because it is - much cheaper to fail a bad S now than do (expensive and successful) - decodes of R and Aprime and fail L afterward. (We probably could - make it faster and constant time with some clever vectorization.) - - Section 5.1: L is 2^252 + 27742317777372353535851937790883648493 - - L is its little endian representation as 4 little endian ulongs. */ - - static ulong const L[4] = { 6346243789798364141UL, 1503914060200516822UL, 0L, 1152921504606846976UL }; - ulong S[4] __attribute__((aligned(32))); - memcpy( S, s, 32UL ); /* Guarantee S[*] is aligned (hopefully elided into an AVX copy) */ - int i; - for( i=3; i>=0; i-- ) { - if( FD_LIKELY ( S[i]L[i] ) ) return FD_ED25519_ERR_SIG; + // 5.1.7. Verify + // + // 1. To verify a signature on a message M using public key A, with F + // being 0 for Ed25519ctx, 1 for Ed25519ph, and if Ed25519ctx or + // Ed25519ph is being used, C being the context, first split the + // signature into two 32-octet halves. Decode the first half as a + // point R, and the second half as an integer S, in the range + // 0 <= s < L. Decode the public key A as point A'. If any of the + // decodings fail (including S being out of range), the signature is + // invalid. + + uchar const * r = sig; + uchar const * S = sig + 32; + + /* Check scalar s */ + if( FD_UNLIKELY( !fd_curve25519_scalar_validate( S ) )) { + return FD_ED25519_ERR_SIG; } - if( FD_UNLIKELY( i<0 ) ) return FD_ED25519_ERR_SIG; - - FD_R43X6_QUAD_DECL( Aprime ); - FD_R43X6_QUAD_DECL( R ); - int err = FD_R43X6_GE_DECODE2( Aprime,A, R,r ); - if( FD_UNLIKELY( err ) ) return err==-1 ? FD_ED25519_ERR_PUBKEY : FD_ED25519_ERR_SIG; - - /* The below small order checks are not part of the RFC 8032 but they - are needed to replicate behaviors of various implementations of the - standard (signature_malleability checks). TODO: Might be possible - to speed these up more by fusing with DECODE2 and/or maybe doing by - incorporating into the group equation test below. */ - if( FD_UNLIKELY( FD_R43X6_GE_IS_SMALL_ORDER( Aprime ) ) ) return FD_ED25519_ERR_PUBKEY; - if( FD_UNLIKELY( FD_R43X6_GE_IS_SMALL_ORDER( R ) ) ) return FD_ED25519_ERR_SIG; - - /* At this point, R in u44|u44|u44|u44, Aprime in u44|u44|u44|u44 */ - - // 2. Compute SHA512(dom2(F, C) || R || A || PH(M)), and interpret the - // 64-octet digest as a little-endian integer k. + /* Decompress public_key and point r, concurrently */ + fd_ed25519_point_t Aprime[1], R[1]; + int res = fd_ed25519_point_frombytes_2x( Aprime, public_key, R, r ); + + /* Check public key and point r: + 1. both public key and point r decompress successfully (RFC) + 2. both public key and point r are small order (verify_strict) + + There's another check that we currently do NOT enforce: + whether public key and point r are canonical. + Dalek 2.x (currently used by Agave) does NOT do any check. + Dalek 4.x checks that the point r is canonical, but accepts + a non canonical public key. + + Note: I couldn't find any test with non canonical points + (all tests are non canonical + low order, that are excluded by + the verify_strict rule). The reason is that to write such a + test one needs to know the discrete log of a non canonical point. + + The following code checks that r is canonical (we can add it + in when Agave switches to dalek 4.x). + + uchar compressed[ 32 ]; + fd_ed25519_affine_tobytes( compressed, R ); + if( FD_UNLIKELY( !fd_memeq( compressed, r, 32 ) ) ) { + return FD_ED25519_ERR_SIG; + } + */ + if( FD_UNLIKELY( res ) ) { + return res == 1 ? FD_ED25519_ERR_PUBKEY : FD_ED25519_ERR_SIG; + } + if( FD_UNLIKELY( fd_ed25519_affine_is_small_order(Aprime) ) ) { + return FD_ED25519_ERR_PUBKEY; + } + if( FD_UNLIKELY( fd_ed25519_affine_is_small_order(R) ) ) { + return FD_ED25519_ERR_SIG; + } - /* Note: spec is vague about which R to use here but it is pretty - clear from the sign implementation above that the encoded one (i.e. - r) is correct here. (The spec is somewhat sloppy here.) */ + // 2. Compute SHA512(dom2(F, C) || R || A || PH(M)), and interpret the + // 64-octet digest as a little-endian integer k. - uchar k[ FD_SHA512_HASH_SZ ]; + uchar k[ 64 ]; fd_sha512_fini( fd_sha512_append( fd_sha512_append( fd_sha512_append( fd_sha512_init( sha ), - r, 32UL ), A, 32UL ), M, sz ), k ); - - /* Note: the spec does not explicitly indicate whether k should be reduced - mod l here. However, it does indicate so when signing (Section 5.1.6 - step 5, page 14): "... For efficiency, again reduce k modulo L first." - This matches OpenSSL and sign implementation above. */ + r, 32UL ), public_key, 32UL ), msg, msg_sz ), k ); + fd_curve25519_scalar_reduce( k, k ); + + // 3. Check the group equation [8][S]B = [8]R + [8][k]A'. It's + // sufficient, but not required, to instead check [S]B = R + [k]A'. + + /* Compute R = [k](-A') + [S]B, with B base point. + Note: this is not the same as R = [-k]A' + [S]B, because the order + of A' is 8l (computing -k mod 8l would work). */ + fd_ed25519_point_t Rcmp[1]; + fd_ed25519_point_neg( Aprime, Aprime ); + fd_ed25519_double_scalar_mul_base( Rcmp, k, Aprime, S ); + + /* Compare R (computed) and R from signature. + Note: many implementations do this comparison by compressing Rcmd, + and compare it against the r buf as it appears in the signature. + This implicitly prevents non-canonical R. + However this also hides a field inv to compress Rcmp. + In our implementation we compare the points (see the comment + above on "Check public key and point r" for details). */ + if( FD_LIKELY( fd_ed25519_point_eq_z1( Rcmp, R ) ) ) { + return FD_ED25519_SUCCESS; + } + return FD_ED25519_ERR_MSG; +} - fd_ed25519_sc_reduce( k, k ); /* TODO: make AVX-512 accelerated version */ +int fd_ed25519_verify_batch_single_msg( uchar const msg[], /* msg_sz */ + ulong const msg_sz, + uchar const signatures[ static 64 ], /* 64 * batch_sz */ + uchar const pubkeys[ static 32 ], /* 32 * batch_sz */ + fd_sha512_t * shas[ 1 ], /* batch_sz */ + uchar const batch_sz ) { +#define MAX 16 + if( FD_UNLIKELY( batch_sz == 0 || batch_sz > MAX ) ) { + return FD_ED25519_ERR_SIG; + } - // 3. Check the group equation [8][S]B = [8]R + [8][k]A'. It's - // sufficient, but not required, to instead check [S]B = R + [k]A'. +#if 0 + /* Naive */ + for( uchar i=0; i using mul2 + + /* c = -1 */ + fd_f25519_t c[1]; + fd_f25519_set( c, fd_f25519_minus_one ); + + /* v = (c - r*D) * (r + D) */ + fd_f25519_t v[1], r_plus_d[1]; + fd_f25519_add( r_plus_d, r, fd_f25519_d ); + fd_f25519_mul( v, r, fd_f25519_d ); //-> using mul2 + // fd_f25519_mul2( v, r, fd_f25519_d, + // u, u, fd_f25519_one_minus_d_sq ); + fd_f25519_sub( v, c, v ); + fd_f25519_mul( v, v, r_plus_d ); + + /* (was_square, s) = SQRT_RATIO_M1(u, v) */ + fd_f25519_t s[1]; + uchar was_square = (uchar)fd_f25519_sqrt_ratio( s, u, v ); + + /* s_prime = -CT_ABS(s*r0) */ + fd_f25519_t s_prime[1]; + fd_f25519_neg_abs( s_prime, fd_f25519_mul( s_prime, s, r0 ) ); + + /* s = CT_SELECT(s IF was_square ELSE s_prime) */ + fd_f25519_if( s, was_square, s, s_prime ); + /* c = CT_SELECT(c IF was_square ELSE r) */ + fd_f25519_if( c, was_square, c, r ); + + /* N = c * (r - 1) * D_MINUS_ONE_SQ - v */ + fd_f25519_t n[1]; + fd_f25519_mul( n, c, fd_f25519_sub( n, r, fd_f25519_one ) ); + fd_f25519_sub( n, fd_f25519_mul( n, n, fd_f25519_d_minus_one_sq ), v ); + + /* w0 = 2 * s * v + w1 = N * SQRT_AD_MINUS_ONE + w2 = 1 - s^2 + w3 = 1 + s^2 */ + fd_f25519_t s2[1]; + fd_f25519_sqr( s2, s ); + fd_f25519_t w0[1], w1[1], w2[1], w3[1]; + fd_f25519_mul2( w0,s,v, w1,n,fd_f25519_sqrt_ad_minus_one ); + fd_f25519_add( w0, w0, w0 ); + // fd_f25519_mul( w1, n, sqrt_ad_minus_one ); + fd_f25519_sub( w2, fd_f25519_one, s2 ); + fd_f25519_add( w3, fd_f25519_one, s2 ); + + // fd_f25519_mul( h->X, w0, w3 ); + // fd_f25519_mul( h->Y, w2, w1 ); + // fd_f25519_mul( h->Z, w1, w3 ); + // fd_f25519_mul( h->T, w0, w2 ); + fd_f25519_t x[1], y[1], z[1], t[1]; + fd_f25519_mul4( x,w0,w3, y,w2,w1, z,w1,w3, t,w0,w2 ); + return fd_ed25519_point_from( h, x, y, z, t ); +} + +fd_ristretto255_point_t * +fd_ristretto255_hash_to_curve( fd_ristretto255_point_t * h, + uchar const s[ 64 ] ) { + fd_ristretto255_point_t p1[1]; + fd_ristretto255_point_t p2[1]; + + fd_ristretto255_map_to_curve( p1, s ); + fd_ristretto255_map_to_curve( p2, s+32 ); + + return fd_ristretto255_point_add(h, p1, p2); +} diff --git a/src/ballet/ed25519/fd_ristretto255.h b/src/ballet/ed25519/fd_ristretto255.h new file mode 100644 index 0000000000..50d4db7c09 --- /dev/null +++ b/src/ballet/ed25519/fd_ristretto255.h @@ -0,0 +1,137 @@ +#ifndef HEADER_fd_src_ballet_ed25519_fd_ristretto255_h +#define HEADER_fd_src_ballet_ed25519_fd_ristretto255_h + +/* fd_ristretto255.h provides the public ristretto255 group element + API. + + This API is specifically only provided for the Solana virtual machine + syscall sol_curve_group_op (slow!). It is guaranteed to be stable + irrespective of underlying backend chosen (ref, avx, etc...) + + All operations in this API should be assumed to take a variable + amount of time depending on inputs. (And thus should not be exposed + to secret data) */ + +#include "fd_curve25519.h" + +/* fd_ristretto255 provides APIs for the ristretto255 prime order group */ + +static const uchar fd_ristretto255_compressed_zero[ 32 ] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/* fd_ristretto255_point_t is a opaque handle to a ristretto255 group + element. Although it is the same type as an Ed25519 group element, + it is unsafe to mix Ed25519 point and ristretto point APIs. */ + +typedef fd_ed25519_point_t fd_ristretto255_point_t; + +#define fd_ristretto255_point_set_zero fd_ed25519_point_set_zero +#define fd_ristretto255_point_set fd_ed25519_point_set +#define fd_ristretto255_point_add fd_ed25519_point_add +#define fd_ristretto255_point_sub fd_ed25519_point_sub +#define fd_ristretto255_scalar_validate fd_ed25519_scalar_validate +#define fd_ristretto255_scalar_mul fd_ed25519_scalar_mul +#define fd_ristretto255_multi_scalar_mul fd_ed25519_multi_scalar_mul +#define fd_ristretto255_point_decompress fd_ristretto255_point_frombytes +#define fd_ristretto255_point_compress fd_ristretto255_point_tobytes + +FD_PROTOTYPES_BEGIN + +uchar * +fd_ristretto255_point_tobytes( uchar buf[ 32 ], + fd_ristretto255_point_t const * p ); + +/* fd_ristretto255_point_frombytes decompresses a 32-byte array into + an element of the ristretto group h. + It returns p on success, NULL on failure. */ + +fd_ristretto255_point_t * +fd_ristretto255_point_frombytes( fd_ristretto255_point_t * p, + uchar const buf[ 32 ] ); + +/* fd_ristretto255_point_validate checks if a 32-byte array represents + a valid element of the ristretto group h. + It returns 1 on success, 0 on failure. */ + +static inline int +fd_ristretto255_point_validate( uchar const buf[ 32 ] ) { + fd_ristretto255_point_t t[1]; + return !!fd_ristretto255_point_frombytes( t, buf ); +} + +/* fd_ristretto255_point_eq checks if two elements of the ristretto group + p and q are equal. + It returns 1 on success, 0 on failure. */ + +static inline int +fd_ristretto255_point_eq( fd_ristretto255_point_t * const p, + fd_ristretto255_point_t * const q ) { + // https://ristretto.group/details/equality.html + fd_f25519_t cmp[2]; + fd_f25519_t x[2], y[2], _z[2], _t[2]; + fd_ed25519_point_to( &x[0], &y[0], &_z[0], &_t[0], p ); + fd_ed25519_point_to( &x[1], &y[1], &_z[1], &_t[1], q ); + + fd_f25519_mul( &cmp[ 0 ], &x[0], &y[1] ); + fd_f25519_mul( &cmp[ 1 ], &x[1], &y[0] ); + int xx = fd_f25519_eq( &cmp[ 0 ], &cmp[ 1 ] ); + + fd_f25519_mul( &cmp[ 0 ], &x[0], &x[1] ); + fd_f25519_mul( &cmp[ 1 ], &y[0], &y[1] ); + int yy = fd_f25519_eq( &cmp[ 0 ], &cmp[ 1 ] ); + + return xx | yy; +} + +/* fd_ristretto255_point_eq_neg checks if two elements of the ristretto group + p and q are such that -p == q. This uses just 1 extra neg. + It returns 1 on success, 0 on failure. */ + +static inline int +fd_ristretto255_point_eq_neg( fd_ristretto255_point_t * const p, + fd_ristretto255_point_t * const q ) { + // https://ristretto.group/details/equality.html + fd_f25519_t neg[1]; + fd_f25519_t cmp[2]; + fd_f25519_t x[2], y[2], _z[2], _t[2]; + fd_ed25519_point_to( &x[0], &y[0], &_z[0], &_t[0], p ); + fd_ed25519_point_to( &x[1], &y[1], &_z[1], &_t[1], q ); + + fd_f25519_neg( neg, &x[0] ); + fd_f25519_mul( &cmp[ 0 ], neg, &y[1] ); + fd_f25519_mul( &cmp[ 1 ], &x[1], &y[0] ); + int xx = fd_f25519_eq( &cmp[ 0 ], &cmp[ 1 ] ); + + fd_f25519_mul( &cmp[ 0 ], neg, &x[1] ); + fd_f25519_mul( &cmp[ 1 ], &y[0], &y[1] ); + int yy = fd_f25519_eq( &cmp[ 0 ], &cmp[ 1 ] ); + + return xx | yy; +} + +/* fd_ristretto255_hash_to_curve computes an element h of the ristretto group + given an array s of 64-byte of uniformly random input (e.g., the output of a + hash function). + This function behaves like a random oracle. + It returns h. */ + +fd_ristretto255_point_t * +fd_ristretto255_hash_to_curve( fd_ristretto255_point_t * h, + uchar const s[ 64 ] ); + +/* fd_ristretto255_map_to_curve implements the elligato2 map for curve25519, + and computes an element h of the ristretto group given an array s of 32-byte + of uniformly random input (e.g., the output of a hash function). + This function does NOT behave like a random oracle, and is intended for + internal use. + It returns h. */ + +fd_ristretto255_point_t * +fd_ristretto255_map_to_curve( fd_ristretto255_point_t * h, + uchar const s[ 32 ] ); + +FD_PROTOTYPES_END + +#endif /* HEADER_fd_src_ballet_ed25519_fd_ristretto255_h */ diff --git a/src/ballet/ed25519/fd_x25519.c b/src/ballet/ed25519/fd_x25519.c index 0e64c0403f..3c9f40f089 100644 --- a/src/ballet/ed25519/fd_x25519.c +++ b/src/ballet/ed25519/fd_x25519.c @@ -1,173 +1,146 @@ #include "fd_x25519.h" +#include "fd_f25519.h" -#ifndef FD_X25519_IMPL -#if FD_HAS_AVX512 -#define FD_X25519_IMPL 1 -#else -#define FD_X25519_IMPL 0 -#endif -#endif +/* FD_X25519_VECTORIZE calls mul4 instead of sqr2+mul2, and similar. + Only useful if the underlying ops are actually vectorized and therefore + the cost of 4 muls is <= the cost of 2 sqr + 2 mul. */ +#define FD_X25519_VECTORIZE FD_HAS_AVX512 -#if FD_X25519_IMPL==0 /* Original scalar and AVX implementations */ - -#include "fd_ed25519_private.h" - -#ifndef FD_X25519_VECTORIZE -#if FD_ED25519_FE_IMPL==1 -#define FD_X25519_VECTORIZE 1 +/* FD_X25519_ALIGN aligns variables. */ +#if FD_HAS_AVX +#define FD_X25519_ALIGN __attribute__((aligned(32))) #else -#define FD_X25519_VECTORIZE 0 -#endif +#define FD_X25519_ALIGN #endif -/* fd_x25519_basepoint is the canonical Curve25519 base point. */ +/* + * Constant time primitives + */ -static uchar const fd_x25519_basepoint[ 32 ] = { 9 }; - -static void * -fd_x25519_scalar_mul( void * dst, - void const * scalar, - void const * point ) { - - uchar e[ 32UL ]; - memcpy( e, scalar, 32UL ); - e[ 0 ] = (uchar)( e[ 0 ] & 0xf8 ); - e[ 31 ] = (uchar)( e[ 31 ] & 0x7f ); - e[ 31 ] = (uchar)( e[ 31 ] | 0x40 ); +static inline int FD_FN_SENSITIVE +fd_x25519_is_zero_const_time( uchar const point[ 32 ] ) { + //TODO: this is generally done by (x)or-ing the limbs, see also RFC 7748, page 13. + int is_zero = 1; + for( ulong i=0UL; i<32UL; i++ ) { + is_zero &= ( !point[ i ] ); + } + return is_zero; +} - fd_ed25519_fe_t x1; - fd_ed25519_fe_frombytes( &x1, point ); +#if !FD_HAS_AVX512 - fd_ed25519_fe_t x2; - fd_ed25519_fe_1( &x2 ); +static inline void FD_FN_SENSITIVE +fd_x25519_montgomery_ladder( fd_f25519_t * x2, + fd_f25519_t * z2, + fd_f25519_t const * x1, + uchar const * secret_scalar ) { + /* memory areas that will contain (partial) secrets and will be cleared at the end */ + fd_f25519_t secret_tmp_f[4]; + int swap = 0; + int b = 0; - fd_ed25519_fe_t x3; - fd_ed25519_fe_copy( &x3, &x1 ); + /* human-readable variables */ + fd_f25519_t * x3 = &secret_tmp_f[0]; + fd_f25519_t * z3 = &secret_tmp_f[1]; + fd_f25519_t * tmp0 = &secret_tmp_f[2]; + fd_f25519_t * tmp1 = &secret_tmp_f[3]; - fd_ed25519_fe_t z2={0}; - fd_ed25519_fe_t z3; - fd_ed25519_fe_1( &z3 ); + fd_f25519_set( x2, fd_f25519_one ); + fd_f25519_set( z2, fd_f25519_zero ); - fd_ed25519_fe_t tmp0; - fd_ed25519_fe_t tmp1; + /* use fd_f25519_add to reduce x1 mod p. it's prob unnecessary but not worth the risk. */ + fd_f25519_add( x3, fd_f25519_zero, x1 ); + fd_f25519_set( z3, fd_f25519_one ); - int swap = 0; for( long pos=254UL; pos>=0; pos-- ) { - int b = e[ pos / 8L ] >> ( pos & 7L ); - b &= 1; + b = (secret_scalar[ pos / 8L ] >> ( pos & 7L )) & 1; swap ^= b; - fd_ed25519_fe_swap_if( &x2, &x3, swap ); - fd_ed25519_fe_swap_if( &z2, &z3, swap ); + fd_f25519_swap_if( x2, x3, swap ); + fd_f25519_swap_if( z2, z3, swap ); swap = b; - fd_ed25519_fe_sub( &tmp0, &x3, &z3 ); - fd_ed25519_fe_sub( &tmp1, &x2, &z2 ); - fd_ed25519_fe_add( &x2, &x2, &z2 ); - fd_ed25519_fe_add( &z2, &x3, &z3 ); + fd_f25519_sub_nr( tmp0, x3, z3 ); + fd_f25519_sub_nr( tmp1, x2, z2 ); + fd_f25519_add_nr( x2, x2, z2 ); + fd_f25519_add_nr( z2, x3, z3 ); # if FD_X25519_VECTORIZE /* Note that okay to use less efficient squaring because we get it for free in unused vector lanes */ - fd_ed25519_fe_mul4( &z3, &tmp0, &x2, - &z2, &z2, &tmp1, - &tmp0, &tmp1, &tmp1, - &tmp1, &x2, &x2 ); + fd_f25519_mul4( z3, tmp0, x2, + z2, z2, tmp1, + tmp0, tmp1, tmp1, + tmp1, x2, x2 ); # else /* Use more efficient squaring if scalar implementation */ - fd_ed25519_fe_mul( &z3, &tmp0, &x2 ); - fd_ed25519_fe_mul( &z2, &z2, &tmp1 ); - fd_ed25519_fe_sq ( &tmp0, &tmp1 ); - fd_ed25519_fe_sq ( &tmp1, &x2 ); + fd_f25519_mul2( z3, tmp0, x2, + z2, z2, tmp1 ); + fd_f25519_sqr2( tmp0, tmp1, + tmp1, x2 ); # endif - fd_ed25519_fe_add( &x3, &z3, &z2 ); - fd_ed25519_fe_sub( &z2, &z3, &z2 ); + fd_f25519_add_nr( x3, z3, z2 ); + fd_f25519_sub_nr( z2, z3, z2 ); # if FD_X25519_VECTORIZE /* See note above */ - fd_ed25519_fe_mul2( &x2, &tmp1, &tmp0, - &z2, &z2, &z2 ); + fd_f25519_mul2( x2, tmp1, tmp0, + z2, z2, z2 ); # else - fd_ed25519_fe_mul( &x2, &tmp1, &tmp0 ); - fd_ed25519_fe_sq ( &z2, &z2 ); + fd_f25519_mul( x2, tmp1, tmp0 ); + fd_f25519_sqr( z2, z2 ); # endif - fd_ed25519_fe_sub( &tmp1, &tmp1, &tmp0 ); + fd_f25519_sub_nr( tmp1, tmp1, tmp0 ); + + fd_f25519_mul_121666( z3, tmp1 ); - fd_ed25519_fe_mul121666( &z3, &tmp1 ); - fd_ed25519_fe_add( &tmp0, &tmp0, &z3 ); + fd_f25519_add_nr( tmp0, tmp0, z3 ); # if FD_X25519_VECTORIZE /* See note above */ - fd_ed25519_fe_mul3( &x3, &x3, &x3, - &z3, &x1, &z2, - &z2, &tmp1, &tmp0 ); + fd_f25519_mul3( x3, x3, x3, + z3, x1, z2, + z2, tmp0, tmp1 ); # else - fd_ed25519_fe_sq ( &x3, &x3 ); - fd_ed25519_fe_mul( &z3, &x1, &z2 ); - fd_ed25519_fe_mul( &z2, &tmp1, &tmp0 ); + fd_f25519_sqr ( x3, x3 ); + fd_f25519_mul2( z3, x1, z2, + z2, tmp1, tmp0 ); # endif } - fd_ed25519_fe_swap_if( &x2, &x3, swap ); - fd_ed25519_fe_swap_if( &z2, &z3, swap ); + fd_f25519_swap_if( x2, x3, swap ); + fd_f25519_swap_if( z2, z3, swap ); - fd_ed25519_fe_invert( &z2, &z2 ); - fd_ed25519_fe_mul( &x2, &x2, &z2 ); - - fd_ed25519_fe_tobytes( (uchar *)dst, &x2 ); - return dst; -} + /* Sanitize */ -void * -fd_x25519_public( void * self_public_key, - void const * self_private_key ) { - fd_x25519_exchange( self_public_key, self_private_key, fd_x25519_basepoint ); - return self_public_key; + fd_memset_explicit( secret_tmp_f, 0, sizeof(secret_tmp_f) ); + fd_memset_explicit( &b, 0, sizeof(int) ); + fd_memset_explicit( &swap, 0, sizeof(int) ); } +#else -void * -fd_x25519_exchange( void * secret, - void const * self_private_key, - void const * peer_public_key ) { - - fd_x25519_scalar_mul( secret, self_private_key, peer_public_key ); - uchar * out = (uchar *)secret; - - /* Reject low order points */ - int is_zero = 1; - for( ulong i=0UL; i<32UL; i++ ) - is_zero &= ( !out[ i ] ); - if( FD_UNLIKELY( is_zero ) ) - return NULL; - - return out; -} - -#else /* AVX-512 accelerated implementation */ - -#include "avx512/fd_r43x6.h" - -/* IETF RFC 7748 Section 5 (page 9) */ - -static void * -fd_x25519_scalar_mul( void * _r, - void const * _k, - void const * _u ) { - uchar const * k = (uchar const *)_k; - - fd_r43x6_t u = fd_r43x6_unpack( wv_ldu( _u ) ); // in u44 - +/* This is the "transposed" version of the Montgomery ladder above. + Experimentally, this is 15-20% faster on AVX-512. */ +static inline void FD_FN_SENSITIVE +fd_x25519_montgomery_ladder( fd_f25519_t * x2, + fd_f25519_t * z2, + fd_f25519_t const * x1, + uchar const * secret_scalar ) { FD_R43X6_QUAD_DECL( U ); FD_R43X6_QUAD_DECL( Q ); + FD_R43X6_QUAD_DECL( P ); FD_R43X6_QUAD_PACK( U, fd_r43x6_zero(), fd_r43x6_zero(), fd_r43x6_zero(), - u ); // x_1 = u, in u44 + x1->el ); // x_1 = u, in u44 FD_R43X6_QUAD_PACK( Q, fd_r43x6_one(), // x_2 = 1, in u44 fd_r43x6_zero(), // z_2 = 0, in u44 - u, // x_3 = u, in u44 + x1->el, // x_3 = u, in u44 fd_r43x6_one() ); // z_3 = 1, in u44 int swap = 0; + int k_t = 0; + wwl_t perm; + fd_r43x6_t AA, E, F, G, H, GG; for( int t=254UL; t>=0; t-- ) { // For t = bits-1 down to 0: /* At this point, Q and U in u44|u44|u44|u44 */ - int k_t = (k[t>>3] >> (t&7)) & 1; // k_t = (k >> t) & 1; + k_t = (secret_scalar[ t / 8L ] >> ( t & 7L )) & 1; // k_t = (k >> t) & 1; swap ^= k_t; // swap ^= k_t - wwl_t perm = wwl_if( (-swap) & 0xff, wwl( 2L,3L,0L,1L, 6L,7L,4L,5L ), wwl( 0L,1L,2L,3L, 4L,5L,6L,7L ) ); + perm = wwl_if( (-swap) & 0xff, wwl( 2L,3L,0L,1L, 6L,7L,4L,5L ), wwl( 0L,1L,2L,3L, 4L,5L,6L,7L ) ); Q03 = wwl_permute( perm, Q03 ); // (x_2, x_3) = cswap(swap, x_2, x_3) Q14 = wwl_permute( perm, Q14 ); // (z_2, z_3) = cswap(swap, z_2, z_3) Q25 = wwl_permute( perm, Q25 ); @@ -176,20 +149,16 @@ fd_x25519_scalar_mul( void * _r, /* These operations are exactly from the RFC but have been reordered slightly to make it easier to extract ILP. */ - FD_R43X6_QUAD_DECL( P ); - fd_r43x6_t AA, E, F, G, H, GG; - FD_R43X6_QUAD_PERMUTE ( P, 0,0,2,2, Q ); // A = x_2 + z_2, P = x_2|x_2|x_3 |x_3, in u44|u44|u44|u44 FD_R43X6_QUAD_PERMUTE ( Q, 1,1,3,3, Q ); // B = x_2 - z_2, Q = z_2|z_2|z_3 |z_3, in u44|u44|u44|u44 FD_R43X6_QUAD_LANE_ADD_FAST( P, P, 1,0,1,0, P, Q ); // C = x_3 + z_3, P = A |x_2|C |x_3, in u45|u44|u45|u44 FD_R43X6_QUAD_LANE_SUB_FAST( P, P, 0,1,0,1, P, Q ); // D = x_3 - z_3, P = A |B |C |D, in u45|s44|u45|s44 - FD_R43X6_QUAD_FOLD_SIGNED ( P, P ); // AA = A^2, P = A |B |C |D, in u44|u44|u44|u44 FD_R43X6_QUAD_PERMUTE ( Q, 0,1,1,0, P ); // BB = B^2, P = A |B |B |A, in u44|u44|u44|u44 FD_R43X6_QUAD_MUL_FAST ( P, P, Q ); // DA = D * A, P = AA |BB |CB |DA, in u62|u62|u62|u62 + FD_R43X6_QUAD_FOLD_SIGNED ( P, P ); // DA = D * A, P = AA |BB |CB |DA, in u44|u44|u44|u44 FD_R43X6_QUAD_PERMUTE ( Q, 1,0,3,2, P ); // CB = C * B, Q = BB |AA |DA |CB, in u62|u62|u62|u62 FD_R43X6_QUAD_LANE_SUB_FAST( P, P, 0,1,0,1, Q, P ); // E = AA-BB, P = AA |E |CB |CB-DA, in u62|s62|u62|s62 FD_R43X6_QUAD_LANE_ADD_FAST( P, P, 0,0,1,0, P, Q ); // P = AA |E |DA+CB|CB-DA, in u62|s62|u63|s62 - FD_R43X6_QUAD_FOLD_SIGNED ( P, P ); // P = AA |E |DA+CB|CB-DA, in u44|u44|u44|u44 FD_R43X6_QUAD_LANE_IF ( Q, 0,1,1,0, P, Q ); // Q = BB |E |DA+CB|CB, in u62|u44|u44|u62 FD_R43X6_QUAD_LANE_IF ( Q, 0,0,0,1, U, Q ); // x_3 = (DA + CB)^2, Q = BB |E |DA+CB|x_1, in u62|u44|u44|u44 FD_R43X6_QUAD_UNPACK ( AA, E, F, G, P ); @@ -197,57 +166,143 @@ fd_x25519_scalar_mul( void * _r, GG = fd_r43x6_sqr_fast( G ); // GG = (DA - CB)^2, in u61 FD_R43X6_QUAD_PACK ( P, AA, H, F, GG ); // z_2 = E * (AA + a24 * E), P = AA |H |DA+CB|GG, in u44|u60|u44|u61 FD_R43X6_QUAD_FOLD_UNSIGNED( P, P ); // P = AA |H |DA+CB|GG, in u44|u44|u44|u44 - FD_R43X6_QUAD_FOLD_UNSIGNED( Q, Q ); // Q = BB |AA |DA |CB, in u44|u44|u44|u44 FD_R43X6_QUAD_MUL_FAST ( P, P, Q ); // z_3 = x_1 * (DA - CB)^2, Q = x_2|z_2|x_3 |z_3, in u62|u62|u62|u62 FD_R43X6_QUAD_FOLD_UNSIGNED( Q, P ); // Q = x_2|z_2|x_3 |z_3, in u44|u44|u44|u44 } /* At this point, Q in u44|u44|u44|u44 */ - - wwl_t perm = wwl_if( (-swap) & 0xff, wwl( 2L,3L,0L,1L, 6L,7L,4L,5L ), wwl( 0L,1L,2L,3L, 4L,5L,6L,7L ) ); + perm = wwl_if( (-swap) & 0xff, wwl( 2L,3L,0L,1L, 6L,7L,4L,5L ), wwl( 0L,1L,2L,3L, 4L,5L,6L,7L ) ); Q03 = wwl_permute( perm, Q03 ); // (x_2, x_3) = cswap(swap, x_2, x_3) Q14 = wwl_permute( perm, Q14 ); // (z_2, z_3) = cswap(swap, z_2, z_3) Q25 = wwl_permute( perm, Q25 ); - fd_r43x6_t x_2, z_2, x_3, z_3; - FD_R43X6_QUAD_UNPACK( x_2, z_2, x_3, z_3, Q ); - (void)x_3; (void)z_3; - wv_stu( _r, fd_r43x6_pack( fd_r43x6_mod_unreduced( fd_r43x6_mul( x_2, fd_r43x6_invert( z_2 ) ) ) ) ); - return _r; // Return x_2 * (z_2^(p - 2)) + FD_R43X6_QUAD_UNPACK( x2->el, z2->el, E, F, Q ); + + /* Sanitize */ + + fd_memset_explicit( &P03, 0, sizeof(wwl_t) ); + fd_memset_explicit( &P14, 0, sizeof(wwl_t) ); + fd_memset_explicit( &P25, 0, sizeof(wwl_t) ); + fd_memset_explicit( &U03, 0, sizeof(wwl_t) ); + fd_memset_explicit( &U14, 0, sizeof(wwl_t) ); + fd_memset_explicit( &U25, 0, sizeof(wwl_t) ); + fd_memset_explicit( &Q03, 0, sizeof(wwl_t) ); + fd_memset_explicit( &Q14, 0, sizeof(wwl_t) ); + fd_memset_explicit( &Q25, 0, sizeof(wwl_t) ); + fd_memset_explicit( &AA, 0, sizeof(wwl_t) ); + fd_memset_explicit( &E, 0, sizeof(wwl_t) ); + fd_memset_explicit( &F, 0, sizeof(wwl_t) ); + fd_memset_explicit( &G, 0, sizeof(wwl_t) ); + fd_memset_explicit( &H, 0, sizeof(wwl_t) ); + fd_memset_explicit( &GG, 0, sizeof(wwl_t) ); + fd_memset_explicit( &perm, 0, sizeof(wwl_t) ); + fd_memset_explicit( &swap, 0, sizeof(int) ); + fd_memset_explicit( &k_t, 0, sizeof(int) ); + } +#endif -void * -fd_x25519_exchange( void * secret, - void const * self_private_key, - void const * peer_public_key ) { +/* + * X25519 Protocol + */ - /* IETF RFC 7748 Section 5 (page 8) decodeScalar25519 (TODO: VECTORIZE?) */ +static inline void FD_FN_SENSITIVE +fd_x25519_scalar_mul_const_time( uchar out[ 32 ], + uchar const * secret_scalar, + fd_f25519_t const * point_x ) { + fd_f25519_t x2[1], z2[1]; - uchar scalar[ 32 ] __attribute__((aligned(32))); - memcpy( scalar, self_private_key, 32UL ); - scalar[ 0 ] = (uchar)( scalar[ 0 ] & (uchar)248 ); - scalar[ 31 ] = (uchar)( scalar[ 31 ] & (uchar)127 ); - scalar[ 31 ] = (uchar)( scalar[ 31 ] | (uchar) 64 ); + fd_x25519_montgomery_ladder( x2, z2, point_x, secret_scalar ); - fd_x25519_scalar_mul( secret, scalar, peer_public_key ); + fd_f25519_inv( z2, z2 ); + fd_f25519_mul( x2, x2, z2 ); - return fd_ptr_if( wc_any( wv_to_wc( wv_ldu( secret ) ) ), secret, NULL ); /* Reject low order points */ + fd_f25519_tobytes( out, x2 ); } -void * -fd_x25519_public( void * self_public_key, - void const * self_private_key ) { +static const uchar fd_x25519_basepoint[ 32 ] FD_X25519_ALIGN = { 9 }; +uchar * FD_FN_SENSITIVE +fd_x25519_public( uchar self_public_key [ 32 ], + uchar const self_private_key[ 32 ] ) { /* IETF RFC 7748 Section 4.1 (page 3) */ + return fd_x25519_exchange( self_public_key, self_private_key, fd_x25519_basepoint ); +} - static uchar const basepoint_u[ 32 ] __attribute__((aligned(32))) = { - (uchar)9, (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, - (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, - (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, - (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, (uchar)0, - }; +uchar * FD_FN_SENSITIVE +fd_x25519_exchange( uchar shared_secret [ 32 ], + uchar const self_private_key[ 32 ], + uchar const peer_public_key [ 32 ] ) { + + /* Memory areas that will contain secrets */ + uchar secret_scalar[ 32UL ] FD_X25519_ALIGN; + + /* Public local variables */ + fd_f25519_t peer_public_key_point_u[1]; + + // RFC 7748 - Elliptic Curves for Security + // + // 5. The X25519 and X448 Functions + // + // The "X25519" and "X448" functions perform scalar multiplication on + // the Montgomery form of the above curves. (This is used when + // implementing Diffie-Hellman.) The functions take a scalar and a + // u-coordinate as inputs and produce a u-coordinate as output. + // Although the functions work internally with integers, the inputs and + // outputs are 32-byte strings (for X25519) or 56-byte strings (for + // X448) and this specification defines their encoding. + + // The u-coordinates are elements of the underlying field GF(2^255 - 19) + // or GF(2^448 - 2^224 - 1) and are encoded as an array of bytes, u, in + // little-endian order such that u[0] + 256*u[1] + 256^2*u[2] + ... + + // 256^(n-1)*u[n-1] is congruent to the value modulo p and u[n-1] is + // minimal. When receiving such an array, implementations of X25519 + // (but not X448) MUST mask the most significant bit in the final byte. + // This is done to preserve compatibility with point formats that + // reserve the sign bit for use in other protocols and to increase + // resistance to implementation fingerprinting. + + // Implementations MUST accept non-canonical values and process them as + // if they had been reduced modulo the field prime. The non-canonical + // values are 2^255 - 19 through 2^255 - 1 for X25519 and 2^448 - 2^224 + // - 1 through 2^448 - 1 for X448. + + /* From the text above: + 1. When receiving such an array, implementations of X25519 [...] + MUST mask the most significant bit in the final byte + >> this is done by fd_f25519_frombytes + 2. Implementations MUST accept non-canonical values + >> no extra check needed */ + fd_f25519_frombytes( peer_public_key_point_u, peer_public_key ); + + // Scalars are assumed to be randomly generated bytes. For X25519, in + // order to decode 32 random bytes as an integer scalar, set the three + // least significant bits of the first byte and the most significant bit + // of the last to zero, set the second most significant bit of the last + // byte to 1 and, finally, decode as little-endian. This means that the + // resulting integer is of the form 2^254 plus eight times a value + // between 0 and 2^251 - 1 (inclusive). Likewise, for X448, set the two + // least significant bits of the first byte to 0, and the most + // significant bit of the last byte to 1. This means that the resulting + // integer is of the form 2^447 plus four times a value between 0 and + // 2^445 - 1 (inclusive). + + /* decodeScalar25519 + note: e need to copy the private key, because we need to sanitize it. */ + memcpy( secret_scalar, self_private_key, 32UL ); + secret_scalar[ 0] &= (uchar)0xF8; + secret_scalar[31] &= (uchar)0x7F; + secret_scalar[31] |= (uchar)0x40; + + fd_x25519_scalar_mul_const_time( shared_secret, secret_scalar, peer_public_key_point_u ); + + /* Sanitize */ + fd_memset_explicit( secret_scalar, 0, 32UL ); - return fd_x25519_exchange( self_public_key, self_private_key, basepoint_u ); -} + /* Reject low order points */ + if( FD_UNLIKELY( fd_x25519_is_zero_const_time( shared_secret ) ) ) { + return NULL; + } -#endif + return shared_secret; +} diff --git a/src/ballet/ed25519/fd_x25519.h b/src/ballet/ed25519/fd_x25519.h index 4aa58da405..309e5c0e47 100644 --- a/src/ballet/ed25519/fd_x25519.h +++ b/src/ballet/ed25519/fd_x25519.h @@ -40,25 +40,23 @@ FD_PROTOTYPES_BEGIN public key generated locally using this function as the peer_public_key input to fd_x25519_exchange. */ -void * -fd_x25519_public( void * self_public_key, - void const * self_private_key ); +uchar * FD_FN_SENSITIVE +fd_x25519_public( uchar self_public_key [ 32 ], + uchar const self_private_key[ 32 ] ); /* fd_x25519_exchange computes a shared secret given an arbitrary 32 - byte secret at self_private_key and an X25519 public key at - peer_public_key. On success, writes 32 bytes to shared_secret and - returns shared_secret. On failure, returns NULL and leaves the - contents of shared_secret undefined. Reasons for failure include that - peer_public_key is a low order curve point. (This is never the case - when using fd_x25519_public. However, peer_public_key typically is - received from an untrusted network transport, such as the beginning - of a TLS handshake, and thus may have been tampered with by an - attacker) */ - -void * -fd_x25519_exchange( void * shared_secret, - void const * self_private_key, - void const * peer_public_key ); + byte secret at self_private_key and an X25519 public key at peer_public_key. + On success, writes 32 bytes to shared_secret and returns shared_secret. + On failure, writes 32 bytes of 0s to shared_secret and returns NULL. + Reasons for failure include if peer_public_key is a low order curve point. + (This is never the case when using fd_x25519_public. However, peer_public_key + is received from an untrusted network transport, such as the beginning + of a TLS handshake, and thus is under the attacker's control.) */ + +uchar * FD_FN_SENSITIVE +fd_x25519_exchange( uchar shared_secret [ 32 ], + uchar const self_private_key[ 32 ], + uchar const peer_public_key [ 32 ] ); FD_PROTOTYPES_END diff --git a/src/ballet/ed25519/fuzz_ed25519_sigverify_diff.c b/src/ballet/ed25519/fuzz_ed25519_sigverify_diff.c new file mode 100644 index 0000000000..8c2ded1bb0 --- /dev/null +++ b/src/ballet/ed25519/fuzz_ed25519_sigverify_diff.c @@ -0,0 +1,102 @@ +#if !FD_HAS_HOSTED +#error "This target requires FD_HAS_HOSTED" +#endif + +#include +#include +#include +#include + +#include "../../util/fd_util.h" +#include "../../util/sanitize/fd_fuzz.h" +#include "fd_ed25519.h" + +typedef int +(* verify_fn_t)( uchar const * msg, + ulong sz, + uchar const * sig, + uchar const * pub ); + +static union { + verify_fn_t fn; + void * ptr; +} verify_fn; + +typedef int +(* sign_fn_t)( uchar * sig, + uchar const * msg, + ulong sz, + uchar const * pub, + uchar const * prv ); + +static union { + sign_fn_t fn; + void * ptr; +} sign_fn; + + +int +LLVMFuzzerInitialize( int * argc, + char *** argv ) { + /* Set up shell without signal handlers */ + putenv( "FD_LOG_BACKTRACE=0" ); + fd_boot( argc, argv ); + atexit( fd_halt ); + + void * dalek = dlopen( "contrib/ed25519/dalek_target/target/x86_64-unknown-linux-gnu/release/libdalek_target.so", RTLD_LAZY ); + if( FD_UNLIKELY( !dalek ) ) + FD_LOG_CRIT(( "%s", dlerror() )); + + verify_fn.ptr = dlsym( dalek, "ed25519_dalek_verify" ); + if( FD_UNLIKELY( !verify_fn.ptr ) ) + FD_LOG_CRIT(( "%s", dlerror() )); + + sign_fn.ptr = dlsym( dalek, "ed25519_dalek_sign" ); + if( FD_UNLIKELY( !sign_fn.ptr ) ) + FD_LOG_CRIT(( "%s", dlerror() )); + + return 0; +} + +struct verification_test { + uchar prv[ 32 ]; + uchar sig[ 64 ]; + uchar msg[ ]; +}; +typedef struct verification_test verification_test_t; + +int +LLVMFuzzerTestOneInput( uchar const * data, + ulong size ) { + if( FD_UNLIKELY( size<96UL ) ) return -1; + + verification_test_t * const test = ( verification_test_t * const ) data; + ulong sz = size-96UL; + + fd_sha512_t _sha[1]; + fd_sha512_t *sha = fd_sha512_join( fd_sha512_new( _sha ) ); + + uchar pub[ 32 ]; + fd_ed25519_public_from_private( pub, test->prv, sha ); + + /* test that C and Rust create the same signature */ + uchar sigC[ 64 ]; + uchar sigR[ 64 ]; + uchar * sig_resultC = fd_ed25519_sign( sigC, test->msg, sz, pub, test->prv, sha ); + int sig_resultR = sign_fn.fn( sigR, test->msg, sz, pub, test->prv ); + assert( sig_resultC == sigC ); + assert( sig_resultR == 0 ); + assert( fd_memeq( sigC, sigR, 64UL ) ); + + /* test that C and Rust successfully verify this signature */ + int ok0 = fd_ed25519_verify( test->msg, sz, sigC, pub, sha ) == FD_ED25519_SUCCESS; + int ok1 = verify_fn.fn( test->msg, sz, sigC, pub ) == 0; + assert( ok0 ); + assert( ok1 ); + + /* test that C and Rust return the same result on a random sig */ + ok0 = fd_ed25519_verify( test->msg, sz, test->sig, pub, sha ) == FD_ED25519_SUCCESS; + ok1 = verify_fn.fn( test->msg, sz, test->sig, pub ) == 0; + assert( ok0==ok1 ); + return 0; +} diff --git a/src/ballet/ed25519/fuzz_ed25519_verify.c b/src/ballet/ed25519/fuzz_ed25519_verify.c index 855665a466..0f30a264a0 100644 --- a/src/ballet/ed25519/fuzz_ed25519_verify.c +++ b/src/ballet/ed25519/fuzz_ed25519_verify.c @@ -42,7 +42,7 @@ LLVMFuzzerTestOneInput( uchar const * data, int result = fd_ed25519_verify( test->msg, sz, test->sig, test->pub, sha ); assert( result != FD_ED25519_SUCCESS ); - + FD_FUZZ_MUST_BE_COVERED; return 0; } diff --git a/src/ballet/ed25519/ref/fd_curve25519.c b/src/ballet/ed25519/ref/fd_curve25519.c new file mode 100644 index 0000000000..cbdc47d80c --- /dev/null +++ b/src/ballet/ed25519/ref/fd_curve25519.c @@ -0,0 +1,249 @@ +#include "../fd_curve25519.h" + +/* + * Add + */ + +/* fd_ed25519_point_add_with_opts computes r = a + b, and returns r. + + https://eprint.iacr.org/2008/522 + Sec 4.2, 4-Processor Montgomery addition and doubling. + + This implementation includes several optional optimizations + that are used for speeding up scalar multiplication: + + - b_Z_is_one, if b->Z == 1 (affine, or decompressed), we can skip 1mul + + - b_is_precomputed, since the scalar mul loop typically accumulates + points from a table, we can pre-compute kT into the table points and + therefore skip 1mul in during the loop. + + - skip_last_mul, since dbl can be computed with just (X, Y, Z) + and doesn't need T, we can skip the last 4 mul and selectively + compute (X, Y, Z) or (X, Y, Z, T) during the scalar mul loop. + */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_add_with_opts( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b, + int const b_Z_is_one, + int const b_is_precomputed, + int const skip_last_mul ) { + fd_f25519_t r1[1], r2[1], r3[1], r4[1]; + fd_f25519_t r5[1], r6[1], r7[1], r8[1]; + fd_f25519_t t[1]; + fd_f25519_t const *r2p = r2, *r4p = r4; + + fd_f25519_sub_nr( r1, a->Y, a->X ); + fd_f25519_add_nr( r3, a->Y, a->X ); + +#if CURVE25519_PRECOMP_XY + if (b_is_precomputed) { + r2p = b->X; + r4p = b->Y; + } else { + fd_f25519_sub_nr( r2, b->Y, b->X ); + fd_f25519_add_nr( r4, b->Y, b->X ); + } +#else + fd_f25519_sub_nr( r2, b->Y, b->X ); + fd_f25519_add_nr( r4, b->Y, b->X ); +#endif + + /* if b->Z == 1, save 1mul */ + if( b_Z_is_one ) { + fd_f25519_mul3( r5, r1, r2p, + r6, r3, r4p, + r7, a->T, b->T ); + fd_f25519_add( r8, a->Z, a->Z ); + } else { + fd_f25519_add_nr( t, a->Z, a->Z ); + fd_f25519_mul4( r5, r1, r2p, + r6, r3, r4p, + r7, a->T, b->T, + r8, t, b->Z ); + } /* b_Z_is_one */ + + /* if b->T actually contains k*b->T, save 1mul */ + if( !b_is_precomputed ) { + fd_f25519_mul( r7, r7, fd_f25519_k ); + } + + /* skip last mul step, and use fd_ed25519_point_add_final_mul + or fd_ed25519_point_add_final_mul_projective instead. */ + if( skip_last_mul ) { + /* store r1, r2, r3, r4 resp. in X, Y, Z, T */ + fd_f25519_sub_nr( r->X, r6, r5 ); + fd_f25519_sub_nr( r->Y, r8, r7 ); + fd_f25519_add_nr( r->Z, r8, r7 ); + fd_f25519_add_nr( r->T, r6, r5 ); + } else { + fd_f25519_sub_nr( r1, r6, r5 ); + fd_f25519_sub_nr( r2, r8, r7 ); + fd_f25519_add_nr( r3, r8, r7 ); + fd_f25519_add_nr( r4, r6, r5 ); + + fd_f25519_mul4( r->X, r1, r2, + r->Y, r3, r4, + r->Z, r2, r3, + r->T, r1, r4 ); + } /* skip_last_mul */ + return r; +} + +/* fd_ed25519_point_add computes r = a + b, and returns r. */ +fd_ed25519_point_t * +fd_ed25519_point_add( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ) { + return fd_ed25519_point_add_with_opts( r, a, b, 0, 0, 0 ); +} + +/* + * Sub + */ + +/* fd_ed25519_point_sub_with_opts computes r = a - b, and returns r. + This is like fd_ed25519_point_add_with_opts, replacing: + - b->X => -b->X + - b->T => -b->T + See fd_ed25519_point_add_with_opts for details. + */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_sub_with_opts( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b, + int const b_Z_is_one, + int const b_is_precomputed, + int const skip_last_mul ) { + fd_f25519_t r1[1], r2[1], r3[1], r4[1]; + fd_f25519_t r5[1], r6[1], r7[1], r8[1]; + fd_f25519_t t[1]; + fd_f25519_t const *r2p = r2, *r4p = r4; + + fd_f25519_sub_nr( r1, a->Y, a->X ); + fd_f25519_add_nr( r3, a->Y, a->X ); + +#if CURVE25519_PRECOMP_XY + if (b_is_precomputed) { + r2p = b->Y; + r4p = b->X; + } else { + fd_f25519_add_nr( r2, b->Y, b->X ); // _sub => _add (because of -b->X) + fd_f25519_sub_nr( r4, b->Y, b->X ); // _add => _sub (because of -b->X) + } +#else + fd_f25519_add_nr( r2, b->Y, b->X ); // _sub => _add (because of -b->X) + fd_f25519_sub_nr( r4, b->Y, b->X ); // _add => _sub (because of -b->X) +#endif + + /* if b->Z == 1, save 1mul */ + if( b_Z_is_one ) { + fd_f25519_mul3( r5, r1, r2p, + r6, r3, r4p, + r7, a->T, b->T ); + fd_f25519_add( r8, a->Z, a->Z ); + } else { + fd_f25519_add_nr( t, a->Z, a->Z ); + fd_f25519_mul4( r5, r1, r2p, + r6, r3, r4p, + r7, a->T, b->T, + r8, t, b->Z ); + } /* b_Z_is_one */ + + /* if b->T actually contains k*b->T, save 1mul */ + if( !b_is_precomputed ) { + fd_f25519_mul( r7, r7, fd_f25519_k ); + } + + /* skip last mul step, and use fd_ed25519_point_add_final_mul + or fd_ed25519_point_add_final_mul_projective instead. */ + if( skip_last_mul ) { + /* store r1, r2, r3, r4 resp. in X, Y, Z, T */ + fd_f25519_sub_nr( r->X, r6, r5 ); + fd_f25519_add_nr( r->Y, r8, r7 ); // _sub => _add (because of -b->T => -r7) + fd_f25519_sub_nr( r->Z, r8, r7 ); // _add => _sub (because of -b->T => -r7) + fd_f25519_add_nr( r->T, r6, r5 ); + } else { + fd_f25519_sub_nr( r1, r6, r5 ); + fd_f25519_add_nr( r2, r8, r7 ); // _sub => _add (because of -b->T => -r7) + fd_f25519_sub_nr( r3, r8, r7 ); // _add => _sub (because of -b->T => -r7) + fd_f25519_add_nr( r4, r6, r5 ); + + fd_f25519_mul4( r->X, r1, r2, + r->Y, r3, r4, + r->Z, r2, r3, + r->T, r1, r4 ); + } /* skip_last_mul */ + return r; +} + +/* fd_ed25519_point_sub computes r = a - b, and returns r. */ +fd_ed25519_point_t * +fd_ed25519_point_sub( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ) { + return fd_ed25519_point_sub_with_opts( r, a, b, 0, 0, 0 ); +} + +/* + * Dbl + */ + +fd_ed25519_point_t * +fd_ed25519_point_dbl( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a ) { + fd_ed25519_point_t t[1]; + /* Dedicated dbl + https://eprint.iacr.org/2008/522 + Sec 4.4. + This uses sqr instead of mul. */ + fd_ed25519_partial_dbl( t, a ); + return fd_ed25519_point_add_final_mul( r, t ); +} + +/* + * Ser/de + */ + +int +fd_ed25519_point_frombytes_2x( fd_ed25519_point_t * r1, + uchar const buf1[ 32 ], + fd_ed25519_point_t * r2, + uchar const buf2[ 32 ] ) { + fd_ed25519_point_t * res = NULL; + res = fd_ed25519_point_frombytes( r1, buf1 ); + if( res == NULL ) { + return 1; + } + res = fd_ed25519_point_frombytes( r2, buf2 ); + if( res == NULL ) { + return 2; + } + return 0; +} + +/* + Affine (only for init(), can be slow) +*/ +fd_ed25519_point_t * +fd_curve25519_affine_frombytes( fd_ed25519_point_t * r, + uchar const x[ 32 ], + uchar const y[ 32 ] ) { + fd_f25519_frombytes( r->X, x ); + fd_f25519_frombytes( r->Y, y ); + fd_f25519_set( r->Z, fd_f25519_one ); + fd_f25519_mul( r->T, r->X, r->Y ); + return r; +} + +fd_ed25519_point_t * +fd_curve25519_into_affine( fd_ed25519_point_t * r ) { + fd_f25519_t invz[1]; + fd_f25519_inv( invz, r->Z ); + fd_f25519_mul( r->X, r->X, invz ); + fd_f25519_mul( r->Y, r->Y, invz ); + fd_f25519_set( r->Z, fd_f25519_one ); + fd_f25519_mul( r->T, r->X, r->Y ); + return r; +} diff --git a/src/ballet/ed25519/ref/fd_curve25519.h b/src/ballet/ed25519/ref/fd_curve25519.h new file mode 100644 index 0000000000..e981e39e0b --- /dev/null +++ b/src/ballet/ed25519/ref/fd_curve25519.h @@ -0,0 +1,226 @@ +#ifndef HEADER_fd_src_ballet_ed25519_fd_curve25519_h +#error "Do not include this directly; use fd_curve25519.h" +#endif + +/* fd_curve25519.h provides the public Curve25519 API. + + Most operations in this API should be assumed to take a variable + amount of time depending on inputs. (And thus should not be exposed + to secret data). + + Const time operations are made explicit, see fd_curve25519_secure.c */ + +#include "../../fd_ballet_base.h" +#include "../fd_f25519.h" +#include "../fd_curve25519_scalar.h" + +/* CURVE25519_PRECOMP_XY turns on/off the precomputation of (Y-X), (Y+X) + in precomputation tables. */ +#define CURVE25519_PRECOMP_XY 1 + +/* struct fd_curve25519_edwards (aka fd_curve25519_edwards_t) represents + a point in Extended Twisted Edwards Coordinates. + https://eprint.iacr.org/2008/522 */ +struct fd_curve25519_edwards { + fd_f25519_t X[1]; + fd_f25519_t Y[1]; + fd_f25519_t T[1]; + fd_f25519_t Z[1]; +}; +typedef struct fd_curve25519_edwards fd_curve25519_edwards_t; + +typedef fd_curve25519_edwards_t fd_ed25519_point_t; +typedef fd_curve25519_edwards_t fd_ristretto255_point_t; + +#include "../table/fd_curve25519_table_ref.c" + +FD_PROTOTYPES_BEGIN + +/* fd_ed25519_point_set sets r = 0 (point at infinity). */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_set_zero( fd_ed25519_point_t * r ) { + fd_f25519_set( r->X, fd_f25519_zero ); + fd_f25519_set( r->Y, fd_f25519_one ); + fd_f25519_set( r->Z, fd_f25519_one ); + fd_f25519_set( r->T, fd_f25519_zero ); + return r; +} + +/* fd_ed25519_point_set_zero_precomputed sets r = 0 (point at infinity). */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_set_zero_precomputed( fd_ed25519_point_t * r ) { +#if CURVE25519_PRECOMP_XY + fd_f25519_set( r->X, fd_f25519_one ); /* Y-X = 1-0 = 1 */ + fd_f25519_set( r->Y, fd_f25519_one ); /* Y+X = 1+0 = 1 */ + fd_f25519_set( r->Z, fd_f25519_one ); /* Z = 1 */ + fd_f25519_set( r->T, fd_f25519_zero ); /* kT = 0 */ + return r; +#else + return fd_ed25519_point_set_zero( r ); +#endif +} + +/* fd_ed25519_point_set sets r = a. */ +FD_25519_INLINE fd_ed25519_point_t * FD_FN_NO_ASAN +fd_ed25519_point_set( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a ) { + fd_f25519_set( r->X, a->X ); + fd_f25519_set( r->Y, a->Y ); + fd_f25519_set( r->Z, a->Z ); + fd_f25519_set( r->T, a->T ); + return r; +} + +/* fd_ed25519_point_from sets r = (x : y : z : t). */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_from( fd_ed25519_point_t * r, + fd_f25519_t const * x, + fd_f25519_t const * y, + fd_f25519_t const * z, + fd_f25519_t const * t ) { + fd_f25519_set( r->X, x ); + fd_f25519_set( r->Y, y ); + fd_f25519_set( r->Z, z ); + fd_f25519_set( r->T, t ); + return r; +} + +/* fd_ed25519_point_from sets (x : y : z : t) = a. */ +FD_25519_INLINE void +fd_ed25519_point_to( fd_f25519_t * x, + fd_f25519_t * y, + fd_f25519_t * z, + fd_f25519_t * t, + fd_ed25519_point_t const * a ) { + fd_f25519_set( x, a->X ); + fd_f25519_set( y, a->Y ); + fd_f25519_set( z, a->Z ); + fd_f25519_set( t, a->T ); +} + +/* fd_ed25519_point_sub sets r = -a. */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_neg( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a ) { + fd_f25519_neg( r->X, a->X ); + fd_f25519_set( r->Y, a->Y ); + fd_f25519_set( r->Z, a->Z ); + fd_f25519_neg( r->T, a->T ); + return r; +} + +/* fd_ed25519_point_is_zero returns 1 if a == 0 (point at infinity), 0 otherwise. */ +FD_25519_INLINE int +fd_ed25519_point_is_zero( fd_ed25519_point_t const * a ) { + return fd_f25519_is_zero( a->X ) & fd_f25519_eq( a->Y, a->Z ); +} + +/* fd_ed25519_point_eq returns 1 if a == b, 0 otherwise. */ +FD_25519_INLINE int +fd_ed25519_point_eq( fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ) { + fd_f25519_t x1[1], x2[1], y1[1], y2[1]; + fd_f25519_mul( x1, b->X, a->Z ); + fd_f25519_mul( x2, a->X, b->Z ); + fd_f25519_mul( y1, b->Y, a->Z ); + fd_f25519_mul( y2, a->Y, b->Z ); + return fd_f25519_eq( x1, x2 ) & fd_f25519_eq( y1, y2 ); +} + +/* fd_ed25519_point_eq returns 1 if a == b, 0 otherwise. + b is a point with Z==1, e.g. a decompressed point. */ +FD_25519_INLINE int +fd_ed25519_point_eq_z1( fd_ed25519_point_t const * a, + fd_ed25519_point_t const * b ) { /* b.Z == 1, e.g. a decompressed point */ + fd_f25519_t x1[1], y1[1]; + fd_f25519_mul( x1, b->X, a->Z ); + fd_f25519_mul( y1, b->Y, a->Z ); + return fd_f25519_eq( x1, a->X ) & fd_f25519_eq( y1, a->Y ); +} + +/* fd_curve25519_into_precomputed transforms a point into + precomputed table format, e.g. replaces T -> kT to save + 1mul in the dbl-and-add loop. */ +FD_25519_INLINE void +fd_curve25519_into_precomputed( fd_ed25519_point_t * r ) { +#if CURVE25519_PRECOMP_XY + fd_f25519_t add[1], sub[1]; + fd_f25519_add_nr( add, r->Y, r->X ); + fd_f25519_sub_nr( sub, r->Y, r->X ); + fd_f25519_set( r->X, sub ); + fd_f25519_set( r->Y, add ); +#endif + fd_f25519_mul( r->T, r->T, fd_f25519_k ); +} + +/* fd_ed25519_point_add_final_mul computes just the final mul step in point add. + See fd_ed25519_point_add_with_opts. */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_add_final_mul( fd_ed25519_point_t * restrict r, + fd_ed25519_point_t const * a ) { + fd_f25519_t const *r1 = a->X; + fd_f25519_t const *r2 = a->Y; + fd_f25519_t const *r3 = a->Z; + fd_f25519_t const *r4 = a->T; + + fd_f25519_mul4( r->X, r1, r2, + r->Y, r3, r4, + r->Z, r2, r3, + r->T, r1, r4 ); + return r; +} + +/* fd_ed25519_point_add_final_mul_projective computes just the final mul step + in point add, assuming the result is projective (X, Y, Z), i.e. ignoring T. + This is useful because dbl only needs (X, Y, Z) in input, so we can save 1mul. + See fd_ed25519_point_add_with_opts. */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_point_add_final_mul_projective( fd_ed25519_point_t * restrict r, + fd_ed25519_point_t const * a ) { + fd_f25519_mul3( r->X, a->X, a->Y, + r->Y, a->Z, a->T, + r->Z, a->Y, a->Z ); + return r; +} + +/* Dedicated dbl + https://eprint.iacr.org/2008/522 + Sec 4.4. + This uses sqr instead of mul. */ +FD_25519_INLINE fd_ed25519_point_t * +fd_ed25519_partial_dbl( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a ) { + fd_f25519_t r1[1], r2[1], r3[1], r4[1]; + fd_f25519_t r5[1]; + + fd_f25519_add_nr( r1, a->X, a->Y ); + + fd_f25519_sqr4( r2, a->X, + r3, a->Y, + r4, a->Z, + r5, r1 ); + + /* important: reduce mod p (these values are used in add/sub) */ + fd_f25519_add( r4, r4, r4 ); + fd_f25519_add( r->T, r2, r3 ); + fd_f25519_sub( r->Z, r2, r3 ); + + fd_f25519_add_nr( r->Y, r4, r->Z ); + fd_f25519_sub_nr( r->X, r->T, r5 ); + return r; +} + +FD_25519_INLINE fd_ed25519_point_t * FD_FN_NO_ASAN +fd_ed25519_point_dbln( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + int n ) { + fd_ed25519_point_t t[1]; + fd_ed25519_partial_dbl( t, a ); + for( uchar i=1; iX; + fd_f25519_t * r2 = tmp0->Y; + fd_f25519_t * r3 = tmp0->Z; + fd_f25519_t * r4 = tmp0->T; + fd_f25519_t * r5 = tmp1->X; + fd_f25519_t * r6 = tmp1->Y; + fd_f25519_t * r7 = tmp1->Z; + fd_f25519_t * r8 = tmp1->T; + + fd_f25519_sub_nr( r1, a->Y, a->X ); + fd_f25519_add_nr( r3, a->Y, a->X ); + +#if CURVE25519_PRECOMP_XY + fd_f25519_mul3( r5, r1, b->X, + r6, r3, b->Y, + r7, a->T, b->T ); +#else + fd_f25519_sub_nr( r2, b->Y, b->X ); + fd_f25519_add_nr( r4, b->Y, b->X ); + fd_f25519_mul3( r5, r1, r2, + r6, r3, r4, + r7, a->T, b->T ); +#endif + fd_f25519_add( r8, a->Z, a->Z ); + + fd_f25519_sub_nr( r1, r6, r5 ); + fd_f25519_sub_nr( r2, r8, r7 ); + fd_f25519_add_nr( r3, r8, r7 ); + fd_f25519_add_nr( r4, r6, r5 ); + fd_f25519_mul4( r->X, r1, r2, + r->Y, r3, r4, + r->Z, r2, r3, + r->T, r1, r4 ); + return r; +} + +/* fd_ed25519_partial_dbl_secure partially computes r = 2 a. + + It's equivalent to fd_ed25519_partial_dbl( r, a ). + + This implementation has no temporary variables and clears registers on return. + The intent is to avoid that an attacker can retrieve information about a, + that's a partial aggregation of secretly chosen points. */ +FD_25519_INLINE void FD_FN_SENSITIVE +fd_ed25519_partial_dbl_secure( fd_ed25519_point_t * restrict r, + fd_ed25519_point_t const * restrict a, + fd_ed25519_point_t * restrict tmp) { + fd_f25519_t * r1 = tmp->X; + fd_f25519_t * r2 = tmp->Y; + fd_f25519_t * r3 = tmp->Z; + fd_f25519_t * r4 = tmp->T; + + fd_f25519_add_nr( r1, a->X, a->Y ); + + fd_f25519_sqr4( r2, a->X, + r3, a->Y, + r4, a->Z, + r1, r1 ); + + /* important: reduce mod p (these values are used in add/sub) */ + fd_f25519_add( r4, r4, r4 ); + fd_f25519_add( r->T, r2, r3 ); + fd_f25519_sub( r->Z, r2, r3 ); + + fd_f25519_add_nr( r->Y, r4, r->Z ); + fd_f25519_sub_nr( r->X, r->T, r1 ); +} + +/* fd_ed25519_point_dbln_secure computes r = 2^n a. + + It's equivalent to fd_ed25519_point_dbln( r, a, n ). + + This implementation has no temporary variables and clears registers on return. + The intent is to avoid that an attacker can retrieve information about a, + that's a partial aggregation of secretly chosen points. */ +FD_25519_INLINE void FD_FN_SENSITIVE +fd_ed25519_point_dbln_secure( fd_ed25519_point_t * r, + fd_ed25519_point_t const * a, + int n, + fd_ed25519_point_t * restrict t, + fd_ed25519_point_t * restrict tmp ) { + fd_ed25519_partial_dbl_secure( t, a, tmp ); + for( uchar i=1; iX, t->X, t->Y, + r->Y, t->Z, t->T, + r->Z, t->Y, t->Z ); + + fd_ed25519_partial_dbl_secure( t, r, tmp ); + } + // fd_ed25519_point_add_final_mul( r, t ); + fd_f25519_mul4( r->X, t->X, t->Y, + r->Y, t->Z, t->T, + r->Z, t->Y, t->Z, + r->T, t->X, t->T ); +} + +/* fd_ed25519_point_if sets r = a0 if secret_cond, else r = a1. + Equivalent to r = secret_cond ? a0 : a1. + Note: this is const time, as the underlying fd_f25519_if is const time. */ +FD_25519_INLINE void FD_FN_SENSITIVE +fd_ed25519_point_if( fd_ed25519_point_t * restrict r, + uchar secret_cond, /* 0, 1 */ + fd_ed25519_point_t const * a0, + fd_ed25519_point_t const * a1 ) { + fd_f25519_if( r->X, secret_cond, a0->X, a1->X ); + fd_f25519_if( r->Y, secret_cond, a0->Y, a1->Y ); + fd_f25519_if( r->T, secret_cond, a0->T, a1->T ); +} + +/* fd_ed25519_point_neg_if sets r = -r if secret_cond, else r = r. + Equivalent to r = secret_cond ? -r : r. + Note: this is const time, as the underlying fd_f25519_if is const time. */ +FD_25519_INLINE void FD_FN_SENSITIVE +fd_ed25519_point_neg_if( fd_ed25519_point_t * FD_RESTRICT r, + fd_ed25519_point_t * const a, + uchar const secret_cond /* 0, 1 */ ) { + fd_f25519_neg( r->Z, a->T ); + fd_f25519_if( r->T, secret_cond, r->Z, a->T ); +#if CURVE25519_PRECOMP_XY + fd_f25519_if( r->X, secret_cond, a->Y, a->X ); + fd_f25519_if( r->Y, secret_cond, a->X, a->Y ); +#else + fd_f25519_neg( r->Z, a->X ); + fd_f25519_if( r->X, secret_cond, r->X, a->Z ); +#endif +} diff --git a/src/ballet/ed25519/ref/fd_ed25519_fe.c b/src/ballet/ed25519/ref/fd_ed25519_fe.c deleted file mode 100644 index 3ab346b752..0000000000 --- a/src/ballet/ed25519/ref/fd_ed25519_fe.c +++ /dev/null @@ -1,601 +0,0 @@ -#include "../fd_ed25519_private.h" - -fd_ed25519_fe_t * -fd_ed25519_fe_frombytes( fd_ed25519_fe_t * h, - uchar const * s ) { - - /* FIXME: THIS CAN PROBABLY BE ACCELERATED BY DOING 4 64-BIT LOADS AND - THEN UNPACKING FOR HIGH ILP. UNCLEAR IF BELOW DOES A FULL - REDUCTION THOUGH SO THIS ALTERNATIVE MIGHT YIELD ONLY AN EQUIVALENT - INTERMEDIATE REPRESENTATION (AND FOR SANITY WE ARE KEEPING - INTERMEDIATES BIT LEVEL EXACT TOO). CHECK FD_LOADS ELSEWHERE TO - MAKE SURE THIS IS THE CASE IN GENERAL. */ - - long h0 = (long) fd_ulong_load_4_fast( s ); - long h1 = (long) fd_ulong_load_3_fast( s + 4 ) << 6; - long h2 = (long) fd_ulong_load_3_fast( s + 7 ) << 5; - long h3 = (long) fd_ulong_load_3_fast( s + 10 ) << 3; - long h4 = (long) fd_ulong_load_3_fast( s + 13 ) << 2; - long h5 = (long) fd_ulong_load_4_fast( s + 16 ); - long h6 = (long) fd_ulong_load_3_fast( s + 20 ) << 7; - long h7 = (long) fd_ulong_load_3_fast( s + 23 ) << 5; - long h8 = (long) fd_ulong_load_3_fast( s + 26 ) << 4; - long h9 = (long)((fd_ulong_load_3 ( s + 29 ) & 0x7fffffUL) << 2); /* Ignores top bit of h. */ - - long m39u = (long)FD_ULONG_MASK_MSB(39); - long carry9 = h9 + (1 << 24); h0 += (carry9 >> 25)*19L; h9 -= carry9 & m39u; - long carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & m39u; - long carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & m39u; - long carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & m39u; - long carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & m39u; - - long m38u = (long)FD_ULONG_MASK_MSB(38); - long carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - long carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & m38u; - long carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - long carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & m38u; - long carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & m38u; - - h->limb[0] = (int)h0; h->limb[1] = (int)h1; - h->limb[2] = (int)h2; h->limb[3] = (int)h3; - h->limb[4] = (int)h4; h->limb[5] = (int)h5; - h->limb[6] = (int)h6; h->limb[7] = (int)h7; - h->limb[8] = (int)h8; h->limb[9] = (int)h9; - return h; -} - -uchar * -fd_ed25519_fe_tobytes( uchar * s, - fd_ed25519_fe_t const * h ) { - - /* Load limbs of h */ - - int h0 = h->limb[0]; int h1 = h->limb[1]; - int h2 = h->limb[2]; int h3 = h->limb[3]; - int h4 = h->limb[4]; int h5 = h->limb[5]; - int h6 = h->limb[6]; int h7 = h->limb[7]; - int h8 = h->limb[8]; int h9 = h->limb[9]; - - /* Write p=2^255-19; q=floor(h/p). - Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))). - - Proof: - Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4. - Also have |h-2^230 h9|<2^231 so |19 2^(-255)(h-2^230 h9)|<1/4. - - Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9). - Then 0> 25; - q = (h0 + q) >> 26; q = (h1 + q) >> 25; - q = (h2 + q) >> 26; q = (h3 + q) >> 25; - q = (h4 + q) >> 26; q = (h5 + q) >> 25; - q = (h6 + q) >> 26; q = (h7 + q) >> 25; - q = (h8 + q) >> 26; q = (h9 + q) >> 25; - - /* Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. */ - - h0 += 19*q; - - /* Goal: Output h-2^255 q, which is between 0 and 2^255-20. */ - - int m26 = (int)FD_ULONG_MASK_LSB(26); - int m25 = (int)FD_ULONG_MASK_LSB(25); - - h1 += h0 >> 26; h0 &= m26; h2 += h1 >> 25; h1 &= m25; - h3 += h2 >> 26; h2 &= m26; h4 += h3 >> 25; h3 &= m25; - h5 += h4 >> 26; h4 &= m26; h6 += h5 >> 25; h5 &= m25; - h7 += h6 >> 26; h6 &= m26; h8 += h7 >> 25; h7 &= m25; - h9 += h8 >> 26; h8 &= m26; /*h10=carry9*/ h9 &= m25; - - /* Pack the results into s */ - - *(ulong *) s = (((ulong)(uint)h0) ) | (((ulong)(uint)h1)<<26) | (((ulong)(uint)h2)<<51); - *(ulong *)(s+ 8) = (((ulong)(uint)h2)>>13) | (((ulong)(uint)h3)<<13) | (((ulong)(uint)h4)<<38); - *(ulong *)(s+16) = (((ulong)(uint)h5) ) | (((ulong)(uint)h6)<<25) | (((ulong)(uint)h7)<<51); - *(ulong *)(s+24) = (((ulong)(uint)h7)>>13) | (((ulong)(uint)h8)<<12) | (((ulong)(uint)h9)<<38); - - return s; -} - -fd_ed25519_fe_t * -fd_ed25519_fe_mul( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f, - fd_ed25519_fe_t const * g ) { - - /* Notes on implementation strategy: - - Using schoolbook multiplication. - Karatsuba would save a little in some cost models. - - Most multiplications by 2 and 19 are 32-bit precomputations; - cheaper than 64-bit postcomputations. - - There is one remaining multiplication by 19 in the carry chain; - one *19 precomputation can be merged into this, - but the resulting data flow is considerably less clean. - - There are 12 carries below. - 10 of them are 2-way parallelizable and vectorizable. - Can get away with 11 carries, but then data flow is much deeper. - - With tighter constraints on inputs can squeeze carries into int. */ - - int f0 = f->limb[0]; int f1 = f->limb[1]; - int f2 = f->limb[2]; int f3 = f->limb[3]; - int f4 = f->limb[4]; int f5 = f->limb[5]; - int f6 = f->limb[6]; int f7 = f->limb[7]; - int f8 = f->limb[8]; int f9 = f->limb[9]; - - int g0 = g->limb[0]; int g1 = g->limb[1]; - int g2 = g->limb[2]; int g3 = g->limb[3]; - int g4 = g->limb[4]; int g5 = g->limb[5]; - int g6 = g->limb[6]; int g7 = g->limb[7]; - int g8 = g->limb[8]; int g9 = g->limb[9]; - - int g1_19 = 19*g1; /* 1.959375*2^29 */ - int g2_19 = 19*g2; /* 1.959375*2^30; still ok */ - int g3_19 = 19*g3; - int g4_19 = 19*g4; - int g5_19 = 19*g5; - int g6_19 = 19*g6; - int g7_19 = 19*g7; - int g8_19 = 19*g8; - int g9_19 = 19*g9; - - int f1_2 = 2*f1; - int f3_2 = 2*f3; - int f5_2 = 2*f5; - int f7_2 = 2*f7; - int f9_2 = 2*f9; - - long f0g0 = ((long)f0)*((long)g0 ); long f0g1 = ((long)f0 )*((long)g1 ); - long f0g2 = ((long)f0)*((long)g2 ); long f0g3 = ((long)f0 )*((long)g3 ); - long f0g4 = ((long)f0)*((long)g4 ); long f0g5 = ((long)f0 )*((long)g5 ); - long f0g6 = ((long)f0)*((long)g6 ); long f0g7 = ((long)f0 )*((long)g7 ); - long f0g8 = ((long)f0)*((long)g8 ); long f0g9 = ((long)f0 )*((long)g9 ); - - long f1g0 = ((long)f1)*((long)g0 ); long f1g1_2 = ((long)f1_2)*((long)g1 ); - long f1g2 = ((long)f1)*((long)g2 ); long f1g3_2 = ((long)f1_2)*((long)g3 ); - long f1g4 = ((long)f1)*((long)g4 ); long f1g5_2 = ((long)f1_2)*((long)g5 ); - long f1g6 = ((long)f1)*((long)g6 ); long f1g7_2 = ((long)f1_2)*((long)g7 ); - long f1g8 = ((long)f1)*((long)g8 ); long f1g9_38 = ((long)f1_2)*((long)g9_19); - - long f2g0 = ((long)f2)*((long)g0 ); long f2g1 = ((long)f2 )*((long)g1 ); - long f2g2 = ((long)f2)*((long)g2 ); long f2g3 = ((long)f2 )*((long)g3 ); - long f2g4 = ((long)f2)*((long)g4 ); long f2g5 = ((long)f2 )*((long)g5 ); - long f2g6 = ((long)f2)*((long)g6 ); long f2g7 = ((long)f2 )*((long)g7 ); - long f2g8_19 = ((long)f2)*((long)g8_19); long f2g9_19 = ((long)f2 )*((long)g9_19); - - long f3g0 = ((long)f3)*((long)g0 ); long f3g1_2 = ((long)f3_2)*((long)g1 ); - long f3g2 = ((long)f3)*((long)g2 ); long f3g3_2 = ((long)f3_2)*((long)g3 ); - long f3g4 = ((long)f3)*((long)g4 ); long f3g5_2 = ((long)f3_2)*((long)g5 ); - long f3g6 = ((long)f3)*((long)g6 ); long f3g7_38 = ((long)f3_2)*((long)g7_19); - long f3g8_19 = ((long)f3)*((long)g8_19); long f3g9_38 = ((long)f3_2)*((long)g9_19); - - long f4g0 = ((long)f4)*((long)g0 ); long f4g1 = ((long)f4 )*((long)g1 ); - long f4g2 = ((long)f4)*((long)g2 ); long f4g3 = ((long)f4 )*((long)g3 ); - long f4g4 = ((long)f4)*((long)g4 ); long f4g5 = ((long)f4 )*((long)g5 ); - long f4g6_19 = ((long)f4)*((long)g6_19); long f4g7_19 = ((long)f4 )*((long)g7_19); - long f4g8_19 = ((long)f4)*((long)g8_19); long f4g9_19 = ((long)f4 )*((long)g9_19); - - long f5g0 = ((long)f5)*((long)g0 ); long f5g1_2 = ((long)f5_2)*((long)g1 ); - long f5g2 = ((long)f5)*((long)g2 ); long f5g3_2 = ((long)f5_2)*((long)g3 ); - long f5g4 = ((long)f5)*((long)g4 ); long f5g5_38 = ((long)f5_2)*((long)g5_19); - long f5g6_19 = ((long)f5)*((long)g6_19); long f5g7_38 = ((long)f5_2)*((long)g7_19); - long f5g8_19 = ((long)f5)*((long)g8_19); long f5g9_38 = ((long)f5_2)*((long)g9_19); - - long f6g0 = ((long)f6)*((long)g0 ); long f6g1 = ((long)f6 )*((long)g1 ); - long f6g2 = ((long)f6)*((long)g2 ); long f6g3 = ((long)f6 )*((long)g3 ); - long f6g4_19 = ((long)f6)*((long)g4_19); long f6g5_19 = ((long)f6 )*((long)g5_19); - long f6g6_19 = ((long)f6)*((long)g6_19); long f6g7_19 = ((long)f6 )*((long)g7_19); - long f6g8_19 = ((long)f6)*((long)g8_19); long f6g9_19 = ((long)f6 )*((long)g9_19); - - long f7g0 = ((long)f7)*((long)g0 ); long f7g1_2 = ((long)f7_2)*((long)g1 ); - long f7g2 = ((long)f7)*((long)g2 ); long f7g3_38 = ((long)f7_2)*((long)g3_19); - long f7g4_19 = ((long)f7)*((long)g4_19); long f7g5_38 = ((long)f7_2)*((long)g5_19); - long f7g6_19 = ((long)f7)*((long)g6_19); long f7g7_38 = ((long)f7_2)*((long)g7_19); - long f7g8_19 = ((long)f7)*((long)g8_19); long f7g9_38 = ((long)f7_2)*((long)g9_19); - - long f8g0 = ((long)f8)*((long)g0 ); long f8g1 = ((long)f8 )*((long)g1 ); - long f8g2_19 = ((long)f8)*((long)g2_19); long f8g3_19 = ((long)f8 )*((long)g3_19); - long f8g4_19 = ((long)f8)*((long)g4_19); long f8g5_19 = ((long)f8 )*((long)g5_19); - long f8g6_19 = ((long)f8)*((long)g6_19); long f8g7_19 = ((long)f8 )*((long)g7_19); - long f8g8_19 = ((long)f8)*((long)g8_19); long f8g9_19 = ((long)f8 )*((long)g9_19); - - long f9g0 = ((long)f9)*((long)g0 ); long f9g1_38 = ((long)f9_2)*((long)g1_19); - long f9g2_19 = ((long)f9)*((long)g2_19); long f9g3_38 = ((long)f9_2)*((long)g3_19); - long f9g4_19 = ((long)f9)*((long)g4_19); long f9g5_38 = ((long)f9_2)*((long)g5_19); - long f9g6_19 = ((long)f9)*((long)g6_19); long f9g7_38 = ((long)f9_2)*((long)g7_19); - long f9g8_19 = ((long)f9)*((long)g8_19); long f9g9_38 = ((long)f9_2)*((long)g9_19); - - long h0 = f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38; - long h1 = f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19; - long h2 = f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38; - long h3 = f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19; - long h4 = f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38; - long h5 = f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19; - long h6 = f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 + f7g9_38 + f8g8_19 + f9g7_38; - long h7 = f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 + f8g9_19 + f9g8_19; - long h8 = f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 + f8g0 + f9g9_38; - long h9 = f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0 ; - - /* |h0| <= (1.65*1.65*2^52*(1+19+19+19+19)+1.65*1.65*2^50*(38+38+38+38+38)) - i.e. |h0| <= 1.4*2^60; narrower ranges for h2, h4, h6, h8 - |h1| <= (1.65*1.65*2^51*(1+1+19+19+19+19+19+19+19+19)) - i.e. |h1| <= 1.7*2^59; narrower ranges for h3, h5, h7, h9 */ - - long m38u = (long)FD_ULONG_MASK_MSB(38); - long m39u = (long)FD_ULONG_MASK_MSB(39); - - long carry0 = h0 + (1L << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - long carry4 = h4 + (1L << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - /* |h0| <= 2^25 */ - /* |h4| <= 2^25 */ - /* |h1| <= 1.71*2^59 */ - /* |h5| <= 1.71*2^59 */ - - long carry1 = h1 + (1L << 24); h2 += carry1 >> 25; h1 -= carry1 & m39u; - long carry5 = h5 + (1L << 24); h6 += carry5 >> 25; h5 -= carry5 & m39u; - /* |h1| <= 2^24; from now on fits into int */ - /* |h5| <= 2^24; from now on fits into int */ - /* |h2| <= 1.41*2^60 */ - /* |h6| <= 1.41*2^60 */ - - long carry2 = h2 + (1L << 25); h3 += carry2 >> 26; h2 -= carry2 & m38u; - long carry6 = h6 + (1L << 25); h7 += carry6 >> 26; h6 -= carry6 & m38u; - /* |h2| <= 2^25; from now on fits into int unchanged */ - /* |h6| <= 2^25; from now on fits into int unchanged */ - /* |h3| <= 1.71*2^59 */ - /* |h7| <= 1.71*2^59 */ - - long carry3 = h3 + (1L << 24); h4 += carry3 >> 25; h3 -= carry3 & m39u; - long carry7 = h7 + (1L << 24); h8 += carry7 >> 25; h7 -= carry7 & m39u; - /* |h3| <= 2^24; from now on fits into int unchanged */ - /* |h7| <= 2^24; from now on fits into int unchanged */ - /* |h4| <= 1.72*2^34 */ - /* |h8| <= 1.41*2^60 */ - - /**/ carry4 = h4 + (1L << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - long carry8 = h8 + (1L << 25); h9 += carry8 >> 26; h8 -= carry8 & m38u; - /* |h4| <= 2^25; from now on fits into int unchanged */ - /* |h8| <= 2^25; from now on fits into int unchanged */ - /* |h5| <= 1.01*2^24 */ - /* |h9| <= 1.71*2^59 */ - - long carry9 = h9 + (1L << 24); h0 += (carry9 >> 25)*19L; h9 -= carry9 & m39u; - /* |h9| <= 2^24; from now on fits into int unchanged */ - /* |h0| <= 1.1*2^39 */ - - /**/ carry0 = h0 + (1L << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - /* |h0| <= 2^25; from now on fits into int unchanged */ - /* |h1| <= 1.01*2^24 */ - - h->limb[0] = (int)h0; h->limb[1] = (int)h1; - h->limb[2] = (int)h2; h->limb[3] = (int)h3; - h->limb[4] = (int)h4; h->limb[5] = (int)h5; - h->limb[6] = (int)h6; h->limb[7] = (int)h7; - h->limb[8] = (int)h8; h->limb[9] = (int)h9; - return h; -} - -fd_ed25519_fe_t * -fd_ed25519_fe_sq( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ) { - - /* See fd_ed25519_fe_mul for discussion of implementation strategy. */ - - int f0 = f->limb[0]; int f1 = f->limb[1]; - int f2 = f->limb[2]; int f3 = f->limb[3]; - int f4 = f->limb[4]; int f5 = f->limb[5]; - int f6 = f->limb[6]; int f7 = f->limb[7]; - int f8 = f->limb[8]; int f9 = f->limb[9]; - - int f0_2 = 2*f0; int f1_2 = 2*f1; - int f2_2 = 2*f2; int f3_2 = 2*f3; - int f4_2 = 2*f4; int f5_2 = 2*f5; - int f6_2 = 2*f6; int f7_2 = 2*f7; - - int f5_38 = 38*f5; /* 1.959375*2^30 */ int f6_19 = 19*f6; /* 1.959375*2^30 */ - int f7_38 = 38*f7; /* 1.959375*2^30 */ int f8_19 = 19*f8; /* 1.959375*2^30 */ - int f9_38 = 38*f9; /* 1.959375*2^30 */ - - long f0f0 = ((long)f0 )*((long)f0 ); long f0f1_2 = ((long)f0_2)*((long)f1 ); - long f0f2_2 = ((long)f0_2)*((long)f2 ); long f0f3_2 = ((long)f0_2)*((long)f3 ); - long f0f4_2 = ((long)f0_2)*((long)f4 ); long f0f5_2 = ((long)f0_2)*((long)f5 ); - long f0f6_2 = ((long)f0_2)*((long)f6 ); long f0f7_2 = ((long)f0_2)*((long)f7 ); - long f0f8_2 = ((long)f0_2)*((long)f8 ); long f0f9_2 = ((long)f0_2)*((long)f9 ); - - long f1f1_2 = ((long)f1_2)*((long)f1 ); long f1f2_2 = ((long)f1_2)*((long)f2 ); - long f1f3_4 = ((long)f1_2)*((long)f3_2 ); long f1f4_2 = ((long)f1_2)*((long)f4 ); - long f1f5_4 = ((long)f1_2)*((long)f5_2 ); long f1f6_2 = ((long)f1_2)*((long)f6 ); - long f1f7_4 = ((long)f1_2)*((long)f7_2 ); long f1f8_2 = ((long)f1_2)*((long)f8 ); - long f1f9_76 = ((long)f1_2)*((long)f9_38); - - long f2f2 = ((long)f2 )*((long)f2 ); long f2f3_2 = ((long)f2_2)*((long)f3 ); - long f2f4_2 = ((long)f2_2)*((long)f4 ); long f2f5_2 = ((long)f2_2)*((long)f5 ); - long f2f6_2 = ((long)f2_2)*((long)f6 ); long f2f7_2 = ((long)f2_2)*((long)f7 ); - long f2f8_38 = ((long)f2_2)*((long)f8_19); long f2f9_38 = ((long)f2 )*((long)f9_38); - - long f3f3_2 = ((long)f3_2)*((long)f3 ); long f3f4_2 = ((long)f3_2)*((long)f4 ); - long f3f5_4 = ((long)f3_2)*((long)f5_2 ); long f3f6_2 = ((long)f3_2)*((long)f6 ); - long f3f7_76 = ((long)f3_2)*((long)f7_38); long f3f8_38 = ((long)f3_2)*((long)f8_19); - long f3f9_76 = ((long)f3_2)*((long)f9_38); - - long f4f4 = ((long)f4 )*((long)f4 ); long f4f5_2 = ((long)f4_2)*((long)f5 ); - long f4f6_38 = ((long)f4_2)*((long)f6_19); long f4f7_38 = ((long)f4 )*((long)f7_38); - long f4f8_38 = ((long)f4_2)*((long)f8_19); long f4f9_38 = ((long)f4 )*((long)f9_38); - - long f5f5_38 = ((long)f5 )*((long)f5_38); long f5f6_38 = ((long)f5_2)*((long)f6_19); - long f5f7_76 = ((long)f5_2)*((long)f7_38); long f5f8_38 = ((long)f5_2)*((long)f8_19); - long f5f9_76 = ((long)f5_2)*((long)f9_38); - - long f6f6_19 = ((long)f6 )*((long)f6_19); long f6f7_38 = ((long)f6 )*((long)f7_38); - long f6f8_38 = ((long)f6_2)*((long)f8_19); long f6f9_38 = ((long)f6 )*((long)f9_38); - - long f7f7_38 = ((long)f7 )*((long)f7_38); long f7f8_38 = ((long)f7_2)*((long)f8_19); - long f7f9_76 = ((long)f7_2)*((long)f9_38); - - long f8f8_19 = ((long)f8 )*((long)f8_19); long f8f9_38 = ((long)f8 )*((long)f9_38); - - long f9f9_38 = ((long)f9 )*((long)f9_38); - - long h0 = f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38; - long h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38; - long h2 = f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19; - long h3 = f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38; - long h4 = f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38; - long h5 = f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38; - long h6 = f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19; - long h7 = f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38; - long h8 = f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38; - long h9 = f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2; - - long m38u = (long)FD_ULONG_MASK_MSB(38); - long m39u = (long)FD_ULONG_MASK_MSB(39); - - long carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - long carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - - long carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & m39u; - long carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & m39u; - - long carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & m38u; - long carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & m38u; - - long carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & m39u; - long carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & m39u; - - /**/ carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - long carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & m38u; - - long carry9 = h9 + (1 << 24); h0 += (carry9 >> 25)*19L; h9 -= carry9 & m39u; - - /**/ carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - - h->limb[0] = (int)h0; h->limb[1] = (int)h1; - h->limb[2] = (int)h2; h->limb[3] = (int)h3; - h->limb[4] = (int)h4; h->limb[5] = (int)h5; - h->limb[6] = (int)h6; h->limb[7] = (int)h7; - h->limb[8] = (int)h8; h->limb[9] = (int)h9; - return h; -} - -fd_ed25519_fe_t * -fd_ed25519_fe_sq2( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ) { - - /* See fd_ed25519_fe_mul for discussion of implementation strategy. */ - - int f0 = f->limb[0]; int f1 = f->limb[1]; - int f2 = f->limb[2]; int f3 = f->limb[3]; - int f4 = f->limb[4]; int f5 = f->limb[5]; - int f6 = f->limb[6]; int f7 = f->limb[7]; - int f8 = f->limb[8]; int f9 = f->limb[9]; - - int f0_2 = 2*f0; int f1_2 = 2*f1; - int f2_2 = 2*f2; int f3_2 = 2*f3; - int f4_2 = 2*f4; int f5_2 = 2*f5; - int f6_2 = 2*f6; int f7_2 = 2*f7; - - int f5_38 = 38*f5; /* 1.959375*2^30 */ int f6_19 = 19*f6; /* 1.959375*2^30 */ - int f7_38 = 38*f7; /* 1.959375*2^30 */ int f8_19 = 19*f8; /* 1.959375*2^30 */ - int f9_38 = 38*f9; /* 1.959375*2^30 */ - - long f0f0 = ((long)f0 )*((long)f0 ); long f0f1_2 = ((long)f0_2)*((long)f1 ); - long f0f2_2 = ((long)f0_2)*((long)f2 ); long f0f3_2 = ((long)f0_2)*((long)f3 ); - long f0f4_2 = ((long)f0_2)*((long)f4 ); long f0f5_2 = ((long)f0_2)*((long)f5 ); - long f0f6_2 = ((long)f0_2)*((long)f6 ); long f0f7_2 = ((long)f0_2)*((long)f7 ); - long f0f8_2 = ((long)f0_2)*((long)f8 ); long f0f9_2 = ((long)f0_2)*((long)f9 ); - - long f1f1_2 = ((long)f1_2)*((long)f1 ); long f1f2_2 = ((long)f1_2)*((long)f2 ); - long f1f3_4 = ((long)f1_2)*((long)f3_2 ); long f1f4_2 = ((long)f1_2)*((long)f4 ); - long f1f5_4 = ((long)f1_2)*((long)f5_2 ); long f1f6_2 = ((long)f1_2)*((long)f6 ); - long f1f7_4 = ((long)f1_2)*((long)f7_2 ); long f1f8_2 = ((long)f1_2)*((long)f8 ); - long f1f9_76 = ((long)f1_2)*((long)f9_38); - - long f2f2 = ((long)f2 )*((long)f2 ); long f2f3_2 = ((long)f2_2)*((long)f3 ); - long f2f4_2 = ((long)f2_2)*((long)f4 ); long f2f5_2 = ((long)f2_2)*((long)f5 ); - long f2f6_2 = ((long)f2_2)*((long)f6 ); long f2f7_2 = ((long)f2_2)*((long)f7 ); - long f2f8_38 = ((long)f2_2)*((long)f8_19); long f2f9_38 = ((long)f2 )*((long)f9_38); - - long f3f3_2 = ((long)f3_2)*((long)f3 ); long f3f4_2 = ((long)f3_2)*((long)f4 ); - long f3f5_4 = ((long)f3_2)*((long)f5_2 ); long f3f6_2 = ((long)f3_2)*((long)f6 ); - long f3f7_76 = ((long)f3_2)*((long)f7_38); long f3f8_38 = ((long)f3_2)*((long)f8_19); - long f3f9_76 = ((long)f3_2)*((long)f9_38); - - long f4f4 = ((long)f4 )*((long)f4 ); long f4f5_2 = ((long)f4_2)*((long)f5 ); - long f4f6_38 = ((long)f4_2)*((long)f6_19); long f4f7_38 = ((long)f4 )*((long)f7_38); - long f4f8_38 = ((long)f4_2)*((long)f8_19); long f4f9_38 = ((long)f4 )*((long)f9_38); - - long f5f5_38 = ((long)f5 )*((long)f5_38); long f5f6_38 = ((long)f5_2)*((long)f6_19); - long f5f7_76 = ((long)f5_2)*((long)f7_38); long f5f8_38 = ((long)f5_2)*((long)f8_19); - long f5f9_76 = ((long)f5_2)*((long)f9_38); - - long f6f6_19 = ((long)f6 )*((long)f6_19); long f6f7_38 = ((long)f6 )*((long)f7_38); - long f6f8_38 = ((long)f6_2)*((long)f8_19); long f6f9_38 = ((long)f6 )*((long)f9_38); - - long f7f7_38 = ((long)f7 )*((long)f7_38); long f7f8_38 = ((long)f7_2)*((long)f8_19); - long f7f9_76 = ((long)f7_2)*((long)f9_38); - - long f8f8_19 = ((long)f8 )*((long)f8_19); long f8f9_38 = ((long)f8 )*((long)f9_38); - - long f9f9_38 = ((long)f9 )*((long)f9_38); - - long h0 = f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38; h0 += h0; - long h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38; h1 += h1; - long h2 = f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19; h2 += h2; - long h3 = f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38; h3 += h3; - long h4 = f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38; h4 += h4; - long h5 = f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38; h5 += h5; - long h6 = f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19; h6 += h6; - long h7 = f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38; h7 += h7; - long h8 = f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38; h8 += h8; - long h9 = f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2; h9 += h9; - - long m38u = (long)FD_ULONG_MASK_MSB(38); - long m39u = (long)FD_ULONG_MASK_MSB(39); - - long carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - long carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - - long carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & m39u; - long carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & m39u; - - long carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & m38u; - long carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & m38u; - - long carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & m39u; - long carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & m39u; - - /**/ carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & m38u; - long carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & m38u; - - long carry9 = h9 + (1 << 24); h0 += (carry9 >> 25)*19L; h9 -= carry9 & m39u; - - /**/ carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & m38u; - - h->limb[0] = (int)h0; h->limb[1] = (int)h1; - h->limb[2] = (int)h2; h->limb[3] = (int)h3; - h->limb[4] = (int)h4; h->limb[5] = (int)h5; - h->limb[6] = (int)h6; h->limb[7] = (int)h7; - h->limb[8] = (int)h8; h->limb[9] = (int)h9; - return h; -} - -fd_ed25519_fe_t * -fd_ed25519_fe_invert( fd_ed25519_fe_t * out, - fd_ed25519_fe_t const * z ) { - fd_ed25519_fe_t t0[1]; - fd_ed25519_fe_t t1[1]; - fd_ed25519_fe_t t2[1]; - fd_ed25519_fe_t t3[1]; - - /* Compute z**-1 = z**(2**255 - 19 - 2) with the exponent as - 2**255 - 21 = (2**5) * (2**250 - 1) + 11. */ - - fd_ed25519_fe_sq ( t0, z ); /* t0 = z**2 */ - fd_ed25519_fe_sq ( t1, t0 ); - fd_ed25519_fe_sq ( t1, t1 ); /* t1 = t0**(2**2) = z**8 */ - fd_ed25519_fe_mul( t1, z, t1 ); /* t1 = z * t1 = z**9 */ - fd_ed25519_fe_mul( t0, t0, t1 ); /* t0 = t0 * t1 = z**11 -- stash t0 away for the end. */ - fd_ed25519_fe_sq ( t2, t0 ); /* t2 = t0**2 = z**22 */ - fd_ed25519_fe_mul( t1, t1, t2 ); /* t1 = t1 * t2 = z**(2**5 - 1) */ - fd_ed25519_fe_sq ( t2, t1 ); - for( int i=1; i< 5; i++ ) fd_ed25519_fe_sq( t2, t2 ); /* t2 = t1**(2**5) = z**((2**5) * (2**5 - 1)) */ - fd_ed25519_fe_mul( t1, t2, t1 ); /* t1 = t1 * t2 = z**((2**5 + 1) * (2**5 - 1)) = z**(2**10 - 1) */ - fd_ed25519_fe_sq ( t2, t1 ); - for( int i=1; i< 10; i++ ) fd_ed25519_fe_sq( t2, t2 ); - fd_ed25519_fe_mul( t2, t2, t1 ); /* t2 = z**(2**20 - 1) */ - fd_ed25519_fe_sq ( t3, t2 ); - for( int i=1; i< 20; i++ ) fd_ed25519_fe_sq( t3, t3 ); - fd_ed25519_fe_mul( t2, t3, t2 ); /* t2 = z**(2**40 - 1) */ - for( int i=0; i< 10; i++ ) fd_ed25519_fe_sq( t2, t2 ); /* t2 = z**(2**10) * (2**40 - 1) */ - fd_ed25519_fe_mul( t1, t2, t1 ); /* t1 = z**(2**50 - 1) */ - fd_ed25519_fe_sq ( t2, t1 ); - for( int i=1; i< 50; i++ ) fd_ed25519_fe_sq( t2, t2 ); - fd_ed25519_fe_mul( t2, t2, t1 ); /* t2 = z**(2**100 - 1) */ - fd_ed25519_fe_sq ( t3, t2 ); - for( int i=1; i<100; i++ ) fd_ed25519_fe_sq( t3, t3 ); - fd_ed25519_fe_mul( t2, t3, t2 ); /* t2 = z**(2**200 - 1) */ - fd_ed25519_fe_sq ( t2, t2 ); - for( int i=1; i< 50; i++ ) fd_ed25519_fe_sq( t2, t2 ); /* t2 = z**((2**50) * (2**200 - 1) */ - fd_ed25519_fe_mul( t1, t2, t1 ); /* t1 = z**(2**250 - 1) */ - fd_ed25519_fe_sq ( t1, t1 ); - for( int i=1; i< 5; i++ ) fd_ed25519_fe_sq( t1, t1 ); /* t1 = z**((2**5) * (2**250 - 1)) */ - return fd_ed25519_fe_mul( out, t1, t0 ); /* Recall t0 = z**11; out = z**(2**255 - 21) */ -} - -fd_ed25519_fe_t * -fd_ed25519_fe_pow22523( fd_ed25519_fe_t * out, - fd_ed25519_fe_t const * z ) { - fd_ed25519_fe_t t0[1]; - fd_ed25519_fe_t t1[1]; - fd_ed25519_fe_t t2[1]; - - fd_ed25519_fe_sq ( t0, z ); - fd_ed25519_fe_sq ( t1, t0 ); - for( int i=1; i< 2; i++ ) fd_ed25519_fe_sq( t1, t1 ); - - fd_ed25519_fe_mul( t1, z, t1 ); - fd_ed25519_fe_mul( t0, t0, t1 ); - fd_ed25519_fe_sq ( t0, t0 ); - fd_ed25519_fe_mul( t0, t1, t0 ); - fd_ed25519_fe_sq ( t1, t0 ); - for( int i=1; i< 5; i++ ) fd_ed25519_fe_sq( t1, t1 ); - - fd_ed25519_fe_mul( t0, t1, t0 ); - fd_ed25519_fe_sq ( t1, t0 ); - for( int i=1; i< 10; i++ ) fd_ed25519_fe_sq( t1, t1 ); - - fd_ed25519_fe_mul( t1, t1, t0 ); - fd_ed25519_fe_sq ( t2, t1 ); - for( int i=1; i< 20; i++ ) fd_ed25519_fe_sq( t2, t2 ); - - fd_ed25519_fe_mul( t1, t2, t1 ); - fd_ed25519_fe_sq ( t1, t1 ); - for( int i=1; i< 10; i++ ) fd_ed25519_fe_sq( t1, t1 ); - - fd_ed25519_fe_mul( t0, t1, t0 ); - fd_ed25519_fe_sq ( t1, t0 ); - for( int i=1; i< 50; i++ ) fd_ed25519_fe_sq( t1, t1 ); - - fd_ed25519_fe_mul( t1, t1, t0 ); - fd_ed25519_fe_sq ( t2, t1 ); - for( int i=1; i<100; i++ ) fd_ed25519_fe_sq( t2, t2 ); - - fd_ed25519_fe_mul( t1, t2, t1 ); - fd_ed25519_fe_sq ( t1, t1 ); - for( int i=1; i< 50; i++ ) fd_ed25519_fe_sq( t1, t1 ); - - fd_ed25519_fe_mul( t0, t1, t0 ); - fd_ed25519_fe_sq ( t0, t0 ); - for( int i=1; i< 2; i++ ) fd_ed25519_fe_sq( t0, t0 ); - - fd_ed25519_fe_mul(out, t0, z ); - return out; -} - -void -fd_ed25519_fe_mul121666( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ) { - long tmp = 0L; - for( int i=0; i<10; i+=2 ) { - tmp = ( tmp >> 25 ) + ( (long)f->limb[ i ] * 121666L ); - h->limb[ i ] = (int)tmp & ((1<<26)-1); - tmp = ( tmp >> 26 ) + ( (long)f->limb[ i+1 ] * 121666L ); - h->limb[ i+1 ] = (int)tmp & ((1<<25)-1); - } - h->limb[ 0 ] += 19 * (int)(tmp >> 25); -} - diff --git a/src/ballet/ed25519/ref/fd_ed25519_fe.h b/src/ballet/ed25519/ref/fd_ed25519_fe.h deleted file mode 100644 index 53abfab7e4..0000000000 --- a/src/ballet/ed25519/ref/fd_ed25519_fe.h +++ /dev/null @@ -1,397 +0,0 @@ -#ifndef HEADER_fd_src_ballet_ed25519_fd_ed25519_private_h -#error "Do not include this directly; use fd_ed25519_private.h" -#endif - -/* A fd_ed25519_fe_t stores an ed25519 field element in a 26/25 10-limb - representation stored in 10 32-bit ints. */ - -union fd_ed25519_fe_private { - int limb[10]; -}; - -typedef union fd_ed25519_fe_private fd_ed25519_fe_t; - -FD_PROTOTYPES_BEGIN - -/* fd_ed25519_fe_frombytes packs a fd_ed25519_fe_t from a flat 255-bit - representation. s points to a 32-byte region with the 255-bit bit - number in little endian form (top bit of s ignored). Returns h and, - on return, the fe pointed to by h will be populated with the result. */ - -fd_ed25519_fe_t * -fd_ed25519_fe_frombytes( fd_ed25519_fe_t * h, - uchar const * s ); - -/* fd_ed25519_fe_tobytes unpacks a fd_ed25519_fe_t into a flat 256-bit - representation. Returns s and, on return, the 32-byte memory region - whose first byte is pointed to by s, will be populated with the - result in little endian order. - - Preconditions: - |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. */ - -uchar * -fd_ed25519_fe_tobytes( uchar * s, - fd_ed25519_fe_t const * h ); - -/* fd_ed25519_fe_copy computes h = f. In-place operation fine. Returns - h and, on return, the result will be stored in the fe pointed to by - h. This currently does not optimize implicitly the case of h==f. */ - -static inline fd_ed25519_fe_t * -fd_ed25519_fe_copy( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ) { - h->limb[0] = f->limb[0]; h->limb[1] = f->limb[1]; - h->limb[2] = f->limb[2]; h->limb[3] = f->limb[3]; - h->limb[4] = f->limb[4]; h->limb[5] = f->limb[5]; - h->limb[6] = f->limb[6]; h->limb[7] = f->limb[7]; - h->limb[8] = f->limb[8]; h->limb[9] = f->limb[9]; - return h; -} - -/* fd_ed25519_fe_0 initializes the fe pointed to by h to 0. Returns h - and the fe pointed to by h will be 0 on return. */ - -static inline fd_ed25519_fe_t * -fd_ed25519_fe_0( fd_ed25519_fe_t * h ) { - h->limb[0] = 0; h->limb[1] = 0; - h->limb[2] = 0; h->limb[3] = 0; - h->limb[4] = 0; h->limb[5] = 0; - h->limb[6] = 0; h->limb[7] = 0; - h->limb[8] = 0; h->limb[9] = 0; - return h; -} - -/* fd_ed25519_fe_1 initializes the fe pointed to by h to 1. Returns h - and the fe pointed to by h will be 1 on return. */ - -static inline fd_ed25519_fe_t * -fd_ed25519_fe_1( fd_ed25519_fe_t * h ) { - h->limb[0] = 1; h->limb[1] = 0; - h->limb[2] = 0; h->limb[3] = 0; - h->limb[4] = 0; h->limb[5] = 0; - h->limb[6] = 0; h->limb[7] = 0; - h->limb[8] = 0; h->limb[9] = 0; - return h; -} - -/* fd_ed25519_fe_rand initializes h to a random field element whose - limbs are normalized (approximately uniform random distributed). - Returns h and, on return, the result will be stored in the fe pointed - to by h. rng is a local join to random number generator to use. - Consumes 10 slots in the rng sequence. */ - -FD_FN_UNUSED static fd_ed25519_fe_t * /* Work around -Winline */ -fd_ed25519_fe_rng( fd_ed25519_fe_t * h, - fd_rng_t * rng ) { - uint m26 = (uint)FD_ULONG_MASK_LSB(26); uint m25 = (uint)FD_ULONG_MASK_LSB(25); - h->limb[0] = (int)(fd_rng_uint( rng ) & m26); h->limb[1] = (int)(fd_rng_uint( rng ) & m25); - h->limb[2] = (int)(fd_rng_uint( rng ) & m26); h->limb[3] = (int)(fd_rng_uint( rng ) & m25); - h->limb[4] = (int)(fd_rng_uint( rng ) & m26); h->limb[5] = (int)(fd_rng_uint( rng ) & m25); - h->limb[6] = (int)(fd_rng_uint( rng ) & m26); h->limb[7] = (int)(fd_rng_uint( rng ) & m25); - h->limb[8] = (int)(fd_rng_uint( rng ) & m26); h->limb[9] = (int)(fd_rng_uint( rng ) & m25); - return h; -} - -/* fd_ed25519_fe_add computes h = f + g. In place operation is fine. - Returns h and, on return, the result will be stored in the fe pointed - to by h. This currently does not optimize implicitly the case of - f==g. - - Preconditions: - |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - - Postconditions: - |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. */ - -FD_FN_UNUSED static fd_ed25519_fe_t * /* Work around -Winline */ -fd_ed25519_fe_add( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f, - fd_ed25519_fe_t const * g ) { - h->limb[0] = f->limb[0] + g->limb[0]; h->limb[1] = f->limb[1] + g->limb[1]; - h->limb[2] = f->limb[2] + g->limb[2]; h->limb[3] = f->limb[3] + g->limb[3]; - h->limb[4] = f->limb[4] + g->limb[4]; h->limb[5] = f->limb[5] + g->limb[5]; - h->limb[6] = f->limb[6] + g->limb[6]; h->limb[7] = f->limb[7] + g->limb[7]; - h->limb[8] = f->limb[8] + g->limb[8]; h->limb[9] = f->limb[9] + g->limb[9]; - return h; -} - -/* fd_ed25519_fe_sub computes h = f - g. In place operation is fine. - Returns h and, on return, the result will be stored in the fe pointed - to by h. This currently does not optimize implicitly the case of - f==g. - - Preconditions: - |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - - Postconditions: - |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. */ - -FD_FN_UNUSED static fd_ed25519_fe_t * /* Work around -Winline */ -fd_ed25519_fe_sub( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f, - fd_ed25519_fe_t const * g ) { - h->limb[0] = f->limb[0] - g->limb[0]; h->limb[1] = f->limb[1] - g->limb[1]; - h->limb[2] = f->limb[2] - g->limb[2]; h->limb[3] = f->limb[3] - g->limb[3]; - h->limb[4] = f->limb[4] - g->limb[4]; h->limb[5] = f->limb[5] - g->limb[5]; - h->limb[6] = f->limb[6] - g->limb[6]; h->limb[7] = f->limb[7] - g->limb[7]; - h->limb[8] = f->limb[8] - g->limb[8]; h->limb[9] = f->limb[9] - g->limb[9]; - return h; -} - -/* fd_ed25519_fe_mul computes h = f * g. In place operation is fine. - Returns h and, on return, the result will be stored in the fe pointed - to by h. This currently does not optimize implicitly the case of - f==g. If appropriate, use fd_ed25519_fe_sq below or detect and - manually select at run time. - - Preconditions: - |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. - |g| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. - - Postconditions: - |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. */ - -fd_ed25519_fe_t * -fd_ed25519_fe_mul( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f, - fd_ed25519_fe_t const * g ); - -/* fd_ed25519_fe_sq computes h = f^2. In place operation is fine. This - is faster than computing this via fd_ed25519_fe_mul above. Returns h - and, on return, the result will be stored in the fe pointed to by h. - - Preconditions: - |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. - |g| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. - - Postconditions: - |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. */ - -fd_ed25519_fe_t * -fd_ed25519_fe_sq( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ); - -/* fd_ed25519_fe_invert computes out = z^-1 = z^(2^255-20). In place - operation is fine. Returns out and, on return, the result will be - stored in the fe pointed to by out. */ - -fd_ed25519_fe_t * -fd_ed25519_fe_invert( fd_ed25519_fe_t * out, - fd_ed25519_fe_t const * z ); - -/* fd_ed25519_fe_neg computes h = -f. In-place operation fine. Returns - h and, on return, the result will be stored in the fe pointed to by - h. This currently does not optimize implicitly the case of h==f. */ - -static inline fd_ed25519_fe_t * -fd_ed25519_fe_neg( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ) { - h->limb[0] = -f->limb[0]; h->limb[1] = -f->limb[1]; - h->limb[2] = -f->limb[2]; h->limb[3] = -f->limb[3]; - h->limb[4] = -f->limb[4]; h->limb[5] = -f->limb[5]; - h->limb[6] = -f->limb[6]; h->limb[7] = -f->limb[7]; - h->limb[8] = -f->limb[8]; h->limb[9] = -f->limb[9]; - return h; -} - -/* fd_ed25519_fe_if computes h = c ? f : g. In-place operation fine. - Returns h and, on return, the result will be stored in the fe pointed - to by h. This currently does not optimize implicitly the case of - h==f and tries to have a deterministic timing. */ - -FD_FN_UNUSED static fd_ed25519_fe_t * /* Work around -Winline */ -fd_ed25519_fe_if( fd_ed25519_fe_t * h, - int c, - fd_ed25519_fe_t const * f, - fd_ed25519_fe_t const * g ) { - int m = -!!c; - - int f0 = f->limb[0]; int f1 = f->limb[1]; - int f2 = f->limb[2]; int f3 = f->limb[3]; - int f4 = f->limb[4]; int f5 = f->limb[5]; - int f6 = f->limb[6]; int f7 = f->limb[7]; - int f8 = f->limb[8]; int f9 = f->limb[9]; - - int g0 = g->limb[0]; int g1 = g->limb[1]; - int g2 = g->limb[2]; int g3 = g->limb[3]; - int g4 = g->limb[4]; int g5 = g->limb[5]; - int g6 = g->limb[6]; int g7 = g->limb[7]; - int g8 = g->limb[8]; int g9 = g->limb[9]; - - h->limb[0] = g0 ^ (m & (g0 ^ f0)); h->limb[1] = g1 ^ (m & (g1 ^ f1)); - h->limb[2] = g2 ^ (m & (g2 ^ f2)); h->limb[3] = g3 ^ (m & (g3 ^ f3)); - h->limb[4] = g4 ^ (m & (g4 ^ f4)); h->limb[5] = g5 ^ (m & (g5 ^ f5)); - h->limb[6] = g6 ^ (m & (g6 ^ f6)); h->limb[7] = g7 ^ (m & (g7 ^ f7)); - h->limb[8] = g8 ^ (m & (g8 ^ f8)); h->limb[9] = g9 ^ (m & (g9 ^ f9)); - return h; -} - -/* fd_ed25519_swap_if swaps f and g if c. Tries to have a deterministic - timing. */ - -FD_FN_UNUSED static void /* Work around -Winline */ -fd_ed25519_fe_swap_if( fd_ed25519_fe_t * f, - fd_ed25519_fe_t * g, - int c ) { - int m = -!!c; - - int h0 = m & (f->limb[0] ^ g->limb[0]); - int h1 = m & (f->limb[1] ^ g->limb[1]); - int h2 = m & (f->limb[2] ^ g->limb[2]); - int h3 = m & (f->limb[3] ^ g->limb[3]); - int h4 = m & (f->limb[4] ^ g->limb[4]); - int h5 = m & (f->limb[5] ^ g->limb[5]); - int h6 = m & (f->limb[6] ^ g->limb[6]); - int h7 = m & (f->limb[7] ^ g->limb[7]); - int h8 = m & (f->limb[8] ^ g->limb[8]); - int h9 = m & (f->limb[9] ^ g->limb[9]); - - f->limb[0] ^= h0; g->limb[0] ^= h0; - f->limb[1] ^= h1; g->limb[1] ^= h1; - f->limb[2] ^= h2; g->limb[2] ^= h2; - f->limb[3] ^= h3; g->limb[3] ^= h3; - f->limb[4] ^= h4; g->limb[4] ^= h4; - f->limb[5] ^= h5; g->limb[5] ^= h5; - f->limb[6] ^= h6; g->limb[6] ^= h6; - f->limb[7] ^= h7; g->limb[7] ^= h7; - f->limb[8] ^= h8; g->limb[8] ^= h8; - f->limb[9] ^= h9; g->limb[9] ^= h9; -} - -/* fd_ed25519_fe_isnonzero returns 1 if f is not zero and 0 otherwise. - - Preconditions: - |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. */ - -static inline int -fd_ed25519_fe_isnonzero( fd_ed25519_fe_t const * f ) { - uchar s[32]; fd_ed25519_fe_tobytes( s, f ); - static uchar const zero[32]; - return !!memcmp( s, zero, 32UL ); -} - -/* fd_ed25519_fe_isnegative returns 1 if f is in {1,3,5,...,q-2} and 0 - otherwise. - - Preconditions: - |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. */ - -static inline int -fd_ed25519_fe_isnegative( fd_ed25519_fe_t const * f ) { - uchar s[32]; fd_ed25519_fe_tobytes( s, f ); - return ((int)(uint)s[0]) & 1; -} - -/* fd_ed25519_fe_sq2 computes h = 2 f^2. In place operation is fine. - This is faster than computing this via fd_ed25519_fe_mul above. - Returns h and, on return, the result will be stored in the fe pointed - to by h. - - Preconditions: - |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. - - Postconditions: - |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. */ - -fd_ed25519_fe_t * -fd_ed25519_fe_sq2( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ); - -/* fd_ed25519_fe_pow22523 computes out = z^(2^252-3). In place - operation is fine. Returns out and, on return, the result will be - stored in the fe pointed to by out. */ - -fd_ed25519_fe_t * -fd_ed25519_fe_pow22523( fd_ed25519_fe_t * out, - fd_ed25519_fe_t const * z ); - -/* fd_ed25519_fe_mul4 is equivalent to: - fd_ed25519_fe_mul( ha, fa, ga ); - fd_ed25519_fe_mul( hb, fb, gb ); - fd_ed25519_fe_mul( hc, fc, gc ); - fd_ed25519_fe_mul( hd, fd, gd ); - Similarly for fe_mul2 and fe_mul3. The outputs should not overlap. */ - -static inline void -fd_ed25519_fe_mul2( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, fd_ed25519_fe_t const * ga, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, fd_ed25519_fe_t const * gb ) { - fd_ed25519_fe_mul( ha, fa, ga ); - fd_ed25519_fe_mul( hb, fb, gb ); -} - -static inline void -fd_ed25519_fe_mul3( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, fd_ed25519_fe_t const * ga, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, fd_ed25519_fe_t const * gb, - fd_ed25519_fe_t * hc, fd_ed25519_fe_t const * fc, fd_ed25519_fe_t const * gc ) { - fd_ed25519_fe_mul( ha, fa, ga ); - fd_ed25519_fe_mul( hb, fb, gb ); - fd_ed25519_fe_mul( hc, fc, gc ); -} - -static inline void -fd_ed25519_fe_mul4( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, fd_ed25519_fe_t const * ga, - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, fd_ed25519_fe_t const * gb, - fd_ed25519_fe_t * hc, fd_ed25519_fe_t const * fc, fd_ed25519_fe_t const * gc, - fd_ed25519_fe_t * hd, fd_ed25519_fe_t const * fd, fd_ed25519_fe_t const * gd ) { - fd_ed25519_fe_mul( ha, fa, ga ); - fd_ed25519_fe_mul( hb, fb, gb ); - fd_ed25519_fe_mul( hc, fc, gc ); - fd_ed25519_fe_mul( hd, fd, gd ); -} - -/* fd_ed25519_fe_sqn4 is equivalent to: - if( na==1L ) fd_ed25519_fe_sq( ha, fa ); else fd_ed25519_fe_sq2( ha, fa ); - if( nb==1L ) fd_ed25519_fe_sq( hb, fb ); else fd_ed25519_fe_sq2( hb, fb ); - if( nc==1L ) fd_ed25519_fe_sq( hc, fc ); else fd_ed25519_fe_sq2( hc, fc ); - if( nd==1L ) fd_ed25519_fe_sq( hd, fd ); else fd_ed25519_fe_sq2( hd, fd ); - Similarly for fe_sqn2 and fe_sqn3. The outputs should not overlap. */ - -static inline void -fd_ed25519_fe_sqn2( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, long na, /* Should be 1 or 2 */ - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, long nb ) { /* " */ - if( na==1L ) fd_ed25519_fe_sq( ha, fa ); else fd_ed25519_fe_sq2( ha, fa ); - if( nb==1L ) fd_ed25519_fe_sq( hb, fb ); else fd_ed25519_fe_sq2( hb, fb ); -} - -static inline void -fd_ed25519_fe_sqn3( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, long na, /* Should be 1 or 2 */ - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, long nb, /* " */ - fd_ed25519_fe_t * hc, fd_ed25519_fe_t const * fc, long nc ) { /* " */ - if( na==1L ) fd_ed25519_fe_sq( ha, fa ); else fd_ed25519_fe_sq2( ha, fa ); - if( nb==1L ) fd_ed25519_fe_sq( hb, fb ); else fd_ed25519_fe_sq2( hb, fb ); - if( nc==1L ) fd_ed25519_fe_sq( hc, fc ); else fd_ed25519_fe_sq2( hc, fc ); -} - -static inline void -fd_ed25519_fe_sqn4( fd_ed25519_fe_t * ha, fd_ed25519_fe_t const * fa, long na, /* Should be 1 or 2 */ - fd_ed25519_fe_t * hb, fd_ed25519_fe_t const * fb, long nb, /* " */ - fd_ed25519_fe_t * hc, fd_ed25519_fe_t const * fc, long nc, /* " */ - fd_ed25519_fe_t * hd, fd_ed25519_fe_t const * fd, long nd ) { /* " */ - if( na==1L ) fd_ed25519_fe_sq( ha, fa ); else fd_ed25519_fe_sq2( ha, fa ); - if( nb==1L ) fd_ed25519_fe_sq( hb, fb ); else fd_ed25519_fe_sq2( hb, fb ); - if( nc==1L ) fd_ed25519_fe_sq( hc, fc ); else fd_ed25519_fe_sq2( hc, fc ); - if( nd==1L ) fd_ed25519_fe_sq( hd, fd ); else fd_ed25519_fe_sq2( hd, fd ); -} - -#define FD_ED25519_FE_POW25523_2_FAST 0 - -static inline void -fd_ed25519_fe_pow22523_2( fd_ed25519_fe_t * out0, fd_ed25519_fe_t const * z0, - fd_ed25519_fe_t * out1, fd_ed25519_fe_t const * z1 ) { - fd_ed25519_fe_pow22523( out0, z0 ); - fd_ed25519_fe_pow22523( out1, z1 ); -} - -/* fd_ed25519_fe_mul121666 computes h = f * 121666. In place operation - is fine. Returns h and, on return, the result will be stored in the - fe pointed to by h. */ - -void -fd_ed25519_fe_mul121666( fd_ed25519_fe_t * h, - fd_ed25519_fe_t const * f ); - -FD_PROTOTYPES_END - diff --git a/src/ballet/ed25519/ref/fd_ed25519_ge.c b/src/ballet/ed25519/ref/fd_ed25519_ge.c deleted file mode 100644 index e67c262725..0000000000 --- a/src/ballet/ed25519/ref/fd_ed25519_ge.c +++ /dev/null @@ -1,507 +0,0 @@ -#include "../fd_ed25519_private.h" - -/* Internal use representations of a ed25519 group element: - - ge_p1p1 (completed): ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T - ge_precomp (Duif): (y+x,y-x,2dxy) */ - -struct fd_ed25519_ge_p1p1_private { - fd_ed25519_fe_t X[1]; - fd_ed25519_fe_t Y[1]; - fd_ed25519_fe_t Z[1]; - fd_ed25519_fe_t T[1]; -}; - -typedef struct fd_ed25519_ge_p1p1_private fd_ed25519_ge_p1p1_t; - -struct fd_ed25519_ge_precomp_private { - fd_ed25519_fe_t yplusx [1]; - fd_ed25519_fe_t yminusx[1]; - fd_ed25519_fe_t xy2d [1]; -}; - -typedef struct fd_ed25519_ge_precomp_private fd_ed25519_ge_precomp_t; - -static inline fd_ed25519_ge_precomp_t * -fd_ed25519_ge_precomp_0( fd_ed25519_ge_precomp_t * h ) { - fd_ed25519_fe_1( h->yplusx ); - fd_ed25519_fe_1( h->yminusx ); - fd_ed25519_fe_0( h->xy2d ); - return h; -} - -struct fd_ed25519_ge_cached_private { - fd_ed25519_fe_t YplusX [1]; - fd_ed25519_fe_t YminusX[1]; - fd_ed25519_fe_t Z [1]; - fd_ed25519_fe_t T2d [1]; -}; - -typedef struct fd_ed25519_ge_cached_private fd_ed25519_ge_cached_t; - -static inline fd_ed25519_ge_cached_t * -fd_ed25519_ge_p3_to_cached( fd_ed25519_ge_cached_t * r, - fd_ed25519_ge_p3_t const * p ) { - static const fd_ed25519_fe_t d2[1] = {{ - { -21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199 } - }}; - - fd_ed25519_fe_add ( r->YplusX, p->Y, p->X ); - fd_ed25519_fe_sub ( r->YminusX, p->Y, p->X ); - fd_ed25519_fe_copy( r->Z, p->Z ); - fd_ed25519_fe_mul ( r->T2d, p->T, d2 ); - return r; -} - -/**********************************************************************/ - -/* FIXME: THIS SEEMS UNNECESSARILY BYZANTINE (AND, IF THE POINT IS - DETERMINISTIC TIMING, THIS COULD BE ACHIEVED MUCH MORE CLEANLY AND - WITH LESS OVERHEAD). */ - -static inline int /* In {0,1} */ -fd_ed25519_ge_precomp_negative( int b ) { - return (int)(((uint)b) >> 31); -} - -static inline int /* In {0,1} */ -fd_ed25519_ge_precomp_equal( int b, - int c ) { - return (int)((((uint)(b ^ c))-1U) >> 31); -} - -static inline fd_ed25519_ge_precomp_t * -fd_ed25519_ge_precomp_if( fd_ed25519_ge_precomp_t * t, - int c, - fd_ed25519_ge_precomp_t const * u, - fd_ed25519_ge_precomp_t const * v ) { - fd_ed25519_fe_if( t->yplusx, c, u->yplusx, v->yplusx ); - fd_ed25519_fe_if( t->yminusx, c, u->yminusx, v->yminusx ); - fd_ed25519_fe_if( t->xy2d, c, u->xy2d, v->xy2d ); - return t; -} - -static fd_ed25519_ge_precomp_t * -fd_ed25519_ge_table_select( fd_ed25519_ge_precomp_t * t, - int pos, - int b ) { /* In -8:8 */ - -# include "../table/fd_ed25519_ge_k25519_precomp.c" - - int bnegative = fd_ed25519_ge_precomp_negative( b ); - int babs = b - (int)((uint)((-bnegative) & b) << 1); /* b = b - (2*b) = -b = |b| if b<0, b - 2*0 = b = |b| o.w. */ - fd_ed25519_ge_precomp_0( t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 1 ), k25519_precomp[ pos ][ 0 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 2 ), k25519_precomp[ pos ][ 1 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 3 ), k25519_precomp[ pos ][ 2 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 4 ), k25519_precomp[ pos ][ 3 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 5 ), k25519_precomp[ pos ][ 4 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 6 ), k25519_precomp[ pos ][ 5 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 7 ), k25519_precomp[ pos ][ 6 ], t ); - fd_ed25519_ge_precomp_if( t, fd_ed25519_ge_precomp_equal( babs, 8 ), k25519_precomp[ pos ][ 7 ], t ); - fd_ed25519_ge_precomp_t minust[1]; - fd_ed25519_fe_copy( minust->yplusx, t->yminusx ); - fd_ed25519_fe_copy( minust->yminusx, t->yplusx ); - fd_ed25519_fe_neg ( minust->xy2d, t->xy2d ); - fd_ed25519_ge_precomp_if( t, bnegative, minust, t ); - return t; -} - -/**********************************************************************/ - -static inline fd_ed25519_ge_p2_t * -fd_ed25519_ge_p3_to_p2( fd_ed25519_ge_p2_t * r, - fd_ed25519_ge_p3_t const * p ) { - fd_ed25519_fe_copy( r->X, p->X ); - fd_ed25519_fe_copy( r->Y, p->Y ); - fd_ed25519_fe_copy( r->Z, p->Z ); - return r; -} - -static inline fd_ed25519_ge_p2_t * -fd_ed25519_ge_p1p1_to_p2( fd_ed25519_ge_p2_t * r, - fd_ed25519_ge_p1p1_t * const p ) { - fd_ed25519_fe_mul3( r->X, p->X, p->T, - r->Y, p->Y, p->Z, - r->Z, p->Z, p->T ); - return r; -} - -static inline fd_ed25519_ge_p3_t * -fd_ed25519_ge_p1p1_to_p3( fd_ed25519_ge_p3_t * r, - fd_ed25519_ge_p1p1_t const * p ) { - fd_ed25519_fe_mul4( r->X, p->X, p->T, - r->Y, p->Y, p->Z, - r->Z, p->Z, p->T, - r->T, p->X, p->Y ); - return r; -} - -static inline fd_ed25519_ge_p1p1_t * -fd_ed25519_ge_p2_dbl( fd_ed25519_ge_p1p1_t * r, - fd_ed25519_ge_p2_t const * p ) { - fd_ed25519_fe_t t0[1]; - fd_ed25519_fe_add ( r->Y, p->X, p->Y ); - fd_ed25519_fe_sqn4( r->X, p->X, 1L, - r->Z, p->Y, 1L, - r->T, p->Z, 2L, - t0, r->Y, 1L ); - fd_ed25519_fe_add ( r->Y, r->Z, r->X ); - fd_ed25519_fe_sub ( r->Z, r->Z, r->X ); - fd_ed25519_fe_sub ( r->X, t0, r->Y ); - fd_ed25519_fe_sub ( r->T, r->T, r->Z ); - return r; -} - -static inline fd_ed25519_ge_p1p1_t * -fd_ed25519_ge_p3_dbl( fd_ed25519_ge_p1p1_t * r, - fd_ed25519_ge_p3_t const * p ) { - fd_ed25519_ge_p2_t q[1]; - fd_ed25519_ge_p3_to_p2( q, p ); - fd_ed25519_ge_p2_dbl ( r, q ); - return r; -} - -FD_FN_UNUSED static fd_ed25519_ge_p1p1_t * /* Work around -Winline */ -fd_ed25519_ge_add( fd_ed25519_ge_p1p1_t * r, - fd_ed25519_ge_p3_t const * p, - fd_ed25519_ge_cached_t const * q ) { - fd_ed25519_fe_t t0[1]; - fd_ed25519_fe_add ( r->X, p->Y, p->X ); - fd_ed25519_fe_sub ( r->Y, p->Y, p->X ); - fd_ed25519_fe_mul4( r->Z, r->X, q->YplusX, - r->Y, r->Y, q->YminusX, - r->T, q->T2d, p->T, - r->X, p->Z, q->Z ); - fd_ed25519_fe_add ( t0, r->X, r->X ); - fd_ed25519_fe_sub ( r->X, r->Z, r->Y ); - fd_ed25519_fe_add ( r->Y, r->Z, r->Y ); - fd_ed25519_fe_add ( r->Z, t0, r->T ); - fd_ed25519_fe_sub ( r->T, t0, r->T ); - return r; -} - -static inline fd_ed25519_ge_p1p1_t * -fd_ed25519_ge_sub( fd_ed25519_ge_p1p1_t * r, - fd_ed25519_ge_p3_t const * p, - fd_ed25519_ge_cached_t const * q ) { - fd_ed25519_fe_t t0[1]; - fd_ed25519_fe_add ( r->X, p->Y, p->X ); - fd_ed25519_fe_sub ( r->Y, p->Y, p->X ); - fd_ed25519_fe_mul4( r->Z, r->X, q->YminusX, - r->Y, r->Y, q->YplusX, - r->T, q->T2d, p->T, - r->X, p->Z, q->Z ); - fd_ed25519_fe_add ( t0, r->X, r->X ); - fd_ed25519_fe_sub ( r->X, r->Z, r->Y ); - fd_ed25519_fe_add ( r->Y, r->Z, r->Y ); - fd_ed25519_fe_sub ( r->Z, t0, r->T ); - fd_ed25519_fe_add ( r->T, t0, r->T ); - return r; -} - -static inline fd_ed25519_ge_p1p1_t * -fd_ed25519_ge_madd( fd_ed25519_ge_p1p1_t * r, - fd_ed25519_ge_p3_t const * p, - fd_ed25519_ge_precomp_t const * q ) { - fd_ed25519_fe_t t0[1]; - fd_ed25519_fe_add ( r->X, p->Y, p->X ); - fd_ed25519_fe_sub ( r->Y, p->Y, p->X ); - fd_ed25519_fe_mul3( r->Z, r->X, q->yplusx, - r->Y, r->Y, q->yminusx, - r->T, q->xy2d, p->T ); - fd_ed25519_fe_add ( t0, p->Z, p->Z ); - fd_ed25519_fe_sub ( r->X, r->Z, r->Y ); - fd_ed25519_fe_add ( r->Y, r->Z, r->Y ); - fd_ed25519_fe_add ( r->Z, t0, r->T ); - fd_ed25519_fe_sub ( r->T, t0, r->T ); - return r; -} - -static inline fd_ed25519_ge_p1p1_t * -fd_ed25519_ge_msub( fd_ed25519_ge_p1p1_t * r, - fd_ed25519_ge_p3_t const * p, - fd_ed25519_ge_precomp_t const * q ) { - fd_ed25519_fe_t t0[1]; - fd_ed25519_fe_add ( r->X, p->Y, p->X ); - fd_ed25519_fe_sub ( r->Y, p->Y, p->X ); - fd_ed25519_fe_mul3( r->Z, r->X, q->yminusx, - r->Y, r->Y, q->yplusx, - r->T, q->xy2d, p->T ); - fd_ed25519_fe_add ( t0, p->Z, p->Z ); - fd_ed25519_fe_sub ( r->X, r->Z, r->Y ); - fd_ed25519_fe_add ( r->Y, r->Z, r->Y ); - fd_ed25519_fe_sub ( r->Z, t0, r->T ); - fd_ed25519_fe_add ( r->T, t0, r->T ); - return r; -} - -/**********************************************************************/ - -int -fd_ed25519_ge_frombytes_vartime( fd_ed25519_ge_p3_t * h, - uchar const * s ) { - - static const fd_ed25519_fe_t d[1] = {{ - { -10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116 } - }}; - - static const fd_ed25519_fe_t sqrtm1[1] = {{ - { -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482 } - }}; - - fd_ed25519_fe_t u[1]; - fd_ed25519_fe_t v[1]; - fd_ed25519_fe_frombytes( h->Y, s ); - fd_ed25519_fe_1 ( h->Z ); - fd_ed25519_fe_sq ( u, h->Y ); - fd_ed25519_fe_mul ( v, u, d ); - fd_ed25519_fe_sub ( u, u, h->Z ); /* u = y^2-1 */ - fd_ed25519_fe_add ( v, v, h->Z ); /* v = dy^2+1 */ - - fd_ed25519_fe_t v3[1]; - fd_ed25519_fe_sq ( v3, v ); - fd_ed25519_fe_mul( v3, v3, v ); /* v3 = v^3 */ - fd_ed25519_fe_sq ( h->X, v3 ); - fd_ed25519_fe_mul( h->X, h->X, v ); - fd_ed25519_fe_mul( h->X, h->X, u ); /* x = uv^7 */ - - fd_ed25519_fe_pow22523( h->X, h->X ); /* x = (uv^7)^((q-5)/8) */ - fd_ed25519_fe_mul ( h->X, h->X, v3 ); - fd_ed25519_fe_mul ( h->X, h->X, u ); /* x = uv^3(uv^7)^((q-5)/8) */ - - fd_ed25519_fe_t vxx [1]; - fd_ed25519_fe_t check[1]; - fd_ed25519_fe_sq ( vxx, h->X ); - fd_ed25519_fe_mul( vxx, vxx, v ); - fd_ed25519_fe_sub( check, vxx, u ); /* vx^2-u */ - if( fd_ed25519_fe_isnonzero( check ) ) { /* unclear prob */ - fd_ed25519_fe_add( check, vxx, u ); /* vx^2+u */ - if( FD_UNLIKELY( fd_ed25519_fe_isnonzero( check ) ) ) return FD_ED25519_ERR_PUBKEY; - fd_ed25519_fe_mul( h->X, h->X, sqrtm1 ); - } - - if( fd_ed25519_fe_isnegative( h->X )!=(s[31] >> 7) ) fd_ed25519_fe_neg( h->X, h->X ); /* unclear prob */ - - fd_ed25519_fe_mul( h->T, h->X, h->Y ); - return FD_ED25519_SUCCESS; -} - -int -fd_ed25519_ge_frombytes_vartime_2( fd_ed25519_ge_p3_t * h0, uchar const * s0, - fd_ed25519_ge_p3_t * h1, uchar const * s1 ) { - - static const fd_ed25519_fe_t d[1] = {{ - { -10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116 } - }}; - - static const fd_ed25519_fe_t sqrtm1[1] = {{ - { -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482 } - }}; - - fd_ed25519_fe_t u0[1]; - fd_ed25519_fe_t v0[1]; - fd_ed25519_fe_t u1[1]; - fd_ed25519_fe_t v1[1]; - fd_ed25519_fe_frombytes ( h0->Y, s0 ); - fd_ed25519_fe_frombytes ( h1->Y, s1 ); - fd_ed25519_fe_1 ( h0->Z ); - fd_ed25519_fe_1 ( h1->Z ); - fd_ed25519_fe_sqn2 ( u0, h0->Y, 1, - u1, h1->Y, 1 ); - fd_ed25519_fe_mul2 ( v0, u0, d, - v1, u1, d ); - fd_ed25519_fe_sub ( u0, u0, h0->Z ); /* u = y^2-1 */ - fd_ed25519_fe_sub ( u1, u1, h1->Z ); /* u = y^2-1 */ - fd_ed25519_fe_add ( v0, v0, h0->Z ); /* v = dy^2+1 */ - fd_ed25519_fe_add ( v1, v1, h1->Z ); /* v = dy^2+1 */ - - fd_ed25519_fe_t v30_0[1]; fd_ed25519_fe_t v30_1[1]; - fd_ed25519_fe_sqn2 ( v30_0, v0, 1, - v30_1, v1, 1 ); - fd_ed25519_fe_mul2 ( v30_0, v30_0, v0, /* v3 = v^3 */ - v30_1, v30_1, v1 ); /* v3 = v^3 */ - fd_ed25519_fe_sqn2 ( h0->X, v30_0, 1, - h1->X, v30_1, 1 ); - fd_ed25519_fe_mul2 ( h0->X, h0->X, v0, - h1->X, h1->X, v1 ); - fd_ed25519_fe_mul2 ( h0->X, h0->X, u0, /* x = uv^7 */ - h1->X, h1->X, u1 ); /* x = uv^7 */ - - fd_ed25519_fe_pow22523_2( h0->X, h0->X, /* x = (uv^7)^((q-5)/8) */ - h1->X, h1->X ); /* x = (uv^7)^((q-5)/8) */ - fd_ed25519_fe_mul2 ( h0->X, h0->X, v30_0, - h1->X, h1->X, v30_1 ); - fd_ed25519_fe_mul2 ( h0->X, h0->X, u0, /* x = uv^3(uv^7)^((q-5)/8) */ - h1->X, h1->X, u1 ); /* x = uv^3(uv^7)^((q-5)/8) */ - - fd_ed25519_fe_t vxx0[1]; fd_ed25519_fe_t check0[1]; - fd_ed25519_fe_t vxx1[1]; fd_ed25519_fe_t check1[1]; - fd_ed25519_fe_sqn2 ( vxx0, h0->X, 1, - vxx1, h1->X, 1 ); - fd_ed25519_fe_mul2 ( vxx0, vxx0, v0, - vxx1, vxx1, v1 ); - fd_ed25519_fe_sub ( check0, vxx0, u0 ); /* vx^2-u */ - fd_ed25519_fe_sub ( check1, vxx1, u1 ); /* vx^2-u */ - - if( fd_ed25519_fe_isnonzero( check0 ) ) { /* unclear prob */ - fd_ed25519_fe_add( check0, vxx0, u0 ); /* vx^2+u */ - if( FD_UNLIKELY( fd_ed25519_fe_isnonzero( check0 ) ) ) return FD_ED25519_ERR_PUBKEY; - fd_ed25519_fe_mul( h0->X, h0->X, sqrtm1 ); - } - if( fd_ed25519_fe_isnegative( h0->X )!=(s0[31] >> 7) ) fd_ed25519_fe_neg( h0->X, h0->X ); /* unclear prob */ - fd_ed25519_fe_mul( h0->T, h0->X, h0->Y ); - - if( fd_ed25519_fe_isnonzero( check1 ) ) { /* unclear prob */ - fd_ed25519_fe_add( check1, vxx1, u1 ); /* vx^2+u */ - if( FD_UNLIKELY( fd_ed25519_fe_isnonzero( check1 ) ) ) return FD_ED25519_ERR_SIG; - fd_ed25519_fe_mul( h1->X, h1->X, sqrtm1 ); - } - if( fd_ed25519_fe_isnegative( h1->X )!=(s1[31] >> 7) ) fd_ed25519_fe_neg( h1->X, h1->X ); /* unclear prob */ - fd_ed25519_fe_mul( h1->T, h1->X, h1->Y ); - - return FD_ED25519_SUCCESS; -} - -uchar * -fd_ed25519_ge_tobytes( uchar * s, - fd_ed25519_ge_p2_t const * h ) { - fd_ed25519_fe_t recip[1]; fd_ed25519_fe_invert( recip, h->Z ); - fd_ed25519_fe_t x[1]; - fd_ed25519_fe_t y[1]; fd_ed25519_fe_mul2( x, h->X, recip, y, h->Y, recip ); - fd_ed25519_fe_tobytes( s, y ); - s[31] ^= (uchar)(fd_ed25519_fe_isnegative( x ) << 7); - return s; -} - -uchar * -fd_ed25519_ge_p3_tobytes( uchar * s, - fd_ed25519_ge_p3_t const * h ) { - fd_ed25519_fe_t recip[1]; fd_ed25519_fe_invert( recip, h->Z ); - fd_ed25519_fe_t x[1]; - fd_ed25519_fe_t y[1]; fd_ed25519_fe_mul2( x, h->X, recip, y, h->Y, recip ); - fd_ed25519_fe_tobytes( s, y ); - s[31] ^= (uchar)(fd_ed25519_fe_isnegative( x ) << 7); - return s; -} - -fd_ed25519_ge_p3_t * -fd_ed25519_ge_scalarmult_base( fd_ed25519_ge_p3_t * h, - uchar const * a ) { - fd_ed25519_ge_p1p1_t r[1]; - fd_ed25519_ge_p2_t s[1]; - fd_ed25519_ge_precomp_t t[1]; - - int e[64]; - for( int i=0; i<32; i++ ) { - e[2*i+0] = (int)(( (uint)a[i] ) & 15U); - e[2*i+1] = (int)((((uint)a[i]) >> 4) & 15U); - } - - /* At this point, e[0:62] are in [0:15], e[63] is in [0:7] */ - - int carry = 0; - for( int i=0; i<63; i++ ) { - e[i] += carry; - carry = e[i] + 8; - carry >>= 4; - e[i] -= carry << 4; - } - e[63] += carry; - - /* At this point, e[*] are in [-8,8] */ - - fd_ed25519_ge_p3_0( h ); - for( int i=1; i<64; i+=2 ) { - fd_ed25519_ge_table_select( t, i/2, e[i] ); - fd_ed25519_ge_madd ( r, h, t ); - fd_ed25519_ge_p1p1_to_p3 ( h, r ); - } - - fd_ed25519_ge_p3_dbl ( r, h ); - fd_ed25519_ge_p1p1_to_p2( s, r ); - fd_ed25519_ge_p2_dbl ( r, s ); - fd_ed25519_ge_p1p1_to_p2( s, r ); - fd_ed25519_ge_p2_dbl ( r, s ); - fd_ed25519_ge_p1p1_to_p2( s, r ); - fd_ed25519_ge_p2_dbl ( r, s ); - fd_ed25519_ge_p1p1_to_p3( h, r ); - - for( int i=0; i<64; i+=2 ) { - fd_ed25519_ge_table_select( t, i/2, e[i] ); - fd_ed25519_ge_madd ( r, h, t ); - fd_ed25519_ge_p1p1_to_p3 ( h, r ); - } - - /* Sanitize */ - - fd_memset( e, 0, 64UL*sizeof(int) ); - - return h; -} - -static int * -fd_ed25519_ge_slide( int * r, - uchar const * a ) { - - for( int i=0; i<256; i++ ) r[i] = (int)(1U & (((uint)a[i >> 3]) >> (i & 7))); - - for( int i=0; i<256; i++ ) { - if( !r[i] ) continue; - for( int b=1; (b<=6) && ((i+b)<256); b++ ) { - if( !r[i+b] ) continue; - if ( r[i] + (r[i+b] << b) <= 15 ) { r[i] += r[i+b] << b; r[i+b] = 0; } - else if( r[i] - (r[i+b] << b) >= -15 ) { - r[i] -= r[i+b] << b; - for( int k=i+b; k<256; k++ ) { - if( !r[k] ) { r[k] = 1; break; } - r[k] = 0; - } - } else break; - } - } - - return r; -} - -fd_ed25519_ge_p2_t * -fd_ed25519_ge_double_scalarmult_vartime( fd_ed25519_ge_p2_t * r, - uchar const * a, - fd_ed25519_ge_p3_t const * A, - uchar const * b ) { - -# include "../table/fd_ed25519_ge_bi_precomp.c" - - int aslide[256]; fd_ed25519_ge_slide( aslide, a ); - int bslide[256]; fd_ed25519_ge_slide( bslide, b ); - - fd_ed25519_ge_cached_t Ai[8][1]; /* A,3A,5A,7A,9A,11A,13A,15A */ - fd_ed25519_ge_p3_t A2[1]; - fd_ed25519_ge_p1p1_t t[1]; - fd_ed25519_ge_p3_t u[1]; - - fd_ed25519_ge_p3_to_cached( Ai[0], A ); - fd_ed25519_ge_p3_dbl ( t, A ); - fd_ed25519_ge_p1p1_to_p3 ( A2, t ); - for( int i=0; i<7; i++ ) { - fd_ed25519_ge_add ( t, A2, Ai[i] ); - fd_ed25519_ge_p1p1_to_p3 ( u, t ); - fd_ed25519_ge_p3_to_cached( Ai[i+1], u ); - } - - fd_ed25519_ge_p2_0( r ); - - int i; - for( i=255; i>=0; i-- ) if( aslide[i] || bslide[i] ) break; - for( ; i>=0; i-- ) { - fd_ed25519_ge_p2_dbl( t, r ); - if( aslide[i] > 0 ) { fd_ed25519_ge_p1p1_to_p3( u, t ); fd_ed25519_ge_add ( t, u, Ai [ aslide[i] / 2] ); } - else if( aslide[i] < 0 ) { fd_ed25519_ge_p1p1_to_p3( u, t ); fd_ed25519_ge_sub ( t, u, Ai [(-aslide[i]) / 2] ); } - if( bslide[i] > 0 ) { fd_ed25519_ge_p1p1_to_p3( u, t ); fd_ed25519_ge_madd( t, u, bi_precomp[ bslide[i] / 2] ); } - else if( bslide[i] < 0 ) { fd_ed25519_ge_p1p1_to_p3( u, t ); fd_ed25519_ge_msub( t, u, bi_precomp[(-bslide[i]) / 2] ); } - fd_ed25519_ge_p1p1_to_p2( r, t ); - } - - return r; -} - diff --git a/src/ballet/ed25519/ref/fd_f25519.c b/src/ballet/ed25519/ref/fd_f25519.c new file mode 100644 index 0000000000..e9b5cba72f --- /dev/null +++ b/src/ballet/ed25519/ref/fd_f25519.c @@ -0,0 +1,28 @@ +#include "../fd_f25519.h" + +/* fd_f25519_rng generates a random fd_f25519_t element. + Note: insecure, for tests only. */ +fd_f25519_t * +fd_f25519_rng_unsafe( fd_f25519_t * r, + fd_rng_t * rng ) { +#if USE_FIAT_32 + r->el[0] = fd_rng_uint( rng ); + r->el[1] = fd_rng_uint( rng ); + r->el[2] = fd_rng_uint( rng ); + r->el[3] = fd_rng_uint( rng ); + r->el[4] = fd_rng_uint( rng ); + r->el[5] = fd_rng_uint( rng ); + r->el[6] = fd_rng_uint( rng ); + r->el[7] = fd_rng_uint( rng ); + r->el[8] = fd_rng_uint( rng ); + r->el[9] = fd_rng_uint( rng ); +#else + r->el[0] = fd_rng_ulong( rng ); + r->el[1] = fd_rng_ulong( rng ); + r->el[2] = fd_rng_ulong( rng ); + r->el[3] = fd_rng_ulong( rng ); + r->el[4] = fd_rng_ulong( rng ); +#endif + fiat_25519_carry( r->el, r->el ); + return r; +} diff --git a/src/ballet/ed25519/ref/fd_f25519.h b/src/ballet/ed25519/ref/fd_f25519.h new file mode 100644 index 0000000000..ca4d97bfd0 --- /dev/null +++ b/src/ballet/ed25519/ref/fd_f25519.h @@ -0,0 +1,326 @@ +#ifndef HEADER_fd_src_ballet_ed25519_fd_f25519_h +#error "Do not include this directly; use fd_f25519.h" +#endif + +#include "../../fd_ballet_base.h" + +#define USE_FIAT_32 0 +#if USE_FIAT_32 +#include "../../fiat-crypto/curve25519_32.c" +#else +#include "../../fiat-crypto/curve25519_64.c" +#endif + +/* A fd_f25519_t stores a curve25519 field element in 10 uint (32 bit), + or 5 ulong (64 bit). */ +struct fd_f25519 { +#if USE_FIAT_32 + uint el[10]; +#else + ulong el[5]; +#endif +}; +typedef struct fd_f25519 fd_f25519_t; + +#include "../table/fd_f25519_table_ref.c" + +FD_PROTOTYPES_BEGIN + +/* + * Implementation of inline functions + */ + +/* fd_f25519_mul computes r = a * b, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_mul( fd_f25519_t * r, + fd_f25519_t const * a, + fd_f25519_t const * b ) { + fiat_25519_carry_mul( r->el, a->el, b->el ); + return r; +} + +/* fd_f25519_sqr computes r = a^2, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_sqr( fd_f25519_t * r, + fd_f25519_t const * a ) { + fiat_25519_carry_square( r->el, a->el ); + return r; +} + +/* fd_f25519_add computes r = a + b, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_add( fd_f25519_t * r, + fd_f25519_t const * a, + fd_f25519_t const * b ) { + fiat_25519_add( r->el, a->el, b->el ); + fiat_25519_carry( r->el, r->el ); + return r; +} + +/* fd_f25519_add computes r = a - b, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_sub( fd_f25519_t * r, + fd_f25519_t const * a, + fd_f25519_t const * b ) { + fiat_25519_sub( r->el, a->el, b->el ); + fiat_25519_carry( r->el, r->el ); + return r; +} + +/* fd_f25519_add computes r = a + b, and returns r. + Note: this does NOT reduce the result mod p. + It can be used before mul, sqr. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_add_nr( fd_f25519_t * r, + fd_f25519_t const * a, + fd_f25519_t const * b ) { + fiat_25519_add( r->el, a->el, b->el ); + return r; +} + +/* fd_f25519_sub computes r = a - b, and returns r. + Note: this does NOT reduce the result mod p. + It can be used before mul, sqr. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_sub_nr( fd_f25519_t * r, + fd_f25519_t const * a, + fd_f25519_t const * b ) { + fiat_25519_sub( r->el, a->el, b->el ); + return r; +} + +/* fd_f25519_add computes r = -a, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_neg( fd_f25519_t * r, + fd_f25519_t const * a ) { + fiat_25519_opp( r->el, a->el ); + return r; +} + +/* fd_f25519_add computes r = a * k, k=121666, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_mul_121666( fd_f25519_t * r, + fd_f25519_t const * a ) { + fiat_25519_carry_scmul_121666( r->el, a->el ); + return r; +} + +/* fd_f25519_frombytes deserializes a 32-byte buffer buf into a + fd_f25519_t element r, and returns r. + buf is in little endian form, according to RFC 8032. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_frombytes( fd_f25519_t * r, + uchar const buf[ 32 ] ) { + fiat_25519_from_bytes( r->el, buf ); + return r; +} + +/* fd_f25519_tobytes serializes a fd_f25519_t element a into + a 32-byte buffer out, and returns out. + out is in little endian form, according to RFC 8032. */ +FD_25519_INLINE uchar * +fd_f25519_tobytes( uchar out[ 32 ], + fd_f25519_t const * a ) { + fiat_25519_to_bytes( out, a->el ); + return out; +} + +/* fd_f25519_if sets r = a0 if cond, else r = a1, equivalent to: + r = cond ? a0 : a1. + Note: this is constant time. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_if( fd_f25519_t * r, + int const cond, /* 0, 1 */ + fd_f25519_t const * a0, + fd_f25519_t const * a1 ) { + fiat_25519_selectznz( r->el, (uchar)cond, a1->el, a0->el ); + return r; +} + +/* fd_f25519_swap_if swaps r1, r2 if cond, else leave them as is. + Note: this is constant time. */ +FD_25519_INLINE void +fd_f25519_swap_if( fd_f25519_t * restrict r1, + fd_f25519_t * restrict r2, + int const cond /* 0, 1 */ ) { + +#if USE_FIAT_32 + uint m = (uint)-!!cond; + uint h0 = m & (r1->el[0] ^ r2->el[0]); + uint h1 = m & (r1->el[1] ^ r2->el[1]); + uint h2 = m & (r1->el[2] ^ r2->el[2]); + uint h3 = m & (r1->el[3] ^ r2->el[3]); + uint h4 = m & (r1->el[4] ^ r2->el[4]); + uint h5 = m & (r1->el[5] ^ r2->el[5]); + uint h6 = m & (r1->el[6] ^ r2->el[6]); + uint h7 = m & (r1->el[7] ^ r2->el[7]); + uint h8 = m & (r1->el[8] ^ r2->el[8]); + uint h9 = m & (r1->el[9] ^ r2->el[9]); + +#else + ulong m = (ulong)-!!cond; + ulong h0 = m & (r1->el[0] ^ r2->el[0]); + ulong h1 = m & (r1->el[1] ^ r2->el[1]); + ulong h2 = m & (r1->el[2] ^ r2->el[2]); + ulong h3 = m & (r1->el[3] ^ r2->el[3]); + ulong h4 = m & (r1->el[4] ^ r2->el[4]); +#endif + + r1->el[0] ^= h0; + r1->el[1] ^= h1; + r1->el[2] ^= h2; + r1->el[3] ^= h3; + r1->el[4] ^= h4; + + r2->el[0] ^= h0; + r2->el[1] ^= h1; + r2->el[2] ^= h2; + r2->el[3] ^= h3; + r2->el[4] ^= h4; + +#if USE_FIAT_32 + r1->el[5] ^= h5; + r1->el[6] ^= h6; + r1->el[7] ^= h7; + r1->el[8] ^= h8; + r1->el[9] ^= h9; + + r2->el[5] ^= h5; + r2->el[6] ^= h6; + r2->el[7] ^= h7; + r2->el[8] ^= h8; + r2->el[9] ^= h9; +#endif +} + +/* fd_f25519_set copies r = a, and returns r. */ +FD_25519_INLINE fd_f25519_t * +fd_f25519_set( fd_f25519_t * r, + fd_f25519_t const * a ) { + r->el[0] = a->el[0]; + r->el[1] = a->el[1]; + r->el[2] = a->el[2]; + r->el[3] = a->el[3]; + r->el[4] = a->el[4]; +#if USE_FIAT_32 + r->el[5] = a->el[5]; + r->el[6] = a->el[6]; + r->el[7] = a->el[7]; + r->el[8] = a->el[8]; + r->el[9] = a->el[9]; +#endif + return r; +} + +/* fd_f25519_is_zero returns 1 if a == 0, 0 otherwise. */ +FD_25519_INLINE int +fd_f25519_is_zero( fd_f25519_t const * a ) { + // fiat_25519_tight_field_element x; + // fiat_25519_carry( x, a->el ); +#if USE_FIAT_32 + uint const * x = a->el; + if(( x[0] == 0 + && x[1] == 0 + && x[2] == 0 + && x[3] == 0 + && x[4] == 0 + && x[5] == 0 + && x[6] == 0 + && x[7] == 0 + && x[8] == 0 + && x[9] == 0 + ) || ( + x[0] == 0x3ffffed + && x[1] == 0x1ffffff + && x[2] == 0x3ffffff + && x[3] == 0x1ffffff + && x[4] == 0x3ffffff + && x[5] == 0x1ffffff + && x[6] == 0x3ffffff + && x[7] == 0x1ffffff + && x[8] == 0x3ffffff + && x[9] == 0x1ffffff + )) { + return 1; + } +#else + ulong const * x = a->el; + if(( x[0] == 0 + && x[1] == 0 + && x[2] == 0 + && x[3] == 0 + && x[4] == 0 + ) || ( + x[0] == 0x7ffffffffffed + && x[1] == 0x7ffffffffffff + && x[2] == 0x7ffffffffffff + && x[3] == 0x7ffffffffffff + && x[4] == 0x7ffffffffffff + )) { + return 1; + } +#endif + return 0; +} + +/* + * Vectorized + */ + +/* fd_f25519_muln computes r_i = a_i * b_i */ +FD_25519_INLINE void +fd_f25519_mul2( fd_f25519_t * r1, fd_f25519_t const * a1, fd_f25519_t const * b1, + fd_f25519_t * r2, fd_f25519_t const * a2, fd_f25519_t const * b2 ) { + fd_f25519_mul( r1, a1, b1 ); + fd_f25519_mul( r2, a2, b2 ); +} + +FD_25519_INLINE void +fd_f25519_mul3( fd_f25519_t * r1, fd_f25519_t const * a1, fd_f25519_t const * b1, + fd_f25519_t * r2, fd_f25519_t const * a2, fd_f25519_t const * b2, + fd_f25519_t * r3, fd_f25519_t const * a3, fd_f25519_t const * b3 ) { + fd_f25519_mul( r1, a1, b1 ); + fd_f25519_mul( r2, a2, b2 ); + fd_f25519_mul( r3, a3, b3 ); +} + +FD_25519_INLINE void +fd_f25519_mul4( fd_f25519_t * r1, fd_f25519_t const * a1, fd_f25519_t const * b1, + fd_f25519_t * r2, fd_f25519_t const * a2, fd_f25519_t const * b2, + fd_f25519_t * r3, fd_f25519_t const * a3, fd_f25519_t const * b3, + fd_f25519_t * r4, fd_f25519_t const * a4, fd_f25519_t const * b4 ) { + fd_f25519_mul( r1, a1, b1 ); + fd_f25519_mul( r2, a2, b2 ); + fd_f25519_mul( r3, a3, b3 ); + fd_f25519_mul( r4, a4, b4 ); +} + +/* fd_f25519_sqrn computes r_i = a_i^2 */ +FD_25519_INLINE void +fd_f25519_sqr2( fd_f25519_t * r1, fd_f25519_t const * a1, + fd_f25519_t * r2, fd_f25519_t const * a2 ) { + fd_f25519_sqr( r1, a1 ); + fd_f25519_sqr( r2, a2 ); +} + +FD_25519_INLINE void +fd_f25519_sqr3( fd_f25519_t * r1, fd_f25519_t const * a1, + fd_f25519_t * r2, fd_f25519_t const * a2, + fd_f25519_t * r3, fd_f25519_t const * a3 ) { + fd_f25519_sqr( r1, a1 ); + fd_f25519_sqr( r2, a2 ); + fd_f25519_sqr( r3, a3 ); +} + +FD_25519_INLINE void +fd_f25519_sqr4( fd_f25519_t * r1, fd_f25519_t const * a1, + fd_f25519_t * r2, fd_f25519_t const * a2, + fd_f25519_t * r3, fd_f25519_t const * a3, + fd_f25519_t * r4, fd_f25519_t const * a4 ) { + fd_f25519_sqr( r1, a1 ); + fd_f25519_sqr( r2, a2 ); + fd_f25519_sqr( r3, a3 ); + fd_f25519_sqr( r4, a4 ); +} + +FD_PROTOTYPES_END diff --git a/src/ballet/ed25519/table/fd_curve25519_table_avx512.c b/src/ballet/ed25519/table/fd_curve25519_table_avx512.c new file mode 100644 index 0000000000..4ca4e3db8a --- /dev/null +++ b/src/ballet/ed25519/table/fd_curve25519_table_avx512.c @@ -0,0 +1,2407 @@ +/* Do NOT modify. This file is auto generated by fd_curve25519_tables. */ + +#ifndef HEADER_fd_src_ballet_ed25519_fd_curve25519_h +#error "Do not include this directly; use fd_curve25519.h" +#endif + +/* Ed25519 base point. */ +static const fd_ed25519_point_t fd_ed25519_base_point[1] = { + // compressed: 0x5866666666666666666666666666666666666666666666666666666666666666 + { + { 0x000005608f25d51a, 0x0000066666666658, 0x0000000000000001, 0x000002b3a5b7dda3, 0x00000118feeb6e2e, 0x0000033333333333, 0x0000000000000000, 0x000007473255f1be, }, + { 0x000004b4f6592ac5, 0x000004cccccccccc, 0x0000000000000000, 0x0000022a5eadbbd1, 0x000006e53fec0a4e, 0x0000066666666666, 0x0000000000000000, 0x000000b766566ea4, }, + { 0x000001a4b31d8254, 0x0000019999999999, 0x0000000000000000, 0x00000483c27e01dd, 0x00000042d26da79a, 0x000000cccccccccc, 0x0000000000000000, 0x000000cf0ebe1faf, }, + }, +}; + +/* Low-order points y coordinates. */ +// 0x26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05 +static const fd_f25519_t fd_ed25519_order8_point_y0[1] = {{ + { 0x000002c28f95e826, 0x0000069868b604f6, 0x000007c263bfca27, 0x0000036982d66fea, 0x000000238b13933c, 0x0000000bf8a6db10, 0x0, 0x0, } +}}; + +// 0xc7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a +static const fd_f25519_t fd_ed25519_order8_point_y1[1] = {{ + { 0x0000053d706a17c7, 0x000001679749fb09, 0x0000003d9c4035d8, 0x000004967d299015, 0x000007dc74ec6cc3, 0x000000f4075924ef, 0x0, 0x0, } +}}; + +/* Ed25519 base point w-NAF table for fast scalar multiplication. + Table size 128 points, i.e. max w=8. + Used by fd_ed25519_verify and similar. */ +static const fd_ed25519_point_t fd_ed25519_base_point_wnaf_table[128] = { + // compressed: 0x853b8cf5c693bc2f190e8cfbc62d93cfc2423d6498480b2765bad4333a9dcf07 + { + { 0x00000105d740913e, 0x000003c6f58c3b85, 0x0000000000000001, 0x00000205877aaa68, 0x0000021a3447c504, 0x0000044c321ea161, 0x0000000000000000, 0x000006e5eea1acc6, }, + { 0x00000017d673a207, 0x00000181c325f792, 0x0000000000000000, 0x0000055893d57922, 0x00000781267a5c18, 0x0000054ba65270b4, 0x0000000000000000, 0x000000c65a85a1b7, }, + { 0x000007f4e67c1745, 0x0000033e4cb71bee, 0x0000000000000000, 0x0000009b67a08f32, 0x00000089fa5f2531, 0x0000000f9f3a7467, 0x0000000000000000, 0x000000de22f6d13e, }, + }, + // compressed: 0x3097ee4ca8b025af8a4b86e830845a023267019f02501bc1f4f8809a1b4e16fa + { + { 0x000007e8a4fcd265, 0x000000a84cee9730, 0x0000000000000001, 0x0000033f0dd0d889, 0x0000018d10a5eb5e, 0x000000014f80b399, 0x0000000000000000, 0x000002a2c6796da6, }, + { 0x000000374faacc23, 0x000000c97155e4b6, 0x0000000000000000, 0x000006bb4c4295d2, 0x000005bda628131f, 0x0000000f8f4c11b5, 0x0000000000000000, 0x0000039b4c6d170e, }, + { 0x000004ef4d4ff797, 0x000000096a10c3a2, 0x0000000000000000, 0x00000162508c8870, 0x00000055722b0eaa, 0x000000f42c9c3735, 0x0000000000000000, 0x000000b4504d5e25, }, + }, + // compressed: 0x33bba50844bc12a202ed5ec7c348508d44ecbf5a0ceb1bddeb06e246f1cc4529 + { + { 0x000002c3a447d6ba, 0x0000044408a5bb33, 0x0000000000000001, 0x000003f1812a8285, 0x0000008e5c325043, 0x000005862d5ff622, 0x0000000000000000, 0x000003858dded396, }, + { 0x000004e536eff230, 0x000003dda0544257, 0x0000000000000000, 0x000007ba3f97977b, 0x000001b55f3e33cf, 0x000006206ebdd1be, 0x0000000000000000, 0x000003bb69ab41b6, }, + { 0x000007540053452c, 0x0000023541230f1d, 0x0000000000000000, 0x0000049c38201f42, 0x0000002a94fce7d6, 0x000000528b99e28d, 0x0000000000000000, 0x00000087557cd2d6, }, + }, + // compressed: 0xbfa34e94d05c1a6bd2c09db33a357074492e54288252b2717e923c2869ea1bc6 + { + { 0x0000049aaa3221b1, 0x000004d0944ea3bf, 0x0000000000000001, 0x000005c801b8b3a2, 0x00000327c90c961d, 0x00000141142a1724, 0x0000000000000000, 0x000000dd2c3bd6f9, }, + { 0x0000074474f74de5, 0x000003b81a4d634b, 0x0000000000000000, 0x000007d4935e306d, 0x000005317e09dea7, 0x000003c927e71b25, 0x0000000000000000, 0x000000f90a7529c4, }, + { 0x000001b280854cee, 0x000005d1c0d4eace, 0x0000000000000000, 0x000006cc0d7d1c14, 0x0000003addbaba5c, 0x0000008c37d4d250, 0x0000000000000000, 0x000000f53f7638d4, }, + }, + // compressed: 0x2f63a8a68a672e9bc546bc516f9e50a6b5f586c6c933b2ce597fdd8a33edb934 + { + { 0x0000017e039d8064, 0x0000078aa6a8632f, 0x0000000000000001, 0x000000bf9045af1b, 0x0000030473af5822, 0x000001e4e3437ada, 0x0000000000000000, 0x00000614c9ea678b, }, + { 0x00000408337e6dc4, 0x00000788d8b365cc, 0x0000000000000000, 0x0000033a45e0d69d, 0x000005c9c8f96cbc, 0x000005d7f59ceb23, 0x0000000000000000, 0x00000008b06aaf6f, }, + { 0x000002628206dbd4, 0x000006994279bd46, 0x0000000000000000, 0x0000038bfe0fa29c, 0x0000009380b4a3f5, 0x0000006973da6715, 0x0000000000000000, 0x000000e782e40436, }, + }, + // compressed: 0xde2a808a8400bf2f272e3002cffed9e50634701771843e11af8f6d54e2aa7542 + { + { 0x0000030249864348, 0x000000848a802ade, 0x0000000000000001, 0x000004c5fd6089e9, 0x000002aab546f5ca, 0x000002388bb81a03, 0x0000000000000000, 0x000000ccda8d4311, }, + { 0x0000011070262beb, 0x00000605c4e5f7e0, 0x0000000000000000, 0x0000005c949b0565, 0x0000055c77fa3a07, 0x000006d8faf113e8, 0x0000000000000000, 0x000003df94844311, }, + { 0x000004fb5acda5dc, 0x0000039767fb3c08, 0x0000000000000000, 0x0000000c7ad284ca, 0x0000003156b30053, 0x00000084eb55c4a8, 0x0000000000000000, 0x0000007b8caa456a, }, + }, + // compressed: 0x6d7f00a222c270bfdbdebcb59ab384bf07ba07fb120e7a5341f246c3eed74fa3 + { + { 0x0000013b327fbf93, 0x00000222a2007f6d, 0x0000000000000001, 0x00000119732ea378, 0x000001195556acb4, 0x000007097d83dd03, 0x0000000000000000, 0x000003fc48d3f299, }, + { 0x000006eded6a0de0, 0x0000079bdb77ee18, 0x0000000000000000, 0x000001ba8e2a6c14, 0x000006024a79d12b, 0x0000046f241537a0, 0x0000000000000000, 0x00000097863a2ef3, }, + { 0x000002bbf3af266d, 0x000006fe12ce6ad6, 0x0000000000000000, 0x00000490df9ac77e, 0x00000004cf105a2e, 0x000000469fafdd86, 0x0000000000000000, 0x00000092f74dfb54, }, + }, + // compressed: 0xa0eacf1303ccce246d249c188dc24886d0d4f2c1fabdbd2d2be72df11729e2e1 + { + { 0x00000586468ccf0b, 0x0000040313cfeaa0, 0x0000000000000001, 0x0000062f9bd0b516, 0x0000000403d928c9, 0x000006fd60f96a68, 0x0000000000000000, 0x0000053ec9eb2138, }, + { 0x000003221ac08179, 0x000003848da499d9, 0x0000000000000000, 0x000007fbddcbb34e, 0x00000505ebf75083, 0x000002de72b2dbdb, 0x0000000000000000, 0x0000064d842032e5, }, + { 0x0000034e0a6e90aa, 0x00000219230a3462, 0x0000000000000000, 0x000003ace2bd38dc, 0x000000876b9a8431, 0x000000c3c4522fe2, 0x0000000000000000, 0x000000a23ac24215, }, + }, + // compressed: 0x819d0e95ef76c6924f04d7c0cd2046a548128f6f64369baae355b8dd245932ed + { + { 0x000006484420de87, 0x000006ef950e9d81, 0x0000000000000001, 0x000002b8a5c8c854, 0x0000071394ca1692, 0x0000033237c78924, 0x0000000000000000, 0x0000048c41bbc686, }, + { 0x0000025db6810270, 0x000002e089f258ce, 0x0000000000000000, 0x000003e5406d8e30, 0x0000048281039fa4, 0x000003855e3aa9b3, 0x0000000000000000, 0x000001eeaa972cf5, }, + { 0x0000062873c05ad6, 0x0000029518833703, 0x0000000000000000, 0x000000cff451e7f9, 0x000000e34ffcdfc4, 0x000000da64b249bb, 0x0000000000000000, 0x0000008e8d896cab, }, + }, + // compressed: 0x2b9ac66d3c7b77d317f6896f27b2fadeb5163ab5f71c6545b79ffe34de519adc + { + { 0x000006c864741147, 0x0000033c6dc69a2b, 0x0000000000000001, 0x000001cf79f10e67, 0x0000053b03395199, 0x0000067bda9d0b5a, 0x0000000000000000, 0x0000038b880a113b, }, + { 0x00000799092690a8, 0x0000013ec2fa6eef, 0x0000000000000000, 0x0000030a2b7ea21e, 0x0000035e6d6ff939, 0x000007e9fb745651, 0x0000000000000000, 0x000000223bb09c3a, }, + { 0x000001f4d6bb743b, 0x0000077beac89dbe, 0x0000000000000000, 0x000007ff776a8799, 0x000000432cc692fb, 0x000000b934a3bc69, 0x0000000000000000, 0x0000009008a078c1, }, + }, + // compressed: 0xc77fa32cd09e24c4abac15a6e3a059a0230e6ec9d76ea9886d695016a59833d5 + { + { 0x000001d23a36d175, 0x000006d02ca37fc7, 0x0000000000000001, 0x000005d278451edf, 0x000006721041c523, 0x0000076be4b70711, 0x0000000000000000, 0x00000516cfd2ca84, }, + { 0x00000373c6476d04, 0x000002b595788493, 0x0000000000000000, 0x000001339973425e, 0x000005e4c5e5d9e5, 0x0000050696d88a96, 0x0000000000000000, 0x0000075a611477f4, }, + { 0x000006eed02a9fa6, 0x0000068166838e98, 0x0000000000000000, 0x000000eb6975e616, 0x000000ee3c1310b1, 0x000000aa67314a2c, 0x0000000000000000, 0x000000b4bda3ad1f, }, + }, + // compressed: 0x830e15fe2a129511d8354b7e259a20cf201e711e29f88773f092bfd897b8acc4 + { + { 0x000000c558527359, 0x0000022afe150e83, 0x0000000000000001, 0x000000145e134b83, 0x0000060f6d0e55f4, 0x000004148f388f10, 0x0000000000000000, 0x000004547e0d1f6b, }, + { 0x00000373afd75cbc, 0x00000166bb0232a2, 0x0000000000000000, 0x0000060982c3cc0d, 0x000006fdc4428653, 0x000003f92f07387f, 0x0000000000000000, 0x000002d2f92506e8, }, + { 0x000004e4b970672b, 0x0000033c826895f9, 0x0000000000000000, 0x00000713d7993c90, 0x0000000336c026bf, 0x0000008959712fb1, 0x0000000000000000, 0x0000002a1893fbcd, }, + }, + // compressed: 0x3811470995f27b8e51a6754f39ef6f5dad08a725c479af102299b95b075a2b6b + { + { 0x0000063c9cdca868, 0x0000029509471138, 0x0000000000000001, 0x0000004b47a0b976, 0x000001ab061b0b46, 0x000004e212d38456, 0x0000000000000000, 0x000007d8eaa17ac8, }, + { 0x000006295a170930, 0x000006b4ca31cf7e, 0x0000000000000000, 0x000002e91aab17ee, 0x0000005fbc1fe3ee, 0x0000039992210af7, 0x0000000000000000, 0x00000555d00aa2b1, }, + { 0x00000720fd136ee1, 0x00000575bfbce53d, 0x0000000000000000, 0x0000029806cd55d0, 0x000000f14daef23c, 0x000000d656b40eb7, 0x0000000000000000, 0x000000e4b8fff895, }, + }, + // compressed: 0xb299cfd1156742e4340da20211d552739f10128b7b15d123a3f3b17c27c94c79 + { + { 0x000003f71cd098c0, 0x00000715d1cf99b2, 0x0000000000000001, 0x00000426c2ac5053, 0x000006b8a4814ca6, 0x000002bdc589084f, 0x0000000000000000, 0x0000017885188810, }, + { 0x000003cc6cd23005, 0x00000441a69c884c, 0x0000000000000000, 0x000006ce4b095ed8, 0x0000055fae7df585, 0x0000031f3a323d11, 0x0000000000000000, 0x000004c8e852ad03, }, + { 0x000003f905b293b5, 0x000005cd4b54440a, 0x0000000000000000, 0x000006f26bb6b4cb, 0x00000099aa8c4bf0, 0x000000f299924ef9, 0x0000000000000000, 0x000000e0106af6df, }, + }, + // compressed: 0x013f77382767880bfbccfb95fac8ccb8b629adb9a3d52d8d6a0fad51987eef06 + { + { 0x000007bb82584a34, 0x0000072738773f01, 0x0000000000000001, 0x0000071cc0577de5, 0x000001ce2429b101, 0x000002d1dcd694db, 0x0000000000000000, 0x00000780ec017038, }, + { 0x0000068f257a0373, 0x000007799f61710c, 0x0000000000000000, 0x000006bb8b99526e, 0x0000056d428b6316, 0x000002d0f6a8d2dd, 0x0000000000000000, 0x000002af86a24680, }, + { 0x0000011ead918f4a, 0x000002e33323ea57, 0x0000000000000000, 0x000005d503907940, 0x0000002752546cd3, 0x0000000ddefd30a3, 0x0000000000000000, 0x0000007852dbbf14, }, + }, + // compressed: 0x13a714d9f915adae12f98f8cf97b2fa930d7539f1723f8afba770c4993d399fa + { + { 0x0000052ebb1f2541, 0x000005f9d914a713, 0x0000000000000001, 0x0000052436bda3e8, 0x000001bee850d682, 0x0000018bcfa9eb98, 0x0000000000000000, 0x000002b19317ce70, }, + { 0x000005b723ff9d69, 0x000001ff2255d5a2, 0x0000000000000000, 0x00000500f291ea5d, 0x0000047717bfc71a, 0x000000c77baaff82, 0x0000000000000000, 0x0000002f7d2a5a96, }, + { 0x000006e254431d02, 0x000002a4bdefe632, 0x0000000000000000, 0x000001dea321055f, 0x000000151258e00e, 0x000000f533a72692, 0x0000000000000000, 0x00000050cec5a506, }, + }, + // compressed: 0x255be33c0936784e97aa6bb21d18e1823fb8c7cbd392c10c3a9d9d6a04daf1b2 + { + { 0x0000062bce2ef5bd, 0x000006093ce35b25, 0x0000000000000001, 0x000002a66d597c6a, 0x000003cf9dddc4dc, 0x00000169e5e3dc1f, 0x0000000000000000, 0x00000639e104d811, }, + { 0x000000f78c6f8ab1, 0x0000057552e9cf06, 0x0000000000000000, 0x00000270a57551a2, 0x0000071767a154a1, 0x000001d9d3a0cc19, 0x0000000000000000, 0x000002d28a63f91d, }, + { 0x0000039261b2d19d, 0x0000060b846076c9, 0x0000000000000000, 0x0000023c464c0c13, 0x000000ed0de547ad, 0x00000065e3b408d5, 0x0000000000000000, 0x000000ac260bf153, }, + }, + // compressed: 0xd1ae92ec8d970c10e5736d4d43d543ca48ba47d8221b13832c4d5de353ecaa80 + { + { 0x00000428e7b0c0d5, 0x0000078dec92aed1, 0x0000000000000001, 0x00000773003ad2aa, 0x000006d3eb808530, 0x000005916c23dd24, 0x0000000000000000, 0x000006432907691f, }, + { 0x000000eb8a6ce459, 0x000005ae7ca20192, 0x0000000000000000, 0x0000042cc10f763e, 0x0000057cc6ccaf68, 0x000005d4d2c83131, 0x0000000000000000, 0x000000654807821d, }, + { 0x000005c277a6ef6c, 0x000003290f550d35, 0x0000000000000000, 0x0000002cfca600ac, 0x000000061435de58, 0x0000000155d8a7c6, 0x0000000000000000, 0x000000417d383848, }, + }, + // compressed: 0xa6739624d88753e193e446f52dbc4359b5636fc3819a7f1cdec10a1f36b30a75 + { + { 0x0000044ae2025e60, 0x000007d8249673a6, 0x0000000000000001, 0x00000283a2f81037, 0x000001ce7cad068e, 0x00000540e1b7b1da, 0x0000000000000000, 0x000000add61712b1, }, + { 0x0000039727041c1c, 0x000000dc927c2a70, 0x0000000000000000, 0x000007f97e23d146, 0x0000067e311105d6, 0x000000ac1de1c7f9, 0x0000000000000000, 0x00000075040b72fd, }, + { 0x000002c0ececbf2f, 0x000005650ef0b7d5, 0x0000000000000000, 0x000005bcbb688ef5, 0x000000d2ec98a8a0, 0x000000ea15666c3e, 0x0000000000000000, 0x000000a9f2d67f6e, }, + }, + // compressed: 0x7992662904f2ad0f4a727d7d04a2dd3af160578c82943d6f9e53b72bc5e97fbd + { + { 0x000007c616b11ecd, 0x0000020429669279, 0x0000000000000001, 0x000005f737b8856b, 0x00000088737673c2, 0x00000241462bb078, 0x0000000000000000, 0x000003a55072cf11, }, + { 0x000002ec8f22efb5, 0x000007ae4941f5be, 0x0000000000000000, 0x00000342f14e0665, 0x0000005dbf0b7a8a, 0x0000037539e6f3d9, 0x0000000000000000, 0x00000088242320ff, }, + { 0x00000625d92e73e9, 0x000004eb768811f5, 0x0000000000000000, 0x000001d741750c10, 0x000000f1cd073f7d, 0x0000007affd38a57, 0x0000000000000000, 0x000000e1e4d1e6a0, }, + }, + // compressed: 0x475f80b183458666197cdd60d1c535f506b04c1eb74e87e9d989d8fa5c340dfc + { + { 0x0000012070dcf355, 0x00000583b1805f47, 0x0000000000000001, 0x0000074b8c78338a, 0x000007769aa95b4c, 0x0000075b8f265803, 0x0000000000000000, 0x000000a95a2f9ea2, }, + { 0x0000079c22e46482, 0x000003af832cd0c8, 0x0000000000000000, 0x00000416bc2b23e3, 0x0000038c4b9b31dd, 0x000005889d9e9874, 0x0000000000000000, 0x000002ec7775cbc4, }, + { 0x000000e03325fb9f, 0x000003d4d7174583, 0x0000000000000000, 0x00000280d9aac59f, 0x000000809cad8073, 0x000000f81a68b9f5, 0x0000000000000000, 0x00000041aea8ec55, }, + }, + // compressed: 0x58b73bc76fc38f5e9abb3c36a543e5ac22c93b907d4a93a962eccef3461e8fab + { + { 0x000006b135b9f543, 0x0000036fc73bb758, 0x0000000000000001, 0x0000029cdf51f95d, 0x00000583ab89c5d4, 0x0000053ec81de491, 0x0000000000000000, 0x000006c59945b36d, }, + { 0x00000192ad93ae9f, 0x00000797734bd1f8, 0x0000000000000000, 0x000003fbd596b809, 0x000000b4ce1e9322, 0x000004eec62a9934, 0x0000000000000000, 0x000003a19531d106, }, + { 0x00000612cdf7c77a, 0x000002b3950e94d8, 0x0000000000000000, 0x000000ace54abb2c, 0x00000071715b50f2, 0x000000571e3c8de7, 0x0000000000000000, 0x0000000935d6659d, }, + }, + // compressed: 0x3179fc750b7d50aad325677a4b92ef0f30396b392b54821dfc74f63075e15e79 + { + { 0x0000053c63dcfe7e, 0x0000050b75fc7931, 0x0000000000000001, 0x0000030a52ecbd81, 0x00000430f0a7be09, 0x000002159cb59c98, 0x0000000000000000, 0x00000686e5772518, }, + { 0x000000adc81aeecf, 0x000004e4ba754a0f, 0x0000000000000000, 0x00000695fce4a94b, 0x000005625fcb6676, 0x000007674fc1d825, 0x0000000000000000, 0x00000454477e6a24, }, + { 0x000004827165225e, 0x0000003fbe492de9, 0x0000000000000000, 0x00000575047dbb80, 0x000000a38ccbc191, 0x000000f2bdc2ea61, 0x0000000000000000, 0x000000d9a337e93b, }, + }, + // compressed: 0x86c3af652161fe1f101bd5b8882a2a08aa0b99207e62f676e7439e42a7b301de + { + { 0x0000019052179ca3, 0x0000012165afc386, 0x0000000000000001, 0x000003e3d39357a1, 0x00000554424cb88f, 0x0000013f104c85d5, 0x0000000000000000, 0x000005326f988f37, }, + { 0x00000593f0afd0ec, 0x000002a36203ffcc, 0x0000000000000000, 0x000003d294a7b6a1, 0x0000032e63880a2b, 0x000001e43e776f66, 0x0000000000000000, 0x0000073c9861a309, }, + { 0x0000015c7428182c, 0x00000020a8aa22e3, 0x0000000000000000, 0x00000259edb37566, 0x000000ea41e7b681, 0x000000bc03674e85, 0x0000000000000000, 0x000000e21259399d, }, + }, + // compressed: 0xcf1d0574acd86b851eaab75508a4f603eb3c74c9cbe74a3adeab3771bba57341 + { + { 0x0000023f0364918c, 0x000000ac74051dcf, 0x0000000000000001, 0x00000631f0f9218a, 0x0000054f3340f2d2, 0x000003e5e4ba1e75, 0x0000000000000000, 0x000003347a5978bb, }, + { 0x0000056d638a7b0a, 0x000006f543d0ad7b, 0x0000000000000000, 0x00000788e102f8ad, 0x00000257ba7080b4, 0x0000037abde3a4ae, 0x0000000000000000, 0x000004e3a67f7931, }, + { 0x0000028ad013d0fe, 0x0000040fda902156, 0x0000000000000000, 0x00000169a5b8ac6b, 0x0000001d42b607a0, 0x00000082e74b76e2, 0x0000000000000000, 0x000000bf8acac294, }, + }, + // compressed: 0x8e989077e6e1924822d75c1c0f95d501ed3e92e59a81b0e31b65469d40c714b2 + { + { 0x0000070dc46d7ae5, 0x000001e67790988e, 0x0000000000000001, 0x0000027406651770, 0x000007819886d6c3, 0x000000cd72c91f76, 0x0000000000000000, 0x000004760c2e911e, }, + { 0x0000071b91e26dca, 0x0000039ae449125c, 0x0000000000000000, 0x000004f286c26530, 0x00000454aa159549, 0x0000046651be3b08, 0x0000000000000000, 0x000004b833cd9b6b, }, + { 0x0000003f42ab3153, 0x0000040756543c71, 0x0000000000000000, 0x000000ee92819a28, 0x000000c4e2388298, 0x00000064298e813a, 0x0000000000000000, 0x000000b7d5280e7d, }, + }, + // compressed: 0xf8d243f363ce70b4f1e843058fba67006f7b11a2a151da352fbdf1445978d04a + { + { 0x0000070912c89be4, 0x00000663f343d2f8, 0x0000000000000001, 0x00000334c3318301, 0x000007017b4bd832, 0x000000d0d108bdb7, 0x0000000000000000, 0x0000059769ced446, }, + { 0x000005caf38c83b7, 0x0000007d1e368e19, 0x0000000000000000, 0x0000062d04d0b1c7, 0x00000761eecabfe9, 0x0000071bd2f35da5, 0x0000000000000000, 0x0000002853d34085, }, + { 0x000006b3ce2cc5f5, 0x000004019eea3c15, 0x0000000000000000, 0x0000037267011c1c, 0x0000007559ab8291, 0x00000095a0f0b289, 0x0000000000000000, 0x00000075fe1963b2, }, + }, + // compressed: 0x0535c5f40b43269283221f26139ce468c627d38f7833ef097f9ed92b739fcf2c + { + { 0x000007eb3a20405e, 0x0000030bf4c53505, 0x0000000000000001, 0x0000009ed603f5e4, 0x000007245694eafc, 0x000001bc47e993e3, 0x0000000000000000, 0x00000384d0171ddb, }, + { 0x000005aad930f8b8, 0x000003e4507244c8, 0x0000000000000000, 0x00000604018af81b, 0x000004d251d29252, 0x00000599e7f09ef3, 0x0000000000000000, 0x00000693a3753172, }, + { 0x0000063b8c47bfb6, 0x000001a392704c98, 0x0000000000000000, 0x0000044a2218a3c2, 0x000000221cfd0de9, 0x000000599f3ee657, 0x0000000000000000, 0x0000000b8aafc172, }, + }, + // compressed: 0xb00ec289b0bb76f75cd80ffaf65bf861fb2144634e3fb9b60512864108ef9fa8 + { + { 0x000006311fc97e6f, 0x000003b089c20eb0, 0x0000000000000001, 0x00000336fed69abf, 0x0000075045f692ee, 0x000007a731a210fd, 0x0000000000000000, 0x000003b2ba9d3ff3, }, + { 0x0000073fb5db1f39, 0x000001fb0b9eeed7, 0x0000000000000000, 0x000006b929f9ec2c, 0x0000069875ae15b7, 0x00000061205b6b93, 0x0000000000000000, 0x000005ca31913789, }, + { 0x000005e8fc98c047, 0x00000587e16fdbe8, 0x0000000000000000, 0x0000066c5b939e0c, 0x000000dc2a982f1f, 0x000000513fde1083, 0x0000000000000000, 0x000000d5f7ec8552, }, + }, + // compressed: 0xcca813f97050e55d61f50c2b7b161d7d89d4ea90b65629dad91e80dbce93c092 + { + { 0x0000060c62f5d2c1, 0x00000070f913a8cc, 0x0000000000000001, 0x0000079308b8190f, 0x0000056d06d6b870, 0x0000035b48756a44, 0x0000000000000000, 0x000002b96d63ebfe, }, + { 0x000001cf734fb51b, 0x0000019eac2bbcaa, 0x0000000000000000, 0x0000035c621f828f, 0x000005038c47deb6, 0x00000001ed9da295, 0x0000000000000000, 0x00000635ce6cee75, }, + { 0x00000263f0f692c0, 0x000005f47459ecac, 0x0000000000000000, 0x0000041a5a768284, 0x0000001b6970a372, 0x0000002581279db7, 0x0000000000000000, 0x00000067550f338c, }, + }, + // compressed: 0xb16c15fc88f54883276d0a1a9bbaa26db65aca875c2d26e2a689d5c8c1d02c21 + { + { 0x0000051ebd085cf2, 0x00000588fc156cb1, 0x0000000000000001, 0x000005107f18c781, 0x000007f0a830019e, 0x000006ae43e52d5b, 0x0000000000000000, 0x000003151e9e99a0, }, + { 0x00000267e3f5e1fe, 0x0000014da4f0691e, 0x0000000000000000, 0x000007d3a51a5e9a, 0x00000621a866ec2b, 0x000005589a6e2262, 0x0000000000000000, 0x00000114ce3a70a8, }, + { 0x000001e3d46a259f, 0x000001b68aea6c68, 0x0000000000000000, 0x00000448bb37c949, 0x0000004678de53d1, 0x0000004259a18391, 0x0000000000000000, 0x0000003b6eef1223, }, + }, + // compressed: 0xb61a70dd694739b3a58dcf19d4deb8e252c82afd6141df15be247d018acae2fa + { + { 0x000002397c6bc26f, 0x00000769dd701ab6, 0x0000000000000001, 0x000007ed0920b962, 0x0000021d5fbcd198, 0x000000b0fe956429, 0x0000000000000000, 0x000000a792ab0532, }, + { 0x000002a0227bbe6a, 0x000001f1b4b66728, 0x0000000000000000, 0x0000033b53b6fd02, 0x0000062adfc7c74f, 0x000007d24be15df4, 0x0000000000000000, 0x00000622c83e491c, }, + { 0x000001ea5f8b314f, 0x0000038ae37b5067, 0x0000000000000000, 0x0000007a146330fc, 0x000000635b2f5a4d, 0x000000f5c5951402, 0x0000000000000000, 0x0000003da3f8a74c, }, + }, + // compressed: 0x2d2d091ca642fe8b8e38bfc998485073fb1237bf7b16193ead24aa574a663d50 + { + { 0x0000018e4d89f26e, 0x000002a61c092d2d, 0x0000000000000001, 0x0000015b90a91537, 0x000007368242e22e, 0x0000033ddf9b897d, 0x0000000000000000, 0x0000011f064745fd, }, + { 0x00000616fcfe973d, 0x000007e711d17fc8, 0x0000000000000000, 0x000006fcbe594367, 0x000003c0aa323db7, 0x000002a24ad3e191, 0x0000000000000000, 0x0000021f8e3192a0, }, + { 0x000002ce0b7ca215, 0x000005cd41226326, 0x0000000000000000, 0x000002e6ea0fdf3c, 0x000000b62566de51, 0x000000a07acc94af, 0x0000000000000000, 0x0000006d20cd0bd3, }, + }, + // compressed: 0x1d78d84f3cbe4c54e4578b13d21dcf2f393d5bbe64ee27eba5c30548f0cc5d35 + { + { 0x000005d8b8699e48, 0x0000063c4fd8781d, 0x0000000000000001, 0x0000004dcb3c75db, 0x000006e055ec10ad, 0x000007325f2d9e9c, 0x0000000000000000, 0x000002c45b2cc0cb, }, + { 0x000002eb8f8d6321, 0x0000016afc8a8997, 0x0000000000000000, 0x000006cacff977b3, 0x0000074b19e56011, 0x0000005c3a5eb27e, 0x0000000000000000, 0x000002e4f65b138b, }, + { 0x00000691c033e8c7, 0x000004bf3c77484e, 0x0000000000000000, 0x0000007ed97b9d5f, 0x000000b62224e108, 0x0000006abb99e090, 0x0000000000000000, 0x000000b08b0f644b, }, + }, + // compressed: 0xd67ea6660fc15548c49791cb6c61eb848b21b280d3ff4f8b54ac82b9a47be205 + { + { 0x00000363f12f57a6, 0x0000010f66a67ed6, 0x0000000000000001, 0x0000067d1e5a864d, 0x0000040454c02ddb, 0x000007e9c05910c5, 0x0000000000000000, 0x0000004775b41567, }, + { 0x000007857dc67274, 0x00000232f8890ab8, 0x0000000000000000, 0x0000054210c7e0d4, 0x00000511eefdb481, 0x0000002ac548b4ff, 0x0000000000000000, 0x000004a55da6b611, }, + { 0x00000550d7456cce, 0x00000613ad85b32e, 0x0000000000000000, 0x00000796bab6c378, 0x0000007b1231f70f, 0x0000000bc4f74973, 0x0000000000000000, 0x000000ff1e6849ac, }, + }, + // compressed: 0xaf8648b207481a7be2fd42c41eed48954f65457aa43152af65f21003ba5c75fe + { + { 0x0000013624794ed1, 0x00000007b24886af, 0x0000000000000001, 0x00000752761a3023, 0x0000070b6711de61, 0x000000d23d22b2a7, 0x0000000000000000, 0x000002067ef22cac, }, + { 0x0000061ed161dac5, 0x0000005fbc4f6349, 0x0000000000000000, 0x000002decd135f89, 0x000002356c4aafdf, 0x0000010f265af523, 0x0000000000000000, 0x000000b3230e246f, }, + { 0x000007b86fc31da3, 0x0000065523b47b11, 0x0000000000000000, 0x00000699386a209a, 0x0000001954e0b386, 0x000000fceab97406, 0x0000000000000000, 0x0000008a6d855dce, }, + }, + // compressed: 0xc3b9cc21f3efe38cb857216574bf389a8b16630fed5f60dcb39744caf5d0156a + { + { 0x00000302599db7fa, 0x000007f321ccb9c3, 0x0000000000000001, 0x000001f109bfa8d5, 0x000004297f3880c6, 0x000007f687b18b45, 0x0000000000000000, 0x000004cd1b4bc42c, }, + { 0x000005f844dc0334, 0x0000042af7119c7d, 0x0000000000000000, 0x000004389e11c1bc, 0x00000247471fe1bf, 0x000004497b3dc605, 0x0000000000000000, 0x000005cdb7afb2f3, }, + { 0x000005bad39cdfc0, 0x00000668e2fdd194, 0x0000000000000000, 0x0000037093abe788, 0x000000f77bf00837, 0x000000d42ba1eb94, 0x0000000000000000, 0x000000ab840da806, }, + }, + // compressed: 0x2576de90adfa270ae3c831149ed12782cb594a215cdb990f251ce72e92b3d6dc + { + { 0x00000159b8443d37, 0x000002ad90de7625, 0x0000000000000001, 0x00000194d633ebc7, 0x00000260068f4f7e, 0x000005ae10a52ce5, 0x0000000000000000, 0x0000004f70668a15, }, + { 0x000001ec9f2e2a70, 0x000006391c6144ff, 0x0000000000000000, 0x000006f4f7de0795, 0x000004e9eb8599c1, 0x00000671c250f99d, 0x0000000000000000, 0x0000038842853f43, }, + { 0x0000000acf6dab5b, 0x000006089f467850, 0x0000000000000000, 0x000007844449b9e8, 0x0000004f1f9179ae, 0x000000b9ad67245d, 0x0000000000000000, 0x0000008d0c2a5235, }, + }, + // compressed: 0x6feb4cd55138402c676bfdcdea2922ed2b79e2185321adf485948853f3e22355 + { + { 0x0000019c54a5efd2, 0x00000051d54ceb6f, 0x0000000000000001, 0x0000036e7bd0d4de, 0x000001c789ea7de7, 0x000000a98c713c95, 0x0000000000000000, 0x0000013e59e4261a, }, + { 0x000002f3f2ee3421, 0x000007ad6ce58807, 0x0000000000000000, 0x0000047e3c535f4a, 0x0000014edd3dc18b, 0x00000089485f4ad2, 0x0000000000000000, 0x000001b0f9888f5a, }, + { 0x000007d7141a83c1, 0x000007b488a7ab37, 0x0000000000000000, 0x0000043d8496ad96, 0x000000c6db6cd4b1, 0x000000aa47c5e6a7, 0x0000000000000000, 0x000000a5119ecaab, }, + }, + // compressed: 0x1c88d9f029b6920f710e57e513fbb1fcfbba4b48894fee5fd24152f4850cc792 + { + { 0x000000c50a97289b, 0x00000629f0d9881c, 0x0000000000000001, 0x000005a5e538767f, 0x0000016307bb4494, 0x000007c4a425dd7d, 0x0000000000000000, 0x000007b4ea6a99a8, }, + { 0x0000002547f652b9, 0x000002e1ce21f256, 0x0000000000000000, 0x0000012c198d48b7, 0x000001646146dd6f, 0x000005241d25fee4, 0x0000000000000000, 0x000003629553c939, }, + { 0x00000563faaeebaa, 0x000007f2c7ec4f95, 0x0000000000000000, 0x00000580a64c1f4c, 0x000000c7e036aab5, 0x000000258e190be8, 0x0000000000000000, 0x00000086e2ca82d5, }, + }, + // compressed: 0x86adfdddfbb1d5e18d77b6e4babf81ad1fdd80991919786bb721971b5f98fe46 + { + { 0x0000022836e64b9a, 0x000001fbddfdad86, 0x0000000000000001, 0x0000018588e2dfa7, 0x000001a7a3f9b23a, 0x0000048cccc06e8f, 0x0000000000000000, 0x0000074bec4e3a72, }, + { 0x000002a74e2c2601, 0x000006cef1bc3ab6, 0x0000000000000000, 0x000000ebdd53fea0, 0x000002dd23c84652, 0x000001721b76b781, 0x0000000000000000, 0x0000043294e6a0e5, }, + { 0x00000540da9343d2, 0x000006b606feeb92, 0x0000000000000000, 0x0000059ce7d007f4, 0x0000007d48db8e58, 0x0000008dfd30be37, 0x0000000000000000, 0x0000001116194fbe, }, + }, + // compressed: 0xc06cfefe540e6710941de5a8539dbb0edfa335f5230e9ffa93e85eaf005775bc + { + { 0x000005337c54aa9d, 0x00000654fefe6cc0, 0x0000000000000001, 0x00000296d7c70596, 0x000000eb4a88cdac, 0x00000711fa9ad1ef, 0x0000000000000000, 0x000003346a10e06b, }, + { 0x0000006df9a4c888, 0x000004a3b2820ce1, 0x0000000000000000, 0x000007603e6f13e7, 0x000000e1379ed8fa, 0x000005ee893fa9f0, 0x0000000000000000, 0x00000277aad64164, }, + { 0x000001db423af9f9, 0x0000043aee754ea3, 0x0000000000000000, 0x000006abe3f9ec2b, 0x000000fab60a8c22, 0x00000078eaae015e, 0x0000000000000000, 0x00000035cb8ac967, }, + }, + // compressed: 0x4b5902034cad09da845b6a7cd4e6fb13a4e28508c0e700456326d99811641aa0 + { + { 0x000006863e708d5b, 0x0000054c0302594b, 0x0000000000000001, 0x0000053be2a1592b, 0x000006740f3a2ec8, 0x000003e00442f152, 0x0000000000000000, 0x0000049e6e212625, }, + { 0x000004b654bfb11c, 0x0000054b709b4135, 0x0000000000000000, 0x0000071883eb7b43, 0x000002f17860f307, 0x000005926634500e, 0x0000000000000000, 0x000007e0b2655794, }, + { 0x0000012796b71322, 0x0000004fef9b51f1, 0x0000000000000000, 0x000004af6eaaa98a, 0x000000bb39e3d031, 0x0000004034c82331, 0x0000000000000000, 0x00000075414186c3, }, + }, + // compressed: 0x93f6df08e55f1c948d830f66ab12d0c744a5775cdde926474003b208f790613e + { + { 0x00000621e149ef2e, 0x000007e508dff693, 0x0000000000000001, 0x00000632ac67b877, 0x000002ae4f3c5998, 0x000004eeae3bd2a2, 0x0000000000000000, 0x0000027bd87424d6, }, + { 0x000000ce2d20cf8d, 0x000001f071b2838b, 0x0000000000000000, 0x000007d841272915, 0x0000051a129b0aa7, 0x000003203404726e, 0x0000000000000000, 0x0000071d74b61742, }, + { 0x0000023383040940, 0x0000031f404aad98, 0x0000000000000000, 0x000005e8888a3d51, 0x000000ddc613e461, 0x0000007cc321ee11, 0x0000000000000000, 0x000000c99bd306c9, }, + }, + // compressed: 0xfa4f6cb682b9fe42c8051fc6101bb4b80f3b95875779222d07302044c17c7619 + { + { 0x000006e4071f6450, 0x00000182b66c4ffa, 0x0000000000000001, 0x000007e08e9dc54b, 0x000006d20014a7d9, 0x000004abc3ca9d87, 0x0000000000000000, 0x000000a7ed652762, }, + { 0x000003ea3ee4e1fa, 0x000003e0b9085fd7, 0x0000000000000000, 0x000001c309a0b7c1, 0x0000045383184f2f, 0x000002030072d227, 0x0000000000000000, 0x0000001c3e8af0cb, }, + { 0x000005f4e3da3ef8, 0x000006e2d06c4318, 0x0000000000000000, 0x000001cbbbbcd65e, 0x0000005883501cb6, 0x00000032ecf98288, 0x0000000000000000, 0x00000072778f6ef9, }, + }, + // compressed: 0x158ccd68a8673bb1c96ecd38fa138556b4d20549f6b9ec7b96363dac9955bbee + { + { 0x00000645b73f4755, 0x000007a868cd8c15, 0x0000000000000001, 0x000005da306059bd, 0x0000029de2e060bd, 0x000004fb2482e95a, 0x0000000000000000, 0x0000026867d64b4d, }, + { 0x00000773615d3770, 0x000001add936276c, 0x0000000000000000, 0x000007ccbf485398, 0x0000024ee63f7b91, 0x000003d36967becb, 0x0000000000000000, 0x00000194c8c30660, }, + { 0x0000027d72d43620, 0x0000015a144fe8e3, 0x0000000000000000, 0x00000499b7af959d, 0x000000f819d77a19, 0x000000dd76ab3358, 0x0000000000000000, 0x000000f9d5a22ed5, }, + }, + // compressed: 0x22e64dc6081e1b6250918c7b3d3b2b470812b0271cb636dddc0a4dfe746381fb + { + { 0x000004db68564783, 0x00000608c64de622, 0x0000000000000001, 0x000003c104113fcc, 0x000001f0919771e9, 0x0000030e13d80904, 0x0000000000000000, 0x0000063aeb2fd20a, }, + { 0x000005825866dfc9, 0x000001922a0c4363, 0x0000000000000000, 0x0000014e6b0a52e3, 0x000004d75517fcb9, 0x000004d0adcdd36b, 0x0000000000000000, 0x000006f01638f279, }, + { 0x0000044cca1d0759, 0x0000011cacecf5ee, 0x0000000000000000, 0x00000170f1f43e23, 0x00000065ce7af882, 0x000000f702c6e9fc, 0x0000000000000000, 0x000000dead5c79d2, }, + }, + // compressed: 0xb9b4f686e1a37a47357925f3a05f6681bf364d668edb7345e9b02ac96fc9cbab + { + { 0x000006ed8c1e9273, 0x000003e186f6b4b9, 0x0000000000000001, 0x0000073e611f6329, 0x000003d16a797b93, 0x000005c733269b5f, 0x0000000000000000, 0x0000023ad237161a, }, + { 0x000002dacbaba712, 0x000004af26a8ef54, 0x0000000000000000, 0x00000039c82d813e, 0x000007b3d179b8d3, 0x000002ab0e94573d, 0x0000000000000000, 0x000002848cd50e00, }, + { 0x0000037e4dad0d18, 0x00000605997e83cc, 0x0000000000000000, 0x000007c0cec51aa2, 0x000000dfe4f53fd5, 0x000000579792df92, 0x0000000000000000, 0x000000e56b4b6dbc, }, + }, + // compressed: 0xc337a328462c713c07a33f63a3971c9a773924851803a46b087dde6faaa78534 + { + { 0x00000774ed68e720, 0x0000044628a337c3, 0x0000000000000001, 0x0000027b7f55128e, 0x0000059caec8a00e, 0x0000018c42921cbb, 0x0000000000000000, 0x00000678b4704426, }, + { 0x000005e2957e26d2, 0x000007f460e78e25, 0x0000000000000000, 0x000000c5b2e4a691, 0x000007b7167fc516, 0x000005e7d086ba40, 0x0000000000000000, 0x0000068d142b373e, }, + { 0x000007e37426652f, 0x00000668725e8d8c, 0x0000000000000000, 0x000000dd2f2dd756, 0x000000c35422c1b2, 0x000000690b4f54df, 0x0000000000000000, 0x00000058d9c0a07d, }, + }, + // compressed: 0x1a9b4676e6174f891ee321e0e1ec0c34438a1203b8a9e00ea7933378532b8c8f + { + { 0x000007b19c632889, 0x000007e676469b1a, 0x0000000000000001, 0x0000001df2db5c75, 0x000002b64d7b490d, 0x000004dc01894521, 0x0000000000000000, 0x000001775c4ed6a7, }, + { 0x000005489e51b05b, 0x0000043c63d129e2, 0x0000000000000000, 0x000001a33bc5e346, 0x000006497a9e4eee, 0x000003393a70ee0a, 0x0000000000000000, 0x0000058ddf578e00, }, + { 0x0000017a5b3370a4, 0x000004d033b38780, 0x0000000000000000, 0x00000775038242a0, 0x0000001cef5a3b24, 0x0000001f1856a6f0, 0x0000000000000000, 0x0000009983ca98e4, }, + }, + // compressed: 0x9ce13a6bd8e19bb838bd807994a71e03f91334fe9fc3458677de327a23f29472 + { + { 0x000000667543638e, 0x000001d86b3ae19c, 0x0000000000000001, 0x00000017f77d3efd, 0x00000753a054ddb3, 0x000001cfff1a09fc, 0x0000000000000000, 0x0000071ba78132ef, }, + { 0x000001c91f7e7f98, 0x00000017a717137c, 0x0000000000000000, 0x0000053e486dcb10, 0x000005142e4f5c9a, 0x0000032de778645c, 0x0000000000000000, 0x000006662a4bda9c, }, + { 0x000003d0987de191, 0x0000040c7a9e51e6, 0x0000000000000000, 0x0000027b477678e1, 0x000000c5de7fb9ce, 0x000000e529e446f4, 0x0000000000000000, 0x000000325190fa2a, }, + }, + // compressed: 0x29720866d547384ac65897b5caa2a92d1b29ce7560a8555794fa99441dece04a + { + { 0x0000055ab57e2130, 0x000007d566087229, 0x0000000000000001, 0x0000039ba2be7da7, 0x00000276845e964c, 0x000004303ae7148d, 0x0000000000000000, 0x0000024bc9e85fe2, }, + { 0x0000009ebea36192, 0x000002eb18c94708, 0x0000000000000000, 0x0000040fbab07ad9, 0x0000058f63042047, 0x0000019fa945755a, 0x0000000000000000, 0x0000023170eaebfa, }, + { 0x000005bfadfef659, 0x000004b6a68b2ad6, 0x0000000000000000, 0x00000219ac766033, 0x000000efb682ee88, 0x00000095c1d83a89, 0x0000000000000000, 0x0000002fe3668c3b, }, + }, + // compressed: 0x86286c033d6ba1099ae7e4e34e5dc7ba007b4194e758c7ab4dd243f4432ca878 + { + { 0x0000019b3403ce52, 0x0000033d036c2886, 0x0000000000000001, 0x00000112702675c4, 0x000006bda2bb539a, 0x00000473ca20bd80, 0x0000000000000000, 0x000003ad7be2563f, }, + { 0x000004e21cb1c983, 0x0000049cf341342d, 0x0000000000000000, 0x00000528e9c0ad70, 0x000005a9626d1762, 0x0000043d24dabc75, 0x0000000000000000, 0x000001bb3904539a, }, + { 0x000004b28d8469ed, 0x000002eb1d753b8f, 0x0000000000000000, 0x000007bf44e7ad11, 0x0000007b37334275, 0x000000f1505887e8, 0x0000000000000000, 0x00000016924117b0, }, + }, + // compressed: 0x82070d0afb50fd03d6ee986e71edc8ea0898006f989363c14814d5a24da640be + { + { 0x000004b32d287241, 0x000000fb0a0d0782, 0x0000000000000001, 0x0000052e9dca709f, 0x0000017e79b46c07, 0x000001cc37804c04, 0x0000000000000000, 0x0000077b78971fca, }, + { 0x000002b09826b75b, 0x0000031ddac07faa, 0x0000000000000000, 0x000007ff97b2feb4, 0x0000072852187ac1, 0x00000551448c1639, 0x0000000000000000, 0x000005fbeb41f5ba, }, + { 0x000001ecf45dd712, 0x000003ab23b5c5ba, 0x0000000000000000, 0x000004948b426f1c, 0x0000002afdcf65c3, 0x0000007c814c9b45, 0x0000000000000000, 0x000000b44ee22b8a, }, + }, + // compressed: 0x554c85e521d9407bb231de6f387b3c276e2e124e506e63e3733ddd9218194e0f + { + { 0x00000015328300cc, 0x00000121e5854c55, 0x0000000000000001, 0x00000412ec4132ed, 0x000006beac36dc78, 0x0000072827091737, 0x0000000000000000, 0x000001ca2fb843ca, }, + { 0x000000f4f8556246, 0x000003c6364f681b, 0x0000000000000000, 0x00000456b7b877a3, 0x000007dfeee4f382, 0x000005d3d73e3636, 0x0000000000000000, 0x000006dd62786f49, }, + { 0x00000321fb1dff56, 0x0000009cf1ece1bf, 0x0000000000000000, 0x00000387d1816364, 0x0000008d13605562, 0x0000001e9c323125, 0x0000000000000000, 0x000000764865d793, }, + }, + // compressed: 0xefd8c78197890017288c396f085a2ba42fc63638622b22b4c1d0280333d11fb6 + { + { 0x000004c2b78c2e59, 0x0000019781c7d8ef, 0x0000000000000001, 0x0000048165159986, 0x00000204f6e04b1e, 0x000005b11c1b6317, 0x0000000000000000, 0x0000040b6a7d0222, }, + { 0x0000002f92b777d9, 0x000007318502e011, 0x0000000000000000, 0x000000a1e89a4561, 0x000002dbbb98dff3, 0x0000028d0c1b4222, 0x0000000000000000, 0x0000032c486b1596, }, + { 0x0000043764dce0c7, 0x00000690ad6821bc, 0x0000000000000000, 0x000002e25ce445df, 0x000000d8ab83e556, 0x0000006c3fa26606, 0x0000000000000000, 0x00000079b08b524f, }, + }, + // compressed: 0xdf51192cd706f512f52ff8e86533eafb758e1b48a2b06a55adf24772ac98f945 + { + { 0x000005addf6fd3b0, 0x000006d72c1951df, 0x0000000000000001, 0x00000728c55d3ecd, 0x000005ab6907236e, 0x00000051240dc73a, 0x0000000000000000, 0x0000016ab92a2667, }, + { 0x000002ebd6e3a2e2, 0x00000705fea25ea0, 0x0000000000000000, 0x0000052a66f48160, 0x00000291ad10f566, 0x0000047f2ad556ab, 0x0000000000000000, 0x000006d531bff46c, }, + { 0x00000101c8a9f9e3, 0x000007efa8cd97a3, 0x0000000000000000, 0x0000035b850d3119, 0x0000006c243d141b, 0x0000008bf33158e4, 0x0000000000000000, 0x00000047610d9e0c, }, + }, + // compressed: 0x8fd5bdb48060668d31ba348609a47cbd39bc2c013545fe4415164f0119fac516 + { + { 0x00000118ea05195e, 0x00000080b4bdd58f, 0x0000000000000001, 0x0000016ee772f53b, 0x0000028496694799, 0x0000029a80965e1c, 0x0000000000000000, 0x000004e1ab4b0388, }, + { 0x0000002d20b86d6a, 0x000006974631accc, 0x0000000000000000, 0x0000039d12a1e8a8, 0x000006e8a74ea338, 0x000004f161544fe4, 0x0000000000000000, 0x00000473050affd2, }, + { 0x000002c7514508df, 0x000006f5f2902618, 0x0000000000000000, 0x000003263fe3172e, 0x00000003d76a7118, 0x0000002d8bf43202, 0x0000000000000000, 0x00000090c9de3030, }, + }, + // compressed: 0x30b8d00b3aa80dcd28341cb99beb4e86f43e15049b3e6fe650c26b7fed3ac0a6 + { + { 0x0000033297639ab3, 0x0000003a0bd0b830, 0x0000000000000001, 0x0000022f581c7dce, 0x000005c41db11e07, 0x0000074d820a9f7a, 0x0000000000000000, 0x0000053ddcc4d21e, }, + { 0x0000051a71df02f8, 0x000003868519a1b5, 0x0000000000000000, 0x000005352db2c3cf, 0x000005baf6c5cc04, 0x000006bc250e66f3, 0x0000000000000000, 0x0000061d75490d94, }, + { 0x000004d11f1eac81, 0x000002193bae6ee4, 0x0000000000000000, 0x000000ea7a258120, 0x00000054f5b81869, 0x0000004d8075dafe, 0x0000000000000000, 0x000000f16a2d32b3, }, + }, + // compressed: 0x40cc69575ac85cf92bd34d573a95fee636a88655168acb1db421cd4b22c07ec5 + { + { 0x00000254df5d180d, 0x0000005a5769cc40, 0x0000000000000001, 0x000006fe8f26908a, 0x0000051aa447388f, 0x0000050b2ac3541b, 0x0000000000000000, 0x0000049b7542677d, }, + { 0x0000053a8ca21f30, 0x000001ba657f2b99, 0x0000000000000000, 0x000002a75a6f3d15, 0x0000071e70927572, 0x000004d21b41dcb8, 0x0000000000000000, 0x000004f0a49bb8b7, }, + { 0x000005d418541ff3, 0x0000039bfa54e95d, 0x0000000000000000, 0x0000005aeecc77ed, 0x0000000462979206, 0x0000008afd804497, 0x0000000000000000, 0x000000f2ae58a69f, }, + }, + // compressed: 0x979574e000433b34c40464902326375fa4c98896abf693141c9af1e7b6c090f8 + { + { 0x0000023ca35b2d6f, 0x00000300e0749597, 0x0000000000000001, 0x000000b7fdd75dc4, 0x000003c406cb7502, 0x00000355cb4464d2, 0x0000000000000000, 0x00000118f65a4242, }, + { 0x00000598372473b6, 0x0000048098868768, 0x0000000000000000, 0x00000702d37e9228, 0x0000060ef3f04333, 0x00000719a1c1493f, 0x0000000000000000, 0x000001a70aa2b58e, }, + { 0x000002ec2836eae4, 0x0000017cdc988e41, 0x0000000000000000, 0x0000068ecc0e616b, 0x000000e1bbf1b316, 0x000000f121816dcf, 0x0000000000000000, 0x0000008aed2d23d1, }, + }, + // compressed: 0xad43a65bdc3d0e396b1bb9e9d9fe5c88909d67561074ae8b787c5cb006f7c0ae + { + { 0x00000305345b2ddb, 0x000005dc5ba643ad, 0x0000000000000001, 0x00000694608f59d8, 0x000006f7eeaaf0be, 0x000002082b33cec8, 0x0000000000000000, 0x0000033715270a38, }, + { 0x0000005d736a9c7c, 0x000007236d6721c7, 0x0000000000000000, 0x000007a18f9f8742, 0x000001c1d8202235, 0x000005c7c788bae7, 0x0000000000000000, 0x000003f46a79050b, }, + { 0x0000051ea730d7b0, 0x0000022173fb67a6, 0x0000000000000000, 0x0000022537b87ef8, 0x000000216e8465e0, 0x0000005d81ee0d60, 0x0000000000000000, 0x000000badf53a4b4, }, + }, + // compressed: 0xdda6a3b2fe5a2cac650ef09d07ed6ca6ad9c9f18f6cb4c061ce7c98718a44fd7 + { + { 0x00000185e46e6cbb, 0x000002feb2a3a6dd, 0x0000000000000001, 0x000001dade891efa, 0x000002fbfabe9323, 0x000005fb0c4fce56, 0x0000000000000000, 0x000004c114a70a88, }, + { 0x00000447ca48dbe8, 0x00000601ccb5858b, 0x0000000000000000, 0x000005dcfb1925a5, 0x000005f697a797ff, 0x0000049e71c064cc, 0x0000000000000000, 0x000002ab932f2355, }, + { 0x000000a9a73004bc, 0x00000699b3b41e77, 0x0000000000000000, 0x0000043ce9cfb448, 0x000000c8bce09eee, 0x000000ae9f48310f, 0x0000000000000000, 0x000000e841cae9b9, }, + }, + // compressed: 0x1c4b23943f6e3ef8101c429be6617bc8a554c493b0334b4575c0cdc3a90fa62b + { + { 0x00000138a034513c, 0x0000063f94234b1c, 0x0000000000000001, 0x0000011c21d364c9, 0x00000480c6a37253, 0x000001d849e22a52, 0x0000000000000000, 0x000000ece0038e4b, }, + { 0x0000073a73beecd4, 0x00000043821f07cd, 0x0000000000000000, 0x0000044944b47ac9, 0x0000001b3d328ae3, 0x000004dc075454b3, 0x0000000000000000, 0x0000035f3cf56f51, }, + { 0x0000003f9880bd1b, 0x00000721ed879a6d, 0x0000000000000000, 0x0000051768eeb194, 0x00000089de8c656b, 0x000000574c1f5387, 0x0000000000000000, 0x000000e0a9133889, }, + }, + // compressed: 0xcf6db1aa0b4e9538d7651578c06c16fa537db84d67e29ac78151079d71c546d1 + { + { 0x000003c5b775ea51, 0x0000060baab16dcf, 0x0000000000000001, 0x00000168c8681fda, 0x0000008c7c55894b, 0x00000133a6dc3ea9, 0x0000000000000000, 0x000002305677b6bd, }, + { 0x000007078af67631, 0x000002acbae712a9, 0x0000000000000000, 0x0000033b69a2add5, 0x000002d6894e8efa, 0x00000075181c79ae, 0x0000000000000000, 0x000007a482999ca3, }, + { 0x0000044864c96898, 0x000007e859b301e0, 0x0000000000000000, 0x0000008bc1c8faa4, 0x000000e4d2f618a1, 0x000000a28d8ae33a, 0x0000000000000000, 0x000000421f3c5cee, }, + }, + // compressed: 0x24d3bbfe2786a02e9d2abdab09ffdf4ef5dda73743a4df603938aa55fa7184dc + { + { 0x0000008cf3d2c42b, 0x00000627febbd324, 0x0000000000000001, 0x000005db7b39cf58, 0x00000392c39d4569, 0x000002219bd3eefa, 0x0000000000000000, 0x000000c26909d149, }, + { 0x000000e83dffcd5b, 0x000007a553a5d410, 0x0000000000000000, 0x000005ce3a055a90, 0x000004c89d7f0903, 0x000002a383960dfa, 0x0000000000000000, 0x000005545c9e93f5, }, + { 0x000004cd0d884a0f, 0x0000053b7ffc26ae, 0x0000000000000000, 0x0000001e6a53f144, 0x00000042a2596558, 0x000000b908e3f4ab, 0x0000000000000000, 0x0000007e0c57ed75, }, + }, + // compressed: 0xa8252f20345f91099b9917814e59db1b459512b9e0be3eb33d8f0b5b3c9a63c7 + { + { 0x0000040025281fc5, 0x00000734202f25a8, 0x0000000000000001, 0x0000068da17fa067, 0x0000012612ca0e66, 0x000007705c894aa2, 0x0000000000000000, 0x000007c653e2a6c0, }, + { 0x000000f9469fcadc, 0x000002f33361322b, 0x0000000000000000, 0x0000056a539d8d1c, 0x0000010986b46c6b, 0x000000b8f3db33eb, 0x0000000000000000, 0x00000429f19c8c75, }, + { 0x00000783bbb753f0, 0x0000046f6d653a04, 0x0000000000000000, 0x0000031a4b741f4b, 0x000000c784618b57, 0x0000008ec73478b6, 0x0000000000000000, 0x0000003185a95d3a, }, + }, + // compressed: 0xe315b8aaf66d29bf4bce7086d808870f0584133625c0ae05c160f06bd7ccf976 + { + { 0x0000055fe9678090, 0x000005f6aab815e3, 0x0000000000000001, 0x0000009ea75ff17d, 0x000004ee2abff5c3, 0x000000129b09c202, 0x0000000000000000, 0x0000014d7389d75e, }, + { 0x000007e8b6ea3b7b, 0x00000619c977e52d, 0x0000000000000000, 0x000004e190cbdec1, 0x0000078e3a1b5e33, 0x000007060c105aec, 0x0000000000000000, 0x0000017912799fdf, }, + { 0x0000021178baef1f, 0x0000043e1c236219, 0x0000000000000000, 0x0000066bf86289e0, 0x000000e4bfc29c74, 0x000000edf399aed7, 0x0000000000000000, 0x00000020b8e3939c, }, + }, + // compressed: 0x4948e66cdd6031b3d12bb3a0c3c0ae22ad9d9f5a69af70c2422a9cee9dd5a8ea + { + { 0x000005b2b9ce83bb, 0x000000dd6ce64849, 0x0000000000000001, 0x000000ab015c2a6c, 0x0000050d17b65bdd, 0x000007b4ad4fced6, 0x0000000000000000, 0x000002965e14aaa6, }, + { 0x000004525a27f692, 0x000006657a36662c, 0x0000000000000000, 0x000004ec614bdc59, 0x000007552f3d969b, 0x000001c2a42c270a, 0x0000000000000000, 0x0000027b964fa368, }, + { 0x00000088490b8d2b, 0x0000048abb030e82, 0x0000000000000000, 0x000000b98cb4395e, 0x00000006b6f32752, 0x000000d551ab3bdd, 0x0000000000000000, 0x0000006e772638ba, }, + }, + // compressed: 0x0530b7edb017dada2021ce5a33a0b88852b75e6770883f277cdd89a646c65a91 + { + { 0x0000063764bda849, 0x000007b0edb73005, 0x0000000000000001, 0x000007219c8ee83b, 0x00000600c69db7c8, 0x0000043833af5ba9, 0x0000000000000000, 0x000005b91a5c8691, }, + { 0x00000681856ec154, 0x000001c4241b5b42, 0x0000000000000000, 0x0000039a2af59e5d, 0x000002c68c97080a, 0x0000009dd7c273f8, 0x0000000000000000, 0x0000079c8c6ca549, }, + { 0x0000063889f63010, 0x00000222e280cd6b, 0x0000000000000000, 0x0000023dd7da3ef2, 0x000000bdcfff1f82, 0x00000022b58c8d4d, 0x0000000000000000, 0x00000079f3782678, }, + }, + // compressed: 0x1a9cb917759c3672c3623fc1aef574c70d8345f57d062aa2a6e16c086ec1fabf + { + { 0x000000ef47011b9b, 0x0000047517b99c1a, 0x0000000000000001, 0x000000153454e375, 0x00000222d36a5289, 0x0000033efaa2c186, 0x0000000000000000, 0x0000023806946e48, }, + { 0x0000045d18b5977d, 0x000007ec586e46d3, 0x0000000000000000, 0x0000033bd961b3c4, 0x0000018eb88d1533, 0x000006ce1a6a22a0, 0x0000000000000000, 0x000005e619a9f53e, }, + { 0x000007f634ba9f3c, 0x0000071dd3d6bb04, 0x0000000000000000, 0x000007e33d0b399b, 0x000000a6cde4a765, 0x0000007ff582dc10, 0x0000000000000000, 0x0000006a9462db62, }, + }, + // compressed: 0x64eed65713f6573704f9ab0644e6d2fd26c3aff74a541bc7a5e77e04b3d1b642 + { + { 0x000002ecbaa99b58, 0x0000061357d6ee64, 0x0000000000000001, 0x0000006916c1ae74, 0x0000020e2890f4fa, 0x000002257bd7e193, 0x0000000000000000, 0x000003261038b8ce, }, + { 0x0000017b12bab6a5, 0x0000057f2086eafe, 0x0000000000000000, 0x00000713a3b066c5, 0x000000f78e28c175, 0x000007ee7a5c71b5, 0x0000000000000000, 0x00000339dddcb6a2, }, + { 0x0000036b2ae2482b, 0x000003f74b99101a, 0x0000000000000000, 0x000003d493b499e4, 0x000000fa5041f1af, 0x000000856da36608, 0x0000000000000000, 0x0000002a4cb19e1c, }, + }, + // compressed: 0xb5bbab2cf9bf5d1b61a2474d0e57dbaf6d82b5f887c0a94bb4d3da32cdfd7efa + { + { 0x00000316adbbce0f, 0x000007f92cabbbb5, 0x0000000000000001, 0x000006dfd8edd67d, 0x000006ba469c42f6, 0x00000043fc5ac136, 0x0000000000000000, 0x0000048c474fa2aa, }, + { 0x00000721c47c7f99, 0x000000f44c236bb7, 0x0000000000000000, 0x000005ebf0caf3e2, 0x000001ea3c8ea1ea, 0x000005ad3b44ba9c, 0x0000000000000000, 0x00000576e4f8748d, }, + { 0x0000007b109fe4d4, 0x000006bf6d5c3935, 0x0000000000000000, 0x00000718c808963d, 0x000000c2acada5a1, 0x000000f4fdfb9a65, 0x0000000000000000, 0x000000d3ad629642, }, + }, + // compressed: 0xcccab587e2f8d58ae787d2489448c2ce86973dfb97c952bf49c86ee14d4347e4 + { + { 0x000000c1e139943d, 0x000000e287b5cacc, 0x0000000000000001, 0x000005f9b56c8a52, 0x0000040ae5950a65, 0x000004cbfd9ecbc3, 0x0000000000000000, 0x000002ad753204b1, }, + { 0x0000060cd77f26cd, 0x00000250fcf15abf, 0x0000000000000000, 0x0000067ac000199c, 0x0000047b9639986b, 0x000006ec849bf52c, 0x0000000000000000, 0x000004d7b5a16e8f, }, + { 0x0000033ba732a697, 0x0000033b09225123, 0x0000000000000000, 0x00000740a6d6d5ab, 0x0000000b1ce4491f, 0x000000c88e869bc2, 0x0000000000000000, 0x000000ecac454d2f, }, + }, + // compressed: 0xee5dc328f5e69a25ae9a6206024d1eaafe3d196d1731d75d2c0ba8496bc0d30f + { + { 0x0000046531259caa, 0x000006f528c35dee, 0x0000000000000001, 0x0000006bd94ccf04, 0x000000d010308f1a, 0x0000008bb68c9eff, 0x0000000000000000, 0x000007cfd8378913, }, + { 0x0000074496f7e5e1, 0x0000045355c4b35c, 0x0000000000000000, 0x000000376bf6beea, 0x0000068d71c9b980, 0x00000280b2c5dd73, 0x0000000000000000, 0x0000004b32364db9, }, + { 0x00000066d124756f, 0x000002a879340819, 0x0000000000000000, 0x00000334ec018fce, 0x000000e74bde9e36, 0x0000001fa780d693, 0x0000000000000000, 0x000000069b4d24f5, }, + }, + // compressed: 0x89094adcd1683ef62fb1a8270a9a1cdc3a10771a81c65ab8fd01c3aa937b004d + { + { 0x0000054349447af4, 0x000000d1dc4a0989, 0x0000000000000001, 0x000003a341fc4970, 0x000000ddca8f061c, 0x000003408d3b881d, 0x0000000000000000, 0x000006baf558a77b, }, + { 0x000003564a3de523, 0x0000051625fec7cd, 0x0000000000000000, 0x00000472327f5f27, 0x000001a252571fb6, 0x000004301fdb85ac, 0x0000000000000000, 0x000002c47bf702b0, }, + { 0x000006470f49c13d, 0x000003707268289e, 0x0000000000000000, 0x000005c2317c73a9, 0x000000029fd5f399, 0x0000009a00f72755, 0x0000000000000000, 0x0000003ad93fb054, }, + }, + // compressed: 0x823771b2b9b15d3b629901a2d4a5e27d280d9d1fc02139b3252f41a25c9df298 + { + { 0x0000071c7882e37f, 0x000001b9b2713782, 0x0000000000000001, 0x00000459f89c73cd, 0x000000efa9e72c12, 0x000000e00fce8694, 0x0000000000000000, 0x000007a82fbb6901, }, + { 0x0000018efeb99a68, 0x000000332c476bb6, 0x0000000000000000, 0x00000516c40354e4, 0x00000295d8e7fb9f, 0x00000412f25b3392, 0x0000000000000000, 0x000006479f43b4b5, }, + { 0x0000015b158050da, 0x000001f78a975288, 0x0000000000000000, 0x0000035e5a43a4bc, 0x000000c08328a26b, 0x00000031e53ab944, 0x0000000000000000, 0x00000081333aeae9, }, + }, + // compressed: 0xf381bb5896bbade8b644dbed90649a7e08e676f74a401fed68404c3c45270f2c + { + { 0x00000355bddfe4fe, 0x0000039658bb81f3, 0x0000000000000001, 0x00000759c7b77b25, 0x000005d3e188d37a, 0x000000257bbb7304, 0x0000000000000000, 0x0000002241d5c30b, }, + { 0x000006fd5bc014c7, 0x0000036896dd15b7, 0x0000000000000000, 0x0000012f1d301aa1, 0x0000074aa737d4b9, 0x000004c4068ed1f4, 0x0000000000000000, 0x000003a38ee2f9c8, }, + { 0x000001167a015e01, 0x000001fa699243b7, 0x0000000000000000, 0x000005708415c134, 0x000000a61b3bd64c, 0x000000581e4e8a78, 0x0000000000000000, 0x000000d38de4213b, }, + }, + // compressed: 0x5d9f04cbd99ee7fa2b93fa2338d05eaed7260ae35cb6cb3bea9d7b8eb1885633 + { + { 0x000004d945e12bbe, 0x000006d9cb049f5d, 0x0000000000000001, 0x000007ee97eb0e8d, 0x000005bce3479fa4, 0x0000032e7185136b, 0x0000000000000000, 0x0000038b5a70e808, }, + { 0x00000180d0fd59fd, 0x00000752657f5cf3, 0x0000000000000000, 0x000003cabe58b711, 0x000003614ade3420, 0x000007b9dea3bcbb, 0x0000000000000000, 0x0000076503dd4e35, }, + { 0x000004e4ee0e8a86, 0x000006b97b40e08f, 0x0000000000000000, 0x000000adc6e0adfb, 0x000000ee3392411e, 0x00000066ad11631c, 0x0000000000000000, 0x000000fe560ea897, }, + }, + // compressed: 0xca26e8f785b434f2f364fc8af43b16fa91ca66058648ce57e60b58f7d44f587f + { + { 0x0000037cc23d4478, 0x00000485f7e826ca, 0x0000000000000001, 0x000000d6ec48bee6, 0x000001273097c21a, 0x0000044302b36548, 0x0000000000000000, 0x0000014996b50b3c, }, + { 0x000006a7af7ab05e, 0x0000078c9e7e4696, 0x0000000000000000, 0x0000013d8e2bacb1, 0x000007d830bcf105, 0x00000580be657ce4, 0x0000000000000000, 0x000005cdba2ace4d, }, + { 0x000001c9d60535b8, 0x000007e858efd22b, 0x0000000000000000, 0x000003fa89e17f5a, 0x000000cb2f7d812a, 0x000000feb09fa9ee, 0x0000000000000000, 0x000000b38da4e047, }, + }, + // compressed: 0x8093c0cb469f49d2fe23aea111ddb8c3437188aec6d60a757b7520effbc89f62 + { + { 0x0000012f4c72d638, 0x00000746cbc09380, 0x0000000000000001, 0x000002dd9750cce6, 0x00000349a73a89c9, 0x00000363574438a1, 0x0000000000000000, 0x00000363814d83e2, }, + { 0x00000505d192a735, 0x000005c47fda4933, 0x0000000000000000, 0x0000031009620f6c, 0x0000014905391d39, 0x0000020757b750ad, 0x0000000000000000, 0x0000067d25cfd83e, }, + { 0x000005ce7c60190c, 0x0000070ee3744686, 0x0000000000000000, 0x0000020147bb8081, 0x000000bea4b17a14, 0x000000c53f91f7de, 0x0000000000000000, 0x00000047cf3b33e5, }, + }, + // compressed: 0xbe150add8187e8f4607ee7378a7c3814d212de1e19f9ee1882c956a979d3554d + { + { 0x0000071c254d32f8, 0x00000781dd0a15be, 0x0000000000000001, 0x000001ad0ef0d9a7, 0x000005fbc5848967, 0x0000048c8f6f0969, 0x0000000000000000, 0x000000b1383d8f16, }, + { 0x00000239cc5161e8, 0x000004efcc1e9d10, 0x0000000000000000, 0x000003730d78738e, 0x0000036c51166262, 0x0000056c98218eef, 0x0000000000000000, 0x00000774ec102424, }, + { 0x000004ac609babd2, 0x00000050e1f228df, 0x0000000000000000, 0x000000bab6b5ddf2, 0x000000b3d86e01ac, 0x0000009aaba6f352, 0x0000000000000000, 0x0000007ac04dd9dc, }, + }, + // compressed: 0xc2de09556200aca241dd7fc660038766aee720956ef44a051fba314eca760ca8 + { + { 0x000005c258a3757f, 0x000000625509dec2, 0x0000000000000001, 0x000006e5447c1595, 0x000005765580fc5e, 0x000002374a9073d7, 0x0000000000000000, 0x000002aaf28e6f3e, }, + { 0x0000019022954feb, 0x000007fba8345580, 0x0000000000000000, 0x00000576ec365f3c, 0x000002a81ed01708, 0x0000031ba1f054af, 0x0000000000000000, 0x00000038a9e250ed, }, + { 0x000004313c9f1787, 0x0000019a1c0d8319, 0x0000000000000000, 0x0000029de10e809c, 0x000000c7dd603dc5, 0x0000005018ed949c, 0x0000000000000000, 0x000000fc57effec4, }, + }, + // compressed: 0x8580ed6913049b3103bbbcdeedc3351c194ffd19d5345061e3cef60083e7afc0 + { + { 0x0000005c53590c55, 0x0000041369ed8085, 0x0000000000000001, 0x00000197182b5ff4, 0x000007344aaacd1a, 0x0000026a8cfea78c, 0x0000000000000000, 0x000001c1de53fab3, }, + { 0x00000546c66d41b6, 0x0000079760663360, 0x0000000000000000, 0x000000f87eb723bf, 0x00000629b4ee0cfb, 0x0000076cee361503, 0x0000000000000000, 0x000007adbfdee040, }, + { 0x000004bdeda5844e, 0x00000470d70fb77a, 0x0000000000000000, 0x000004dada8d71b7, 0x00000008a16fbad4, 0x000000815fcf0601, 0x0000000000000000, 0x000000b9a722bccd, }, + }, + // compressed: 0x942bf3aa17ba7a87669262080b244223c51a92285c360747009fa1c37de308cb + { + { 0x00000484cea950cb, 0x00000217aaf32b94, 0x0000000000000001, 0x000006812c8ae04c, 0x00000025aae35d03, 0x0000032e14490d62, 0x0000000000000000, 0x000000e2793a8686, }, + { 0x00000180d4cafdb4, 0x000004524cd0ef57, 0x0000000000000000, 0x000005452e579a0b, 0x000000e8ff1717fd, 0x00000219f0047073, 0x0000000000000000, 0x00000026283e0252, }, + { 0x00000026c841733c, 0x0000048d08902c21, 0x0000000000000000, 0x0000071b31edcc4c, 0x000000bf30207cff, 0x0000009611c6fb87, 0x0000000000000000, 0x000000d7cd124f6c, }, + }, + // compressed: 0xdeff6d988d59ba572f9683739175713d4161e054aaed13da19a2d04f752b52f4 + { + { 0x0000074e0b00b251, 0x0000018d986dffde, 0x0000000000000001, 0x000002362c51d277, 0x000002865cd3eb05, 0x000006d52a7030a0, 0x0000000000000000, 0x00000774013b859e, }, + { 0x000001aa2435fde7, 0x00000072c5eaf74b, 0x0000000000000000, 0x000003ce434ec35e, 0x000006d6974aef6d, 0x0000050a219da13e, 0x0000000000000000, 0x0000054cbf582858, }, + { 0x0000040c3290a915, 0x000004f5c5d645ce, 0x0000000000000000, 0x0000014869a7a7de, 0x000000f5d42592c7, 0x000000e8a456ea9f, 0x0000000000000000, 0x0000006a6521d149, }, + }, + // compressed: 0xbccf4462e4f185b58f6bba333f970fc5d3bfc3979ca35d3c6783327573413909 + { + { 0x000001405c14c818, 0x000001e46244cfbc, 0x0000000000000001, 0x00000563c6d0f5f6, 0x00000066ac6a6f9c, 0x000001ce4be1dfe9, 0x0000000000000000, 0x000001cd821b52e8, }, + { 0x00000470cede7364, 0x0000074d71f6b0be, 0x0000000000000000, 0x000003addd8321f5, 0x000001882ed70cae, 0x000003283673c5da, 0x0000000000000000, 0x00000223ad012f92, }, + { 0x000000a88a30ae10, 0x000007143e5cfcce, 0x0000000000000000, 0x000000a0ba2f2ceb, 0x000000670e2a42b2, 0x000000127282e6ea, 0x0000000000000000, 0x0000004398335d83, }, + }, + // compressed: 0xc5f21cfad8cb98cd652cd5f9acd5ca619190eb98cd26e056237894998d6de7b0 + { + { 0x0000061b9f613059, 0x000003d8fa1cf2c5, 0x0000000000000001, 0x00000679df95c740, 0x00000105e3b8845c, 0x00000366cc75c848, 0x0000000000000000, 0x00000764fbdb5967, }, + { 0x0000061cfd88d640, 0x000002a58cb9b319, 0x0000000000000000, 0x000000c39dded337, 0x0000047a7f741955, 0x0000014782356e02, 0x0000000000000000, 0x000000265c4611ac, }, + { 0x0000054300a6f960, 0x000005872b56b3e7, 0x0000000000000000, 0x0000039aa02a5cc3, 0x00000071c951f687, 0x00000061cedb1b33, 0x0000000000000000, 0x00000049c40995ca, }, + }, + // compressed: 0x2ca93b7e84f49cc1d4fd779e8af27349f50c69533ec00792ece65f6cde4c07b0 + { + { 0x0000074450a64f5b, 0x000004847e3ba92c, 0x0000000000000001, 0x000005471f920bd0, 0x000000e571865112, 0x0000001f29b4867a, 0x0000000000000000, 0x000007129d04a436, }, + { 0x000006ea0a55ec68, 0x000006ffba98339e, 0x0000000000000000, 0x0000068b68f99f7d, 0x0000062df32794b8, 0x000005fe6ec9207c, 0x0000000000000000, 0x00000632e64cefef, }, + { 0x000005b675306f5f, 0x00000525cfca2a79, 0x0000000000000000, 0x000002f2ebe8028f, 0x0000008ade02beeb, 0x000000600e99bcd8, 0x0000000000000000, 0x000000d8ce54a1ea, }, + }, + // compressed: 0x57c649698498104a86fc2b5563e6dfea161564d0a4e51ef5c514ab33b1efbcbf + { + { 0x00000040563d75b7, 0x000000846949c657, 0x0000000000000001, 0x000002f104ed26b3, 0x000000205ebd05ba, 0x000002d268320a8b, 0x0000000000000000, 0x000006febd148347, }, + { 0x0000073cf591c9ca, 0x0000057f90c94213, 0x0000000000000000, 0x000004d25ee4f427, 0x00000410adf76986, 0x000002b14c5f51ee, 0x0000000000000000, 0x000001a529e8d3f7, }, + { 0x000001aea4c84db0, 0x000003ab7f998d54, 0x0000000000000000, 0x000004bf5305256e, 0x0000000619763329, 0x0000007f79df6267, 0x0000000000000000, 0x000000208e760718, }, + }, + // compressed: 0xb42397c6d2b12ae67991d9b9a47aaba95753f030edb689766c1c05d6588d4cb3 + { + { 0x000004c0f96dab27, 0x000001d2c69723b4, 0x0000000000000001, 0x000004b73f99f998, 0x000002be10b59115, 0x00000376987829ab, 0x0000000000000000, 0x000007f2a2c71e29, }, + { 0x00000373cf4a0200, 0x000003322f3cc556, 0x0000000000000000, 0x0000055b44eaae1b, 0x000007d3f790346b, 0x00000051c6c7689b, 0x0000000000000000, 0x0000071e3e5f1034, }, + { 0x000005c7e0955b15, 0x000006a6adea92e7, 0x0000000000000000, 0x00000323ff76a3c2, 0x00000019abbeeba1, 0x00000066991ab1ac, 0x0000000000000000, 0x0000005547e52ff3, }, + }, + // compressed: 0x3f09b93b93eb7743cd974413af29b3e6287caf9b87c07ca7b4a18ddc0459df69 + { + { 0x00000151a02c4436, 0x000003933bb9093f, 0x0000000000000001, 0x00000398c783fa9f, 0x000007dd7f2fe6ec, 0x00000043cdd7be14, 0x0000000000000000, 0x000007dd99ac6e39, }, + { 0x00000598f027a37a, 0x00000092f9a86efd, 0x0000000000000000, 0x000007b7c09f2b23, 0x0000047d41a5b687, 0x000000da1b4a77cc, 0x0000000000000000, 0x0000018292655fe4, }, + { 0x00000631c9e2e12d, 0x0000039acca6bc4d, 0x0000000000000000, 0x000000d6acfcfa94, 0x000000a67c83b61d, 0x000000d3beb209b9, 0x0000000000000000, 0x000000fbf5cc04a0, }, + }, + // compressed: 0x3e857ea92c876920a50288a3f701069760250fd5a5bf1881f4c0673f0ae4f3b5 + { + { 0x000006fa09a40061, 0x0000072ca97e853e, 0x0000000000000001, 0x00000061a5eb141c, 0x000003d6190c097f, 0x000007d2ea8792b0, 0x0000000000000000, 0x0000021a49d31b5c, }, + { 0x0000003926cbcc6d, 0x0000010054a40d30, 0x0000000000000000, 0x00000647588ccaf0, 0x00000290b638bffd, 0x0000067c0f48118b, 0x0000000000000000, 0x0000029417f1f759, }, + { 0x0000017387b53ee5, 0x0000025c1807de8e, 0x0000000000000000, 0x0000035b002c9b87, 0x0000009d84c513f8, 0x0000006be7c8147e, 0x0000000000000000, 0x00000067e3341a9a, }, + }, + // compressed: 0xe77b8a8be3f399f39332f10dc3d497d2a2b230f2a599a8483fa13859a71a4bac + { + { 0x00000611ba5189f5, 0x000003e38b8a7be7, 0x0000000000000001, 0x0000057fb0d092e6, 0x0000065e9c5f0a64, 0x000004d2f9185951, 0x0000000000000000, 0x00000226d8a5ab3c, }, + { 0x0000046c45c21a5f, 0x00000626527e733e, 0x0000000000000000, 0x0000021d03b54433, 0x000001e3875426f2, 0x0000038a13f48a89, 0x0000000000000000, 0x0000036b439ddd36, }, + { 0x000002234f56a272, 0x0000034a5f530c37, 0x0000000000000000, 0x0000041365bcd0e5, 0x000000f38faf629f, 0x0000005896354eb2, 0x0000000000000000, 0x0000002d80454bdc, }, + }, + // compressed: 0x2dca90c67e3cd9af4afd8abcf5058fc1e5a182583a57f89bd69f8db0bee3ddda + { + { 0x00000744a1fc889b, 0x0000047ec690ca2d, 0x0000000000000001, 0x000005046136a091, 0x000005aac600920b, 0x0000039d2c4150f2, 0x0000000000000000, 0x000007165ed0e96c, }, + { 0x0000071ad8607973, 0x0000015fa955fb27, 0x0000000000000000, 0x000000ba3a5fb8f4, 0x0000004a03f3bfc1, 0x000000d9fd69bf85, 0x0000000000000000, 0x00000090555eaf46, }, + { 0x000005258fc01efb, 0x000007063c17d6f2, 0x0000000000000000, 0x000004ab1f9b7c49, 0x00000002e9843261, 0x000000b5bbc77d61, 0x0000000000000000, 0x000000bd77ed2761, }, + }, + // compressed: 0x2fc313fff33ba80fb9cb1ecb73a4c2c857d3e3ae023adbb15653c14a3120cfe8 + { + { 0x00000780faee4747, 0x000003f3ff13c32f, 0x0000000000000001, 0x000005f15c782901, 0x00000083bace749f, 0x000005015771e9ab, 0x0000000000000000, 0x0000071e301169f6, }, + { 0x0000007e2dc2e69b, 0x000003d97721f507, 0x0000000000000000, 0x0000079677ed633e, 0x000003b0d018e4ec, 0x00000415356b1db3, 0x0000000000000000, 0x00000528ab3db516, }, + { 0x000007e39986463a, 0x000007230a91cf2c, 0x0000000000000000, 0x000006128410140d, 0x000000ecdcf787bf, 0x000000d19e406295, 0x0000000000000000, 0x000000b434c95846, }, + }, + // compressed: 0x1ffee08e7e53d2232b77ba2fb58a20202f89c5c1f156f3fe00a05c751e7bf36b + { + { 0x000007f702392146, 0x0000037e8ee0fe1f, 0x0000000000000001, 0x00000297a87d4de3, 0x0000037e7a7cf6fb, 0x00000378e0e2c497, 0x0000000000000000, 0x00000776931b7059, }, + { 0x00000619085ebfa3, 0x0000074ee5647a4a, 0x0000000000000000, 0x0000050d8c322aba, 0x000006a1337184c4, 0x000005ca000fef35, 0x0000000000000000, 0x0000012ba264337c, }, + { 0x0000063fe6ae4dfe, 0x00000480822ad4be, 0x0000000000000000, 0x0000042ff90b0b39, 0x000000787f035ad7, 0x000000d7e6f63cea, 0x0000000000000000, 0x000000f4a75a9dad, }, + }, + // compressed: 0x8626e539a4d9b0ca195849a04be1c3efb294b3a0b534a9cb0e92bd2ea577bb1c + { + { 0x00000428e02a5c1a, 0x000001a439e52686, 0x0000000000000001, 0x000006b158f3c4d1, 0x0000046afc793748, 0x0000025ad059ca59, 0x0000000000000000, 0x000000f36b7d7b5b, }, + { 0x0000045ef55aafd1, 0x0000012b0339561b, 0x0000000000000000, 0x000004e9361a6aa0, 0x00000299dd25a4f7, 0x000003d920ecba93, 0x0000000000000000, 0x000002ee63459d13, }, + { 0x000003766d98f487, 0x000003bf0f852e81, 0x0000000000000000, 0x000006b3b132badf, 0x000000830f7299ba, 0x0000003976ef4a5d, 0x0000000000000000, 0x000000d2eeec9d5a, }, + }, + // compressed: 0x59377da43871ddb4dff612c7d78f9ab761a31479411cf874f1257094035f5e73 + { + { 0x00000715dfa999d4, 0x00000138a47d3759, 0x0000000000000001, 0x000007e5453dfcc9, 0x000004f69408eb06, 0x00000620bc8a51b0, 0x0000000000000000, 0x00000588cebe34e1, }, + { 0x0000074997112f14, 0x0000025edbf69bae, 0x0000000000000000, 0x000006ca31387af9, 0x00000417a76e4b8d, 0x000007025f174f81, 0x0000000000000000, 0x0000002415023404, }, + { 0x000000bd21b434b7, 0x000006de6a3f5f1c, 0x0000000000000000, 0x0000048d69679166, 0x000000144858a2ac, 0x000000e6bcbe0728, 0x0000000000000000, 0x000000abd8b2d503, }, + }, + // compressed: 0xee1481d7c1548a67644920ba079c587032f17f977c4bf79f2fca83f5feb0f198 + { + { 0x0000066abf002cf9, 0x000004c1d78114ee, 0x0000000000000001, 0x000001b9c78fc401, 0x00000263f4392749, 0x000005be4bbff899, 0x0000000000000000, 0x00000451633c6df3, }, + { 0x0000006bc523b0d1, 0x000004092c8cf14a, 0x0000000000000000, 0x0000052abd5d906c, 0x000005ea504adf28, 0x0000003ca2f9ff74, 0x0000000000000000, 0x00000268f79e3a80, }, + { 0x000004a560ba85c3, 0x000001c162701ee8, 0x0000000000000000, 0x000003dd8acf3728, 0x00000061a5649264, 0x00000031e361fdeb, 0x0000000000000000, 0x0000008d721435f0, }, + }, + // compressed: 0x2aff9ceb57bc197925f48fc2fcf9e3d8ec02e4baf6f9e9b202acb27b50f928fe + { + { 0x00000480c23bfd05, 0x00000457eb9cff2a, 0x0000000000000001, 0x0000038e51e86631, 0x0000017677942103, 0x000004fb5d720176, 0x0000000000000000, 0x000001ca4f6b996f, }, + { 0x000002b54fd9390b, 0x000001fe84af2337, 0x0000000000000000, 0x0000077085aef876, 0x0000055866d29197, 0x0000032ac02b2e9f, 0x0000000000000000, 0x00000535b48b1ba4, }, + { 0x000007c6eece1b1f, 0x000003638fe7f30a, 0x0000000000000000, 0x000004d04175c52a, 0x000000d1c4fa9df9, 0x000000fc51f2a0f7, 0x0000000000000000, 0x0000000d0b80c3e5, }, + }, + // compressed: 0x038bf0a5921dd8e391b2772b9ae2259f5bb539c23c1be9404993fefcbafa152b + { + { 0x000002c7466ec11a, 0x00000592a5f08b03, 0x0000000000000001, 0x0000028b92329057, 0x000002979b50c887, 0x0000059e611cdaad, 0x0000000000000000, 0x000001f2581def86, }, + { 0x00000151ac5f41a2, 0x000006f6523c7b03, 0x0000000000000000, 0x00000114dedad53a, 0x000001e7237849c5, 0x000007e934940e91, 0x0000000000000000, 0x0000032ae442f5d5, }, + { 0x0000036d4e05f355, 0x0000067c978a68ad, 0x0000000000000000, 0x000006c17d45fbf6, 0x000000835ff64de2, 0x000000562bf575f9, 0x0000000000000000, 0x000000f7c048c6cf, }, + }, + // compressed: 0x37d495c2c731597a1bc101ec8e46c0790c3a8d767d585bf08580e28c8d84e7f5 + { + { 0x000005d5ceeef17b, 0x000001c7c295d437, 0x0000000000000001, 0x0000022f3deeea97, 0x00000362aaf3f2ec, 0x0000043ebb469d06, 0x0000000000000000, 0x000004c3fe9911fc, }, + { 0x00000517a995b7e0, 0x00000038236f4b26, 0x0000000000000000, 0x000002b2fe6b52a0, 0x000007da25b829fe, 0x00000628085f05b5, 0x0000000000000000, 0x000002f56fa45264, }, + { 0x000005c6cadb1736, 0x000001e7011a3bb0, 0x0000000000000000, 0x000002029ecd9d4f, 0x000000e9c6c9edd4, 0x000000ebcf091b19, 0x0000000000000000, 0x0000004086200d2a, }, + }, + // compressed: 0x72cb4870078dccee117e12d1cf134a8e5c1fde835667e1541450b4aaf245f53c + { + { 0x0000007436eabfcc, 0x000005077048cb72, 0x0000000000000001, 0x0000006d9a8cf71a, 0x000003b4799d0cb2, 0x000003ab41ef0fae, 0x0000000000000000, 0x000003959f9c779b, }, + { 0x000007d851b78b91, 0x0000024fc23dd991, 0x0000000000000000, 0x0000041ea4eb3cfc, 0x000005b7537ee192, 0x0000034501454e16, 0x0000000000000000, 0x00000372515a65bb, }, + { 0x000001c49d4b7383, 0x00000239284f3f44, 0x0000000000000000, 0x0000069319801ee1, 0x00000058632c4421, 0x00000079ea8be555, 0x0000000000000000, 0x000000102ebb109b, }, + }, + // compressed: 0x6af4e54ba3028faca1e591e4ec403f18f2402f9c9288d5a4326e4748da321c30 + { + { 0x00000173856ed5ee, 0x000002a34be5f46a, 0x0000000000000001, 0x0000015f27bee3d3, 0x000005eddd6ae970, 0x000004494e17a079, 0x0000000000000000, 0x000005799adb5096, }, + { 0x000004d0eeba64b8, 0x0000023cb43591e0, 0x0000000000000000, 0x000003d290794a20, 0x00000689d97ae3f5, 0x00000476e32a4d58, 0x0000000000000000, 0x000002b2ff648bf1, }, + { 0x0000064be53330c8, 0x00000060fd03b392, 0x0000000000000000, 0x0000051671eef7d2, 0x000000f30fee9270, 0x000000603865b490, 0x0000000000000000, 0x000000daa57fa792, }, + }, + // compressed: 0xa5f616e17c3f908788ff8e13999015cc5a95a30be3aceb3bf0dbf5deac50a57c + { + { 0x0000031a8772dc9a, 0x0000077ce116f6a5, 0x0000000000000001, 0x000006d0ac3fc00d, 0x0000053b5b76d36d, 0x0000067185d1caad, 0x0000000000000000, 0x00000506af44146f, }, + { 0x000004275b462b2d, 0x000001dff110f207, 0x0000000000000000, 0x0000033a5f0f3cfa, 0x00000135de8486b7, 0x0000075dbf03beba, 0x0000000000000000, 0x000007f2139039b2, }, + { 0x0000058b942b7905, 0x000003305642644e, 0x0000000000000000, 0x000001de30c60f08, 0x00000023f851a43b, 0x000000f94aa159bd, 0x0000000000000000, 0x00000033e159997f, }, + }, + // compressed: 0x1852f93d21af16998b57bdcbc6bafd807616ea0256b30e3b112f37e50a2096c0 + { + { 0x0000014ae542bb6f, 0x000007213df95218, 0x0000000000000001, 0x000000891eb71ac6, 0x000002eec8ba8986, 0x000001ab01750b3b, 0x0000000000000000, 0x000003d2aa84b5ba, }, + { 0x0000063c49239dd4, 0x000007aaf17322d5, 0x0000000000000000, 0x000007b68e0667d4, 0x0000049ded395334, 0x00000372f113b0eb, 0x0000000000000000, 0x000004c5dcfea038, }, + { 0x000003ecd6fa1867, 0x00000203f6eb1b2e, 0x0000000000000000, 0x00000361ac11a5ae, 0x00000004bb6fd433, 0x000000812c4015ca, 0x0000000000000000, 0x000000a9760e8118, }, + }, + // compressed: 0xd85a29057217e0f6a64d4bb45e189e4afdb1bac2a8066bef8cf18ceb95074378 + { + { 0x00000590870d804c, 0x0000077205295ad8, 0x0000000000000001, 0x000003ee2d67f793, 0x0000047af0e837e5, 0x00000354615d58fe, 0x0000000000000000, 0x000005ff34e00e6b, }, + { 0x00000050cde1ef03, 0x00000169b4dedc02, 0x0000000000000000, 0x000002790e95d61c, 0x0000037521870a76, 0x000000cf18cef6b0, 0x0000000000000000, 0x00000624aa300c31, }, + { 0x0000019dcfadfd43, 0x0000052a78617ad1, 0x0000000000000000, 0x000006eadb299e23, 0x0000008c3205f035, 0x000000f0860f2bd7, 0x0000000000000000, 0x0000002e2fc1c55d, }, + }, + // compressed: 0xeb7042d94cd6d39cc10ab6d08fb07036abed3606ae12bc46396660f0fe5c2494 + { + { 0x00000575987dd20b, 0x0000064cd94270eb, 0x0000000000000001, 0x0000042c7191f7ef, 0x000004ae1da48f32, 0x00000157031b76d5, 0x0000000000000000, 0x0000001da09f8c42, }, + { 0x000006c173c0313a, 0x000006c158339a7a, 0x0000000000000000, 0x000001055593fb47, 0x0000041f4a855dc2, 0x0000060663946bc1, 0x0000000000000000, 0x000007008c1402aa, }, + { 0x000007dc07ae6751, 0x000004d9c2c23f42, 0x0000000000000000, 0x0000053cd1770290, 0x000000edf803a794, 0x0000002848b9fde0, 0x0000000000000000, 0x000000e56d860c25, }, + }, + // compressed: 0x7e6e9135621dfb6c1cf33593cc547a555328391c82b064aa1562d67de234bf2a + { + { 0x000004deab6e9936, 0x0000056235916e7e, 0x0000000000000001, 0x000001e7ddeb2cac, 0x0000059f90ff6f8b, 0x000000410e1c9429, 0x0000000000000000, 0x0000022e51e1bc54, }, + { 0x000006d3c893aa8f, 0x000006be638d9f63, 0x0000000000000000, 0x0000015e52593f93, 0x000007f3f5b280d3, 0x00000566215aa64b, 0x0000000000000000, 0x00000524f6ba61e1, }, + { 0x00000485472af64e, 0x00000555e953324c, 0x0000000000000000, 0x0000007313e8a944, 0x000000c5ececceb4, 0x000000557e69c4fb, 0x0000000000000000, 0x000000a7d4e5f2de, }, + }, + // compressed: 0x44f0464c44220c3209fefe27148611efa92bb15a930888248790cabc398f5113 + { + { 0x000007f33e5f5710, 0x000002444c46f044, 0x0000000000000001, 0x00000251fbe6499e, 0x000007f97292e7db, 0x00000449ad5895d4, 0x0000000000000000, 0x00000267eb401e38, }, + { 0x000002d7cdf8986f, 0x000007dfc1264184, 0x0000000000000000, 0x000001638823d0b3, 0x000004791a1915ba, 0x000004a908724880, 0x0000000000000000, 0x0000005ea4e77f88, }, + { 0x00000545bd1f0ad1, 0x000007bc4618509f, 0x0000000000000000, 0x000001b520cd0d69, 0x000000adeba9eda4, 0x00000026a31e7379, 0x0000000000000000, 0x000000511d069f3f, }, + }, + // compressed: 0x65d64141d0ab6e69712d1b148fd005d8930c6d021129f230b5357b4a201c2bb9 + { + { 0x0000075f2dedca67, 0x000003d04141d665, 0x0000000000000001, 0x00000253e5b38e71, 0x000004575482d717, 0x0000048881368649, 0x0000000000000000, 0x0000079e9b6014b3, }, + { 0x000000db31ac433c, 0x00000365ae2d2dd5, 0x0000000000000000, 0x000000bd15781415, 0x0000007f0d84c62d, 0x000007b35b530f22, 0x0000000000000000, 0x0000027e312acce3, }, + { 0x00000310e8892495, 0x0000076017423c50, 0x0000000000000000, 0x000003207b4520c4, 0x000000e65975a5cf, 0x0000007256384094, 0x0000000000000000, 0x000000753f8080ca, }, + }, + // compressed: 0x0970397900bb656f9b9357dea553f37e93d027586170ea4e3adec181d0f308d9 + { + { 0x000006e90e28255d, 0x0000030079397009, 0x0000000000000001, 0x00000680fc71f8e5, 0x0000010a8f350a88, 0x00000030ac13e849, 0x0000000000000000, 0x00000287f0eebe48, }, + { 0x000003b8ae6e14f4, 0x000002f2736decb7, 0x0000000000000000, 0x000001bfa5bbab05, 0x00000313ec9e8321, 0x0000041de3a4eea7, 0x0000000000000000, 0x00000586470b7309, }, + { 0x0000004a27c9b009, 0x000005fbcd4e9779, 0x0000000000000000, 0x000005a365a59b64, 0x0000005fafba2b7b, 0x000000b211e7a103, 0x0000000000000000, 0x0000006f40424381, }, + }, + // compressed: 0xcd88945ef0ee8517293b57eb77522105e3b4228f8573b58bb4ac549b84706eed + { + { 0x000000e008253d61, 0x000006f05e9488cd, 0x0000000000000001, 0x0000003c9ee0a4ee, 0x00000659a6a92da5, 0x000001c2c7915a71, 0x0000000000000000, 0x000002c790a4f5bf, }, + { 0x0000010da0999a14, 0x000002e76522f0bd, 0x0000000000000000, 0x000005ecf0a0ca2b, 0x0000009845b034d2, 0x0000054acb48bb57, 0x0000000000000000, 0x00000454dec0e67c, }, + { 0x000000bcbc43daaa, 0x000004148549dfad, 0x0000000000000000, 0x0000056c5dfc3afe, 0x0000006fbf012d14, 0x000000dadce10936, 0x0000000000000000, 0x000000e8fd4b53f5, }, + }, + // compressed: 0x2ac769d36da59836c4ba08c44f6a29f8e54875194b25bbb476d462728b0d281b + { + { 0x000007ddab4d2f9e, 0x0000056dd369c72a, 0x0000000000000001, 0x000003ddcf666241, 0x000001c16aa7f50b, 0x000002a58cbaa472, 0x0000000000000000, 0x000004402031d128, }, + { 0x00000521250f47a0, 0x000001175886d314, 0x0000000000000000, 0x000007f8ee5b54b4, 0x00000749cccac643, 0x0000062d476b4bb2, 0x0000000000000000, 0x000007485690aaa4, }, + { 0x000006e5a96c3a9a, 0x000007e0a5a93f10, 0x0000000000000000, 0x000004196025dd31, 0x000000d0ea367615, 0x00000036501b16e4, 0x0000000000000000, 0x000000d2a43ab52e, }, + }, + // compressed: 0x1898827c177107fd2a3183cdb072753b3a554f1364fa3876045f3a5e4fb87901 + { + { 0x000001c8ab6e8be4, 0x000001177c829818, 0x0000000000000001, 0x000001f5be7b3013, 0x000005487d163441, 0x0000053209a7aa9d, 0x0000000000000000, 0x0000010047ce8aaa, }, + { 0x000003abe5152756, 0x00000066255fa0ee, 0x0000000000000000, 0x0000026e6534d096, 0x000006c199bc7d21, 0x000003a5f047638f, 0x0000000000000000, 0x0000047724cc6598, }, + { 0x000007ee4a02f3f1, 0x000000edd5cac336, 0x0000000000000000, 0x0000030956e6766c, 0x000000f160d24602, 0x00000002f3709ebc, 0x0000000000000000, 0x0000006627152808, }, + }, + // compressed: 0xf31333c56ca9a1cacbdb8e1122ec914c06356a9580c434e9910aaf99375df9ad + { + { 0x0000002ec84edbbd, 0x0000016cc53313f3, 0x0000000000000001, 0x000005e0e9deb93a, 0x000002fd2609cdf8, 0x000002404ab51a83, 0x0000000000000000, 0x00000353227b0187, }, + { 0x0000075fc47f8301, 0x000001db79795435, 0x0000000000000000, 0x0000076861f292c4, 0x000003f08c524918, 0x000002f0a91e934c, 0x0000000000000000, 0x000007d2245cb87e, }, + { 0x000003d17bfd7a0c, 0x0000013247b08846, 0x0000000000000000, 0x000006df7423aac3, 0x000000d1b1046793, 0x0000005bf2ba6f33, 0x0000000000000000, 0x000000845795e4c8, }, + }, + // compressed: 0x58a37d3a86baeb24d10732f41f5d9436fd6341796e806657e6fe4bcb078793f2 + { + { 0x0000043e4218d497, 0x000002863a7da358, 0x0000000000000001, 0x0000029f275c7d79, 0x000001ba2f2d8507, 0x000000373ca0b1fe, 0x0000000000000000, 0x00000442edd9abbb, }, + { 0x000004d411ffb417, 0x00000640fa249d77, 0x0000000000000000, 0x0000068f9d492c12, 0x000003ce0ff7ab4a, 0x000004bfee657668, 0x0000000000000000, 0x000005e225b3bb2f, }, + { 0x00000173ccdf80bd, 0x000004da51747fd0, 0x0000000000000000, 0x00000319a8e0882d, 0x000000d92312062b, 0x000000e5270e0f96, 0x0000000000000000, 0x000000fd7a5c90bd, }, + }, + // compressed: 0x18fc4c10e21e9e15a38fc3c7384ab3b9a23b9fda6e5ef8c449240f89ed51a2a8 + { + { 0x000002021a22b23f, 0x000006e2104cfc18, 0x0000000000000001, 0x000000f08c4cb7b5, 0x000002c077d558b3, 0x000007376d4f9dd1, 0x0000000000000000, 0x0000064a55f12f80, }, + { 0x000005e8d3eaedc6, 0x00000071f462b3c3, 0x0000000000000000, 0x0000022d17731bde, 0x00000027fa4cfc24, 0x000000f2449c4f85, 0x0000000000000000, 0x000006468439590d, }, + { 0x000000b0df257d3a, 0x000002e6cd28e31f, 0x0000000000000000, 0x000004f11c80d536, 0x00000000a5bb37ad, 0x0000005144a3db12, 0x0000000000000000, 0x000000a0f3f0fc80, }, + }, + // compressed: 0x5a7fd23a8f9a48871f4512683de37cbdfbe859ee1c730f106401e0b33b1f1db7 + { + { 0x000003a56f365f1d, 0x0000028f3ad27f5a, 0x0000000000000001, 0x000001fe2c752a69, 0x0000001714061b7e, 0x0000018e772cf47d, 0x0000000000000000, 0x000006773e778006, }, + { 0x00000112bb3a11c3, 0x00000248a3f0e913, 0x0000000000000000, 0x000006acc96329f5, 0x000004806a7901b3, 0x00000600164100f7, 0x0000000000000000, 0x0000046cbdba723e, }, + { 0x000003dff70dbb78, 0x000006f5f38cf5a0, 0x0000000000000000, 0x000003cc5b77b9f3, 0x00000065092c2963, 0x0000006e3a3e7767, 0x0000000000000000, 0x0000009348dc7610, }, + }, + // compressed: 0x56ba438a2374ae4c68dd5670c791c7e06985722c893d570036b7a37e0ebeffbf + { + { 0x000001b3203452a9, 0x000004238a43ba56, 0x0000000000000001, 0x00000743a55b7cb2, 0x0000005c53a34858, 0x000006c4963942b4, 0x0000000000000000, 0x000006cb6ce6ea8c, }, + { 0x000002331182d335, 0x000002dbad0995ce, 0x0000000000000000, 0x0000035b5b97c452, 0x000006d216511461, 0x0000023b73600573, 0x0000000000000000, 0x000003c5df9754f6, }, + { 0x000004df6f00694b, 0x000007831e471dc1, 0x0000000000000000, 0x000007e9a9d277e7, 0x0000002c7b56199c, 0x0000007fff7c1cfd, 0x0000000000000000, 0x000000ec66034153, }, + }, + // compressed: 0x53bf85f046c360eefd6a3e092800a1da0f3b0762f002d6c6fed79975f669f592 + { + { 0x0000048eb5178377, 0x00000346f085bf53, 0x0000000000000001, 0x000000383d6faf65, 0x00000420ef9d29f8, 0x0000017831039d87, 0x0000000000000000, 0x0000030d07fdb28e, }, + { 0x000007f7bf392142, 0x000007cd5fbdcc18, 0x0000000000000000, 0x0000045dd15b82de, 0x000002f2a2ae68c7, 0x0000019d7fec6d60, 0x0000000000000000, 0x000007d0d4a834eb, }, + { 0x000005324678b821, 0x0000076a8400a024, 0x0000000000000000, 0x0000009edff81b53, 0x000000592fec453c, 0x00000025ead3eceb, 0x0000000000000000, 0x0000001298e41f0a, }, + }, + // compressed: 0x22e79f185d587b3762fd340a09a7b47f6db1c43286b4894f3a3b2b06a7ff2144 + { + { 0x0000032e3224b906, 0x0000005d189fe722, 0x0000000000000001, 0x00000329c509c944, 0x0000035eef5d87d8, 0x00000243196258b6, 0x0000000000000000, 0x00000415dd4c6e35, }, + { 0x000000abaebc8ac8, 0x0000069fac46ef6b, 0x0000000000000000, 0x000004c000908f0a, 0x00000143cd7beddb, 0x000002b3b3a4f89b, 0x0000000000000000, 0x0000031803328602, }, + { 0x0000060f7604aa49, 0x000005fed29c2428, 0x0000000000000000, 0x0000012bc2d3785e, 0x000000b8398f3b3f, 0x0000008843ff4e0c, 0x0000000000000000, 0x0000001651caf044, }, + }, + // compressed: 0x0fe10276ed300e8c7149c6c0c826dcddaf4755ceffebb62426629348d4261cf6 + { + { 0x0000017f44b50561, 0x000000ed7602e10f, 0x0000000000000001, 0x000003f7cd04b52f, 0x000000ffd72a839d, 0x000005ffe72aa3d7, 0x0000000000000000, 0x000000f1b8781119, }, + { 0x00000785b857ce50, 0x000000c92e3181c6, 0x0000000000000000, 0x000005df51bf4b7c, 0x00000252d64a6964, 0x0000013622624b6e, 0x0000000000000000, 0x00000613fb8c1aad, }, + { 0x0000040d27db9a6b, 0x00000777709b2303, 0x0000000000000000, 0x000001ffad7f92bf, 0x000000daef3d9ce2, 0x000000ec384da891, 0x0000000000000000, 0x000000669e686442, }, + }, + // compressed: 0x79bfd6be4670715096853a5cb92aafbebc8c1b9e21e4202df124b772e6e191d0 + { + { 0x000001290f547051, 0x00000046bed6bf79, 0x0000000000000001, 0x00000412716851e3, 0x000003aea6645d1c, 0x00000210cf0dc65e, 0x0000000000000000, 0x00000526c3515dc9, }, + { 0x0000053b66048958, 0x00000750b2ca0e2e, 0x0000000000000000, 0x000000485522806b, 0x0000018cd73578b5, 0x000003724f12d20e, 0x0000000000000000, 0x000002b6044d30ba, }, + { 0x0000032722d5b538, 0x000002fabcaae570, 0x0000000000000000, 0x000005f2e04024fa, 0x0000000bccab4a51, 0x000000a123c3cce5, 0x0000000000000000, 0x000000ffe2a1ff6a, }, + }, + // compressed: 0x18f11f185614cafc5142691ff113a2c2acd0a4ac65eeb1bc02c3fe3f1da957c3 + { + { 0x0000072699bbcdb9, 0x00000456181ff118, 0x0000000000000001, 0x00000198caf88d89, 0x000007edd10e9056, 0x00000732d6526856, 0x0000000000000000, 0x000003d5557afa81, }, + { 0x0000002fac5d8f8f, 0x000005284a3f9942, 0x0000000000000000, 0x00000511013a69a9, 0x000002491a35dd03, 0x000007ec302bcb1e, 0x0000000000000000, 0x000007f7e1420790, }, + { 0x0000055cc432a627, 0x0000030a884fc47d, 0x0000000000000000, 0x0000041d5948bdac, 0x0000003134ba1bbd, 0x00000086af523a7f, 0x0000000000000000, 0x000000ad2b6101be, }, + }, + // compressed: 0xfa6d87d21b14bad89f8a136ece2ab62343b47de20d5f20824f85fcd5be8e03f8 + { + { 0x00000484acb9749b, 0x0000041bd2876dfa, 0x0000000000000001, 0x000000c2dfdcb43f, 0x000003a4f27e5ba1, 0x00000786f13eda21, 0x0000000000000000, 0x0000008961d47595, }, + { 0x000000b188f077f7, 0x0000027153fb1742, 0x0000000000000000, 0x0000071db20d91b2, 0x000003b91056ce75, 0x000007c854f82205, 0x0000000000000000, 0x000003788504e6ce, }, + { 0x0000022358784c8c, 0x0000048ed8ab39b8, 0x0000000000000000, 0x0000052b8c0e45d9, 0x000000b937def39b, 0x000000f0071d7dab, 0x0000000000000000, 0x00000009d4c69f29, }, + }, + // compressed: 0xf56c3a05b677b87811d82012eb1ed30b7d97ed0246d7b9e82a6f288cfc89d182 + { + { 0x000001e47b3056a3, 0x000007b6053a6cf5, 0x0000000000000001, 0x0000060eb9cc6f86, 0x0000063ed99ea9f2, 0x000003a30176cbbe, 0x0000000000000000, 0x0000055f28e84eb1, }, + { 0x00000576cf8f8f54, 0x0000041b022f170e, 0x0000000000000000, 0x0000005181874f33, 0x00000435a1cb8253, 0x00000286f2ae8b9d, 0x0000000000000000, 0x000006af095165d7, }, + { 0x000006dd70364afe, 0x0000042f4c7bac48, 0x0000000000000000, 0x000001776956a818, 0x000000bfcf86f920, 0x00000005a313f918, 0x0000000000000000, 0x00000006dd27beee, }, + }, +}; + +/* Ed25519 base point w-NAF table for fast const-time scalar multiplication. + Table size 8x32 points, i.e. max w=4. + Used by fd_ed25519_sign and similar. */ +static const fd_ed25519_point_t fd_ed25519_base_point_const_time_table[32][8] = { + { // 0 + // compressed: 0x853b8cf5c693bc2f190e8cfbc62d93cfc2423d6498480b2765bad4333a9dcf07 + { + { 0x00000105d740913e, 0x000003c6f58c3b85, 0x0000000000000001, 0x00000205877aaa68, 0x0000021a3447c504, 0x0000044c321ea161, 0x0000000000000000, 0x000006e5eea1acc6, }, + { 0x00000017d673a207, 0x00000181c325f792, 0x0000000000000000, 0x0000055893d57922, 0x00000781267a5c18, 0x0000054ba65270b4, 0x0000000000000000, 0x000000c65a85a1b7, }, + { 0x000007f4e67c1745, 0x0000033e4cb71bee, 0x0000000000000000, 0x0000009b67a08f32, 0x00000089fa5f2531, 0x0000000f9f3a7467, 0x0000000000000000, 0x000000de22f6d13e, }, + }, + // compressed: 0xd7713c93fce72492b5f50f7a969d469f0207d6e1659aa65a2e2e7da83f060c59 + { + { 0x0000056042b4d5a8, 0x000007fc933c71d7, 0x0000000000000001, 0x000000b3a59b7a5f, 0x000001b5d8b71bd5, 0x00000532f0eb0381, 0x0000000000000000, 0x00000042059eb518, }, + { 0x000004159ed15334, 0x000001feb6b2449c, 0x0000000000000000, 0x00000359ef087f55, 0x00000492555e09e2, 0x000007d2e2e5aa69, 0x0000000000000000, 0x00000250b73500fa, }, + { 0x0000023cae043139, 0x0000027d1a7659e8, 0x0000000000000000, 0x000004db05af7576, 0x000000d76b2b4cd3, 0x000000b2180c7f50, 0x0000000000000000, 0x000000e035eb627d, }, + }, + // compressed: 0x3097ee4ca8b025af8a4b86e830845a023267019f02501bc1f4f8809a1b4e16fa + { + { 0x000007e8a4fcd265, 0x000000a84cee9730, 0x0000000000000001, 0x0000033f0dd0d889, 0x0000018d10a5eb5e, 0x000000014f80b399, 0x0000000000000000, 0x000002a2c6796da6, }, + { 0x000000374faacc23, 0x000000c97155e4b6, 0x0000000000000000, 0x000006bb4c4295d2, 0x000005bda628131f, 0x0000000f8f4c11b5, 0x0000000000000000, 0x0000039b4c6d170e, }, + { 0x000004ef4d4ff797, 0x000000096a10c3a2, 0x0000000000000000, 0x00000162508c8870, 0x00000055722b0eaa, 0x000000f42c9c3735, 0x0000000000000000, 0x000000b4504d5e25, }, + }, + // compressed: 0x9f09fc8eb95173283825fd7df4c6656765920afb3d8d34ca2787e52103910ee8 + { + { 0x0000050a056818bf, 0x000001b98efc099f, 0x0000000000000001, 0x000003e9c476ff09, 0x000001e683502839, 0x0000069efd854932, 0x0000000000000000, 0x0000067c8815a24a, }, + { 0x0000041f5532bfc0, 0x000007a4a7050e6a, 0x0000000000000000, 0x000003982e4b427f, 0x0000045a49ac3e8e, 0x00000658727ca348, 0x0000000000000000, 0x00000553e2b5ddbd, }, + { 0x000004c9fa25c559, 0x0000059d971bd1f7, 0x0000000000000000, 0x000001ba78e515ed, 0x0000004f267e98e8, 0x000000d01d220643, 0x0000000000000000, 0x000000ff3a197ec6, }, + }, + // compressed: 0x33bba50844bc12a202ed5ec7c348508d44ecbf5a0ceb1bddeb06e246f1cc4529 + { + { 0x000002c3a447d6ba, 0x0000044408a5bb33, 0x0000000000000001, 0x000003f1812a8285, 0x0000008e5c325043, 0x000005862d5ff622, 0x0000000000000000, 0x000003858dded396, }, + { 0x000004e536eff230, 0x000003dda0544257, 0x0000000000000000, 0x000007ba3f97977b, 0x000001b55f3e33cf, 0x000006206ebdd1be, 0x0000000000000000, 0x000003bb69ab41b6, }, + { 0x000007540053452c, 0x0000023541230f1d, 0x0000000000000000, 0x0000049c38201f42, 0x0000002a94fce7d6, 0x000000528b99e28d, 0x0000000000000000, 0x00000087557cd2d6, }, + }, + // compressed: 0x31711577ebee0c3a88afc8008915279b36a759da68b66580bd38cca2b67be551 + { + { 0x000006b67b7d8ca4, 0x000006eb77157131, 0x0000000000000001, 0x0000026702ea4b71, 0x000006739022a9dc, 0x000003346d2cd39b, 0x0000000000000000, 0x00000125841de0a2, }, + { 0x00000244e7293300, 0x00000115f107419d, 0x0000000000000000, 0x000004376030b586, 0x00000417884bb085, 0x000004c38bd8065b, 0x0000000000000000, 0x000000d61e353e4a, }, + { 0x0000055d6f8a109f, 0x0000026c9c562403, 0x0000000000000000, 0x000002f9c3800d06, 0x000000716c98835c, 0x000000a3caf76d45, 0x0000000000000000, 0x0000002171d2353e, }, + }, + // compressed: 0xbfa34e94d05c1a6bd2c09db33a357074492e54288252b2717e923c2869ea1bc6 + { + { 0x0000049aaa3221b1, 0x000004d0944ea3bf, 0x0000000000000001, 0x000005c801b8b3a2, 0x00000327c90c961d, 0x00000141142a1724, 0x0000000000000000, 0x000000dd2c3bd6f9, }, + { 0x0000074474f74de5, 0x000003b81a4d634b, 0x0000000000000000, 0x000007d4935e306d, 0x000005317e09dea7, 0x000003c927e71b25, 0x0000000000000000, 0x000000f90a7529c4, }, + { 0x000001b280854cee, 0x000005d1c0d4eace, 0x0000000000000000, 0x000006cc0d7d1c14, 0x0000003addbaba5c, 0x0000008c37d4d250, 0x0000000000000000, 0x000000f53f7638d4, }, + }, + // compressed: 0x8f3edd046659b7592c7088e27703b36c23c3d95e669c33b12fe5bc6160e71589 + { + { 0x000005edf39234d9, 0x0000016604dd3e8f, 0x0000000000000001, 0x000005d9c9a2911a, 0x000000d6371e11fd, 0x000006332f6ce191, 0x0000000000000000, 0x0000010c875b1519, }, + { 0x000006ab1f3c54eb, 0x0000010e058b36eb, 0x0000000000000000, 0x00000194fafcf83e, 0x000000e01c32c274, 0x000003ce52fb1339, 0x0000000000000000, 0x000004c4e9563641, }, + { 0x00000658f5da0386, 0x000005b2cc0ddf8a, 0x0000000000000000, 0x000002e28dc5e22f, 0x0000007520494264, 0x000000122bcec0c3, 0x0000000000000000, 0x0000004d20f8b85d, }, + }, + }, + { // 1 + // compressed: 0x1d9c2f630eddcc2e1531897696b6d051587a63a86bb7df5239ef0ea0497dd36d + { + { 0x0000035449aa515e, 0x0000050e632f9c1d, 0x0000000000000001, 0x000004172106e4c7, 0x000007f4ada168e2, 0x000003b5d431bd2c, 0x0000000000000000, 0x0000075234a69f93, }, + { 0x000000d0475dab6c, 0x0000012622a5d99b, 0x0000000000000000, 0x000001afed2d8888, 0x000005315b9850c1, 0x000000eef3952dfb, 0x0000000000000000, 0x00000064bb0b4739, }, + { 0x000002a197127c2f, 0x0000014742da59da, 0x0000000000000000, 0x000003ed4f5a024a, 0x00000061aedade07, 0x000000dba6fa9340, 0x0000000000000000, 0x000000218d2e225d, }, + }, + // compressed: 0x05c85883a02aa60c4742207ae34a3d6adced113ba6d36474ef060855af9bbf03 + { + { 0x000004277dbe5fde, 0x000002a08358c805, 0x0000000000000001, 0x00000128cc586604, 0x000007e4231822c8, 0x000001d31d88f6ee, 0x0000000000000000, 0x000006f6e609347a, }, + { 0x000005afd44c9278, 0x0000040848e194c5, 0x0000000000000000, 0x0000032e8fc7e27c, 0x0000066fe090e00d, 0x000000806ef7464d, 0x0000000000000000, 0x0000006e22ca0b63, }, + { 0x00000099753eb466, 0x000001a8f52b8de8, 0x0000000000000000, 0x000005bd61cfb2d1, 0x0000004bcc3957da, 0x000000077f375eaa, 0x0000000000000000, 0x000000acdaf0c68b, }, + }, + // compressed: 0xd02f5ac6854205a1c36716f32a11646c58ee1a7340e20a682ab29347f3a5fb14 + { + { 0x0000049f9cc10834, 0x00000285c65a2fd0, 0x0000000000000001, 0x000006166985f7d4, 0x00000607bfbfe96d, 0x00000120398d772c, 0x0000000000000000, 0x0000015b3db0898f, }, + { 0x000003788a22c6f4, 0x000002ccf87420a8, 0x0000000000000000, 0x000001000ae79ae8, 0x000004c35d91cb5e, 0x0000013b22a680ae, 0x0000000000000000, 0x000007c526c2fc3f, }, + { 0x000006f2395b56a2, 0x000001b19044abcc, 0x0000000000000000, 0x00000164f97a1327, 0x000000672eb794bd, 0x00000029f74be68f, 0x0000000000000000, 0x000000290539d507, }, + }, + // compressed: 0xb8ec714e2f0be721e377a440b9dd56e6804f1dcece5665bf7e7b5d53c43bfc05 + { + { 0x0000038497dd95c2, 0x0000032f4e71ecb8, 0x0000000000000001, 0x000003ae52afdedd, 0x000006b09e42f445, 0x00000367670ea7c0, 0x0000000000000000, 0x00000641d4df40ca, }, + { 0x000001d6b4ffe86f, 0x0000048efc643ce1, 0x0000000000000000, 0x0000076619e49716, 0x000007581739e0c5, 0x000005d7b7ebf655, 0x0000000000000000, 0x00000651f0433a4b, }, + { 0x000005b1d138c2a9, 0x000003995b76e502, 0x0000000000000000, 0x000004d2558e33b4, 0x0000005fb38e3cbe, 0x0000000bf87788a6, 0x0000000000000000, 0x0000006e6ece8eb8, }, + }, + // compressed: 0x90652414cb9540633555c116401412ef60bc10890c14389e8c7c90305790f5eb + { + { 0x000001fd40d1add9, 0x000005cb14246590, 0x0000000000000001, 0x000000f1e1415b8a, 0x000000290af81dd7, 0x0000020644885e30, 0x0000000000000000, 0x000003dc4d514d28, }, + { 0x0000069a04e5f753, 0x0000002aa6ac6812, 0x0000000000000000, 0x00000074efc1f4ef, 0x0000018f9994363f, 0x00000107c8c9e381, 0x0000000000000000, 0x00000635a566f52d, }, + { 0x000002cc1c59be5b, 0x000003bc4851005b, 0x0000000000000000, 0x00000019027fdeeb, 0x0000003f7d4ad876, 0x000000d7eb20ae61, 0x0000000000000000, 0x00000004a439ecf4, }, + }, + // compressed: 0xe45e2f77206714b1ce9a0796b194f8e84a82ac004d22f84ac46ccdf7d9531700 + { + { 0x0000060b0a9d5294, 0x00000720772f5ee4, 0x0000000000000001, 0x0000032d963ddb34, 0x000003445ff083e7, 0x0000012680564125, 0x0000000000000000, 0x000000fcd048f942, }, + { 0x000003eb4cca27fd, 0x000000f359d6228c, 0x0000000000000000, 0x000002e70b078d24, 0x00000382cedd4618, 0x000004d6cc44af82, 0x0000000000000000, 0x0000048edb6aad7d, }, + { 0x0000023e639d703f, 0x000003a3e252c658, 0x0000000000000000, 0x000004777a1f6ad2, 0x0000007f4014fce2, 0x000000002ea7b3ef, 0x0000000000000000, 0x000000256bfc5f40, }, + }, + // compressed: 0x921e6fad267c2bdf13894b5023d3664bc38b1c75c09d408cb8c79607c2937eef + { + { 0x000003c496fce34d, 0x00000426ad6f1e92, 0x0000000000000001, 0x00000604aea6ae05, 0x00000130ff9462b0, 0x000006e03a8e45e1, 0x0000000000000000, 0x0000045af77fb5b3, }, + { 0x0000066b7dae3e1f, 0x00000171227be56f, 0x0000000000000000, 0x000004939323eb5e, 0x0000031206fd2047, 0x0000016c7b88c409, 0x0000000000000000, 0x0000060215161a80, }, + { 0x000005cee609aeb7, 0x0000052d9b4c8d41, 0x0000000000000000, 0x000003048d47c6fb, 0x000000e936edf2df, 0x000000defd27840f, 0x0000000000000000, 0x0000001f9d821e03, }, + }, + // compressed: 0x454e24c49dd2f23d0aded893740e022b4d210c827e06c86c0ab9ea6f16793741 + { + { 0x000000a649fe1e44, 0x0000029dc4244e45, 0x0000000000000001, 0x000007548c1af8f0, 0x0000062d443fe869, 0x0000033f410610a6, 0x0000000000000000, 0x0000007c8f036c9c, }, + { 0x000005aeefcc89ab, 0x0000031bc147be5a, 0x0000000000000000, 0x0000045336811636, 0x000004511f302441, 0x000006ab90a6cc80, 0x0000000000000000, 0x000006d1213f760b, }, + { 0x00000087f2ba88c6, 0x000004ac0839d24f, 0x0000000000000000, 0x000007383de9f091, 0x000000920354e307, 0x000000826ef22cdf, 0x0000000000000000, 0x000000837710f6e4, }, + }, + }, + { // 2 + // compressed: 0xae91667c594c237ec8b4850a3d9d8864e7fa4a350cc9e2da1d9e6a0c071e870a + { + { 0x00000544744346be, 0x000004597c6691ae, 0x0000000000000001, 0x000005994bbc8989, 0x0000050c509db01f, 0x000004861aa57d73, 0x0000000000000000, 0x000006f10ceacf1e, }, + { 0x000006a564a81d0f, 0x000000b6990fc469, 0x0000000000000000, 0x000003a84c066036, 0x000004dbdf77c3a8, 0x000006a9e1ddae2c, 0x0000000000000000, 0x0000005d4640d61a, }, + { 0x00000075236b5056, 0x000005922274f42a, 0x0000000000000000, 0x000001cdaeb8e96f, 0x0000009d6e51825f, 0x000000150e3c0e18, 0x0000000000000000, 0x0000007dce601e4d, }, + }, + // compressed: 0x18751e844779fa43d7469c6359fac6e5742b05e31d5e06a13090b8cfa2c647fd + { + { 0x000005e49e7dd6b7, 0x00000147841e7518, 0x0000000000000001, 0x000000148ef0d6e0, 0x000003aec970c3e5, 0x0000070ef18295ba, 0x0000000000000000, 0x00000108135dc0ab, }, + { 0x00000163d59eba4a, 0x00000388dae87f4f, 0x0000000000000000, 0x0000028de787fb5a, 0x000001125c23c999, 0x00000389030a1065, 0x0000000000000000, 0x0000049ec8071ec6, }, + { 0x0000020058457184, 0x000003971be9658e, 0x0000000000000000, 0x00000674f9d26a45, 0x0000002702aec52f, 0x000000fa8f8d459f, 0x0000000000000000, 0x0000002919eb1a69, }, + }, + // compressed: 0x6d75e49a7d2f57e27f48f388bb45c3568da860696d0bd19fb9a1ae4eadeb8fa7 + { + { 0x000002f67934f027, 0x0000077d9ae4756d, 0x0000000000000001, 0x0000001f8c933966, 0x0000061544b08c2a, 0x000005b6b4b05446, 0x0000000000000000, 0x0000014890ce9e29, }, + { 0x000000815528d492, 0x000006690ffc4ae5, 0x0000000000000000, 0x000005219316354d, 0x000005dbbd45ca1b, 0x000002ea1b99fd10, 0x0000000000000000, 0x000001c677b39115, }, + { 0x0000011a6612fbda, 0x0000055b0d16ee23, 0x0000000000000000, 0x0000023086527080, 0x0000007fe5f43d7a, 0x0000004f1fd75a9d, 0x0000000000000000, 0x0000008209ba05fd, }, + }, + // compressed: 0xb86a09db064e2181354fe40cc9b6a821f52a9e402ac1246581a4fc8ea4b56501 + { + { 0x0000075e1124422a, 0x00000606db096ab8, 0x0000000000000001, 0x00000474a0846a76, 0x00000080fd295b33, 0x00000095204f157a, 0x0000000000000000, 0x000004832c5515c7, }, + { 0x0000046756ae5657, 0x00000489e6b02429, 0x0000000000000000, 0x000005ef981e3214, 0x000002f53d594cb6, 0x000007ca4816524c, 0x0000000000000000, 0x000007ec8b8695e2, }, + { 0x00000287e830ce62, 0x00000486a2db2433, 0x0000000000000000, 0x0000044bbfe61334, 0x000000590c76015f, 0x00000002cb6b491d, 0x0000000000000000, 0x000000b236cfb37f, }, + }, + // compressed: 0x5db5189f71b3b9991e648ca1fae565e4ed059fc2361108618b123070864f9b48 + { + { 0x0000051c80b49bfa, 0x000003719f18b55d, 0x0000000000000001, 0x0000002d3aeb92ef, 0x000001e04f780e44, 0x0000009b614f82f6, 0x0000000000000000, 0x000005f38c85d512, }, + { 0x0000067d914625e1, 0x0000018c83d33736, 0x0000000000000000, 0x000002d50c3a4642, 0x000000f7bcb72703, 0x0000030128b61081, 0x0000000000000000, 0x000006cbebf3d7ea, }, + { 0x00000165e5457aaf, 0x000007919797ea86, 0x0000000000000000, 0x00000385894ed184, 0x0000007bc05d8f95, 0x00000091369f0ce0, 0x0000000000000000, 0x00000093ebf77492, }, + }, + // compressed: 0x2e579c1e8c625d15414788c5ac864d8aeb635751f652a3915b516788c2a6a106 + { + { 0x000002108a5bcfd4, 0x0000028c1e9c572e, 0x0000000000000001, 0x000001d47c1764b6, 0x00000260983e068e, 0x0000017b28abb1f5, 0x0000000000000000, 0x000005300c567b68, }, + { 0x0000048e7d661293, 0x00000108e822abac, 0x0000000000000000, 0x000000316a2e511a, 0x000007a6e7492c29, 0x0000067515b91a35, 0x0000000000000000, 0x000002742c69f031, }, + { 0x000003710375c2f1, 0x00000629361ab316, 0x0000000000000000, 0x000005c950450381, 0x000000ac0950db97, 0x0000000d434d8510, 0x0000000000000000, 0x00000041313d13fc, }, + }, + // compressed: 0x2eecea858b277416df2bcb7a07dc21565af4cb61164c0a64d39505f750990bf3 + { + { 0x000007fd3a2dcc7f, 0x0000078b85eaec2e, 0x0000000000000001, 0x00000535874ec552, 0x000004326903f1d0, 0x0000060b30e5fa2d, 0x0000000000000000, 0x0000037d0b601ae7, }, + { 0x000001fb124932ee, 0x000001657be2ce84, 0x0000000000000000, 0x0000048df1b92965, 0x00000267e29a279d, 0x000000595d3640a4, 0x0000000000000000, 0x00000303dccf7cb4, }, + { 0x000000ca15f0b295, 0x0000015887701deb, 0x0000000000000000, 0x000003179b233e60, 0x0000000807da3a19, 0x000000e61732a1ee, 0x0000000000000000, 0x000000b7ae8a8610, }, + }, + // compressed: 0x2a79e7152193c485c9ddcdbda2894cc662d7a3ada83d1e9d2cf8673012dbb75b + { + { 0x0000019528b24cc2, 0x0000032115e7792a, 0x0000000000000001, 0x00000467c6ca62be, 0x0000033727e0391b, 0x000006d456d1ebb1, 0x0000000000000000, 0x0000003bcdeaa3b8, }, + { 0x000006b8302ff35a, 0x000001bbb930b892, 0x0000000000000000, 0x0000032a5dc12c3e, 0x0000000ad8366b8b, 0x0000067f82c9d1e3, 0x0000000000000000, 0x0000070e0d218236, }, + { 0x000001fdad51958c, 0x0000031932268af7, 0x0000000000000000, 0x00000013b0875884, 0x0000002674f000e7, 0x000000b76fb62460, 0x0000000000000000, 0x000000e81b94dab1, }, + }, + }, + { // 3 + // compressed: 0x3c437804578c1a239d4381c20e27b5b79f07d9e3ea99aadbd9032b6c25f5032c + { + { 0x0000060752cfce4e, 0x000004570478433c, 0x0000000000000001, 0x000000757b53a47d, 0x000005955caa2ce2, 0x000004f571ec83cf, 0x0000000000000000, 0x000006bb92bf7bfc, }, + { 0x0000058116fbe91d, 0x0000002873a46351, 0x0000000000000000, 0x0000018b0f2f21e3, 0x000003ea38d05710, 0x000002b03d9dbaa9, 0x0000000000000000, 0x0000016bbaf31903, }, + { 0x0000030fffebcc1b, 0x000006ded49c3b0a, 0x0000000000000000, 0x000004c1ec04c33c, 0x0000002c3a4bf52c, 0x0000005807ea4ad8, 0x0000000000000000, 0x000000d328d17b7b, }, + }, + // compressed: 0x4819a96ae63dddd8ccd2c02fc26450482feafd346624489b3a2e4a6c4e1c3ea9 + { + { 0x00000746f4dafecf, 0x000005e66aa91948, 0x0000000000000001, 0x0000034b925112e1, 0x000006ed2523d9bf, 0x000002331a7ef517, 0x0000000000000000, 0x000004d7a30e1888, }, + { 0x000007fadef7a3e5, 0x0000001a599b1ba7, 0x0000000000000000, 0x0000042bb406edc2, 0x00000105785d31ff, 0x000004a2e3a9b482, 0x0000000000000000, 0x00000032823b0458, }, + { 0x000005f3bc045291, 0x00000521419308bf, 0x0000000000000000, 0x000005c0dde2d772, 0x000000a4a43348e7, 0x000000527c389cd8, 0x0000000000000000, 0x000000b6c0b888fe, }, + }, + // compressed: 0x4cf0e7f0c6fee93b6249e3759e576a861ae61d1e16ef4255d5bd5accf4fe12af + { + { 0x0000005920c47c89, 0x000006c6f0e7f04c, 0x0000000000000001, 0x000002b2dfc0c740, 0x000002b2817177bb, 0x0000078b0f0ef30d, 0x0000000000000000, 0x00000220bc67fb34, }, + { 0x00000771f9972cb0, 0x000004692c477d3f, 0x0000000000000000, 0x0000013480e148a4, 0x000002eb3ee00012, 0x000005abdd55542e, 0x0000000000000000, 0x00000243790c6cf1, }, + { 0x0000079fc0403248, 0x00000219a95e79d7, 0x0000000000000000, 0x0000004341b9fd03, 0x000000494edb9d51, 0x0000005e25fde998, 0x0000000000000000, 0x000000bcc0f64a31, }, + }, + // compressed: 0x14cf96a51c432ca000e4d3ae402dc4e3db260f2e802645d26870459e13331f20 + { + { 0x0000058f6cdf1818, 0x0000031ca596cf14, 0x0000000000000001, 0x0000076b08039d51, 0x000007a7b3730eb7, 0x000003401707936d, 0x0000000000000000, 0x000007581712d254, }, + { 0x0000044b144b1663, 0x0000027c80140588, 0x0000000000000000, 0x0000078000dfaa4f, 0x000004dd5f7e1b3f, 0x00000457068d2452, 0x0000000000000000, 0x00000460375d5220, }, + { 0x000000d73e9d3f0d, 0x0000078f10b502bb, 0x0000000000000000, 0x00000062c5259005, 0x000000a0cf5956d9, 0x000000403e66273c, 0x0000000000000000, 0x00000072f97510c4, }, + }, + // compressed: 0xe77913c8fbc31578f12ae1dd209461a6d5fda885f8c0a9ff52c2e1c122401b77 + { + { 0x00000093f05959b2, 0x000003fbc81379e7, 0x0000000000000001, 0x00000186513a2fa7, 0x00000248b90eaf13, 0x0000007c42d47eea, 0x0000000000000000, 0x0000018d8f5141d9, }, + { 0x0000052f2ec61826, 0x000004255e2f02b8, 0x0000000000000000, 0x00000299e11b0fbb, 0x000006e6c3a222fd, 0x0000061c252ffa9c, 0x0000000000000000, 0x00000171a76d06bc, }, + { 0x00000388ea8637a6, 0x0000069986508377, 0x0000000000000000, 0x000007d6b26dc7e7, 0x0000004673a640ec, 0x000000ee36804583, 0x0000000000000000, 0x0000006634312433, }, + }, + // compressed: 0xaf72759d3a2f51269e4a076888e2cb5bc4f78011c1c1ed847ba649f69f61c91a + { + { 0x00000745fb4f80c6, 0x0000073a9d7572af, 0x0000000000000001, 0x00000042524b1068, 0x0000040dc820ec8e, 0x000000e088c07be2, 0x0000000000000000, 0x000000c225312864, }, + { 0x000000eeb9fea2cd, 0x000000e953c4ca25, 0x0000000000000000, 0x0000039d30fe4567, 0x000003dfe21e3d4e, 0x0000049a67b84edc, 0x0000000000000000, 0x0000008b111fc9d7, }, + { 0x00000270db1f7987, 0x0000016f2f8a21a0, 0x0000000000000000, 0x00000141a0d0efba, 0x000000622cf8d707, 0x0000003592c33fec, 0x0000000000000000, 0x000000c2486c683e, }, + }, + // compressed: 0x38262d1ae349638b35fdd39b00b7df9da46ba0a3b8f18b7f4504d97831aa2295 + { + { 0x000001db874e898d, 0x000001e31a2d2638, 0x0000000000000001, 0x0000075369614938, 0x00000633e807cdde, 0x000000dc51d035d2, 0x0000000000000000, 0x000001c8db237913, }, + { 0x000000fb841b33a8, 0x0000027fa6b16c69, 0x0000000000000000, 0x000005ada2058705, 0x000005eff40793d2, 0x000005904457f8bf, 0x0000000000000000, 0x0000024306ce8c83, }, + { 0x00000027fa97c5b0, 0x000002777edc026f, 0x0000000000000000, 0x0000076bf9026adc, 0x0000008dd7c4613c, 0x0000002a455462f1, 0x0000000000000000, 0x0000008bfce1ea0a, }, + }, + // compressed: 0x911495c82049f262a20c633fc807f005b8d4c9f5d245bb6f45227ab56d9f6116 + { + { 0x000005a6960c0b8c, 0x00000120c8951491, 0x0000000000000001, 0x0000024401a308fd, 0x000000e79e85c7ea, 0x000002e97ae4ea5c, 0x0000000000000000, 0x0000072321e8de3e, }, + { 0x000001c5e41b490e, 0x00000461944c5e49, 0x0000000000000000, 0x000004b9558109e9, 0x000006392d407fb5, 0x000007a22456fbb4, 0x0000000000000000, 0x000003d38c6deb8d, }, + { 0x0000016da341dbbc, 0x00000017c01f20fd, 0x0000000000000000, 0x000006a088670dda, 0x000000851a2c4741, 0x0000002cc33edb6a, 0x0000000000000000, 0x0000003b02b25ac1, }, + }, + }, + { // 4 + // compressed: 0xe8c5857b9fb66587b2ba68d18b67f06f9b0f331d7ce7703a7c8eafb0516d5fba + { + { 0x00000756a60dac5f, 0x0000069f7b85c5e8, 0x0000000000000001, 0x000005b67178b252, 0x00000796a66707be, 0x000003be0e9987cd, 0x0000000000000000, 0x0000051059f208b8, }, + { 0x0000057b8aec26d0, 0x000005175650ecb6, 0x0000000000000000, 0x000003da2c0eda41, 0x000006cdcf07f193, 0x000002f8e7c3a70e, 0x0000000000000000, 0x000007fe366f62a4, }, + { 0x0000045f80bdabae, 0x000005bfc19e2f45, 0x0000000000000000, 0x0000001c70d3e754, 0x000000404694ef13, 0x00000074bedaa361, 0x0000000000000000, 0x000000f9ad046a79, }, + }, + // compressed: 0xf3f4ac6860cd65a6d3e3d73c182dd942d92560339d385957ffd82c2b3b25f03e + { + { 0x0000045bd887fab6, 0x0000056068acf4f3, 0x0000000000000001, 0x000000cf4a465030, 0x0000000974b73000, 0x0000044e99b012ec, 0x0000000000000000, 0x000007457a55a0ce, }, + { 0x000000076dc17c34, 0x000002fc7a74ccb9, 0x0000000000000000, 0x000000aef57a2d76, 0x000005c0943d9921, 0x000002cd8ff57593, 0x0000000000000000, 0x0000028281282cfa, }, + { 0x000000aa11a8cae9, 0x0000050b64b460f3, 0x0000000000000000, 0x000007e925ad0457, 0x0000005071910c77, 0x0000007de04a7656, 0x0000000000000000, 0x00000043b9714c0d, }, + }, + // compressed: 0xba3177befa008d9a89189e627e6003827fd9f3433702ccb28b676f6cbf0d845d + { + { 0x000004468c9d9fc8, 0x000000fabe7731ba, 0x0000000000000001, 0x0000000d309fe18b, 0x000006a6097717ce, 0x0000011ba1f9ecbf, 0x0000000000000000, 0x0000054cbed71055, }, + { 0x00000554796b8c00, 0x000003c3113351a0, 0x0000000000000000, 0x0000042cb8ee0dc7, 0x00000231dab125b4, 0x000006f678bb2cc0, 0x0000000000000000, 0x000004196dd57bbb, }, + { 0x000000950025bb50, 0x000006080d81f98a, 0x0000000000000000, 0x000005bac0b69ae7, 0x0000001787a10329, 0x000000bb081b7ed8, 0x0000000000000000, 0x0000007484ec4655, }, + }, + // compressed: 0xcb7e44db72c1f83bbd2d28c61fc4cf5ffe15aa75c0ffac80f9a9e124e8c97007 + { + { 0x0000032c8a7084fa, 0x00000172db447ecb, 0x0000000000000001, 0x0000019a45b5b5fd, 0x00000010ce2c722e, 0x000007e03ad50aff, 0x0000000000000000, 0x0000048c981f1f44, }, + { 0x0000073ca8a96848, 0x00000505b7a77f18, 0x0000000000000000, 0x0000074f2499ec3b, 0x000006debd1be9f0, 0x0000061a9f980acf, 0x0000000000000000, 0x00000500b1ee7300, }, + { 0x0000062628678f7e, 0x0000017f3f107f18, 0x0000000000000000, 0x000006182613a46c, 0x0000003fe2ef9d42, 0x0000000ee193d049, 0x0000000000000000, 0x00000073e4c9fa82, }, + }, + // compressed: 0xe17b09feab4a9bd12919e0dfe1fc6da4fff1a62c9408c9c34ef1352c2721c665 + { + { 0x00000417dbe7e29c, 0x000002abfe097be1, 0x0000000000000001, 0x000001f8ce3193dd, 0x000005c749acbdd4, 0x0000044a165378ff, 0x0000000000000000, 0x0000049e970e7f41, }, + { 0x000003827394f5a6, 0x00000403253a3369, 0x0000000000000000, 0x000004b8177ce571, 0x00000089840a0e91, 0x0000035f14ec3c90, 0x0000000000000000, 0x000001ce2720419a, }, + { 0x000006f650dda8ae, 0x00000691b7f3877f, 0x0000000000000000, 0x0000053440cd5a84, 0x0000002e25ae68d1, 0x000000cb8c424e58, 0x0000000000000000, 0x00000045f3001563, }, + }, + // compressed: 0xacfd6e9add9f02424149a534bece12b97bf3bd87b9640f64b4ca9885d3a471c1 + { + { 0x0000068a3e9ef8cb, 0x000007dd9a6efdac, 0x0000000000000001, 0x000000aa99c94c8c, 0x000004582f921247, 0x0000025cc3def9bd, 0x0000000000000000, 0x000000eed6ed29c9, }, + { 0x00000208e2ac0b46, 0x000004a928284053, 0x0000000000000000, 0x0000001700ff44eb, 0x000007626e5553d4, 0x0000018cab4640f6, 0x0000000000000000, 0x000004bd1abfbd29, }, + { 0x0000078fa7008a95, 0x000006e44b3af8d2, 0x0000000000000000, 0x0000008c01bdbec0, 0x00000027e82d9ac8, 0x00000082e349a70b, 0x0000000000000000, 0x000000a10429f4ae, }, + }, + // compressed: 0xd603d053bb151a4665c9f3bc882810b25a3a686c7576c52747b46cc8a45877ba + { + { 0x000001153ed6fe4b, 0x000005bb53d003d6, 0x0000000000000001, 0x000001f693ae5076, 0x00000323160a57ca, 0x0000033ab6341d2d, 0x0000000000000000, 0x000006487988af32, }, + { 0x000003aef898404d, 0x000006792ca8c342, 0x0000000000000000, 0x000007aa94ca9022, 0x000002ba74bcbde2, 0x000006cb44727c57, 0x0000000000000000, 0x0000067f49412248, }, + { 0x00000299699ce544, 0x000002c840a222f3, 0x0000000000000000, 0x00000476b8877c77, 0x00000045f2c1d8df, 0x00000074eeb14990, 0x0000000000000000, 0x000000bb3fa2bf1b, }, + }, + // compressed: 0x1e52d7ee2a4d243f15962e4328903a8ed4169c2e77ba64e1d898eb47fa87c1bb + { + { 0x000000d36d63727f, 0x0000052aeed7521e, 0x0000000000000001, 0x00000115ea86c20c, 0x000007e2e6577125, 0x0000053b974e0b6a, 0x0000000000000000, 0x0000015a9d3300c4, }, + { 0x000000f6a6606281, 0x000005d2c2a7e489, 0x0000000000000000, 0x000000da24ada8e0, 0x000000fbed3a9e18, 0x000006b98d8e164b, 0x0000000000000000, 0x000006fba03d7783, }, + { 0x000005a8de6bbf5f, 0x00000238ea40a10c, 0x0000000000000000, 0x000002662adf2db1, 0x000000665e6b229f, 0x00000077830ff48f, 0x0000000000000000, 0x0000008a1b039d20, }, + }, + }, + { // 5 + // compressed: 0x3f74ae1c96d874d0ed631ceef5186df829edf4e75bc5bd9708b13a6679d2bacc + { + { 0x000006a1a6205275, 0x000000961cae743f, 0x0000000000000001, 0x00000024a0d71fcd, 0x000000aaf447ae59, 0x000002adf3fa7694, 0x0000000000000000, 0x000003a5af9d320c, }, + { 0x00000791d06dcf76, 0x0000038c7dba0e9b, 0x0000000000000000, 0x000005115f101a32, 0x00000345be16f56d, 0x000003ab10897bdc, 0x0000000000000000, 0x00000007233b1a39, }, + { 0x000002a93c875d04, 0x000007e1b463d7b8, 0x0000000000000000, 0x0000071497082bec, 0x0000005bc4ba974c, 0x0000009975a4f2cc, 0x0000000000000000, 0x000000faff79dfc4, }, + }, + // compressed: 0x9490c2f3c55d7ccdab05912a9aa281c758301c42361dc680d7d4d8dc96d19ccf + { + { 0x0000066a266b2801, 0x000005c5f3c29094, 0x0000000000000001, 0x000007d86a7b3768, 0x000007de0d81bb16, 0x0000069b210e182c, 0x0000000000000000, 0x00000656ae0e060b, }, + { 0x00000673e2df5de3, 0x00000220b579af8b, 0x0000000000000000, 0x0000022f4c633252, 0x00000375a8df68a2, 0x0000058d4d780c61, 0x0000000000000000, 0x000007a0307ba029, }, + { 0x00000219b1a31355, 0x0000031e068a68aa, 0x0000000000000000, 0x000007434160906b, 0x000000b2ea86bd0f, 0x0000009f39a32db9, 0x0000000000000000, 0x000000f99ba10870, }, + }, + // compressed: 0x93cc606718840c9b992ab31a7a00aecd18da0b6286ec8da844ca908184ca93b5 + { + { 0x0000022c6d260417, 0x000004186760cc93, 0x0000000000000001, 0x0000009a5e849aa7, 0x000000da7db4633b, 0x000006433105ed0c, 0x0000000000000000, 0x0000022da9fedde8, }, + { 0x0000004817bb94c8, 0x0000066553336190, 0x0000000000000000, 0x0000031f59b24263, 0x0000050cf53a9c0c, 0x0000010ca44a88de, 0x0000000000000000, 0x000002d63e68c525, }, + { 0x000006b854f54252, 0x00000336b801e86a, 0x0000000000000000, 0x00000753630cd597, 0x0000008517a1dac3, 0x0000006b27950903, 0x0000000000000000, 0x0000004e730611b4, }, + }, + // compressed: 0x5324700a4c0ea1b9de1b7dd56658a20ff7da27cdb5d9b9fffd332c4945292cd7 + { + { 0x00000528435ed413, 0x0000064c0a702453, 0x0000000000000001, 0x00000745d6cd30be, 0x0000058d3ced01f7, 0x000004dae693ed7b, 0x0000000000000000, 0x00000418552eed06, }, + { 0x0000071999285871, 0x000007a37bd73421, 0x0000000000000000, 0x00000755df78eff8, 0x000000c3355bb07a, 0x000002c33fdffb9d, 0x0000000000000000, 0x000005bca80a22c8, }, + { 0x000006f543cd80c9, 0x0000043e89619b55, 0x0000000000000000, 0x000003937fa34f8e, 0x0000004d2b2f5d7d, 0x000000ae58528a92, 0x0000000000000000, 0x000000ff30a93180, }, + }, + // compressed: 0x6363bf0f521556d3a6fb4dcf455a0408c2a03f87bc4fc2eee7129bd63c65f2b0 + { + { 0x000006889f0be117, 0x000005520fbf6363, 0x0000000000000001, 0x00000138aac10c85, 0x000001cf91fe490e, 0x000007de439fd061, 0x0000000000000000, 0x0000000f0737d638, }, + { 0x0000029451070939, 0x000001bf74da6ac2, 0x0000000000000000, 0x000004ed79714119, 0x0000031f3043da3c, 0x000001b12e7eec24, 0x0000000000000000, 0x000006473daa920c, }, + { 0x0000020016b46ded, 0x000000201169173d, 0x0000000000000000, 0x000001185e6d836c, 0x000000ed85d88e14, 0x00000061e4ca79ad, 0x0000000000000000, 0x0000005e24e7e2b2, }, + }, + // compressed: 0xc00ba755d78b4830e742d4f1a4b5d606626159bc9ea6d1ea84f7c5ed9719acb8 + { + { 0x0000047c8ae01e11, 0x000003d755a70bc0, 0x0000000000000001, 0x00000517a751b13b, 0x0000054143b94797, 0x0000034f5e2cb0b1, 0x0000000000000000, 0x00000008a2a6ef24, }, + { 0x0000055573e8e73f, 0x000002885ce60911, 0x0000000000000000, 0x00000370b180ccd6, 0x000005b69f241d98, 0x0000045f784ead1a, 0x0000000000000000, 0x0000069e69cacacc, }, + { 0x000003f549d24129, 0x0000001b5ad693c7, 0x0000000000000000, 0x000005d1f41a19fa, 0x000000bb3cae55b0, 0x0000007158332fdb, 0x0000000000000000, 0x00000045bf9b397f, }, + }, + // compressed: 0xa1e03b10b459ec5669f959d2ecbae32e32cdf51394b27c7972e4cd247887e98f + { + { 0x000002e0c30d0cd9, 0x000001b4103be0a1, 0x0000000000000001, 0x000004d10aba913b, 0x000002c619154b0f, 0x0000014a09fae699, 0x0000000000000000, 0x000006ffb2bc7c0a, }, + { 0x000007686671bb7a, 0x0000033f2d2add8b, 0x0000000000000000, 0x000005b581cfdb66, 0x0000048c1c78f6b2, 0x000004de472797cb, 0x0000000000000000, 0x00000700a1766083, }, + { 0x000006b639997eb2, 0x000000bb8eebb349, 0x0000000000000000, 0x0000053a8f3608b9, 0x000000d6522d80a8, 0x0000001fd30ef049, 0x0000000000000000, 0x00000098607e60ff, }, + }, + // compressed: 0x0045d90d5803fc2993ecbb6fa47ad2ecf8a7e2c25f150a13d5a106b71a156bc1 + { + { 0x000003d617b28c85, 0x000003580dd94500, 0x0000000000000001, 0x000007efe9c136b0, 0x000003c60f352e5f, 0x000002afe17153fc, 0x0000000000000000, 0x000007ed0dabf055, }, + { 0x000006e77d5a6147, 0x0000077d92653f80, 0x0000000000000000, 0x00000489640ad51a, 0x000002ab7c4c6c6e, 0x0000006a1d5130a1, 0x0000000000000000, 0x0000077e8d2afe62, }, + { 0x000007174ddedce5, 0x000003b349ea91be, 0x0000000000000000, 0x000006f41f973563, 0x0000001ac371ef16, 0x00000082d62a356e, 0x0000000000000000, 0x000000323455ee84, }, + }, + }, + { // 6 + // compressed: 0xfb0e464f432be69fd60736a6d403d3de24daa0b70e2152f0935b5400be7d7ea3 + { + { 0x0000074bc53c1431, 0x000003434f460efb, 0x0000000000000001, 0x000005ed6701b430, 0x000001b7dad91f73, 0x000000875bd06d12, 0x0000000000000000, 0x0000078ac1f23f91, }, + { 0x0000065dbbd9c2de, 0x000006c0fad3fcc5, 0x0000000000000000, 0x0000017fa20026ae, 0x000005cc908b8b9c, 0x00000545b93f0522, 0x0000000000000000, 0x000001155e375320, }, + { 0x000004ae5c973881, 0x0000037b4c0f5298, 0x0000000000000000, 0x0000008c42539a7c, 0x000000fc5c1c8a16, 0x00000046fcfb7c00, 0x0000000000000000, 0x000000e35f4d3362, }, + }, + // compressed: 0xd6503b471c3c42ea10ef383b1f7ae85195bec9b25fbf849b1c9af878bc1f7380 + { + { 0x0000079b3953b61d, 0x0000041c473b50d6, 0x0000000000000001, 0x0000071848f81880, 0x000007fed4fbacff, 0x000007afd964df4a, 0x0000000000000000, 0x00000041b5dd0af1, }, + { 0x000004283cccb9cd, 0x0000071de21d4847, 0x0000000000000000, 0x000001d8233c8618, 0x0000031c28e0f435, 0x00000789a1c9b84b, 0x0000000000000000, 0x00000615808b6dae, }, + { 0x0000031960e7aabe, 0x00000547a1e87cec, 0x0000000000000000, 0x000006fe5830897b, 0x000000042285d385, 0x00000000e63f78f1, 0x0000000000000000, 0x000000989ade668f, }, + }, + // compressed: 0x70198f98fcdd0c2f1bf5b9b02762916bbe769177c4b6c76ea89f8fa80095bfb8 + { + { 0x000004cfc17d1fc9, 0x000005fc988f1970, 0x0000000000000001, 0x0000013c37e8876f, 0x00000095fbf7066f, 0x000003623bc8bb5f, 0x0000000000000000, 0x000002c11c92093b, }, + { 0x0000000782831efd, 0x0000073ea365e19b, 0x0000000000000000, 0x00000228c583fa59, 0x00000647a22dbde7, 0x000000f9fa86ec7b, 0x0000000000000000, 0x000000d49695080f, }, + { 0x000005b1d7d69945, 0x000001ae45889ec2, 0x0000000000000000, 0x0000028bd8796863, 0x000000327fbb554f, 0x000000717f2a0151, 0x0000000000000000, 0x000000d4df733d7e, }, + }, + // compressed: 0xc623e4b6b522b1ee8eff86f210709d938c5dcf1d832aa99010ebc5429fda6f93 + { + { 0x000001bb560855eb, 0x000002b5b6e423c6, 0x0000000000000001, 0x000007b1a305bdd1, 0x0000009bc7b8d660, 0x000005418ee7aec6, 0x0000000000000000, 0x00000452e1ddac45, }, + { 0x0000027e13ad48d8, 0x000000dff1ddd624, 0x0000000000000000, 0x00000705811f299b, 0x000001896ead71d1, 0x0000045eb1090a92, 0x0000000000000000, 0x0000068dcba2a87d, }, + { 0x000004905aece3e2, 0x0000024e75c043ca, 0x0000000000000000, 0x0000003cd92e767f, 0x000000ebeed22946, 0x00000026dfb53e85, 0x0000000000000000, 0x000000044306a217, }, + }, + // compressed: 0x7f7a304301715a9d5fa47dc49ede63b0d37a92be52febb226c4240fd41c48713 + { + { 0x000006385ead2d14, 0x0000010143307a7f, 0x0000000000000001, 0x000003d187978af8, 0x0000037308108f1e, 0x000007295f493d69, 0x0000000000000000, 0x000004245da3be50, }, + { 0x0000078b06095eec, 0x000007b48bf3ab4e, 0x0000000000000000, 0x000001c88276ba78, 0x00000006c030d13a, 0x0000040426c22bbf, 0x0000000000000000, 0x000001edc920d7b4, }, + { 0x000006823b620329, 0x000006c18f7a7b11, 0x0000000000000000, 0x000001c8ad68f5fc, 0x000000d40e39c2f7, 0x000000270f8883fa, 0x0000000000000000, 0x00000062e364d55e, }, + }, + // compressed: 0xd1478ab2d8b70da6f1a47017d614bfa658bddd5393f8a1d4e9434234634a516c + { + { 0x0000019097564ca8, 0x000007d8b28a47d1, 0x0000000000000001, 0x0000004f3a156341, 0x0000071bd243a8a8, 0x00000449a9eedeac, 0x0000000000000000, 0x000006a620878187, }, + { 0x000006bc233525e6, 0x000006149e34c1b6, 0x0000000000000000, 0x0000014065a46444, 0x0000070835a4f55f, 0x000004243e9d4a1f, 0x0000000000000000, 0x00000124aaafce0d, }, + { 0x000003fdeee13089, 0x0000029afc53585d, 0x0000000000000000, 0x000003edcf83a6e8, 0x000000443fa90e79, 0x000000d8a294c668, 0x0000000000000000, 0x00000091b54b2df7, }, + }, + // compressed: 0x93974cc85d1df614068241efe3f94199ac7762348fb8f5cda9798a0efa37c8d8 + { + { 0x000006665ca59cc7, 0x0000055dc84c9793, 0x0000000000000001, 0x0000008596fc9058, 0x00000384690f0be7, 0x000004479a313bd6, 0x0000000000000000, 0x000003bea49aeb35, }, + { 0x00000715940dd951, 0x0000003040c29ec3, 0x0000000000000000, 0x000002d403619f2d, 0x00000584af731afc, 0x000000a79a9cdf5b, 0x0000000000000000, 0x00000257f0adcc2e, }, + { 0x000002a11c952cb8, 0x0000026507e78fbd, 0x0000000000000000, 0x0000007772efcded, 0x000000cedbadf995, 0x000000b1906ff41d, 0x0000000000000000, 0x000000389ee7e58d, }, + }, + // compressed: 0x84347cfc6e706eb361cfc1c3b4c9df73e5c71c78c9791deb5c67af7ddb9a45f0 + { + { 0x000007bd305fa0bb, 0x0000006efc7c3484, 0x0000000000000001, 0x0000034991b42bb3, 0x000001c197f19c24, 0x000004e4bc0e63f2, 0x0000000000000000, 0x000007728fc63c6e, }, + { 0x000000cc75a1cf49, 0x00000039ec366dce, 0x0000000000000000, 0x0000005b9943723b, 0x00000764c42f421c, 0x000002f675ceb1d7, 0x0000000000000000, 0x00000621fd39fdf9, }, + { 0x0000020a75338153, 0x000005cf7f26d30f, 0x0000000000000000, 0x0000015c9a588d2c, 0x000000f2b5901a37, 0x000000e08b35b6fb, 0x0000000000000000, 0x000000bfc2c50919, }, + }, + }, + { // 7 + // compressed: 0x08b27c5d2d857928e7f27d6870dddeb891786821abff0bdc35aa7d6743c0442b + { + { 0x0000014fe194961a, 0x0000052d5d7cb208, 0x0000000000000001, 0x000007ab074eb78e, 0x000007e91da87916, 0x000007d590b43c48, 0x0000000000000000, 0x000005e6a427c833, }, + { 0x00000639a9e9cb24, 0x000007be5ce50f30, 0x0000000000000000, 0x0000035e8ce34390, 0x000001172329300c, 0x000007daa35dc0bf, 0x0000000000000000, 0x0000039a4e43eacb, }, + { 0x00000526f9f71c35, 0x000006e37b75c1a1, 0x0000000000000000, 0x000007eb1b463a67, 0x0000008f13a88df9, 0x00000056898086ce, 0x0000000000000000, 0x000000c18a5dde57, }, + }, + // compressed: 0x116dae7cc2c52b70ab8ca4549b69c744b22e49ba5640bcef6d67b6d94872d7f0 + { + { 0x000001bc3bfd8bf1, 0x000005c27cae6d11, 0x0000000000000001, 0x0000004b3ec2a05b, 0x000003586a98147a, 0x0000002b5d249759, 0x0000000000000000, 0x000001f2384742e8, }, + { 0x0000066aa3416bb1, 0x00000491956e0578, 0x0000000000000000, 0x000002f03c15515d, 0x000004fcaab0e4c1, 0x0000036676defbc4, 0x0000000000000000, 0x0000076f41379451, }, + { 0x000006c1ae48df27, 0x000001131da66d52, 0x0000000000000000, 0x00000661a67bd3b4, 0x0000002179386259, 0x000000e1aee491b3, 0x0000000000000000, 0x000000c6eab7a752, }, + }, + // compressed: 0xb7acf1971810c73dd8bb65c15e7dda5d0f02a10f9c5b8e50562ac537177563a7 + { + { 0x0000003e2ad10853, 0x0000001897f1acb7, 0x0000000000000001, 0x000002d36eb419a9, 0x000000fedf34dc48, 0x000005ce07d08107, 0x0000000000000000, 0x000001186a1e24ab, }, + { 0x000004c6ad36abf4, 0x000004b77b07b8e2, 0x0000000000000000, 0x0000068c14a05280, 0x00000416f849ff9f, 0x00000452a56508e5, 0x0000000000000000, 0x000005166e7cfa86, }, + { 0x000000d5bdd6427b, 0x0000057769f57b05, 0x0000000000000000, 0x000003c2d139f9de, 0x0000001b19838917, 0x0000004ec6ea2e6f, 0x0000000000000000, 0x000000e185bb14f5, }, + }, + // compressed: 0x137eedb87d96d4917a8176d70a2f25746425850de08209e4e53ca5163861b832 + { + { 0x000004509f6fec0e, 0x0000067db8ed7e13, 0x0000000000000001, 0x000007bee448cd64, 0x000000f9b3f04dae, 0x0000017006c292b2, 0x0000000000000000, 0x0000026cd0726d97, }, + { 0x000000ca31acac32, 0x000006d02f523a92, 0x0000000000000000, 0x00000710da0f3cfe, 0x000001484959733c, 0x00000253ce5e4098, 0x0000000000000000, 0x000005a4f41f89fd, }, + { 0x000003b8b9faa51b, 0x000001d094bc2b5d, 0x0000000000000000, 0x000001ab20e99c21, 0x0000005c1f58c6c7, 0x0000006570c2702d, 0x0000000000000000, 0x00000082f242b8e6, }, + }, + // compressed: 0x34cd6b28b933aee4dcd69d55b67eefb71f8ed3b31f148b2786c241226685fa31 + { + { 0x000004e7d7dced2a, 0x000003b9286bcd34, 0x0000000000000001, 0x000004422e3622f4, 0x00000019d4836c81, 0x0000020fd9e9c70f, 0x0000000000000000, 0x000003f0959c4891, }, + { 0x000002738e118e12, 0x000003badb9c95c6, 0x0000000000000000, 0x0000066a05b5f04d, 0x00000599d76e13be, 0x0000041c286278b1, 0x0000000000000000, 0x000001524899bc1b, }, + { 0x0000025fee2b0d1f, 0x000006dfbdfad956, 0x0000000000000000, 0x0000070480a61e60, 0x000000e006894619, 0x00000063f50acc44, 0x0000000000000000, 0x0000004976462553, }, + }, + // compressed: 0x6b5cf8f52a0cf8419467fa04c3847268ad1bbaa399df4589165debfff92a1d8d + { + { 0x0000051732de67c3, 0x0000042af5f85c6b, 0x0000000000000001, 0x000002a132621edf, 0x000001a1bb67de69, 0x000007ccd1dd0dd6, 0x0000000000000000, 0x000004bdd3cd60c9, }, + { 0x000003692916351d, 0x0000074cf2883f01, 0x0000000000000000, 0x0000044caf353b51, 0x000001880088ebd4, 0x000006b5d168945d, 0x0000000000000000, 0x00000531d7640041, }, + { 0x000000f2d2506118, 0x000005a1ca130c13, 0x0000000000000000, 0x000004c2e08a8564, 0x0000001fdc7d0e3c, 0x0000001a3a55f3ff, 0x0000000000000000, 0x0000002d59af2e30, }, + }, + // compressed: 0xadb68778c5c659c9bafe905fad9ee19404f542a3624ee216001716184bd34e96 + { + { 0x000002af2d9b1d3d, 0x000006c57887b6ad, 0x0000000000000001, 0x0000014c192fe69a, 0x0000003c8b59cb1b, 0x0000073151a17a82, 0x0000000000000000, 0x00000369dcd26f13, }, + { 0x000006448b4e5bee, 0x0000021fd7592b38, 0x0000000000000000, 0x00000222a2690fdb, 0x000003023093ecea, 0x0000016170016e24, 0x0000000000000000, 0x0000073f3eb877bf, }, + { 0x0000058d18a8da90, 0x00000253867ab57e, 0x0000000000000000, 0x00000586b8b3a8ea, 0x000000247c1ded72, 0x0000002c9da69630, 0x0000000000000000, 0x000000f1b41f8c20, }, + }, + // compressed: 0x943a0c68f1809fa2e6e7e91a157ef7717379014858f10011dd8db316b3a44a05 + { + { 0x00000528e52bc66a, 0x000000f1680c3a94, 0x0000000000000001, 0x0000068d19267cb8, 0x000007de036145ee, 0x000000ac2400bcb9, 0x0000000000000000, 0x000006953337760b, }, + { 0x0000060351cb7e2b, 0x0000053cfcd453f0, 0x0000000000000000, 0x000004a9b5fbf908, 0x000006b173a2419a, 0x00000338ddd1100f, 0x0000000000000000, 0x000007da7602aeb1, }, + { 0x000004b11f8c61c3, 0x000005c7ddf8546b, 0x0000000000000000, 0x0000042ca1e2719b, 0x0000005a4bbdd64a, 0x0000000a9549662d, 0x0000000000000000, 0x000000268c214d56, }, + }, + }, + { // 8 + // compressed: 0x15f5d177e7652acdf160aa8f87918954e506bcdabc3bb7b1fbc97ca9cb784865 + { + { 0x000006c78df6b0fe, 0x000005e777d1f515, 0x0000000000000001, 0x00000405055ce6a1, 0x0000050eb8bd78dc, 0x000005de6d5e0372, 0x0000000000000000, 0x0000028bd53ed20a, }, + { 0x000006bea36a2271, 0x0000054c1e39a54c, 0x0000000000000000, 0x00000235a532d3dc, 0x0000020d65009207, 0x000007cc9fbb1b73, 0x0000000000000000, 0x000006cb2ba3a1af, }, + { 0x0000054e5f6a2795, 0x0000055226461e3e, 0x0000000000000000, 0x000004daf29da049, 0x0000004205fb7456, 0x000000ca90f19752, 0x0000000000000000, 0x00000015ae4bb653, }, + }, + // compressed: 0x856f059b0cbcc7fed7fff5e768527d53faae124362c6af77d99f3902535f67cf + { + { 0x000007b1834e2457, 0x0000040c9b056f85, 0x0000000000000001, 0x000006360415171e, 0x00000505fbe8af6b, 0x000003312189577d, 0x0000000000000000, 0x00000756e84a2888, }, + { 0x000001c378bb884c, 0x000006bffaffd8f7, 0x0000000000000000, 0x00000309077865a6, 0x000002036501af07, 0x00000399fd977afc, 0x0000000000000000, 0x00000286561870a6, }, + { 0x000006d9d512d5c3, 0x0000014df549a39f, 0x0000000000000000, 0x00000334afbc4626, 0x00000095df9ff6e3, 0x0000009ecebea604, 0x0000000000000000, 0x000000179976e545, }, + }, + // compressed: 0x9612fe504c5e6d187e9fe8fe827b39e0b0317050c5f6c73bc2378f1069fd7866 + { + { 0x0000062feab1a9c8, 0x0000064c50fe1296, 0x0000000000000001, 0x00000231636863c2, 0x00000018ddadb6f9, 0x00000362a83818d8, 0x0000000000000000, 0x0000064fbc4f577e, }, + { 0x0000028fb9a30bd2, 0x00000513efc30dab, 0x0000000000000000, 0x000005a67e42b0df, 0x0000056b73eb092e, 0x000000f37c23bc7f, 0x0000000000000000, 0x000002d47014f73c, }, + { 0x0000021b9f98d594, 0x00000380e5ee0bfb, 0x0000000000000000, 0x0000001fda31215c, 0x0000008049e156b3, 0x000000ccf1fad221, 0x0000000000000000, 0x0000005a85c4211d, }, + }, + // compressed: 0x9375530f0d7b71214c061e130b694e919fe02a75ae87b61b6e3c429ba7f30bc2 + { + { 0x0000031594dfd29b, 0x0000030d0f537593, 0x0000000000000001, 0x000002651c5b2b47, 0x000007838422a808, 0x000003d73a95704f, 0x0000000000000000, 0x00000658de189ad8, }, + { 0x000007e98d52fea2, 0x000003c0c9842e2f, 0x0000000000000000, 0x0000036370102717, 0x0000052d322eba13, 0x00000423c6e1bb68, 0x0000000000000000, 0x000000cf1e07bff0, }, + { 0x00000185566174c4, 0x0000064539a42c4c, 0x0000000000000000, 0x00000219c6dbb0c4, 0x000000ced64c1171, 0x0000008417e74f36, 0x0000000000000000, 0x000000e8ba5ff538, }, + }, + // compressed: 0x6a4ed32157df3660d0b37b992788dbb1fa6a75c8c309c2d339c81d4ce55be186 + { + { 0x0000021e2bc9c8bd, 0x0000075721d34e6a, 0x0000000000000001, 0x000005871932994a, 0x000003876f80aaed, 0x000004e1e43ab57d, 0x0000000000000000, 0x000002a4ed5be502, }, + { 0x000000f3b037ea4b, 0x000007767a0c06db, 0x0000000000000000, 0x0000063b560b6e4b, 0x000000cf5d0d511c, 0x000001dc839d3c20, 0x0000000000000000, 0x000000ec1f77dc41, }, + { 0x000007a96c982099, 0x000002c76e209e65, 0x0000000000000000, 0x000004c8d472d73a, 0x00000035c479d72c, 0x0000000dc2b7ca98, 0x0000000000000000, 0x000000b1bdb0c24f, }, + }, + // compressed: 0xa8c9c2b6a85bfb2d8c592cf58eefee4873152df107918033d85b1d536b69ba08 + { + { 0x00000793f266c55c, 0x000003a8b6c2c9a8, 0x0000000000000001, 0x000006eec3efc57a, 0x0000017c5e1361d4, 0x00000083f8968ab9, 0x0000000000000000, 0x0000051ff8d338e5, }, + { 0x000000a9c93b02e6, 0x0000058b3185bf6b, 0x0000000000000000, 0x000007e9022efda7, 0x0000005f6f95ce38, 0x000001d5bd833809, 0x0000000000000000, 0x000007cfe54ea3d7, }, + { 0x0000032325db1731, 0x00000523bbbe3bd4, 0x0000000000000000, 0x0000041381545f53, 0x0000005fe73bd0a9, 0x0000001174d2d6a6, 0x0000000000000000, 0x000000240c676928, }, + }, + // compressed: 0x0a1012494731bd8206be6f7e6d7b23dec679ea1119761ee1de3b39cbe33b4307 + { + { 0x0000007891610042, 0x000001474912100a, 0x0000000000000001, 0x000004c05ce997f4, 0x000001caca785260, 0x0000030c88f53ce3, 0x0000000000000000, 0x000000fead3b423e, }, + { 0x0000057f5d017293, 0x000005f7c0d057a6, 0x0000000000000000, 0x0000038a347fef28, 0x0000055918570be7, 0x00000393bdee11e7, 0x0000000000000000, 0x0000076da9f58338, }, + { 0x0000013b9ec4f3b3, 0x000003788dedb5f9, 0x0000000000000000, 0x0000015d74f792c1, 0x0000006ba6153369, 0x0000000e8677c796, 0x0000000000000000, 0x0000005b0e7dbcf5, }, + }, + // compressed: 0x81f95d4ee10262aaf5e1155017590da26c1de2bad375a218530260018a614385 + { + { 0x0000016443373409, 0x000002e14e5df981, 0x0000000000000001, 0x000005f4974c23c1, 0x000007737ad32403, 0x000002e9dd710eb6, 0x0000000000000000, 0x0000065c514d5d16, }, + { 0x000005503b22af46, 0x000002bc3eb54c40, 0x0000000000000000, 0x000001c8d261bd57, 0x000007fa7b6b093f, 0x0000060025318a27, 0x0000000000000000, 0x0000007960d04202, }, + { 0x000003eae2dfbbd2, 0x0000028835645d40, 0x0000000000000000, 0x000002a9bc289677, 0x0000005cee6ca8e0, 0x0000000a86c31402, 0x0000000000000000, 0x0000009628866c5a, }, + }, + }, + { // 9 + // compressed: 0xcb9c521ce9547c96fb35c6649226f63065191278f4af47275c6ff6ea18840317 + { + { 0x000007c7b66e1f7a, 0x000004e91c529ccb, 0x0000000000000001, 0x000003d320324ce4, 0x000006fe389f578e, 0x000007fa3c090cb2, 0x0000000000000000, 0x000000c5a72d09b2, }, + { 0x00000185efd99896, 0x000000c6bf72cf8a, 0x0000000000000000, 0x000001117898c62f, 0x000005a63f73ef06, 0x00000766f5c2747a, 0x0000000000000000, 0x00000228dc9b21ef, }, + { 0x0000011055f897d4, 0x000004c3d89a4993, 0x0000000000000000, 0x000002a0410ba291, 0x000000b05e88cea5, 0x0000002e070831d5, 0x0000000000000000, 0x000000185438979b, }, + }, + // compressed: 0x4569bd694881c4ed228d1cbe7d906d0dabc55cd512d23bc683dc14a3309b6ada + { + { 0x000007d06f1f0447, 0x0000014869bd6945, 0x0000000000000001, 0x00000524d396463d, 0x000001397dd96947, 0x000001096aae62d5, 0x0000000000000000, 0x0000053c8e5e2fd2, }, + { 0x000000f80b3a49b8, 0x00000391a45db890, 0x0000000000000000, 0x000003449e1a1d82, 0x00000764877d15b0, 0x0000014dc83c63bd, 0x0000000000000000, 0x000007bafc3a50c3, }, + { 0x000006c89a78fb6e, 0x00000435b641f6f8, 0x0000000000000000, 0x0000004aed8a2b0d, 0x000000f8ab17a38d, 0x000000b4d5366146, 0x0000000000000000, 0x00000008094b9415, }, + }, + // compressed: 0xd16f412a1b9ebc628b5950e328f7c6b567695d3dd83f340498eef8e716755239 + { + { 0x000000070aa743d6, 0x0000061b2a416fd1, 0x0000000000000001, 0x0000032d1a5d9a9c, 0x00000235b347e96f, 0x000007ec1eaeb4b3, 0x0000000000000000, 0x00000778aa6ab7f5, }, + { 0x000004cbdd1183e8, 0x0000020b316c5793, 0x0000000000000000, 0x0000000b85422ffb, 0x000005d9633574b0, 0x0000078ee9804343, 0x0000000000000000, 0x0000022d016efd4b, }, + { 0x00000332eb432d6c, 0x000006d71bdca38d, 0x0000000000000000, 0x00000271dd16f344, 0x0000008c72b7fb95, 0x00000072a4ea2dcf, 0x0000000000000000, 0x000000ecaf3453d0, }, + }, + // compressed: 0xf234b45213b53c33e180de93492832d8ce350d75872851b5c177272abb14c582 + { + { 0x0000067e49c02a17, 0x0000051352b434f2, 0x0000000000000001, 0x000005da8bf1b645, 0x00000788f611260d, 0x00000443ba869ae7, 0x0000000000000000, 0x0000036bd4d86929, }, + { 0x000005346fe8b6d1, 0x000003d01c266796, 0x0000000000000000, 0x000006a96a6d097a, 0x0000005bdb13ed65, 0x000002777c1b5512, 0x0000000000000000, 0x0000054805931391, }, + { 0x0000048f35468af2, 0x00000360c8a1264f, 0x0000000000000000, 0x000007ee2f4dfbda, 0x000000874709b93c, 0x000000058a297654, 0x0000000000000000, 0x00000022c12412c2, }, + }, + // compressed: 0xcd4d9b361656387a63355c65a72cc0752180f1d4f91bc27d42e0e691747d632f + { + { 0x0000066929dacfaa, 0x00000616369b4dcd, 0x0000000000000001, 0x000003461af67bbe, 0x000001e5229eaaac, 0x000005fcea78c010, 0x0000000000000000, 0x000000cffcd34cfd, }, + { 0x0000026b31f689a2, 0x00000386ac6f470a, 0x0000000000000000, 0x000005712c3a9693, 0x00000698e0be9ef6, 0x0000066e0427dc21, 0x0000000000000000, 0x000004e2a9a71dee, }, + { 0x000007694a7d3210, 0x000005d700b29d95, 0x0000000000000000, 0x000007580c0deb22, 0x0000006a3c24b78a, 0x0000005ec6fae923, 0x0000000000000000, 0x000000fe305a0dcf, }, + }, + // compressed: 0x2275218e724b4509d8b884d4f4e858aa3c90467f4d2558d317521c2443c0ac44 + { + { 0x00000664ab0168ec, 0x000003728e217522, 0x0000000000000001, 0x000003bb4f7a5777, 0x000004e9a3e6876d, 0x000002a6bfa3481e, 0x0000000000000000, 0x000000e364b5a342, }, + { 0x000005b8a86f4f91, 0x000000971b0128a9, 0x0000000000000000, 0x000000627c238fad, 0x000003e93b009551, 0x000001c5217d3582, 0x0000000000000000, 0x000002d71bd4adca, }, + { 0x0000032d69295457, 0x000002a963a3d352, 0x0000000000000000, 0x0000022cd7fb5246, 0x000000cfa9591868, 0x0000008959808648, 0x0000000000000000, 0x000000aada390625, }, + }, + // compressed: 0x21e81bb15667f081ddf3a31023f8af0f5d46996a55d0b2f8057f8ccc38be7a09 + { + { 0x000000e30c8d3982, 0x00000756b11be821, 0x0000000000000001, 0x000001877ea52da4, 0x000001e583b9b237, 0x0000002ab54ca32e, 0x0000000000000000, 0x00000404fbe675e9, }, + { 0x0000047f4682fde8, 0x0000047e7bb03e0c, 0x0000000000000000, 0x00000383a8618939, 0x00000024eff4f21f, 0x000000c7f05f8b2d, 0x0000000000000000, 0x000006e84bd022c3, }, + { 0x000000c7dc1cf856, 0x0000043ebfe08c42, 0x0000000000000000, 0x000001310da5566f, 0x000000e8d8d8da3b, 0x00000012f57c7199, 0x0000000000000000, 0x000000aefc294697, }, + }, + // compressed: 0x2bd74dbdbecefe9411220f06da4f6af4ffd1c8c077594a12959200fbb8045370 + { + { 0x000000ac61a73b0a, 0x000006bebd4dd72b, 0x0000000000000001, 0x000005354d296ec6, 0x0000074135b68074, 0x000004bbe06468ff, 0x0000000000000000, 0x000002c65a5ea176, }, + { 0x00000234bebe1c4d, 0x000001e442329fd9, 0x0000000000000000, 0x000005a63b16c7a3, 0x00000578f42c1e13, 0x00000009295124a5, 0x0000000000000000, 0x000006353fd670b9, }, + { 0x000007cbebe840de, 0x000007d1a93f6818, 0x0000000000000000, 0x000003cf0c14f97e, 0x000000c1f4fdd2df, 0x000000e0a60971f6, 0x0000000000000000, 0x00000042731c1942, }, + }, + }, + { // 10 + // compressed: 0x0156b7b4f9aa982772ad8d5c1372ac5e23a0b76161aaced24e7d8fe984b2bf9b + { + { 0x0000058a382b33f3, 0x000002f9b4b75601, 0x0000000000000001, 0x000007e9c7d96561, 0x00000281d29ed9b7, 0x00000530b0dbd011, 0x0000000000000000, 0x0000014ceca83777, }, + { 0x0000011816913ea0, 0x000001b5ae44f315, 0x0000000000000000, 0x000000f006ccacee, 0x000002232e68f93b, 0x000000f7d4ed2cea, 0x0000000000000000, 0x000000957cc65053, }, + { 0x0000016b8ae82eb5, 0x0000057ab1c84d72, 0x0000000000000000, 0x0000032cac4951cb, 0x000000b547db3b2b, 0x000000377f6509d3, 0x0000000000000000, 0x000000940fc29cbd, }, + }, + // compressed: 0x9ba477c4cd580b2417f04764deda38fdad6ac8a7328d921981a0af84ed7aafd0 + { + { 0x000002cb980df999, 0x000000cdc477a49b, 0x0000000000000001, 0x0000060115f65be5, 0x000006ef492e3bfe, 0x0000069953e43556, 0x0000000000000000, 0x000002c085d6eb6c, }, + { 0x000005d8ee29dc82, 0x000000fe02e4816b, 0x0000000000000000, 0x00000421364dc9fb, 0x00000313402bba5e, 0x000002fa08119928, 0x0000000000000000, 0x000006bd00678020, }, + { 0x0000068c575dbcf1, 0x000007f4e36b7991, 0x0000000000000000, 0x000004a660988485, 0x0000007e1758723a, 0x000000a15ef5db09, 0x0000000000000000, 0x0000003243462d75, }, + }, + // compressed: 0x8bc1f3d99aad5ad79cc1b160ef0e6a56d90e5c25ac0b9a3ef5c762a0ec9d047b + { + { 0x0000077edfb870fc, 0x0000059ad9f3c18b, 0x0000000000000001, 0x0000037a35444483, 0x000000ea1b6126fb, 0x000005d612ae076c, 0x0000000000000000, 0x000002618962eec3, }, + { 0x000006d677b12845, 0x00000638339aeb55, 0x0000000000000000, 0x000005b7d27b997c, 0x0000073aeb00738f, 0x0000062c7f53e9a0, 0x0000000000000000, 0x00000150e6478600, }, + { 0x000004b0a5afad3d, 0x00000559a83bbd82, 0x0000000000000000, 0x000005d621e4cc3f, 0x000000c8b1be83c4, 0x000000f6093bd940, 0x0000000000000000, 0x000000c127b99785, }, + }, + // compressed: 0x4b038460beeede6b54b80f78b6c2993195062db6ab763397907d648bc98031ee + { + { 0x0000028585e0706d, 0x000006be6084034b, 0x0000000000000001, 0x000006e7a128b071, 0x00000170b8c7a29d, 0x00000355db16834a, 0x0000000000000000, 0x000007415910b098, }, + { 0x000004e72663fe73, 0x000001f70a8d7bdd, 0x0000000000000000, 0x00000511755dcf56, 0x0000027a97c43b9f, 0x00000647d9097337, 0x0000000000000000, 0x0000017bd18f7b4d, }, + { 0x000004db429762cf, 0x000004c6670ad9e0, 0x0000000000000000, 0x000002930565b64e, 0x000000afa3d41090, 0x000000dc63019316, 0x0000000000000000, 0x0000006c7d333bbb, }, + }, + // compressed: 0xc6ae4be2dc48182f60afbcba55729b7631e9ef3c6e3ccb9055b3f9c69b971f23 + { + { 0x000003c135ee1fc4, 0x000000dce24baec6, 0x0000000000000001, 0x0000064bcc2af3c6, 0x00000400dac66998, 0x000006371e77f498, 0x0000000000000000, 0x00000004e0a7da33, }, + { 0x0000049919f2d508, 0x00000795ec05e309, 0x0000000000000000, 0x00000411a3eb863b, 0x000003a052bb42f6, 0x0000079b35590cb3, 0x0000000000000000, 0x00000792413b78d7, }, + { 0x0000025dbacd5423, 0x000005da6dc956ea, 0x0000000000000000, 0x000002c12ec0c3f8, 0x00000091dd36f0d2, 0x000000463f2f378d, 0x0000000000000000, 0x0000000f37f53610, }, + }, + // compressed: 0x4542d5a280edc9f35239f677788ba00a755408d163ac6dd76b63709415fbf41e + { + { 0x00000251da300df4, 0x00000580a2d54245, 0x0000000000000001, 0x000006e65b167bec, 0x00000096859ab240, 0x00000631e8842a3a, 0x0000000000000000, 0x0000079a4c0810cc, }, + { 0x0000052b561c7207, 0x000006c72a5e793d, 0x0000000000000000, 0x00000219b850a9cb, 0x00000017194ed3cf, 0x0000070636bd76da, 0x0000000000000000, 0x000000bff5672b2d, }, + { 0x00000210e5908cf6, 0x0000042a822de1df, 0x0000000000000000, 0x0000056564290a5b, 0x0000000718efed09, 0x0000003de9f62b28, 0x0000000000000000, 0x000000aebdd25494, }, + }, + // compressed: 0x01d8a40a45bc465dd8b933a52712afc3c206892b263b9e381b582f387e1e0aa0 + { + { 0x000000908a182fcf, 0x000004450aa4d801, 0x0000000000000001, 0x00000167eaf93ac5, 0x000006aba97b99ef, 0x0000059315c48361, 0x0000000000000000, 0x000002ecab38cbfa, }, + { 0x00000113b7ba9810, 0x000006773b0ba8d7, 0x0000000000000000, 0x000004ca580a31b7, 0x0000053fd0005bab, 0x000002f581b389e3, 0x0000000000000000, 0x000001e4e38fe2b8, }, + { 0x000000c385c30a65, 0x0000030ebc489e94, 0x0000000000000000, 0x000005c6f2626c15, 0x00000087a9ce2259, 0x00000040143cfc70, 0x0000000000000000, 0x0000000a1d94a4ca, }, + }, + // compressed: 0xea68e6607639ac9797b43a15febb199b9fa7ec34b579b14c57ae31a19fc05161 + { + { 0x000002de453f0c9c, 0x0000017660e668ea, 0x0000000000000001, 0x0000040dfdf05d96, 0x00000564f6c23d9e, 0x000004da9a7653cf, 0x0000000000000000, 0x000005c3890b8b84, }, + { 0x0000060773786863, 0x0000075692f2f587, 0x0000000000000000, 0x0000069dcf475eab, 0x0000058f4c6fcd97, 0x0000031ae574cb17, 0x0000000000000000, 0x000000f030b11b2b, }, + { 0x000007a7d4117bfd, 0x0000066c66eff854, 0x0000000000000000, 0x0000077498bb80aa, 0x000000961dcd8438, 0x000000c2a3813f42, 0x0000000000000000, 0x0000003fde49f500, }, + }, + }, + { // 11 + // compressed: 0x866b9730f5afd2220446d2c206b8908de5bae54d6c89a1dc170c34c8e65f0028 + { + { 0x000003fb1aa73196, 0x000007f530976b86, 0x0000000000000001, 0x0000029f34528688, 0x00000584fd9d0bd9, 0x000004b626f2dd72, 0x0000000000000000, 0x000005e6b36ca59b, }, + { 0x000002ec8306faca, 0x00000248c0845a55, 0x0000000000000000, 0x0000020fb42d5df7, 0x0000048613ead200, 0x00000340c17dca18, 0x0000000000000000, 0x00000316dfaf75bb, }, + { 0x0000003e5254c0ff, 0x0000063642e01b0b, 0x0000000000000000, 0x000001706ffe5094, 0x000000a89a92525f, 0x0000005000bfcd90, 0x0000000000000000, 0x000000e5c8e5261e, }, + }, + // compressed: 0x27762ad335f6f307f066655f864daa7a5044d02897e7853c3864e00f007fee9f + { + { 0x0000008c9781084f, 0x00000635d32a7627, 0x0000000000000001, 0x000005da03dbf7e5, 0x0000075301f7ef01, 0x000003cb94682228, 0x0000000000000000, 0x000002e6e9254476, }, + { 0x000000a1dc24d2a4, 0x000004acde00fe7e, 0x0000000000000000, 0x00000699b7aeca60, 0x0000033a34cfd9da, 0x000006064383c85e, 0x0000000000000000, 0x000000405437b4ad, }, + { 0x000002c540a82c8d, 0x000001eaa936197d, 0x0000000000000000, 0x000002936bc92450, 0x000000b53a5d184e, 0x0000003fdcfe001f, 0x0000000000000000, 0x00000001f280a3dc, }, + }, + // compressed: 0x5397af07bb93efd7a766b73dcfd03e58c51e0b6ebf9869ce5204d45dd2ffb747 + { + { 0x00000323c3d330b2, 0x000003bb07af9753, 0x0000000000000001, 0x0000039cbc08dd12, 0x000000b637215c1e, 0x0000045fb7058f62, 0x0000000000000000, 0x00000215ed8fe0df, }, + { 0x000000e360d1a6ad, 0x000006ecd4fafdf2, 0x0000000000000000, 0x000005d85370ff7f, 0x000006ab10db36c3, 0x00000540452ce699, 0x0000000000000000, 0x00000264bb60d572, }, + { 0x000003c8722e6ec1, 0x00000560fb433cf6, 0x0000000000000000, 0x0000062819aceb87, 0x0000000faf38fd17, 0x0000008f6fffa4bb, 0x0000000000000000, 0x000000386a4146bd, }, + }, + // compressed: 0x59c06b21406fa8cd7ed8bc121d23bb1f9009c7179e6a95b4552ed1663b0c7538 + { + { 0x000003a6bccba34a, 0x00000740216bc059, 0x0000000000000001, 0x000001409422e51a, 0x00000300cc4171cb, 0x0000054f0be384c8, 0x0000000000000000, 0x000007f3ba267014, }, + { 0x0000070433701a4a, 0x0000079b0fd9b50d, 0x0000000000000000, 0x000003bece2d25de, 0x000000ee66f90c3b, 0x00000512e55b4956, 0x0000000000000000, 0x0000030487c21014, }, + { 0x000000f9870e84e0, 0x0000007eec8c744a, 0x0000000000000000, 0x0000072f031cf0ad, 0x000000387a0aeeba, 0x00000070ea1876cd, 0x0000000000000000, 0x0000000c43c58fa6, }, + }, + // compressed: 0xf3f0dbb09617aeb796e17ce1b9afdf54b4a3aae9713092259d2e00a19c588edd + { + { 0x000000cc8259838d, 0x00000796b0dbf0f3, 0x0000000000000001, 0x000005950842a94b, 0x0000041bb2ac0f18, 0x00000038f4d551da, 0x0000000000000000, 0x0000021c5da8f177, }, + { 0x000003f35b95f30c, 0x0000079c32d6f5c2, 0x0000000000000000, 0x000001e5c7d817e3, 0x0000053a5bc65264, 0x00000002e9d25923, 0x0000000000000000, 0x000001cbf860a961, }, + { 0x00000243a923071a, 0x000001537ebee785, 0x0000000000000000, 0x000006cb4f0d8d62, 0x000000000fac12f7, 0x000000bb1cb13942, 0x0000000000000000, 0x0000002b07aef078, }, + }, + // compressed: 0xc7289dcc044703908fc52cf79e671b1d26875bbe5f2be1160a58c5834e0658c9 + { + { 0x000002ef5da27ae1, 0x00000704cc9d28c7, 0x0000000000000001, 0x000004265066e80d, 0x0000050933048b3d, 0x000005afdf2dc393, 0x0000000000000000, 0x0000053c0608897e, }, + { 0x000004e02e9d9dd4, 0x00000598b1f20068, 0x0000000000000000, 0x000007918d61a512, 0x000006d8f70c9a62, 0x0000045580a16e12, 0x0000000000000000, 0x0000043b3881b53d, }, + { 0x00000165f0e85155, 0x000000746d9e7bdc, 0x0000000000000000, 0x000007f30fde14c1, 0x0000004a54be5d03, 0x00000092b00c9d07, 0x0000000000000000, 0x0000000f382e17b0, }, + }, + // compressed: 0x56d0d5c050cdd6cd3b5703bb6d68f79a48efc3f33f72a63ccc8a7b31d7c068e7 + { + { 0x000004e464fa6fff, 0x00000550c0d5d056, 0x0000000000000001, 0x000005e5f155c1b3, 0x0000011228dc7521, 0x0000011ff9e1f7a4, 0x0000000000000000, 0x000006ee36b59300, }, + { 0x000000bca460a0dd, 0x0000006ae779bad9, 0x0000000000000000, 0x0000076f723296c4, 0x0000049fb0035794, 0x000007b8acc3ca67, 0x0000000000000000, 0x000004d52f4c22cb, }, + { 0x000002fb8d0c7988, 0x0000026bdda1b6ec, 0x0000000000000000, 0x00000105efce9e65, 0x000000dbd80bc695, 0x000000ced181ae62, 0x0000000000000000, 0x000000a288bc29bb, }, + }, + // compressed: 0x55a4be2bab473189299107924fa2538ca7f730be48f9494b3dd44f6e0890e992 + { + { 0x0000034b3b144951, 0x000007ab2bbea455, 0x0000000000000001, 0x000006b37fdfbb2e, 0x000004938b31c2ed, 0x000004a45f187bd3, 0x0000000000000000, 0x000003621d2dcc1f, }, + { 0x00000177966aea05, 0x000000f225312628, 0x0000000000000000, 0x0000039d5f3e2192, 0x000001295c8b8bd6, 0x000004fd43d4b49f, 0x0000000000000000, 0x000003e99afdf113, }, + { 0x000006399ffdad11, 0x000006314e893e48, 0x0000000000000000, 0x0000067e6a4d7848, 0x0000002630de63c7, 0x00000025d32010dc, 0x0000000000000000, 0x000000ef65c7e0ba, }, + }, + }, + { // 12 + // compressed: 0xa4b0dd129c6398d56b8624c0309fd1a560e4fc58032f7cd18a5e092e1595a107 + { + { 0x000001c59c2ec4de, 0x0000039c12ddb0a4, 0x0000000000000001, 0x00000702389e5fc8, 0x0000036c8bd47c84, 0x00000781ac7e7230, 0x0000000000000000, 0x000006aee2a09321, }, + { 0x0000009e79652df5, 0x00000490cd7ab30c, 0x0000000000000000, 0x000001bc877506d1, 0x0000053255d1c770, 0x00000095e8ad17c2, 0x0000000000000000, 0x000002f0137afa1f, }, + { 0x000002f22d86fd3e, 0x00000297467cc300, 0x0000000000000000, 0x000006410cec0b3e, 0x000000c76f2bf8f5, 0x0000000f432a2a5c, 0x0000000000000000, 0x0000007d1fd07a06, }, + }, + // compressed: 0x3cd1efe88d4c70083137e0338e1ac5dfe3cd6012a55d9da5868c25a69908d622 + { + { 0x000005b90570a294, 0x0000048de8efd13c, 0x0000000000000001, 0x000003c070cdd196, 0x00000570b0ddfec2, 0x000006d2893066f1, 0x0000000000000000, 0x000003de75a00930, }, + { 0x00000108a925f162, 0x00000406e6210e09, 0x0000000000000000, 0x000007b1534c473b, 0x000002c4007de1c5, 0x00000258c86a59d5, 0x0000000000000000, 0x00000779e5eb3884, }, + { 0x00000253c909c19c, 0x0000077f146a38cf, 0x0000000000000000, 0x00000183fa2a2db1, 0x000000eb7476f2ff, 0x00000045ac11334c, 0x0000000000000000, 0x0000001209a0f70e, }, + }, + // compressed: 0xb940f948662d32f4390c2dbd0c2f950631f981a0ad9776166c2af7baceaa4062 + { + { 0x000007d4ddba919c, 0x0000056648f940b9, 0x0000000000000001, 0x0000049c5ba295a0, 0x00000631d6c36628, 0x000003d6d040fc98, 0x0000000000000000, 0x000005d3f3e498b5, }, + { 0x00000191b55699c3, 0x000005a1873e8645, 0x0000000000000000, 0x000006fa4b5f068e, 0x000001dde072c63c, 0x00000772a6c16769, 0x0000000000000000, 0x00000340cac66f13, }, + { 0x0000073cc76cfb1d, 0x0000041a54bc32f4, 0x0000000000000000, 0x0000035a51f16f28, 0x00000087c4287f78, 0x000000c481559d75, 0x0000000000000000, 0x000000ad7b5e471b, }, + }, + // compressed: 0xb23b9dc16cd31013b9862362b76b2a065c4fa1d791859b7c54571e7e5031aa83 + { + { 0x000001e3f53533eb, 0x0000036cc19d3bb2, 0x0000000000000001, 0x00000648ffd4ce1f, 0x000002290ead2ab9, 0x000002c8ebd0a7ae, 0x0000000000000000, 0x000002c10e849abe, }, + { 0x00000727a806c557, 0x00000470d722621a, 0x0000000000000000, 0x00000591839e9d8e, 0x000007413189e0e1, 0x000001e57547c9b8, 0x0000000000000000, 0x000006b485988d22, }, + { 0x000000ce15a355ba, 0x00000018a9aedd88, 0x0000000000000000, 0x0000038117abc152, 0x0000003a4950db06, 0x000000075462a0fc, 0x0000000000000000, 0x0000008764c3b935, }, + }, + // compressed: 0x6413956c8b3d51197bf40b002671fe9467954fd5dd108d0264099442e2d5b482 + { + { 0x0000061988bb79bb, 0x0000058b6c951364, 0x0000000000000001, 0x000005cb28d18df2, 0x00000771301ef519, 0x0000006eeaa7cab3, 0x0000000000000000, 0x00000249b64121c4, }, + { 0x00000746b3bcab63, 0x0000017e8f632a27, 0x0000000000000000, 0x0000059ca116942a, 0x00000276bc2b02c2, 0x00000140964028d1, 0x0000000000000000, 0x000005d3410c49cf, }, + { 0x000006827b41f705, 0x00000653f9c49800, 0x0000000000000000, 0x000007ab31191861, 0x00000064c0ab9eb6, 0x0000000569abc485, 0x0000000000000000, 0x0000004f4d90135c, }, + }, + // compressed: 0x54693dc40a272ccdb2ca666a573e4add6c03d7692459fa7999258c3d60031522 + { + { 0x000003cd1f0db188, 0x0000070ac43d6954, 0x0000000000000001, 0x000005f9390be1d0, 0x000007d18afaac2d, 0x0000049234eb81b6, 0x0000000000000000, 0x000006333d4a787a, }, + { 0x0000034b7d1174dd, 0x000004d95659a584, 0x0000000000000000, 0x0000019c7e2b3dd9, 0x0000060a17ef22ed, 0x000000c259979fa5, 0x0000000000000000, 0x0000010f43682891, }, + { 0x000000df4f5ce99d, 0x0000037528f95da9, 0x0000000000000000, 0x000002a5088111ca, 0x000000596ce2e9fe, 0x000000442a06c07b, 0x0000000000000000, 0x000000f63be96e71, }, + }, + // compressed: 0x8cf5f80718222e5fd40994d49f5c55e330a6b61f8da8aab23de052d345826968 + { + { 0x000002e0b3b2a224, 0x0000021807f8f58c, 0x0000000000000001, 0x000005852a18187a, 0x000007f106bfbd87, 0x000004468fdb5318, 0x0000000000000000, 0x0000014087fb6241, }, + { 0x000002a22c1c925e, 0x000002813a8be5c4, 0x0000000000000000, 0x000003b59afb762b, 0x000007c599215eb8, 0x0000052e03db2aaa, 0x0000000000000000, 0x000002f01cf44bae, }, + { 0x000001f1b27818ad, 0x0000038d55727f52, 0x0000000000000000, 0x000003cf92ab4e1b, 0x000000c3f9de4cb1, 0x000000d0d3048ba6, 0x0000000000000000, 0x0000008d9e988e7b, }, + }, + // compressed: 0x408149f1a76e3c2154482b39f87e1e7cbace29568cc38824bbc58c0de5aa6590 + { + { 0x000005ed9ec4e5f9, 0x000006a7f1498140, 0x0000000000000001, 0x00000525df200d57, 0x000003f965f2e56e, 0x000001c62b14e75d, 0x0000000000000000, 0x000003d8f0c1a018, }, + { 0x0000020660684ca4, 0x000005690a84278d, 0x0000000000000000, 0x0000014ce9438588, 0x000006b5f4072b1a, 0x000000cc5bb2488c, 0x0000000000000000, 0x000001ce7160a07e, }, + { 0x000000397b68045a, 0x000001f079fbe0e4, 0x0000000000000000, 0x00000170ecb75aff, 0x0000005270f79a29, 0x00000020cb55ca1b, 0x0000000000000000, 0x000000d34331cc9e, }, + }, + }, + { // 13 + // compressed: 0xedcac5dc344401e133fb843c965ded47e7a086ed76950170e4f967d27b69b225 + { + { 0x000002e0d91a78bc, 0x00000434dcc5caed, 0x0000000000000001, 0x000007fb13986864, 0x000005332028385c, 0x000002bb76c35073, 0x0000000000000000, 0x0000061def939daf, }, + { 0x00000212ccf20c56, 0x0000009f667c2028, 0x0000000000000000, 0x000003b8f713ace7, 0x0000013a1bf9df54, 0x0000067f9e470019, 0x0000000000000000, 0x000004e4cd2e04ec, }, + { 0x0000011f26227321, 0x0000051fb57658f2, 0x0000000000000000, 0x000000f297ef6505, 0x000000e6d3cd5249, 0x0000004b64d2f7a4, 0x0000000000000000, 0x0000002840d07b6a, }, + }, + // compressed: 0xd05accc16fbbee348bac4696e90c1b6a53de6ba649dab0d3c181d061413be8b1 + { + { 0x0000051e249dd197, 0x0000036fc1cc5ad0, 0x0000000000000001, 0x000007129e062b4f, 0x00000197e65d562e, 0x00000524d335ef29, 0x0000000000000000, 0x000000a5b78c341f, }, + { 0x0000031820568f17, 0x000000d591669dd7, 0x0000000000000000, 0x000006415b12fd18, 0x0000008a72dfb02d, 0x000005081c1d3b0d, 0x0000000000000000, 0x000005503175bece, }, + { 0x0000018830d40179, 0x000005a86c33a659, 0x0000000000000000, 0x00000527923d3ca4, 0x000000c16c77d7ea, 0x00000063d07682c3, 0x0000000000000000, 0x000000ab9e3d6c5a, }, + }, + // compressed: 0x528cf57de3b5763036cc99e7ddb93ad720ee1349e31c83bd3301ba62aafb561a + { + { 0x0000001065c23d58, 0x000005e37df58c52, 0x0000000000000001, 0x000003505c9dc9ec, 0x000007d48962afd3, 0x00000671a489f710, 0x0000000000000000, 0x0000072b209a3b28, }, + { 0x00000290338b0f22, 0x0000033986c60ed6, 0x0000000000000000, 0x00000786e35287cd, 0x000000891d4e2402, 0x000003a0133bd831, 0x0000000000000000, 0x00000458a5c9873a, }, + { 0x0000062e7421b542, 0x0000035ceae7779e, 0x0000000000000000, 0x000004c0955eee9d, 0x000000cd34cac8ae, 0x00000034adf754c5, 0x0000000000000000, 0x000000278906cf33, }, + }, + // compressed: 0x80d08b5d6afbdcc442481a57ecc4ebde6553e5b883e8b2d427b8e5c87dc8bdd0 + { + { 0x000005465ab3e1b9, 0x0000036a5d8bd080, 0x0000000000000001, 0x000007836edfe111, 0x00000332765adcdb, 0x00000441dc72a9b2, 0x0000000000000000, 0x0000056192db9dcb, }, + { 0x00000627ec28474b, 0x0000034908589b9f, 0x0000000000000000, 0x000002357b2c0da6, 0x0000037b60719f83, 0x0000065b827d4b2e, 0x0000000000000000, 0x000005fd5ae64b03, }, + { 0x000003f04f061f1f, 0x0000077baf13b15c, 0x0000000000000000, 0x000000c8d4f857c0, 0x000000cdf019274c, 0x000000a17b90fb91, 0x0000000000000000, 0x0000003baac888e4, }, + }, + // compressed: 0x9ac8ba0800e697c2e0c3e1ea11ea4c7d7c97e79fe18be3f3cd05a3630f453aba + { + { 0x000007f83362127d, 0x0000060008bac89a, 0x0000000000000001, 0x00000731d8394627, 0x000002a1a4910645, 0x000005f0cff3cbbe, 0x0000000000000000, 0x000006368bccb7c0, }, + { 0x000001af82b1f48f, 0x000004387c1852fc, 0x0000000000000000, 0x00000294a200f1e5, 0x000001f732e6e714, 0x000002305cdf3e38, 0x0000000000000000, 0x0000029a87bd1e36, }, + { 0x000006f27dab11c7, 0x000001f533a847ab, 0x0000000000000000, 0x000000e274c60f7a, 0x0000001cc8b22443, 0x00000074748a1ec7, 0x0000000000000000, 0x00000063191b2727, }, + }, + // compressed: 0x98d31dab299e665d3b9e2d34581692fccd7359f3fd1d8555f60a9525c3419ad0 + { + { 0x000005032afffe19, 0x00000629ab1dd398, 0x0000000000000001, 0x000006dca6f925e9, 0x000001f1dd42cc77, 0x000006fef9acb9e6, 0x0000000000000000, 0x000001404ec19f44, }, + { 0x0000049b6cde4e8b, 0x000005b3c76bacd3, 0x0000000000000000, 0x00000363e677b80d, 0x000001d5314bc98d, 0x00000150af655851, 0x0000000000000000, 0x0000021138982ec1, }, + { 0x000004327cf125fc, 0x000007f2485960d0, 0x0000000000000000, 0x000005e4fbcfd190, 0x0000004498f8cf34, 0x000000a13483864b, 0x0000000000000000, 0x0000000b7fe04651, }, + }, + // compressed: 0xe412c50ddda08168fefaa544c80de74f40524a8f6b8e741feaa301eecd7762d7 + { + { 0x0000037023cae00b, 0x000000dd0dc512e4, 0x0000000000000001, 0x000002bc234f305f, 0x00000024e90d0e44, 0x00000735c7a52920, 0x0000000000000000, 0x0000028a1a731506, }, + { 0x00000599eb26c642, 0x000004bf5fcd1034, 0x0000000000000000, 0x000000bbc103de71, 0x000002a44a796741, 0x0000001a3ea1f748, 0x0000000000000000, 0x0000071b7a15e82a, }, + { 0x000001512b3c2b46, 0x0000013f9c372112, 0x0000000000000000, 0x000006695dfef450, 0x000000f0171987f4, 0x000000aec4ef9bdc, 0x0000000000000000, 0x000000bfe830e4c4, }, + }, + // compressed: 0x4095b613e847dbe5e11026433b2a5df376127838e9261fac69cba0a08cdbd4a9 + { + { 0x0000000c1789db9d, 0x000007e813b69540, 0x0000000000000001, 0x000002af333353d0, 0x000004a6035e81ae, 0x000003749c3c093b, 0x0000000000000000, 0x000002c564447bf8, }, + { 0x000004ef1ea731c1, 0x000004c21c3cbb68, 0x0000000000000000, 0x000002613cbb35a1, 0x000002966befa988, 0x0000020cb69ac1f2, 0x0000000000000000, 0x000002cbefa3c576, }, + { 0x0000069d808097cf, 0x000003cd74a8ed0c, 0x0000000000000000, 0x000000e19a7696b3, 0x00000020d407b84b, 0x00000053a9b71941, 0x0000000000000000, 0x000000956714a20a, }, + }, + }, + { // 14 + // compressed: 0x9cc0dd5fefd1cfd6ce5d57f7fd3e2be8c23416205d6bd5259b2bed04bbc641b0 + { + { 0x000003256768d593, 0x000001ef5fddc09c, 0x0000000000000001, 0x000002f9d956e148, 0x000005eae505670e, 0x000005ae900b1a61, 0x0000000000000000, 0x0000045dafb6012e, }, + { 0x00000459427b4f85, 0x000002ebb9dad9fa, 0x0000000000000000, 0x000006ad65c1fe5e, 0x0000008a690f1a80, 0x000006d2b9b25d56, 0x0000000000000000, 0x00000049a7b1a469, }, + { 0x0000066307015d10, 0x000003a0acfbf7dd, 0x0000000000000000, 0x000002b79e5dd67c, 0x000000539ba35b81, 0x00000060838d7609, 0x0000000000000000, 0x00000020977ad028, }, + }, + // compressed: 0x63f17fd65f9a5da98156c74c9de62be957f220de4c02f8b7f52d07fb202a4fa0 + { + { 0x0000053168f1ed67, 0x0000025fd67ff163, 0x0000000000000001, 0x0000033d30ebb079, 0x000006218269796f, 0x000001266f10792b, 0x0000000000000000, 0x00000618c7b6ae18, }, + { 0x000005e7784a3e1f, 0x000000ead0352bb3, 0x0000000000000000, 0x000004a5c6190287, 0x000002a714944dc5, 0x00000072df5b7f80, 0x0000000000000000, 0x0000079161f653c3, }, + { 0x000000b204773761, 0x000007a4af9a7533, 0x0000000000000000, 0x000005d624556af5, 0x000000b7d198ae12, 0x000000409e5441f6, 0x0000000000000000, 0x0000004ae1f62f84, }, + }, + // compressed: 0x5a24b80b55a92e19d150908fa8fbe6c835c9a4882dea8679688601de915f1ca4 + { + { 0x0000067f2cb61575, 0x000001550bb8245a, 0x0000000000000001, 0x0000072940de6caa, 0x0000021532da92b1, 0x00000516c452649a, 0x0000000000000000, 0x0000066e91ad80e8, }, + { 0x000002c04d87df46, 0x0000020a1a2325d5, 0x0000000000000000, 0x0000032e67451b02, 0x00000030acde8c71, 0x000000186687986e, 0x0000000000000000, 0x000004df0e516d7f, }, + { 0x000003d7e5bdd873, 0x000007239beea23e, 0x0000000000000000, 0x0000063efcb3c08b, 0x0000007b96cbd4a6, 0x0000004838bf23bc, 0x0000000000000000, 0x00000010841dbabf, }, + }, + // compressed: 0xce10f4044ec3580385066e275a5b13b62115b9ebc770965d9c88db21f354d604 + { + { 0x000000ab8362fa4a, 0x0000034e04f410ce, 0x0000000000000001, 0x00000116ddbdb5d5, 0x0000030bfe1cf315, 0x00000063f5dc8a90, 0x0000000000000000, 0x0000040b999a5149, }, + { 0x00000347cdd9bfe4, 0x000005c0d0a06b18, 0x0000000000000000, 0x000004bba5abcfb8, 0x000001769fde3179, 0x000005b889c5d967, 0x0000000000000000, 0x00000191ad71cb60, }, + { 0x0000055f84635388, 0x000006d84d6d689d, 0x0000000000000000, 0x000000a5537ada36, 0x0000001b34a7df78, 0x00000009aca9e643, 0x0000000000000000, 0x00000094f49e4c31, }, + }, + // compressed: 0x4b2a37af91b2c324f24781717082da93f29e8986648584dd33eee023423196ca + { + { 0x000000025fb15f95, 0x00000291af372a4b, 0x0000000000000001, 0x0000074408a4ffd6, 0x0000004280700889, 0x000002b24344cf79, 0x0000000000000000, 0x0000045b1e8159f9, }, + { 0x0000038371fe94e3, 0x00000028fe449876, 0x0000000000000000, 0x000002aedb34dd04, 0x00000531848cdfcf, 0x0000060ee33dd848, 0x0000000000000000, 0x000006bcc5177334, }, + { 0x000000f7d97cd1ad, 0x0000024f6a09c1c6, 0x0000000000000000, 0x000001ce385dfa70, 0x000000236a1899bb, 0x000000952c628447, 0x0000000000000000, 0x0000009e979c9b9c, }, + }, + // compressed: 0x6f0b9dc46e61e2301723ecca8f7156e4a64f6bf29b40eb48375f5961e5ce4230 + { + { 0x0000065ae2242584, 0x0000016ec49d0b6f, 0x0000000000000001, 0x00000079449bac41, 0x000004eb8e751e7a, 0x0000004df935a7d3, 0x0000000000000000, 0x00000310afc20d3e, }, + { 0x000006b153d4e3f9, 0x0000058462e61c4c, 0x0000000000000000, 0x0000044621484fce, 0x000001c01e6d21a0, 0x00000595f3748eb4, 0x0000000000000000, 0x000001ce1d64cae7, }, + { 0x0000009ba9c95a4b, 0x0000039159c63f2b, 0x0000000000000000, 0x000002156b8db6f3, 0x000000e7f9ba296e, 0x00000060859dcac2, 0x0000000000000000, 0x000000713ce81935, }, + }, + // compressed: 0x28ac0e57f678bdc9e19c9127320b5be5ed919ba1ab3efc65903626d6e525c425 + { + { 0x000003ae34dcb9ce, 0x000000f6570eac28, 0x0000000000000001, 0x000006a6f1d7de6e, 0x0000003eb1631c0d, 0x00000755d0cdc8f6, 0x0000000000000000, 0x000003132745363b, }, + { 0x0000011a15ac9f96, 0x000002339c3937af, 0x0000000000000000, 0x000000c46107e7c0, 0x000005a678845b3f, 0x0000026369065fc3, 0x0000000000000000, 0x000004847598c14f, }, + { 0x0000065d400c8f8d, 0x000007956c2cc89e, 0x0000000000000000, 0x000004fbe5d89e38, 0x000000c2a8a6f28c, 0x0000004b884bcbac, 0x0000000000000000, 0x000000ca7341122a, }, + }, + // compressed: 0x194abb14d4dbc4dd8e4f42983cbcb2196971ca36d79fa84890bd19f00e32658f + { + { 0x00000774c3d2f773, 0x000003d414bb4a19, 0x0000000000000001, 0x000001b1cafde0c6, 0x000006747cdccf19, 0x000007eb9b6538b4, 0x0000000000000000, 0x00000786fd7949cd, }, + { 0x0000008d08bd3a43, 0x00000049f1dbb89b, 0x0000000000000000, 0x0000076a303a90da, 0x000004d186c624e5, 0x0000019bd9048a89, 0x0000000000000000, 0x0000033072a59a8a, }, + { 0x0000070541510497, 0x00000466caf0f261, 0x0000000000000000, 0x0000013cff9b8c58, 0x000000238bc9558b, 0x0000001eca641de0, 0x0000000000000000, 0x00000099578f7bd8, }, + }, + }, + { // 15 + // compressed: 0x89d2783f8f788fc09f4d40a12ca730fe9dcc65cffc8b77f22120cb5a1698e47e + { + { 0x00000624089c0a2e, 0x0000008f3f78d289, 0x0000000000000001, 0x000000e39111a1c3, 0x000006953b27d095, 0x000005fe67b2e64e, 0x0000000000000000, 0x0000076157397e8c, }, + { 0x000007c8e70473d2, 0x00000009b3f811ef, 0x0000000000000000, 0x0000020e912f7aa1, 0x000001c858217dbe, 0x000004b2021f2778, 0x0000000000000000, 0x000003602a6e7d2a, }, + { 0x0000031d231300eb, 0x000007f8c29cb285, 0x0000000000000000, 0x000004acae435202, 0x000000c73727e064, 0x000000fdc9302cb5, 0x0000000000000000, 0x0000001dbe92790b, }, + }, + // compressed: 0x13417684d2c4676735f8f5f73f4090a0debee6cafacf8f1c69a3dfd1540cc004 + { + { 0x00000158599b5a68, 0x000004d284764113, 0x0000000000000001, 0x000007818b465cf8, 0x000006ba115b3f83, 0x000007fd65735f6f, 0x0000000000000000, 0x000007d68263eb2b, }, + { 0x000005bc41d5d990, 0x000006bf06acecf8, 0x0000000000000000, 0x0000001dff09b845, 0x000001d4fb44fe41, 0x000005fa3691c8fc, 0x0000000000000000, 0x000006176f4aee8b, }, + { 0x000007a95d3c3fae, 0x000002824100ffdf, 0x0000000000000000, 0x000005c683cd6852, 0x000000807725c603, 0x000000098018a9a3, 0x0000000000000000, 0x0000006ab7625564, }, + }, + // compressed: 0x18738c5ac7da01a311aaceb39d0390ed2d3fae3bbf7c076f8ead52e0f8ea1875 + { + { 0x000004cc7493bbf4, 0x000002c75a8c7318, 0x0000000000000001, 0x000001c41b7f6c32, 0x000002867d02f3c2, 0x0000065f9dd71f96, 0x0000000000000000, 0x00000494e4d8e8ec, }, + { 0x000004761874e3cc, 0x000001d54234603b, 0x0000000000000000, 0x000007065314910b, 0x000002ec3120a6bc, 0x0000052ad8e6f077, 0x0000000000000000, 0x000001755c41815a, }, + { 0x00000796f61367b2, 0x000007b6400e76cf, 0x0000000000000000, 0x0000043cb582f3d0, 0x0000001f37026430, 0x000000ea31d5f1c0, 0x0000000000000000, 0x0000008f870e3776, }, + }, + // compressed: 0xb06650c8505de6fbb099a2b3b0c4ec62e0e81a44ea5437e55f8dd4e82ca0fe08 + { + { 0x0000039771ec4f48, 0x00000550c85066b0, 0x0000000000000001, 0x0000057668deead0, 0x0000008d23e1e335, 0x00000275220d7470, 0x0000000000000000, 0x000007e6aec4eb32, }, + { 0x0000018badca288a, 0x00000453361f7ccb, 0x0000000000000000, 0x0000050ba47049bb, 0x000004699dcf762c, 0x00000548d5fe5375, 0x0000000000000000, 0x0000075d537b514c, }, + { 0x000007e016c5f726, 0x0000018bb312c2ce, 0x0000000000000000, 0x000007219114812d, 0x0000000171370aec, 0x00000011fd4059d1, 0x0000000000000000, 0x0000008e70534e9e, }, + }, + // compressed: 0xc90239ad3a53d9238f5803efceddc264b42fe1cf9073251590d3e4444d8b666c + { + { 0x000002754679c418, 0x0000033aad3902c9, 0x0000000000000001, 0x000007217a78820c, 0x000007925623f585, 0x000001c867f097da, 0x0000000000000000, 0x000002d3c64776bd, }, + { 0x00000431be105a5b, 0x0000006b11e47b2a, 0x0000000000000000, 0x000004e7d2e76919, 0x0000033c6b4355ee, 0x0000064d39015257, 0x0000000000000000, 0x000000a433fa96c6, }, + { 0x00000398ef5f62c9, 0x000001930b773bbc, 0x0000000000000000, 0x000007dda82aca04, 0x00000040f0d09890, 0x000000d8cd169a89, 0x0000000000000000, 0x000000e8234c0a9f, }, + }, + // compressed: 0xb475b1183de59a5702a192f359317168f535ef1ebaec55848f398c4572a8c99e + { + { 0x00000532b99dc86d, 0x0000053d18b175b4, 0x0000000000000001, 0x000004d400a2509b, 0x000000966e617244, 0x0000065d0f779afa, 0x0000000000000000, 0x0000064df8cabab0, }, + { 0x0000075e22a9acb3, 0x00000254204af35c, 0x0000000000000000, 0x0000011056971cd4, 0x000000134ffb34c7, 0x000000c398f8455e, 0x0000000000000000, 0x000004d646057e7c, }, + { 0x000000113371d580, 0x000005a1c4c567ce, 0x0000000000000000, 0x0000066e075c082f, 0x000000f826cae9f7, 0x0000003d9350e48b, 0x0000000000000000, 0x00000075bb114b8f, }, + }, + // compressed: 0x46303959d498c285ec59f65f98357e8f3a6ef6f22aa22c1d20a706a43111ba61 + { + { 0x00000770b635dcf2, 0x000000d459393046, 0x0000000000000001, 0x000000f116959029, 0x000001345f5b68c3, 0x00000115797b371d, 0x0000000000000000, 0x0000051f133c1983, }, + { 0x00000583f795712a, 0x000006cb3d90b853, 0x0000000000000000, 0x000007d7b1347a14, 0x00000079e7485530, 0x0000006a7201d2ca, 0x0000000000000000, 0x0000058ece77bf15, }, + { 0x0000040b7fbdb3d9, 0x0000023df8d6617f, 0x0000000000000000, 0x00000408edadb2e9, 0x000000493253f999, 0x000000c374226348, 0x0000000000000000, 0x000000ac40621977, }, + }, + // compressed: 0xd685e277f4b5466693618f6c67ffe840dd94b5ab1173eca64dec8c65f346c8fe + { + { 0x000003434934d643, 0x000005f477e285d6, 0x0000000000000001, 0x0000073f1da22ec7, 0x000003c7e1fa0e11, 0x00000188d5daca6e, 0x0000000000000000, 0x000007e7d14c4fdc, }, + { 0x000002445eaa5132, 0x000001ec326cc8d6, 0x0000000000000000, 0x00000039a2736bd1, 0x000001d97308f6d8, 0x000000cec4da6ec7, 0x0000000000000000, 0x000001b9dd5214c8, }, + { 0x000002e76fe01a94, 0x00000503a3fd9db2, 0x0000000000000000, 0x0000004c3c75ddb0, 0x0000006eced4549b, 0x000000fd908de6cb, 0x0000000000000000, 0x000000db55ee4673, }, + }, + }, + { // 16 + // compressed: 0xa28eadacbf043b5884e88b14e843b729dbc510083b581e2baabbb38ee54954ab + { + { 0x00000562eb3dbe47, 0x000004bfacad8ea2, 0x0000000000000001, 0x000004d26adc9cfe, 0x00000298a2ba394c, 0x0000041d840862ed, 0x0000000000000000, 0x000000fffcbce305, }, + { 0x000007b4170be74e, 0x0000017d108b0760, 0x0000000000000000, 0x0000011ba16f1302, 0x0000027d55100c3e, 0x0000033bbaa2b1e5, 0x0000000000000000, 0x000002dd693da0fe, }, + { 0x000007dfa8e1523a, 0x000004a6dd0fa052, 0x0000000000000000, 0x000000f06eacfe2d, 0x0000002609d3ce2c, 0x00000056a893cb1d, 0x0000000000000000, 0x00000088d1bc5af8, }, + }, + // compressed: 0xce0763f8c6d89a4b280c5d43313511212c777a65c566a8d4527324637e42a65d + { + { 0x0000055e9419469e, 0x000000c6f86307ce, 0x0000000000000001, 0x00000688deac22ca, 0x0000036b223fccb1, 0x00000362b2bd3b96, 0x0000000000000000, 0x0000061c46acac07, }, + { 0x000003b8ea8a3766, 0x000003a18509735b, 0x0000000000000000, 0x000005c3ff035298, 0x0000044bd6393a5b, 0x00000247352d4a86, 0x0000000000000000, 0x000001f2ca888ad8, }, + { 0x000000cf9b71308f, 0x0000008444d4c50d, 0x0000000000000000, 0x000006e419bbdeee, 0x000000d99cf8dff6, 0x000000bb4c84fcc6, 0x0000000000000000, 0x000000b1e5357fcf, }, + }, + // compressed: 0xf6cd0e71bf645a4b3c292c4638e54cb1b93a0bd556d0433670485b182437f96a + { + { 0x000007ab8de73e68, 0x000004bf710ecdf6, 0x0000000000000001, 0x0000024509c6a888, 0x00000585df00acc1, 0x0000002b6a859d5c, 0x0000000000000000, 0x000003119e19944f, }, + { 0x000007ced4bd21d9, 0x0000058527896b4c, 0x0000000000000000, 0x000002b12e664400, 0x00000741e36f0495, 0x000005b48703643d, 0x0000000000000000, 0x000002ec18f83e23, }, + { 0x000001500dbe7cdd, 0x000006c53394e118, 0x0000000000000000, 0x0000074b80d84d2d, 0x000000aeec53894f, 0x000000d5f26e4830, 0x0000000000000000, 0x000000e03e4b7619, }, + }, + // compressed: 0x13c1be7cd9f6189de4dbbf74e6064a84d6604eac22b5f520515e9550c05b0af2 + { + { 0x000000f8e4616ced, 0x000006d97cbec113, 0x0000000000000001, 0x000001439b805a35, 0x0000030ffa5e52ce, 0x000002915627306b, 0x0000000000000000, 0x000003f9ae1149a3, }, + { 0x000004b50fb87516, 0x000007fb7c93a31e, 0x0000000000000000, 0x000000557f8187e1, 0x00000440be961e30, 0x00000155e5120f5b, 0x0000000000000000, 0x000004ef0ec69141, }, + { 0x000003dc01983a78, 0x00000211281b99d2, 0x0000000000000000, 0x000003a13a2cdd89, 0x0000005c19257f7b, 0x000000e414b780a1, 0x0000000000000000, 0x0000001d37397628, }, + }, + // compressed: 0xeebeb15dd59bee8db93f720a37abc3c991d7681cbff1a844de3cfd1c19446db6 + { + { 0x0000048ffb5720ad, 0x000003d55db1beee, 0x0000000000000001, 0x00000743f2bc8c14, 0x000000a931aaa1df, 0x000000df8e346bc8, 0x0000000000000000, 0x000007873453fdcb, }, + { 0x00000721a1df775a, 0x00000647f731bdd3, 0x0000000000000000, 0x000000ad8773c782, 0x00000337bd8d4813, 0x000007d3cde44a8f, 0x0000000000000000, 0x00000593244ccb82, }, + { 0x000007ba0645af6f, 0x000007270eacdc29, 0x0000000000000000, 0x000004bb689bf2d6, 0x000000442209d67e, 0x0000006cda883239, 0x0000000000000000, 0x00000082cf49cd78, }, + }, + // compressed: 0xee8fcef86526bec22cd680e814ff67e9ee4e362f7e6e2ef1f6d27ecb7033b334 + { + { 0x0000052876f62700, 0x00000665f8ce8fee, 0x0000000000000001, 0x000001ee8681d6cc, 0x0000018190fe0342, 0x0000073f179b2777, 0x0000000000000000, 0x000002e0ac404441, }, + { 0x000006cd1d6c8773, 0x0000001ac59857c4, 0x0000000000000000, 0x000000b4ea79b8b2, 0x0000055246a1b4b4, 0x000007ed2f6f12e6, 0x0000000000000000, 0x000007e65e4ed748, }, + { 0x0000017476750039, 0x000003a59ffc53a2, 0x0000000000000000, 0x00000738084273b6, 0x000000f27176fc44, 0x000000696666e196, 0x0000000000000000, 0x00000022edf8dc5b, }, + }, + // compressed: 0xb80e774989e290dba340f4ac2accfb989b87d7defe4f3521b60669f2543e6a9f + { + { 0x000004d05b9c619b, 0x0000028949770eb8, 0x0000000000000001, 0x00000199d30734ea, 0x0000028175f4a6e2, 0x000007ff6f6bc3cd, 0x0000000000000000, 0x00000711fbacc14a, }, + { 0x000004b0901695ed, 0x00000688147b721c, 0x0000000000000000, 0x000002cb9acc1498, 0x000007d5f343d4fa, 0x000006906b621354, 0x0000000000000000, 0x000003900d1e2333, }, + { 0x000000b77f27d2ca, 0x00000663ef30aab3, 0x0000000000000000, 0x000005030216d8c4, 0x00000011f87498ce, 0x0000003ed47ca9e4, 0x0000000000000000, 0x0000009e5f5a022d, }, + }, + // compressed: 0x38b63bb71dd92c96089c12fcaa7705e68916b6f3399b616f81ee44295f995134 + { + { 0x0000024194ae4e54, 0x0000011db73bb638, 0x0000000000000001, 0x000004d09fea7d7c, 0x000005969b46824c, 0x0000059cf9db0b44, 0x0000000000000000, 0x0000055523942e20, }, + { 0x000002fded8897d6, 0x000002538112c59b, 0x0000000000000000, 0x0000026b9ed22a5f, 0x000002ef7aba61e6, 0x0000044ee816f619, 0x0000000000000000, 0x000002893b7258e9, }, + { 0x0000017d50714461, 0x0000079815deabf0, 0x0000000000000000, 0x0000012a05b252c2, 0x00000088a909492e, 0x00000068a332be52, 0x0000000000000000, 0x0000002171394c08, }, + }, + }, + { // 17 + // compressed: 0x6ef0455abe413975655f9c6dedae7cd0b651ff729c6b7711a94d0defd9d1d217 + { + { 0x000007499718289c, 0x000001be5a45f06e, 0x0000000000000001, 0x00000718073f3e6a, 0x000007e58a61f78a, 0x000005ce397fa8db, 0x0000000000000000, 0x000003961e530011, }, + { 0x00000267e4c7ab28, 0x0000038becaea728, 0x0000000000000000, 0x000002420d24fe55, 0x0000037518e0262b, 0x000000d4da911776, 0x0000000000000000, 0x0000065c6a722e3b, }, + { 0x0000044bafe31491, 0x00000341f2bbb5b6, 0x0000000000000000, 0x000003f4ff94675d, 0x0000004170f1aaef, 0x0000002fa5a3b3de, 0x0000000000000000, 0x000000e4429ec798, }, + }, + // compressed: 0xc9293bf4b9b79d1d758f514f4a8205d6c49d2f31bd72c0f2b045155a85ac249f + { + { 0x000007405307a693, 0x000007b9f43b29c9, 0x0000000000000001, 0x000000328e9505aa, 0x00000053b9bb084c, 0x0000015e9897cee2, 0x0000000000000000, 0x0000022e037d92d1, }, + { 0x0000066cf2b69c6f, 0x00000231eea3b3b6, 0x0000000000000000, 0x000002841dc49ac1, 0x0000071cbc9d6fbd, 0x000001545b0f2c07, 0x0000000000000000, 0x000006395e6c7ffe, }, + { 0x000006ae9c535cbc, 0x000003581609293d, 0x0000000000000000, 0x0000011d23074430, 0x000000bfbe918b02, 0x0000003e49590ab4, 0x0000000000000000, 0x0000000174e73c55, }, + }, + // compressed: 0x26bb88eaf52644aefb3b9784d9790636504e69260c039f5c26d218d5e77d2972 + { + { 0x000000de5c8790d6, 0x000006f5ea88bb26, 0x0000000000000001, 0x000005c7be0cb939, 0x000005b07cda4c91, 0x000001861334a728, 0x0000000000000000, 0x0000048681144984, }, + { 0x000000545beb25d3, 0x000002e77f75c884, 0x0000000000000000, 0x0000046610090483, 0x000002d78f3115a3, 0x0000018d2265c9f0, 0x0000000000000000, 0x00000271945d3dfc, }, + { 0x00000396fedf4d17, 0x000000d819e76612, 0x0000000000000000, 0x000000cbc66d362d, 0x0000000650747ccf, 0x000000e452fbcfaa, 0x0000000000000000, 0x0000000bc252d08c, }, + }, + // compressed: 0x50452c24c8bbbfadd98130d0ec0cc8bc92dfc8f5a66635844cce5882d325cf78 + { + { 0x000006b32d9c495a, 0x000003c8242c4550, 0x0000000000000001, 0x0000038e31489d68, 0x000005d749dae8f0, 0x000003537ae46fc9, 0x0000000000000000, 0x0000054bf8277d02, }, + { 0x000005772f97505d, 0x000006103b35b7f7, 0x0000000000000000, 0x0000057e10e2b5cd, 0x00000698d9bb02da, 0x0000058ce4c84356, 0x0000000000000000, 0x000003ff832c9a75, }, + { 0x0000033bbf23f3c4, 0x000002f32033b340, 0x0000000000000000, 0x000006aa1472ae70, 0x0000007380193826, 0x000000f19e4ba704, 0x0000000000000000, 0x00000000d6a40ed6, }, + }, + // compressed: 0x2d08ceb9167ecbf529bc7a414cf10734aba7f42bce6bb3d4ce759f1a56e9e27d + { + { 0x000007e19d95781c, 0x00000616b9ce082d, 0x0000000000000001, 0x000004f4b6a55ecb, 0x000004e9b828b59c, 0x000005e715fa53d5, 0x0000000000000000, 0x0000022069f74d40, }, + { 0x000004621c453c19, 0x00000757853eb96f, 0x0000000000000000, 0x000000bb733bce1a, 0x0000047612257df3, 0x000001f75ced4b36, 0x0000000000000000, 0x000006029eddbc9c, }, + { 0x000006da077c6259, 0x000004d01fc53105, 0x0000000000000000, 0x000005200549fd76, 0x0000009aafc68877, 0x000000fbc5d2ac35, 0x0000000000000000, 0x000000d655215e34, }, + }, + // compressed: 0x0ad8b25b24f3eb779b07b92f471b30d83373ee4cf2e647c609216c27c81258c6 + { + { 0x000004fc9ae61e97, 0x000003245bb2d80a, 0x0000000000000001, 0x000006b22a1062d9, 0x00000721f376e896, 0x0000037926773999, 0x0000000000000000, 0x0000053def14b46b, }, + { 0x000007ebfa2d247e, 0x00000720f36efd7e, 0x0000000000000000, 0x0000063b82c9a877, 0x000002d3e4aa764a, 0x000006c2109c647e, 0x0000000000000000, 0x00000316790180d4, }, + { 0x0000055cd4a07780, 0x00000760c06d1cbe, 0x0000000000000000, 0x000005c197edd4e0, 0x000000bfb1e9d3a2, 0x0000008cb025904e, 0x0000000000000000, 0x0000000b66585639, }, + }, + // compressed: 0x9581d57a2ca4fcf7ccf333436e2814329d970b340d9dc2b6e1077356481a77b1 + { + { 0x000006ccd24da8fd, 0x0000042c7ad58195, 0x0000000000000001, 0x00000524e14dd482, 0x000007f93efce6b0, 0x000006869a05cbce, 0x0000000000000000, 0x000000241415ad79, }, + { 0x000003fdf079180b, 0x0000067e799eff94, 0x0000000000000000, 0x0000057496c65618, 0x00000471e99dbbee, 0x000007307e1b6c29, 0x0000000000000000, 0x000007336eba3d16, }, + { 0x000006873c6ab017, 0x000004c850a1b90c, 0x0000000000000000, 0x000007b6cd455068, 0x00000076aaad46f6, 0x00000062ee3490ac, 0x0000000000000000, 0x0000009f80f3a4f4, }, + }, + // compressed: 0x0dc5860c448b34dc51e694ccc9cb3713b93c3e644df7226408cde3bac27011a4 + { + { 0x000000b089bf2f7f, 0x000003440c86c50d, 0x0000000000000001, 0x000003860ac473b4, 0x0000004e3c407229, 0x000003a6b21f1e5c, 0x0000000000000000, 0x0000003075e36257, }, + { 0x000003fd34ea3927, 0x0000029cca3b8691, 0x0000000000000000, 0x0000027c86a7ff35, 0x00000798e92ffffc, 0x0000063cd086422f, 0x0000000000000000, 0x0000007000d4ae75, }, + { 0x000004925ef5940b, 0x0000044cdf2f2732, 0x0000000000000000, 0x000007c24477b804, 0x000000248acf9d95, 0x0000004822e18575, 0x0000000000000000, 0x0000007f0c252cd9, }, + }, + }, + { // 18 + // compressed: 0x138d0436fafc189cdd9d8973b39d1529aad0929f0b359fdcd4198a87ee7ef526 + { + { 0x000004c9782a0dde, 0x000004fa36048d13, 0x0000000000000001, 0x000004d55687efb1, 0x0000032d98f791c6, 0x00000285cfc96855, 0x0000000000000000, 0x0000051a27ad1233, }, + { 0x0000063070aab341, 0x00000133bbb3831f, 0x0000000000000000, 0x0000075e2f619565, 0x0000073613d7f628, 0x000000a19d4dc9f3, 0x0000000000000000, 0x000003a306985c15, }, + { 0x000001547736cba9, 0x000000a45676cdce, 0x0000000000000000, 0x0000054603458891, 0x000000a0954eecf2, 0x0000004deafddd0f, 0x0000000000000000, 0x0000008083287b3b, }, + }, + // compressed: 0xddaa6ca24377214bceb78a6424b4a647e3c9fb037a4f1dcb19d000984231d912 + { + { 0x000006ba43ebcc96, 0x00000743a26caadd, 0x0000000000000001, 0x00000799d337594f, 0x000002f70e3be663, 0x000007bd01fde4f1, 0x0000000000000000, 0x0000042a71aff9ca, }, + { 0x0000055395f8781d, 0x00000156f9c9642e, 0x0000000000000000, 0x000007548f6018ce, 0x0000004340fd9fa9, 0x0000000d019cb1d4, 0x0000000000000000, 0x0000059a01244182, }, + { 0x00000235d272709b, 0x0000051e9ad09192, 0x0000000000000000, 0x00000578f14502c8, 0x000000284143b2ed, 0x00000025b2628530, 0x0000000000000000, 0x000000369f246286, }, + }, + // compressed: 0xb16698a43030cf3359485f21d2731f25f6f4de5140aa82abf6239a6fd591f1df + { + { 0x0000009d89150951, 0x00000030a49866b1, 0x0000000000000001, 0x00000433ac2d9068, 0x0000021fcbaf9810, 0x0000052028ef7a7b, 0x0000000000000000, 0x000001402ac9f59e, }, + { 0x0000052d2d47cb82, 0x000003e90b2679e6, 0x0000000000000000, 0x00000130a47033da, 0x00000132dae20eae, 0x000001a23f6ab82a, 0x0000000000000000, 0x000000f36cbef457, }, + { 0x000000e73bea44b7, 0x000000947dcf4885, 0x0000000000000000, 0x000004a20eade57f, 0x0000004736ae54fe, 0x000000bfe323aadf, 0x0000000000000000, 0x0000000418a4d4eb, }, + }, + // compressed: 0x89cc42f059ef31e9b64b128e9d9c582c9759c7ae8ae1c8ad0cc502560afe2c45 + { + { 0x000004f89ed8dbbc, 0x00000759f042cc89, 0x0000000000000001, 0x000007a0647877df, 0x0000066e51f0d83a, 0x000000c55763accb, 0x0000000000000000, 0x00000512f8fd88e4, }, + { 0x000007948d8ef306, 0x0000024976dd263d, 0x0000000000000000, 0x0000040f93f0d41e, 0x00000313877a9524, 0x0000002c50cadc8e, 0x0000000000000000, 0x000004b877bab17e, }, + { 0x00000323caabe771, 0x000004b162727638, 0x0000000000000000, 0x000006ef11909c39, 0x0000000555988c2a, 0x0000008a59fc14ac, 0x0000000000000000, 0x00000099f6faf660, }, + }, + // compressed: 0x12ef8997c29986e20d1957df71cd6e2bd070c9ec57c843c3c53a4d43bc4c1d5b + { + { 0x0000056cb89b75fe, 0x000001c29789ef12, 0x0000000000000001, 0x00000615cc0a9f26, 0x0000051b9f71a64f, 0x0000042bf664b868, 0x0000000000000000, 0x000004c599b4d382, }, + { 0x0000055b900e5687, 0x000002e321bc50d3, 0x0000000000000000, 0x000001b99cb6df64, 0x00000075364b8c3a, 0x000004d3ac5c343c, 0x0000000000000000, 0x00000592dd113014, }, + { 0x000005531a536671, 0x000000adbb35c77d, 0x0000000000000000, 0x000004e93c38aee2, 0x0000002968c45672, 0x000000b63a997886, 0x0000000000000000, 0x0000005f31ee24b0, }, + }, + // compressed: 0x01a7544f44ae122eded7cba9f03efefce05d83750d89bfce544561e7e962801d + { + { 0x0000074cb50f9e56, 0x000006444f54a701, 0x0000000000000001, 0x00000285a9907c5a, 0x00000610c11807b3, 0x00000486bac1aef0, 0x0000000000000000, 0x000006fdef9a5a74, }, + { 0x000001c264019294, 0x0000017afbc5c255, 0x0000000000000000, 0x00000721ec4caf5b, 0x0000006aaf99a2ac, 0x00000614554cebf8, 0x0000000000000000, 0x00000725ff38d0e1, }, + { 0x0000056c7fd2a63a, 0x000003f3f8fbc2a7, 0x0000000000000000, 0x000004683aa2d646, 0x00000074d5c493b0, 0x0000003b00c5d3ce, 0x0000000000000000, 0x000000531719d15d, }, + }, + // compressed: 0xde65210aea727a83f679cf0bb407ab3f70ae3877c7361652dcd7a7031827a66b + { + { 0x00000153eff70cb2, 0x000002ea0a2165de, 0x0000000000000001, 0x000004b583693335, 0x000002bd1853e7b5, 0x00000363bb9c5738, 0x0000000000000000, 0x0000054d525912b9, }, + { 0x000002ae0ec5524f, 0x000001ef3ed06f4e, 0x0000000000000000, 0x000006bfdfb84ddd, 0x000005ce48594184, 0x0000027d7dc52163, 0x0000000000000000, 0x000005e1c6aa293a, }, + { 0x0000012e2724a9e4, 0x000000feac1ed02f, 0x0000000000000000, 0x00000756a04f7d8e, 0x000000697150809a, 0x000000d74c4e3007, 0x0000000000000000, 0x000000e3ac57ba8c, }, + }, + // compressed: 0xf55ef7b1dab52dcdf565b016cf957fd785f0493fea1f57143d2b2b262136331c + { + { 0x00000428d378df80, 0x000005dab1f75ef5, 0x0000000000000001, 0x0000055467d9ca81, 0x000007fcfb80ed2d, 0x000007f51fa4f842, 0x0000000000000000, 0x0000044971d6311d, }, + { 0x000001f4968ca679, 0x0000060cbeb9a5b6, 0x0000000000000000, 0x0000053186f50dfc, 0x00000172ba4e3645, 0x000002b2b3d14571, 0x0000000000000000, 0x0000069d98cda6d0, }, + { 0x000003db6d0de428, 0x0000075dfe573c5a, 0x0000000000000000, 0x000004e62df1d4ac, 0x000000e9abe62fe6, 0x00000038666c424c, 0x0000000000000000, 0x00000095d7988a8f, }, + }, + }, + { // 19 + // compressed: 0x10b654739e8d400b6e5ba85b53326b8007a2584a033ae6db2cdfa1c9ddd93b97 + { + { 0x0000071b276d01c9, 0x0000059e7354b610, 0x0000000000000001, 0x0000071efe5872df, 0x0000014db8eb7dd4, 0x00000501a52c5103, 0x0000000000000000, 0x000003c764b39d70, }, + { 0x000000918e025e00, 0x0000050b6dc16811, 0x0000000000000000, 0x0000072318256a01, 0x000003db79253081, 0x0000021df2cdbe63, 0x0000000000000000, 0x000001ea319e6ed2, }, + { 0x0000079ee2eb161b, 0x00000601acc94d6e, 0x0000000000000000, 0x000001635960bb50, 0x000000bb11f7f2b4, 0x0000002e77b3bb93, 0x0000000000000000, 0x0000000dc39a2763, }, + }, + // compressed: 0x53035b9e62af2b4747048d27900baa3b27bf4396465f780c137b838d1a6a3aff + { + { 0x000005516f166f23, 0x000007629e5b0353, 0x0000000000000001, 0x000004395d3d800b, 0x0000070a50268447, 0x000007a34b21df93, 0x0000000000000000, 0x000004182c96319c, }, + { 0x0000056d57c81a15, 0x000001a088e8e575, 0x0000000000000000, 0x0000003dbedefcc8, 0x000006162663fe35, 0x00000037b130c785, 0x0000000000000000, 0x0000051307e68cd7, }, + { 0x0000004638ca4c7e, 0x000004eea82e409e, 0x0000000000000000, 0x00000656a3555724, 0x0000006100c06a4d, 0x000000fe74d4351b, 0x0000000000000000, 0x00000061a1fbda5c, }, + }, + // compressed: 0x5047b8681e97b49ccfbb6466297295a02b41fa7226e78d5cd989c551430815c6 + { + { 0x0000051af21233b3, 0x0000071e68b84750, 0x0000000000000001, 0x000001c0aeb9a02e, 0x0000043fc7a4cd3b, 0x00000393397d2095, 0x0000000000000000, 0x00000280b2cc9976, }, + { 0x00000189b39c0b29, 0x0000049779f39692, 0x0000000000000000, 0x0000006995d79203, 0x0000009986869651, 0x000004589d95c8de, 0x0000000000000000, 0x000004a5dfe0e6df, }, + { 0x0000046f6f9e3bc3, 0x0000068255c8a599, 0x0000000000000000, 0x000001571c443458, 0x0000001524284058, 0x0000008c2a1086a3, 0x0000000000000000, 0x00000077941a512b, }, + }, + // compressed: 0xbf01cc9eb68e689c6f8944a6ad83bcf0e29f7a5f5f952dca4182f28d03b4a84e + { + { 0x000001bc3c5d62a4, 0x000006b69ecc01bf, 0x0000000000000001, 0x0000060af1cad202, 0x000006d10987daa2, 0x000002afafbd4ff1, 0x0000000000000000, 0x000003a2a4f88d2f, }, + { 0x0000060f4c081e06, 0x000000912df38d11, 0x0000000000000000, 0x0000019dd0655da8, 0x000000f13cd98183, 0x00000728241ca2d9, 0x0000000000000000, 0x000002ca46391217, }, + { 0x00000467f22cfb3f, 0x000003c2f20eb699, 0x0000000000000000, 0x00000518c14c1692, 0x000000ac63bdbb5d, 0x0000009d5168071b, 0x0000000000000000, 0x000000499c1260a8, }, + }, + // compressed: 0x850bf3fd55a1cf3fa42e37368e16f7d244f89264de64e0b280424f32a7289954 + { + { 0x000000f5fd06c106, 0x00000155fdf30b85, 0x0000000000000001, 0x000002a763ee1a2e, 0x0000047f3746579f, 0x0000026f32497c22, 0x0000000000000000, 0x0000019de8bfa6b4, }, + { 0x000001021e43fd12, 0x000006e5d487f9f4, 0x0000000000000000, 0x000003ffbd5e4dc6, 0x0000006d74b82780, 0x000004f4280b2e06, 0x0000000000000000, 0x000005cff6abc3bd, }, + { 0x000002d711a0d576, 0x0000034bdc5a38d8, 0x0000000000000000, 0x000006ba4792df49, 0x00000083a9c78514, 0x000000a932514e64, 0x0000000000000000, 0x0000009236cdbd81, }, + }, + // compressed: 0xa164dad08e4af0754b28e267af2c22eda47b7b1f79a33482678b01b7b0b8f6cc + { + { 0x0000013dc7ea32a7, 0x0000028ed0da64a1, 0x0000000000000001, 0x00000021991a73bd, 0x000007a965fc6ca3, 0x000001bc8fbdbdd2, 0x0000000000000000, 0x0000018dc23bb831, }, + { 0x000002db73131eb6, 0x00000445096ebe09, 0x0000000000000000, 0x000006418f587075, 0x000005ee4acac0ab, 0x00000018b678234a, 0x0000000000000000, 0x00000078a99c13d3, }, + { 0x0000078f57e331f8, 0x000003b488b2bd9f, 0x0000000000000000, 0x000006ac9ef0077c, 0x00000011e671a190, 0x00000099ed71616e, 0x0000000000000000, 0x000000a61a9505d6, }, + }, + // compressed: 0x9ebf9a6c4573696d80a80049fcb27f2550b8cfc812f4ac2b5bbdbf0ce0e7b38d + { + { 0x00000630e1f94825, 0x000003456c9abf9e, 0x0000000000000001, 0x0000043ee2096363, 0x00000191e6427fc5, 0x000002096467dc28, 0x0000000000000000, 0x0000022109a21d8d, }, + { 0x0000056a6b400986, 0x00000015100dad2e, 0x0000000000000000, 0x000006b96d67acdf, 0x000001770b9c7482, 0x000003fbd5b2bacf, 0x0000000000000000, 0x0000061a1db0fbe0, }, + { 0x000005f8b5e09a32, 0x00000095fecbf124, 0x0000000000000000, 0x0000020758b1fd86, 0x000000cbd4ea7e20, 0x0000001b67cfc019, 0x0000000000000000, 0x0000000549d83243, }, + }, + // compressed: 0x5f79cff16261c8f5f257ee2619868c117835061c85242117cf7f06ec5d2bd136 + { + { 0x0000059a3b24b8a2, 0x00000162f1cf795f, 0x0000000000000001, 0x0000079179154557, 0x0000037445d0381b, 0x000002428e031abc, 0x0000000000000000, 0x000003746f8bcdd6, }, + { 0x000005f4170b9cc4, 0x000005cafe5eb90c, 0x0000000000000000, 0x0000070741424da4, 0x000007809bfcccbe, 0x00000067fcf17212, 0x0000000000000000, 0x0000028285936bdb, }, + { 0x000006e15deb3116, 0x000000463218649b, 0x0000000000000000, 0x00000357923d73f1, 0x0000007a2878a224, 0x0000006da256bbd8, 0x0000000000000000, 0x0000005dea2f10b7, }, + }, + }, + { // 20 + // compressed: 0x512f5b30fbbfee96b8969588ad38f9d325ddd546c72df5f095003abb90829657 + { + { 0x0000074e8c58aedc, 0x000007fb305b2f51, 0x0000000000000001, 0x000000430a20e101, 0x000004ab74c038c5, 0x000006e3a36aee92, 0x0000000000000000, 0x000004d437717768, }, + { 0x000006083488c6f2, 0x000002b2d712ddd7, 0x0000000000000000, 0x0000061d88fee357, 0x0000043a8a6e185d, 0x000003a0095f0f52, 0x0000000000000000, 0x000002aa3e1cf750, }, + { 0x000002e7bc8beeaf, 0x0000074fe4e2b622, 0x0000000000000000, 0x000007ce4d963493, 0x0000005e36f1f562, 0x000000af2d052176, 0x0000000000000000, 0x000000fb887c6bb8, }, + }, + // compressed: 0x18973e275c2a785a94fd4e5e99c676353e7d231f05d82e0f990ad5821db84f84 + { + { 0x00000665887dd9c3, 0x0000025c273e9718, 0x0000000000000001, 0x000000c5a907e3d9, 0x000006fc77903cd8, 0x000004028f91be9f, 0x0000000000000000, 0x0000029a5900dda4, }, + { 0x0000060a6ab0b2cc, 0x000001dfb28b4f05, 0x0000000000000000, 0x0000018c6b383be3, 0x000000cc12fc6e08, 0x00000550a990f2ed, 0x0000000000000000, 0x0000030dd2eca704, }, + { 0x000007243e6cc52e, 0x000000d5db1a6579, 0x0000000000000000, 0x0000055eccdc7739, 0x000000fdee402ceb, 0x000000089f703b05, 0x0000000000000000, 0x000000fef3047f38, }, + }, + // compressed: 0xba87f568f01f9c6adec850004e892708e75bed7d5599bf3cf0d6061c43b0a964 + { + { 0x00000239a3b513e8, 0x000007f068f587ba, 0x0000000000000001, 0x000006a15b7d2919, 0x0000009b7ac85e99, 0x000004aabef6adf3, 0x0000000000000000, 0x00000721c4d22ea3, }, + { 0x000003f51b10669a, 0x000002191bcd5383, 0x0000000000000000, 0x0000075046a5d67a, 0x0000004d9b412b54, 0x0000006d6f03cbf9, 0x0000000000000000, 0x0000018346c7156c, }, + { 0x00000704d9c352e4, 0x000004209e253801, 0x0000000000000000, 0x000006c2d3da8354, 0x000000149c06e7af, 0x000000c953608638, 0x0000000000000000, 0x0000000e34fa159c, }, + }, + // compressed: 0x3144e12052350ccc4151b1090795650d365f9d201b62f59ad3557761f7bc69fc + { + { 0x000005aac887ba0b, 0x0000055220e14431, 0x0000000000000001, 0x000007eb04e8295f, 0x000000016077bb45, 0x0000010d904eaf9b, 0x0000000000000000, 0x000004d18b8bcc6b, }, + { 0x000004ac5dda60e5, 0x0000062a28398186, 0x0000000000000000, 0x0000021e6fa0fe1a, 0x000006a7e9ccf543, 0x000007755d39af56, 0x0000000000000000, 0x000002ca51de951a, }, + { 0x0000040498a416fe, 0x0000003596541c26, 0x0000000000000000, 0x000004436c6094bd, 0x000000587798e28d, 0x000000f8d379eec2, 0x0000000000000000, 0x000000deb534e645, }, + }, + // compressed: 0xbe44d9a3ebd429e79eaf788040099e8d039c86477a562545243b8dee8096ab82 + { + { 0x0000000c2f41c6c5, 0x000004eba3d944be, 0x0000000000000001, 0x00000285dde50d9a, 0x000003b81e628e4f, 0x0000033d23c34e01, 0x0000000000000000, 0x0000078eec8f7b6c, }, + { 0x000007df73717420, 0x00000715f3dce53a, 0x0000000000000000, 0x00000734493df491, 0x0000047afca4efa4, 0x000000d3b2445255, 0x0000000000000000, 0x0000046bb34fa091, }, + { 0x000007127de70433, 0x0000063678250201, 0x0000000000000000, 0x000004866889383e, 0x000000929c4345c2, 0x00000005572d01dd, 0x0000000000000000, 0x000000d6baed97d4, }, + }, + // compressed: 0x2225781e1741f9e0d336690374aee6f146c7fcd0a23e8b403e31dd039c86fb16 + { + { 0x0000056cec0cd994, 0x000001171e782522, 0x0000000000000001, 0x0000019733b60962, 0x0000048a47a15a3b, 0x00000751687e63a3, 0x0000000000000000, 0x000003f684c8e81f, }, + { 0x00000203b7510aea, 0x00000526da7c1f28, 0x0000000000000000, 0x0000057c266511c3, 0x00000277354af016, 0x000005d313e408b3, 0x0000000000000000, 0x0000070d0754811f, }, + { 0x00000591cb71bd73, 0x000003c79ab9d00d, 0x0000000000000000, 0x00000093f1cad362, 0x00000015c667ed0a, 0x0000002df70d3807, 0x0000000000000000, 0x0000007f03c7171e, }, + }, + // compressed: 0x24c8175f357fdb0aa49942d7c323b974f7eaf8cb8b3e7cd53ddcde4cd3e2d30a + { + { 0x000007cc7ed9affe, 0x000007355f17c824, 0x0000000000000001, 0x000007c5336e249d, 0x0000076925862382, 0x00000745e5fc757b, 0x0000000000000000, 0x0000068004f77f0e, }, + { 0x000004b0e96ff221, 0x0000005334815b6f, 0x0000000000000000, 0x00000639fb2de181, 0x00000750993a8397, 0x000005edc3dd57c3, 0x0000000000000000, 0x000007a1ebef2d6f, }, + { 0x0000015172e28491, 0x000005d2e48f0f5d, 0x0000000000000000, 0x000001d17b78670c, 0x000000a0a21f8209, 0x00000015a7c5a699, 0x0000000000000000, 0x00000024f82b17e1, }, + }, + // compressed: 0x74b951aec48fa2de96fe4d74d373991da84838870b68406295df67d17924d84e + { + { 0x000004422e9879a2, 0x000007c4ae51b974, 0x0000000000000001, 0x0000052260c5d975, 0x000007e0a5a75665, 0x00000405c39c2454, 0x0000000000000000, 0x0000061854fb329e, }, + { 0x00000146c8fec32f, 0x000001bfd2dbd451, 0x0000000000000000, 0x00000036171fdc76, 0x000006f4f689b413, 0x0000067df9562406, 0x0000000000000000, 0x0000039236d8808a, }, + { 0x000006912b77514b, 0x0000007665cf4dd1, 0x0000000000000000, 0x00000140d4bbf3ad, 0x0000006a9df0fa0f, 0x0000009db048f3a2, 0x0000000000000000, 0x000000605b25a40a, }, + }, + }, + { // 21 + // compressed: 0x77f1e0e4b66fbc2d936abda429bfe104e8f67a78d466195e60d026b45e5fdc8e + { + { 0x000001a2bca4283d, 0x000007b6e4e0f177, 0x0000000000000001, 0x000007d653da8e67, 0x0000065c61347d43, 0x0000036a3c3d7b74, 0x0000000000000000, 0x0000031d81abc511, }, + { 0x000000c7bb2f0278, 0x000007ad5265b78d, 0x0000000000000000, 0x0000053ec82a8a77, 0x000001cae4caec7b, 0x0000026d0605e196, 0x0000000000000000, 0x000001cba72bf872, }, + { 0x000003b58bc24686, 0x0000001386fca692, 0x0000000000000000, 0x000007a7707bb092, 0x00000021cba76ede, 0x0000001db8bebd68, 0x0000000000000000, 0x0000008b68d8a26c, }, + }, + // compressed: 0xe4e37f8add4d9dce300e6276566413ab58990eb37b4f594bdf291232ef0a1cdc + { + { 0x000002bf314f7fa1, 0x000005dd8a7fe3e4, 0x0000000000000001, 0x000003bcfa79db8f, 0x000002a591d45f42, 0x000007bdd9874cac, 0x0000000000000000, 0x00000332ce419243, }, + { 0x0000019e8a152805, 0x00000441c619d3a9, 0x0000000000000000, 0x000003eb3666e103, 0x000004b713b1dbbd, 0x000001229df4b594, 0x0000000000000000, 0x000000ab5bb087a7, }, + { 0x000003895fc7723a, 0x000002ac4d9159d9, 0x0000000000000000, 0x0000058122047b09, 0x00000042ef7f46db, 0x000000b83815de64, 0x0000000000000000, 0x00000095cc3270fb, }, + }, + // compressed: 0x83fb5b98447e1161363196712a46e0fc4b9025d44834ac83643da45bbe5a6875 + { + { 0x000006aa5344a32e, 0x00000644985bfb83, 0x0000000000000001, 0x00000133eb61f2b2, 0x000005cba50986b0, 0x000002246a12c825, 0x0000000000000000, 0x000002883d7b32b4, }, + { 0x000003680f11bb7e, 0x000002c626cc222f, 0x0000000000000000, 0x000007e92a4dd2c1, 0x000003f3e035eb0e, 0x00000243d6483ac3, 0x0000000000000000, 0x0000030e6aadf727, }, + { 0x000001f623aad2d0, 0x000007f38118a9c6, 0x0000000000000000, 0x00000550f43ea327, 0x0000003401b2362f, 0x000000ead0b57cb7, 0x0000000000000000, 0x00000026aa536c47, }, + }, + // compressed: 0xfe832ee2bc16c7f5c18509e819eb2bb4ae4a251437a69dec13a6901505ea7259 + { + { 0x000003d7add1d518, 0x000006bce22e83fe, 0x0000000000000001, 0x00000420dc8f7811, 0x000000f8388a3acd, 0x0000031b8a12a557, 0x0000000000000000, 0x000006b2599b021a, }, + { 0x00000023e2231e1b, 0x00000130b83eb8e2, 0x0000000000000000, 0x000001a9f501fa95, 0x000004a3a018732e, 0x0000010a613ec9da, 0x0000000000000000, 0x000005f3bdbc01b2, }, + { 0x0000065e7de2233f, 0x000002d0afac67a0, 0x0000000000000000, 0x0000026a6b4a52b1, 0x000000f36b7034cb, 0x000000b2e5d40a2b, 0x0000000000000000, 0x0000009efd392b20, }, + }, + // compressed: 0xfe9952353d44c871d7eaebdb1c3bcd8b6694a4f19e499280c8ad44a1c4ee4219 + { + { 0x000003bc5781302e, 0x0000043d355299fe, 0x0000000000000001, 0x00000319ae234992, 0x000004d729fdece3, 0x000004cf78d24a33, 0x0000000000000000, 0x0000024a129e0891, }, + { 0x000005bb81ec4ce9, 0x0000057d5aee3908, 0x0000000000000000, 0x00000547d24fb58a, 0x00000638e4c8c299, 0x0000044adc880924, 0x0000000000000000, 0x0000079ca75553ce, }, + { 0x00000361483ce626, 0x0000022f34ec736f, 0x0000000000000000, 0x000000b06cf64433, 0x000000633275b25c, 0x0000003285dd8942, 0x0000000000000000, 0x0000005414ca629d, }, + }, + // compressed: 0x3a791c3ccd1a36cf3bbc355aacbc9e2faba6cda8e960e860131aea6d9bc35d05 + { + { 0x0000037ff7f927c2, 0x000002cd3c1c793a, 0x0000000000000001, 0x0000027cc28d5bb6, 0x000001d108aad7bb, 0x00000074d466d355, 0x0000000000000000, 0x0000046772519644, }, + { 0x00000214c6a5b6f2, 0x000006b78779e6c3, 0x0000000000000000, 0x000001bff5762324, 0x000007c2ded5982f, 0x000006a1a1360e86, 0x0000000000000000, 0x000002a24b6a83c7, }, + { 0x0000036dd07c185f, 0x000004be7af2b168, 0x0000000000000000, 0x0000041f893af1dd, 0x00000099edc430c8, 0x0000000abb8736db, 0x0000000000000000, 0x000000243460ee21, }, + }, + // compressed: 0xc98374c73e7159d6af962bb877e0bf88d3bc971023289e289b3aed6c4ab97bd2 + { + { 0x0000055e9f034a97, 0x0000013ec77483c9, 0x0000000000000001, 0x0000012a995b482e, 0x00000348caa8e9d8, 0x00000411884bde69, 0x0000000000000000, 0x000002ef17b26c72, }, + { 0x0000069785bc9b6b, 0x00000572d5facb2e, 0x0000000000000000, 0x00000707002ac7b3, 0x0000040e52d46054, 0x000006d3a9b289e2, 0x0000000000000000, 0x0000027a9f748503, }, + { 0x000007854ff024c0, 0x00000622ff81dee0, 0x0000000000000000, 0x000004d01741f1b8, 0x000000667f8ed8f4, 0x000000a4f77294d9, 0x0000000000000000, 0x000000d7120d3641, }, + }, + // compressed: 0x77dbc7b58cfa824055c134c7f88686067ea5e7f6d9c8e629cf9b63a708d37384 + { + { 0x000000416270220d, 0x0000028cb5c7db77, 0x0000000000000001, 0x0000012603589e05, 0x0000026728397782, 0x0000046cfb73d2bf, 0x0000000000000000, 0x000007ba7300d4a7, }, + { 0x0000048b69d02554, 0x000006982aa8105f, 0x0000000000000000, 0x0000039892595dcf, 0x0000073eb73ffadc, 0x00000639bcf29e6c, 0x0000000000000000, 0x0000004341a02a1e, }, + { 0x000006656a27ebe4, 0x0000001a1a1be31c, 0x0000000000000000, 0x000004ad2d08491b, 0x0000004778420754, 0x00000008e7a6114e, 0x0000000000000000, 0x000000205ee77fbc, }, + }, + }, + { // 22 + // compressed: 0x9a1c51b5e0dab4a206ffff2b2960c87a344250f55d371f982da14eda25d76b3f + { + { 0x000001ab7f5745c6, 0x000002e0b5511c9a, 0x0000000000000001, 0x0000057b106058ac, 0x0000016d16fbd7d4, 0x000003aefaa8211a, 0x0000000000000000, 0x0000047cc9014996, }, + { 0x000000f8d21d6317, 0x000007ffe0d4569b, 0x0000000000000000, 0x000000d20bee69b1, 0x000005c013db7271, 0x000004ea12d981f3, 0x0000000000000000, 0x0000060d6d06466f, }, + { 0x00000408ea2bb95e, 0x000001eb2180a4af, 0x0000000000000000, 0x00000765015e79bf, 0x0000006cb2fa4bd4, 0x0000007ed7ae4bb4, 0x0000000000000000, 0x000000f6fd9833b4, }, + }, + // compressed: 0x9bfa7ca7514aae6d5086a3e754362682db822d8fcdffbb09bacaf51b66dcbe83 + { + { 0x0000073c695c690d, 0x00000251a77cfa9b, 0x0000000000000001, 0x0000030d078975f5, 0x00000222257095e9, 0x000007e6c796c16d, 0x0000000000000000, 0x00000211f171b772, }, + { 0x000000520dcf1846, 0x00000470ca0db5c9, 0x0000000000000000, 0x0000013e530c4b19, 0x00000743956951d4, 0x0000075caba09bbf, 0x0000000000000000, 0x000007066a1a0cab, }, + { 0x0000037494b99819, 0x0000060898d9539e, 0x0000000000000000, 0x00000124a5095246, 0x000000846b5aec02, 0x000000077db8cc37, 0x0000000000000000, 0x0000001cf9c5619b, }, + }, + // compressed: 0xf9704bd9dffea6fe2dbafcc151c030f189ab2f7f7ed48248b5eeec8a135652e1 + { + { 0x0000043ac48c85a3, 0x000006dfd94b70f9, 0x0000000000000001, 0x0000064e4870cb0d, 0x000003ee9d74a6a4, 0x0000023f3f97d5c4, 0x0000000000000000, 0x0000075d3af44c2e, }, + { 0x0000042735b8928c, 0x0000079745bfd4df, 0x0000000000000000, 0x000000b16d65577e, 0x0000034674a09db1, 0x000006ceeb54882d, 0x0000000000000000, 0x0000014dee49abe4, }, + { 0x000003f4d877d0f1, 0x000007c4c3014707, 0x0000000000000000, 0x0000073596f3c2a9, 0x000000ccdc14bb1f, 0x000000c2a4ac2715, 0x0000000000000000, 0x000000fe179021aa, }, + }, + // compressed: 0xa0137273ad9dac83982ef72ebaf8f69f5769ec43dd2e1e3175abc5de7d903a9d + { + { 0x000003a426f4136f, 0x000005ad737213a0, 0x0000000000000001, 0x000003313ed081dc, 0x000007eca7a31e14, 0x0000076ea1f634ab, 0x0000000000000000, 0x0000009e018190e5, }, + { 0x0000040606b7200d, 0x000006e5d3107593, 0x0000000000000000, 0x00000366901742d2, 0x000006edbf5cbc8d, 0x0000045ab75311e2, 0x0000000000000000, 0x000001bfde301280, }, + { 0x000002359cda795f, 0x0000067fdbe2e8bb, 0x0000000000000000, 0x000004a4ca7eb614, 0x0000001a3f1b79f1, 0x0000003a7520fbbd, 0x0000000000000000, 0x0000000002368946, }, + }, + // compressed: 0x5ca70a6a691f56166abd52585c72bfc1ad66799a7fdda811261085d2a288d963 + { + { 0x0000006c3fc66c0c, 0x000007696a0aa75c, 0x0000000000000001, 0x00000753afbd232e, 0x0000059c134726b8, 0x000006bfcd3cb356, 0x0000000000000000, 0x000004d9c27395c8, }, + { 0x000002c1ba47fbf4, 0x00000257ad42cac3, 0x0000000000000000, 0x0000031ed0600240, 0x000000357e17ae38, 0x0000005102611a8d, 0x0000000000000000, 0x0000068a066f8166, }, + { 0x00000575038e3937, 0x00000706fdc97161, 0x0000000000000000, 0x000007a4af3ae3f7, 0x00000075891b22dd, 0x000000c7b31145a5, 0x0000000000000000, 0x00000067f5aa5646, }, + }, + // compressed: 0xe8cf22c4d0c82c8dcb3aa1057b4f2b076fa5f6ece6b6fea3e2710ab9cc55c33c + { + { 0x000001c6c5e41e16, 0x000000d0c422cfe8, 0x0000000000000001, 0x00000443903e9131, 0x000006697982f3a3, 0x00000373767b52b7, 0x0000000000000000, 0x000000d25d5d4922, }, + { 0x000007eee6aa80c9, 0x000004275971a599, 0x0000000000000000, 0x000002c6f9dd36d2, 0x0000056dca7b2acf, 0x000000a71e2a3feb, 0x0000000000000000, 0x000002e7568c87cd, }, + { 0x0000002be190c0cc, 0x0000041cad3dec16, 0x0000000000000000, 0x000002e292532de9, 0x0000002d81e85344, 0x0000007986ab9972, 0x0000000000000000, 0x000000c63d5e84d7, }, + }, + // compressed: 0xe80d70a3b975d9475205f8e2fbc58072e15de432278f6553b5805f667f2c1fc3 + { + { 0x00000410da66fe9f, 0x000005b9a3700de8, 0x0000000000000001, 0x00000344858f7b19, 0x000003b08f7cdfc1, 0x0000079399722ef0, 0x0000000000000000, 0x0000020d104854eb, }, + { 0x000002dcb4d67d20, 0x00000700aa48fb2e, 0x0000000000000000, 0x0000054a295ac04c, 0x000002919b5bc3d9, 0x000005f80b553658, 0x0000000000000000, 0x00000253b2689004, }, + { 0x00000617752d49b0, 0x000005ca0317ef8b, 0x0000000000000000, 0x00000452acd4be87, 0x000000ab32c9163d, 0x000000863e58fecc, 0x0000000000000000, 0x000000f608e2bf22, }, + }, + // compressed: 0xc6bae6c480c276b30b9b1d6dddd30e9744f90b4558959ab023e2cd57faacd0c8 + { + { 0x00000528acf6ae43, 0x00000280c4e6bac6, 0x0000000000000001, 0x000006e47dabe671, 0x000003b4dbf59622, 0x000002ac2285fca2, 0x0000000000000000, 0x0000073f74cb01ca, }, + { 0x0000038f56907db7, 0x000003b361766ed8, 0x0000000000000000, 0x000005e746f6c1e4, 0x0000076583fc0404, 0x000004de223b09a9, 0x0000000000000000, 0x000006d3bdb4208c, }, + { 0x00000218d5f22df5, 0x0000025c3b4f75b4, 0x0000000000000000, 0x000003c746865d88, 0x000000b366f7eb85, 0x00000091a159f4af, 0x0000000000000000, 0x0000002c46832266, }, + }, + }, + { // 23 + // compressed: 0x4086f31fd69c49dda0253606c39bcd29c33dd73d02d8e25131923b207a70254a + { + { 0x000001def6267ff6, 0x000004d61ff38640, 0x0000000000000001, 0x0000068a53f6ed6a, 0x0000029ff4d27958, 0x000004011eeb9ee1, 0x0000000000000000, 0x000002261d7100b0, }, + { 0x0000058108773c93, 0x000006c4b41ba933, 0x0000000000000000, 0x0000022e142556ec, 0x0000050500623a01, 0x000003b923151e2d, 0x0000000000000000, 0x000000e49fc40001, }, + { 0x000005ddcb29edd0, 0x000004a7366f0c18, 0x0000000000000000, 0x000004c109096077, 0x00000059bfbfd9ab, 0x000000944ae0f440, 0x0000000000000000, 0x000000ae4312da49, }, + }, + // compressed: 0x4edad0a191505d28083efeb5a76faa4bb39393e17c17e563fd30b0c4af35c903 + { + { 0x00000517fd181bae, 0x00000091a1d0da4e, 0x0000000000000001, 0x000006c6492b0c3d, 0x0000067499032312, 0x000003be70c9c9d9, 0x0000000000000000, 0x000005c26eb11d1e, }, + { 0x0000072c76816dca, 0x000007c7c1050baa, 0x0000000000000000, 0x00000440bf932e4e, 0x000003c13da5509b, 0x000003030fd63e51, 0x0000000000000000, 0x0000008c7a2dcd29, }, + { 0x00000640898a7cae, 0x0000052ea9be9ed7, 0x0000000000000000, 0x0000011f330b137f, 0x000000af1dbae9ec, 0x00000007926b5f89, 0x0000000000000000, 0x0000007d8556b205, }, + }, + // compressed: 0xcbd132ae093a21a7d5c2f540df872b0f29ab1ee8c6a4ae0b5eacdb6a6cf61b8e + { + { 0x0000027be4d87bb9, 0x00000209ae32d1cb, 0x0000000000000001, 0x000005e9792c887e, 0x000006e839e5cdc1, 0x00000263740f5594, 0x0000000000000000, 0x000004e6dd572f8f, }, + { 0x000007235db4341a, 0x000006b85ab4e427, 0x0000000000000000, 0x0000024dabbc557a, 0x000000fcace99a0d, 0x000005bac5e0baea, 0x0000000000000000, 0x00000688f5fbfba6, }, + { 0x000006a62d37ad84, 0x0000043cae1f7d03, 0x0000000000000000, 0x000000680800632e, 0x0000005bab84b440, 0x0000001c37ecd8d5, 0x0000000000000000, 0x000000e60a9166b5, }, + }, + // compressed: 0x34e3d6a14b095b80193f350977f13ebf2b702206cb063f42dd4578d877225a58 + { + { 0x000001a3cba8b8ee, 0x0000014ba1d6e334, 0x0000000000000001, 0x0000078233d48962, 0x000007a955c61c28, 0x0000036583113815, 0x0000000000000000, 0x000007d29b9f20ff, }, + { 0x0000022be2d886aa, 0x000006a7e3300b61, 0x0000000000000000, 0x00000704aff4314b, 0x000001db8ca760f4, 0x000007845dd423f0, 0x0000000000000000, 0x000006f981fa78e6, }, + { 0x0000019689bc76c8, 0x000006fcfbc5dc24, 0x0000000000000000, 0x0000059a6312d7b1, 0x0000006086887682, 0x000000b0b444efb0, 0x0000000000000000, 0x000000ecac4f12a1, }, + }, + // compressed: 0x9dcf86eaa37370e1dc5f1507b7fb8c3a8e8a8331fce7534816f613b684f4bb28 + { + { 0x00000759d51fc8c0, 0x000003a3ea86cf9d, 0x0000000000000001, 0x0000075c6f136c7c, 0x0000004fd5ab8747, 0x000003fe18c1c547, 0x0000000000000000, 0x0000056909ef3799, }, + { 0x000000d6de471879, 0x000002abfb9c2e0e, 0x0000000000000000, 0x000003a237de4c25, 0x000003846a626bf1, 0x0000013f6164853e, 0x0000000000000000, 0x0000008f75d527e9, }, + { 0x0000066fb74bf414, 0x000000ea33eedc1c, 0x0000000000000000, 0x000006bfab441fdb, 0x0000007e82c15183, 0x0000005177e9096c, 0x0000000000000000, 0x0000003cf3966b03, }, + }, + // compressed: 0x8181e0f5d853e977d9de9d29440ca584e52545860c2d6cdcf4f2d1392db58ac7 + { + { 0x000006c3eef7e3f1, 0x000003d8f5e08181, 0x0000000000000001, 0x000004d39252d159, 0x00000472de7cef7e, 0x00000686432292f2, 0x0000000000000000, 0x000005a05360e4b7, }, + { 0x000003c21f002686, 0x000003bbdb2efd2a, 0x0000000000000000, 0x0000035900ecd4d4, 0x000003b38317ff90, 0x0000051f2f4dc6c2, 0x0000000000000000, 0x00000212214b82c6, }, + { 0x0000020a2da9fffa, 0x00000612943110a6, 0x0000000000000000, 0x000007977786f21c, 0x000000cbaf2a3674, 0x0000008f156a5a73, 0x0000000000000000, 0x0000002db0f48234, }, + }, + // compressed: 0x83054ed5e2d5a4fbfa99bd2ed7af1fe28f77e96e73c27a49de6d5a7a570b999f + { + { 0x0000065a42066215, 0x000005e2d54e0583, 0x0000000000000001, 0x000006ad1be8f7d6, 0x000006d8eb7cca5b, 0x00000139b774bbc7, 0x0000000000000000, 0x0000034f2906f029, }, + { 0x00000344983677af, 0x000007b33f5f749a, 0x0000000000000000, 0x0000054f31f46689, 0x00000738ca657c05, 0x000005a6dde497ac, 0x0000000000000000, 0x000004d6d3e77c65, }, + { 0x0000061e6f8f3431, 0x000007887ebf5cba, 0x0000000000000000, 0x000001f47943aeb3, 0x00000051f0f902cb, 0x0000003f3216aef4, 0x0000000000000000, 0x0000008b105fc2a6, }, + }, + // compressed: 0xe46f3c942999acd8a29283a361f1f9b5f39ac8be13db992674f005e43c84cf7d + { + { 0x0000045d757983d6, 0x00000129943c6fe4, 0x0000000000000001, 0x000006484a4732c0, 0x0000042bcc2f0947, 0x00000589df644d79, 0x0000000000000000, 0x00000461c8aee370, }, + { 0x0000054234cccd26, 0x00000072545b1593, 0x0000000000000000, 0x000002c6532d921a, 0x0000026f6dd7ddd1, 0x0000005f0742699d, 0x0000000000000000, 0x0000027191bb3be2, }, + { 0x0000058adbb4445e, 0x000006d7e7c5868e, 0x0000000000000000, 0x00000754850ff729, 0x000000d11fcb71ec, 0x000000fb9f0879c8, 0x0000000000000000, 0x000000ce72d0fce6, }, + }, + }, + { // 24 + // compressed: 0xc01a0cc89dcc6da636a4381bf45ca097c6d7db95bef3eba7ab7d7e8df6b8a07d + { + { 0x00000014385675a6, 0x0000049dc80c1ac0, 0x0000000000000001, 0x00000153c3b5da76, 0x000005a82e6fd465, 0x000001df4aedebe3, 0x0000000000000000, 0x00000010ff592cb0, }, + { 0x000007b53d1def04, 0x0000071486d4cdb9, 0x0000000000000000, 0x00000233d37a81e3, 0x000004dc0b34cd1e, 0x000007e7daba7ebf, 0x0000000000000000, 0x00000674b4b03cc6, }, + { 0x00000689927cc2ab, 0x0000025e8173d06c, 0x0000000000000000, 0x00000076b1bdcc84, 0x0000008c22b5743a, 0x000000fb4171ed1a, 0x0000000000000000, 0x000000b4bf10fd06, }, + }, + // compressed: 0xb943a6a0d328969e6420c3e600cbc3b532ec2d7c8902539b0cc7d1d5e27ae3c3 + { + { 0x000001cf70a13d11, 0x000000d3a0a643b9, 0x0000000000000001, 0x00000706eda6e133, 0x000003ea525e523f, 0x00000144be16f619, 0x0000000000000000, 0x0000047c1b131c08, }, + { 0x000001ba1891ec60, 0x000000640c93d2c5, 0x0000000000000000, 0x0000042758070fc7, 0x000004d1434f7029, 0x0000051c70c9b530, 0x0000000000000000, 0x0000055e9bebd5ad, }, + { 0x0000033f3ae054d4, 0x000002d70f2c039b, 0x0000000000000000, 0x0000059cc0754666, 0x0000006cd36cadc8, 0x00000087c6f5c5ab, 0x0000000000000000, 0x000000d443cd9a9f, }, + }, + // compressed: 0xe3b29966122941ef01138d704708d371bdb08211d0325432368b1e00071b37c5 + { + { 0x0000070a3046e65f, 0x000001126699b2e3, 0x0000000000000001, 0x0000008d5ef8790b, 0x0000069e46415baa, 0x0000016808c1585e, 0x0000000000000000, 0x000004e930d0b75c, }, + { 0x00000246a49e38c2, 0x000001a2603de825, 0x0000000000000000, 0x00000126fcb4db61, 0x0000015ff5769dbb, 0x000001e8b3632543, 0x0000000000000000, 0x00000652179ac034, }, + { 0x00000561c4a8a803, 0x000005c74c211dc2, 0x0000000000000000, 0x00000149e3c37184, 0x000000b0d7f3e343, 0x0000008a6e360e00, 0x0000000000000000, 0x0000001d5f606f21, }, + }, + // compressed: 0x1dae750f5e80405130cc6226e3fb02ec6d3992ea1edfeb2cb35b43c54433aec4 + { + { 0x000005c13748042f, 0x0000005e0f75ae1d, 0x0000000000000001, 0x000001b9bba543ee, 0x0000039c39a43686, 0x0000078f75491cb6, 0x0000000000000000, 0x000002e327c9b055, }, + { 0x000001754232c0aa, 0x00000459860a2810, 0x0000000000000000, 0x0000012e28539e51, 0x0000002c6611c81f, 0x00000435bb32cebd, 0x0000000000000000, 0x0000014678f1d82e, }, + { 0x0000008669079a08, 0x000007b00bef8c99, 0x0000000000000000, 0x000003cdd83a756b, 0x000000613598ceb4, 0x000000895c66898a, 0x0000000000000000, 0x000000c5aa4436ff, }, + }, + // compressed: 0x3c7af73a26d485754d14e9fe117baedf3d19f759807006a537209283539af294 + { + { 0x0000019c18d0936d, 0x000004263af77a3c, 0x0000000000000001, 0x000006dc25b2d7f5, 0x000002976da54318, 0x000000402cfb8c9e, 0x0000000000000000, 0x0000025be1f6a631, }, + { 0x00000183418a4985, 0x0000052289aeb0ba, 0x0000000000000000, 0x000006a6081bee2f, 0x00000754562a3750, 0x00000122037a5067, 0x0000000000000000, 0x000006e093eda923, }, + { 0x00000721aed5b228, 0x0000077eb9ec47fb, 0x0000000000000000, 0x00000087e5c36e66, 0x000000b81dfbc978, 0x00000029e534a707, 0x0000000000000000, 0x000000bce46cb8f7, }, + }, + // compressed: 0x3eb3082f0639937dbe329fdfe559965bfdbd9e1fad3dffacb74973cb5505b2f0 + { + { 0x000004074571217f, 0x000001062f08b33e, 0x0000000000000001, 0x000003c555112c4c, 0x000003ddfa0c8f19, 0x000006d68fcf5efe, 0x0000000000000000, 0x000003c2af281da3, }, + { 0x0000029b2b6aeb7f, 0x000003e657cfb267, 0x0000000000000000, 0x00000103f9b7ca22, 0x0000034eabc9a0a3, 0x000007349b7acff3, 0x0000000000000000, 0x0000006404a44667, }, + { 0x000004dde59d741a, 0x0000056e5967977e, 0x0000000000000000, 0x0000059a2108ea6a, 0x000000efe220988f, 0x000000e1640aab96, 0x0000000000000000, 0x0000001c68731e94, }, + }, + // compressed: 0x28194b3e090b931840f6f3730ee1e37d6f5d3973da1732f43e9c37cad6de8a6f + { + { 0x000002d93ecebde8, 0x000003093e4b1928, 0x0000000000000001, 0x0000023dfdb7b29a, 0x0000030fd82db6c6, 0x000003ed399caeb7, 0x0000000000000000, 0x000006817ef34a4f, }, + { 0x00000045e0f6cfa4, 0x0000067ec8031261, 0x0000000000000000, 0x00000356523c6802, 0x00000362372743fa, 0x00000379c3ef4321, 0x0000000000000000, 0x0000053de97f9967, }, + { 0x00000426cfa1049e, 0x000005f78f8439cf, 0x0000000000000000, 0x00000121ee5f8688, 0x000000bca80a6d14, 0x000000df15bdad94, 0x0000000000000000, 0x000000f01bce5d91, }, + }, + // compressed: 0x7227f400f3ea1f67aa418c2a2aeb728f92323797d77fa129a687b532adc6ef1d + { + { 0x00000545089ae7bc, 0x000002f300f42772, 0x0000000000000001, 0x0000061aef5195a7, 0x000002a8852408dc, 0x000007ebcb9b9949, 0x0000000000000000, 0x000003fdbd72ed17, }, + { 0x000007e9a0c15c50, 0x00000188354ce3fd, 0x0000000000000000, 0x00000762bdb5eb77, 0x00000128ce438ac1, 0x000003587a629a17, 0x0000000000000000, 0x000005d28672991f, }, + { 0x000000e2377b3c71, 0x0000023dcbaca8aa, 0x0000000000000000, 0x000000523049de45, 0x0000001d6517ece3, 0x0000003bdf8d5a65, 0x0000000000000000, 0x0000008cfa4037f1, }, + }, + }, + { // 25 + // compressed: 0xa9e77a56bdf41ebcbd9844d6b24c623fc84e1f2cd26410e4014038baa5c5f9ae + { + { 0x0000019a74ef4fad, 0x000004bd567ae7a9, 0x0000000000000001, 0x000005f6fa9e74cd, 0x000000e984d23d80, 0x00000269160fa764, 0x0000000000000000, 0x000001e878f7cc87, }, + { 0x000004611452bfd2, 0x0000009317b783de, 0x0000000000000000, 0x000005e4cf56dfad, 0x0000023c797964e0, 0x00000384001e4106, 0x0000000000000000, 0x0000045f2938255b, }, + { 0x000004ea09efb3da, 0x000000fd8932cb59, 0x0000000000000000, 0x000003c609e2f392, 0x000000e388789eb7, 0x0000005df38b4b74, 0x0000000000000000, 0x000000b4eb194721, }, + }, + // compressed: 0x94dc611d8b91e08c6630819a4636ed8dd3aae8af29a8e6d43fd439f62780738a + { + { 0x00000710d9462495, 0x0000018b1d61dc94, 0x0000000000000001, 0x0000022f57ffe1cc, 0x0000005fd05a43e5, 0x00000414d7f45569, 0x0000000000000000, 0x000007a524fd8afe, }, + { 0x000007aa007456e4, 0x000000260cd19c12, 0x0000000000000000, 0x00000073087301e9, 0x000006b72ece3d40, 0x0000039d43fd4e6a, 0x0000000000000000, 0x0000026a69c105c3, }, + { 0x000000eaa31b4b55, 0x00000637b4d91a6a, 0x0000000000000000, 0x000004019c343786, 0x0000005b75c48967, 0x00000014e7004fec, 0x0000000000000000, 0x0000004d3194c6a2, }, + }, + // compressed: 0x0ed93d5e2f703d2e8653d2e418093f9e6aa94d02f63e775e3233fa4a0c4b003c + { + { 0x0000018832b0ba78, 0x0000002f5e3dd90e, 0x0000000000000001, 0x000006ac06f4b82b, 0x000005c8d0148fe6, 0x0000077b0126d4b5, 0x0000000000000000, 0x0000032fe366a3c3, }, + { 0x0000039ff17ceca6, 0x0000024a70c5c7ae, 0x0000000000000000, 0x000000d89e735528, 0x000004aeb0708a81, 0x000007a33325e773, 0x0000000000000000, 0x000001fd2173ed32, }, + { 0x000000e060c7de49, 0x00000278fc246393, 0x0000000000000000, 0x000004728a1296a0, 0x0000003f687b9893, 0x0000007800961895, 0x0000000000000000, 0x000000d687fa039a, }, + }, + // compressed: 0xf30e763e5842c7b590b90aeeb952dc753f922b07c22714bff0d9f06f2d0b4273 + { + { 0x0000054b4697c544, 0x000002583e760ef3, 0x0000000000000001, 0x000006cb9e851e06, 0x000004f5d5233c2d, 0x000003e10395c91f, 0x0000000000000000, 0x0000044b4cfdf9b9, }, + { 0x000001fff7f8f4eb, 0x000001573216b8e8, 0x0000000000000000, 0x000004471895e59e, 0x0000052f7142868b, 0x0000070d9f0bf142, 0x0000000000000000, 0x0000034bc9eda8ab, }, + { 0x00000057f7e1237c, 0x000005d7714ae7b8, 0x0000000000000000, 0x0000063d64e44f18, 0x000000b4d1ae20b6, 0x000000e684165adf, 0x0000000000000000, 0x0000007b6ac65fd4, }, + }, + // compressed: 0xd5259882b190492e91899a3e87ebeaedf84a704c393df0ee0e2bdf95a47e1959 + { + { 0x0000062bf75dd9d8, 0x000000b1829825d5, 0x0000000000000001, 0x00000019e4e55aae, 0x00000098a4cf3939, 0x0000069ca638257c, 0x0000000000000000, 0x000006e0b78acd52, }, + { 0x000004eb34be8ddd, 0x000003513225c932, 0x0000000000000000, 0x000005f25d209c2c, 0x00000575f131bf2d, 0x000005f2b0eeef03, 0x0000000000000000, 0x00000570cc0c7ce2, }, + { 0x000004345ec7d8e5, 0x000003b7abae1cfa, 0x0000000000000000, 0x0000039ded0de9f8, 0x000000086435be93, 0x000000b232fd492b, 0x0000000000000000, 0x0000008bd5fb83e9, }, + }, + // compressed: 0xedb1cccf24460eb695035cbd92c2db59c98104dc1d9da03140d9565deace73bf + { + { 0x000001858045d72b, 0x00000624cfccb1ed, 0x0000000000000001, 0x000007d10a4e8dc6, 0x00000332b59116e3, 0x0000068eee0240e4, 0x0000000000000000, 0x0000003f8aabd77d, }, + { 0x000005e0ca2d3080, 0x0000038072b6c1c8, 0x0000000000000000, 0x000001366736f4f7, 0x0000062dade941a3, 0x0000056d94031a09, 0x0000000000000000, 0x000006218db60c12, }, + { 0x000001308bea8b3c, 0x000005676f0a4af5, 0x0000000000000000, 0x000002f95c01f913, 0x000000b4bdd79006, 0x0000007ee79dd4ba, 0x0000000000000000, 0x0000004c0b11224c, }, + }, + // compressed: 0x42e576c63c8e814cadccce03932c425e089f12b4cacc07ecb84344b210faed0d + { + { 0x000004a68360ff04, 0x0000063cc676e542, 0x0000000000000001, 0x000007d5b82b522a, 0x0000053989439aa8, 0x000006655a094f84, 0x0000000000000000, 0x000001793760cfe9, }, + { 0x0000043cde8b3ee0, 0x000001d995a99031, 0x0000000000000000, 0x000004b83d7dc76c, 0x00000615d57831b2, 0x000004443b8ec07c, 0x0000000000000000, 0x000007a9408a5b4d, }, + { 0x0000070f64ff79d9, 0x0000017908b24c0f, 0x0000000000000000, 0x000004dbc58d1a7e, 0x000000a95a185c9c, 0x0000001bdbf42164, 0x0000000000000000, 0x000000c5d965754e, }, + }, + // compressed: 0x7428b6af36280792a504e179855ecd5f4aa130c6ad01ad5a983f6675503d91e1 + { + { 0x0000015261152b3d, 0x00000036afb62874, 0x0000000000000001, 0x000005361a3231da, 0x000004685cb5a638, 0x000000d6e31850a5, 0x0000000000000000, 0x000000a89fcaca67, }, + { 0x000003bafa3cbdaf, 0x0000042094b240e5, 0x0000000000000000, 0x000004004e01b8c5, 0x0000066d8be7482c, 0x00000663f985aad0, 0x0000000000000000, 0x00000405d5c02d80, }, + { 0x0000052588d5f43b, 0x0000017f357a15e7, 0x0000000000000000, 0x000003e91d60ca50, 0x0000005cb3f23352, 0x000000c3227aa0ea, 0x0000000000000000, 0x0000007bb7854263, }, + }, + }, + { // 26 + // compressed: 0x14bb9627a257aaf321da079bb7ba3a881c39a03118e24be5f90532d838fbe7de + { + { 0x000007f9ce5ec54b, 0x000007a22796bb14, 0x0000000000000001, 0x000005cb41446a8e, 0x000003e3f87c4a8a, 0x0000010c18d01c8e, 0x0000000000000000, 0x00000046931e463c, }, + { 0x000005e261b35b81, 0x000000fb443e754a, 0x0000000000000000, 0x00000126ff2a71bf, 0x0000004b36b02800, 0x000003205f9e54be, 0x0000000000000000, 0x000004a0d0946af9, }, + { 0x0000040e70a9ae30, 0x00000220eaeade6c, 0x0000000000000000, 0x00000296b3f6a50d, 0x000000f12d062958, 0x000000bdcff671b0, 0x0000000000000000, 0x000000c3a0c67937, }, + }, + // compressed: 0xdf73fcf8bc28a3adfc37f0a65d6984ee09a9c238dbb47f63dc7b06f82dac235b + { + { 0x00000135ffdb2566, 0x000000bcf8fc73df, 0x0000000000000001, 0x00000153ee80527b, 0x000001402a9f7601, 0x0000026d9c615484, 0x0000000000000000, 0x000003820a874167, }, + { 0x0000016d176c6e89, 0x00000606ff95b465, 0x0000000000000000, 0x000003cdb1b35a57, 0x000002ed7f56f1b3, 0x00000067bdc637fb, 0x0000000000000000, 0x0000015dedc0e711, }, + { 0x00000716f5ae25e0, 0x000007ba11a5769b, 0x0000000000000000, 0x000007a23c66abeb, 0x000000dd2cbfb08f, 0x000000b647585bf0, 0x0000000000000000, 0x000000f3737773bb, }, + }, + // compressed: 0x74739f8eae7d99d11608bbcff8a232a00a5f446d12ba6ccd34b8cc0a4611a81b + { + { 0x000005406a3126c2, 0x000005ae8e9f7374, 0x0000000000000001, 0x000001fb0c429954, 0x00000214f2dcbd41, 0x0000050936a22f85, 0x0000000000000000, 0x000004c5387322dd, }, + { 0x00000118727d766a, 0x0000076102da332f, 0x0000000000000000, 0x000005d9ecee102d, 0x000007d21476c0c6, 0x000004cb834cd6cb, 0x0000000000000000, 0x0000024faf22eaab, }, + { 0x000003498e0ea1a3, 0x00000280ca8be33e, 0x0000000000000000, 0x000003851802b35d, 0x000000a0cbe2b193, 0x0000003750228c15, 0x0000000000000000, 0x0000007303e73cb1, }, + }, + // compressed: 0xde6fe66da5df45c83a48402c00a552e132f6b4c763e1d2e9651bbcdc2e45f4b0 + { + { 0x0000027559230a93, 0x000007a56de66fde, 0x0000000000000001, 0x00000782c5759740, 0x000004a28a549e5a, 0x000000b1e3da7b19, 0x0000000000000000, 0x00000639e0752738, }, + { 0x000004de8ba31f71, 0x00000009075908bb, 0x0000000000000000, 0x00000397d990ada4, 0x000002cd0fd3a85a, 0x000003c1b65e9d2e, 0x0000000000000000, 0x000003f24698844f, }, + { 0x000004745a3da583, 0x000003854a9400b1, 0x0000000000000000, 0x000007e84d15a7e6, 0x00000071b8106e0b, 0x00000061e88a5db9, 0x0000000000000000, 0x000000c65b3434b2, }, + }, + // compressed: 0xa7840ced11fd09bf3a699f0d8171f0637987cf572d8c9021a24bf68af27d5a3a + { + { 0x00000315b807cba6, 0x00000511ed0c84a7, 0x0000000000000001, 0x000004be511beac7, 0x00000381b714b385, 0x00000616abe7c3bc, 0x0000000000000000, 0x000007cf802fcd32, }, + { 0x0000029e1afed76d, 0x000003ed2757e13f, 0x0000000000000000, 0x000004d99e5b9b5a, 0x000006d4a57bb1d9, 0x00000764ba221908, 0x0000000000000000, 0x00000481f63e19cf, }, + { 0x000004608f1f7ef1, 0x0000058fc1c60436, 0x0000000000000000, 0x000006914e01d7b4, 0x0000001649e9108f, 0x00000074b4fbe515, 0x0000000000000000, 0x00000069f9ee88ea, }, + }, + // compressed: 0x98aacf78ab1dbba5f2720b1967a2ed5c8e60920a11c90993b074b32f04a31901 + { + { 0x0000004c789767ca, 0x000005ab78cfaa98, 0x0000000000000001, 0x0000009ce8c2177d, 0x0000044141fcafd4, 0x0000048885493047, 0x0000000000000000, 0x00000472d9415158, }, + { 0x00000328cfb832fc, 0x0000016e5e54b763, 0x0000000000000000, 0x000002ba182cf45b, 0x000007a63f755de8, 0x000003374b09309c, 0x0000000000000000, 0x00000620a73f5659, }, + { 0x000002e1c5372ce3, 0x00000173b6899c64, 0x0000000000000000, 0x0000019a7697d9a2, 0x0000007a77b82c9b, 0x000000023346085f, 0x0000000000000000, 0x000000ad8111e3db, }, + }, + // compressed: 0x028ff324ac5f1b58bd0ce3bafee90ba9f092cf8a0269219a8f035983a47e8b83 + { + { 0x0000051110a86e17, 0x000007ac24f38f02, 0x0000000000000001, 0x0000002199316ff8, 0x000001bb128394c4, 0x000004814567c978, 0x0000000000000000, 0x000002d5ad7798ba, }, + { 0x000006b65f466da7, 0x0000046197ab036b, 0x0000000000000000, 0x000004f1a9f3e9df, 0x00000108b87f9153, 0x0000059038f9a216, 0x0000000000000000, 0x0000069eb650971a, }, + { 0x0000035fce20c82d, 0x000002a42fa7faeb, 0x0000000000000000, 0x000000bd274a0baa, 0x00000012ce98d732, 0x0000000716fd4906, 0x0000000000000000, 0x000000dcbc6204b2, }, + }, + // compressed: 0x226206630efb04333fbaac87890635fba361108c772419bd208683d143ad58b0 + { + { 0x000002f587e593fb, 0x0000030e63066222, 0x0000000000000001, 0x000007fde57663d0, 0x000000f00a661f36, 0x0000023bc60830d1, 0x0000000000000000, 0x0000055ed64ca7cd, }, + { 0x000003a7ce362d8c, 0x0000059747e6609f, 0x0000000000000000, 0x000005d4c2064781, 0x0000028dba8b491c, 0x00000038620bd192, 0x0000000000000000, 0x0000063dc99bdc78, }, + { 0x0000052667b77b29, 0x000007ecd41a261e, 0x0000000000000000, 0x000000170f7ce288, 0x00000011ea228f13, 0x00000060b15a87a3, 0x0000000000000000, 0x0000004ca93f49df, }, + }, + }, + { // 27 + // compressed: 0x6e663faf498546dba50e4af104cf7fd7470cbaa4f73ff23d853cce32e1df103a + { + { 0x000002461e6bf9d6, 0x00000549af3f666e, 0x0000000000000001, 0x0000068aea17cea0, 0x00000251323a69ec, 0x000007fbd25d0623, 0x0000000000000000, 0x0000017e98f96078, }, + { 0x000006f4b02e83ab, 0x00000141d4bb68d0, 0x0000000000000000, 0x000003f83fbc0fe9, 0x0000001e0ffd4557, 0x000004e3c853df23, 0x0000000000000000, 0x000001e5d1517532, }, + { 0x0000048c16cff1dd, 0x0000075dff3c13c5, 0x0000000000000000, 0x000004bf545518e8, 0x000000324dc3b8c8, 0x0000007421bfc265, 0x0000000000000000, 0x0000003f43a03b0c, }, + }, + // compressed: 0xab94dfd100acdc38e90d08d1dd2b712e62e2d5fd3ee9137fe5019aee18edfc73 + { + { 0x000005947d599832, 0x00000400d1df94ab, 0x0000000000000001, 0x0000010863139cb3, 0x000003ba2702c990, 0x0000049f7eeaf131, 0x0000000000000000, 0x0000076456b1c499, }, + { 0x0000062aa419900a, 0x00000101bd271b95, 0x0000000000000000, 0x00000407d9a0d63d, 0x0000075cf3399f6f, 0x000001a01e57f13e, 0x0000000000000000, 0x00000064f448d77c, }, + { 0x00000079195b68df, 0x000000b9c4af7744, 0x0000000000000000, 0x000002924f699f16, 0x000000ee6ac778d4, 0x000000e7f9da31dd, 0x0000000000000000, 0x0000003e84d6e037, }, + }, + // compressed: 0x5225a191c8357ef1769c5e5753816bb73e729b0d6f4083fa38e4a73f1bbb768b + { + { 0x0000064c41911c01, 0x000005c891a12552, 0x0000000000000001, 0x000001f97f92939b, 0x00000535f9878a23, 0x0000003786cdb91f, 0x0000000000000000, 0x00000231ccddc00b, }, + { 0x0000044584bdf924, 0x000003d38ede2fc6, 0x0000000000000000, 0x000000956dc11718, 0x0000031b0905875d, 0x0000027e438fa834, 0x0000000000000000, 0x0000072a95522e56, }, + { 0x000007c68edee05e, 0x000002ddae054d5d, 0x0000000000000000, 0x000006f99dc72f51, 0x0000009c35ea4e3a, 0x00000016ed76367f, 0x0000000000000000, 0x000000f6dbac3d6e, }, + }, + // compressed: 0xc7d201abf9ab3057183b1440dc76fb1681b2cba065be6c86fe6aff9b659bfa53 + { + { 0x000001e850f33d92, 0x000003f9ab01d2c7, 0x0000000000000001, 0x000000e994885455, 0x000006dec6fe2ded, 0x00000732d065d940, 0x0000000000000000, 0x0000039f5e6b2d78, }, + { 0x0000019ab9f6f5b8, 0x00000287630ae615, 0x0000000000000000, 0x000005da9cad8299, 0x000001d2f4fad962, 0x000007f6afe866cb, 0x0000000000000000, 0x00000461f50181bb, }, + { 0x000005e663e93d82, 0x0000045beddb7100, 0x0000000000000000, 0x00000610e9759996, 0x000000e07d379d5e, 0x000000a7f536cb37, 0x0000000000000000, 0x000000731b27cb89, }, + }, + // compressed: 0xf2e3e7d2607c87c3b18b8230a0aa343b38f19e73e7263e287705c302909c9ce9 + { + { 0x0000016733e248f3, 0x00000460d2e7e3f2, 0x0000000000000001, 0x000007235946f1cc, 0x00000678508581bb, 0x00000373b9cf789c, 0x0000000000000000, 0x00000123c0da74ba, }, + { 0x000007e14be3897a, 0x00000051763870ef, 0x0000000000000000, 0x000004bb2fbe60d4, 0x00000191b13d43f8, 0x00000430577283e2, 0x0000000000000000, 0x000004dd90728cdd, }, + { 0x000002f6784a1c56, 0x000000ecd2aa80c2, 0x0000000000000000, 0x000006485c62d733, 0x000000a76136bbbe, 0x000000d339392005, 0x0000000000000000, 0x000000a395e618df, }, + }, + // compressed: 0xc754ac189af97a730fb31cc5dc783390c70ce14c33bc892b9ae9f889c129ae12 + { + { 0x000007427674e00a, 0x0000019a18ac54c7, 0x0000000000000001, 0x000000cb1f0d01cf, 0x0000031ee7999266, 0x00000619a6708663, 0x0000000000000000, 0x00000290e84e2711, }, + { 0x0000074f7e74c174, 0x0000039661ee6f5f, 0x0000000000000000, 0x0000069ef5d533d8, 0x0000003fdaa37585, 0x0000078e99a2b89b, 0x0000000000000000, 0x000006ba5ea55ca7, }, + { 0x0000018c3a15c285, 0x00000640cde37314, 0x0000000000000000, 0x0000003747bf30e8, 0x000000aa09545247, 0x000000255c538313, 0x0000000000000000, 0x000000bfa29fd2b1, }, + }, + // compressed: 0x8ecb93bf5efe423c5f56d43651a8dfbee82042889e85f0e028d12507963fd77d + { + { 0x000005df2845ab2c, 0x0000065ebf93cb8e, 0x0000000000000001, 0x000004fe68059829, 0x000001eb200171a3, 0x000002cf44211074, 0x0000000000000000, 0x0000029d5a2bd614, }, + { 0x000007fd3276bb85, 0x0000028acbe7885f, 0x0000000000000000, 0x000005e47cb621a4, 0x000006474d14daaf, 0x0000025d128e0f08, 0x0000000000000000, 0x000003470a413672, }, + { 0x0000001a5246c429, 0x000002fb7ea144db, 0x0000000000000000, 0x000005d5cc19cb6e, 0x000000127fe4dcb0, 0x000000fbae7f2c0e, 0x0000000000000000, 0x0000005eb379790d, }, + }, + // compressed: 0x01c391b660d541701ee7d7ad3f1b20858555331163e1c216b12808013d5ea5aa + { + { 0x000005429917135f, 0x00000560b691c301, 0x0000000000000001, 0x000002e60c07444f, 0x0000046cdf3bd568, 0x000000b18899aac2, 0x0000000000000000, 0x000006417edae432, }, + { 0x000007a07af0708f, 0x000002fce3ce083a, 0x0000000000000000, 0x00000043a21daa32, 0x0000051af4a7e774, 0x000000828b116c2e, 0x0000000000000000, 0x00000768664352b4, }, + { 0x000006b46e447d59, 0x00000614806cfeb7, 0x0000000000000000, 0x0000010b1538b5d1, 0x000000a8b1685c5c, 0x000000554abc7a02, 0x0000000000000000, 0x00000027d2009514, }, + }, + }, + { // 28 + // compressed: 0x7f873b19c9002ebb6b50dce090a8e3ec9f64de36c0b7f3ec1a9ede98080446df + { + { 0x00000045832fcedb, 0x000000c9193b877f, 0x0000000000000001, 0x00000116297bf48d, 0x000006e55ba7ff7b, 0x000003e01b6f324f, 0x0000000000000000, 0x000002aba34b5ee3, }, + { 0x0000057f0c6e73b1, 0x0000038a0d7765c0, 0x0000000000000000, 0x0000060d0697206e, 0x000003ce45e32bc0, 0x000005e9e1aecf3b, 0x0000000000000000, 0x0000055e835e1971, }, + { 0x000007e8e35b26b9, 0x000007b38ea24383, 0x0000000000000000, 0x000002a744ec8b53, 0x000000e726fd1029, 0x000000be8c081131, 0x0000000000000000, 0x00000059f149d123, }, + }, + // compressed: 0xa26bd0177e48b52c6b1950391c38d224308a9785819c65d7f6a4d691287f6ffa + { + { 0x0000058707110f67, 0x0000007e17d06ba2, 0x0000000000000001, 0x0000058d6a9aef49, 0x000005266139b543, 0x00000640c2cbc518, 0x0000000000000000, 0x0000029628cf5fea, }, + { 0x00000716a92db27f, 0x000002032d6596a9, 0x0000000000000000, 0x000007b7216fa13f, 0x00000252a097cb16, 0x0000056a4f6d7659, 0x0000000000000000, 0x0000045941d4c21b, }, + { 0x0000037530274df0, 0x0000009348e070e5, 0x0000000000000000, 0x000003c3b982f96c, 0x00000040937adcb0, 0x000000f4defe5123, 0x0000000000000000, 0x000000c02355bf8a, }, + }, + // compressed: 0x90f8cb02c8d0de63aa6aff0dca98d0fb99edb6b9fd0a4d621e0b3479b718ce69 + { + { 0x0000026dcf95f83c, 0x000000c802cbf890, 0x0000000000000001, 0x00000528b29879cb, 0x000003f9ccc7bd2d, 0x0000057edcdb76cc, 0x0000000000000000, 0x000002210c4f91a9, }, + { 0x000005120e2becf2, 0x000007ed554c7bda, 0x0000000000000000, 0x000007d2125a3dea, 0x0000062f9e0d6a1e, 0x00000340b1e624d0, 0x0000000000000000, 0x000007101f1127e0, }, + { 0x000005f1fa1585c4, 0x000007ef42632837, 0x0000000000000000, 0x000003746ab8f351, 0x000000df8b983616, 0x000000d39c316ef2, 0x0000000000000000, 0x0000002ab2d675ca, }, + }, + // compressed: 0xca24517e1631ff09df45c7d98b15e40be556f57e227d2b2938d1b6af41e2a43a + { + { 0x000001d23f9179a2, 0x000001167e5124ca, 0x0000000000000001, 0x000000bf2a3305f5, 0x0000075aa9f90a45, 0x000006913f7aab72, 0x0000000000000000, 0x000000d12aa4e975, }, + { 0x000002dbb9e8c4e7, 0x000000e8bbe13fe6, 0x0000000000000000, 0x00000524d8659827, 0x000005f4dda1307d, 0x0000036d138292b7, 0x0000000000000000, 0x0000007a36c083ab, }, + { 0x000003fe0c48c65f, 0x0000042f90562f67, 0x0000000000000000, 0x0000052160fe3e8b, 0x0000001a446ed0f6, 0x0000007549c4835f, 0x0000000000000000, 0x00000065f954dc8d, }, + }, + // compressed: 0xdfcc872773a40732f8e313f20819e3174e960df6d7ecb2d5e90b60c236636ff4 + { + { 0x0000068dc57d9af5, 0x000004732787ccdf, 0x0000000000000001, 0x00000345ab6c971c, 0x0000026f1177f251, 0x0000066bfb06cb27, 0x0000000000000000, 0x0000054501a20c36, }, + { 0x00000617be4f78ad, 0x0000027c7f0640f4, 0x0000000000000000, 0x0000006e63e7e95e, 0x000003d6a5caac01, 0x00000600be9d5b2e, 0x0000000000000000, 0x0000056629333596, }, + { 0x000004f82f4bb677, 0x0000005f8c6423c8, 0x0000000000000000, 0x0000078a23adca65, 0x0000008c4fd39dfd, 0x000000e8dec66d84, 0x0000000000000000, 0x000000f6922e00fd, }, + }, + // compressed: 0xdda253dd281b34543ffc42df5b9017aaf4f8d24dd992f50f7dd38ce00f62031d + { + { 0x0000035cab84b064, 0x00000328dd53a2dd, 0x0000000000000001, 0x000002cda2b4e554, 0x000006223d8ae706, 0x0000016ca6e97c7a, 0x0000000000000000, 0x0000025f3eea3cec, }, + { 0x000006778285b0bf, 0x0000005f87ea8683, 0x0000000000000000, 0x000003a30ff84046, 0x0000044fd7b476ad, 0x000000cd37d0ff59, 0x0000000000000000, 0x0000068ec4c2eabb, }, + { 0x00000125e0434a27, 0x000002a85e416f7d, 0x0000000000000000, 0x0000067b43f50845, 0x000000245746edf0, 0x0000003a06c41fc1, 0x0000000000000000, 0x000000058e17ea56, }, + }, + // compressed: 0xe1728d45bf32e5acb53cb77ce068e75be7bd8bee947dcf56033ab4fee39706eb + { + { 0x0000044b5d0b2fbb, 0x000002bf458d72e1, 0x0000000000000001, 0x0000004adf62a3c0, 0x0000030f60e840ae, 0x000006ca7745def3, 0x0000000000000000, 0x000004ac24f86954, }, + { 0x00000110595450fd, 0x000006e796b59ca6, 0x0000000000000000, 0x000005b48bb6d91e, 0x000001ef5e0e044a, 0x00000343a0356cf7, 0x0000000000000000, 0x000001b2fae9c9cb, }, + { 0x00000105715e401d, 0x0000056f9da381f2, 0x0000000000000000, 0x000004fbc003bc1d, 0x0000004c669e1481, 0x000000d60d2fc7fd, 0x0000000000000000, 0x0000003986fe8688, }, + }, + // compressed: 0xb9aecec9f15666d76a65e518f8155b1c34234c843228e7263868192f776f34ba + { + { 0x0000065a5cc7324f, 0x000006f1c9ceaeb9, 0x0000000000000001, 0x00000112e2da6ac8, 0x000005edae22d60c, 0x000004194226119a, 0x0000000000000000, 0x0000036ec7633931, }, + { 0x000000d5244a11ea, 0x000004acad5aecca, 0x0000000000000000, 0x0000050a3dba5aaa, 0x0000000314afb18a, 0x0000019683826e72, 0x0000000000000000, 0x0000077c5d096074, }, + { 0x0000074187130394, 0x000000716c57e063, 0x0000000000000000, 0x000003a6f40cc6c7, 0x000000d8d0138207, 0x0000007468deee5e, 0x0000000000000000, 0x0000000b22373edd, }, + }, + }, + { // 29 + // compressed: 0xefea2e51f3ac495349cbc11cd341c1208d689aa9070c1824172d4bc6d1f95ed5 + { + { 0x00000183f5df0ebb, 0x000004f3512eeaef, 0x0000000000000001, 0x000000ba3b73bd08, 0x0000018505d9cc70, 0x00000603d4cd3446, 0x0000000000000000, 0x000007cc5a04a379, }, + { 0x0000058995982673, 0x00000039692a6935, 0x0000000000000000, 0x000005f7e186d4ee, 0x00000270c622cf11, 0x000004b2d1724180, 0x0000000000000000, 0x0000001749d5737f, }, + { 0x00000703cdd63d44, 0x0000048305074c73, 0x0000000000000000, 0x000001892bbc228e, 0x000000d679d9f354, 0x000000aabdf3a38c, 0x0000000000000000, 0x000000cebe9bc267, }, + }, + // compressed: 0x1db3da3bd9f62fa1fe2d659d0fd825078794be9af34f9c01433ccd82b850f460 + { + { 0x000002036b1782fc, 0x000006d93bdab31d, 0x0000000000000001, 0x000006c321e5c0ca, 0x000006ecb4b2039f, 0x000007f9cd5f4a43, 0x0000000000000000, 0x0000060c3a8011d0, }, + { 0x000005b07681c58a, 0x000004a5bfd425fe, 0x0000000000000000, 0x00000337f440296b, 0x0000064c520d0dcb, 0x000004d3c43019c4, 0x0000000000000000, 0x000006dac804e5f1, }, + { 0x0000019205b205b2, 0x0000041c97603e75, 0x0000000000000000, 0x0000013f2da7275c, 0x00000027b33bee02, 0x000000c1e8a17105, 0x0000000000000000, 0x000000380dbd3cab, }, + }, + // compressed: 0xaa696dff402bd5ffbb4940dc180b533497984da32f5c4a5e2dba327d8e6f0978 + { + { 0x000002d6a33ec4e2, 0x00000340ff6d69aa, 0x0000000000000001, 0x000002650dfa5ce7, 0x000001e2b194228a, 0x00000617d1a6cc4b, 0x0000000000000000, 0x0000063eb801b92d, }, + { 0x000005dc11d321ef, 0x00000009377ffaa5, 0x0000000000000000, 0x000006a8f1941555, 0x000002db60d9ca14, 0x0000032ba2d5e4a5, 0x0000000000000000, 0x00000091abe4f09c, }, + { 0x0000059823e4e2f8, 0x000004d14c2c6371, 0x0000000000000000, 0x000007e71278a922, 0x00000099e7143fd8, 0x000000f012df1cfa, 0x0000000000000000, 0x0000006e795a744c, }, + }, + // compressed: 0xadbbdd89fba8bef1cbaeae61bc2ccb3b9d8d9b1fbba7588f86a61251da7e5421 + { + { 0x0000034d82c9f57c, 0x000000fb89ddbbad, 0x0000000000000001, 0x00000139fd5986d3, 0x000006d9a0c66dad, 0x000003dd8fcdc6ce, 0x0000000000000000, 0x00000203dd988cdc, }, + { 0x00000268a6d6528c, 0x000005d5d97e37d5, 0x0000000000000000, 0x00000147019bdfbd, 0x000004419fc9e9c4, 0x0000012a6868f58a, 0x0000000000000000, 0x00000254df4b72ba, }, + { 0x0000007f2ff78492, 0x000004ef2cb2f186, 0x0000000000000000, 0x000007d09cb22544, 0x0000000081e7b28a, 0x00000042a8fdb4a2, 0x0000000000000000, 0x000000c6aa146694, }, + }, + // compressed: 0x497b54724558ba9be008c4e2fac605f38df134c769fae8607a767daaaf2ba9b9 + { + { 0x000006edb569cf37, 0x0000004572547b49, 0x0000000000000001, 0x00000713e693274e, 0x0000004875b5eb2e, 0x00000534e39a78c6, 0x0000000000000000, 0x000002b075c559cd, }, + { 0x000004a5dc2ca0fa, 0x000000811c13774b, 0x0000000000000000, 0x0000037a6eb3a498, 0x00000778f51ea7c0, 0x000007d767a60e8f, 0x0000000000000000, 0x0000049c4cd70525, }, + { 0x0000045e10a6c032, 0x000007cc171beb8b, 0x0000000000000000, 0x0000017d8e15dda3, 0x0000007dd4c58fb5, 0x0000007352575f54, 0x0000000000000000, 0x000000d086d40ccb, }, + }, + // compressed: 0x7c1020e817d3561e65e90a84446826c57afc0f32c6a1e0c1721461919c6673d3 + { + { 0x000005e8202f3f27, 0x00000317e820107c, 0x0000000000000001, 0x000004ab9a0e5257, 0x000004ead1c6120b, 0x000000e31907fe3d, 0x0000000000000000, 0x000002c42d968f65, }, + { 0x0000072eb6178046, 0x0000015d2ca3cada, 0x0000000000000000, 0x000001567f8ba502, 0x000003789f991a4e, 0x00000611472c1e0a, 0x0000000000000000, 0x00000787d11afcaf, }, + { 0x0000031d70038993, 0x0000031499a11210, 0x0000000000000000, 0x000002423c821327, 0x0000002f6dcfed15, 0x000000a6e6cd3922, 0x0000000000000000, 0x00000039696b4cf1, }, + }, + // compressed: 0xe707a0a262aa746bb1c771f0b0e011f323e20b0038e40757ac6eef822dfdc02d + { + { 0x0000006b394afc6c, 0x00000262a2a007e7, 0x0000000000000001, 0x000007841119744e, 0x0000018b25e56c1a, 0x0000021c0005f111, 0x0000000000000000, 0x000000a7dfe4a9fd, }, + { 0x0000034bf636cc98, 0x00000638f62d6e95, 0x0000000000000000, 0x000000e8e49305df, 0x000007434a24f8d0, 0x000006f6eac5707e, 0x0000000000000000, 0x000001f1cf5c58ac, }, + { 0x0000003223789263, 0x000007cc4782c3c1, 0x0000000000000000, 0x000007e5a57a58ac, 0x000000661794f1bc, 0x0000005b81fa5b05, 0x0000000000000000, 0x00000078637c366d, }, + }, + // compressed: 0x7242cbf993bc68c198dbcec71f71b8ae7a8dac34aa520e7fbb557d7e09c1ce41 + { + { 0x0000064d08948aee, 0x00000493f9cb4272, 0x0000000000000001, 0x000001d7a26d808a, 0x000006d7535650ac, 0x000001551a5646bd, 0x0000000000000000, 0x000001b66dd0ef93, }, + { 0x000007438df61e90, 0x000001db73182d17, 0x0000000000000000, 0x000003c2adbef2c3, 0x0000062d4bb7975c, 0x000007d55bb7f0e5, 0x0000000000000000, 0x0000028777d73d7c, }, + { 0x0000001f7067ba46, 0x000002bae1c47f1f, 0x0000000000000000, 0x000006ec7f527876, 0x0000006616c22684, 0x000000839d8212fc, 0x0000000000000000, 0x0000004d6899b23e, }, + }, + }, + { // 30 + // compressed: 0x8303736293f2b7e12c8acaebff79524b1413d4bf8a77fcda0f61729c1410ebfd + { + { 0x000000478f387475, 0x0000029362730383, 0x0000000000000001, 0x0000076a8766ee7a, 0x000001226ccf902a, 0x000003c55fea098a, 0x0000000000000000, 0x0000009c0785f25a, }, + { 0x000007d9678a3e09, 0x00000151459c36fe, 0x0000000000000000, 0x00000279a1d96c55, 0x0000010a5d69aab1, 0x0000072610fdafc7, 0x0000000000000000, 0x000002ce2ea58800, }, + { 0x000006c976f3d272, 0x0000012d49e7ffaf, 0x0000000000000000, 0x0000059b2fb01155, 0x00000058e13cd838, 0x000000fbd6202938, 0x0000000000000000, 0x00000011cd1d3fec, }, + }, + // compressed: 0xf9f2b80ad5092d2fdf2359c58d21b9acb96c767326348f4af519f738d73bb1cc + { + { 0x0000000a4bc130ad, 0x000001d50ab8f2f9, 0x0000000000000001, 0x00000475e515b64a, 0x000006cc280544df, 0x0000021339bb365c, 0x0000000000000000, 0x0000009f9fba8da8, }, + { 0x0000017a938695aa, 0x000003247be5e5a1, 0x0000000000000000, 0x00000152071ef091, 0x000003a3b09a25c3, 0x000007719f54a8f3, 0x0000000000000000, 0x000002e2ee8c20d3, }, + { 0x00000234e36d24f4, 0x000006b2e4863715, 0x0000000000000000, 0x000002965406eb6d, 0x0000005e3e7f0fdd, 0x000000996277ae71, 0x0000000000000000, 0x0000003343c6a781, }, + }, + // compressed: 0xbdbd96d5cd7221b440fcee984345e093b50941b44753b19f34ae660299d36bf3 + { + { 0x00000560bafa05c3, 0x000002cdd596bdbd, 0x0000000000000001, 0x000005509334b3b4, 0x0000038c606b3239, 0x000001a3da2084da, 0x0000000000000000, 0x00000798212e41ba, }, + { 0x000004abcc2fa38e, 0x000005df8816842e, 0x0000000000000000, 0x0000002cae70aa65, 0x000000c3486e3529, 0x0000066ae349fb15, 0x0000000000000000, 0x000007fab5ccc5f5, }, + { 0x000006cf8682831b, 0x0000064f81150e63, 0x0000000000000000, 0x0000051bf4452d82, 0x00000082a8d62384, 0x000000e6d7a73204, 0x0000000000000000, 0x00000082452b4570, }, + }, + // compressed: 0xc6ea93e26152652edbac332103925a846b990079cb75094680dd5a198dbb6087 + { + { 0x00000388f57ed6e9, 0x00000261e293eac6, 0x0000000000000001, 0x00000217cde6818a, 0x00000109d9856939, 0x000002e5bc804cb5, 0x0000000000000000, 0x00000347a3656658, }, + { 0x0000071904a33933, 0x000006759b65ccaa, 0x0000000000000000, 0x00000534108827c3, 0x000002d2e345cee3, 0x000005add8046097, 0x0000000000000000, 0x000003ac5f22cbf2, }, + { 0x0000054e4f2c99b7, 0x000006116a480c84, 0x0000000000000000, 0x0000055c55b6a7b5, 0x00000029c2a7d76a, 0x0000000ec1771a32, 0x0000000000000000, 0x000000d6697d3786, }, + }, + // compressed: 0xd3f271656569fc117a730e5345e8c9c63550fed4a2e73ae30bd36d2eb6c7b901 + { + { 0x000007643a78c0b2, 0x000001656571f2d3, 0x0000000000000001, 0x000005e55ac89d29, 0x0000062f24e0dad1, 0x000003d16a7f281a, 0x0000000000000000, 0x000007efe173b60f, }, + { 0x000005c04f9e7be5, 0x000001ce6f423f8d, 0x0000000000000000, 0x00000414ec71016a, 0x0000022dd2dec7d1, 0x000006dd30be33ae, 0x0000000000000000, 0x000004bade83d36e, }, + { 0x00000530fa5c7bc8, 0x0000071b27a1154c, 0x0000000000000000, 0x000004520c907d16, 0x0000004025831e12, 0x00000003738f6c5c, 0x0000000000000000, 0x000000115eb6f09c, }, + }, + // compressed: 0x4b2ccc89d21473e28d1787a211bde44bce6433fad628d5186e82d9afd5c123e4 + { + { 0x000001dc881f2533, 0x000004d289cc2c4b, 0x0000000000000001, 0x000000d9edfcb36a, 0x000006fdb39a20fa, 0x0000046b7d19b267, 0x0000000000000000, 0x0000019c7cf2e9e6, }, + { 0x0000026476c50693, 0x000000e2f1bc4e62, 0x0000000000000000, 0x000000dcbf3990bf, 0x000003a168d897ad, 0x0000059826e18d52, 0x0000000000000000, 0x000003e2dcce49de, }, + { 0x00000274149769de, 0x0000012f92f4468a, 0x0000000000000000, 0x0000048af30a3cdd, 0x000000656f3ae22c, 0x000000c84783ab5f, 0x0000000000000000, 0x0000009014bdf782, }, + }, + // compressed: 0x1f22ce42e44c61b62839054ccc9d196e03be1cdca4b43f66068e1c69471db3a4 + { + { 0x0000070b01622071, 0x000004e442ce221f, 0x0000000000000001, 0x000006edc015f8c3, 0x00000030f7ad55e6, 0x000002526e0e5f01, 0x0000000000000000, 0x00000309a7513c6b, }, + { 0x000003b5f8a16a3c, 0x000000a72516cc29, 0x0000000000000000, 0x00000527ef854a83, 0x0000037bf312c6bb, 0x000001c8e06663fb, 0x0000000000000000, 0x000005da094f0af6, }, + { 0x0000041ad4173e2c, 0x000005b866773130, 0x0000000000000000, 0x0000004693f9f9f1, 0x0000008f544ec019, 0x00000049663a8ed2, 0x0000000000000000, 0x000000a8b6b0ba29, }, + }, + // compressed: 0xe121b3e3d0e40462951eff287a63aa3b9ebd995bfdcf0c0b71d0c8643edc22cd + { + { 0x0000075ea0d43a0f, 0x000004d0e3b321e1, 0x0000000000000001, 0x00000589d63b5f39, 0x000001a66a3cf397, 0x000007feadccdecf, 0x0000000000000000, 0x000001694a9d7d02, }, + { 0x0000037dd7ccf7e4, 0x000007e3d2ac409c, 0x0000000000000000, 0x00000179ec3f968c, 0x000003a545442891, 0x0000048d0710b0cc, 0x0000000000000000, 0x00000371436febac, }, + { 0x000002b79a38d022, 0x000000eea98de8a3, 0x0000000000000000, 0x00000572b9a8fd5f, 0x0000001ec5f38665, 0x0000009a45b87cc9, 0x0000000000000000, 0x000000381f40346c, }, + }, + }, + { // 31 + // compressed: 0x506a938c0e2b0869b6c5dac135a0c9f934b6dfc4543eb76f40c12b1d9b4105c0 + { + { 0x000004b622943dff, 0x0000030e8c936a50, 0x0000000000000001, 0x000006bdb9be82f0, 0x000007f9cbc0433c, 0x0000072a626fdb1a, 0x0000000000000000, 0x000007c88caa7d47, }, + { 0x000001f6741a58c0, 0x00000358b6cd2105, 0x0000000000000000, 0x000000959214007f, 0x000001ca6bf5d254, 0x000002bc1406fb73, 0x0000000000000000, 0x0000040ab42f8499, }, + { 0x000002f232fb3913, 0x000003e72680d707, 0x0000000000000000, 0x000000822706bce9, 0x0000001f46c29e76, 0x000000800a83363a, 0x0000000000000000, 0x0000003f744315de, }, + }, + // compressed: 0x94017b3e04573e4f7fafda08ee3e1da8f1dedc99abc639c8d56177ff135d536c + { + { 0x00000448fac8f53e, 0x000007043e7b0194, 0x0000000000000001, 0x000004e93e8a35af, 0x0000063eb615af00, 0x00000355ccee6f78, 0x0000000000000000, 0x0000063b794d5855, }, + { 0x000004c6e8356a92, 0x00000355efe9e7ca, 0x0000000000000000, 0x000000fd02c997a6, 0x00000486e4274fd6, 0x000007761d5c839c, 0x0000000000000000, 0x000000ac13b19319, }, + { 0x00000607dba269ee, 0x000006a074fbb823, 0x0000000000000000, 0x000004b81e051162, 0x000000725c759551, 0x000000d8a6ba27fe, 0x0000000000000000, 0x0000004bc2ffc9aa, }, + }, + // compressed: 0xa721f176f57f5f91e387cd2f27324ac326e51b4dde2fbacc9b8969898f82ba6b + { + { 0x000003d71e04f676, 0x000007f576f121a7, 0x0000000000000001, 0x0000046690fe3901, 0x000004581a348fd5, 0x000007ef268df293, 0x0000000000000000, 0x0000048a57c2306a, }, + { 0x00000041f2a14513, 0x000001b0fc722bef, 0x0000000000000000, 0x0000032f5abc5a37, 0x000001fb3515186d, 0x0000069899bccba2, 0x0000000000000000, 0x000006b7be4971d6, }, + { 0x0000048238714b59, 0x0000030d28c89cbf, 0x0000000000000000, 0x00000132d5286282, 0x0000004aaea28855, 0x000000d775051f12, 0x0000000000000000, 0x000000ab3aa09efe, }, + }, + // compressed: 0xfd66d2f6e791489c1b7807039ba144073be261601d8f38880ed54b35a3a63e92 + { + { 0x00000378b3eb54d5, 0x000001e7f6d266fd, 0x0000000000000001, 0x0000009041e32d96, 0x000007b17c94005d, 0x0000078eb030f11d, 0x0000000000000000, 0x00000138ec1922ec, }, + { 0x000002a78f94ee70, 0x000000ef03738912, 0x0000000000000000, 0x0000062b090231a3, 0x000007e32170a26c, 0x000004bd50e88388, 0x0000000000000000, 0x0000018a1541eab4, }, + { 0x00000075a74d9a95, 0x0000041d12866c0c, 0x0000000000000000, 0x000006e7b78f0b60, 0x000000035625ab00, 0x000000247d4d466a, 0x0000000000000000, 0x0000009472c3c592, }, + }, + // compressed: 0x1e3f23f344d6270316f0fc340e269a4979b9daf216a7b5831f11d49badeeac68 + { + { 0x000003e0f8e6bba0, 0x00000644f3233f1e, 0x0000000000000001, 0x0000010ef3d7c210, 0x0000012ff09d23b5, 0x0000038b796d5cbc, 0x0000000000000000, 0x000004f8dbf39f11, }, + { 0x000007fc614e3b87, 0x0000079e02c064fa, 0x0000000000000000, 0x000005a081871699, 0x000001db763a9924, 0x0000054111f83b5a, 0x0000000000000000, 0x0000008f5973860d, }, + { 0x0000035b3be0d1fb, 0x00000526689838d3, 0x0000000000000000, 0x000004c239b892de, 0x00000059ad79c7f6, 0x000000d159dd5b37, 0x0000000000000000, 0x000000b2aec1ab6a, }, + }, + // compressed: 0x902702fdebcb2a88605711c40533af89f473347de392f4652b5a5154dfc5b2ac + { + { 0x000007e104aa6397, 0x000003ebfd022790, 0x0000000000000001, 0x0000058c63fd2aca, 0x00000044bec84a2c, 0x00000171be9a39fa, 0x0000000000000000, 0x000001b77c65d81d, }, + { 0x000004ff996c2537, 0x0000022aec110559, 0x0000000000000000, 0x00000529dffd614b, 0x000003291a93f8bc, 0x00000515a2b65f49, 0x0000000000000000, 0x0000048131f2723f, }, + { 0x0000023e58002292, 0x00000226bccc1710, 0x0000000000000000, 0x00000348af0598b9, 0x000000e13f487db9, 0x00000059658bbea8, 0x0000000000000000, 0x000000e1e053d9e1, }, + }, + // compressed: 0xb9b0105eaaaf6a2aa91a04ef70a3f0781fd63aaa77fb3e77e1d94ba7a2a5ecc4 + { + { 0x000007b32eed3e33, 0x000007aa5e10b0b9, 0x0000000000000001, 0x000000327b95d543, 0x000004e98caf81b3, 0x000005bbd51d6b0f, 0x0000000000000000, 0x0000018e3070e295, }, + { 0x000002b03ce8c260, 0x0000008355254d55, 0x0000000000000000, 0x00000681e3a4ba89, 0x00000314858c9444, 0x000004bd9e1773ef, 0x0000000000000000, 0x000007de9e4de1c5, }, + { 0x000002b810bcce91, 0x000005e3c28dc3bc, 0x0000000000000000, 0x000005c34e0c028c, 0x00000016fabb14d8, 0x00000089d94b454e, 0x0000000000000000, 0x0000004e4448a258, }, + }, + // compressed: 0xfc75a9428abb7bbf58a3ad9677395c8c48aaedcd6fc77fe2a620bcf6d75f7319 + { + { 0x000002af49c5342e, 0x0000038a42a975fc, 0x0000000000000001, 0x000000d042c84266, 0x00000646fe642714, 0x000003b7e6f6d524, 0x0000000000000000, 0x000000e832d24bdc, }, + { 0x000004df5a035792, 0x000005b46b17ef77, 0x0000000000000000, 0x0000032a8fdc7572, 0x000004cc543efa28, 0x000003c20a6e27fc, 0x0000000000000000, 0x000005f895f2503a, }, + { 0x000007ffbb6046cb, 0x0000023170e5de5a, 0x0000000000000000, 0x000007ae12383dfc, 0x000000236bbe3148, 0x00000032e6bfafed, 0x0000000000000000, 0x0000001fdf222323, }, + }, + }, +}; + diff --git a/src/ballet/ed25519/table/fd_curve25519_table_ref.c b/src/ballet/ed25519/table/fd_curve25519_table_ref.c new file mode 100644 index 0000000000..d0f267b27b --- /dev/null +++ b/src/ballet/ed25519/table/fd_curve25519_table_ref.c @@ -0,0 +1,2792 @@ +/* Do NOT modify. This file is auto generated by fd_curve25519_tables. */ + +#ifndef HEADER_fd_src_ballet_ed25519_fd_curve25519_h +#error "Do not include this directly; use fd_curve25519.h" +#endif + +/* Ed25519 base point. */ +static const fd_ed25519_point_t fd_ed25519_base_point[1] = { + // compressed: 0x5866666666666666666666666666666666666666666666666666666666666666 + { + {{{ 0x00062d608f25d51a, 0x000412a4b4f6592a, 0x00075b7171a4b31d, 0x0001ff60527118fe, 0x000216936d3cd6e5, }}}, + {{{ 0x0006666666666658, 0x0004cccccccccccc, 0x0001999999999999, 0x0003333333333333, 0x0006666666666666, }}}, + {{{ 0x00068ab3a5b7dda3, 0x00000eea2a5eadbb, 0x0002af8df483c27e, 0x000332b375274732, 0x00067875f0fd78b7, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, +}; + +/* Low-order points y coordinates. */ +// 0x26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05 +static const fd_f25519_t fd_ed25519_order8_point_y0[1] = {{ + { 0x0007b2c28f95e826, 0x0006513e9868b604, 0x0006b37f57c263bf, 0x0004589c99e36982, 0x00005fc536d88023, } +}}; + +// 0xc7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a +static const fd_f25519_t fd_ed25519_order8_point_y1[1] = {{ + { 0x00004d3d706a17c7, 0x0001aec1679749fb, 0x00014c80a83d9c40, 0x0003a763661c967d, 0x0007a03ac9277fdc, } +}}; + +/* Ed25519 base point w-NAF table for fast scalar multiplication. + Table size 128 points, i.e. max w=8. + Used by fd_ed25519_verify and similar. */ +static const fd_ed25519_point_t fd_ed25519_base_point_wnaf_table[128] = { + // compressed: 0x853b8cf5c693bc2f190e8cfbc62d93cfc2423d6498480b2765bad4333a9dcf07 + { + {{{ 0x00103905d7409118, 0x0010ba2817d673a0, 0x000a3e2827f4e67a, 0x001133d2e0c21a33, 0x00144fd2f9298f7f, }}}, + {{{ 0x000c93c6f58c3b72, 0x0008df7181c325f6, 0x0008f50b0b3e4cb6, 0x0005329385a44c31, 0x00087cf9d3a33d4b, }}}, + {{{ 0x00011205877aaa68, 0x000479955893d579, 0x00050d66309b67a0, 0x0002d42d0dbee5ee, 0x0006f117b689f0c6, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x3097ee4ca8b025af8a4b86e830845a023267019f02501bc1f4f8809a1b4e16fa + { + {{{ 0x00111fe8a4fcd252, 0x000fbcb8374faaca, 0x000d2f5af4ef4d4e, 0x000d314098f98d0f, 0x000aab91587555bc, }}}, + {{{ 0x0005b0a84cee9730, 0x00061d10c97155e4, 0x0004059cc8096a10, 0x000c7a608da8014f, 0x0007a164e1b9a80e, }}}, + {{{ 0x0006933f0dd0d889, 0x00044386bb4c4295, 0x0003cb6d3162508c, 0x00026368b872a2c6, 0x0005a2826af12b9b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x33bba50844bc12a202ed5ec7c348508d44ecbf5a0ceb1bddeb06e246f1cc4529 + { + {{{ 0x001182c3a447d694, 0x000a2964e536eff0, 0x001192821f540052, 0x0012f9f19e788e5a, 0x001154a7e73eb1b3, }}}, + {{{ 0x0002bc4408a5bb20, 0x000878ebdda05442, 0x000affb112354122, 0x000b75ee8df5862c, 0x000a945ccf146e1f, }}}, + {{{ 0x0003dbf1812a8285, 0x0000fa17ba3f9797, 0x0006f69cb49c3820, 0x00034d5a0db3858d, 0x00043aabe696b3bb, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xbfa34e94d05c1a6bd2c09db33a357074492e54288252b2717e923c2869ea1bc6 + { + {{{ 0x000f2c9aaa32218b, 0x000a67774474f74c, 0x001064b0e9b28084, 0x000bf04ef53b27c7, 0x0011d6edd5d2e530, }}}, + {{{ 0x000a5cd0944ea3bf, 0x00075673b81a4d62, 0x000950b925d1c0d4, 0x00093f38d9294113, 0x000461bea69283c8, }}}, + {{{ 0x00036dc801b8b3a2, 0x0000e0a7d4935e30, 0x0001deb7cecc0d7d, 0x000053a94e20dd2c, 0x0007a9fbb1c6a0f9, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2f63a8a68a672e9bc546bc516f9e50a6b5f586c6c933b2ce597fdd8a33edb934 + { + {{{ 0x0016217e039d803e, 0x000edea408337e6b, 0x000d7ac112628205, 0x001647cb65e30472, 0x00149c05a51fadc7, }}}, + {{{ 0x0006678aa6a8631c, 0x0005ea3788d8b365, 0x000a1bd6d6994279, 0x0007ace75919e4e2, 0x000b4b9ed338add7, }}}, + {{{ 0x0004e8bf9045af1b, 0x000514e33a45e0d6, 0x0007533c5b8bfe0f, 0x000583557b7e14c9, 0x00073c172021b008, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xde2a808a8400bf2f272e3002cffed9e50634701771843e11af8f6d54e2aa7542 + { + {{{ 0x000f5b0249864322, 0x000d2ee11070262a, 0x001237ae54fb5acc, 0x0013bfd1d03aaab3, 0x00118ab598029d5a, }}}, + {{{ 0x000f00848a802ade, 0x0009e04605c4e5f6, 0x0005c0d01b9767fa, 0x0007d7889f42388b, 0x0004275aae2546d8, }}}, + {{{ 0x00032cc5fd6089e9, 0x000426505c949b05, 0x00046a18880c7ad2, 0x0004a4221888ccda, 0x0003dc65522b53df, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x6d7f00a222c270bfdbdebcb59ab384bf07ba07fb120e7a5341f246c3eed74fa3 + { + {{{ 0x0017013b327fbf6d, 0x0011336eeded6a0b, 0x0012b565a2bbf3ad, 0x001253ce89591953, 0x0010267882d17600, }}}, + {{{ 0x0008c222a2007f6d, 0x000b56b79bdb77ed, 0x00041ee81efe12cd, 0x000920a9bd07097d, 0x000234fd7eec346e, }}}, + {{{ 0x0000a119732ea378, 0x00063bf1ba8e2a6c, 0x00069f94cc90df9a, 0x000431d1779bfc48, 0x000497ba6fdaa097, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xa0eacf1303ccce246d249c188dc24886d0d4f2c1fabdbd2d2be72df11729e2e1 + { + {{{ 0x0013cd86468ccef8, 0x000c8553221ac07f, 0x000ec9464b4e0a6d, 0x000f5fba84180402, 0x000c3b5cd4218d04, }}}, + {{{ 0x0006cc0313cfeaa0, 0x0009a313848da499, 0x0007cb5342192309, 0x00039596dedefd60, 0x00061e22917f12de, }}}, + {{{ 0x0002762f9bd0b516, 0x0001c6e7fbddcbb3, 0x00075909c3ace2bd, 0x00042101972d3ec9, 0x000511d61210ae4d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x819d0e95ef76c6924f04d7c0cd2046a548128f6f64369baae355b8dd245932ed + { + {{{ 0x001386484420de74, 0x0012d6b25db68100, 0x000e50b4962873be, 0x0014081cfd271393, 0x000f1a7fe6fe2480, }}}, + {{{ 0x000676ef950e9d6e, 0x0009b81ae089f258, 0x00063c4922951882, 0x000af1d54d9b3237, 0x000ed325924ddb84, }}}, + {{{ 0x000182b8a5c8c854, 0x00073fcbe5406d8e, 0x0005de3430cff451, 0x000554b967ac8c41, 0x0004746c4b6559ee, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2b9ac66d3c7b77d317f6896f27b2fadeb5163ab5f71c6545b79ffe34de519adc + { + {{{ 0x001546c864741121, 0x000ba1df9909268e, 0x0011ca8cc9f4d6ba, 0x000b6b7fc9cd3b01, 0x001219663497db5d, }}}, + {{{ 0x00077b3c6dc69a2b, 0x0004edf13ec2fa6e, 0x000ce85ad77beac8, 0x0007dba2b28e7bd9, 0x0005c9a51de34fe9, }}}, + {{{ 0x0000f1cf79f10e67, 0x00043ccb0a2b7ea2, 0x00005089dfff776a, 0x0001dd84e1d38b88, 0x0004804503c60822, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc77fa32cd09e24c4abac15a6e3a059a0230e6ec9d76ea9886d695016a59833d5 + { + {{{ 0x001021d23a36d162, 0x000cfd3373c6476b, 0x00120e291eeed029, 0x000e2f2ecf2e720e, 0x000f71e098858de3, }}}, + {{{ 0x000c9ed02ca37fb4, 0x000474c2b5957883, 0x0005b8388e816683, 0x000cb6c454b76be4, 0x000d53398a516505, }}}, + {{{ 0x0002f5d278451edf, 0x000730b133997342, 0x0006965420eb6975, 0x000308a3bfa516cf, 0x0005a5ed1d68ff5a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x830e15fe2a129511d8354b7e259a20cf201e711e29f88773f092bfd897b8acc4 + { + {{{ 0x000de0c558527333, 0x0013395b73afd75b, 0x001072afa4e4b96e, 0x000e2214329e0f6b, 0x001019b60135fefc, }}}, + {{{ 0x000d122afe150e83, 0x0004afc966bb0231, 0x0001c478833c8268, 0x00097839c3fc148f, 0x00044acb897d8bf8, }}}, + {{{ 0x000068145e134b83, 0x0001e4860982c3cc, 0x000068fb5f13d799, 0x0007c9283744547e, 0x000150c49fde6ad2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x3811470995f27b8e51a6754f39ef6f5dad08a725c479af102299b95b075a2b6b + { + {{{ 0x0011863c9cdca855, 0x000b770e295a1707, 0x0010d85a3720fd12, 0x000de0ff1f71ab04, 0x000f8a6d7791e05e, }}}, + {{{ 0x0003f29509471125, 0x000729eeb4ca31cf, 0x00069c22b575bfbc, 0x000c910857bce212, 0x000eb2b5a075bb98, }}}, + {{{ 0x0007704b47a0b976, 0x0002ae82e91aab17, 0x00050bd6429806cd, 0x00068055158fd8ea, 0x000725c7ffc4ad55, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb299cfd1156742e4340da20211d552739f10128b7b15d123a3f3b17c27c94c79 + { + {{{ 0x00102bf71cd0989a, 0x000c9dabcc6cd22e, 0x000c0a6533f905b1, 0x000d73efac2eb8a3, 0x0014cd54625f855e, }}}, + {{{ 0x00026715d1cf99b2, 0x000a205441a69c88, 0x000448427dcd4b53, 0x0009d191e88abdc5, 0x000794cc9277cb1e, }}}, + {{{ 0x0006c426c2ac5053, 0x0005a65ece4b095e, 0x0000c44086f26bb6, 0x0007429568197885, 0x0007008357b6fcc8, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x013f77382767880bfbccfb95fac8ccb8b629adb9a3d52d8d6a0fad51987eef06 + { + {{{ 0x000b9fbb82584a0e, 0x00147a568f257a02, 0x00114d88091ead8f, 0x000a145b18b1ce22, 0x00113a92a3669d6c, }}}, + {{{ 0x0008672738773eee, 0x000752bf799f6170, 0x0006b4a6dae33323, 0x0007b54696ead1dc, 0x00086ef7e9851ad0, }}}, + {{{ 0x0003771cc0577de5, 0x0003ca06bb8b9952, 0x00000b81c5d50390, 0x00043512340780ec, 0x0003c296ddf8a2af, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x13a714d9f915adae12f98f8cf97b2fa930d7539f1723f8afba770c4993d399fa + { + {{{ 0x00134d2ebb1f251b, 0x0010e815b723ff9b, 0x001286b416e25441, 0x0010bdfe38d1bee6, 0x0010a892c7007475, }}}, + {{{ 0x000515f9d914a713, 0x00073191ff2255d5, 0x000d4f5cc2a4bdef, 0x0003dd57fc118bce, 0x0007a99d393490c7, }}}, + {{{ 0x0002ed2436bda3e8, 0x00002afd00f291ea, 0x0000be7381dea321, 0x0003e952d4b2b193, 0x000286762d28302f, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x255be33c0936784e97aa6bb21d18e1823fb8c7cbd392c10c3a9d9d6a04daf1b2 + { + {{{ 0x00158e2bce2ef5aa, 0x000e8ce8f78c6f88, 0x0016ee26e39261b1, 0x00133d0aa50bcf9b, 0x000f686f2a3d6f15, }}}, + {{{ 0x000836093ce35b12, 0x000bb64d7552e9ce, 0x00071ee0fe0b845f, 0x00069d0660c969e5, 0x000b2f1da046a9d9, }}}, + {{{ 0x000512a66d597c6a, 0x0000609a70a57551, 0x000026c08a3c464c, 0x0004531fc8ee39e1, 0x000561305f8a9ad2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd1ae92ec8d970c10e5736d4d43d543ca48ba47d8221b13832c4d5de353ecaa80 + { + {{{ 0x0012cc28e7b0c0c2, 0x00177b60eb8a6ce2, 0x0014042985c277a4, 0x001636657b46d3e9, 0x000830a1aef2c57a, }}}, + {{{ 0x000c978dec92aebe, 0x000869adae7ca200, 0x00091ee923290f54, 0x00069641898d916b, 0x00080aaec53e35d4, }}}, + {{{ 0x0001f773003ad2aa, 0x000005642cc10f76, 0x00003b48f82cfca6, 0x0002403c10ee4329, 0x00020be9c1c24065, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xa6739624d88753e193e446f52dbc4359b5636fc3819a7f1cdec10a1f36b30a75 + { + {{{ 0x0010e44ae2025e3a, 0x000df97b9727041a, 0x000d683472c0eceb, 0x000988882eb1ce7b, 0x00169764c545067d, }}}, + {{{ 0x000387d8249673a6, 0x000dbea8dc927c2a, 0x0005bd8ed5650eef, 0x0008ef0e3fcd40e1, 0x000750ab3361f0ab, }}}, + {{{ 0x00023283a2f81037, 0x000477aff97e23d1, 0x0000b8958dbcbb68, 0x0000205b97e8add6, 0x00054f96b3fb7075, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x7992662904f2ad0f4a727d7d04a2dd3af160578c82943d6f9e53b72bc5e97fbd + { + {{{ 0x0015afc616b11eba, 0x000b9f4aec8f22ed, 0x0013b39e1625d92d, 0x000df85bd4508871, 0x000f8e6839fbe85c, }}}, + {{{ 0x0005f20429669266, 0x00088fafae4941f5, 0x00095d83c4eb7687, 0x0009cf379eca4145, 0x000bd7fe9c52bb74, }}}, + {{{ 0x00032df737b8856b, 0x0000608342f14e06, 0x0003967889d74175, 0x0001211907fba550, 0x00070f268f350088, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x475f80b183458666197cdd60d1c535f506b04c1eb74e87e9d989d8fa5c340dfc + { + {{{ 0x0014112070dcf32f, 0x000fdcff9c22e462, 0x00154ada60e03324, 0x00125cd98eef7698, 0x001404e56c039b8a, }}}, + {{{ 0x00064583b1805f47, 0x000a2c1baf832cd0, 0x000932c01bd4d716, 0x0004ecf4c3a75b8e, 0x0007c0d345cfad88, }}}, + {{{ 0x00071f4b8c78338a, 0x00062cfc16bc2b23, 0x00017cf51280d9aa, 0x0003bbae5e20a95a, 0x00020d754762aaec, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x58b73bc76fc38f5e9abb3c36a543e5ac22c93b907d4a93a962eccef3461e8fab + { + {{{ 0x000cfeb135b9f51d, 0x000e3bd192ad93ad, 0x00144e2ea612cdf6, 0x000e70f4991583a9, 0x00138b8ada8790b3, }}}, + {{{ 0x0007c36fc73bb745, 0x0004a6c797734bd1, 0x0008ef248ab3950e, 0x000e3154c9a53ec7, 0x000ab8f1e46f3ced, }}}, + {{{ 0x00004a9cdf51f95d, 0x0005d963fbd596b8, 0x00022d9b68ace54a, 0x0004a98e8836c599, 0x000049aeb32ceba1, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x3179fc750b7d50aad325677a4b92ef0f30396b392b54821dfc74f63075e15e79 + { + {{{ 0x000e7d3c63dcfe6b, 0x001112f0adc81aed, 0x00153df04c827163, 0x0012fe5b33b430ee, 0x000d1c665e0c8d60, }}}, + {{{ 0x00087d0b75fc7931, 0x00016f4ce4ba7549, 0x0005ace4c03fbe49, 0x000a7e0ec12a159c, 0x000795ee17530f66, }}}, + {{{ 0x00025b0a52ecbd81, 0x0005dc0695fce4a9, 0x0003b928c575047d, 0x00023bf3512686e5, 0x0006cd19bf49dc54, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x86c3af652161fe1f101bd5b8882a2a08aa0b99207e62f676e7439e42a7b301de + { + {{{ 0x000f619052179c90, 0x0010c16593f0afcf, 0x000a65c4795c7426, 0x000b1c40515d5441, 0x000f520f3db40b2d, }}}, + {{{ 0x0006612165afc386, 0x0001171aa36203ff, 0x000a642ea820a8aa, 0x0009f3bb7b313f0f, 0x0005e01b3a7429e3, }}}, + {{{ 0x00050be3d39357a1, 0x0003ab33d294a7b6, 0x0004c479ba59edb3, 0x0004c30d184d326f, 0x00071092c9ccef3c, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xcf1d0574acd86b851eaab75508a4f603eb3c74c9cbe74a3adeab3771bba57341 + { + {{{ 0x0010523f03649166, 0x001687f56d638a79, 0x00120796928ad011, 0x000dd38405a54f31, 0x0010ea15b03d0256, }}}, + {{{ 0x0003d8ac74051dbc, 0x00090ab6f543d0ad, 0x000dd0f3ac0fda8f, 0x0005ef1d2573e5e3, 0x000c173a5bb7137a, }}}, + {{{ 0x00056e31f0f9218a, 0x0005635f88e102f8, 0x0002cbc5d969a5b8, 0x000533fbc98b347a, 0x0005fc565614a4e3, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x8e989077e6e1924822d75c1c0f95d501ed3e92e59a81b0e31b65469d40c714b2 + { + {{{ 0x000e570dc46d7ad2, 0x00118a9f1b91e26c, 0x001436b6183f42a9, 0x000d50acaa4f8196, 0x000e2711c414c453, }}}, + {{{ 0x0002e1e67790988e, 0x0009e38b9ae44912, 0x000648fbb4075653, 0x000a8df1d840cd72, 0x0003214c7409d465, }}}, + {{{ 0x0001827406651770, 0x0004d144f286c265, 0x00017488f0ee9281, 0x00019e6cdb5c760c, 0x0005bea94073ecb8, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf8d243f363ce70b4f1e843058fba67006f7b11a2a151da352fbdf1445978d04a + { + {{{ 0x0015bf0912c89bbe, 0x000e2fadcaf38c81, 0x000a5ec196b3ce2b, 0x000f7655ff4f017a, 0x0013aacd5c148f60, }}}, + {{{ 0x0008ce63f343d2f8, 0x0009e0a87d1e368d, 0x000845edbc019ee9, 0x000e979aed28d0d0, 0x0004ad0785944f1a, }}}, + {{{ 0x00063b34c3318301, 0x0000e0e62d04d0b1, 0x000676a233726701, 0x00029e9a042d9769, 0x0003aff0cb1d9028, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x0535c5f40b43269283221f26139ce468c627d38f7833ef097f9ed92b739fcf2c + { + {{{ 0x0015c7eb3a204038, 0x000dfdb5aad930f6, 0x000ca757e63b8c46, 0x000a8e9492972455, 0x001110e7e86f4cd1, }}}, + {{{ 0x0006430bf4c534f2, 0x000264c3e4507244, 0x00074c9f19a39270, 0x00073f84f799bc47, 0x000accf9f732bd99, }}}, + {{{ 0x0000d89ed603f5e4, 0x00051e1604018af8, 0x0000b8eedc4a2218, 0x00051ba98b9384d0, 0x00005c557e0b9693, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb00ec289b0bb76f75cd80ffaf65bf861fb2144634e3fb9b60512864108ef9fa8 + { + {{{ 0x0009ce311fc97e5c, 0x000e023f3fb5db1e, 0x000fb49775e8fc97, 0x0013ad70adbf5044, 0x000ee154c178fe96, }}}, + {{{ 0x0006bbb089c20eb0, 0x0006df41fb0b9eee, 0x000d1087ed87e16f, 0x000902db5c9fa730, 0x000289fef0841860, }}}, + {{{ 0x00016336fed69abf, 0x0004f066b929f9ec, 0x0004e9ff9e6c5b93, 0x00018c89bc4bb2ba, 0x0006afbf642a95ca, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xcca813f97050e55d61f50c2b7b161d7d89d4ea90b65629dad91e80dbce93c092 + { + {{{ 0x0010de0c62f5d29b, 0x000c9601cf734fb3, 0x000eb5c38263f0f5, 0x0014623ef5b56d05, 0x0010db4b851b9501, }}}, + {{{ 0x000d5070f913a8b9, 0x000765619eac2bbb, 0x000bab5225f47459, 0x00076ced14ab5b47, 0x00092c093cedb801, }}}, + {{{ 0x00047f9308b8190f, 0x000414235c621f82, 0x00031f5ff41a5a76, 0x0006736773aab96d, 0x00033aa8799c6635, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb16c15fc88f54883276d0a1a9bbaa26db65aca875c2d26e2a689d5c8c1d02c21 + { + {{{ 0x000ff51ebd085ccc, 0x00112cfa67e3f5e0, 0x0009800cf1e3d468, 0x000d4337615ff0a7, 0x001233c6f29e8e20, }}}, + {{{ 0x0008f588fc156c9e, 0x000363414da4f068, 0x0007296ad9b68aea, 0x0004d3711316ae43, 0x000a12cd0c1c8d58, }}}, + {{{ 0x0004d5107f18c781, 0x00064a4fd3a51a5e, 0x0004f4cd0448bb37, 0x000671d38543151e, 0x0001db7778911914, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb61a70dd694739b3a58dcf19d4deb8e252c82afd6141df15be247d018acae2fa + { + {{{ 0x001352397c6bc25c, 0x00118a7aa0227bbc, 0x000de68cc1ea5f89, 0x000efe3e3a7a1d5e, 0x000b1ad97ad26e29, }}}, + {{{ 0x00094769dd701ab6, 0x00028339f1b4b666, 0x0004ab214b8ae37b, 0x000a5f0aefa0b0fe, 0x0007ae2ca8a017d1, }}}, + {{{ 0x000017ed0920b962, 0x000187e33b53b6fd, 0x00055829907a1463, 0x000641f248e0a792, 0x0001ed1fc53a6622, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2d2d091ca642fe8b8e38bfc998485073fb1237bf7b16193ead24aa574a663d50 + { + {{{ 0x0011e98e4d89f25b, 0x000d10ae16fcfe95, 0x0012171172ce0b7b, 0x000d5191edbf3680, 0x000db12b36f28bbf, }}}, + {{{ 0x000642a61c092d2d, 0x000b1937e711d17f, 0x000cdc4bedcd4121, 0x000a569f0c8b3dde, 0x000503d664a57aa1, }}}, + {{{ 0x0003395b90a91537, 0x0006f9e6fcbe5943, 0x00023a2feae6ea0f, 0x0004718c95011f06, 0x00036906685e9a1f, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1d78d84f3cbe4c54e4578b13d21dcf2f393d5bbe64ee27eba5c30548f0cc5d35 + { + {{{ 0x00110dd8b8699e35, 0x000f463aeb8f8d61, 0x000f60856e91c032, 0x0010cf2b008ee054, 0x000db11127084749, }}}, + {{{ 0x0004be3c4fd8781d, 0x000a42716afc8a89, 0x00096cf4e4bf3c76, 0x0009d2f593f7325e, 0x000355dccf04805b, }}}, + {{{ 0x0005984dcb3c75db, 0x0004eafecacff977, 0x00016606587ed97b, 0x0007b2d89c5ac45b, 0x000584587b225ae4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd67ea6660fc15548c49791cb6c61eb848b21b280d3ff4f8b54ac82b9a47be205 + { + {{{ 0x0013a363f12f5793, 0x00136677857dc670, 0x000e016edd50d743, 0x000f77eda40c0453, 0x000bd8918fb87d10, }}}, + {{{ 0x0005c10f66a67ec3, 0x0005997232f8890a, 0x000ac8862e13ad85, 0x00062a45a7ffe9bf, 0x00085e27ba4b982a, }}}, + {{{ 0x0006a67d1e5a864d, 0x00061bc54210c7e0, 0x0005a0ab3f96bab6, 0x0002ed35b0884775, 0x0007f8f3424d64a5, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xaf8648b207481a7be2fd42c41eed48954f65457aa43152af65f21003ba5c75fe + { + {{{ 0x000e293624794eab, 0x0010ed1e1ed161d9, 0x00108ef30fb86fc1, 0x000b62557eff0b65, 0x0010caa7059c3234, }}}, + {{{ 0x00024807b24886af, 0x000bd8885fbc4f63, 0x000115953e5523b3, 0x000932d7a918d23d, 0x0007e755cba0310e, }}}, + {{{ 0x00044f52761a3023, 0x000104d2decd135f, 0x000791656699386a, 0x00011871237a067e, 0x0004536c2aee70b3, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc3b9cc21f3efe38cb857216574bf389a8b16630fed5f60dcb39744caf5d0156a + { + {{{ 0x0011a302599db7e7, 0x000efe05f844dc01, 0x0011c40635bad39b, 0x001238ff0dfc297d, 0x000fbbdf8041ba45, }}}, + {{{ 0x000beff321ccb9c3, 0x00068ca42af7119b, 0x00058c5a2e68e2fd, 0x0003d9ee302ff687, 0x0006a15d0f5ca449, }}}, + {{{ 0x0005e1f109bfa8d5, 0x00073c44389e11c1, 0x00025e21637093ab, 0x0005bd7d979ccd1b, 0x00055c206d4035cd, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2576de90adfa270ae3c831149ed12782cb594a215cdb990f251ce72e92b3d6dc + { + {{{ 0x00138159b8443d11, 0x000d5ad9ec9f2e28, 0x00147a7bf00acf6c, 0x000f5c2cce0a6004, 0x001278fc8bcd74e8, }}}, + {{{ 0x0007faad90de7625, 0x0003c286391c6144, 0x000529672e089f46, 0x000e1287ccedae10, 0x0005cd6b3922ee70, }}}, + {{{ 0x0004a994d633ebc7, 0x0005cf46f4f7de07, 0x00033450af844449, 0x00021429fa184f70, 0x000468615291ab88, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x6feb4cd55138402c676bfdcdea2922ed2b79e2185321adf485948853f3e22355 + { + {{{ 0x0009099c54a5efbf, 0x000c1e0af3f2ee33, 0x000f53ef3fd71419, 0x000ee9ee0c59c788, 0x000e36db66a5894d, }}}, + {{{ 0x00083851d54ceb6f, 0x000559bfad6ce587, 0x000389e4afb488a7, 0x000242fa5690a98c, 0x0005523e2f353889, }}}, + {{{ 0x0002536e7bd0d4de, 0x00056cb47e3c535f, 0x00072130d43d8496, 0x0007cc447ad13e59, 0x0005288cf65559b0, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1c88d9f029b6920f710e57e513fbb1fcfbba4b48894fee5fd24152f4850cc792 + { + {{{ 0x000dc8c50a972875, 0x000f5d502547f651, 0x0015da24a563faad, 0x000b0a36eb796305, 0x00163f01b555a963, }}}, + {{{ 0x000ab629f0d98809, 0x000a7caae1ce21f1, 0x00092eebeff2c7eb, 0x0008e92ff727c4a3, 0x00092c70c85f4523, }}}, + {{{ 0x0005bda5e538767f, 0x0000fa612c198d48, 0x000354cd4580a64c, 0x0004aa9e49cfb4ea, 0x000437165416ab62, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x86adfdddfbb1d5e18d77b6e4babf81ad1fdd80991919786bb721971b5f98fe46 + { + {{{ 0x00100a2836e64b74, 0x000a1e92a74e2c24, 0x000fcd91d540da92, 0x00111e423291a7a2, 0x0013ea46dc72c2db, }}}, + {{{ 0x0005b1fbddfdad86, 0x00075c96cef1bc3a, 0x000603747eb606fe, 0x0008dbb5bc0c8ccc, 0x00046fe985f1b971, }}}, + {{{ 0x0005018588e2dfa7, 0x00003fa0ebdd53fe, 0x000271d3959ce7d0, 0x0004a735072f4bec, 0x000088b0ca7df432, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc06cfefe540e6710941de5a8539dbb0edfa335f5230e9ffa93e85eaf005775bc + { + {{{ 0x001445337c54aa8a, 0x000fcfc86df9a4c6, 0x0014466d61db4239, 0x0011bcf6c7d0eb48, 0x000fd5b0546110df, }}}, + {{{ 0x00070e54fefe6cc0, 0x0002751ca3b2820c, 0x0004d68f7c3aee75, 0x000c49fd4f8711fa, 0x0003c755700af5ed, }}}, + {{{ 0x00073a96d7c70596, 0x0007615f603e6f13, 0x000087035eabe3f9, 0x000556b20b23346a, 0x0001ae5c564b3a77, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x4b5902034cad09da845b6a7cd4e6fb13a4e28508c0e700456326d99811641aa0 + { + {{{ 0x0010e6863e708d48, 0x00109914b654bfaf, 0x0011d176412796b5, 0x0013c307983e740d, 0x000dd9cf1e818aef, }}}, + {{{ 0x0001ad4c03025938, 0x00028f8d4b709b41, 0x000a178a904fef9b, 0x000b31a28073e003, 0x000a01a641198d91, }}}, + {{{ 0x00021d3be2a1592b, 0x00054c571883eb7b, 0x000109312caf6eaa, 0x0005932abca49e6e, 0x0003aa0a0c361fe0, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x93f6df08e55f1c948d830f66ab12d0c744a5775cdde926474003b208f790613e + { + {{{ 0x000c6e21e149ef1b, 0x00104a00ce2d20ce, 0x0011e2ccc2338302, 0x001094d8553aae4d, 0x000eee309f230d18, }}}, + {{{ 0x000c5fe508dff693, 0x00056cc1f071b282, 0x0009de95131f404a, 0x0001a0239374eead, 0x0003e6190f708b20, }}}, + {{{ 0x0000ae32ac67b877, 0x0001ea8fd8412729, 0x0003a126b5e8888a, 0x0003a5b0ba127bd8, 0x00064cde98364f1d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xfa4f6cb682b9fe42c8051fc6101bb4b80f3b95875779222d07302044c17c7619 + { + {{{ 0x000fd6e4071f643d, 0x0011f7c3ea3ee4e0, 0x0010a53ecdf4e3d8, 0x000c18c2797ed1fe, 0x000ac41a80e5b452, }}}, + {{{ 0x000eb982b66c4fe7, 0x000218c3e0b9085e, 0x000e54ec3ee2d06c, 0x00080396913cabc2, 0x00099767cc144202, }}}, + {{{ 0x00060fe08e9dc54b, 0x0006b2f1c309a0b7, 0x0003293b11cbbbbc, 0x0001f4578658a7ed, 0x000393bc7b77c81c, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x158ccd68a8673bb1c96ecd38fa138556b4d20549f6b9ec7b96363dac9955bbee + { + {{{ 0x000b8645b73f4742, 0x0009b10773615d36, 0x000f0305ea7d72d3, 0x000f31fbdc8a9de1, 0x000fc0cebbd0ca4d, }}}, + {{{ 0x000b67a868cd8c02, 0x00074719add93626, 0x000c174ad15a144f, 0x00034b3df65cfb23, 0x000eebb5599ac3d3, }}}, + {{{ 0x0004c5da306059bd, 0x0004acefccbf4853, 0x0006b25a6c99b7af, 0x0006461833026867, 0x0007cead1176a994, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x22e64dc6081e1b6250918c7b3d3b2b470812b0271cb636dddc0a4dfe746381fb + { + {{{ 0x000e4cdb68564770, 0x00103acd825866de, 0x0014bb8f4c4cca1b, 0x000aa8bfe5c9f08f, 0x000b2e73d7c414d6, }}}, + {{{ 0x000b1e08c64de622, 0x000faf71922a0c42, 0x0006c048211caceb, 0x00056e6e9b5b0e13, 0x0007b816374fe4d0, }}}, + {{{ 0x00071bc104113fcc, 0x0001f1194e6b0a52, 0x00017e905170f1f4, 0x0000b1c793ce3aeb, 0x0006f56ae3ce96f0, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb9b4f686e1a37a47357925f3a05f6681bf364d668edb7345e9b02ac96fc9cbab + { + {{{ 0x001096ed8c1e9260, 0x001068c2dacbaba5, 0x0013cbdc9b7e4dab, 0x000e8bcdc69bd168, 0x000eff27a9feafb2, }}}, + {{{ 0x0002a3e186f6b4a6, 0x000c1e64af26a8ef, 0x000934dafe05997d, 0x000874a2b9edc732, 0x000abcbc96fc92aa, }}}, + {{{ 0x0001f73e611f6329, 0x0000d51039c82d81, 0x0001b8b0d7c0cec5, 0x000466a870023ad2, 0x00072b5a5b6de284, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc337a328462c713c07a33f63a3971c9a773924851803a46b087dde6faaa78534 + { + {{{ 0x000e9774ed68e70d, 0x0013297de2957e25, 0x000e450077e37424, 0x0010b3fe28b59cad, 0x000e1aa1160d97b5, }}}, + {{{ 0x00092c4628a337c3, 0x00046c67f460e78d, 0x000c90e5de68725e, 0x00068435d2018c41, 0x0003485a7aa6fde7, }}}, + {{{ 0x00048a7b7f55128e, 0x0006bab0c5b2e4a6, 0x0003822130dd2f2d, 0x0000a159b9f678b4, 0x0002c6ce0503ee8d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1a9b4676e6174f891ee321e0e1ec0c34438a1203b8a9e00ea7933378532b8c8f + { + {{{ 0x000adfb19c632863, 0x00138525489e51af, 0x0013da48697a5b31, 0x000bd4f27772b64b, 0x0010e77ad1d92648, }}}, + {{{ 0x000717e676469b07, 0x00043c043c63d129, 0x00044a290cd033b3, 0x0009d3877054dc01, 0x0008f8c2b5378338, }}}, + {{{ 0x0002301df2db5c75, 0x00021501a33bc5e3, 0x000276b53f750382, 0x0006fabc7001775c, 0x0004cc1e54c7258d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x9ce13a6bd8e19bb838bd807994a71e03f91334fe9fc3458677de327a23f29472 + { + {{{ 0x000cc06675436368, 0x000f0c89c91f7e7e, 0x0012a6ed9bd0987c, 0x0009727ae4d7539e, 0x00162ef3fdce7513, }}}, + {{{ 0x000be1d86b3ae19c, 0x00028f3017a71712, 0x0008d04fe40c7a9e, 0x00073bc322e1cffe, 0x0007294f2237a32d, }}}, + {{{ 0x00008017f77d3efd, 0x0003c70d3e486dcb, 0x000409977a7b4776, 0x0001525ed4e71ba7, 0x0001928c87d15666, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x29720866d547384ac65897b5caa2a92d1b29ce7560a8555794fa99441dece04a + { + {{{ 0x000c955ab57e211d, 0x000fb2c89ebea360, 0x0012f4b265bfadfd, 0x00131821023a7682, 0x000f7db41774458d, }}}, + {{{ 0x000847d566087229, 0x000156b2eb18c946, 0x000738a46cb6a68b, 0x00054a2baad4303a, 0x0004ae0ec1d4499f, }}}, + {{{ 0x0006cb9ba2be7da7, 0x0003019c0fbab07a, 0x000742ff1219ac76, 0x000387575fd24bc9, 0x00017f1b3461da31, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x86286c033d6ba1099ae7e4e34e5dc7ba007b4194e758c7ab4dd243f4432ca878 + { + {{{ 0x0014199b3403ce2c, 0x00134f6ce21cb1c7, 0x000dda9cd4b28d82, 0x000b1368bb16bda1, 0x0013d9b99a13ada8, }}}, + {{{ 0x00096b3d036c2886, 0x0009dc7c9cf34133, 0x000905ec02eb1d74, 0x000926d5e3ac73c9, 0x00078a82c43f443c, }}}, + {{{ 0x00038112702675c4, 0x0005688d28e9c0ad, 0x000712b1ffbf44e7, 0x0001c8229cd3ad7b, 0x0000b49208bd81bb, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x82070d0afb50fd03d6ee986e71edc8ea0898006f989363c14814d5a24da640be + { + {{{ 0x0012dcb32d28721b, 0x000eb892b09826b5, 0x000da36039ecf45c, 0x001290c3d6097e78, 0x001157ee7b2e1f26, }}}, + {{{ 0x000550fb0a0d076f, 0x000e2dd31ddac07f, 0x000c026023ab23b4, 0x000a2460b1c9cc36, 0x000be40a64da2d50, }}}, + {{{ 0x0005a52e9dca709f, 0x000378e7ff97b2fe, 0x0004b8fe54948b42, 0x00075a0fadd77b78, 0x0005a277115c55fb, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x554c85e521d9407bb231de6f387b3c276e2e124e506e63e3733ddd9218194e0f + { + {{{ 0x000a3015328300a6, 0x000ffab0f4f85561, 0x0011b6e3c321fb1c, 0x000f77279c16beaa, 0x0014689b02ab17de, }}}, + {{{ 0x0008d921e5854c42, 0x00070dfbc6364f67, 0x000848b9b89cf1ec, 0x000eb9f1b1b72826, 0x0008f4e191892dd2, }}}, + {{{ 0x00051c12ec4132ed, 0x00031b2456b7b877, 0x0005c21e5387d181, 0x000313c37a49ca2f, 0x0003b2432ebc9edd, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xefd8c78197890017288c396f085a2ba42fc63638622b22b4c1d0280333d11fb6 + { + {{{ 0x0016ccc2b78c2e46, 0x000f06382f92b775, 0x000f0258f43764db, 0x000ddcc6ff9a04f5, 0x000ec55c1f2ab2da, }}}, + {{{ 0x0008899781c7d8dc, 0x00090de7318502df, 0x0008db18be90ad67, 0x000860da1115b11b, 0x000b61fd1330328c, }}}, + {{{ 0x00030c8165159986, 0x00022ef8a1e89a45, 0x0003e81112e25ce4, 0x00024358acb40b6a, 0x0003cd845a927b2c, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xdf51192cd706f512f52ff8e86533eafb758e1b48a2b06a55adf24772ac98f945 + { + {{{ 0x000f15addf6fd38a, 0x000fcf1aebd6e3a1, 0x0010391b7101c8a8, 0x000d6887ab35ab67, 0x00136121e8a0da90, }}}, + {{{ 0x000d06d72c1951cc, 0x000cbd1f05fea25d, 0x00086e39d7efa8cc, 0x000956aab5585123, 0x000c5f998ac7247e, }}}, + {{{ 0x00030728c55d3ecd, 0x000188cd2a66f481, 0x000151333b5b850d, 0x00018dffa3616ab9, 0x00023b086cf066d5, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x8fd5bdb48060668d31ba348609a47cbd39bc2c013545fe4415164f0119fac516 + { + {{{ 0x000b5118ea051938, 0x001046f82d20b86c, 0x00134a3ccac75143, 0x000d3a7519c28494, 0x00101ebb5388c6e7, }}}, + {{{ 0x00066080b4bdd57c, 0x000930c6974631ac, 0x0004b2f0e6f5f28f, 0x00030aa27f229a80, 0x00096c5fa19014f1, }}}, + {{{ 0x0005416ee772f53b, 0x0000b9739d12a1e8, 0x0002581c43263fe3, 0x00002857fe94e1ab, 0x0004864ef1818473, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x30b8d00b3aa80dcd28341cb99beb4e86f43e15049b3e6fe650c26b7fed3ac0a6 + { + {{{ 0x000fc33297639a8d, 0x000d640d1a71df01, 0x001588f03cd11f1d, 0x000fb62e6025c41b, 0x0012a7adc0c34db9, }}}, + {{{ 0x0005a83a0bd0b81d, 0x000b7723868519a1, 0x000854fbd2193bad, 0x00092873379f4d81, 0x000a6c03aed7f6bb, }}}, + {{{ 0x00067a2f581c7dce, 0x00040905352db2c3, 0x00062690f0ea7a25, 0x0003aa486ca53ddc, 0x00078b5169959e1d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x40cc69575ac85cf92bd34d573a95fee636a88655168acb1db421cd4b22c07ec5 + { + {{{ 0x00118254df5d17e7, 0x0010ff9d3a8ca21d, 0x001239c47dd41852, 0x000b8493ab951aa2, 0x00102314bc90371d, }}}, + {{{ 0x0004c85a5769cc2d, 0x00074ae9ba657f2b, 0x00061aa0db9bfa54, 0x0008da0ee5c50b2a, 0x000c57ec0224bcd1, }}}, + {{{ 0x0000aefe8f26908a, 0x0003bf6aa75a6f3d, 0x0002133be85aeecc, 0x000524ddc5bc9b75, 0x00079572c534fcf0, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x979574e000433b34c40464902326375fa4c98896abf693141c9af1e7b6c090f8 + { + {{{ 0x000db23ca35b2d49, 0x000f572598372472, 0x000e5ba812ec2835, 0x000f9f82199bc405, 0x00170ddf8d98b60d, }}}, + {{{ 0x000b4300e0749597, 0x000c720c80988686, 0x00022326917cdc97, 0x00050e0a49fb55cb, 0x0007890c0b6e7f19, }}}, + {{{ 0x000140b7fdd75dc4, 0x00030b5f02d37e92, 0x0002d212168ecc0e, 0x00005515ac7118f6, 0x00045769691e89a7, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xad43a65bdc3d0e396b1bb9e9d9fe5c88909d67561074ae8b787c5cb006f7c0ae + { + {{{ 0x000be305345b2db5, 0x000ebd805d736a9b, 0x00155785f51ea72f, 0x000ec10111aef7ec, 0x00110b74232f01c0, }}}, + {{{ 0x00063ddc5ba643ad, 0x00033d37236d6721, 0x00099e76422173fb, 0x000e3c45d73a082a, 0x0002ec0f706b05c6, }}}, + {{{ 0x00021694608f59d8, 0x0003f7c7a18f9f87, 0x00013851c22537b8, 0x000353c8285b3715, 0x0005d6fa9d25a3f4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xdda6a3b2fe5a2cac650ef09d07ed6ca6ad9c9f18f6cb4c061ce7c98718a44fd7 + { + {{{ 0x000f4185e46e6ca8, 0x001025e447ca48da, 0x000df49918a9a72e, 0x000cbd3cbffafbf9, 0x000e45e704f775f5, }}}, + {{{ 0x000c5afeb2a3a6ca, 0x0000f3be01ccb584, 0x000a7e72b699b3b4, 0x000b8e032665fb0b, 0x000d74fa41887c9d, }}}, + {{{ 0x000529dade891efa, 0x0005a245dcfb1925, 0x00053854443ce9cf, 0x000499791aacc114, 0x0007420e574dcaab, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1c4b23943f6e3ef8101c429be6617bc8a554c493b0334b4575c0cdc3a90fa62b + { + {{{ 0x000ea138a0345129, 0x000de8df3a73beeb, 0x000d1b92983f987f, 0x0011e994571c80c5, 0x000c4ef4632b5819, }}}, + {{{ 0x00066e3f94234b09, 0x0004d36843821f07, 0x000711529721ed87, 0x00083aa2a599d849, 0x000aba60fa9c3cdb, }}}, + {{{ 0x0006491c21d364c9, 0x00058ca44944b47a, 0x00001c725d1768ee, 0x0001e7ab7a88ece0, 0x0007054899c44b5f, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xcf6db1aa0b4e9538d7651578c06c16fa537db84d67e29ac78151079d71c546d1 + { + {{{ 0x00118bc5b775ea3e, 0x000b44c7078af674, 0x0012ac4a5c4864c8, 0x00144a7477d08c7a, 0x000f2697b0c50ad4, }}}, + {{{ 0x00054e0baab16dbc, 0x00080f02acbae712, 0x0006e1f54fe859b2, 0x0008c0e3cd7133a6, 0x000d146c5719d074, }}}, + {{{ 0x0006a968c8681fda, 0x0007d5233b69a2ad, 0x0003bdb5e88bc1c8, 0x000414cce51a3056, 0x000210f9e2e777a4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x24d3bbfe2786a02e9d2abdab09ffdf4ef5dda73743a4df603938aa55fa7184dc + { + {{{ 0x0012d88cf3d2c405, 0x000a5078e83dffcb, 0x0014ea2b4ccd0d87, 0x000cebf8481b92c1, 0x00121512cb2ac4c7, }}}, + {{{ 0x00088627febbd311, 0x00093577a553a5d3, 0x00069f77d53b7ffb, 0x00041cb06fd2219b, 0x000dc8471fa55aa3, }}}, + {{{ 0x000485db7b39cf58, 0x00078a25ce3a055a, 0x00004e8a481e6a53, 0x0002e4f49fa8c269, 0x0003f062bf6bad54, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xa8252f20345f91099b9917814e59db1b459512b9e0be3eb33d8f0b5b3c9a63c7 + { + {{{ 0x000ee40025281fb2, 0x000a9f80f9469fc9, 0x000e50733783bbb6, 0x000c35a363592611, 0x000e3c230c5ab908, }}}, + {{{ 0x00095f34202f25a8, 0x0009d022f3336131, 0x000c4a55146f6d64, 0x00079ed99f5f705b, 0x00047639a3c5b0b8, }}}, + {{{ 0x0000e68da17fa067, 0x0000fa5d6a539d8d, 0x00071536031a4b74, 0x00078ce463afc653, 0x00018c2d4ae9d429, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe315b8aaf66d29bf4bce7086d808870f0584133625c0ae05c160f06bd7ccf976 + { + {{{ 0x000bdd5fe967807d, 0x000f78ffe8b6ea3a, 0x0015ffae1a1178b9, 0x0009d0daf19cee28, 0x000f25fe14e3a78d, }}}, + {{{ 0x00096df6aab815e3, 0x000310ce19c977e4, 0x00084e10143e1c23, 0x00086082d760129a, 0x00076f9ccd76bf05, }}}, + {{{ 0x0006089ea75ff17d, 0x00044f04e190cbde, 0x00044ebaf66bf862, 0x000093ccfef94d73, 0x000105c71c9ce179, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x4948e66cdd6031b3d12bb3a0c3c0ae22ad9d9f5a69af70c2422a9cee9dd5a8ea + { + {{{ 0x000c95b2b9ce8395, 0x000c695c525a27f5, 0x000db2dee888490a, 0x001179ecb4dd0d16, 0x001035b7993a9753, }}}, + {{{ 0x000960dd6ce64849, 0x00087416657a3665, 0x000a7e76b48abb02, 0x000d21613857b4ac, 0x0006aa8d59dee9c1, }}}, + {{{ 0x0002c8ab015c2a6c, 0x0001caf4ec614bdc, 0x0000a55530b98cb4, 0x0004b27d1b42965e, 0x000373b931c5d27b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x0530b7edb017dada2021ce5a33a0b88852b75e6770883f277cdd89a646c65a91 + { + {{{ 0x000aa63764bda836, 0x0011808681856ec0, 0x000cedbe463889f4, 0x000c64b8405600c5, 0x000dee7ff8fc12c5, }}}, + {{{ 0x000a17b0edb72ff2, 0x00066b59c4241b5a, 0x00057add4a22e280, 0x0006be139fc43833, 0x000915ac646a689d, }}}, + {{{ 0x0002ef219c8ee83b, 0x0001f7939a2af59e, 0x0002e4348a3dd7da, 0x000463652a4db91a, 0x0003cf9bc133c79c, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1a9cb917759c3672c3623fc1aef574c70d8345f57d062aa2a6e16c086ec1fabf + { + {{{ 0x000be8ef47011b88, 0x0014f9e45d18b596, 0x000b52944ff634b8, 0x000dc468a99a22d2, 0x000d366f253b298d, }}}, + {{{ 0x00069c7517b99c1a, 0x0005d827ec586e46, 0x0005160c371dd3d6, 0x0008d35115033efa, 0x0003ffac16e086cd, }}}, + {{{ 0x000620153454e375, 0x0001ccdb3bd961b3, 0x0004a37247e33d0b, 0x0000cd4fa9f23806, 0x000354a316db15e6, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x64eed65713f6573704f9ab0644e6d2fd26c3aff74a541bc7a5e77e04b3d1b642 + { + {{{ 0x00152aecbaa99b45, 0x001241597b12bab4, 0x000c87a7d36b2ae0, 0x000c71460baa0e27, 0x000fd2820f8d78f6, }}}, + {{{ 0x0007f61357d6ee51, 0x000880d57f2086ea, 0x0006bf0c9bf74b98, 0x0003d2e38daa257b, 0x000c2b6d1b3047ee, }}}, + {{{ 0x0006286916c1ae74, 0x0004cf2713a3b066, 0x0001c5c673d493b4, 0x0006eee5b5132610, 0x000152658cf0e339, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb5bbab2cf9bf5d1b61a2474d0e57dbaf6d82b5f887c0a94bb4d3da32cdfd7efa + { + {{{ 0x0014cb16adbbcde9, 0x000f26a721c47c7d, 0x000ce217b07b109e, 0x0011e4750f56ba45, 0x001615656d2d09e8, }}}, + {{{ 0x0005bff92cabbbb5, 0x0001c9a8f44c236b, 0x000ad609b6bf6d5c, 0x0009da25d4e043fb, 0x0007a7efdcd32dac, }}}, + {{{ 0x000716dfd8edd67d, 0x0004b1edebf0caf3, 0x00027d155718c808, 0x000727c3a46c8c47, 0x00069d6b14b21576, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xcccab587e2f8d58ae787d2489448c2ce86973dfb97c952bf49c86ee14d4347e4 + { + {{{ 0x000e68c1e1399417, 0x000d34be0cd77f25, 0x0014a8532b3ba731, 0x000cb1ccc35c0ae3, 0x001058e72248fc7a, }}}, + {{{ 0x000df8e287b5cab9, 0x000a891a50fcf159, 0x0004f65e1b3b0921, 0x000424dfa964cbfd, 0x000e447434de16ec, }}}, + {{{ 0x0004e5f9b56c8a52, 0x0006ad5e7ac00019, 0x000190258f40a6d6, 0x0005ad0b747aad75, 0x000765622a697cd7, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xee5dc328f5e69a25ae9a6206024d1eaafe3d196d1731d75d2c0ba8496bc0d30f + { + {{{ 0x000f0c6531259c97, 0x000bab7f4496f7e4, 0x00118478d066d123, 0x000b8e4dcc00d00e, 0x000f3a5ef4f1b68c, }}}, + {{{ 0x000ae6f528c35ddb, 0x000840cc5355c4b2, 0x000464f7faa87933, 0x0005962eeb988bb6, 0x0008fd3c06b49a80, }}}, + {{{ 0x0007506bd94ccf04, 0x00047e70376bf6be, 0x0001bc489b34ec01, 0x000191b26dcfcfd8, 0x000034da6927a84b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x89094adcd1683ef62fb1a8270a9a1cdc3a10771a81c65ab8fd01c3aa937b004d + { + {{{ 0x00111d4349447ace, 0x001609eb564a3de3, 0x00147830e6470f47, 0x000a92b8fdb0ddc8, 0x001014feaf9cc9a1, }}}, + {{{ 0x000668d1dc4a0976, 0x000944f51625fec7, 0x0009dc40eb707267, 0x0008fedc2d63408c, 0x000cd007b93aac2f, }}}, + {{{ 0x00013ba341fc4970, 0x00039d4c72327f5f, 0x0002c53bddc2317c, 0x0003dfb81586baf5, 0x0001d6c9fd82a2c4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x823771b2b9b15d3b629901a2d4a5e27d280d9d1fc02139b3252f41a25c9df298 + { + {{{ 0x000b471c7882e359, 0x001286d18efeb999, 0x000f3960915b157e, 0x000ec73fdcf8efa8, 0x0016041945135a94, }}}, + {{{ 0x0005b1b9b271376f, 0x000a9440332c476b, 0x000e7434a1f78a96, 0x000792d99c90e00e, 0x00098f29d5ca2412, }}}, + {{{ 0x00072459f89c73cd, 0x000525e516c40354, 0x0005db480b5e5a43, 0x0004fa1da5afa82f, 0x00040999d7574e47, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf381bb5896bbade8b644dbed90649a7e08e676f74a401fed68404c3c45270f2c + { + {{{ 0x000e3b55bddfe4d8, 0x0012f00efd5bc013, 0x0014469bd11679ff, 0x000d39bea5cdd3df, 0x001530d9deb26749, }}}, + {{{ 0x0005bb9658bb81e0, 0x000a1dbb6896dd15, 0x0005db9821fa6991, 0x000834768fa0257b, 0x000ac0f27453c4c3, }}}, + {{{ 0x00050f59c7b77b25, 0x000609a12f1d301a, 0x0006ae185d708415, 0x00047717ce402241, 0x00069c6f2109dba3, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x5d9f04cbd99ee7fa2b93fa2338d05eaed7260ae35cb6cb3bea9d7b8eb1885633 + { + {{{ 0x000fecd945e12bab, 0x0014543180d0fd58, 0x00123cfd24e4ee0c, 0x001256f1a105bce1, 0x000f719c9208f35f, }}}, + {{{ 0x00079ed9cb049f5d, 0x0007047f52657f5c, 0x0004289b5eb97b40, 0x0006f51de5db2e71, 0x000335688b18e7b9, }}}, + {{{ 0x00008fee97eb0e8d, 0x00056fdbcabe58b7, 0x0003874040adc6e0, 0x00001eea71ab8b5a, 0x0007f2b07544bf65, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xca26e8f785b434f2f364fc8af43b16fa91ca66058648ce57e60b58f7d44f587f + { + {{{ 0x0012f37cc23d4452, 0x0011adc6a7af7aae, 0x0014be10d1c9d603, 0x001185e78829272e, 0x0016597bec0957d6, }}}, + {{{ 0x0004b485f7e826ca, 0x0006915f8c9e7e46, 0x00059b2a47e858ef, 0x0005f32be7244302, 0x0007f584fd4f7580, }}}, + {{{ 0x000588d6ec48bee6, 0x0003fad13d8e2bac, 0x0005a859e3fa89e1, 0x0005d15672694996, 0x00059c6d27023dcd, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x8093c0cb469f49d2fe23aea111ddb8c3437188aec6d60a757b7520effbc89f62 + { + {{{ 0x0009a92f4c72d612, 0x0010c86505d192a6, 0x0011d44e4dce7c5e, 0x001029c8e9cb49a5, 0x0015f5258bd0a147, }}}, + {{{ 0x00099f46cbc09380, 0x00023435c47fda48, 0x000221c50f0ee374, 0x0002bdba856b6357, 0x000629fc8fbef207, }}}, + {{{ 0x000362dd9750cce6, 0x0004040b1009620f, 0x00026c1f120147bb, 0x00012e7ec1f36381, 0x00023e79d99f2e7d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xbe150add8187e8f4607ee7378a7c3814d212de1e19f9ee1882c956a979d3554d + { + {{{ 0x000f471c254d32e5, 0x00155e9239cc5160, 0x000c244b3cac6099, 0x001288b31315fbc4, 0x000d9ec3700d636a, }}}, + {{{ 0x00088781dd0a15ab, 0x000946fcefcc1e9c, 0x000b784b4850e1f1, 0x0004c10c777c8c8e, 0x000cd55d379a956c, }}}, + {{{ 0x000471ad0ef0d9a7, 0x0006ef93730d7873, 0x0001ec78b0bab6b5, 0x000760812120b138, 0x0003d6026ecee774, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc2de09556200aca241dd7fc660038766aee720956ef44a051fba314eca760ca8 + { + {{{ 0x000f5dc258a3756c, 0x0010bc399022954e, 0x000c07e2f4313c9d, 0x0010f680b8457654, 0x000e3eeb01ee2aa6, }}}, + {{{ 0x000c00625509dec2, 0x000418cffba83454, 0x0004839eb99a1c0d, 0x000d0f82a57a374a, 0x000280c76ca4e31a, }}}, + {{{ 0x0001e6e5447c1595, 0x000404e576ec365f, 0x00047379f29de10e, 0x00054f12876aaaf2, 0x0007e2bf7ff62038, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x8580ed6913049b3103bbbcdeedc3351c194ffd19d5345061e3cef60083e7afc0 + { + {{{ 0x000db05c53590c2f, 0x0014227546c66d40, 0x00155668d4bdeda3, 0x000da77067df3448, 0x0010450b7dd6a628, }}}, + {{{ 0x000b041369ed8085, 0x0005bbd797606632, 0x0007f53c6470d70f, 0x000771b0a81a6a8c, 0x00040afe78300f6c, }}}, + {{{ 0x0005f997182b5ff4, 0x00038db8f87eb723, 0x00029fd59cdada8d, 0x0005fef70201c1de, 0x0005cd3915e66fad, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x942bf3aa17ba7a87669262080b244223c51a92285c360747009fa1c37de308cb + { + {{{ 0x000da484cea950b8, 0x001399e180d4cafc, 0x000f1ae81826c83f, 0x000ff8b8bfe825a9, 0x000df98103e7f8e7, }}}, + {{{ 0x000aba17aaf32b94, 0x0009610c524cd0ee, 0x000a486b148d088f, 0x00078023839b2e13, 0x0004b08e37dc3a19, }}}, + {{{ 0x00005e812c8ae04c, 0x00066265452e579a, 0x0001d434371b31ed, 0x000141f01290e279, 0x0006be68927b6026, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xdeff6d988d59ba572f9683739175713d4161e054aaed13da19a2d04f752b52f4 + { + {{{ 0x000f3f4e0b00b23e, 0x000d48a9aa2435fc, 0x000e9f582c0c328f, 0x000cba577b6a865b, 0x000faea12c963ed5, }}}, + {{{ 0x000a598d986dffde, 0x000a2e7072c5eaf6, 0x000b818504f5c5d5, 0x00090ced09f6d529, 0x00074522b754fd09, }}}, + {{{ 0x0002f2362c51d277, 0x00053ef3ce434ec3, 0x0001dc2cf14869a7, 0x0005fac142c77401, 0x000353290e8a4d4c, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xbccf4462e4f185b58f6bba333f970fc5d3bfc3979ca35d3c6783327573413909 + { + {{{ 0x000b21405c14c805, 0x0015708470cede72, 0x000b537ce0a88a2e, 0x001176b8657066ab, 0x000b387152159186, }}}, + {{{ 0x0005f1e46244cfa9, 0x0007e6774d71f6b0, 0x00070eff4f143e5c, 0x0001b39e2ed1ce4b, 0x0008939417375328, }}}, + {{{ 0x0007ad63c6d0f5f6, 0x0001675baddd8321, 0x0000da9740a0ba2f, 0x000568097c91cd82, 0x00021cc19aec1a23, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc5f21cfad8cb98cd652cd5f9acd5ca619190eb98cd26e056237894998d6de7b0 + { + {{{ 0x0012061b9f613046, 0x000fcb061cfd88d4, 0x000dc422e54300a5, 0x000bfba0caa905e2, 0x000b8e4a8fb43c79, }}}, + {{{ 0x0008cbd8fa1cf2b2, 0x000d9f3aa58cb9b2, 0x0003ae4245872b55, 0x000411ab701366cc, 0x000b0e76d8d99947, }}}, + {{{ 0x0001be79df95c740, 0x0002e618c39dded3, 0x0006dacb3b9aa02a, 0x0002e2308d6764fb, 0x00024e204cae5026, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2ca93b7e84f49cc1d4fd779e8af27349f50c69533ec00792ece65f6cde4c07b0 + { + {{{ 0x000b474450a64f35, 0x000b7afeea0a55eb, 0x0014328895b6752f, 0x000f993ca5c0e56f, 0x001456f015f75e2c, }}}, + {{{ 0x0004f4847e3ba919, 0x000953ceffba9833, 0x0005a433d525cfc9, 0x0003764903e01f29, 0x000b0074cde6c5fe, }}}, + {{{ 0x0003ed471f920bd0, 0x0000147e8b68f99f, 0x00002521b2f2ebe8, 0x000732677f7f129d, 0x0006c672a50f5632, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x57c649698498104a86fc2b5563e6dfea161564d0a4e51ef5c514ab33b1efbcbf + { + {{{ 0x00165040563d7591, 0x00126d873cf591c7, 0x000de82dd1aea4c6, 0x00156fbb4c30205d, 0x001030cbb1994c0e, }}}, + {{{ 0x000898846949c657, 0x000c6aa57f90c941, 0x000990545bab7f98, 0x000a62fa8f72d267, 0x0003fbcefb133ab0, }}}, + {{{ 0x00013af104ed26b3, 0x00012b74d25ee4f4, 0x0000a41a3cbf5305, 0x00014f469fbefebd, 0x00010473b038c1a5, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb42397c6d2b12ae67991d9b9a47aaba95753f030edb689766c1c05d6588d4cb3 + { + {{{ 0x001004c0f96dab01, 0x0012d8ab73cf4a00, 0x000dac88adc7e093, 0x000fbc81a35abe0f, 0x0010cd5df75d0fd2, }}}, + {{{ 0x000ab1d2c69723a1, 0x000c973b322f3cc4, 0x000bc14d5ea6ade9, 0x000e363b44db7697, 0x000b34c8d58d6050, }}}, + {{{ 0x0000dcb73f99f998, 0x00051e155b44eaae, 0x000638f14b23ff76, 0x0001f2f881a7f2a2, 0x0002aa3f297f9f1e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x3f09b93b93eb7743cd974413af29b3e6287caf9b87c07ca7b4a18ddc0459df69 + { + {{{ 0x000bd151a02c4423, 0x000f096d98f027a2, 0x00117f376631c9e1, 0x00120d2db43fdd7d, 0x000d33e41db0ec7b, }}}, + {{{ 0x0007eb933bb9093f, 0x000de26892f9a86e, 0x0006bdf0a39acca5, 0x0008da53be6043cd, 0x00069df5904dc8d9, }}}, + {{{ 0x00011b98c783fa9f, 0x0007d4a7b7c09f2b, 0x00056371c8d6acfc, 0x0004932aff27dd99, 0x0007dfae60250182, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x3e857ea92c876920a50288a3f701069760250fd5a5bf1881f4c0673f0ae4f3b5 + { + {{{ 0x00136efa09a4004e, 0x0011f7283926cbca, 0x0010604bf97387b3, 0x000db1c5ffebd617, 0x000cec26289fc28f, }}}, + {{{ 0x0009872ca97e853e, 0x0006f4710054a40c, 0x000c3c95825c1807, 0x00087a408c5fd2e9, 0x00035f3e40a3f67b, }}}, + {{{ 0x00078061a5eb141c, 0x0004dc3e47588cca, 0x000698dae35b002c, 0x0000bf8fbaca1a49, 0x00033f19a0d4d294, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe77b8a8be3f399f39332f10dc3d497d2a2b230f2a599a8483fa13859a71a4bac + { + {{{ 0x0012fe11ba5189e2, 0x001513946c45c218, 0x0012f85322234f54, 0x00143aa137965e9a, 0x000f9c7d7b14f9e1, }}}, + {{{ 0x0009f3e38b8a7bd4, 0x000861be26527e72, 0x0008c2ca8b4a5f52, 0x00089fa4544cd2f8, 0x000ac4b1aa759389, }}}, + {{{ 0x00019d7fb0d092e6, 0x0006872a1d03b544, 0x00052d59e41365bc, 0x00021ceee9b226d8, 0x00016c022a5ee36b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2dca90c67e3cd9af4afd8abcf5058fc1e5a182583a57f89bd69f8db0bee3ddda + { + {{{ 0x000b9f44a1fc8875, 0x0010f7df1ad86078, 0x001004905d258fbe, 0x00081f9dfe0daac4, 0x0010174c21930849, }}}, + {{{ 0x00093c7ec690ca2d, 0x000eb7915fa955fa, 0x00020a8797063c16, 0x0007eb4dfc2b9d2c, 0x0005adde3beb08d9, }}}, + {{{ 0x0007a5046136a091, 0x0003e248ba3a5fb8, 0x0006874b64ab1f9b, 0x0002aaf57a37165e, 0x0005ebbf693b0890, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2fc313fff33ba80fb9cb1ecb73a4c2c857d3e3ae023adbb15653c14a3120cfe8 + { + {{{ 0x0014df80faee4734, 0x000a31d07e2dc2e4, 0x000e73a4ffe39985, 0x000e80c7276083b9, 0x000f66e7bc3dfbaf, }}}, + {{{ 0x00083bf3ff13c31c, 0x00067963d97721f4, 0x00038f4d5f230a91, 0x0001ab58ed9d0157, 0x000e8cf20314ac15, }}}, + {{{ 0x0001f5f15c782901, 0x0000a06f9677ed63, 0x00008b4fb6128410, 0x000559eda8b71e30, 0x0005a1a64ac23528, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1ffee08e7e53d2232b77ba2fb58a20202f89c5c1f156f3fe00a05c751e7bf36b + { + {{{ 0x00151ff702392133, 0x00126ff619085ebd, 0x0013e7b7de3fe6ac, 0x00119b8c26237e78, 0x000bc3f81ad6be9f, }}}, + {{{ 0x000a537e8ee0fe1f, 0x0006a5f74ee56479, 0x00071624bc80822a, 0x0008007f79ab78e0, 0x0006bf37b1e755c9, }}}, + {{{ 0x0005d297a87d4de3, 0x000059cd0d8c322a, 0x0000db82cc2ff90b, 0x000513219be77693, 0x0007a53ad4ed692b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x8626e539a4d9b0ca195849a04be1c3efb294b3a0b534a9cb0e92bd2ea577bb1c + { + {{{ 0x00168c28e02a5c07, 0x000fa43c5ef55aad, 0x000bc9ba43766d97, 0x000ee92d27bc6afb, 0x000c187b94cdd298, }}}, + {{{ 0x0008d9a439e52673, 0x000174092b033955, 0x000ace52cbbf0f85, 0x00090765d49a5acf, 0x0009cbb77a52ebd8, }}}, + {{{ 0x000506b158f3c4d1, 0x0005d6fce9361a6a, 0x0003ebdadeb3b132, 0x00031a2ce898f36b, 0x0006977764ead2ee, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x59377da43871ddb4dff612c7d78f9ab761a31479411cf874f1257094035f5e73 + { + {{{ 0x0010a715dfa999ae, 0x0011a5bf4997112d, 0x0010475830bd21b2, 0x000d3b725c6cf692, 0x0010a242c5156416, }}}, + {{{ 0x00057138a47d3746, 0x000af8e25edbf69b, 0x0004528d86de6a3e, 0x0002f8ba7c0e20bc, 0x000f35e5f0394702, }}}, + {{{ 0x0007cfe5453dfcc9, 0x00048b36ca31387a, 0x0005f1a70c8d6967, 0x0000a811a02588ce, 0x00055ec596a81824, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xee1481d7c1548a67644920ba079c587032f17f977c4bf79f2fca83f5feb0f198 + { + {{{ 0x000e8e6abf002cd3, 0x000c2e186bc523af, 0x0011c93a4ca560b9, 0x00128256f94263f2, 0x00130d2b249325e8, }}}, + {{{ 0x000254c1d78114db, 0x0008f744092c8cf1, 0x000dffc4c9c1626f, 0x000517cffba5be4a, 0x00098f1b0fef583c, }}}, + {{{ 0x000361b9c78fc401, 0x0001b9452abd5d90, 0x0001e36f9bdd8acf, 0x0007bcf1d4045163, 0x00046b90a1af8268, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2aff9ceb57bc197925f48fc2fcf9e3d8ec02e4baf6f9e9b202acb27b50f928fe + { + {{{ 0x00105c80c23bfcf2, 0x0008d8fab54fd937, 0x000ca1081fc6eecd, 0x001336948cb97676, 0x000e8e27d4efcd56, }}}, + {{{ 0x0001bc57eb9cff2a, 0x00079851fe84af23, 0x000b900bb3638fe7, 0x0006015974fcfb5c, 0x0007e28f9507bb2a, }}}, + {{{ 0x0003b38e51e86631, 0x000629577085aef8, 0x00035ccb7cd04175, 0x0005a458dd21ca4f, 0x0000685c061f2d35, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x038bf0a5921dd8e391b2772b9ae2259f5bb539c23c1be9404993fefcbafa152b + { + {{{ 0x000d12c7466ec0f4, 0x000f9aa951ac5f40, 0x000a86443b6d4e04, 0x00111bc24e2a979a, 0x00141affb26f11e5, }}}, + {{{ 0x00081d92a5f08af0, 0x0003456ef6523c7a, 0x0008e6d56e7c978a, 0x0001a4a0748d9e60, 0x000ab15fabafcfe9, }}}, + {{{ 0x0001d28b92329057, 0x0007dfb114dedad5, 0x0000ef7c36c17d45, 0x00072217aea9f258, 0x0007be0246367b2a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x37d495c2c731597a1bc101ec8e46c0790c3a8d767d585bf08580e28c8d84e7f5 + { + {{{ 0x000f05d5ceeef155, 0x0010b9b517a995b6, 0x000f9f9765c6cad9, 0x00092dc14ff362a9, 0x00174e364f6ea7d9, }}}, + {{{ 0x000931c7c295d437, 0x0009dd8038236f4a, 0x000234e831e70119, 0x000842f82dac3ebb, 0x00075e7848d8ce27, }}}, + {{{ 0x0005022f3deeea97, 0x0004ea7ab2fe6b52, 0x0004c88fe2029ecd, 0x00037d229324c3fe, 0x00020431006952f5, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x72cb4870078dccee117e12d1cf134a8e5c1fde835667e1541450b4aaf245f53c + { + {{{ 0x0014887436eabfa6, 0x000b9c1fd851b789, 0x0014e86591c49d4a, 0x000a9bf70c93b477, 0x0012c31962210db6, }}}, + {{{ 0x00048d077048cb72, 0x0009fa224fc23dd9, 0x0007787d7239284e, 0x00080a2a70b3ab41, 0x0003cf545f2aab44, }}}, + {{{ 0x0007e06d9a8cf71a, 0x0000f70c1ea4eb3c, 0x0004e3bcde931980, 0x00028ad32ddb959f, 0x00008175d884db72, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x6af4e54ba3028faca1e591e4ec403f18f2402f9c9288d5a4326e4748da321c30 + { + {{{ 0x000dc173856ed5db, 0x00118644d0eeba63, 0x0013574b864be531, 0x000ecbd71fadeddb, 0x000f987f74938688, }}}, + {{{ 0x000702a34be5f457, 0x00059c923cb43591, 0x0008bd03c860fd03, 0x000719526ac4494d, 0x000b01c32da48476, }}}, + {{{ 0x0001015f27bee3d3, 0x0007be93d290794a, 0x0006da84b51671ee, 0x0007fb245f8d799a, 0x0006d52bfd3c92b2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xa5f616e17c3f908788ff8e13999015cc5a95a30be3aceb3bf0dbf5deac50a57c + { + {{{ 0x00116b1a8772dc87, 0x0013c82c275b4629, 0x0013b69b6d8b9429, 0x000ef42435bd3b59, 0x00091fc28d21d934, }}}, + {{{ 0x00083f7ce116f6a5, 0x000b2271dff110f1, 0x00068e556b305641, 0x000df81df5d67185, 0x0007ca550acdef5c, }}}, + {{{ 0x0007d6d0ac3fc00d, 0x000078433a5f0f3c, 0x000220a379de30c6, 0x00009c81cd9506af, 0x00019f0acccbfff2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1852f93d21af16998b57bdcbc6bafd807616ea0256b30e3b112f37e50a2096c0 + { + {{{ 0x000ea14ae542bb49, 0x0010c33e3c49239c, 0x000dd44c33ecd6f8, 0x000f69ca99a2eec7, 0x001025db7ea19c9c, }}}, + {{{ 0x0006af213df95205, 0x0008d977aaf17322, 0x0003a859da03f6ea, 0x0007889d8759ab01, 0x000c096200ae5372, }}}, + {{{ 0x0006a0891eb71ac6, 0x00052d77b68e0667, 0x000425add361ac11, 0x0006e7f501c3d2aa, 0x00054bb07408c4c5, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd85a29057217e0f6a64d4bb45e189e4afdb1bac2a8066bef8cf18ceb95074378 + { + {{{ 0x00101d90870d8026, 0x000fea1850cde1ed, 0x000f41bf299dcfac, 0x00090c3853b47aef, 0x001461902f81ab74, }}}, + {{{ 0x0008177205295ad8, 0x000bd68969b4dedb, 0x0002eac7f52a7860, 0x0008c677b5835461, 0x00078430795eb8ce, }}}, + {{{ 0x0000e3ee2d67f793, 0x0004f11a790e95d6, 0x000700735eeadb29, 0x00055180618dff34, 0x0001717e0e2aee24, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xeb7042d94cd6d39cc10ab6d08fb07036abed3606ae12bc46396660f0fe5c2494 + { + {{{ 0x0011d575987dd1f8, 0x000b3a8ec173c02f, 0x000d247997dc07ad, 0x0012542aee14ae1c, 0x000f6fc01d3ca41d, }}}, + {{{ 0x000bd64cd94270d8, 0x0009fa16c1583399, 0x0008dbb6acd9c2c1, 0x000b1ca35e095702, 0x00094245cfef0605, }}}, + {{{ 0x00023c2c7191f7ef, 0x00001481055593fb, 0x0004fc62153cd177, 0x000460a015501da0, 0x00072b6c30612f00, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x7e6e9135621dfb6c1cf33593cc547a555328391c82b064aa1562d67de234bf2a + { + {{{ 0x00147cdeab6e9923, 0x000fb276d3c893a8, 0x000ffb7c5c854729, 0x000fad94069d9f8f, 0x000e2f676675a7f2, }}}, + {{{ 0x000b1d6235916e6b, 0x00019266be638d9e, 0x0008e4a14d55e953, 0x00010ad53258410d, 0x000aabf34e27dd66, }}}, + {{{ 0x000499e7ddeb2cac, 0x00054a215e52593f, 0x00070de2a07313e8, 0x0007b5d30f0a2e51, 0x00053ea72f96f524, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x44f0464c44220c3209fefe27148611efa92bb15a930888248790cabc398f5113 + { + {{{ 0x00137ff33e5f56fd, 0x0010568ad7cdf896, 0x0014973edd45bd1d, 0x0008d0c8add7f970, 0x000d6f5d4f6d2478, }}}, + {{{ 0x000c22444c46f031, 0x000a84ffdfc12640, 0x000ac4aea7bc4617, 0x00084392440449ac, 0x00093518f39bcca8, }}}, + {{{ 0x00059a51fbe6499e, 0x00006b49638823d0, 0x000200f1c1b520cd, 0x0005273bfc4267eb, 0x000288e834f9f85e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x65d64141d0ab6e69712d1b148fd005d8930c6d021129f230b5357b4a201c2bb9 + { + {{{ 0x0011e75f2dedca54, 0x001124a8db31ac41, 0x001416b8bb10e887, 0x00106c26316c5752, 0x000f32cbad2e787d, }}}, + {{{ 0x0006abd04141d652, 0x0009e28365ae2d2d, 0x0009b4324f601741, 0x0002da9879148880, 0x000b92b1c204a7b3, }}}, + {{{ 0x0000aa53e5b38e71, 0x00010620bd157814, 0x000300a59b207b45, 0x00018956671f9e9b, 0x0003a9fc0406527e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x0970397900bb656f9b9357dea553f37e93d027586170ea4e3adec181d0f308d9 + { + {{{ 0x000fa6e90e282537, 0x000d804bb8ae6e13, 0x0011a854404a27c8, 0x000f64f419090a8d, 0x0012fd7dd15bdb12, }}}, + {{{ 0x000dbb0079397009, 0x0004bbcaf2736deb, 0x00089f424dfbcd4e, 0x000f1d27753830ab, 0x0005908f3d081c1c, }}}, + {{{ 0x00002e80fc71f8e5, 0x0004db21bfa5bbab, 0x000775f245a365a5, 0x0002385b984a87f0, 0x00037a02121c0d86, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xcd88945ef0ee8517293b57eb77522105e3b4228f8573b58bb4ac549b84706eed + { + {{{ 0x0010a0e008253d3b, 0x0016d5510da09998, 0x000d496d28bcbc41, 0x00122d81a69659a5, 0x00137df80968a096, }}}, + {{{ 0x0005eef05e9488cd, 0x0006fd6ae76522f0, 0x00048ad38c148549, 0x00065a45dab9c2c7, 0x0006d6e70849b54a, }}}, + {{{ 0x0001583c9ee0a4ee, 0x0001d7f5ecf0a0ca, 0x000527adfd6c5dfc, 0x0006f60733e2c790, 0x000747ea5a9fac54, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2ac769d36da59836c4ba08c44f6a29f8e54875194b25bbb476d462728b0d281b + { + {{{ 0x000d07ddab4d2f8b, 0x0011d4d521250f46, 0x00153fa85ee5a96a, 0x000e66563219c168, 0x000e8751b3b0af48, }}}, + {{{ 0x0008a56dd369c717, 0x0009f881175886d2, 0x0005d52397e0a5a8, 0x000a3b5a5d92a58c, 0x0009b280d8b7262c, }}}, + {{{ 0x0005a3ddcf666241, 0x0006e98ff8ee5b54, 0x00018e8944196025, 0x0002b48555244020, 0x00069521d5a97748, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1898827c177107fd2a3183cdb072753b3a554f1364fa3876045f3a5e4fb87901 + { + {{{ 0x000ab1c8ab6e8bd1, 0x000f9f8babe51526, 0x0010b1a20fee4a01, 0x0014cde3e90d487b, 0x000f8b06923016bf, }}}, + {{{ 0x000771177c829805, 0x000e19b066255fa0, 0x00053d54e8edd5c9, 0x0007823b1c7d3209, 0x0008179b84f5e3a5, }}}, + {{{ 0x0004b1f5be7b3013, 0x0003b3626e6534d0, 0x00067455530956e6, 0x000126632cc10047, 0x00033138a9404477, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf31333c56ca9a1cacbdb8e1122ec914c06356a9580c434e9910aaf99375df9ad + { + {{{ 0x0010082ec84edbaa, 0x000bd0675fc47f81, 0x00104e6fc3d17bfc, 0x0014629248c2fd24, 0x000e8d88233c9bee, }}}, + {{{ 0x0009a96cc53313e0, 0x00044231db797953, 0x0005a8d4193247b0, 0x000548f49a62404a, 0x000adf95d3799af0, }}}, + {{{ 0x000625e0e9deb93a, 0x0005561f6861f292, 0x0003d80c3edf7423, 0x000122e5c3f35322, 0x000422bcaf2647d2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x58a37d3a86baeb24d10732f41f5d9436fd6341796e806657e6fe4bcb078793f2 + { + {{{ 0x0010bc3e4218d484, 0x000c05ecd411ffb2, 0x00116c283973ccde, 0x00107fbd5a51ba2d, 0x000ec91890315bcc, }}}, + {{{ 0x000bba863a7da358, 0x0003fe8640fa249c, 0x000d058ff4da5174, 0x000f732bb340373b, 0x00072938707cb4be, }}}, + {{{ 0x0000929f275c7d79, 0x0004416e8f9d492c, 0x0006cd5ddb19a8e0, 0x00012d9dd97c42ed, 0x0007ebd2e485ede2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x18fc4c10e21e9e15a38fc3c7384ab3b9a23b9fda6e5ef8c449240f89ed51a2a8 + { + {{{ 0x000e32021a22b219, 0x000be9d5e8d3eaec, 0x000eaac598b0df24, 0x000fd267e122c076, 0x0010052dd9bd6826, }}}, + {{{ 0x000e1ee2104cfc05, 0x000718f871f462b2, 0x000a7cee8ae6cd28, 0x000224e27c2f376c, 0x000a8a251ed890f2, }}}, + {{{ 0x0006f0f08c4cb7b5, 0x0006a9b22d17731b, 0x0007897c04f11c80, 0x000421cac86e4a55, 0x0005079f87e40646, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x5a7fd23a8f9a48871f4512683de37cbdfbe859ee1c730f106401e0b33b1f1db7 + { + {{{ 0x000e1ba56f365ef7, 0x000ddbc112bb3a10, 0x001030dbf3dff70c, 0x000b53c80d981712, 0x00132849614b1c7f, }}}, + {{{ 0x00089a8f3ad27f47, 0x0007ad0248a3f0e8, 0x000967a3eef5f38c, 0x0008b20807b98e76, 0x000b71d1f3bb3dff, }}}, + {{{ 0x0007a9fe2c752a69, 0x0005cf9eacc96329, 0x0003bc0033cc5b77, 0x0005edd391f6773e, 0x00049a46e3b0846c, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x56ba438a2374ae4c68dd5670c791c7e06985722c893d570036b7a37e0ebeffbf + { + {{{ 0x0011a9b320345283, 0x00134a5a331182d1, 0x00151a42c4df6efe, 0x0010b288a3085c51, 0x001163dab0cce6d0, }}}, + {{{ 0x000674238a43ba43, 0x0008ee0adbad0995, 0x0009ca15a7831e46, 0x000b9b002b9ec495, 0x000bfffbe0e7ea3a, }}}, + {{{ 0x00029743a55b7cb2, 0x0003bf3b5b5b97c4, 0x0007375467e9a9d2, 0x0006fcbaa7b6cb6c, 0x000763301a0a9bc5, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x53bf85f046c360eefd6a3e092800a1da0f3b0762f002d6c6fed79975f669f592 + { + {{{ 0x0012148eb5178364, 0x000dc10ff7bf391f, 0x000ce94fc5324677, 0x000d1573463c20ee, 0x000ac97f6229e2f1, }}}, + {{{ 0x0008c346f085bf40, 0x000d0127cd5fbdcb, 0x00081cec3f6a83ff, 0x0003ff636b017830, 0x00092f569f67599d, }}}, + {{{ 0x0006f0383d6faf65, 0x0000da9c5dd15b82, 0x0007ed94709edff8, 0x0006a541a75b0d07, 0x000094c720f857d0, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x22e79f185d587b3762fd340a09a7b47f6db1c43286b4894f3a3b2b06a7ff2144 + { + {{{ 0x000e432e3224b8f3, 0x000d5248abaebc89, 0x0012ec3ec60f7603, 0x000e6bdf6edb5eed, 0x000dc1cc79d9f942, }}}, + {{{ 0x0003585d189fe70f, 0x000921469fac46ef, 0x000312c5b5fed29b, 0x000d9d27c4da4319, 0x000c421ffa7062b2, }}}, + {{{ 0x00005329c509c944, 0x0003c2f4c000908f, 0x00026371a92bc2d3, 0x00001994301415dd, 0x0000b28e57822318, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x0fe10276ed300e8c7149c6c0c826dcddaf4755ceffebb62426629348d4261cf6 + { + {{{ 0x000a817f44b5053b, 0x000cd35f85b857cd, 0x0011541cec0d27da, 0x000eb2534b20ffd5, 0x0016d779ece71251, }}}, + {{{ 0x000630ed7602e10f, 0x00091818c92e3181, 0x0001551ebf77709a, 0x000913125b75ffe7, 0x000761c26d448935, }}}, + {{{ 0x0003e3f7cd04b52f, 0x000495fddf51bf4b, 0x0003c088c9ffad7f, 0x0007dc60d568f1b8, 0x000334f343221613, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x79bfd6be4670715096853a5cb92aafbebc8c1b9e21e4202df124b772e6e191d0 + { + {{{ 0x0012c1290f54702b, 0x000da9c53b660487, 0x001322e8e32722d4, 0x000eb9abc5abaea4, 0x00105e655a52898b, }}}, + {{{ 0x00097046bed6bf79, 0x00072b8750b2ca0d, 0x00086e32f2fabcaa, 0x000a7896907210ce, 0x0005091e1e672b71, }}}, + {{{ 0x00035c12716851e3, 0x000127d048552280, 0x00028aee4df2e040, 0x0000226985d526c3, 0x0007ff150ffb52b6, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x18f11f185614cafc5142691ff113a2c2acd0a4ac65eeb1bc02c3fe3f1da957c3 + { + {{{ 0x000c7f2699bbcd93, 0x000d31382fac5d8e, 0x00107482b55cc431, 0x0010d1aee81fedcf, 0x001189a5d0ddea47, }}}, + {{{ 0x000a1456181ff105, 0x000623ed284a3f98, 0x000a9342b30a884f, 0x0009815e58f732d5, 0x000c357a91d3ffeb, }}}, + {{{ 0x00054998caf88d89, 0x0005ed6511013a69, 0x0003d7d40c1d5948, 0x00070a103c83d555, 0x0005695b080df7f7, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xfa6d87d21b14bad89f8a136ece2ab62343b47de20d5f20824f85fcd5be8e03f8 + { + {{{ 0x000fbc84acb97488, 0x00126460b188f076, 0x0013f2dd0a235876, 0x001082b673aba4f0, 0x000dc9bef79cdbb7, }}}, + {{{ 0x000a141bd2876dfa, 0x0009cdc27153fb16, 0x0009f6d10c8ed8aa, 0x000aa7c1102f86f0, 0x00078038ebed5fc7, }}}, + {{{ 0x000590c2dfdcb43f, 0x00022ecf1db20d91, 0x0006a3acad2b8c0e, 0x0004282736708961, 0x00004ea634f94b78, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf56c3a05b677b87811d82012eb1ed30b7d97ed0246d7b9e82a6f288cfc89d182 + { + {{{ 0x000aa1e47b305690, 0x001257f576cf8f8e, 0x000cf54f96dd7034, 0x000d0e5c129e3ed8, 0x000dfe7c37c90434, }}}, + {{{ 0x000877b6053a6ce2, 0x000d62441b022f16, 0x000bb65df42f4c7a, 0x000795745ceba300, 0x00082d189fc8c286, }}}, + {{{ 0x00019e0eb9cc6f86, 0x000540c05181874f, 0x0007427589776956, 0x00004a8b2ebd5f28, 0x000036e93df776af, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, +}; + +/* Ed25519 base point w-NAF table for fast const-time scalar multiplication. + Table size 8x32 points, i.e. max w=4. + Used by fd_ed25519_sign and similar. */ +static const fd_ed25519_point_t fd_ed25519_base_point_const_time_table[32][8] = { + { // 0 + // compressed: 0x853b8cf5c693bc2f190e8cfbc62d93cfc2423d6498480b2765bad4333a9dcf07 + { + {{{ 0x00103905d7409118, 0x0010ba2817d673a0, 0x000a3e2827f4e67a, 0x001133d2e0c21a33, 0x00144fd2f9298f7f, }}}, + {{{ 0x000c93c6f58c3b72, 0x0008df7181c325f6, 0x0008f50b0b3e4cb6, 0x0005329385a44c31, 0x00087cf9d3a33d4b, }}}, + {{{ 0x00011205877aaa68, 0x000479955893d579, 0x00050d66309b67a0, 0x0002d42d0dbee5ee, 0x0006f117b689f0c6, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd7713c93fce72492b5f50f7a969d469f0207d6e1659aa65a2e2e7da83f060c59 + { + {{{ 0x0011a56042b4d595, 0x001189cc159ed151, 0x0015b8deaa3cae02, 0x0012aaf04f11b5d6, 0x000ebb595a669c90, }}}, + {{{ 0x000ce7fc933c71d7, 0x0002cf41feb6b243, 0x0007581c0a7d1a76, 0x0007172d534d32f0, 0x000590c063fa87d2, }}}, + {{{ 0x0002a8b3a59b7a5f, 0x0003abb359ef087f, 0x0004f5a8c4db05af, 0x0005b9a807d04205, 0x000701af5b13ea50, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x3097ee4ca8b025af8a4b86e830845a023267019f02501bc1f4f8809a1b4e16fa + { + {{{ 0x00111fe8a4fcd252, 0x000fbcb8374faaca, 0x000d2f5af4ef4d4e, 0x000d314098f98d0f, 0x000aab91587555bc, }}}, + {{{ 0x0005b0a84cee9730, 0x00061d10c97155e4, 0x0004059cc8096a10, 0x000c7a608da8014f, 0x0007a164e1b9a80e, }}}, + {{{ 0x0006933f0dd0d889, 0x00044386bb4c4295, 0x0003cb6d3162508c, 0x00026368b872a2c6, 0x0005a2826af12b9b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x9f09fc8eb95173283825fd7df4c6656765920afb3d8d34ca2787e52103910ee8 + { + {{{ 0x000e050a05681899, 0x00162acc1f5532be, 0x00128141ccc9fa23, 0x00124d61f471e681, 0x00127933f4c74458, }}}, + {{{ 0x000351b98efc099f, 0x00068fbfa4a7050e, 0x00042a49959d971b, 0x000393e51a469efd, 0x000680e910321e58, }}}, + {{{ 0x0003fbe9c476ff09, 0x0000af6b982e4b42, 0x0000ad1251ba78e5, 0x000715aeedee7c88, 0x0007f9d0cbf63553, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x33bba50844bc12a202ed5ec7c348508d44ecbf5a0ceb1bddeb06e246f1cc4529 + { + {{{ 0x001182c3a447d694, 0x000a2964e536eff0, 0x001192821f540052, 0x0012f9f19e788e5a, 0x001154a7e73eb1b3, }}}, + {{{ 0x0002bc4408a5bb20, 0x000878ebdda05442, 0x000affb112354122, 0x000b75ee8df5862c, 0x000a945ccf146e1f, }}}, + {{{ 0x0003dbf1812a8285, 0x0000fa17ba3f9797, 0x0006f69cb49c3820, 0x00034d5a0db3858d, 0x00043aabe696b3bb, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x31711577ebee0c3a88afc8008915279b36a759da68b66580bd38cca2b67be551 + { + {{{ 0x001006b67b7d8c91, 0x001084fa44e72931, 0x0011154ee55d6f88, 0x0014425d842e738e, 0x000b8b64c41ae415, }}}, + {{{ 0x0004eeeb77157131, 0x0001201915f10741, 0x0009669cda6c9c56, 0x00045ec032db346c, 0x00051e57bb6a2cc3, }}}, + {{{ 0x0004326702ea4b71, 0x00006834376030b5, 0x0000ef0512f9c380, 0x0000f1a9f2512584, 0x00010b8e91a9f0d6, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xbfa34e94d05c1a6bd2c09db33a357074492e54288252b2717e923c2869ea1bc6 + { + {{{ 0x000f2c9aaa32218b, 0x000a67774474f74c, 0x001064b0e9b28084, 0x000bf04ef53b27c7, 0x0011d6edd5d2e530, }}}, + {{{ 0x000a5cd0944ea3bf, 0x00075673b81a4d62, 0x000950b925d1c0d4, 0x00093f38d9294113, 0x000461bea69283c8, }}}, + {{{ 0x00036dc801b8b3a2, 0x0000e0a7d4935e30, 0x0001deb7cecc0d7d, 0x000053a94e20dd2c, 0x0007a9fbb1c6a0f9, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x8f3edd046659b7592c7088e27703b36c23c3d95e669c33b12fe5bc6160e71589 + { + {{{ 0x000f5dedf39234c6, 0x00101c36ab1f3c53, 0x0010f08fee58f5d8, 0x0010e19613a0d635, 0x000ba9024a1320de, }}}, + {{{ 0x000f596604dd3e7c, 0x000efc510e058b35, 0x0003670c8db2cc0c, 0x000297d899ce332f, 0x0008915e76061bce, }}}, + {{{ 0x0001f5d9c9a2911a, 0x0007117994fafcf8, 0x0002d8a8cae28dc5, 0x00074ab1b2090c87, 0x00026907c5c2ecc4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 1 + // compressed: 0x1d9c2f630eddcc2e1531897696b6d051587a63a86bb7df5239ef0ea0497dd36d + { + {{{ 0x0013635449aa514b, 0x000be178d0475da9, 0x00150b4712a19711, 0x000adcc2860ff4ab, 0x000b0d76d6f03d30, }}}, + {{{ 0x0004dd0e632f9c1d, 0x000aced12622a5d9, 0x00098de9614742d9, 0x00079ca96fdbb5d3, 0x0006dd37d49a00ee, }}}, + {{{ 0x000444172106e4c7, 0x00001251afed2d88, 0x000534fc9bed4f5a, 0x0005d85a39cf5234, 0x00010c697112e864, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x05c85883a02aa60c4742207ae34a3d6adced113ba6d36474ef060855af9bbf03 + { + {{{ 0x0013c4277dbe5fb8, 0x000da335afd44c90, 0x0010c1164099753d, 0x000f0487006fe421, 0x00125e61cabed66e, }}}, + {{{ 0x00062aa08358c7f2, 0x00046f440848e194, 0x000447b771a8f52b, 0x000377ba3269d31d, 0x00083bf9baf55080, }}}, + {{{ 0x0003e128cc586604, 0x0005968b2e8fc7e2, 0x000049a3d5bd61cf, 0x000116505b1ef6e6, 0x000566d78634586e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd02f5ac6854205a1c36716f32a11646c58ee1a7340e20a682ab29347f3a5fb14 + { + {{{ 0x000fa49f9cc10821, 0x000ab513788a22c5, 0x000dff4b6ef2395a, 0x000aec8e5af607be, 0x000b3975bca5ecc2, }}}, + {{{ 0x000d4285c65a2fbd, 0x00055e62ccf8741f, 0x000c6bb961b19044, 0x0009153405712038, 0x00094fba5f34793a, }}}, + {{{ 0x000746166985f7d4, 0x00009939000ae79a, 0x0005844c7964f97a, 0x00013617e1f95b3d, 0x00014829cea83fc5, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb8ec714e2f0be721e377a440b9dd56e6804f1dcece5665bf7e7b5d53c43bfc05 + { + {{{ 0x00137b8497dd95af, 0x00161549d6b4ffe6, 0x001217a22db1d136, 0x0010b9cf062eb09c, 0x000afd9c71e5f756, }}}, + {{{ 0x00070b2f4e71eca5, 0x000728148efc643c, 0x0008753e03995b76, 0x000dbf5fb2ab6766, 0x00085fc3bc4535d6, }}}, + {{{ 0x0000b3ae52afdedd, 0x00019da76619e497, 0x0006fa0654d2558e, 0x00078219d25e41d4, 0x000373767475c651, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x90652414cb9540633555c116401412ef60bc10890c14389e8c7c90305790f5eb + { + {{{ 0x001299fd40d1adc6, 0x000df2de9a04e5f5, 0x000fc0eebacc1c58, 0x0014cca1b1f82909, 0x0009fbea56c3b18d, }}}, + {{{ 0x000895cb14246590, 0x000802d82aa6ac67, 0x000c42f183bc4850, 0x0006464f1c0a0643, 0x0006bf5905730907, }}}, + {{{ 0x000778f1e1415b8a, 0x0006f75874efc1f4, 0x00028a694019027f, 0x00052b37a96bdc4d, 0x00002521cf67a635, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe45e2f77206714b1ce9a0796b194f8e84a82ac004d22f84ac46ccdf7d9531700 + { + {{{ 0x000fee0b0a9d5281, 0x000b81fbeb4cca26, 0x000f841f3a3e639c, 0x000e76ea30c3445e, 0x000bfa00a7e71381, }}}, + {{{ 0x00046720772f5ed1, 0x000632c0f359d622, 0x0002b2092ba3e252, 0x000e62257c112680, 0x000801753d9f7cd5, }}}, + {{{ 0x0001232d963ddb34, 0x00035692e70b078d, 0x000247ca14777a1f, 0x0006db556be8fcd0, 0x00012b5fe2fa048e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x921e6fad267c2bdf13894b5023d3664bc38b1c75c09d408cb8c79607c2937eef + { + {{{ 0x0010fbc496fce33a, 0x000d75be6b7dae3c, 0x000ca31585cee608, 0x001037e9023930fe, 0x000f49b76f96fb10, }}}, + {{{ 0x000b7c26ad6f1e92, 0x00046a0971227be4, 0x0004722f0d2d9b4c, 0x0003dc46204ee03a, 0x0006f7e93c20796c, }}}, + {{{ 0x0002f604aea6ae05, 0x000637dc939323eb, 0x0003fdad9b048d47, 0x0000a8b0d4045af7, 0x0000fcec10f01e02, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x454e24c49dd2f23d0aded893740e022b4d210c827e06c86c0ab9ea6f16793741 + { + {{{ 0x000d58a649fe1e31, 0x000c4635aeefcc88, 0x0011ff434887f2b9, 0x0010f981220e2d42, 0x000c901aa7183c4f, }}}, + {{{ 0x0002d29dc4244e45, 0x0006927b1bc147be, 0x0008308534ac0839, 0x0004853664033f40, 0x000413779166feab, }}}, + {{{ 0x0001b7548c1af8f0, 0x0007848c53368116, 0x00001b64e7383de9, 0x000109fbb0587c8f, 0x00041bb887b726d1, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 2 + // compressed: 0xae91667c594c237ec8b4850a3d9d8864e7fa4a350cc9e2da1d9e6a0c071e870a + { + {{{ 0x00107d44744346ab, 0x000a82b6a564a81b, 0x0014ed80f875236a, 0x0016fbbe1d450c4e, 0x000ceb728c12fcd9, }}}, + {{{ 0x000b4c597c66919b, 0x0007a150b6990fc3, 0x00052beb9d922274, 0x00070eed7164861a, 0x0008a871e070c6a9, }}}, + {{{ 0x0001b5994bbc8989, 0x00074b7ba84c0660, 0x00075678f1cdaeb8, 0x00023206b0d6f10c, 0x0003ee7300f2685d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x18751e844779fa43d7469c6359fac6e5742b05e31d5e06a13090b8cfa2c647fd + { + {{{ 0x001255e49e7dd6a4, 0x000b8c2163d59eb8, 0x0013861f2a005844, 0x0012e11e4ccbaec7, 0x0009381576297910, }}}, + {{{ 0x000a7947841e7518, 0x000b2c7388dae87e, 0x000414add3971be8, 0x00081850832f0ef1, 0x0007d47c6a2cfb88, }}}, + {{{ 0x0002d0148ef0d6e0, 0x0003522a8de787fb, 0x0002ee055e74f9d2, 0x00064038f6310813, 0x000148cf58d34c9e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x6d75e49a7d2f57e27f48f388bb45c3568da860696d0bd19fb9a1ae4eadeb8fa7 + { + {{{ 0x001492f67934f014, 0x000fded0815528d2, 0x000d8461511a6611, 0x0015ea2e50de1543, 0x000bff2fa1ebd5d9, }}}, + {{{ 0x00072f7d9ae4755a, 0x000f711e690ffc4a, 0x000d82a2355b0d15, 0x0008dccfe885b6b3, 0x000a78febad4eae9, }}}, + {{{ 0x0002681f8c933966, 0x0003840521931635, 0x000674f14a308652, 0x0003bd9c88a94890, 0x0004104dd02fe9c6, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb86a09db064e2181354fe40cc9b6a821f52a9e402ac1246581a4fc8ea4b56501 + { + {{{ 0x000abf5e11244217, 0x001673146756ae55, 0x00114ad99a87e82e, 0x0011eaca65b080fb, 0x000ac863b00afaf3, }}}, + {{{ 0x00094e06db096aa5, 0x0009219c89e6b023, 0x000a78abd486a2da, 0x000a40b29260951f, 0x0008165b5a48efc9, }}}, + {{{ 0x0000a474a0846a76, 0x000099a5ef981e32, 0x0002a8ae3c4bbfe6, 0x00045c34af14832c, 0x000591b67d9bffec, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x5db5189f71b3b9991e648ca1fae565e4ed059fc2361108618b123070864f9b48 + { + {{{ 0x000f0d1c80b49be7, 0x0013d57e7d914624, 0x000bc0722165e543, 0x000de5b93819e04e, 0x000bde02ec7ca8f6, }}}, + {{{ 0x0009b3719f18b55d, 0x000754318c83d336, 0x000a7c17b7919797, 0x000945b084089b60, 0x000489b4f8670300, }}}, + {{{ 0x0002102d3aeb92ef, 0x00068c22d50c3a46, 0x00042ea89385894e, 0x00075f9ebf55f38c, 0x00049f5fbba496cb, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2e579c1e8c625d15414788c5ac864d8aeb635751f652a3915b516788c2a6a106 + { + {{{ 0x000c9a108a5bcfc1, 0x000e178c8e7d6611, 0x0011f03473710374, 0x00173a49614a6096, 0x000d604a86dcbfa4, }}}, + {{{ 0x0005628c1e9c571b, 0x000598b108e822ab, 0x00055d8fae29361a, 0x0008adc8d1a97b28, 0x00086a1a6c288674, }}}, + {{{ 0x0000d1d47c1764b6, 0x00001c08316a2e51, 0x0002b3db45c95045, 0x0001634f818d300c, 0x00020989e89fe274, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2eecea858b277416df2bcb7a07dc21565af4cb61164c0a64d39505f750990bf3 + { + {{{ 0x000f77fd3a2dcc59, 0x000d94a9fb124931, 0x00101f8e80ca15ef, 0x000f14d13cec3267, 0x0010403ed1d0ca66, }}}, + {{{ 0x000c278b85eaec1b, 0x0008ef59657be2cd, 0x000f2fd16958876f, 0x000ae9b205260b2f, 0x000f30b9950f7058, }}}, + {{{ 0x00032d35874ec552, 0x0001f3048df1b929, 0x000300d73b179b23, 0x0006e67be5a37d0b, 0x0005bd7454308303, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2a79e7152193c485c9ddcdbda2894cc662d7a3ada83d1e9d2cf8673012dbb75b + { + {{{ 0x0012d19528b24c9c, 0x000cac66b8302ff1, 0x000f01c8d9fdad50, 0x000ec1b35c5b3726, 0x001133a780073809, }}}, + {{{ 0x000c932115e7792a, 0x000457b9bbb930b7, 0x00068f5d8b193226, 0x0004164e8f1ed456, 0x0005bb7db123067f, }}}, + {{{ 0x0001f467c6ca62be, 0x0002c4232a5dc12c, 0x0007551dc013b087, 0x0000690c11b03bcd, 0x000740dca6d58f0e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 3 + // compressed: 0x3c437804578c1a239d4381c20e27b5b79f07d9e3ea99aadbd9032b6c25f5032c + { + {{{ 0x0010ee0752cfce28, 0x000e60dd8116fbe7, 0x000d5167130fffea, 0x0011c682b885955b, 0x001161d25fa963e8, }}}, + {{{ 0x00028c570478433c, 0x0001d8502873a463, 0x0007641e7eded49c, 0x0001ecedd54cf571, 0x0002c03f5256c2b0, }}}, + {{{ 0x000718757b53a47d, 0x000619e18b0f2f21, 0x0005fbdfe4c1ec04, 0x0005d798c81ebb92, 0x000699468bdbd96b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x4819a96ae63dddd8ccd2c02fc26450482feafd346624489b3a2e4a6c4e1c3ea9 + { + {{{ 0x000f2f46f4dafea9, 0x0012948ffadef7a2, 0x00111ecdfdf3bc02, 0x000bc2e98ffeed23, 0x001525219a473904, }}}, + {{{ 0x000d3de66aa91935, 0x000845f81a599b1a, 0x000bf7a8bd214192, 0x00071d4da4123319, 0x000a93e1c4e6c4a2, }}}, + {{{ 0x0006134b925112e1, 0x0006bb942bb406ed, 0x000070c445c0dde2, 0x000411d822c4d7a3, 0x0005b605c447f032, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x4cf0e7f0c6fee93b6249e3759e576a861ae61d1e16ef4255d5bd5accf4fe12af + { + {{{ 0x0015805920c47c63, 0x0011924771f9972a, 0x000b8bbddf9fc03e, 0x0011f7000092b280, 0x00124a76dcea8ae9, }}}, + {{{ 0x0009fec6f0e7f039, 0x0003cebc692c477c, 0x000877986a19a95e, 0x0006eaaaa1778b0e, 0x000af12fef4cc5ab, }}}, + {{{ 0x000522b2dfc0c740, 0x0007e8193480e148, 0x00033fd9a04341b9, 0x0003c863678a20bc, 0x0005e607b2518a43, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x14cf96a51c432ca000e4d3ae402dc4e3db260f2e802645d26870459e13331f20 + { + {{{ 0x00131d8f6cdf1805, 0x0009f86c4b144b14, 0x000b9875b8d73e9c, 0x000afbf0d9ffa7b2, 0x000d067acab6ccdc, }}}, + {{{ 0x000c431ca596cf01, 0x000815da7c801404, 0x00083c9b6f8f10b4, 0x0008346922934016, 0x000a01f33139e456, }}}, + {{{ 0x00027f6b08039d51, 0x0004802f8000dfaa, 0x00009692a062c525, 0x0001baea91075817, 0x000397cba8862460, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe77913c8fbc31578f12ae1dd209461a6d5fda885f8c0a9ff52c2e1c122401b77 + { + {{{ 0x00113093f059599f, 0x0011bd352f2ec616, 0x001075789b88ea84, 0x000e1d1117ea48b7, 0x000a339d320766e5, }}}, + {{{ 0x0005c3fbc81379e7, 0x00041bbc255e2f02, 0x000ea3f756998650, 0x0009297fd4e07c41, 0x000771b4022c1e1b, }}}, + {{{ 0x0005d986513a2fa7, 0x00063f3a99e11b0f, 0x00028a0ecfd6b26d, 0x00053b6835e18d8f, 0x000331a189219971, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xaf72759d3a2f51269e4a076888e2cb5bc4f78011c1c1ed847ba649f69f61c91a + { + {{{ 0x000e6f45fb4f80a0, 0x0013cc38eeb9fea1, 0x001107647270db1d, 0x000f10f1ea740dc6, 0x00131167c6b83bde, }}}, + {{{ 0x00092f3a9d75729c, 0x00090d00e953c4c9, 0x000603df116f2f89, 0x00033dc276e0e088, 0x0009ac9619ff649a, }}}, + {{{ 0x00033842524b1068, 0x00077dd39d30fe45, 0x000189432141a0d0, 0x000088fe4eb8c225, 0x000612436341f08b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x38262d1ae349638b35fdd39b00b7df9da46ba0a3b8f18b7f4504d97831aa2295 + { + {{{ 0x000d41db874e8967, 0x00162d80fb841b32, 0x00103e6ef027fa95, 0x000fa03c9e9633e6, 0x00146ebe2309e5ee, }}}, + {{{ 0x000349e31a2d2625, 0x0008137a7fa6b16c, 0x000e81ae92777edb, 0x000222bfc5f8dc50, 0x0009522aa3178d90, }}}, + {{{ 0x00002f5369614938, 0x000356e5ada20587, 0x00011bc89f6bf902, 0x000036746419c8db, 0x00045fe70f505243, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x911495c82049f262a20c633fc807f005b8d4c9f5d245bb6f45227ab56d9f6116 + { + {{{ 0x001075a6960c0b66, 0x000edde1c5e41b47, 0x00142e3f516da340, 0x00116a03fda8e79c, 0x001428d1623a0e37, }}}, + {{{ 0x000a4920c895147e, 0x000907ec61944c5d, 0x00072752e017c01e, 0x000922b7dda2e97a, 0x00096619f6db57a1, }}}, + {{{ 0x00074a4401a308fd, 0x00006ed4b9558109, 0x000746f1f6a08867, 0x0004636f5c6f2321, 0x0001d81592d60bd3, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 4 + // compressed: 0xe8c5857b9fb66587b2ba68d18b67f06f9b0f331d7ce7703a7c8eafb0516d5fba + { + {{{ 0x000e8756a60dac39, 0x00155d757b8aec25, 0x0013383df45f80bb, 0x000e783f8c9f96a4, 0x00120234a7789ecc, }}}, + {{{ 0x000db69f7b85c5d5, 0x00097a2d175650eb, 0x0004cc3e6dbfc19d, 0x00073e1d3873be0e, 0x000ba5f6d51b0af8, }}}, + {{{ 0x00020db67178b252, 0x00073aa3da2c0eda, 0x00079045c01c70d3, 0x0001b37b15251059, 0x0007cd682353cffe, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf3f4ac6860cd65a6d3e3d73c182dd942d92560339d385957ffd82c2b3b25f03e + { + {{{ 0x0011a45bd887fa90, 0x000e5748076dc17a, 0x000db98000aa11a7, 0x000ca1ecc9080973, 0x0012838c8863bdbf, }}}, + {{{ 0x0005cd6068acf4e0, 0x000b079afc7a74cc, 0x00058097650b64b3, 0x00047fabac9c4e99, 0x000bef0253b2b2cd, }}}, + {{{ 0x0003b0cf4a465030, 0x000022b8aef57a2d, 0x0002ad0677e925ad, 0x0004094167d7457a, 0x00021dcb8a606a82, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xba3177befa008d9a89189e627e6003827fd9f3433702ccb28b676f6cbf0d845d + { + {{{ 0x001004468c9d9fa2, 0x0015da8554796b8a, 0x0013b8be70950023, 0x000ed5892da6a607, 0x0010bc3d08194a30, }}}, + {{{ 0x000d00fabe7731ba, 0x0007cc53c3113350, 0x0007cf65fe080d81, 0x0003c5d966011ba1, 0x0005d840dbf6c6f6, }}}, + {{{ 0x0006380d309fe18b, 0x0004d73c2cb8ee0d, 0x0006b882adbac0b6, 0x00036eabdddd4cbe, 0x0003a4276232ac19, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xcb7e44db72c1f83bbd2d28c61fc4cf5ffe15aa75c0ffac80f9a9e124e8c97007 + { + {{{ 0x0012432c8a7084d4, 0x000c7bf73ca8a966, 0x0011639176262866, 0x000de8df4f8010cc, 0x0011ff177cea16dd, }}}, + {{{ 0x0008c172db447eb8, 0x0003f8c505b7a77e, 0x0006a857f97f3f10, 0x000cfcc0567fe03a, 0x0008770c9e824e19, }}}, + {{{ 0x0001d99a45b5b5fd, 0x000523674f2499ec, 0x0000f8fa26182613, 0x00058f7398048c98, 0x00039f264fd41500, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe17b09feab4a9bd12919e0dfe1fc6da4fff1a62c9408c9c34ef1352c2721c665 + { + {{{ 0x000d3417dbe7e276, 0x000d4573827394f4, 0x000d65eea6f650dc, 0x000c2050748dc748, 0x0011712d73468888, }}}, + {{{ 0x000b4aabfe097bce, 0x000c3bfc03253a32, 0x00029bc7fe91b7f2, 0x0008a761e4844a16, 0x000e5c621272c35e, }}}, + {{{ 0x000389f8ce3193dd, 0x0002d424b8177ce5, 0x000073fa0d3440cd, 0x000139020cd49e97, 0x00022f9800ab19ce, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xacfd6e9add9f02424149a534bece12b97bf3bd87b9640f64b4ca9885d3a471c1 + { + {{{ 0x0012368a3e9ef8a5, 0x001454aa08e2ac09, 0x001490923f8fa6fe, 0x001372aa9ea4582d, 0x00113f416cd64760, }}}, + {{{ 0x000a9fdd9a6efd99, 0x0007c694a928283f, 0x0006f7cdeee44b3a, 0x00055a3207b25cc3, 0x000c171a4d38598c, }}}, + {{{ 0x000758aa99c94c8c, 0x0005f6001700ff44, 0x0007694e488c01bd, 0x0000d5fde948eed6, 0x000508214fa574bd, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd603d053bb151a4665c9f3bc882810b25a3a686c7576c52747b46cc8a45877ba + { + {{{ 0x001269153ed6fe25, 0x000f2a23aef8983e, 0x001052be5299699b, 0x0013a5e5ef132314, 0x00122f960ec6fab8, }}}, + {{{ 0x000a15bb53d003c3, 0x0009179e792ca8c2, 0x0001a0e96ac840a1, 0x000a2393e2bb3ab6, 0x000ba7758a4c86ca, }}}, + {{{ 0x000111f693ae5076, 0x0003e3bfaa94ca90, 0x000445799476b887, 0x00024a0912464879, 0x0005d9fd15f8de7f, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1e52d7ee2a4d243f15962e4328903a8ed4169c2e77ba64e1d898eb47fa87c1bb + { + {{{ 0x001408d36d637259, 0x000dfaf8f6a66060, 0x0012bb892da8de6a, 0x000f69d4f0c7e2e4, 0x001332f35914f8fa, }}}, + {{{ 0x00044d2aeed7520b, 0x00050865d2c2a7e4, 0x000a705b5238ea40, 0x000c6c70b25d3b96, 0x000bbc187fa47eb8, }}}, + {{{ 0x00070115ea86c20c, 0x00016d88da24ada8, 0x0001980622662adf, 0x000501ebbc195a9d, 0x000450d81ce906fb, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 5 + // compressed: 0x3f74ae1c96d874d0ed631ceef5186df829edf4e75bc5bd9708b13a6679d2bacc + { + {{{ 0x000bb6a1a620524f, 0x0012e82791d06dce, 0x000a3d72caa93c85, 0x000df0b7ab68aaf3, 0x0012de25d4ba6344, }}}, + {{{ 0x0004d8961cae743f, 0x0006bdc38c7dba0e, 0x0007d3b4a7e1b463, 0x0008844bdee2adf3, 0x0004cbad279663aa, }}}, + {{{ 0x00019024a0d71fcd, 0x00015f65115f101a, 0x0004e99067149708, 0x000119d8d1cba5af, 0x0007d7fbcefe2007, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x9490c2f3c55d7ccdab05912a9aa281c758301c42361dc680d7d4d8dc96d19ccf + { + {{{ 0x000f1e6a266b27ee, 0x00109aae73e2df5c, 0x000c0dd8b219b1a1, 0x000d46fb4517de0c, 0x000d975435e87b74, }}}, + {{{ 0x000c5dc5f3c29094, 0x000b455220b579ae, 0x000870c1631e0689, 0x000a6bc0630e9b20, 0x0004f9cd196dcd8c, }}}, + {{{ 0x000297d86a7b3768, 0x0004835a2f4c6332, 0x000070305f434160, 0x000183dd014e56ae, 0x0007ccdd084387a0, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x93cc606718840c9b992ab31a7a00aecd18da0b6286ec8da844ca908184ca93b5 + { + {{{ 0x000e422c6d260404, 0x001212904817bb93, 0x000da319deb854f3, 0x000fa9d4e060da7c, 0x000c28bd0ed61d0b, }}}, + {{{ 0x000484186760cc80, 0x0007435665533361, 0x00082f686336b801, 0x000d225446f64330, 0x000b593ca848190b, }}}, + {{{ 0x0003189a5e849aa7, 0x0006acbb1f59b242, 0x0007f6ef4753630c, 0x0001f346292a2da9, 0x00027398308da2d6, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x5324700a4c0ea1b9de1b7dd56658a20ff7da27cdb5d9b9fffd332c4945292cd7 + { + {{{ 0x000b8d28435ed3ed, 0x0014064f19992857, 0x000f680fbef543cb, 0x0011aadd83d58d3b, 0x001269597aebe8c1, }}}, + {{{ 0x00090e4c0a702453, 0x0004daafa37bd733, 0x000c9f6bdc3e8961, 0x0001feffdcecdae5, 0x000572c2945492c3, }}}, + {{{ 0x0007c745d6cd30be, 0x00027c7755df78ef, 0x0001776833937fa3, 0x0005405116441855, 0x0007f985498c05bc, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x6363bf0f521556d3a6fb4dcf455a0408c2a03f87bc4fc2eee7129bd63c65f2b0 + { + {{{ 0x0011ce889f0be104, 0x00136f6a94510707, 0x000ff248720016b2, 0x0009821ed1e1cf90, 0x000f6c2ec470a31e, }}}, + {{{ 0x000e15520fbf6350, 0x0008b9e9bf74da69, 0x000cfe8308201168, 0x000973f76127de42, 0x000b0f2653cd69b0, }}}, + {{{ 0x0000c938aac10c85, 0x00041b64ed797141, 0x0001beb1c1185e6d, 0x0001ed5490600f07, 0x0002f1273f159647, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc00ba755d78b4830e742d4f1a4b5d606626159bc9ea6d1ea84f7c5ed9719acb8 + { + {{{ 0x0009fc7c8ae01dfe, 0x0012094d5573e8e6, 0x0015ca3cbbf549d0, 0x000cf920ecc54141, 0x000dd9e572ad85b5, }}}, + {{{ 0x00088bd755a70bc0, 0x00049e3a885ce608, 0x00096585881b5ad6, 0x0003c27568d34f5d, 0x00038ac1997edc5f, }}}, + {{{ 0x0006b517a751b13b, 0x0000cfd370b180cc, 0x0005377925d1f41a, 0x00034e56566008a2, 0x00022dfcd9cbfe9e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xa1e03b10b459ec5669f959d2ecbae32e32cdf51394b27c7972e4cd247887e98f + { + {{{ 0x0013d2e0c30d0cc6, 0x0013f597686671b9, 0x0010aa587eb63997, 0x0010e3c7b592c617, 0x000eb2916c05448a, }}}, + {{{ 0x000459b4103be08e, 0x00059a4b3f2d2add, 0x0007d734c8bb8eeb, 0x0002393cbe594a09, 0x0008fe9877824cde, }}}, + {{{ 0x000334d10aba913b, 0x000045cdb581cfdb, 0x0005e3e0553a8f36, 0x00050bb3041effb2, 0x0004c303f307ff00, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x0045d90d5803fc2993ecbb6fa47ad2ecf8a7e2c25f150a13d5a106b71a156bc1 + { + {{{ 0x00123bd617b28c5f, 0x000ee72ee77d5a5f, 0x0011a972ff174ddd, 0x0013e2636373c60d, 0x0010d61b8f78b2a9, }}}, + {{{ 0x000403580dd944ed, 0x000c8df77d92653f, 0x00038a9fe3b349e9, 0x0008ea89850aafe1, 0x000c16b151ab7069, }}}, + {{{ 0x0000d7efe9c136b0, 0x0001ab1c89640ad5, 0x00055f82aef41f97, 0x00046957f317ed0d, 0x000191a2af74277e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 6 + // compressed: 0xfb0e464f432be69fd60736a6d403d3de24daa0b70e2152f0935b5400be7d7ea3 + { + {{{ 0x000ef74bc53c141e, 0x0011c40e5dbbd9c1, 0x000ec8fb9cae5c95, 0x000c845c5ce1b7d9, 0x000fe2e0e450b5cb, }}}, + {{{ 0x000e2b434f460ee8, 0x000294c6c0fad3fb, 0x00068368937b4c0f, 0x0005c9f82910875b, 0x000a37e7dbe00545, }}}, + {{{ 0x000575ed6701b430, 0x0004d3e17fa20026, 0x000791fc888c4253, 0x0002f1ba99078ac1, 0x00071afa699b1115, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd6503b471c3c42ea10ef383b1f7ae85195bec9b25fbf849b1c9af878bc1f7380 + { + {{{ 0x000e6f9b3953b5f7, 0x000d55f4283cccb8, 0x000fdd67fb1960e6, 0x00114707a1affed3, 0x001021142e9c2b1a, }}}, + {{{ 0x00023c1c473b50c3, 0x0003e7671de21d48, 0x000326fa5547a1e8, 0x000d0e4dc25fafd9, 0x00080731fbc78f88, }}}, + {{{ 0x0000c71848f81880, 0x00044bd9d8233c86, 0x0006e8578efe5830, 0x0004045b6d7041b5, 0x0004c4d6f3347e15, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x70198f98fcdd0c2f1bf5b9b02762916bbe769177c4b6c76ea89f8fa80095bfb8 + { + {{{ 0x000feccfc17d1fa3, 0x0014ca280782831d, 0x000fb8337db1d7d4, 0x0015116def3895fa, 0x001193fddaaa7e45, }}}, + {{{ 0x0004ddfc988f195d, 0x0004f6173ea365e1, 0x000e45daf9ae4588, 0x0007d43763db623a, 0x000b8bf9500a88f9, }}}, + {{{ 0x0002c93c37e8876f, 0x0003431a28c583fa, 0x00049049da8bd879, 0x0004b4a8407ac11c, 0x0006a6fb99ebf0d4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc623e4b6b522b1ee8eff86f210709d938c5dcf1d832aa99010ebc5429fda6f93 + { + {{{ 0x000ec1bb560855d8, 0x000f1f127e13ad47, 0x000dc6b304905aeb, 0x000b756b8e889bc6, 0x000f5f76914a3188, }}}, + {{{ 0x000922b5b6e423c6, 0x000a1e50dff1ddd5, 0x00073d76324e75bf, 0x000588485495418e, 0x000136fda9f42c5e, }}}, + {{{ 0x0004dfb1a305bdd1, 0x0003b3ff05811f29, 0x0006ed62283cd92e, 0x00065d1543ec52e1, 0x000022183510be8d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x7f7a304301715a9d5fa47dc49ede63b0d37a92be52febb226c4240fd41c48713 + { + {{{ 0x000f66385ead2cee, 0x0010194f8b06095d, 0x00108478f6823b60, 0x000e018689d37306, 0x0016a071ce17b805, }}}, + {{{ 0x0002710143307a6c, 0x0003d88fb48bf3ab, 0x000a49eb4ec18f7a, 0x000936115dff295e, 0x0009387c441fd403, }}}, + {{{ 0x0003c3d187978af8, 0x0007afe1c88276ba, 0x00051df281c8ad68, 0x00064906bda4245d, 0x0003171b26aaf1ed, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd1478ab2d8b70da6f1a47017d614bfa658bddd5393f8a1d4e9434234634a516c + { + {{{ 0x000f319097564c95, 0x0011844ebc233524, 0x000a1d4543fdeedf, 0x0011ad27aaff1bd1, 0x000a21fd4873cf06, }}}, + {{{ 0x000db7d8b28a47d1, 0x0002c2ee149e34c0, 0x000776f5629afc53, 0x0001f4ea50fc49a9, 0x0006c514a6334424, }}}, + {{{ 0x0002204f3a156341, 0x000537414065a464, 0x00043c0c3bedcf83, 0x0005557e706ea620, 0x00048daa596fb924, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x93974cc85d1df614068241efe3f94199ac7762348fb8f5cda9798a0efa37c8d8 + { + {{{ 0x000a8e665ca59cb4, 0x001165c715940dd8, 0x0010785f3aa11c93, 0x000d7b98d7e38467, 0x000e76dd6fccad83, }}}, + {{{ 0x00061d5dc84c9780, 0x00047de83040c29e, 0x000989deb26507e7, 0x0004d4e6fadc4799, 0x000d8c837fa0e8a7, }}}, + {{{ 0x0001688596fc9058, 0x00066f6ad403619f, 0x0004d759a87772ef, 0x0007856e6173bea4, 0x0001c4f73f2c6a57, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x84347cfc6e706eb361cfc1c3b4c9df73e5c71c78c9791deb5c67af7ddb9a45f0 + { + {{{ 0x00124fbd305fa0a8, 0x000c0a98cc75a1cd, 0x000f8ce1220a7532, 0x000e217a10e1c196, 0x000f95ac80d1bf63, }}}, + {{{ 0x0006706efc7c3484, 0x0006987839ec366d, 0x0000731f95cf7f26, 0x000bae758ebce4bc, 0x00070459adb7daf5, }}}, + {{{ 0x0001db4991b42bb3, 0x000469605b994372, 0x000631e3715c9a58, 0x0007e9cfefcf728f, 0x0005fe162848ce21, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 7 + // compressed: 0x08b27c5d2d857928e7f27d6870dddeb891786821abff0bdc35aa7d6743c0442b + { + {{{ 0x0011214fe1949607, 0x0010e1ae39a9e9c9, 0x000d43c8b526f9f5, 0x001119498067e91c, 0x000c789d446fc915, }}}, + {{{ 0x0001852d5d7cb1f5, 0x00060d0fbe5ce50f, 0x0005a1e246e37b75, 0x000d1aee05ffd590, 0x000ab44c043677d9, }}}, + {{{ 0x000487ab074eb78e, 0x0001d33b5e8ce343, 0x00013e419feb1b46, 0x0002721f565de6a4, 0x00060c52eef2bb9a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x116dae7cc2c52b70ab8ca4549b69c744b22e49ba5640bcef6d67b6d94872d7f0 + { + {{{ 0x000d89bc3bfd8bcb, 0x000ef93e6aa3416a, 0x0014c0a3d6c1ae47, 0x000d5587260b5868, 0x00110bc9c312ccfb, }}}, + {{{ 0x000bc5c27cae6d11, 0x000b6a9491956e04, 0x000924bac9131da5, 0x000bb6f7de202b5c, 0x00070d77248d9b65, }}}, + {{{ 0x0002e84b3ec2a05b, 0x00069da2f03c1551, 0x00023a174661a67b, 0x000209bca289f238, 0x00063755bd3a976f, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb7acf1971810c73dd8bb65c15e7dda5d0f02a10f9c5b8e50562ac537177563a7 + { + {{{ 0x000fa03e2ad1082d, 0x001213dcc6ad36aa, 0x0011a6e240d5bdd4, 0x000fc24ffcf8fedd, 0x0010d8cc1c48bc15, }}}, + {{{ 0x0007101897f1acb7, 0x000bd82cb77b07b8, 0x000684083d7769f4, 0x000d2b28472dce07, 0x0002763751737c51, }}}, + {{{ 0x000402d36eb419a9, 0x0007cef68c14a052, 0x0000f1255bc2d139, 0x000373e7d431186a, 0x00070c2dd8a7ad16, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x137eedb87d96d4917a8176d70a2f25746425850de08209e4e53ca5163861b832 + { + {{{ 0x001194509f6febe8, 0x000d28d8ca31acaa, 0x000f826d73b8b9f9, 0x000a4acb99e0f9b2, 0x0012e0fac6363947, }}}, + {{{ 0x0004967db8ed7e00, 0x00095aeed02f523a, 0x0006149591d094bb, 0x000672f204c17006, 0x000b2b8613816a53, }}}, + {{{ 0x0007f7bee448cd64, 0x0004e10f10da0f3c, 0x0003936cb9ab20e9, 0x0007a0fc4fea6cd0, 0x0004179215c735a4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x34cd6b28b933aee4dcd69d55b67eefb71f8ed3b31f148b2786c241226685fa31 + { + {{{ 0x001094e7d7dced17, 0x001068fa738e118c, 0x000c1b640a5fee29, 0x0016bb709df019d3, 0x000f00344a30cd97, }}}, + {{{ 0x000e33b9286bcd21, 0x000ecab3badb9c94, 0x00074e387edfbdf9, 0x00094313c58a0fd9, 0x000b1fa85662241b, }}}, + {{{ 0x00026c422e3622f4, 0x0000f3066a05b5f0, 0x0004e2448f0480a6, 0x000244cde0dbf095, 0x00024bb2312a9952, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x6b5cf8f52a0cf8419467fa04c3847268ad1bbaa399df4589165debfff92a1d8d + { + {{{ 0x0008ed1732de67b0, 0x001308c369291634, 0x00133ef348f2d24e, 0x001004475ea1a1b9, 0x0008fee3e871e186, }}}, + {{{ 0x00080c2af5f85c58, 0x0008609f4cf2883e, 0x0006e86eb5a1ca12, 0x000e8b44a2efccd1, 0x0008d1d2af9ffeb4, }}}, + {{{ 0x00028aa132621edf, 0x00042b244caf353b, 0x00066b064cc2e08a, 0x0006bb20020cbdd3, 0x00016acd79718531, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xadb68778c5c659c9bafe905fad9ee19404f542a3624ee216001716184bd34e96 + { + {{{ 0x000f72af2d9b1d17, 0x000ed486448b4e5a, 0x0012ce58dd8d18a7, 0x0011849f67503c89, 0x001123e0ef6b9300, }}}, + {{{ 0x0009c6c57887b6ad, 0x000dabf21fd7592a, 0x00050bd412538679, 0x000b800b71273151, 0x000164ed34b18160, }}}, + {{{ 0x0006d94c192fe69a, 0x0005475222a2690f, 0x000693789d86b8b3, 0x0001f5c3bdfb69dc, 0x00078da0fc61073f, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x943a0c68f1809fa2e6e7e91a157ef7717379014858f10011dd8db316b3a44a05 + { + {{{ 0x00095d28e52bc657, 0x000b0e1e0351cb7d, 0x00130a2f74b11f8b, 0x000b9d120cd7de01, 0x000ad25deeb256b0, }}}, + {{{ 0x000780f1680c3a81, 0x000aa35d3cfcd453, 0x000805e5cdc7ddf7, 0x0006ee888078ac23, 0x000854aa4b316b38, }}}, + {{{ 0x0000468d19267cb8, 0x00038cdca9b5fbf9, 0x0001bbb05c2ca1e2, 0x0003b015758e9533, 0x000134610a6ab7da, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 8 + // compressed: 0x15f5d177e7652acdf160aa8f87918954e506bcdabc3bb7b1fbc97ca9cb784865 + { + {{{ 0x00138ec78df6b0eb, 0x00093caebea36a20, 0x000debc6e54e5f69, 0x000b2804903d0eb7, 0x000a102fdba2b20c, }}}, + {{{ 0x000a65e777d1f515, 0x0008f1f54c1e39a4, 0x0002f01b95522645, 0x0004fdd8db9dde6d, 0x000654878cba97cc, }}}, + {{{ 0x0006e405055ce6a1, 0x0005024a35a532d3, 0x0001f69054daf29d, 0x00015d1d0d7a8bd5, 0x0000ad725db29ecb, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x856f059b0cbcc7fed7fff5e768527d53faae124362c6af77d99f3902535f67cf + { + {{{ 0x001267b1834e2431, 0x000eae19c378bb86, 0x000f457b5ed9d511, 0x0013280d783d05fa, 0x0014aefcffb71a01, }}}, + {{{ 0x0007bc0c9b056f85, 0x00051cfebffaffd8, 0x000c4abbe94df549, 0x0007ecbbd7e33120, 0x0004f675f5302399, }}}, + {{{ 0x000536360415171e, 0x0002313309077865, 0x000251444334afbc, 0x0002b0c3853756e8, 0x0000bccbb72a2a86, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x9612fe504c5e6d187e9fe8fe827b39e0b0317050c5f6c73bc2378f1069fd7866 + { + {{{ 0x000e962feab1a9a2, 0x000eaca28fb9a30a, 0x00156db7ca1b9f97, 0x00139f58497018db, 0x0014024f0ab59d69, }}}, + {{{ 0x000d5e4c50fe1296, 0x00085fdd13efc30c, 0x0009c0c6c380e5ed, 0x0003e11de3fb62a7, 0x0006678fd69108f3, }}}, + {{{ 0x0006fa31636863c2, 0x00010ae5a67e42b0, 0x00027abbf01fda31, 0x000380a7b9e64fbc, 0x0002d42e2108ead4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x9375530f0d7b71214c061e130b694e919fe02a75ae87b61b6e3c429ba7f30bc2 + { + {{{ 0x000d131594dfd288, 0x0013a627e98d52fd, 0x001115404185565f, 0x00119175d09f8382, 0x000e76b2608b8d2b, }}}, + {{{ 0x00097b0d0f537580, 0x00096263c0c9842d, 0x0004ab827e4539a3, 0x0006370ddb43d73a, 0x000c20bf3a79b423, }}}, + {{{ 0x0000ba651c5b2b47, 0x0005862363701027, 0x0000c4d6c219c6db, 0x0000f03dff8658de, 0x000745d2ffa9c0cf, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x6a4ed32157df3660d0b37b992788dbb1fa6a75c8c309c2d339c81d4ce55be186 + { + {{{ 0x00125a1e2bc9c897, 0x001104c8f3b037e8, 0x001405576fa96c96, 0x0012e86a88e3876d, 0x0011ae23ceb960cd, }}}, + {{{ 0x0006df5721d34e57, 0x0004f32f767a0c06, 0x0009d5abeac76e20, 0x000c1ce9e104e1e3, 0x00086e15be54c1db, }}}, + {{{ 0x00025d871932994a, 0x0006b9d63b560b6e, 0x0002df2814c8d472, 0x0000fbbee20aa4ed, 0x00058ded861278ec, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xa8c9c2b6a85bfb2d8c592cf58eefee4873152df107918033d85b1d536b69ba08 + { + {{{ 0x000f3793f266c549, 0x0010b988a9c93b01, 0x00109b0ea32325d9, 0x00137cae71c17c5c, 0x000aff39de85485d, }}}, + {{{ 0x00035ba8b6c2c995, 0x0009dea58b3185bf, 0x0004b455cd23bbbd, 0x0005ec19c04883f8, 0x00088ba696b531d5, }}}, + {{{ 0x00053eeec3efc57a, 0x0002fa9fe9022efd, 0x000699c72c138154, 0x00072a751ebd1ff8, 0x000120633b4947cf, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x0a1012494731bd8206be6f7e6d7b23dec679ea1119761ee1de3b39cbe33b4307 + { + {{{ 0x000c98789161002f, 0x000f9d9d7f5d0171, 0x0013c293013b9ec3, 0x0010c2b85f39cac8, 0x000b5d30a99b4d57, }}}, + {{{ 0x0005314749120ff7, 0x0005afcdf7c0d057, 0x0007a9e71b788ded, 0x0005ef708f3b0c88, 0x00087433be3cb393, }}}, + {{{ 0x000144c05ce997f4, 0x0004960b8a347fef, 0x0001da11f15d74f7, 0x00054fac19c0fead, 0x0002d873ede7af6d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x81f95d4ee10262aaf5e1155017590da26c1de2bad375a218530260018a614385 + { + {{{ 0x00123164433733f6, 0x000dde95503b22ad, 0x000e99201beae2de, 0x000bdb5849ff7379, 0x000ae773654707f9, }}}, + {{{ 0x000a02e14e5df96e, 0x0002ea02bc3eb54b, 0x00038875b2883564, 0x0009298c513ae9dd, 0x0008543618a015ff, }}}, + {{{ 0x0002bdf4974c23c1, 0x0004b3b9c8d261bd, 0x00026ae8b2a9bc28, 0x0003068210165c51, 0x0004b1443362d079, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 9 + // compressed: 0xcb9c521ce9547c96fb35c6649226f63065191278f4af47275c6ff6ea18840317 + { + {{{ 0x000cb7c7b66e1f54, 0x000cbea185efd997, 0x000cfabc711055f7, 0x0011fb9f7836fe37, 0x001582f446752da4, }}}, + {{{ 0x000454e91c529cb8, 0x000a4c98c6bf72cf, 0x0008486594c3d899, 0x0007ae13a3d7fa3b, 0x00097038418eaf66, }}}, + {{{ 0x00017bd320324ce4, 0x00051489117898c6, 0x0001684d92a0410b, 0x0006e4d90f78c5a7, 0x0000c2a1c4bcda28, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x4569bd694881c4ed228d1cbe7d906d0dabc55cd512d23bc683dc14a3309b6ada + { + {{{ 0x000dc7d06f1f0434, 0x000fdb70f80b3a48, 0x000ecb4a3ec89a77, 0x000c3be8ad81397c, 0x000fc558bd1c6f63, }}}, + {{{ 0x0004814869bd6932, 0x0007b7c391a45db8, 0x00057316ac35b641, 0x000641e31de9096a, 0x000da6a9b30a314d, }}}, + {{{ 0x00041524d396463d, 0x0001586b449e1a1d, 0x0002f17e904aed8a, 0x0007e1d2861d3c8e, 0x0000404a5ca0afba, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd16f412a1b9ebc628b5950e328f7c6b567695d3dd83f340498eef8e716755239 + { + {{{ 0x000f40070aa743b0, 0x00116b64cbdd1182, 0x00123f4b7b32eb41, 0x000b19aba58235b1, 0x00146395bfdcadd8, }}}, + {{{ 0x000c9e1b2a416fbe, 0x000d1c6a0b316c56, 0x000d75a59ed71bdb, 0x00074c021a1fec1d, 0x000b9527516e7f8e, }}}, + {{{ 0x0007db2d1a5d9a9c, 0x00079a200b85422f, 0x000355bfaa71dd16, 0x00000b77ea5f78aa, 0x00076579a29e822d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf234b45213b53c33e180de93492832d8ce350d75872851b5c177272abb14c582 + { + {{{ 0x000e8e7e49c029f1, 0x00145795346fe8b5, 0x001089306c8f3544, 0x000ed89f6b2f88f4, 0x00143a384dc9e05a, }}}, + {{{ 0x0004b51352b434df, 0x0009327bd01c2667, 0x000434d73b60c8a0, 0x000be0daa89443ba, 0x00082c514bb2a276, }}}, + {{{ 0x0003d5da8bf1b645, 0x0007ded6a96a6d09, 0x0006c3494fee2f4d, 0x00002c989c8b6bd4, 0x0001160920961548, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xcd4d9b361656387a63355c65a72cc0752180f1d4f91bc27d42e0e691747d632f + { + {{{ 0x000d166929dacf84, 0x001190826b31f688, 0x000cf55567694a7b, 0x000f05f4f7b1e521, 0x001351e125bc5697, }}}, + {{{ 0x00085616369b4dba, 0x000cecab86ac6f46, 0x000bc60085d700b1, 0x0008213ee10dfce9, 0x000af637d7491e6d, }}}, + {{{ 0x00049b461af67bbe, 0x00075915712c3a96, 0x00069a67ef580c0d, 0x00054d38ef70cffc, 0x0007f182d06e7ce2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2275218e724b4509d8b884d4f4e858aa3c90467f4d2558d317521c2443c0ac44 + { + {{{ 0x000c8e64ab0168d9, 0x0012a2bdb8a86f4e, 0x000f343b6b2d6927, 0x0009d804aa8ce9a2, 0x000e7d4ac8c343e8, }}}, + {{{ 0x00054b728e21750f, 0x00069a90971b0128, 0x000d1a40f2a963a3, 0x00090be9ac12a6be, 0x000c4acc043241c4, }}}, + {{{ 0x00056bbb4f7a5777, 0x00029230627c238f, 0x0005ad1a122cd7fb, 0x0000dea56e50e364, 0x000556d1c8312ad7, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x21e81bb15667f081ddf3a31023f8af0f5d46996a55d0b2f8057f8ccc38be7a09 + { + {{{ 0x001740e30c8d395c, 0x000fc2b47f4682fb, 0x000dcd91b8c7dc1b, 0x000f7fa790f9e582, 0x001746c6c6d1d823, }}}, + {{{ 0x00086756b11be80e, 0x000c62147e7bb03d, 0x000a6519743ebfdf, 0x000782fc59682ab4, 0x000897abe38cc8c7, }}}, + {{{ 0x0001c9877ea52da4, 0x0002b37b83a86189, 0x000733af49310da5, 0x00025e81161c04fb, 0x000577e14a34bee8, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2bd74dbdbecefe9411220f06da4f6af4ffd1c8c077594a12959200fbb8045370 + { + {{{ 0x000a68ac61a73af7, 0x001206f234bebe1b, 0x000db403a7cbebe6, 0x000fa160f09f4134, 0x000e0fa7ee96fd77, }}}, + {{{ 0x0006cebebd4dd72b, 0x000b40c1e442329f, 0x00032347ffd1a93e, 0x00014a89252cbbe0, 0x000705304b8fb009, }}}, + {{{ 0x00051d354d296ec6, 0x0007cbf5a63b16c7, 0x0002f50bb3cf0c14, 0x0001feb385cac65a, 0x00021398e0ca1635, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 10 + // compressed: 0x0156b7b4f9aa982772ad8d5c1372ac5e23a0b76161aaced24e7d8fe984b2bf9b + { + {{{ 0x0015058a382b33e0, 0x001175a91816913c, 0x0014f6cdb96b8ae6, 0x00117347c9da81d0, 0x000daa3ed9d95a21, }}}, + {{{ 0x0008aaf9b4b755ee, 0x00026b91b5ae44f2, 0x0006de808d7ab1c8, 0x0006a769675530b0, 0x0009bbfb284e98f7, }}}, + {{{ 0x000777e9c7d96561, 0x00028e58f006ccac, 0x000541bbbb2cac49, 0x0003e63282994cec, 0x0004a07e14e5e895, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x9ba477c4cd580b2417f04764deda38fdad6ac8a7328d921981a0af84ed7aafd0 + { + {{{ 0x001412cb980df973, 0x000de78dd8ee29da, 0x001171dff68c575c, 0x0012015dd2f6ef47, 0x0013f0bac391d311, }}}, + {{{ 0x000b58cdc477a49b, 0x000bcc88fe02e480, 0x000721aab7f4e36a, 0x0008408cc9469953, 0x00050af7aed84af9, }}}, + {{{ 0x0007de0115f65be5, 0x0004242c21364dc9, 0x0006b75b64a66098, 0x0000033c0102c085, 0x0001921a316baebd, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x8bc1f3d99aad5ad79cc1b160ef0e6a56d90e5c25ac0b9a3ef5c762a0ec9d047b + { + {{{ 0x00122f7edfb870e9, 0x001569eed677b126, 0x000b0937dcb0a5ad, 0x000f58039c78ea1a, 0x000e458df41e2739, }}}, + {{{ 0x000aad9ad9f3c18b, 0x0005ec1638339aea, 0x0005703b6559a83b, 0x000bfa9f4d05d612, 0x0007b049deca062b, }}}, + {{{ 0x0003e37a35444483, 0x000661fdb7d27b99, 0x000317761dd621e4, 0x0007323c30026189, 0x0006093dccbc2950, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x4b038460beeede6b54b80f78b6c2993195062db6ab763397907d648bc98031ee + { + {{{ 0x000b9a8585e07047, 0x000b167ce72663fd, 0x00163d14ecdb4296, 0x000cbe21dcf970b6, 0x00157d1ea0848279, }}}, + {{{ 0x0006eebe6084034b, 0x0006cf01f70a8d7b, 0x0008b41a54c6670a, 0x0006c84b99bb55da, 0x0006e3180c98b647, }}}, + {{{ 0x0002b6e7a128b071, 0x0005b27511755dcf, 0x00008584c2930565, 0x00068c7bda6f4159, 0x000363e999ddd97b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc6ae4be2dc48182f60afbcba55729b7631e9ef3c6e3ccb9055b3f9c69b971f23 + { + {{{ 0x001043c135ee1fb1, 0x0012a11c9919f2d3, 0x000e334cc25dbacb, 0x001295da17b400d9, 0x000c8ee9b786939e, }}}, + {{{ 0x000048dce24baeb3, 0x0002b75795ec05e3, 0x000bbfa4c5da6dc9, 0x0009aac8659e371d, 0x000a31f979bc6f9a, }}}, + {{{ 0x0001de4bcc2af3c6, 0x00061fc411a3eb86, 0x00053ed19ac12ec0, 0x000209dbc6b804e0, 0x000079bfa9b08792, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x4542d5a280edc9f35239f677788ba00a755408d163ac6dd76b63709415fbf41e + { + {{{ 0x00103a51da300dce, 0x000c67b52b561c70, 0x000cd5920210e58f, 0x0010ca769e789684, 0x001038c77f684815, }}}, + {{{ 0x0009ed80a2d54232, 0x00070efec72a5e78, 0x00042151d42a822d, 0x0009b5ebb6d631e8, 0x0009ef4fb1594705, }}}, + {{{ 0x00065ee65b167bec, 0x000052da19b850a9, 0x0000408665656429, 0x0007ab39596f9a4c, 0x000575ee92a4a0bf, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x01d8a40a45bc465dd8b933a52712afc3c206892b263b9e381b582f387e1e0aa0 + { + {{{ 0x001080908a182fbc, 0x0010532913b7ba96, 0x0013dccf78c385c1, 0x000e8002dd5eaba7, 0x000c3d4e7112cd3e, }}}, + {{{ 0x0006bc450aa4d7ee, 0x000cf4a6773b0ba8, 0x0006241b0b0ebc47, 0x000c0d9c4f1d9315, 0x000a00a1e7e382f4, }}}, + {{{ 0x0005b967eaf93ac5, 0x000360acca580a31, 0x0001c65fd5c6f262, 0x00071c7f15c2ecab, 0x000050eca52651e4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xea68e6607639ac9797b43a15febb199b9fa7ec34b579b14c57ae31a19fc05161 + { + {{{ 0x00131ade453f0c76, 0x0013dfee07737866, 0x000e11ecf7a7d40f, 0x000a637e6cbd64f5, 0x0014b0ee6c21c58e, }}}, + {{{ 0x000c397660e668ea, 0x0007c2a75692f2f4, 0x000bb29e7e6c66ef, 0x00072ba658bcda99, 0x0006151c09fa131a, }}}, + {{{ 0x00055c0dfdf05d96, 0x000405569dcf475e, 0x00005c5c277498bb, 0x00018588d95dc389, 0x0001fef24fa800f0, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 11 + // compressed: 0x866b9730f5afd2220446d2c206b8908de5bae54d6c89a1dc170c34c8e65f0028 + { + {{{ 0x000e53fb1aa73183, 0x000e07faec8306f9, 0x000ce85ec83e5253, 0x00109f56900584fc, 0x000d44d49292fc84, }}}, + {{{ 0x000aaff530976b73, 0x0008d85a48c08459, 0x000796eb963642df, 0x00060bee50c4b626, 0x000a8005fe6c8340, }}}, + {{{ 0x0007ba9f34528688, 0x000284a20fb42d5d, 0x0003652cd9706ffe, 0x0006fd7baddde6b3, 0x00072e472930f316, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x27762ad335f6f307f066655f864daa7a5044d02897e7853c3864e00f007fee9f + { + {{{ 0x000d208c9781083c, 0x00096468a1dc24d1, 0x000fbf780ac540a7, 0x0011a67eced75300, 0x000da9d2e8c27338, }}}, + {{{ 0x000bf635d32a7614, 0x0008cbecacde00fd, 0x0003411141eaa935, 0x00021c1e42f3cb94, 0x0009fee7f000fe06, }}}, + {{{ 0x000305da03dbf7e5, 0x0001228699b7aeca, 0x00012a23b2936bc9, 0x0002a1bda56ae6e9, 0x00000f94051ee040, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x5397af07bb93efd7a766b73dcfd03e58c51e0b6ebf9869ce5204d45dd2ffb747 + { + {{{ 0x000d6b23c3d3308c, 0x00137608e360d1a5, 0x00090ae0f3c8722c, 0x001086d9b618b636, 0x00107d79c7e8bea9, }}}, + {{{ 0x000793bb07af9740, 0x0009e7b6ecd4fafd, 0x00082c7b1560fb42, 0x000a296734cc5fb6, 0x000c7b7ffd25dd3f, }}}, + {{{ 0x0003fb9cbc08dd12, 0x00075c3dd85370ff, 0x00047f06fe2819ac, 0x0005db06ab9215ed, 0x0001c3520a35ea64, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x59c06b21406fa8cd7ed8bc121d23bb1f9009c7179e6a95b4552ed1663b0c7538 + { + {{{ 0x001253a6bccba324, 0x000c270704337018, 0x000a0b8e58f9870d, 0x001337c861db00cb, 0x0011c3d05775d0ec, }}}, + {{{ 0x00086f40216bc046, 0x000ba2579b0fd9b4, 0x00071c26407eec8b, 0x00072ada4ab54f0b, 0x000b8750c3b66d12, }}}, + {{{ 0x0006f1409422e51a, 0x0007856bbece2d25, 0x00013380a72f031c, 0x00043e1080a7f3ba, 0x0000621e2c7d3304, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf3f0dbb09617aeb796e17ce1b9afdf54b4a3aae9713092259d2e00a19c588edd + { + {{{ 0x001060cc82598367, 0x001038d3f35b95f1, 0x00156078c243a921, 0x0012de3293241bb0, 0x0010007d6097bd38, }}}, + {{{ 0x00061796b0dbf0f3, 0x000f3c2f9c32d6f5, 0x0006aa8ed1537ebd, 0x00074e92c91838f4, 0x0005d8e589ca1002, }}}, + {{{ 0x00071d950842a94b, 0x00046b11e5c7d817, 0x0005478bbecb4f0d, 0x0007c3054b0a1c5d, 0x0001583d7783c1cb, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc7289dcc044703908fc52cf79e671b1d26875bbe5f2be1160a58c5834e0658c9 + { + {{{ 0x000ea2ef5da27abb, 0x00128aace02e9d9c, 0x00102459e965f0e6, 0x000fb864d3150931, 0x001252a5f2e81ed7, }}}, + {{{ 0x00034704cc9d28c7, 0x0003dee598b1f200, 0x00016e1c98746d9e, 0x0004050b7095afdf, 0x0004958064e83c55, }}}, + {{{ 0x000094265066e80d, 0x0000a60f918d61a5, 0x0000444bf7f30fde, 0x0001c40da9ed3c06, 0x000079c170bd843b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x56d0d5c050cdd6cd3b5703bb6d68f79a48efc3f33f72a63ccc8a7b31d7c068e7 + { + {{{ 0x000eece464fa6fec, 0x000bcc40bca4609f, 0x000ee3a90afb8d0b, 0x000d801abca11227, 0x000edec05e34ac9e, }}}, + {{{ 0x000ecd50c0d5d056, 0x0005b7606ae779b9, 0x00070fbd226bdda1, 0x0005661e53391ff9, 0x0006768c0d7317b8, }}}, + {{{ 0x000625e5f155c1b3, 0x0004f32f6f723296, 0x0005ac980105efce, 0x00017a61165eee36, 0x00051445e14ddcd5, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x55a4be2bab473189299107924fa2538ca7f730be48f9494b3dd44f6e0890e992 + { + {{{ 0x00102b4b3b14493e, 0x000d688977966ae8, 0x00098e176e399ffc, 0x000ae45c5eb4938a, 0x00093186f31e3928, }}}, + {{{ 0x000147ab2bbea442, 0x0009f240f2253126, 0x0008c3de9e314e88, 0x000a1ea5a4fca45e, 0x00092e990086e4fc, }}}, + {{{ 0x000496b37fdfbb2e, 0x0003c2439d5f3e21, 0x00016e60fe7e6a4d, 0x0004d7ef889b621d, 0x00077b2e3f05d3e9, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 12 + // compressed: 0xa4b0dd129c6398d56b8624c0309fd1a560e4fc58032f7cd18a5e092e1595a107 + { + {{{ 0x000fa9c59c2ec4cb, 0x000fe9f09e79652c, 0x000ea3e422f22d85, 0x000aae8e3b836c8a, 0x000e3b795fc7ad31, }}}, + {{{ 0x0008639c12ddb091, 0x000e180490cd7ab2, 0x0003f3918297467b, 0x00074568be1781ac, 0x00087a195152e095, }}}, + {{{ 0x00068f02389e5fc8, 0x000059f1bc877506, 0x000504990e410cec, 0x00009bd7d0feaee2, 0x0003e8fe83d032f0, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x3cd1efe88d4c70083137e0338e1ac5dfe3cd6012a55d9da5868c25a69908d622 + { + {{{ 0x001315b90570a281, 0x00160ce108a925ef, 0x000eeff61253c907, 0x001003ef0e2d70af, 0x000f5ba3b797fac2, }}}, + {{{ 0x00084c8de8efd129, 0x0009c67c06e6210d, 0x000183378f7f1469, 0x00064352ceaed289, 0x000a2d60899a6258, }}}, + {{{ 0x0001dbc070cdd196, 0x00016d8fb1534c47, 0x000500498183fa2a, 0x00072f59c423de75, 0x0000904d07b87779, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb940f948662d32f4390c2dbd0c2f950631f981a0ad9776166c2af7baceaa4062 + { + {{{ 0x000e1fd4ddba9189, 0x000fd8e991b55698, 0x000e1b31473cc76b, 0x000f039631e631d5, 0x000c3e2143fbc1dc, }}}, + {{{ 0x00022d6648f940b9, 0x000997a5a1873e86, 0x000a07e4c41a54bb, 0x0005360b3b4bd6cf, 0x0006240aacebaf72, }}}, + {{{ 0x0004749c5ba295a0, 0x00037946fa4b5f06, 0x000724c5ab5a51f1, 0x00065633789dd3f3, 0x00056bdaf238db40, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb23b9dc16cd31013b9862362b76b2a065c4fa1d791859b7c54571e7e5031aa83 + { + {{{ 0x0012b9e3f53533c5, 0x000aadd727a806c3, 0x000d6955c8ce15a2, 0x00118c4f070a290d, 0x0011d24a86d8373f, }}}, + {{{ 0x0008d36cc19d3b9f, 0x0006ec4470d72261, 0x0006853d7018a9ae, 0x0003aa3e4dc2c8eb, 0x00083aa31507e1e5, }}}, + {{{ 0x00047648ffd4ce1f, 0x00060a9591839e9d, 0x000424d5f38117ab, 0x00042cc46912c10e, 0x00043b261dc9aeb4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x6413956c8b3d51197bf40b002671fe9467954fd5dd108d0264099442e2d5b482 + { + {{{ 0x00131e1988bb7995, 0x000fb82f46b3bca9, 0x0010f7a8ce827b40, 0x000de1581617712e, 0x001326055cf5b275, }}}, + {{{ 0x00093d8b6c951351, 0x0004c0017e8f6329, 0x00053e559e53f9c4, 0x000cb20146886eea, 0x00082b4d5e24293f, }}}, + {{{ 0x000155cb28d18df2, 0x0000c30d9ca11694, 0x0002090e27ab3119, 0x000208624e7a49b6, 0x00027a6c809ae5d3, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x54693dc40a272ccdb2ca666a573e4add6c03d7692459fa7999258c3d60031522 + { + {{{ 0x000eebcd1f0db175, 0x000f4ceb4b7d1173, 0x000fd56168df4f5b, 0x0010bf79176fd189, 0x000acb67174ff608, }}}, + {{{ 0x0004270ac43d6941, 0x0002ed4cd95659a5, 0x000f5c0db37528f9, 0x0002ccbcfd2c9233, 0x000a21503603d8c2, }}}, + {{{ 0x0006cdf9390be1d0, 0x00008e519c7e2b3d, 0x000253c3d2a50881, 0x00021b41448e333d, 0x0007b1df4b73890f, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x8cf5f80718222e5fd40994d49f5c55e330a6b61f8da8aab23de052d345826968 + { + {{{ 0x000af2e0b3b2a1fe, 0x0010c56aa22c1c91, 0x000dfdec39f1b276, 0x0014c90af5c7f105, 0x00161fcef2658fc3, }}}, + {{{ 0x0006221807f8f58c, 0x0003fa92813a8be5, 0x0006da98c38d5572, 0x00081ed95554468f, 0x00068698245d352d, }}}, + {{{ 0x00015d852a18187a, 0x000270dbb59afb76, 0x0007db120bcf92ab, 0x0000e7a25d714087, 0x00046cf4c473daf0, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x408149f1a76e3c2154482b39f87e1e7cbace29568cc38824bbc58c0de5aa6590 + { + {{{ 0x000d25ed9ec4e5d3, 0x001022d20660684b, 0x000f972b70397b66, 0x000fa03958d3f964, 0x00129387bcd14eb4, }}}, + {{{ 0x00046ea7f149812d, 0x000f0725690a8427, 0x0008a73ae9f079fa, 0x0002dd924461c62a, 0x0009065aae50d8cc, }}}, + {{{ 0x00044525df200d57, 0x0002d7f94ce94385, 0x00060d00c170ecb7, 0x00038b0503f3d8f0, 0x00069a198e64f1ce, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 13 + // compressed: 0xedcac5dc344401e133fb843c965ded47e7a086ed76950170e4f967d27b69b225 + { + {{{ 0x000ab2e0d91a78a9, 0x000b990a12ccf20b, 0x001141c2e11f2621, 0x0010dfcefaa5331e, 0x000f369e6a924938, }}}, + {{{ 0x00094434dcc5caed, 0x000ac7909f667c1f, 0x00061a839d1fb575, 0x000cf23800cabb76, 0x00025b2697bd267e, }}}, + {{{ 0x00073ffb13986864, 0x0003282bb8f713ac, 0x00049ced78f297ef, 0x0006697027661def, 0x0001420683db54e4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd05accc16fbbee348bac4696e90c1b6a53de6ba649dab0d3c181d061413be8b1 + { + {{{ 0x0010bd1e249dd184, 0x00100bcb1820568d, 0x0012eab1718830d2, 0x000b96fd816997e4, 0x000e0b63bebf5089, }}}, + {{{ 0x0006bb6fc1cc5ad0, 0x000d32c8d591669d, 0x0009af794da86c32, 0x0008e0e9d86d24d2, 0x00031e83b4161d07, }}}, + {{{ 0x0000c7129e062b4f, 0x0001e526415b12fd, 0x000461a0fd27923d, 0x00018badf670a5b7, 0x00055cf1eb62d550, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x528cf57de3b5763036cc99e7ddb93ad720ee1349e31c83bd3301ba62aafb561a + { + {{{ 0x0011101065c23d45, 0x000daa1290338b0d, 0x0013157e9e2e7420, 0x0010ea712017d487, 0x000e69a656457087, }}}, + {{{ 0x000eb5e37df58c3f, 0x000bbcf33986c60d, 0x000c4fb8835ceae6, 0x000899dec18e71a3, 0x0009a56fbaa62b9f, }}}, + {{{ 0x00066b505c9dc9ec, 0x000774ef86e35287, 0x0004d1d944c0955e, 0x00052e4c39d72b20, 0x00013c4836799c58, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x80d08b5d6afbdcc442481a57ecc4ebde6553e5b883e8b2d427b8e5c87dc8bdd0 + { + {{{ 0x00125d465ab3e1a6, 0x0010f8fe27ec2845, 0x0012d6e6dbf04f04, 0x0013038cfc1b3274, 0x000e6f80c93a6379, }}}, + {{{ 0x0004fb6a5d8bd080, 0x000d8ae34908589b, 0x0003954d977baf12, 0x000413ea597441dc, 0x00050bdc87dc8e5b, }}}, + {{{ 0x000537836edfe111, 0x0002be02357b2c0d, 0x0006dcee58c8d4f8, 0x0002d732581d6192, 0x0001dd56444725fd, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x9ac8ba0800e697c2e0c3e1ea11ea4c7d7c97e79fe18be3f3cd05a3630f453aba + { + {{{ 0x00147ff833621257, 0x00108e39af82b1f2, 0x000c88322ef27da9, 0x0011973738a2a1a3, 0x0010e645912219f5, }}}, + {{{ 0x0007e60008bac887, 0x000a3d5c387c1852, 0x00079e5df1f533a7, 0x000ae6f9f1c5f0cf, 0x000ba3a450f63a2f, }}}, + {{{ 0x00072f31d8394627, 0x00007bd294a200f1, 0x000665be00e274c6, 0x00043de8f1b6368b, 0x000318c8d9393a9a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x98d31dab299e665d3b9e2d34581692fccd7359f3fd1d8555f60a9525c3419ad0 + { + {{{ 0x00145d032afffdf3, 0x00112fe49b6cde4c, 0x00121663bc327cef, 0x00118a5e4c69f1db, 0x001224c7c679a1d3, }}}, + {{{ 0x00069e29ab1dd385, 0x00030685b3c76bac, 0x000565cf37f24859, 0x000d7b2ac28efef9, 0x000d09a41c32594f, }}}, + {{{ 0x00006edca6f925e9, 0x00068c8363e677b8, 0x00060cfa25e4fbcf, 0x0001c4c17609404e, 0x00005bff02328a11, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe412c50ddda08168fefaa544c80de74f40524a8f6b8e741feaa301eecd7762d7 + { + {{{ 0x000a137023cadff8, 0x00115a3599eb26c5, 0x0010687221512b3a, 0x000a53cb3a0824e7, 0x000f80b8cc3fa2a3, }}}, + {{{ 0x0009a0dd0dc512e4, 0x00090894bf5fcd0f, 0x00052949013f9c36, 0x0009f50fba4735c7, 0x000576277cdee019, }}}, + {{{ 0x00038abc234f305f, 0x0007a280bbc103de, 0x000398a836695dfe, 0x0003d0af41528a1a, 0x0005ff418726271b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x4095b613e847dbe5e11026433b2a5df376127838e9261fac69cba0a08cdbd4a9 + { + {{{ 0x000e080c1789db77, 0x0014be7cef1ea730, 0x0012f40d769d807e, 0x00135f7d4c44a601, 0x001106a03dc25a94, }}}, + {{{ 0x000b47e813b6952d, 0x00076864c21c3cba, 0x0009e049dbcd74a8, 0x0005b4d60f93749b, 0x000a9d4db8ca0a0c, }}}, + {{{ 0x00050aaf333353d0, 0x0004b59a613cbb35, 0x000223dfc0e19a76, 0x00077d1e2bb2c564, 0x0004ab38a51052cb, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 14 + // compressed: 0x9cc0dd5fefd1cfd6ce5d57f7fd3e2be8c23416205d6bd5259b2bed04bbc641b0 + { + {{{ 0x00142b256768d56d, 0x0012e88459427b4d, 0x00102b38766306ff, 0x00134878d405eae3, 0x00129cdd1adc0888, }}}, + {{{ 0x0007d1ef5fddc089, 0x0007beeaebb9dad9, 0x000858d30ba0acfb, 0x0005cd92eab5ae8f, 0x000b041c6bb04ed2, }}}, + {{{ 0x0002f2f9d956e148, 0x0006b3e6ad65c1fe, 0x0005b00972b79e5d, 0x00053d8d234c5daf, 0x000104bbd6814049, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x63f17fd65f9a5da98156c74c9de62be957f220de4c02f8b7f52d07fb202a4fa0 + { + {{{ 0x0010fd3168f1ed54, 0x0011bb0de7784a3c, 0x00134bcb78b20475, 0x0010a4a26e2e2180, 0x000dbe8cc57092a5, }}}, + {{{ 0x000d9a5fd67ff150, 0x000ba998ead0352a, 0x000883c95fa4af99, 0x000efadbfc01266e, 0x000a04f2a20fb071, }}}, + {{{ 0x00043b3d30ebb079, 0x000357aca5c61902, 0x0005b570c5d62455, 0x00030fb29e1e18c7, 0x0002570fb17c2791, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x5a24b80b55a92e19d150908fa8fbe6c835c9a4882dea8679688601de915f1ca4 + { + {{{ 0x0012367f2cb6154f, 0x000ec39ac04d87dd, 0x000ed4958bd7e5bc, 0x000d66f4638a1531, 0x0013dcb65ea5302f, }}}, + {{{ 0x0006a9550bb82447, 0x000511f20a1a2325, 0x000a9324d7239bee, 0x000b343cc37516c3, 0x000a41c5f91de017, }}}, + {{{ 0x0000172940de6caa, 0x0006045b2e67451b, 0x00056c07463efcb3, 0x0000728b6bfe6e91, 0x00008420edd5fcdf, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xce10f4044ec3580385066e275a5b13b62115b9ebc770965d9c88db21f354d604 + { + {{{ 0x000f20ab8362fa37, 0x00129c4347cdd9be, 0x0010e798ad5f8461, 0x000cfef18bcb0bfc, 0x0008d9a53efbc175, }}}, + {{{ 0x0008c34e04f410bb, 0x000344edc0d0a06a, 0x000ee45486d84d6d, 0x000c4e2ecb3863f4, 0x00084d654f321db7, }}}, + {{{ 0x0005c116ddbdb5d5, 0x0006d1b4bba5abcf, 0x0004d28a48a5537a, 0x00056b8e5b040b99, 0x0004a7a4f2618991, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x4b2a37af91b2c324f24781717082da93f29e8986648584dd33eee023423196ca + { + {{{ 0x000f18025fb15f6f, 0x000e8d6b8371fe93, 0x0013804448f7d97b, 0x000c2466fe78427e, 0x00111b50c4cddd30, }}}, + {{{ 0x000bb291af372a4b, 0x00060e3028fe4497, 0x000a267bca4f6a09, 0x000719eec242b242, 0x0004a96314223e0e, }}}, + {{{ 0x0000274408a4ffd6, 0x0007d382aedb34dd, 0x00040acfc9ce385d, 0x000628bb99a45b1e, 0x0004f4bce4dce6bc, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x6f0b9dc46e61e2301723ecca8f7156e4a64f6bf29b40eb48375f5961e5ce4230 + { + {{{ 0x000fce5ae2242571, 0x0012d25eb153d4e2, 0x0013a8f3d09ba9c7, 0x0008f3690d04eb8c, 0x000f3fcdd14b71bf, }}}, + {{{ 0x0002616ec49d0b6f, 0x0009f95d8462e61c, 0x0009ad3e9b9159c5, 0x00079ba475a04df8, 0x0003042cee561595, }}}, + {{{ 0x00067079449bac41, 0x0005b79c4621484f, 0x00061069f2156b8d, 0x0000eb26573b10af, 0x000389e740c9a9ce, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x28ac0e57f678bdc9e19c9127320b5be5ed919ba1ab3efc65903626d6e525c425 + { + {{{ 0x0014b3ae34dcb9bb, 0x00147c691a15ac9d, 0x000b18e06e5d400a, 0x0013c422d9f83eb0, 0x000e1545379465a4, }}}, + {{{ 0x000578f6570eac15, 0x000644f2339c3937, 0x00066e47b7956c2c, 0x000b4832fe1f55d0, 0x000a5c425e5d6262, }}}, + {{{ 0x000606a6f1d7de6e, 0x0004f1c0c46107e7, 0x000229b1dcfbe5d8, 0x0003acc60a7b1327, 0x0006539a08915484, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x194abb14d4dbc4dd8e4f42983cbcb2196971ca36d79fa84890bd19f00e32658f + { + {{{ 0x00121f74c3d2f760, 0x001024b88d08bd38, 0x000ee678cf05414f, 0x00143631272e747b, 0x00091c5e4aac5ccf, }}}, + {{{ 0x0004dbd414bb4a06, 0x000f930849f1dbb8, 0x000329c5a466caef, 0x0006c824544feb9b, 0x0008f65320ef019b, }}}, + {{{ 0x0006d1b1cafde0c6, 0x000462c76a303a90, 0x0003ca4e693cff9b, 0x0003952cd45786fd, 0x0004cabc7bdec330, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 15 + // compressed: 0x89d2783f8f788fc09f4d40a12ca730fe9dcc65cffc8b77f22120cb5a1698e47e + { + {{{ 0x00169624089c0a1b, 0x0010075fc8e70471, 0x00113e84ab1d2311, 0x000ac10bedf69539, 0x000e39b93f0321c7, }}}, + {{{ 0x0007788f3f78d289, 0x000d942809b3f811, 0x0005973277f8c29b, 0x000810f93bc5fe67, 0x0007ee498165acb1, }}}, + {{{ 0x000508e39111a1c3, 0x000290120e912f7a, 0x0001cbf464acae43, 0x00015373e9576157, 0x0000edf493c85b60, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x13417684d2c4676735f8f5f73f4090a0debee6cafacf8f1c69a3dfd1540cc004 + { + {{{ 0x000c8158599b5a42, 0x0011fd75bc41d5d8, 0x0012d9fc1fa95d3a, 0x000fda27f20eba0f, 0x001403b92e3019d3, }}}, + {{{ 0x0007c4d284764100, 0x0007fefebf06acec, 0x00039afb7a824100, 0x0009b48e47e7fd65, 0x00084c00c54d1df9, }}}, + {{{ 0x00022f818b465cf8, 0x000342901dff09b8, 0x00031f595dc683cd, 0x00037a57745fd682, 0x000355bb12ab2617, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x18738c5ac7da01a311aaceb39d0390ed2d3fae3bbf7c076f8ead52e0f8ea1875 + { + {{{ 0x000e64cc7493bbce, 0x00133d94761874e2, 0x0010179e1796f611, 0x0011890535e2867b, 0x0010f9b8132182ea, }}}, + {{{ 0x0001dac75a8c7318, 0x000bb679d5423460, 0x0006b8fcb7b6400d, 0x0006c73783be5f9d, 0x0007518eaf8e052a, }}}, + {{{ 0x000059c41b7f6c32, 0x00079e8706531491, 0x0006c747643cb582, 0x0002e20c0ad494e4, 0x00047c3871bbb175, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb06650c8505de6fbb099a2b3b0c4ec62e0e81a44ea5437e55f8dd4e82ca0fe08 + { + {{{ 0x0014539771ec4f22, 0x000fb9318badca26, 0x00170f19afe016c4, 0x000cee7bb1608d21, 0x00100b89b8576468, }}}, + {{{ 0x00065d50c85066b0, 0x0006167453361f7c, 0x00086ba3818bb312, 0x0006aff29baa7521, 0x00008fea02ce8d48, }}}, + {{{ 0x0005dd7668deead0, 0x0004096d0ba47049, 0x0006275997219114, 0x00029bda8a67e6ae, 0x000473829a74f75d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc90239ad3a53d9238f5803efceddc264b42fe1cf9073251590d3e4444d8b666c + { + {{{ 0x0012da754679c405, 0x000b164c31be1058, 0x00091fac2b98ef5e, 0x00135a1aaf779255, 0x000a078684c4833a, }}}, + {{{ 0x0009533aad3902c9, 0x0009dde06b11e47a, 0x000784bed1930b76, 0x0009c80a92b9c867, 0x0006c668b4d44e4c, }}}, + {{{ 0x0000cf217a78820c, 0x00065024e7d2e769, 0x00023bb5efdda82a, 0x00019fd4b632d3c6, 0x0007411a6054f8a4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb475b1183de59a5702a192f359317168f535ef1ebaec55848f398c4572a8c99e + { + {{{ 0x000d9d32b99dc85a, 0x000eac075e22a9ab, 0x00130b9220113370, 0x00127fd9a638966c, 0x000fc136574fb811, }}}, + {{{ 0x0002e53d18b175b4, 0x000b3e7254204af3, 0x000bbcd7d5a1c4c4, 0x0004c7c22af65d0e, 0x0001ec9a872458c3, }}}, + {{{ 0x0006a4d400a2509b, 0x000041791056971c, 0x000655d5866e075c, 0x0002302bf3e64df8, 0x0003add88a5c7cd6, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x46303959d498c285ec59f65f98357e8f3a6ef6f22aa22c1d20a706a43111ba61 + { + {{{ 0x00115770b635dccc, 0x000d9ecd83f7956f, 0x0012db461c0b7fbc, 0x000f3a42a981345d, 0x001249929fccc878, }}}, + {{{ 0x000a98d459393046, 0x00030bfecb3d90b7, 0x0003d9b8ea3df8d6, 0x0003900e96511579, 0x00061ba1131a406a, }}}, + {{{ 0x0000a0f116959029, 0x0005974fd7b1347a, 0x0001e0cc1c08edad, 0x000673bdf8ad1f13, 0x0005620310cbbd8e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd685e277f4b5466693618f6c67ffe840dd94b5ab1173eca64dec8c65f346c8fe + { + {{{ 0x000993434934d630, 0x0010d4a2445eaa50, 0x000fd0708ae76fde, 0x000b9847b6c3c7e0, 0x000b7676a2a4d9d8, }}}, + {{{ 0x0006b5f477e285d6, 0x000ced91ec326cc8, 0x000ed6537503a3fc, 0x000626d3763988d4, 0x0007ec846f3658ce, }}}, + {{{ 0x00068f3f1da22ec7, 0x0006ed8039a2736b, 0x0002627ee04c3c75, 0x0006ea90a647e7d1, 0x0006daaf723399b9, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 16 + // compressed: 0xa28eadacbf043b5884e88b14e843b729dbc510083b581e2baabbb38ee54954ab + { + {{{ 0x00127562eb3dbe21, 0x001291d7b4170be5, 0x000dd1ca67dfa8df, 0x0012a88061f298a1, 0x0011304e9e71627b, }}}, + {{{ 0x000304bfacad8e8f, 0x000502917d108b07, 0x000843176ca6dd0f, 0x0005d5158f2c1d83, 0x000ab5449e58eb3b, }}}, + {{{ 0x000014d26adc9cfe, 0x0007f1691ba16f13, 0x0005e71828f06eac, 0x000349ed07f0fffc, 0x0004468de2d7c2dd, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xce0763f8c6d89a4b280c5d43313511212c777a65c566a8d4527324637e42a65d + { + {{{ 0x000b355e9419468b, 0x0011847bb8ea8a36, 0x0011fe6588cf9b6f, 0x000eb1c9d2db6b20, 0x000ecce7c6ffb44a, }}}, + {{{ 0x000ad8c6f86307bb, 0x000e286ba1850972, 0x0005e9dcb08444d3, 0x0009a96a543362b2, 0x000dda6427e63246, }}}, + {{{ 0x0004c688deac22ca, 0x0006f775c3ff0352, 0x000565603ee419bb, 0x0006544456c61c46, 0x00058f29abfe79f2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf6cd0e71bf645a4b3c292c4638e54cb1b93a0bd556d0433670485b182437f96a + { + {{{ 0x000ecfab8de73e42, 0x0013e6efced4bd20, 0x0010056609500dbc, 0x000f1b7824ad85dd, 0x001577629c4a7f40, }}}, + {{{ 0x000a64bf710ecdf6, 0x000708c58527896a, 0x000c2ceae6c53394, 0x0004381b21e82b69, 0x0006af93724185b4, }}}, + {{{ 0x0000024509c6a888, 0x0002696ab12e6644, 0x0000cca27f4b80d8, 0x0000c7c1f11b119e, 0x000701f25bb0caec, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x13c1be7cd9f6189de4dbbf74e6064a84d6604eac22b5f520515e9550c05b0af2 + { + {{{ 0x0010b0f8e4616cc7, 0x0011d3c4b50fb873, 0x000af29673dc0196, 0x000df4b0f1830ff9, 0x0012e0c92bfbdc3f, }}}, + {{{ 0x0000f6d97cbec113, 0x000cce97fb7c93a3, 0x000939835a11281a, 0x000728907ada9155, 0x000720a5bc050955, }}}, + {{{ 0x000709439b805a35, 0x0006ec48557f8187, 0x00008a4d1ba13a2c, 0x000076348a0bf9ae, 0x0000e9b9cbb144ef, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xeebeb15dd59bee8db93f720a37abc3c991d7681cbff1a844de3cfd1c19446db6 + { + {{{ 0x0012d48ffb572087, 0x000d7b7f21a1df75, 0x0015550effba0644, 0x0015ec6a4098a92f, 0x001221104eb3f335, }}}, + {{{ 0x00069bd55db1bedb, 0x0006e14e47f731bd, 0x0009a35e47270eac, 0x00066f225478df8d, 0x000b66d44191cfd3, }}}, + {{{ 0x00041743f2bc8c14, 0x000796b0ad8773c7, 0x00029fee5cbb689b, 0x000122665c178734, 0x0004167a4e6bc593, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xee8fcef86526bec22cd680e814ff67e9ee4e362f7e6e2ef1f6d27ecb7033b334 + { + {{{ 0x00139d2876f626ed, 0x001001cecd1d6c85, 0x000ff01a11747673, 0x0012350da5a1818f, 0x000f938bb7e22550, }}}, + {{{ 0x00062665f8ce8fdb, 0x000a9d101ac59857, 0x0004d93bbba59ffb, 0x00097b7897373f17, 0x000b4b33370cb7ec, }}}, + {{{ 0x000591ee8681d6cc, 0x00039db0b4ea79b8, 0x000202220f380842, 0x0002f276ba42e0ac, 0x0001176fc6e2dfe6, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb80e774989e290dba340f4ac2accfb989b87d7defe4f3521b60669f2543e6a9f + { + {{{ 0x000f6cd05b9c6175, 0x000e9654b0901694, 0x000fa53710b77f26, 0x000f9a1ea7d28174, 0x00108fc3a4c677d4, }}}, + {{{ 0x0000e28949770ea5, 0x0005559e88147b72, 0x000b5e1e6e63ef30, 0x00035b109aa7ff6e, 0x0009f6a3e54f2690, }}}, + {{{ 0x0004c199d30734ea, 0x0006c622cb9acc14, 0x0005660a55030216, 0x000068f1199f11fb, 0x0004f2fad0116b90, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x38b63bb71dd92c96089c12fcaa7705e68916b6f3399b616f81ee44295f995134 + { + {{{ 0x000eb24194ae4e41, 0x0012230afded8896, 0x00123412617d506f, 0x000bd5d30f359699, 0x000c45484a4972ee, }}}, + {{{ 0x000cd91db73bb625, 0x000d5f82538112c4, 0x0006d85a279815dd, 0x000740b7b0cd9cf9, 0x000b451995f2944e, }}}, + {{{ 0x0002fcd09fea7d7c, 0x000296126b9ed22a, 0x0004a171012a05b2, 0x0001db92c74d5523, 0x00010b89ca604289, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 17 + // compressed: 0x6ef0455abe413975655f9c6dedae7cd0b651ff729c6b7711a94d0defd9d1d217 + { + {{{ 0x0009474997182889, 0x0010a48a67e4c7aa, 0x00130fbc544bafe1, 0x0010c701315fe588, 0x000a0b878d577b73, }}}, + {{{ 0x000941be5a45f05b, 0x0005adb38becaea6, 0x000bfd46db41f2bb, 0x000ed488bbb5ce38, 0x00097d2d1d9ef0d3, }}}, + {{{ 0x0002af18073f3e6a, 0x00033aea420d24fe, 0x000298008bf4ff94, 0x0003539171db961e, 0x00072214f63cc65c, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc9293bf4b9b79d1d758f514f4a8205d6c49d2f31bd72c0f2b045155a85ac249f + { + {{{ 0x000b7f405307a680, 0x000ae5e66cf2b69b, 0x000dd84266ae9c52, 0x000de4eb7de853b8, 0x000dfdf48c58171b, }}}, + {{{ 0x0005b7b9f43b29b6, 0x000949ea31eea3b3, 0x0004be7713581608, 0x000ad87960395e98, 0x0009f24ac855a153, }}}, + {{{ 0x000608328e9505aa, 0x00022182841dc49a, 0x0003ec96891d2307, 0x0002f363fff22e03, 0x00000ba739e2ae39, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x26bb88eaf52644aefb3b9784d9790636504e69260c039f5c26d218d5e77d2972 + { + {{{ 0x000e98de5c8790b0, 0x001268b8545beb24, 0x000ed2648b96fedd, 0x000c7988ad1db07b, 0x00103283a3e67ad6, }}}, + {{{ 0x000426f5ea88bb26, 0x00033092e77f75c8, 0x0001a53940d819e7, 0x0009132e4f818613, 0x00072297de7d518c, }}}, + {{{ 0x00041dc7be0cb939, 0x0001b16c66100904, 0x0000a24c20cbc66d, 0x0004a2e9efe48681, 0x00005e1296846271, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x50452c24c8bbbfadd98130d0ec0cc8bc92dfc8f5a66635844cce5882d325cf78 + { + {{{ 0x000aeeb32d9c4934, 0x000f9e25772f974f, 0x000ed747833bbf22, 0x0016cdd816d5d748, 0x00139c00c9c13696, }}}, + {{{ 0x0007bbc8242c4550, 0x000d9a06103b35b7, 0x0007237e4af32032, 0x000726421ab3537a, 0x00078cf25d38258c, }}}, + {{{ 0x00066b8e31489d68, 0x000573857e10e2b5, 0x00013be816aa1472, 0x00041964d3ad4bf8, 0x000006b52076b3ff, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2d08ceb9167ecbf529bc7a414cf10734aba7f42bce6bb3d4ce759f1a56e9e27d + { + {{{ 0x0010cfe19d957809, 0x001312cc621c453a, 0x000945ace6da077a, 0x0010912bef9ce9b7, 0x000cd57e3443bc74, }}}, + {{{ 0x000b7e16b9ce082d, 0x0009882f57853eb8, 0x0007d29eacd01fc4, 0x000ae76a59b5e715, 0x0007de2e9561a9f6, }}}, + {{{ 0x0000d4f4b6a55ecb, 0x0007ebb0bb733bce, 0x0007ba6a05200549, 0x0004f6ede4e22069, 0x0006b2a90af1a602, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x0ad8b25b24f3eb779b07b92f471b30d83373ee4cf2e647c609216c27c81258c6 + { + {{{ 0x0013f4fc9ae61e84, 0x0013bc07ebfa2d22, 0x0013b744b55cd49e, 0x00172553b25721f1, 0x000dfd8f4e9d12d1, }}}, + {{{ 0x000bf3245bb2d80a, 0x0008e5f720f36efc, 0x000bb9cccf60c06c, 0x000884e323f37925, 0x000465812c8276c1, }}}, + {{{ 0x0003beb22a1062d9, 0x0006a7063b82c9a8, 0x0000a5a35dc197ed, 0x0003c80c06a53def, 0x00005b32c2b1cb16, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x9581d57a2ca4fcf7ccf333436e2814329d970b340d9dc2b6e1077356481a77b1 + { + {{{ 0x00105eccd24da8ea, 0x000d80bbfdf07916, 0x000fe73586873c69, 0x000f4ceddf77f93d, 0x000bb5556a37b470, }}}, + {{{ 0x000ca42c7ad58182, 0x0005c8667e799efe, 0x00082e5e74c850a1, 0x0003f0db614e8699, 0x000b1771a4856730, }}}, + {{{ 0x0000c524e14dd482, 0x000283457496c656, 0x0000ad6bcfb6cd45, 0x000375d1e8b02414, 0x0004fc079d27a733, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x0dc5860c448b34dc51e694ccc9cb3713b93c3e644df7226408cde3bac27011a4 + { + {{{ 0x001138b089bf2f59, 0x000ca05bfd34ea37, 0x000a03914c925ef4, 0x000f497fffe04e3b, 0x001124567cecaf97, }}}, + {{{ 0x000c8b440c86c50d, 0x000939929cca3b85, 0x0008f8f2e44cdf2e, 0x000e8432117ba6b1, 0x000241170c2bae3b, }}}, + {{{ 0x0001ab860ac473b4, 0x0005c0227c86a7ff, 0x00071b12bfc24477, 0x000006a573a83075, 0x0003f8612966c870, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 18 + // compressed: 0x138d0436fafc189cdd9d8973b39d1529aad0929f0b359fdcd4198a87ee7ef526 + { + {{{ 0x000a0cc9782a0db8, 0x00165d4e3070aab2, 0x000fbc8e31547734, 0x00109ebfb1432d97, 0x001504aa77679734, }}}, + {{{ 0x0008fcfa36048d00, 0x00066e7133bbb382, 0x00064b42a8a45676, 0x000cea6e4f9a85cf, 0x000a6f57eee878a0, }}}, + {{{ 0x00032cd55687efb1, 0x0004448f5e2f6195, 0x000568919d460345, 0x000034c2e0ad1a27, 0x0004041943d9dba3, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xddaa6ca24377214bceb78a6424b4a647e3c9fb037a4f1dcb19d000984231d912 + { + {{{ 0x0010eeba43ebcc70, 0x001384dd5395f876, 0x0009df331a35d270, 0x000a07ecfd4af70d, 0x0011420a1d976842, }}}, + {{{ 0x00017743a26caaca, 0x00048c9156f9c964, 0x0007ef278d1e9ad0, 0x00080ce58ea7bd01, 0x00092d931429800c, }}}, + {{{ 0x00067799d337594f, 0x00001647548f6018, 0x00057fce5578f145, 0x000009220c142a71, 0x0001b4f92314359a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb16698a43030cf3359485f21d2731f25f6f4de5140aa82abf6239a6fd591f1df + { + {{{ 0x0014109d8915092b, 0x001225bd2d2d47c9, 0x000d7cc080e73be8, 0x000ed71075721fca, 0x001239b572a7f131, }}}, + {{{ 0x00073030a49866b1, 0x000a442be90b2679, 0x00077bd3d8947dce, 0x0009fb55c1552028, 0x0005ff191d56f9a1, }}}, + {{{ 0x0006d433ac2d9068, 0x00072bf930a47033, 0x00064facf4a20ead, 0x000365f7a2b9402a, 0x000020c526a758f3, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x89cc42f059ef31e9b64b128e9d9c582c9759c7ae8ae1c8ad0cc502560afe2c45 + { + {{{ 0x001034f89ed8db96, 0x000f3b8f948d8ef1, 0x000f86c1d323caaa, 0x00143bd4a9266e50, 0x00102aacc4615311, }}}, + {{{ 0x0009ef59f042cc76, 0x0003b1c24976dd25, 0x000b1d665cb16272, 0x000a8656e470c556, 0x000c52cfe0a5602b, }}}, + {{{ 0x0000f7a0647877df, 0x0004e1cc0f93f0d4, 0x0007ec4726ef1190, 0x0003bdd58bf512f8, 0x0004cfb7d7b304b8, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x12ef8997c29986e20d1957df71cd6e2bd070c9ec57c843c3c53a4d43bc4c1d5b + { + {{{ 0x00143d6cb89b75d8, 0x0013338d5b900e54, 0x00138d327d531a51, 0x0011b25c61d51b9d, 0x00114b4622b39073, }}}, + {{{ 0x000699c29789ef12, 0x00063beae321bc50, 0x000b25c340adbb35, 0x000562e1a1e42bf5, 0x0005b1d4cbc434d3, }}}, + {{{ 0x00032615cc0a9f26, 0x00057711b99cb6df, 0x0005a69c14e93c38, 0x0006e88980a4c599, 0x0002f98f71258592, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x01a7544f44ae122eded7cba9f03efefce05d83750d89bfce544561e7e962801d + { + {{{ 0x000ca74cb50f9e30, 0x000d31d1c2640191, 0x0010c03d9d6c7fd1, 0x000d7ccd156610bf, 0x0013a6ae249d8069, }}}, + {{{ 0x000aae444f54a6ee, 0x000615397afbc5c1, 0x000e0d7783f3f8fb, 0x000aaa675fc486b9, 0x0009d8062e9e7613, }}}, + {{{ 0x0002da85a9907c5a, 0x0006b23721ec4caf, 0x0004d2d3a4683aa2, 0x0007f9c6870efdef, 0x000298b8ce8aef25, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xde65210aea727a83f679cf0bb407ab3f70ae3877c7361652dcd7a7031827a66b + { + {{{ 0x00127953eff70c8c, 0x00154f22ae0ec550, 0x00129f3da92e2722, 0x001242ca0c22bd16, 0x00134b8a8404d5cc, }}}, + {{{ 0x000a72ea0a2165de, 0x00068179ef3ed06e, 0x000ce2b9c0feac1e, 0x000bee290b1b63ba, 0x0006ba6271803a7c, }}}, + {{{ 0x0006ecb583693335, 0x0003ec76bfdfb84d, 0x0002c895cf56a04f, 0x0006355149d54d52, 0x00071d62bdd465e1, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf55ef7b1dab52dcdf565b016cf957fd785f0493fea1f57143d2b2b262136331c + { + {{{ 0x000bcc28d378df6d, 0x000f2141f4968ca5, 0x001407696bdb6d0c, 0x000dd271b22ffcf9, 0x000f4d5f317f3171, }}}, + {{{ 0x0005b5dab1f75ef5, 0x0009e2d60cbeb9a5, 0x000527c2175dfe56, 0x000d9e8a2b8ff51f, 0x0001c333621262b1, }}}, + {{{ 0x0007e55467d9ca81, 0x0006a5653186f50d, 0x0006b188ece62df1, 0x0004c66d36844971, 0x0004aebcc4547e9d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 19 + // compressed: 0x10b654739e8d400b6e5ba85b53326b8007a2584a033ae6db2cdfa1c9ddd93b97 + { + {{{ 0x0010071b276d01a3, 0x0010b0d8918e025c, 0x000f5beea79ee2e9, 0x0013c92984094db7, 0x0015d88fbf95a3d9, }}}, + {{{ 0x00008d9e7354b5fd, 0x00026b750b6dc168, 0x000162881e01acc9, 0x0007966df31d01a5, 0x000973bd9ddc9a1d, }}}, + {{{ 0x00000f1efe5872df, 0x0005da872318256a, 0x00059ceb81635960, 0x00018cf37693c764, 0x00006e1cd13b19ea, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x53035b9e62af2b4747048d27900baa3b27bf4396465f780c137b838d1a6a3aff + { + {{{ 0x0010ad516f166efd, 0x000a63f56d57c818, 0x00113422384638c9, 0x0011331ff1af0a4e, 0x0013080603526e14, }}}, + {{{ 0x000baf629e5b0353, 0x000a04f1a088e8e4, 0x00090efc9ceea82d, 0x000d89863c2fa34a, 0x0007f3a6a1a8d836, }}}, + {{{ 0x000644395d3d800b, 0x0002b9203dbedefc, 0x0004b18ce656a355, 0x00003f3466bc182c, 0x00030d0fded2e513, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x5047b8681e97b49ccfbb6466297295a02b41fa7226e78d5cd989c551430815c6 + { + {{{ 0x00114d1af212338d, 0x0011de1989b39c09, 0x000d2669dc6f6f9c, 0x000c3434b28c3fc6, 0x0010a9214202c098, }}}, + {{{ 0x000c971e68b8473d, 0x00052ccc9779f395, 0x000be904ae8255c8, 0x0004ecae46f39338, 0x000c615084351c58, }}}, + {{{ 0x000019c0aeb9a02e, 0x0001a2c06995d792, 0x000664cbb1571c44, 0x0006ff0736fa80b2, 0x0003bca0d2895ca5, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xbf01cc9eb68e689c6f8944a6ad83bcf0e29f7a5f5f952dca4182f28d03b4a84e + { + {{{ 0x001031bc3c5d6291, 0x000fd9fe0f4c081c, 0x00143ed51467f22b, 0x0011e6cc0c1ed107, 0x000d631deddae8ef, }}}, + {{{ 0x00088eb69ecc01bf, 0x000db4c8912df38c, 0x0005ea7f8bc2f20d, 0x000920e516caafaf, 0x0004ea8b4038df27, }}}, + {{{ 0x0005460af1cad202, 0x0000b4919dd0655d, 0x0007c4697d18c14c, 0x000231c890bba2a4, 0x00024ce0930542ca, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x850bf3fd55a1cf3fa42e37368e16f7d244f89264de64e0b280424f32a7289954 + { + {{{ 0x001090f5fd06c0f3, 0x000eabb1021e43fb, 0x001232bcfad7119f, 0x0013a5c13c047f35, 0x000c1d4e3c28a06b, }}}, + {{{ 0x0007a155fdf30b85, 0x0009c6c6e5d487f9, 0x000a4be1134bdc59, 0x0009405970326f31, 0x000549928a7324f3, }}}, + {{{ 0x000632a763ee1a2e, 0x0006fa4bffbd5e4d, 0x0005fd35a6ba4792, 0x0007b55e1de99de8, 0x000491b66dec0dcf, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xa164dad08e4af0754b28e267af2c22eda47b7b1f79a33482678b01b7b0b8f6cc + { + {{{ 0x000db13dc7ea3281, 0x00118fc2db73131d, 0x000fe3651f8f57e1, 0x00125656055fa964, 0x00108f338d0c85ec, }}}, + {{{ 0x00084a8ed0da64a1, 0x000decfc45096ebd, 0x000dedee93b488b1, 0x0005b3c11a51bc8e, 0x0004cf6b8b0b7018, }}}, + {{{ 0x0003a821991a73bd, 0x00003be6418f5870, 0x0001ddc18eac9ef0, 0x00054ce09e998dc2, 0x000530d4a82eb078, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x9ebf9a6c4573696d80a80049fcb27f2550b8cfc812f4ac2b5bbdbf0ce0e7b38d + { + {{{ 0x000c3630e1f947ff, 0x000cd1956a6b4008, 0x001213fe2df8b5df, 0x00105ce3a41191e4, 0x00165ea753f10175, }}}, + {{{ 0x000973456c9abf8b, 0x0007892015100dac, 0x00033ee14095fecb, 0x0006ad95d67a0964, 0x0008db3e7e00cbfb, }}}, + {{{ 0x0006fc3ee2096363, 0x0007ec36b96d67ac, 0x000510ec6a0758b1, 0x0000ed87df022109, 0x00002a4ec1921e1a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x5f79cff16261c8f5f257ee2619868c117835061c85242117cf7f06ec5d2bd136 + { + {{{ 0x0016259a3b24b87c, 0x001188b5f4170b9a, 0x001681c0dee15de9, 0x000cdfe665f37443, 0x0013d143c511277f, }}}, + {{{ 0x00086162f1cf794c, 0x000b24ddcafe5eb8, 0x000818d5e0463217, 0x0007e78b9092428d, 0x000b6d12b5dec067, }}}, + {{{ 0x0005279179154557, 0x00039f8f0741424d, 0x00045e6eb357923d, 0x00042c9b5edb746f, 0x0002ef517885ba82, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 20 + // compressed: 0x512f5b30fbbfee96b8969588ad38f9d325ddd546c72df5f095003abb90829657 + { + {{{ 0x000f974e8c58aec9, 0x000f757e083488c5, 0x000e01c62ae7bc8a, 0x000c5370c2ecab73, 0x000af1b78fab1439, }}}, + {{{ 0x0006bffb305b2f51, 0x0005b112b2d712dd, 0x00035774974fe4e2, 0x00084af87a96e3a3, 0x00057968290bb39f, }}}, + {{{ 0x0002b8430a20e101, 0x0001a49e1d88fee3, 0x00038bbb47ce4d96, 0x0001f0e7ba84d437, 0x0007dc43e35dc2aa, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x18973e275c2a785a94fd4e5e99c676353e7d231f05d82e0f990ad5821db84f84 + { + {{{ 0x00166665887dd9b0, 0x000e29760a6ab0b0, 0x001481e6c7243e6b, 0x001097e37046fc75, 0x000fef72016758ca, }}}, + {{{ 0x00082a5c273e9718, 0x000b2bc9dfb28b4e, 0x00048df4f8d5db19, 0x00054c87976c028f, 0x000044fb81d82d50, }}}, + {{{ 0x000718c5a907e3d9, 0x0003b9c98c6b383b, 0x000006ed255eccdc, 0x0006976538229a59, 0x0007f79823f9c30d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xba87f568f01f9c6adec850004e892708e75bed7d5599bf3cf0d6061c43b0a964 + { + {{{ 0x000cd239a3b513c2, 0x000a9723f51b1065, 0x001642f4cf04d9c2, 0x000cda095aa09b78, 0x0010a4e0373d784c, }}}, + {{{ 0x00041ff068f587ba, 0x0009c00a191bcd53, 0x0007b56f9c209e24, 0x000b781e5fccaabe, 0x00064a9b0431c06c, }}}, + {{{ 0x0003d6a15b7d2919, 0x00041aa75046a5d6, 0x000691751ec2d3da, 0x00023638ab6721c4, 0x000071a7d0ace183, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x3144e12052350ccc4151b1090795650d365f9d201b62f59ad3557761f7bc69fc + { + {{{ 0x000f2daac887b9e5, 0x0010b7f4ac5dda5f, 0x000bbdda2c0498a2, 0x000f4e67aa18015f, 0x0012c3bcc7146ea6, }}}, + {{{ 0x0004355220e14431, 0x0000e1362a283981, 0x000a757cd8359654, 0x000ae9cd7ab10d8f, 0x0007c69bcf761774, }}}, + {{{ 0x0000d7eb04e8295f, 0x0004a5ea1e6fa0fe, 0x00045e635c436c60, 0x00028ef4a8d4d18b, 0x0006f5a9a7322aca, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xbe44d9a3ebd429e79eaf788040099e8d039c86477a562545243b8dee8096ab82 + { + {{{ 0x0011000c2f41c69f, 0x0008219fdf737172, 0x000b14727f127de6, 0x000fe5277d23b81d, 0x001494e21a2e1479, }}}, + {{{ 0x0009d4eba3d944ab, 0x0008100f15f3dce4, 0x00061a700e367824, 0x0005922292ab3d23, 0x00082ab9680ee8d3, }}}, + {{{ 0x00048a85dde50d9a, 0x0001c1f734493df4, 0x00047bdb64866889, 0x00059a7d048f8eec, 0x0006b5d76cbea46b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x2225781e1741f9e0d336690374aee6f146c7fcd0a23e8b403e31dd039c86fb16 + { + {{{ 0x000f556cec0cd96e, 0x0015eb9a03b75109, 0x000d0ad1dd91cb6f, 0x0009aa5780b48a46, 0x0010ae333f685276, }}}, + {{{ 0x000141171e782522, 0x0006806d26da7c1f, 0x0003f31d1bc79ab9, 0x00089f20459f5168, 0x00016fb869c03dd2, }}}, + {{{ 0x0006199733b60962, 0x00069b157c266511, 0x00064740f893f1ca, 0x00003aa408fbf684, 0x0003f81e38b8f70d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x24c8175f357fdb0aa49942d7c323b974f7eaf8cb8b3e7cd53ddcde4cd3e2d30a + { + {{{ 0x00110fcc7ed9afeb, 0x0014248cb0e96ff0, 0x0014311c115172e0, 0x000cc9d41cbf6923, 0x000d0510fc104f4f, }}}, + {{{ 0x000b7f355f17c811, 0x00087ae85334815a, 0x0007e3abddd2e48e, 0x00061eeabe1f45e5, 0x0008ad3e2d34cded, }}}, + {{{ 0x00040fc5336e249d, 0x0003386639fb2de1, 0x0007bbf871d17b78, 0x00075f796b7e8004, 0x000127c158bf0fa1, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x74b951aec48fa2de96fe4d74d373991da84838870b68406295df67d17924d84e + { + {{{ 0x00117c422e98797c, 0x000a8a5946c8fec1, 0x000d3ab32e912b76, 0x000fb44da09fe0a4, 0x001354ef87d07ef3, }}}, + {{{ 0x000a8fc4ae51b974, 0x000a6e89bfd2dbd3, 0x000ce122a07665ce, 0x0007cab1203405c2, 0x0004ed82479d167d, }}}, + {{{ 0x0003b52260c5d975, 0x00079d6836171fdc, 0x0007d994f140d4bb, 0x0001b6c404561854, 0x000302d92d205392, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 21 + // compressed: 0x77f1e0e4b66fbc2d936abda429bfe104e8f67a78d466195e60d026b45e5fdc8e + { + {{{ 0x000bc1a2bca4282a, 0x00123430c7bb2f01, 0x0011a3ea1bb58bc0, 0x0017265763de5c5f, 0x00090e5d3b76f1c8, }}}, + {{{ 0x00046fb6e4e0f164, 0x00053497ad5265b7, 0x0009ebdba01386fc, 0x0008302f0cb36a3b, 0x0008edc5f5eb426c, }}}, + {{{ 0x0003bfd653da8e67, 0x000584953ec82a8a, 0x00055e288fa7707b, 0x0005395fc3931d81, 0x00045b46c51361cb, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe4e37f8add4d9dce300e6276566413ab58990eb37b4f594bdf291232ef0a1cdc + { + {{{ 0x00102abf314f7f7b, 0x000b91d19e8a1526, 0x000ea2fa13895fc6, 0x00109d8eddeaa590, 0x0012177bfa36dcb5, }}}, + {{{ 0x000d4ddd8a7fe3d1, 0x000acecc41c619d2, 0x000c3a6562ac4d90, 0x000cefa5aca7bdd8, 0x000dc1c0aef32121, }}}, + {{{ 0x00001bbcfa79db8f, 0x0003d84beb3666e1, 0x00020c921d812204, 0x0002dd843d3b32ce, 0x0004ae619387d8ab, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x83fb5b98447e1161363196712a46e0fc4b9025d44834ac83643da45bbe5a6875 + { + {{{ 0x0013f6aa5344a31b, 0x000e9683680f11b9, 0x00104c3581f623a9, 0x000f01af5875cba3, 0x0009a00d91b17bf2, }}}, + {{{ 0x00097e44985bfb83, 0x000d4e32c626cc21, 0x000896412ff38117, 0x000eb241d61a2469, 0x00075685abe5ba42, }}}, + {{{ 0x00060933eb61f2b2, 0x0005193fe92a4dd2, 0x0003d995a550f43e, 0x0003556fb93a883d, 0x000135529b623b0e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xfe832ee2bc16c7f5c18509e819eb2bb4ae4a251437a69dec13a6901505ea7259 + { + {{{ 0x0010dbd7add1d505, 0x001119f823e2231c, 0x000c51d66e5e7de0, 0x000d00c39970f837, 0x000f9b5b81a65ca2, }}}, + {{{ 0x000716bce22e83eb, 0x00033d0130b83eb8, 0x0008952abad0afac, 0x000309f64ed31b89, 0x000d972ea051590a, }}}, + {{{ 0x0004ac20dc8f7811, 0x00029589a9f501fa, 0x0004d810d26a6b4a, 0x0005ede00d96b259, 0x0004f7e9c95905f3, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xfe9952353d44c871d7eaebdb1c3bcd8b6694a4f19e499280c8ad44a1c4ee4219 + { + {{{ 0x00174bbc5781301b, 0x000f3135bb81ec4a, 0x000fef671b61483b, 0x000f264614ccd728, 0x000b1993ad92e637, }}}, + {{{ 0x0008443d355299eb, 0x000b9b7d7d5aee38, 0x000692519a2f34eb, 0x000ee4404924cf78, 0x0009942eec4a1449, }}}, + {{{ 0x00045319ae234992, 0x0002219d47d24fb5, 0x0004f04488b06cf6, 0x00053aaa9e724a12, 0x0002a0a65314ef9c, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x3a791c3ccd1a36cf3bbc355aacbc9e2faba6cda8e960e860131aea6d9bc35d05 + { + {{{ 0x000f937ff7f927af, 0x0010c2fa14c6a5b5, 0x000d56bddb6dd07a, 0x000ef6acc179d107, 0x000ccf6e218647c1, }}}, + {{{ 0x000e1acd3c1c7927, 0x00058b46b78779e5, 0x000b369aacbe7af2, 0x000509b0743074d3, 0x000855dc39b6dea1, }}}, + {{{ 0x0001227cc28d5bb6, 0x00078ee9bff57623, 0x00028cb2241f893a, 0x00025b541e3c6772, 0x000121a307710aa2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc98374c73e7159d6af962bb877e0bf88d3bc971023289e289b3aed6c4ab97bd2 + { + {{{ 0x000b5d5e9f034a71, 0x000926069785bc9a, 0x000d474ec7854fef, 0x001296a302a348c9, 0x001333fc76c7a40c, }}}, + {{{ 0x0009713ec77483c9, 0x0006f70572d5faca, 0x000a5ef34e22ff81, 0x000d4d944f141187, 0x000527bb94a6ced2, }}}, + {{{ 0x0005992a995b482e, 0x00078dc707002ac7, 0x0005936394d01741, 0x0004fba4281aef17, 0x0006b89069b20a7a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x77dbc7b58cfa824055c134c7f88686067ea5e7f6d9c8e629cf9b63a708d37384 + { + {{{ 0x0012a041627021fa, 0x000f5f248b69d023, 0x0011cbbc16656a26, 0x000db9ffd6e26726, 0x000a3bc2103aa73d, }}}, + {{{ 0x000afa8cb5c7db64, 0x000f18e6982aa80f, 0x000b9e95f81a1a1a, 0x0005e794f3646cfa, 0x0008473d308a7639, }}}, + {{{ 0x0006792603589e05, 0x000248db9892595d, 0x000006a53cad2d08, 0x00020d0150f7ba73, 0x000102f73bfde043, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 22 + // compressed: 0x9a1c51b5e0dab4a206ffff2b2960c87a344250f55d371f982da14eda25d76b3f + { + {{{ 0x0010b9ab7f5745a0, 0x000dcaf0f8d21d61, 0x000fdebea408ea2a, 0x00089edb93896d15, 0x00136597d25ea5bf, }}}, + {{{ 0x000cdae0b5511c9a, 0x0005257fffe0d455, 0x000d4108d1eb2180, 0x000896cc0f9baef9, 0x0003f6bd725da4e9, }}}, + {{{ 0x00058d7b106058ac, 0x0003cdf8d20bee69, 0x00000a4cb765015e, 0x00036832337c7cc9, 0x0007b7ecc19da60d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x9bfa7ca7514aae6d5086a3e754362682db822d8fcdffbb09bacaf51b66dcbe83 + { + {{{ 0x000a373c695c68fa, 0x000cc0c8520dcf17, 0x001384af4b7494b8, 0x000cab4a8ea22223, 0x000c235ad7601742, }}}, + {{{ 0x00064a51a77cfa88, 0x000a9cf470ca0db5, 0x0004b60b6e0898d8, 0x00055d04ddffe6c7, 0x00083bedc661bf5c, }}}, + {{{ 0x0000cb0d078975f5, 0x000292313e530c4b, 0x00038dbb9124a509, 0x000350d0655a11f1, 0x0000e7ce2b0cdf06, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf9704bd9dffea6fe2dbafcc151c030f189ab2f7f7ed48248b5eeec8a135652e1 + { + {{{ 0x0014643ac48c8590, 0x000e878c2735b890, 0x0013a53523f4d876, 0x0013a504ed8bee9b, 0x000e66e0a5d8fb44, }}}, + {{{ 0x0006fedfd94b70e6, 0x000a383f9745bfd4, 0x0004beae27c4c300, 0x00075aa4416a3f3f, 0x000e15256138aece, }}}, + {{{ 0x0003f64e4870cb0d, 0x00061548b16d6557, 0x0007a261773596f3, 0x0007724d5f275d3a, 0x0007f0bc810d514d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xa0137273ad9dac83982ef72ebaf8f69f5769ec43dd2e1e3175abc5de7d903a9d + { + {{{ 0x00106ba426f41349, 0x0013cafc0606b71e, 0x001518f0a2359cd8, 0x000dfae5e46feca5, 0x0010d1f8dbcf8eec, }}}, + {{{ 0x000c9dad7372138d, 0x000745dee5d31074, 0x0007b1a55e7fdbe2, 0x0005ba988f176ea1, 0x0009d3a907ddec5a, }}}, + {{{ 0x000693313ed081dc, 0x0005b0a366901742, 0x00040c872ca4ca7e, 0x0006f18094009e01, 0x00000011b44a31bf, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x5ca70a6a691f56166abd52585c72bfc1ad66799a7fdda811261085d2a288d963 + { + {{{ 0x000fa06c3fc66be6, 0x0011c9bac1ba47fa, 0x000a3935c575038c, 0x000bf0bd71c59c12, 0x0013ac48d916e834, }}}, + {{{ 0x00061f696a0aa75c, 0x000b8b0a57ad42ca, 0x0009e59ab706fdc8, 0x00081308d46ebfcc, 0x00063d988a2d2850, }}}, + {{{ 0x00020753afbd232e, 0x00071fbb1ed06002, 0x00039cae47a4af3a, 0x0000337c0b34d9c2, 0x00033fad52b2368a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe8cf22c4d0c82c8dcb3aa1057b4f2b076fa5f6ece6b6fea3e2710ab9cc55c33c + { + {{{ 0x000e49c6c5e41df0, 0x000e0667eee6aa7f, 0x0014179d182be18f, 0x000e53d9567e6977, 0x00116c0f429a256c, }}}, + {{{ 0x0004c8d0c422cfe8, 0x000760b4275971a5, 0x000bda95bc1cad3d, 0x0008f151ff5b7375, 0x0003cc355ccb90a6, }}}, + {{{ 0x00069443903e9131, 0x00016f4ac6f9dd36, 0x0002ea4912e29253, 0x0002b4643e68d25d, 0x000631eaf426bae7, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe80d70a3b975d9475205f8e2fbc58072e15de432278f6553b5805f667f2c1fc3 + { + {{{ 0x00110410da66fe8c, 0x00124d82dcb4d67b, 0x000be6fe0e17752b, 0x0014dade1ecbb08e, 0x000d599648b1ea8f, }}}, + {{{ 0x000175b9a3700de8, 0x00077c5f00aa48fb, 0x000b917785ca0317, 0x00085aa9b2c79398, 0x000431f2c7f665f7, }}}, + {{{ 0x00026344858f7b19, 0x0005f43d4a295ac0, 0x000242a75c52acd4, 0x0005934480220d10, 0x0007b04715f91253, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc6bae6c480c276b30b9b1d6dddd30e9744f90b4558959ab023e2cd57faacd0c8 + { + {{{ 0x000dbd28acf6ae30, 0x00116fab8f56907c, 0x000facb11218d5f0, 0x00141fe02023b4da, 0x000d9b37bf5c2f63, }}}, + {{{ 0x0006c280c4e6bac6, 0x000bada3b361766e, 0x00042fe5125c3b4e, 0x000911d84d4aac22, 0x00048d0acfa57cdd, }}}, + {{{ 0x000726e47dabe671, 0x0002ec45e746f6c1, 0x0006580e53c74686, 0x0005eda104673f74, 0x00016234191336d3, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 23 + // compressed: 0x4086f31fd69c49dda0253606c39bcd29c33dd73d02d8e25131923b207a70254a + { + {{{ 0x001499def6267fd0, 0x000f6e858108773a, 0x001693cac5ddcb28, 0x00100311d00a9ff2, 0x0012cdfdfecd5d03, }}}, + {{{ 0x00099cd61ff38640, 0x000860c6c4b41ba8, 0x00075cf70ca7366e, 0x000118a8f16c011e, 0x0004a25707a203b9, }}}, + {{{ 0x0007668a53f6ed6a, 0x000303ba2e142556, 0x0003880584c10909, 0x0004fe20000a261d, 0x0005721896d248e4, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x4edad0a191505d28083efeb5a76faa4bb39393e17c17e563fd30b0c4af35c903 + { + {{{ 0x000e5517fd181b9b, 0x0013e5772c76816c, 0x0010191896408988, 0x0009ed2a84de7497, 0x000d78edd74f63c0, }}}, + {{{ 0x000d5091a1d0da3b, 0x0004f6bfc7c1050a, 0x000e4e4ecd2ea9be, 0x00087eb1f28bbe6f, 0x00083c935afc4b02, }}}, + {{{ 0x000276c6492b0c3d, 0x00009bfc40bf932e, 0x000588e8f11f330b, 0x0003d16e694dc26e, 0x0003ec2ab590288c, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xcbd132ae093a21a7d5c2f540df872b0f29ab1ee8c6a4ae0b5eacdb6a6cf61b8e + { + {{{ 0x0010d27be4d87ba6, 0x000d6c27235db432, 0x00172e6e0ea62d36, 0x0015674cd06ee837, 0x000add5c25a200fa, }}}, + {{{ 0x00013a09ae32d1b8, 0x000be81eb85ab4e4, 0x00087aaca43cae1e, 0x00062f05d7526373, 0x0008e1bf66c6adba, }}}, + {{{ 0x0003d5e9792c887e, 0x000319724dabbc55, 0x0002b97c78680800, 0x0007afdfdd34e6dd, 0x000730548b35ae88, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x34e3d6a14b095b80193f350977f13ebf2b702206cb063f42dd4578d877225a58 + { + {{{ 0x000d51a3cba8b8c8, 0x000bb6422be2d885, 0x000e30e1419689bb, 0x0014653b07a7a954, 0x0013043443b411d9, }}}, + {{{ 0x0003094ba1d6e334, 0x0006e126a7e3300b, 0x000889c0aefcfbc5, 0x000aeea11f836582, 0x000585a2277d8783, }}}, + {{{ 0x00025f8233d48962, 0x0006bd8f04aff431, 0x0004f907fd9a6312, 0x00040fd3c737d29b, 0x0007656278950ef9, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x9dcf86eaa37370e1dc5f1507b7fb8c3a8e8a8331fce7534816f613b684f4bb28 + { + {{{ 0x000bcf59d51fc89a, 0x000fa0a0d6de4717, 0x000d5c3a3e6fb74a, 0x001353135f884fd4, 0x0013f4160a8c1b82, }}}, + {{{ 0x000873a3ea86cf8a, 0x0006e0e2abfb9c2d, 0x00060e2a38ea33ee, 0x000b0b2429f3fe18, 0x000a8bbf484b613e, }}}, + {{{ 0x00012f5c6f136c7c, 0x0000fedba237de4c, 0x000779bccebfab44, 0x0003aea93f4d6909, 0x0001e79cb358188f, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x8181e0f5d853e977d9de9d29440ca584e52545860c2d6cdcf4f2d1392db58ac7 + { + {{{ 0x001436c3eef7e3de, 0x000fffd3c21f0024, 0x0013e77bf20a2da8, 0x000c18bffc8472dc, 0x000e5d7951b3a3b2, }}}, + {{{ 0x000953d8f5e0816e, 0x00088533bbdb2efc, 0x0009149796129430, 0x00097a6e36168642, 0x000c78ab52d39d1e, }}}, + {{{ 0x0006a4d39252d159, 0x000790e35900ecd4, 0x00030725bf977786, 0x00010a5c1635a053, 0x00016d87a411a212, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x83054ed5e2d5a4fbfa99bd2ed7af1fe28f77e96e73c27a49de6d5a7a570b999f + { + {{{ 0x000d7e5a42066202, 0x0011a18b44983676, 0x000be652de1e6f8d, 0x0016532be02ed8ea, 0x000a8f87c8165f36, }}}, + {{{ 0x0004d5e2d54e0570, 0x0002e5d7b33f5f74, 0x000ba5de3f887ebf, 0x0006ef24bd6139b6, 0x0009f990b577a5a6, }}}, + {{{ 0x00044ead1be8f7d6, 0x0005759d4f31f466, 0x0000378149f47943, 0x00069f3be32b4f29, 0x00045882fe1534d6, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe46f3c942999acd8a29283a361f1f9b5f39ac8be13db992674f005e43c84cf7d + { + {{{ 0x0011345d757983b0, 0x001222f54234cccb, 0x0011784a3d8adbb2, 0x000b6ebeee8c2bca, 0x001688fe5b8f626e, }}}, + {{{ 0x00049929943c6fe4, 0x000c347072545b15, 0x000b226bced7e7c4, 0x00083a134ced89de, 0x0007dcf843ce405e, }}}, + {{{ 0x0000d6484a4732c0, 0x0007b94ac6532d92, 0x0005771b8754850f, 0x00048dd9df1461c8, 0x0006739687e73271, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 24 + // compressed: 0xc01a0cc89dcc6da636a4381bf45ca097c6d7db95bef3eba7ab7d7e8df6b8a07d + { + {{{ 0x0010201438567580, 0x000e155fb53d1ded, 0x00137ea32e89927b, 0x001059a668f5a82c, 0x00146115aba1d4da, }}}, + {{{ 0x0005cc9dc80c1ac0, 0x000683671486d4cd, 0x00076f5f1a5e8173, 0x000ed5d3f5f9df4a, 0x0007da0b8f68d7e6, }}}, + {{{ 0x00071953c3b5da76, 0x0006642233d37a81, 0x0002c9658076b1bd, 0x0005a581e63010ff, 0x0005a5f887e83674, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb943a6a0d328969e6420c3e600cbc3b532ec2d7c8902539b0cc7d1d5e27ae3c3 + { + {{{ 0x001301cf70a13ceb, 0x000aa6a1ba1891ea, 0x000af291fb3f3adf, 0x00121a7b814bea51, 0x0013669b656e44cf, }}}, + {{{ 0x000628d3a0a643b9, 0x00081cd8640c93d2, 0x0008b7b0cad70f2b, 0x000b864da98144bd, 0x00043e37ae2d5d1b, }}}, + {{{ 0x00063f06eda6e133, 0x000233342758070f, 0x000098e0459cc075, 0x0004df5ead6c7c1b, 0x0006a21e6cd4fd5e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe3b29966122941ef01138d704708d371bdb08211d0325432368b1e00071b37c5 + { + {{{ 0x000e170a3046e64c, 0x0015401a46a49e37, 0x00120add5561c4a6, 0x000fabb4edde9e44, 0x000d86bf9f1a195e, }}}, + {{{ 0x000929126699b2d0, 0x0008ee11a2603de7, 0x00060ac2f5c74c20, 0x00059b192a196808, 0x000c5371b07001e8, }}}, + {{{ 0x0003088d5ef8790b, 0x00038c2126fcb4db, 0x000685bae149e3c3, 0x0000bcd601a4e930, 0x0000eafb03790e52, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1dae750f5e80405130cc6226e3fb02ec6d3992ea1edfeb2cb35b43c54433aec4 + { + {{{ 0x000d55c137480409, 0x000cd041754232bf, 0x000d21b430866906, 0x000b308e40fb9c38, 0x001309acc675a02b, }}}, + {{{ 0x0008805e0f75ae1d, 0x000c64cc59860a27, 0x000a48e5b7b00bee, 0x0005d99675ef8f74, 0x00044ae3344c5435, }}}, + {{{ 0x000289b9bba543ee, 0x0003ab592e28539e, 0x00064d82abcdd83a, 0x0003c78ec172e327, 0x00062d5221b7f946, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x3c7af73a26d485754d14e9fe117baedf3d19f759807006a537209283539af294 + { + {{{ 0x000c299c18d09347, 0x0015914183418a48, 0x000d2a18c721aed3, 0x000ab151ba82976c, 0x0015c0efde4bc753, }}}, + {{{ 0x0005d4263af77a29, 0x000a3fdd2289aeb0, 0x0007dc64f77eb9eb, 0x00081bd28338402c, 0x00094f29a5383921, }}}, + {{{ 0x00017edc25b2d7f5, 0x00037336a6081bee, 0x0007b5318887e5c3, 0x00049f6d491a5be1, 0x0005e72365c7bee0, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x3eb3082f0639937dbe329fdfe559965bfdbd9e1fad3dffacb74973cb5505b2f0 + { + {{{ 0x0013fc074571216c, 0x0013a0d29b2b6ae9, 0x00106478ccdde59b, 0x000d5e4d051bddf8, 0x000f7f1104c47b4d, }}}, + {{{ 0x000b39062f08b33e, 0x0004bbf3e657cfb1, 0x000e7af7f56e5967, 0x000cdbd67f9ed68e, 0x00070b20555cb733, }}}, + {{{ 0x000113c555112c4c, 0x0007535103f9b7ca, 0x000140ed1d9a2108, 0x00002522333bc2af, 0x0000e34398f4a064, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x28194b3e090b931840f6f3730ee1e37d6f5d3973da1732f43e9c37cad6de8a6f + { + {{{ 0x000d22d93ecebdc2, 0x001024f045e0f6ce, 0x00116db63426cf9f, 0x0011b93a1fd30fd6, 0x0015e5405368a360, }}}, + {{{ 0x00030b093e4b1928, 0x0009ce7e7ec80312, 0x000ce575bdf78f83, 0x000e1f7a190bed38, 0x0006f8aded6ca378, }}}, + {{{ 0x0000123dfdb7b29a, 0x0004344356523c68, 0x00079a527921ee5f, 0x00074bfccb3e817e, 0x000780de72ec8d3d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x7227f400f3ea1f67aa418c2a2aeb728f92323797d77fa129a687b532adc6ef1d + { + {{{ 0x000a8545089ae796, 0x0011e38fe9a0c15b, 0x00112046e0e23779, 0x000e721c560aa883, 0x0010eb28bf671927, }}}, + {{{ 0x0007eaf300f42772, 0x000d455188354ce3, 0x0004dcca4a3dcbab, 0x000bd314d0bfebcb, 0x0001defc6ad32b57, }}}, + {{{ 0x0003be1aef5195a7, 0x0006f22f62bdb5eb, 0x00039768b8523049, 0x00043394c8fbfdbd, 0x000467d201bf8dd2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 25 + // compressed: 0xa9e77a56bdf41ebcbd9844d6b24c623fc84e1f2cd26410e4014038baa5c5f9ae + { + {{{ 0x0016919a74ef4f9a, 0x000d9ed4611452bd, 0x000e91ec04ea09ee, 0x000bcbcb2700e983, 0x000f1c43c4f5ba3b, }}}, + {{{ 0x0006f4bd567ae796, 0x00065ac89317b783, 0x00087d3b20fd8932, 0x000800f208326915, 0x000aef9c5a5ba383, }}}, + {{{ 0x00056df6fa9e74cd, 0x00079c95e4cf56df, 0x0007be643bc609e2, 0x000149c12ad9e878, 0x0005a758ca390c5f, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x94dc611d8b91e08c6630819a4636ed8dd3aae8af29a8e6d43fd439f62780738a + { + {{{ 0x000f2710d946246f, 0x000a5aafaa007455, 0x000ad21f28eaa31a, 0x00117671ea005fcf, 0x0012dbae244b3eb5, }}}, + {{{ 0x0008918b1d61dc81, 0x0008d350260cd19b, 0x0007a2ab4e37b4d8, 0x00021fea735414d7, 0x0008a738027f639d, }}}, + {{{ 0x00074a2f57ffe1cc, 0x0001bc3073087301, 0x0007ec57f4019c34, 0x00034e082e1fa524, 0x0002698ca635126a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x0ed93d5e2f703d2e8653d2e418093f9e6aa94d02f63e775e3233fa4a0c4b003c + { + {{{ 0x000d318832b0ba52, 0x000ef24b9ff17ceb, 0x0010a47f30e060c6, 0x00158384540dc8ce, 0x0011fb43dcc49cac, }}}, + {{{ 0x0005702f5e3dd90e, 0x00031c9a4a70c5c7, 0x000936a5aa78fc24, 0x0009992f3b9f7b00, 0x0003c004b0c4afa2, }}}, + {{{ 0x000146ac06f4b82b, 0x0004b500d89e7355, 0x0003351e1c728a12, 0x00010b9f69932fe3, 0x0006b43fd01cd1fd, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf30e763e5842c7b590b90aeeb952dc753f922b07c22714bff0d9f06f2d0b4273 + { + {{{ 0x000f5d4b4697c531, 0x00091be1fff7f8f3, 0x001119e16857f7e0, 0x00138a14345cf5d3, 0x000da68d7105b52d, }}}, + {{{ 0x000f42583e760ef3, 0x00073dc1573216b7, 0x0004ae48fdd7714a, 0x0004f85f8a13e103, 0x00073420b2d6ff0d, }}}, + {{{ 0x0004f6cb9e851e06, 0x000278c4471895e5, 0x0007efcdce3d64e4, 0x00064f6d455c4b4c, 0x0003db5632fea34b, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd5259882b190492e91899a3e87ebeaedf84a704c393df0ee0e2bdf95a47e1959 + { + {{{ 0x000eee2bf75dd9b2, 0x0016c72ceb34be8c, 0x000e79c9cc345ec5, 0x000f898df96898a3, 0x00104321adf49d74, }}}, + {{{ 0x000990b1829825c2, 0x0008e7d3513225c8, 0x0009c12be3b7abad, 0x00058777781e9ca5, 0x000d9197ea495df2, }}}, + {{{ 0x00016019e4e55aae, 0x00074fc5f25d209c, 0x0004566a939ded0d, 0x00066063e716e0b7, 0x00045eafdc1f4d70, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xedb1cccf24460eb695035cbd92c2db59c98104dc1d9da03140d9565deace73bf + { + {{{ 0x000c01858045d718, 0x000c59e5e0ca2d2f, 0x001488b719308be9, 0x000d6f4a0d1b32b3, 0x000da5eebc80362c, }}}, + {{{ 0x00064624cfccb1da, 0x000a57ab8072b6c1, 0x0008120725676f09, 0x000ca018d04e8eed, 0x000bf73ceea5d56c, }}}, + {{{ 0x0007bfd10a4e8dc6, 0x0007c899366736f4, 0x00055ebbeaf95c01, 0x00046db060903f8a, 0x0002605889126621, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x42e576c63c8e814cadccce03932c425e089f12b4cacc07ecb84344b210faed0d + { + {{{ 0x000f04a68360fef1, 0x0013cecc3cde8b3d, 0x00121cd5470f64fd, 0x000eabc18d953987, 0x000d4ad0c2e4e614, }}}, + {{{ 0x00098e3cc676e52f, 0x000a6079d995a98f, 0x00084a7c217908b1, 0x0001dc7603e66559, 0x0008dedfa10b2444, }}}, + {{{ 0x000367d5b82b522a, 0x0000d3f4b83d7dc7, 0x0003067f4cdbc58d, 0x00020452da697937, 0x00062ecb2baa77a9, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x7428b6af36280792a504e179855ecd5f4aa130c6ad01ad5a983f6675503d91e1 + { + {{{ 0x000d795261152b2a, 0x000fa1dbbafa3cbc, 0x0015ad31c52588d4, 0x00145f3a4164685a, 0x000ae59f919a966b, }}}, + {{{ 0x00072836afb62874, 0x0000af3c2094b240, 0x0008c285297f357a, 0x0007cc2d5680d6e2, 0x00061913d5075663, }}}, + {{{ 0x00062d361a3231da, 0x00065284004e01b8, 0x000656533be91d60, 0x0006ae016c00a89f, 0x0003ddbc2a131c05, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 26 + // compressed: 0x14bb9627a257aaf321da079bb7ba3a881c39a03118e24be5f90532d838fbe7de + { + {{{ 0x000c0ff9ce5ec538, 0x000d7185e261b35a, 0x0013e254540e70a8, 0x0011b5814003e3f6, 0x000f8968314ac049, }}}, + {{{ 0x000a57a22796bb14, 0x0006f360fb443e74, 0x000680e47220eaea, 0x000afcf2a5f10c18, 0x0005ee7fb38d831f, }}}, + {{{ 0x0005fdcb41446a8e, 0x0005286926ff2a71, 0x0000f231e296b3f6, 0x000684a357c84693, 0x00061d0633c9bca0, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xdf73fcf8bc28a3adfc37f0a65d6984ee09a9c238dbb47f63dc7b06f82dac235b + { + {{{ 0x000c4935ffdb2553, 0x00112f016d176c6d, 0x000cfbb00f16f5ac, 0x0013fab78d994029, 0x000ee965fd847aeb, }}}, + {{{ 0x000b28bcf8fc73df, 0x000bb4de06ff95b3, 0x000b0aa427ba11a4, 0x0005ee31bfda6d9b, 0x0005b23ac2df8067, }}}, + {{{ 0x0002b953ee80527b, 0x00055f5bcdb1b35a, 0x00043a0b3fa23c66, 0x00076e07388b820a, 0x00079b9bbb9dd95d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x74739f8eae7d99d11608bbcff8a232a00a5f446d12ba6ccd34b8cc0a4611a81b + { + {{{ 0x001355406a3126af, 0x000d0d1918727d74, 0x000ee5ea0b498e0d, 0x0010a3b6063214f1, 0x000d065f158c9fd0, }}}, + {{{ 0x00097dae8e9f7361, 0x000719f76102da32, 0x000d117c2a80ca8b, 0x000c1a66b65d0935, 0x0009ba811460acca, }}}, + {{{ 0x000169fb0c429954, 0x00059aedd9ecee10, 0x00039916eb851802, 0x00057917555cc538, 0x0003981f39e58a4f, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xde6fe66da5df45c83a48402c00a552e132f6b4c763e1d2e9651bbcdc2e45f4b0 + { + {{{ 0x000b8a7559230a6d, 0x00152c1cde8ba31e, 0x000aa4f2d4745a3b, 0x00107e9d42d4a289, 0x00138dc083705acb, }}}, + {{{ 0x0005dfa56de66fcb, 0x0008058809075908, 0x0006d3d8cb854a93, 0x0005b2f4e970b1e3, 0x000b0f4452edcbc1, }}}, + {{{ 0x00052782c5759740, 0x00053f3397d990ad, 0x0003a939c7e84d15, 0x000234c4227e39e0, 0x000632d9a1a593f2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xa7840ced11fd09bf3a699f0d8171f0637987cf572d8c9021a24bf68af27d5a3a + { + {{{ 0x000b6b15b807cb80, 0x0013f78a9e1afed6, 0x0010a59c2c608f1d, 0x00152bdd8ecb81b5, 0x0010b24f48847ed2, }}}, + {{{ 0x0009fd11ed0c8494, 0x000821b3ed2757e0, 0x00073e1de58fc1c5, 0x0005d110c84616ab, 0x000ba5a7df28af64, }}}, + {{{ 0x0002d4be511beac7, 0x0006bda4d99e5b9b, 0x00017e6996914e01, 0x0007b1f0ce7fcf80, 0x00034fcf74475481, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x98aacf78ab1dbba5f2720b1967a2ed5c8e60920a11c90993b074b32f04a31901 + { + {{{ 0x000fe04c789767b7, 0x0011671b28cfb831, 0x000fe57ea2e1c535, 0x0011fbaaef444140, 0x000bd3bdc164dfa4, }}}, + {{{ 0x00031dab78cfaa85, 0x0004e3216e5e54b7, 0x000a49823973b689, 0x000a584984e48884, 0x0008119a3042fb36, }}}, + {{{ 0x0002d89ce8c2177d, 0x0006cd12ba182cf4, 0x00020a8ac19a7697, 0x000539fab2cc72d9, 0x00056c088f1ede20, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x028ff324ac5f1b58bd0ce3bafee90ba9f092cf8a0269219a8f035983a47e8b83 + { + {{{ 0x000d3d1110a86df1, 0x000e416eb65f466c, 0x00141ca6235fce1f, 0x000dc3fc8a99bb10, 0x00109674c6b99107, }}}, + {{{ 0x000b5fac24f38eef, 0x0007d75c6197ab02, 0x000b3e4bc2a42fa7, 0x0009c7cd10b48144, 0x000838b7ea48358f, }}}, + {{{ 0x0006f82199316ff8, 0x00005d54f1a9f3e9, 0x0003bcc5d0bd274a, 0x0005b284b8d2d5ad, 0x0006e5e31025969e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x226206630efb04333fbaac87890635fba361108c772419bd208683d143ad58b0 + { + {{{ 0x000c62f587e593d5, 0x0013d94ba7ce362c, 0x000b30f9b52667b5, 0x000dd45a48e0f009, 0x00108f5114789a8c, }}}, + {{{ 0x0004fb0e6306620f, 0x000930f59747e660, 0x000841868fecd419, 0x0003105e8c923bc5, 0x000b058ad43d1838, }}}, + {{{ 0x00040ffde57663d0, 0x00071445d4c20647, 0x0002653e68170f7c, 0x00064cdee3c55ed6, 0x00026549fa4efe3d, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 27 + // compressed: 0x6e663faf498546dba50e4af104cf7fd7470cbaa4f73ff23d853cce32e1df103a + { + {{{ 0x000d5a461e6bf9b0, 0x000f8eeef4b02e82, 0x0011d34f648c16ce, 0x00107fea2aba5130, 0x0011926e1dc6401c, }}}, + {{{ 0x00068549af3f666e, 0x00009e2941d4bb68, 0x0002e8311f5dff3c, 0x000e429ef91ffbd2, 0x0003a10dfe132ce2, }}}, + {{{ 0x00074e8aea17cea0, 0x0000c743f83fbc0f, 0x0007cb03c4bf5455, 0x00068a8ba9917e98, 0x0001fa1d01d861e5, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xab94dfd100acdc38e90d08d1dd2b712e62e2d5fd3ee9137fe5019aee18edfc73 + { + {{{ 0x001055947d59981f, 0x001346fe2aa4198e, 0x0010164c80791959, 0x000f99ccfb7bba25, 0x000f73563bc6a75b, }}}, + {{{ 0x000cac00d1df94ab, 0x0003ba2101bd271a, 0x000f578988b9c4af, 0x0008f2bf89f49f7d, 0x00073fced18ee99f, }}}, + {{{ 0x0001e90863139cb3, 0x0004f8b407d9a0d6, 0x00058e24ca924f69, 0x0007a246bbe76456, 0x0001f426b701b864, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x5225a191c8357ef1769c5e5753816bb73e729b0d6f4083fa38e4a73f1bbb768b + { + {{{ 0x0011264c41911bdb, 0x000f02f44584bdf7, 0x000c3c511fc68edd, 0x0010482c3aed35f8, 0x0014e1af5271d319, }}}, + {{{ 0x000635c891a1253f, 0x00026aebd38ede2f, 0x00066dc8faddae05, 0x000a1c7d41a03786, 0x0008b76bb1b3fa7d, }}}, + {{{ 0x0000c1f97f92939b, 0x00017a88956dc117, 0x0006ee005ef99dc7, 0x0004aa9172b231cc, 0x0007b6dd61eb772a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc7d201abf9ab3057183b1440dc76fb1681b2cba065be6c86fe6aff9b659bfa53 + { + {{{ 0x0015c1e850f33d7f, 0x0011ec119ab9f6f3, 0x000ff16f6de663e7, 0x000fa7d6cb16dec5, 0x000f03e9bceaf1d1, }}}, + {{{ 0x0008abf9ab01d2c7, 0x0003880287630ae5, 0x000b2eca045beddb, 0x000d7f43365f32cf, 0x00053fa9b659bff5, }}}, + {{{ 0x0004c8e994885455, 0x0004ccb5da9cad82, 0x0003596bc610e975, 0x0007a80c0ddb9f5e, 0x000398d93e5c4c61, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf2e3e7d2607c87c3b18b8230a0aa343b38f19e73e7263e287705c302909c9ce9 + { + {{{ 0x000bd16733e248e0, 0x0010e2b7e14be388, 0x000c2c0ddaf67848, 0x000d89ea1fc6784f, 0x000d3b09b5ddf190, }}}, + {{{ 0x00077c60d2e7e3f2, 0x0004061051763870, 0x00067bc4e0ecd2aa, 0x0002bb941f1373b9, 0x000699c9c9002c30, }}}, + {{{ 0x0006a7235946f1cc, 0x0006b99cbb2fbe60, 0x0006d3a5d6485c62, 0x0004839466e923c0, 0x00051caf30c6fcdd, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc754ac189af97a730fb31cc5dc783390c70ce14c33bc892b9ae9f889c129ae12 + { + {{{ 0x000ba7427674dfe4, 0x000e142f4f7e74c0, 0x000ccc93318c3a14, 0x000ed51bac2b1ee6, 0x0015504aa292383e, }}}, + {{{ 0x000af99a18ac54b4, 0x000b98a39661ee6e, 0x000384331e40cde2, 0x0004cd15c4de19a6, 0x00092ae29c189f8e, }}}, + {{{ 0x0006c0cb1f0d01cf, 0x000187469ef5d533, 0x00027138883747bf, 0x0002f52ae53a90e8, 0x0005fd14fe958eba, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x8ecb93bf5efe423c5f56d43651a8dfbee82042889e85f0e028d12507963fd77d + { + {{{ 0x00142ddf2845ab06, 0x000e214ffd3276b9, 0x00100b8d181a5245, 0x000a68a6d579eb1e, 0x001093ff26e58646, }}}, + {{{ 0x000afe5ebf93cb8e, 0x000226da8acbe787, 0x00010883a2fb7ea1, 0x000894707842cf44, 0x0007dd73f960725c, }}}, + {{{ 0x000524fe68059829, 0x00065b75e47cb621, 0x00015eb0a5d5cc19, 0x00005209b3929d5a, 0x0002f59bcbc86b47, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x01c391b660d541701ee7d7ad3f1b20858555331163e1c216b12808013d5ea5aa + { + {{{ 0x000c7d429917134c, 0x0013eacfa07af06f, 0x0011deab46b46e42, 0x000fa53f3ba46cdd, 0x000d458b42e2e519, }}}, + {{{ 0x0009d560b691c2ee, 0x0007f5bafce3ce07, 0x000ccd561614806c, 0x000c588b6170b187, 0x000aaa55e3d01081, }}}, + {{{ 0x000192e60c07444f, 0x0005ae8843a21daa, 0x0006d721910b1538, 0x0003321a95a6417e, 0x00013e9004a8a768, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 28 + // compressed: 0x7f873b19c9002ebb6b50dce090a8e3ec9f64de36c0b7f3ec1a9ede98080446df + { + {{{ 0x00158845832fcec8, 0x001135cd7f0c6e71, 0x000d3ffbdfe8e359, 0x000a2f195e06e55a, 0x000f3937e8814bcd, }}}, + {{{ 0x000600c9193b876c, 0x000a1c1b8a0d7765, 0x000b79927fb38ea1, 0x00070d7679dbe01a, 0x000df46040898de9, }}}, + {{{ 0x00037116297bf48d, 0x00045a9e0d069720, 0x00025af71aa744ec, 0x00041af0cb8aaba3, 0x0002cf8a4e891d5e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xa26bd0177e48b52c6b1950391c38d224308a9785819c65d7f6a4d691287f6ffa + { + {{{ 0x0013fd8707110f54, 0x00126f8716a92db0, 0x0009cdaa1b753025, 0x000d04be58b52660, 0x000a049bd6e58251, }}}, + {{{ 0x0005487e17d06ba2, 0x000b872a032d6596, 0x00065e28c09348df, 0x000a7b6bb2ce40c2, 0x0007a6f7f2891d69, }}}, + {{{ 0x0001fd8d6a9aef49, 0x0007cb67b7216fa1, 0x00067aff53c3b982, 0x00020ea610da9628, 0x0006011aadfc5459, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x90f8cb02c8d0de63aa6aff0dca98d0fb99edb6b9fd0a4d621e0b3479b718ce69 + { + {{{ 0x000f926dcf95f829, 0x000c2e25120e2beb, 0x00163de96df1fa14, 0x000cf06b50f3f9ca, 0x000efc5cc1b0b62e, }}}, + {{{ 0x0006d0c802cbf87d, 0x000941bfed554c7b, 0x0006dbb667ef4262, 0x00058f3126857edc, 0x000e9ce18b779340, }}}, + {{{ 0x00075528b29879cb, 0x00079a8fd2125a3d, 0x00027c8d4b746ab8, 0x0000f8893f02210c, 0x00015596b3ae5710, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xca24517e1631ff09df45c7d98b15e40be556f57e227d2b2938d1b6af41e2a43a + { + {{{ 0x000f39d23f91797c, 0x000e32fadbb9e8c3, 0x000fc8522bfe0c47, 0x0016ed0983ef5aa8, 0x0010d2237687b5f2, }}}, + {{{ 0x000731167e5124ca, 0x00097b38e8bbe13f, 0x000bd55b942f9055, 0x00089c1495be913e, 0x0003aa4e241afb6c, }}}, + {{{ 0x000138bf2a3305f5, 0x0001f45d24d86598, 0x0005274bad2160fe, 0x0001b6041d58d12a, 0x00032fcaa6e4687a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xdfcc872773a40732f8e313f20819e3174e960df6d7ecb2d5e90b60c236636ff4 + { + {{{ 0x00156e8dc57d9acf, 0x0015b3be17be4f76, 0x000bbf928cf82f49, 0x00152e55600a6f10, 0x0014627e9cefebd4, }}}, + {{{ 0x0007a4732787ccdf, 0x00091e427c7f0640, 0x00083659385f8c63, 0x0005f4ead9766bfa, 0x000746f6336c2600, }}}, + {{{ 0x0002f345ab6c971c, 0x000653286e63e7e9, 0x00051061b78a23ad, 0x00014999acb54501, 0x0007b4917007ed66, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xdda253dd281b34543ffc42df5b9017aaf4f8d24dd992f50f7dd38ce00f62031d + { + {{{ 0x000dfb5cab84b03e, 0x0012513e778285af, 0x000c57383125e041, 0x000ebda3b56e223c, 0x001122ba376f844e, }}}, + {{{ 0x000c1b28dd53a2ca, 0x00037be85f87ea85, 0x00074be3d2a85e41, 0x0009be87fac96ca6, 0x0009d03620fe08cc, }}}, + {{{ 0x000232cda2b4e554, 0x0000422ba30ff840, 0x000751e7667b43f5, 0x0006261755da5f3e, 0x00002c70bf52b68e, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe1728d45bf32e5acb53cb77ce068e75be7bd8bee947dcf56033ab4fee39706eb + { + {{{ 0x000fec4b5d0b2f95, 0x001200e91059544f, 0x000f42057105715c, 0x0012f07022530f5f, 0x00126334f0a409ed, }}}, + {{{ 0x000d32bf458d72e1, 0x000c0f96e796b59b, 0x00022ef79d6f9da2, 0x000501ab67beca77, 0x0006b0697e3feb43, }}}, + {{{ 0x0000f04adf62a3c0, 0x0005e0edb48bb6d9, 0x0007c34aa4fbc003, 0x0007d74e4e5cac24, 0x0001cc37f43441b2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb9aecec9f15666d76a65e518f8155b1c34234c843228e7263868192f776f34ba + { + {{{ 0x000f565a5cc7323c, 0x00101ca0d5244a10, 0x001116b067418711, 0x0010a57d8c55edac, 0x000ec6809c103801, }}}, + {{{ 0x000656f1c9ceaea6, 0x0007031cacad5aec, 0x0001308cd0716c57, 0x000c1c1373941942, 0x000ba346f772f195, }}}, + {{{ 0x00055112e2da6ac8, 0x0006363d0a3dba5a, 0x000319c98ba6f40c, 0x0002e84b03a36ec7, 0x00005911b9f6ef7c, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 29 + // compressed: 0xefea2e51f3ac495349cbc11cd341c1208d689aa9070c1824172d4bc6d1f95ed5 + { + {{{ 0x00139983f5df0ea8, 0x0011ea2589959824, 0x000ece638703cdd4, 0x0016311678898504, 0x000eb3cecf9aa26e, }}}, + {{{ 0x0009acf3512eeadc, 0x000a639839692a68, 0x000669a234830506, 0x00068b920c0603d4, 0x000d55ef9d1c64b2, }}}, + {{{ 0x000770ba3b73bd08, 0x00011475f7e186d4, 0x0000251bc9892bbc, 0x00024eab9bffcc5a, 0x000675f4de133817, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1db3da3bd9f62fa1fe2d659d0fd825078794be9af34f9c01433ccd82b850f460 + { + {{{ 0x001452036b1782d6, 0x00102d95b07681c3, 0x000d901cf99205b0, 0x000a90686e5eecb3, 0x00113d99df70164b, }}}, + {{{ 0x0007f6d93bdab30a, 0x0001f3aca5bfd425, 0x0002fa521c1c9760, 0x00062180ce27f9cd, 0x000e0f450b882cd3, }}}, + {{{ 0x00035ec321e5c0ca, 0x00013ae337f44029, 0x0004008e813f2da7, 0x000640272f8e0c3a, 0x0001c06de9e55eda, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xaa696dff402bd5ffbb4940dc180b533497984da32f5c4a5e2dba327d8e6f0978 + { + {{{ 0x000f7ad6a33ec4bc, 0x000f17c5dc11d320, 0x0014a114559823e3, 0x001306ce50a1e2af, 0x0014cf38a1fec2d9, }}}, + {{{ 0x00052b40ff6d69aa, 0x000b1b8809377ffa, 0x000536625cd14c2b, 0x000516af252e17d1, 0x00078096f8e7d32b, }}}, + {{{ 0x0002aa650dfa5ce7, 0x00054916a8f19415, 0x00000dc96fe71278, 0x00055f2784e63eb8, 0x000373cad3a26091, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xadbbdd89fba8bef1cbaeae61bc2ccb3b9d8d9b1fbba7588f86a61251da7e5421 + { + {{{ 0x000c634d82c9f556, 0x000c249268a6d651, 0x000e336d687f2ff6, 0x000cfe4f4e26d99f, 0x0010040f3d945440, }}}, + {{{ 0x0006a8fb89ddbb9a, 0x00078c35d5d97e37, 0x00066e3674ef2cb2, 0x00034347ac53dd8f, 0x000a1547eda5112a, }}}, + {{{ 0x0005e939fd5986d3, 0x00012a2147019bdf, 0x0004c466e7d09cb2, 0x0006fa5b95d203dd, 0x00063550a334a254, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x497b54724558ba9be008c4e2fac605f38df134c769fae8607a767daaaf2ba9b9 + { + {{{ 0x000fd6edb569cf24, 0x000e0194a5dc2c9f, 0x000daf59745e10a5, 0x000fa8f53e004874, 0x000beea62c7daf77, }}}, + {{{ 0x0002584572547b36, 0x00075c58811c1377, 0x000cd3c637cc171b, 0x00033d30747d34e2, 0x000b9a92bafaa7d7, }}}, + {{{ 0x0004c713e693274e, 0x0006ed1b7a6eb3a4, 0x00062ace697d8e15, 0x000266b8292ab075, 0x00068436a0665c9c, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x7c1020e817d3561e65e90a84446826c57afc0f32c6a1e0c1721461919c6673d3 + { + {{{ 0x001235e8202f3f01, 0x000c4c9f2eb6177e, 0x000e30905b1d7002, 0x0014fcc8d274ead0, 0x00117b6e7f68ab76, }}}, + {{{ 0x0006d317e8201069, 0x000890815d2ca3ca, 0x00083ff1eb1499a0, 0x000a3960f050e318, 0x000d373669c91610, }}}, + {{{ 0x000014ab9a0e5257, 0x00009939567f8ba5, 0x0004b47b2a423c82, 0x000688d7e57ac42d, 0x0001cb4b5a678f87, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe707a0a262aa746bb1c771f0b0e011f323e20b0038e40757ac6eef822dfdc02d + { + {{{ 0x000cc06b394afc46, 0x0014931b4bf636cb, 0x00172b60d0322376, 0x000a5127c6818b23, 0x001330bca78de742, }}}, + {{{ 0x000caa62a2a007d4, 0x00061e0e38f62d6d, 0x00082f888fcc4782, 0x0007562b83f21bff, 0x000adc0fd2d82ef6, }}}, + {{{ 0x0006ff841119744e, 0x0002c560e8e49305, 0x0007254fefe5a57a, 0x00067ae2c560a7df, 0x0003c31be1b369f1, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x7242cbf993bc68c198dbcec71f71b8ae7a8dac34aa520e7fbb557d7e09c1ce41 + { + {{{ 0x0014864d08948ac8, 0x000dd237438df61c, 0x0012b285601f7066, 0x00125dbcbae6d751, 0x001330b61134262b, }}}, + {{{ 0x0008bc93f9cb4272, 0x0003f8f9db73182c, 0x000ab235eabae1c4, 0x0002ddbf87295519, 0x00041cec1097e7d5, }}}, + {{{ 0x000619d7a26d808a, 0x0003c3b3c2adbef2, 0x0006877c9eec7f52, 0x0003beb9ebe1b66d, 0x00026b44cd91f287, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 30 + // compressed: 0x8303736293f2b7e12c8acaebff79524b1413d4bf8a77fcda0f61729c1410ebfd + { + {{{ 0x001048478f38744f, 0x00169397d9678a3c, 0x000e7c8156c976f1, 0x000aeb4d5589226b, 0x0012c709e6c1c109, }}}, + {{{ 0x0007f29362730383, 0x0007fd7951459c36, 0x0007504c512d49e7, 0x000887ed7e3bc55f, 0x0007deb10149c725, }}}, + {{{ 0x0002af6a8766ee7a, 0x00008aaa79a1d96c, 0x00042f92d59b2fb0, 0x0001752c40009c07, 0x00008e68e9ff62ce, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xf9f2b80ad5092d2fdf2359c58d21b9acb96c767326348f4af519f738d73bb1cc + { + {{{ 0x000d500a4bc13087, 0x001127a17a938694, 0x00102a26fa34e36b, 0x000d84d12e1ecc26, 0x0012f1f3f87eeba2, }}}, + {{{ 0x000d09d50ab8f2f9, 0x0009b8ab247be5e4, 0x000dd9b2e6b2e485, 0x000cfaa5479a1338, 0x0004cb13bd738f70, }}}, + {{{ 0x00048c75e515b64a, 0x00075b6952071ef0, 0x0005d46d42965406, 0x0007746106989f9f, 0x00019a1e353c0ae2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xbdbd96d5cd7221b440fcee984345e093b50941b44753b19f34ae660299d36bf3 + { + {{{ 0x00147560bafa059d, 0x001418dcabcc2fa1, 0x000b5991cecf8680, 0x000a4371a94b8c5f, 0x00141546b11c20c2, }}}, + {{{ 0x000972cdd596bdbd, 0x0008731ddf881683, 0x00090426d64f8114, 0x00071a4fd8a9a3d9, 0x000736bd3990266a, }}}, + {{{ 0x00032d509334b3b4, 0x00016c102cae70aa, 0x0001720dd51bf445, 0x0005ae662faf9821, 0x000412295a2b87fa, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xc6ea93e26152652edbac332103925a846b990079cb75094680dd5a198dbb6087 + { + {{{ 0x00119b88f57ed6c3, 0x000ccdbf1904a337, 0x000c2b49cd4e4f2b, 0x000f1a2e771909d8, 0x00114e153ebb52d1, }}}, + {{{ 0x000d5261e293eab3, 0x00086426759b65cb, 0x00040265ae116a47, 0x0006c02304bae5bc, 0x0008760bb8d195ad, }}}, + {{{ 0x00061a17cde6818a, 0x00053dad34108827, 0x00032b32c55c55b6, 0x0002f9165f9347a3, 0x0006b34be9bc33ac, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xd3f271656569fc117a730e5345e8c9c63550fed4a2e73ae30bd36d2eb6c7b901 + { + {{{ 0x000f2f643a78c08c, 0x0013de45c04f9e7a, 0x000f06d68d30fa5a, 0x000e96f63e8e2f23, 0x0012012c18f0922c, }}}, + {{{ 0x000c69656571f2c0, 0x0008aa61ce6f423e, 0x000bf940d71b27a0, 0x000985f19d73d169, 0x00081b9c7b62e6dc, }}}, + {{{ 0x000355e55ac89d29, 0x0003e8b414ec7101, 0x00039db07c520c90, 0x0006f41e9b77efe1, 0x00008af5b784e4ba, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x4b2ccc89d21473e28d1787a211bde44bce6433fad628d5186e82d9afd5c123e4 + { + {{{ 0x000c99dc881f250d, 0x00134ef26476c505, 0x000cd107d2741495, 0x001346c4bd6efdb2, 0x00132b79d711639f, }}}, + {{{ 0x000b14d289cc2c4b, 0x000a3450e2f1bc4d, 0x0008cd93392f92f3, 0x0009370c6a946b7c, 0x0006423c1d5afd97, }}}, + {{{ 0x0005f8d9edfcb36a, 0x0001e6e8dcbf3990, 0x0007974f348af30a, 0x0006e6724ef19c7c, 0x000480a5efbc13e2, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1f22ce42e44c61b62839054ccc9d196e03be1cdca4b43f66068e1c69471db3a4 + { + {{{ 0x0009e70b0162205e, 0x0009f163b5f8a169, 0x00156aaf341ad416, 0x000f989635d830f5, 0x000c7aa27600cb7a, }}}, + {{{ 0x00094ce442ce220c, 0x00098980a72516cb, 0x000872f80db86676, 0x000703331fda526d, 0x000a4b31d47691c8, }}}, + {{{ 0x00041eedc015f8c3, 0x0007cf8d27ef854a, 0x000289e3584693f9, 0x00004a7857b309a7, 0x000545b585d14dda, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xe121b3e3d0e40462951eff287a63aa3b9ebd995bfdcf0c0b71d0c8643edc22cd + { + {{{ 0x000f275ea0d439e9, 0x000e81137dd7ccf6, 0x0009e79cbab79a37, 0x000a2a214489a669, 0x0010f62f9c332ba4, }}}, + {{{ 0x0004e4d0e3b321e1, 0x0007451fe3d2ac40, 0x000666f678eea98d, 0x000838858667fead, 0x0004d22dc3e64c8c, }}}, + {{{ 0x00046589d63b5f39, 0x0007eaf979ec3f96, 0x0004ebe81572b9a8, 0x00021b7f5d61694a, 0x0001c0fa01a36371, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, + { // 31 + // compressed: 0x506a938c0e2b0869b6c5dac135a0c9f934b6dfc4543eb76f40c12b1d9b4105c0 + { + {{{ 0x001604b622943dd9, 0x0009c899f6741a56, 0x000e0219e2f232fa, 0x000b5fae92a7f9ca, 0x0010fa3614f3b1c9, }}}, + {{{ 0x00082b0e8c936a3d, 0x0006b83b58b6cd20, 0x00037ed8d3e72680, 0x0008a037db9f2a62, 0x000c005419b1d2bb, }}}, + {{{ 0x0003febdb9be82f0, 0x0005e74895921400, 0x000553ea38822706, 0x0005a17c24cfc88c, 0x0001fba218aef40a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x94017b3e04573e4f7fafda08ee3e1da8f1dedc99abc639c8d56177ff135d536c + { + {{{ 0x000c9448fac8f518, 0x000b4f74c6e83569, 0x0010ad780607dba1, 0x000f213a7eb63eb4, 0x001392e3acaa8c85, }}}, + {{{ 0x000657043e7b0194, 0x0005c11b55efe9e7, 0x0007737bc6a074fb, 0x0008eae41ce355cc, 0x0006c535d13ff775, }}}, + {{{ 0x000534e93e8a35af, 0x00008b10fd02c997, 0x00026ac2acb81e05, 0x00009d8c98ce3b79, 0x00025e17fe4d50ac, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xa721f176f57f5f91e387cd2f27324ac326e51b4dde2fbacc9b8969898f82ba6b + { + {{{ 0x00109bd71e04f663, 0x00125ac841f2a143, 0x0011a47eac82386f, 0x0011a8a8c36c5818, 0x000a55751442a9f9, }}}, + {{{ 0x00077ff576f121a7, 0x000ce5f9b0fc722b, 0x00046f949b0d28c7, 0x000ccde65d17ef26, 0x0006bba828f89697, }}}, + {{{ 0x0001bc6690fe3901, 0x000314132f5abc5a, 0x000611835132d528, 0x0005f24b8eb48a57, 0x000559d504f7f6b7, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xfd66d2f6e791489c1b7807039ba144073be261601d8f38880ed54b35a3a63e92 + { + {{{ 0x00138378b3eb54af, 0x000cd4aaa78f94ec, 0x000ca002e875a74c, 0x00110b851367b17b, 0x00101ab12d5807e1, }}}, + {{{ 0x000891e7f6d266fd, 0x00036060ef037388, 0x00098788ec1d1286, 0x000287441c478eaf, 0x000123ea6a3354bd, }}}, + {{{ 0x0005189041e32d96, 0x00005b062b090231, 0x0000c91766e7b78f, 0x0000aa0f55a138ec, 0x0004a3961e2c918a, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x1e3f23f344d6270316f0fc340e269a4979b9daf216a7b5831f11d49badeeac68 + { + {{{ 0x000c3be0f8e6bb7a, 0x000e8fdffc614e3a, 0x000ce91dab5b3bdf, 0x000bb1d4c9212fef, 0x0012cd6bce3fb1da, }}}, + {{{ 0x0007d644f3233f1e, 0x0009c69f9e02c064, 0x00036ae5e5266897, 0x00088fc1dad38b79, 0x00068aceead9bd40, }}}, + {{{ 0x0004c90ef3d7c210, 0x000496f5a0818716, 0x00079cf88cc239b8, 0x0002cb9c306cf8db, 0x000595760d5b508f, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0x902702fdebcb2a88605711c40533af89f473347de392f4652b5a5154dfc5b2ac + { + {{{ 0x0011bfe104aa6384, 0x00091494ff996c23, 0x000e4251623e57ff, 0x0010d49fc5e044bd, 0x000f09fa43edcb27, }}}, + {{{ 0x0002cbebfd022790, 0x0008b8822aec1105, 0x000cd1cfd226bccb, 0x000515b2fa4971bd, 0x0002cb2c5df54515, }}}, + {{{ 0x00025d8c63fd2aca, 0x0004c5cd29dffd61, 0x00032ec0eb48af05, 0x00018f9391f9b77c, 0x00070f029ecf0c81, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xb9b0105eaaaf6a2aa91a04ef70a3f0781fd63aaa77fb3e77e1d94ba7a2a5ecc4 + { + {{{ 0x001307b32eed3e0d, 0x000e748ab03ce8c0, 0x00157c0d9ab810bb, 0x000c2c64a224e98a, 0x0010b7d5d8a6c313, }}}, + {{{ 0x000aafaa5e10b0b9, 0x00061de08355254c, 0x0008eb587de3c28d, 0x0004f0bb9f7dbbd4, 0x00044eca5a2a74bd, }}}, + {{{ 0x000448327b95d543, 0x0000146681e3a4ba, 0x00038714adc34e0c, 0x0004f26f0e298e30, 0x000272224512c7de, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + // compressed: 0xfc75a9428abb7bbf58a3ad9677395c8c48aaedcd6fc77fe2a620bcf6d75f7319 + { + {{{ 0x000c92af49c53408, 0x000a365cdf5a0356, 0x00132138a7ffbb5f, 0x000aa1f7d14646fc, 0x00111b5df18a44cb, }}}, + {{{ 0x000bbb8a42a975fc, 0x0006f2d5b46b17ee, 0x0007b6a9223170e5, 0x000853713fe3b7e6, 0x00019735fd7f6bc1, }}}, + {{{ 0x000390d042c84266, 0x0001efe32a8fdc75, 0x0006925ee7ae1238, 0x0004af9281d0e832, 0x0000fef911191df8, }}}, + {{{ 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, }}}, + }, + }, +}; + diff --git a/src/ballet/ed25519/table/fd_ed25519_ge_bi_precomp.c b/src/ballet/ed25519/table/fd_ed25519_ge_bi_precomp.c deleted file mode 100644 index f307d62c3c..0000000000 --- a/src/ballet/ed25519/table/fd_ed25519_ge_bi_precomp.c +++ /dev/null @@ -1,48 +0,0 @@ -/* DO NOT INCLUDE DIRECTLY */ - -/* This file was adapted from the Bi table in OpenSSL 1.1.1r - crypto/ec/curve25519.c */ - -static const fd_ed25519_ge_precomp_t bi_precomp[8][1] = { - {{ /* Bi[0] */ - {{{ 25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605 }}}, - {{{ -12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378 }}}, - {{{ -8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546 }}}, - }}, - {{ /* Bi[1] */ - {{{ 15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024 }}}, - {{{ 16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574 }}}, - {{{ 30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357 }}}, - }}, - {{ /* Bi[2] */ - {{{ 10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380 }}}, - {{{ 4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306 }}}, - {{{ 19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942 }}}, - }}, - {{ /* Bi[3] */ - {{{ 5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766 }}}, - {{{ -30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701 }}}, - {{{ 28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300 }}}, - }}, - {{ /* Bi[4] */ - {{{ -22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877 }}}, - {{{ -6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951 }}}, - {{{ 4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784 }}}, - }}, - {{ /* Bi[5] */ - {{{ -25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436 }}}, - {{{ 25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918 }}}, - {{{ 23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877 }}}, - }}, - {{ /* Bi[6] */ - {{{ -33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800 }}}, - {{{ -25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305 }}}, - {{{ -13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300 }}}, - }}, - {{ /* Bi[7] */ - {{{ -3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876 }}}, - {{{ -24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619 }}}, - {{{ -3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683 }}}, - }}, -}; - diff --git a/src/ballet/ed25519/table/fd_ed25519_ge_bi_precomp_avx.c b/src/ballet/ed25519/table/fd_ed25519_ge_bi_precomp_avx.c deleted file mode 100644 index fce143cd1d..0000000000 --- a/src/ballet/ed25519/table/fd_ed25519_ge_bi_precomp_avx.c +++ /dev/null @@ -1,112 +0,0 @@ -/* This is just the regular table stored in a swizzled form. It can be - generated from the regular table via: - - #include - - ... snip ... - - # include "table/fd_ed25519_ge_bi_precomp.c" - - long l[40] __attribute__((aligned(64))); - printf( "static long const bi_precomp[8][40] __attribute__((aligned(64))) = {\n" ); - for( int i=0; i<8; i++ ) { - fd_ed25519_ge_precomp_t const * q = bi_precomp[ i ]; - FE_AVX_SWIZZLE_IN4( vu, one, q->yminusx, q->yplusx, q->xy2d ); - FE_AVX_ST( l, vu ); - long const * p = l; - printf( " {\n" ); - for( int j=0; j<10; j++ ) { - printf( " " ); - for( int k=0; k<4; k++ ) printf( "%11liL,", *(p++) ); - printf( "\n" ); - } - printf( " },\n" ); - - ... snip ... - - (Yes, the signed ints in the original should not be sign extended when - forming this representation.) */ - -static long const bi_precomp[8][40] __attribute__((aligned(64))) = { - { 1L, 4282421585L, 25967493L, 4286229115L, - 0L, 934262L, 4280611261L, 4489570L, - 0L, 4292244386L, 29566456L, 9688441L, - 0L, 3049990L, 3660896L, 4280182102L, - 0L, 4294239868L, 4282272951L, 10184609L, - 0L, 9406986L, 4014787L, 4282603916L, - 0L, 12720692L, 27544626L, 29287919L, - 0L, 5043384L, 4283213025L, 11864899L, - 0L, 19500929L, 4288888140L, 4270452934L, - 0L, 4279497918L, 2047605L, 4290528750L }, - { 1L, 16568933L, 15636291L, 30464156L, - 0L, 4717097L, 4285278739L, 4288991171L, - 0L, 4283411148L, 24204773L, 4283187862L, - 0L, 4293864974L, 4287054898L, 4279296431L, - 0L, 15682896L, 616977L, 23220365L, - 0L, 4283160253L, 4278282034L, 15915852L, - 0L, 16354577L, 27787600L, 7512774L, - 0L, 4283191334L, 4280195107L, 10017326L, - 0L, 7689662L, 28944400L, 4277218203L, - 0L, 11199574L, 4293417272L, 4285046939L }, - { 1L, 4708026L, 10861363L, 19563160L, - 0L, 6336745L, 11473154L, 16186464L, - 0L, 20377586L, 27284546L, 4265580439L, - 0L, 9066809L, 1981175L, 4097519L, - 0L, 4283695187L, 4264902947L, 10237984L, - 0L, 6594696L, 12577861L, 4290619181L, - 0L, 4269313628L, 32867885L, 28542350L, - 0L, 12483688L, 14515107L, 13850243L, - 0L, 4282298805L, 4279528992L, 4271289275L, - 0L, 5581306L, 10819380L, 4279151354L }, - { 1L, 4264698289L, 5153746L, 28881845L, - 0L, 4291503787L, 9909285L, 14381568L, - 0L, 7665486L, 1723747L, 9657904L, - 0L, 10083793L, 4292189422L, 3680757L, - 0L, 28475525L, 30523605L, 4274785661L, - 0L, 1649722L, 5516873L, 7843316L, - 0L, 20654025L, 19480852L, 4263566636L, - 0L, 16520125L, 5230134L, 1370708L, - 0L, 30598449L, 4271014857L, 29794553L, - 0L, 7715701L, 4279791530L, 4293557996L }, - { 1L, 4288512119L, 4272448303L, 4566830L, - 0L, 4287127425L, 4288275114L, 4282003428L, - 0L, 3374702L, 14201702L, 4265992407L, - 0L, 4290226434L, 4286221794L, 4282726607L, - 0L, 4267868679L, 4271456890L, 4287364624L, - 0L, 4284395589L, 8844726L, 4292136727L, - 0L, 31655028L, 18474211L, 4286452938L, - 0L, 4287754969L, 4293605846L, 4284536159L, - 0L, 18853322L, 4281904600L, 2207753L, - 0L, 4280746345L, 13821877L, 4291757512L }, - { 1L, 25576264L, 4269812465L, 23103977L, - 0L, 4292264082L, 4290781475L, 13316479L, - 0L, 7349804L, 29681144L, 9739013L, - 0L, 4283152452L, 7868801L, 4278817815L, - 0L, 16472782L, 4288112635L, 817875L, - 0L, 9300885L, 4285543431L, 4279928354L, - 0L, 3844789L, 4282529932L, 8965339L, - 0L, 15725684L, 4294304296L, 4280879238L, - 0L, 171356L, 4263855833L, 4264252384L, - 0L, 6466918L, 4278834860L, 16193877L }, - { 1L, 4269784979L, 4261445485L, 4281246603L, - 0L, 4290793165L, 3180713L, 2639453L, - 0L, 32336398L, 4292573166L, 4270729836L, - 0L, 5036987L, 14003687L, 4287560815L, - 0L, 4273730479L, 4278063822L, 9494427L, - 0L, 11360617L, 4278696456L, 4289193267L, - 0L, 22616405L, 17238398L, 4288412745L, - 0L, 9761698L, 4729455L, 4279006302L, - 0L, 4275140098L, 4276892783L, 4292518040L, - 0L, 630305L, 9256800L, 4280675996L }, - { 1L, 4270640926L, 4291816115L, 4291867945L, - 0L, 15950226L, 4289921221L, 10324967L, - 0L, 4263166081L, 9282714L, 4292725683L, - 0L, 4280374473L, 6866145L, 7453183L, - 0L, 4283304559L, 4263060234L, 4289520317L, - 0L, 4289876371L, 4294104273L, 4292231793L, - 0L, 1573892L, 4276026721L, 4281155274L, - 0L, 4292341409L, 15033784L, 4278730854L, - 0L, 2198790L, 25105118L, 4262506062L, - 0L, 4279162677L, 4287072420L, 4282676613L } -}; - diff --git a/src/ballet/ed25519/table/fd_ed25519_ge_k25519_precomp.c b/src/ballet/ed25519/table/fd_ed25519_ge_k25519_precomp.c deleted file mode 100644 index 997a3f8644..0000000000 --- a/src/ballet/ed25519/table/fd_ed25519_ge_k25519_precomp.c +++ /dev/null @@ -1,1354 +0,0 @@ -/* DO NOT INCLUDE DIRECTLY */ - -/* This file was adapted from the k25519Precomp table in OpenSSL 1.1.1r - crypto/ec/curve25519.c */ - -/* k25519_precomp[i][j] = (j+1)*256^i*B */ - -static fd_ed25519_ge_precomp_t const k25519_precomp[32][8][1] = { - { - {{ /* k25519_precomp[ 0][ 0] */ - {{{ 25967493,-14356035, 29566456, 3660896,-12694345, 4014787, 27544626,-11754271, -6079156, 2047605, }}}, - {{{ -12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929,-15469378, }}}, - {{{ -8738181, 4489570, 9688441,-14785194, 10184609,-12363380, 29287919, 11864899,-24514362, -4438546, }}}, - }}, - {{ /* k25519_precomp[ 0][ 1] */ - {{{ -12815894,-12976347,-21581243, 11784320,-25355658, -2750717,-11717903, -3814571, -358445,-10211303, }}}, - {{{ -21703237, 6903825, 27185491, 6451973,-29577724, -9554005,-15616551, 11189268,-26829678, -5319081, }}}, - {{{ 26966642, 11152617, 32442495, 15396054, 14353839,-12752335, -3128826, -9541118,-15472047, -4166697, }}}, - }}, - {{ /* k25519_precomp[ 0][ 2] */ - {{{ 15636291, -9688557, 24204773, -7912398, 616977,-16685262, 27787600,-14772189, 28944400, -1550024, }}}, - {{{ 16568933, 4717097,-11556148, -1102322, 15682896,-11807043, 16354577,-11775962, 7689662, 11199574, }}}, - {{{ 30464156, -5976125,-11779434,-15670865, 23220365, 15915852, 7512774, 10017326,-17749093, -9920357, }}}, - }}, - {{ /* k25519_precomp[ 0][ 3] */ - {{{ -17036878, 13921892, 10945806, -6033431, 27105052,-16084379,-28926210, 15006023, 3284568, -6276540, }}}, - {{{ 23599295, -8306047,-11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397, }}}, - {{{ 7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325, }}}, - }}, - {{ /* k25519_precomp[ 0][ 4] */ - {{{ 10861363, 11473154, 27284546, 1981175,-30064349, 12577861, 32867885, 14515107,-15438304, 10819380, }}}, - {{{ 4708026, 6336745, 20377586, 9066809,-11272109, 6594696,-25653668, 12483688,-12668491, 5581306, }}}, - {{{ 19563160, 16186464,-29386857, 4097519, 10237984, -4348115, 28542350, 13850243,-23678021,-15815942, }}}, - }}, - {{ /* k25519_precomp[ 0][ 5] */ - {{{ -15371964,-12862754, 32573250, 4720197,-26436522, 5875511,-19188627,-15224819, -9818940,-12085777, }}}, - {{{ -8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240,-15689887, 1762328, 14866737, }}}, - {{{ -18199695,-15951423,-10473290, 1707278,-17185920, 3916101,-28236412, 3959421, 27914454, 4383652, }}}, - }}, - {{ /* k25519_precomp[ 0][ 6] */ - {{{ 5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134,-23952439,-15175766, }}}, - {{{ -30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701, }}}, - {{{ 28881845, 14381568, 9657904, 3680757,-20181635, 7843316,-31400660, 1370708, 29794553, -1409300, }}}, - }}, - {{ /* k25519_precomp[ 0][ 7] */ - {{{ 14499471, -2729599,-33191113, -4254652, 28494862, 14271267, 30290735, 10876454,-33154098, 2381726, }}}, - {{{ -7195431, -2655363,-14730155, 462251,-27724326, 3941372, -6236617, 3696005,-32300832, 15351955, }}}, - {{{ 27431194, 8222322, 16448760, -3907995,-18707002, 11938355,-32961401, -2970515, 29551813, 10109425, }}}, - }}, - }, - { - {{ /* k25519_precomp[ 1][ 0] */ - {{{ -13657040,-13155431,-31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171, }}}, - {{{ 27939166, 14210322, 4677035, 16277044,-22964462,-12398139,-32508754, 12005538,-17810127, 12803510, }}}, - {{{ 17228999,-15661624, -1233527, 300140, -1224870,-11714777, 30364213, -9038194, 18016357, 4397660, }}}, - }}, - {{ /* k25519_precomp[ 1][ 1] */ - {{{ -10958843, -7690207, 4776341,-14954238, 27850028,-15602212,-26619106, 14544525,-17477504, 982639, }}}, - {{{ 29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128,-21047696, 9934963, }}}, - {{{ 5793303, 16271923,-24131614,-10116404, 29188560, 1206517,-14747930, 4559895,-30123922,-10897950, }}}, - }}, - {{ /* k25519_precomp[ 1][ 2] */ - {{{ -27643952,-11493006, 16282657,-11036493, 28414021,-15012264, 24191034, 4541697,-13338309, 5500568, }}}, - {{{ 12650548, -1497113, 9052871, 11355358,-17680037, -8400164,-17430592, 12264343, 10874051, 13524335, }}}, - {{{ 25556948, -3045990, 714651, 2510400, 23394682,-10415330, 33119038, 5080568,-22528059, 5376628, }}}, - }}, - {{ /* k25519_precomp[ 1][ 3] */ - {{{ -26088264, -4011052,-17013699, -3537628, -6726793, 1920897,-22321305, -9447443, 4535768, 1569007, }}}, - {{{ -2255422, 14606630,-21692440, -8039818, 28430649, 8775819,-30494562, 3044290, 31848280, 12543772, }}}, - {{{ -22028579, 2943893,-31857513, 6777306, 13784462, -4292203,-27377195, -2062731, 7718482, 14474653, }}}, - }}, - {{ /* k25519_precomp[ 1][ 4] */ - {{{ 2385315, 2454213,-22631320, 46603, -4437935,-15680415, 656965, -7236665, 24316168, -5253567, }}}, - {{{ 13741529, 10911568,-33233417, -8603737,-20177830, -1033297, 33040651,-13424532,-20729456, 8321686, }}}, - {{{ 21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965,-11874838, -9984458, 608372, }}}, - }}, - {{ /* k25519_precomp[ 1][ 5] */ - {{{ -13672732,-15087586,-10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887, }}}, - {{{ -23244140, -294205,-11744728, 14712571,-29465699, -2029617, 12797024, -6440308, -1633405, 16678954, }}}, - {{{ -29500620, 4770662,-16054387, 14001338, 7830047, 9564805, -1508144, -4795045,-17169265, 4904953, }}}, - }}, - {{ /* k25519_precomp[ 1][ 6] */ - {{{ 24059557, 14617003, 19037157,-15039908, 19766093,-14906429, 5169211, 16191880, 2128236, -4326833, }}}, - {{{ -16981152, 4124966, -8540610,-10653797, 30336522,-14105247,-29806336, 916033, -6882542, -2986532, }}}, - {{{ -22630907, 12419372, -7134229, -7473371,-16478904, 16739175, 285431, 2763829, 15736322, 4143876, }}}, - }}, - {{ /* k25519_precomp[ 1][ 7] */ - {{{ 2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801,-14594663, 23527084,-16458268, }}}, - {{{ 33431127,-11130478,-17838966,-15626900, 8909499, 8376530,-32625340, 4087881,-15188911,-14416214, }}}, - {{{ 1767683, 7197987,-13205226, -2022635,-13091350, 448826, 5799055, 4357868, -4774191,-16323038, }}}, - }}, - }, - { - {{ /* k25519_precomp[ 2][ 0] */ - {{{ 6721966, 13833823,-23523388, -1551314, 26354293,-11863321, 23365147, -3949732, 7390890, 2759800, }}}, - {{{ 4409041, 2052381, 23373853, 10530217, 7676779,-12885954, 21302353, -4264057, 1244380,-12919645, }}}, - {{{ -4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664, }}}, - }}, - {{ /* k25519_precomp[ 2][ 1] */ - {{{ 1996075, 10375649, 14346367, 13311202, -6874135,-16438411,-13693198, 398369,-30606455, -712933, }}}, - {{{ -25307465, 9795880, -2777414, 14878809,-33531835, 14780363, 13348553, 12076947,-30836462, 5113182, }}}, - {{{ -17770784, 11797796, 31950843, 13929123,-25888302, 12288344,-30341101, -7336386, 13847711, 5387222, }}}, - }}, - {{ /* k25519_precomp[ 2][ 2] */ - {{{ -18582163, -3416217, 17824843, -2340966, 22744343,-10442611, 8763061, 3617786,-19600662, 10370991, }}}, - {{{ 20246567,-14369378, 22358229, -543712, 18507283,-10413996, 14554437, -8746092, 32232924, 16763880, }}}, - {{{ 9648505, 10094563, 26416693, 14745928,-30374318, -6472621, 11094161, 15689506, 3140038,-16510092, }}}, - }}, - {{ /* k25519_precomp[ 2][ 3] */ - {{{ -16160072, 5472695, 31895588, 4744994, 8823515, 10365685,-27224800, 9448613,-28774454, 366295, }}}, - {{{ 19153450, 11523972,-11096490, -6503142,-24647631, 5420647, 28344573, 8041113, 719605, 11671788, }}}, - {{{ 8678025, 2694440, -6808014, 2517372, 4964326, 11152271,-15432916,-15266516, 27000813,-10195553, }}}, - }}, - {{ /* k25519_precomp[ 2][ 4] */ - {{{ -15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977,-14521026, }}}, - {{{ 11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347, }}}, - {{{ -18115838, 8653647, 17578566, -6092619, -8025777,-16012763,-11144307, -2627664, -5990708,-14166033, }}}, - }}, - {{ /* k25519_precomp[ 2][ 5] */ - {{{ -23308498,-10968312, 15213228,-10081214,-30853605,-11050004, 27884329, 2847284, 2655861, 1738395, }}}, - {{{ -27537433,-14253021,-25336301, -8002780, -9370762, 8129821, 21651608, -3239336,-19087449,-11005278, }}}, - {{{ 1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890, }}}, - }}, - {{ /* k25519_precomp[ 2][ 6] */ - {{{ 32173121,-16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995, }}}, - {{{ -30552961, -2228401,-15578829,-10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596, }}}, - {{{ -11614875, 13323618, 32618793, 8175907,-15230173, 12596687, 27491595, -4612359, 3179268, -9478891, }}}, - }}, - {{ /* k25519_precomp[ 2][ 7] */ - {{{ 31947069,-14366651, -4640583,-15339921,-15125977, -6039709,-14756777,-16411740, 19072640, -9511060, }}}, - {{{ 11685058, 11822410, 3158003,-13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608, }}}, - {{{ -20290863, 8198642,-27410132, 11602123, 1290375, -2799760, 28326862, 1721092,-19558642, -3131606, }}}, - }}, - }, - { - {{ /* k25519_precomp[ 3][ 0] */ - {{{ 7881532, 10687937, 7578723, 7738378,-18951012, -2553952, 21820786, 8076149,-27868496, 11538389, }}}, - {{{ -19935666, 3899861, 18283497, -6801568,-15728660,-11249211, 8754525, 7446702, -5676054, 5797016, }}}, - {{{ -11295600, -3793569,-15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341, }}}, - }}, - {{ /* k25519_precomp[ 3][ 1] */ - {{{ -22472376,-11568741,-27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505, }}}, - {{{ 14352098, -3419715,-18942044, 10822655, 32750596, 4699007, -70363, 15776356,-28886779,-11974553, }}}, - {{{ -28241164, -8072475, -4978962, -5315317, 29416931, 1847569,-20654173,-16484855, 4714547, -9600655, }}}, - }}, - {{ /* k25519_precomp[ 3][ 2] */ - {{{ 15200332, 8368572, 19679101, 15970074,-31872674, 1959451, 24611599, -4543832,-11745876, 12340220, }}}, - {{{ 12876937,-10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631, }}}, - {{{ -4143277,-12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074,-28210621, -8814099, }}}, - }}, - {{ /* k25519_precomp[ 3][ 3] */ - {{{ 26660628,-15677655, 8393734, 358047, -7401291, 992988,-23904233, 858697, 20571223, 8420556, }}}, - {{{ 14620715, 13067227,-15447274, 8264467, 14106269, 15080814, 33531827, 12516406,-21574435,-12476749, }}}, - {{{ 236881, 10476226, 57258,-14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930, }}}, - }}, - {{ /* k25519_precomp[ 3][ 4] */ - {{{ 1276410, -9371918, 22949635,-16322807,-23493039, -5702186, 14711875, 4874229,-30663140, -2331391, }}}, - {{{ 5855666, 4990204,-13711848, 7294284, -7804282, 1924647, -1423175, -7912378,-33069337, 9234253, }}}, - {{{ 20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055,-11609587, 18979186, 13396066, }}}, - }}, - {{ /* k25519_precomp[ 3][ 5] */ - {{{ 24474287, 4968103, 22267082, 4407354, 24063882, -8325180,-18816887, 13594782, 33514650, 7021958, }}}, - {{{ -11566906, -6565505,-21365085, 15928892,-26158305, 4315421,-25948728, -3916677,-21480480, 12868082, }}}, - {{{ -28635013, 13504661, 19988037, -2132761, 21078225, 6443208,-21446107, 2244500,-12455797, -8089383, }}}, - }}, - {{ /* k25519_precomp[ 3][ 6] */ - {{{ -30595528, 13793479, -5852820, 319136,-25723172, -6263899, 33086546, 8957937,-15233648, 5540521, }}}, - {{{ -11630176,-11503902, -8119500, -7643073, 2620056, 1022908,-23710744, -1568984,-16128528,-14962807, }}}, - {{{ 23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185,-11513277,-15205948, }}}, - }}, - {{ /* k25519_precomp[ 3][ 7] */ - {{{ 9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127,-19179614, 5867134, }}}, - {{{ -32765025, 1927590, 31726409, -4753295, 23962434,-16019500, 27846559, 5931263,-29749703,-16108455, }}}, - {{{ 27461885, -2977536, 22380810, 1815854,-23033753, -3031938, 7283490,-15148073,-19526700, 7734629, }}}, - }}, - }, - { - {{ /* k25519_precomp[ 4][ 0] */ - {{{ -8010264, -9590817,-11120403, 6196038, 29344158,-13430885, 7585295, -3176626, 18549497, 15302069, }}}, - {{{ -32658337, -6171222, -7672793,-11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746, }}}, - {{{ 24687205, 8613276,-30667046, -3233545, 1863892, -1830544, 19206234, 7134917,-11284482, -828919, }}}, - }}, - {{ /* k25519_precomp[ 4][ 1] */ - {{{ 11334899, -9218022, 8025293, 12707519, 17523892,-10476071, 10243738,-14685461, -5066034, 16498837, }}}, - {{{ 8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925,-14124238, 6536641, 10543906, }}}, - {{{ -28946384, 15479763,-17466835, 568876, -1497683, 11223454, -2669190,-16625574,-27235709, 8876771, }}}, - }}, - {{ /* k25519_precomp[ 4][ 2] */ - {{{ -25742899,-12566864,-15649966, -846607,-33026686, -796288,-33481822, 15824474, -604426, -9039817, }}}, - {{{ 10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098, }}}, - {{{ 10477963, -7470260, 12119566,-13250805, 29016247, -5365589, 31280319, 14396151,-30233575, 15272409, }}}, - }}, - {{ /* k25519_precomp[ 4][ 3] */ - {{{ -12288309, 3169463, 28813183, 16658753, 25116432, -5630466,-25173957,-12636138,-25014757, 1950504, }}}, - {{{ -26180358, 9489187, 11053416,-14746161,-31053720, 5825630, -8384306, -8767532, 15341279, 8373727, }}}, - {{{ 28685821, 7759505,-14378516,-12002860,-31971820, 4079242, 298136,-10232602, -2878207, 15190420, }}}, - }}, - {{ /* k25519_precomp[ 4][ 4] */ - {{{ -32932876, 13806336,-14337485,-15794431,-24004620, 10940928, 8669718, 2742393,-26033313, -6875003, }}}, - {{{ -1580388,-11729417,-25979658,-11445023,-17411874,-10912854, 9291594,-16247779,-12154742, 6048605, }}}, - {{{ -30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384, }}}, - }}, - {{ /* k25519_precomp[ 4][ 5] */ - {{{ -26280513, 11007847, 19408960, -940758,-18592965, -4328580, -5088060,-11105150, 20470157,-16398701, }}}, - {{{ -23136053, 9282192, 14855179,-15390078, -7362815,-14408560,-22783952, 14461608, 14042978, 5230683, }}}, - {{{ 29969567, -2741594,-16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891,-12449708, }}}, - }}, - {{ /* k25519_precomp[ 4][ 6] */ - {{{ -3144746, 8744661, 19704003, 4581278,-20430686, 6830683,-21284170, 8971513,-28539189, 15326563, }}}, - {{{ -19464629, 10110288,-17262528, -3503892,-23500387, 1355669,-15523050, 15300988,-20514118, 9168260, }}}, - {{{ -5353335, 4488613,-23803248, 16314347, 7780487,-15638939,-28948358, 9601605, 33087103, -9011387, }}}, - }}, - {{ /* k25519_precomp[ 4][ 7] */ - {{{ -19443170,-15512900,-20797467,-12445323,-29824447, 10229461,-27444329,-15000531, -5996870, 15664672, }}}, - {{{ 23294591,-16632613,-22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686, }}}, - {{{ -24722913, -4176517,-31150679, 5988919,-26858785, 6685065, 1661597,-12551441, 15271676,-15452665, }}}, - }}, - }, - { - {{ /* k25519_precomp[ 5][ 0] */ - {{{ 11433042,-13228665, 8239631, -5279517, -1985436, -725718,-18698764, 2167544, -6921301,-13440182, }}}, - {{{ -31436171, 15575146, 30436815, 12192228,-22463353, 9395379, -9917708, -8638997, 12215110, 12028277, }}}, - {{{ 14098400, 6555944, 23007258, 5757252,-15427832,-12950502, 30123440, 4617780,-16900089, -655628, }}}, - }}, - {{ /* k25519_precomp[ 5][ 1] */ - {{{ -4026201,-15240835, 11893168, 13718664,-14809462, 1847385,-15819999, 10154009, 23973261,-12684474, }}}, - {{{ -26531820, -3695990, -1908898, 2534301,-31870557,-16550355, 18341390,-11419951, 32013174,-10103539, }}}, - {{{ -25479301, 10876443,-11771086,-14625140,-12369567, 1838104, 21911214, 6354752, 4425632, -837822, }}}, - }}, - {{ /* k25519_precomp[ 5][ 2] */ - {{{ -10433389,-14612966, 22229858, -3091047,-13191166, 776729,-17415375,-12020462, 4725005, 14044970, }}}, - {{{ 19268650, -7304421, 1555349, 8692754,-21474059, -9910664, 6347390, -1411784,-19522291,-16109756, }}}, - {{{ -24864089, 12986008,-10898878, -5558584,-11312371, -148526, 19541418, 8180106, 9282262, 10282508, }}}, - }}, - {{ /* k25519_precomp[ 5][ 3] */ - {{{ -26205082, 4428547, -8661196,-13194263, 4098402,-14165257, 15522535, 8372215, 5542595,-10702683, }}}, - {{{ -10562541, 14895633, 26814552,-16673850,-17480754, -2489360, -2781891, 6993761,-18093885, 10114655, }}}, - {{{ -20107055, -929418, 31422704, 10427861, -7110749, 6150669,-29091755,-11529146, 25953725, -106158, }}}, - }}, - {{ /* k25519_precomp[ 5][ 4] */ - {{{ -4234397, -8039292, -9119125, 3046000, 2101609,-12607294, 19390020, 6094296, -3315279, 12831125, }}}, - {{{ -15998678, 7578152, 5310217, 14408357,-33548620, -224739, 31575954, 6326196, 7381791, -2421839, }}}, - {{{ -20902779, 3296811, 24736065,-16328389, 18374254, 7318640, 6295303, 8082724,-15362489, 12339664, }}}, - }}, - {{ /* k25519_precomp[ 5][ 5] */ - {{{ 27724736, 2291157, 6088201,-14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294, }}}, - {{{ -18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300,-12695493,-22182473, -9012899, }}}, - {{{ -11423429, -5421590, 11632845, 3405020, 30536730,-11674039,-27260765, 13866390, 30146206, 9142070, }}}, - }}, - {{ /* k25519_precomp[ 5][ 6] */ - {{{ 3924129,-15307516,-13817122,-10054960, 12291820, -668366,-27702774, 9326384, -8237858, 4171294, }}}, - {{{ -15921940, 16037937, 6713787, 16606682,-21612135, 2790944, 26396185, 3731949, 345228, -5462949, }}}, - {{{ -21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539,-12391231,-16253183,-13582083, }}}, - }}, - {{ /* k25519_precomp[ 5][ 7] */ - {{{ 31016211,-16722429, 26371392,-14451233, -5027349, 14854137, 17477601, 3842657, 28012650,-16405420, }}}, - {{{ -5075835, 9368966, -8562079, -4600902,-15249953, 6970560, -9189873, 16292057, -8867157, 3507940, }}}, - {{{ 29439664, 3537914, 23333589, 6997794,-17555561,-11018068,-15209202,-15051267, -9164929, 6580396, }}}, - }}, - }, - { - {{ /* k25519_precomp[ 6][ 0] */ - {{{ -12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567, }}}, - {{{ 20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667,-14608617, 5289421, -477127, }}}, - {{{ -16665533,-10650790, -6160345,-13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294, }}}, - }}, - {{ /* k25519_precomp[ 6][ 1] */ - {{{ -12889898, 9373458, 31595848, 16374215, 21471720, 13221525,-27283495,-12348559, -3698806, 117887, }}}, - {{{ 22263325, -6560050, 3984570,-11174646,-15114008, -566785, 28311253, 5358056,-23319780, 541964, }}}, - {{{ 16259219, 3261970, 2309254,-15534474,-16885711, -4581916, 24134070,-16705829,-13337066,-13552195, }}}, - }}, - {{ /* k25519_precomp[ 6][ 2] */ - {{{ 9378160,-13140186,-22845982,-12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244, }}}, - {{{ 24977353, -314384, -8223969,-13465086, 28432343, -1176353,-13068804,-12297348,-22380984, 6618999, }}}, - {{{ -1538174, 11685646, 12944378, 13682314,-24389511,-14413193, 8044829,-13817328, 32239829, -5652762, }}}, - }}, - {{ /* k25519_precomp[ 6][ 3] */ - {{{ -18603066, 4762990, -926250, 8885304,-28412480, -3187315, 9781647,-10350059, 32779359, 5095274, }}}, - {{{ -33008130, -5214506,-32264887, -3685216, 9460461, -9327423,-24601656, 14506724, 21639561, -2630236, }}}, - {{{ -16400943,-13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605, }}}, - }}, - {{ /* k25519_precomp[ 6][ 4] */ - {{{ -13600129, 10240081, 9171883, 16131053,-20869254, 9599700, 33499487, 5080151, 2085892, 5119761, }}}, - {{{ -22205145, -2519528,-16381601, 414691,-25019550, 2170430, 30634760, -8363614,-31999993, -5759884, }}}, - {{{ -6845704, 15791202, 8550074, -1312654, 29928809,-12092256, 27534430, -7192145,-22351378, 12961482, }}}, - }}, - {{ /* k25519_precomp[ 6][ 5] */ - {{{ -24492060, -9570771, 10368194, 11582341,-23397293, -2245287, 16533930, 8206996,-30194652, -5159638, }}}, - {{{ -11121496, -3382234, 2307366, 6362031, -135455, 8868177,-16835630, 7031275, 7589640, 8945490, }}}, - {{{ -32152748, 8917967, 6661220,-11677616, -1192060,-15793393, 7251489,-11182180, 24099109,-14456170, }}}, - }}, - {{ /* k25519_precomp[ 6][ 6] */ - {{{ 5019558, -7907470, 4244127,-14714356,-26933272, 6453165,-19118182,-13289025, -6231896,-10280736, }}}, - {{{ 10853594, 10721687, 26480089, 5861829,-22995819, 1972175, -1866647,-10557898, -3363451, -6441124, }}}, - {{{ -17002408, 5906790, 221599, -6563147, 7828208,-13248918, 24362661, -2008168,-13866408, 7421392, }}}, - }}, - {{ /* k25519_precomp[ 6][ 7] */ - {{{ 8139927, -6546497, 32257646, -5890546, 30375719, 1886181,-21175108, 15441252, 28826358, -4123029, }}}, - {{{ 6267086, 9695052, 7709135,-16603597,-32869068, -1886135, 14795160, -7840124, 13746021, -1742048, }}}, - {{{ 28584902, 7787108, -6732942,-15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958, }}}, - }}, - }, - { - {{ /* k25519_precomp[ 7][ 0] */ - {{{ 24949256, 6376279,-27466481, -8174608,-18646154, -9930606, 33543569,-12141695, 3569627, 11342593, }}}, - {{{ 26514989, 4740088, 27912651, 3697550, 19331575,-11472339, 6809886, 4608608, 7325975,-14801071, }}}, - {{{ -11618399,-14554430,-24321212, 7655128, -1369274, 5214312,-27400540, 10258390,-17646694, -8186692, }}}, - }}, - {{ /* k25519_precomp[ 7][ 1] */ - {{{ 11431204, 15823007, 26570245, 14329124, 18029990, 4796082,-31446179, 15580664, 9280358, -3973687, }}}, - {{{ -160783,-10326257,-22855316, -4304997,-20861367,-13621002,-32810901,-11181622,-15545091, 4387441, }}}, - {{{ -20799378, 12194512, 3937617, -5805892,-27154820, 9340370,-24513992, 8548137, 20617071, -7482001, }}}, - }}, - {{ /* k25519_precomp[ 7][ 2] */ - {{{ -938825, -3930586, -8714311, 16124718, 24603125, -6225393,-13775352,-11875822, 24345683, 10325460, }}}, - {{{ -19855277, -1568885,-22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007, }}}, - {{{ -21751364,-16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762, }}}, - }}, - {{ /* k25519_precomp[ 7][ 3] */ - {{{ 15564307,-14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005, }}}, - {{{ -9442290, 6624296,-30298964,-11913677, -4670981, -2057379, 31521204, 9614054,-30000824, 12074674, }}}, - {{{ 4771191, -135239, 14290749,-13089852, 27992298, 14998318, -1413936, -1556716, 29832613,-16391035, }}}, - }}, - {{ /* k25519_precomp[ 7][ 4] */ - {{{ 7064884, -7541174,-19161962, -5067537,-18891269, -2912736, 25825242, 5293297,-27122660, 13101590, }}}, - {{{ -2298563, 2439670, -7466610, 1719965,-27267541,-16328445, 32512469, -5317593,-30356070, -4190957, }}}, - {{{ -30006540, 10162316,-33180176, 3981723,-16482138,-13070044, 14413974, 9515896, 19568978, 9628812, }}}, - }}, - {{ /* k25519_precomp[ 7][ 5] */ - {{{ 33053803, 199357, 15894591, 1583059, 27380243, -4580435,-17838894, -6106839, -6291786, 3437740, }}}, - {{{ -18978877, 3884493, 19469877, 12726490, 15913552, 13614290,-22961733, 70104, 7463304, 4176122, }}}, - {{{ -27124001, 10659917, 11482427,-16070381, 12771467, -6635117,-32719404, -5322751, 24216882, 5944158, }}}, - }}, - {{ /* k25519_precomp[ 7][ 6] */ - {{{ 8894125, 7450974, -2664149, -9765752,-28080517,-12389115, 19345746, 14680796, 11632993, 5847885, }}}, - {{{ 26942781, -2315317, 9129564, -4906607, 26024105, 11769399,-11518837, 6367194, -9727230, 4782140, }}}, - {{{ 19916461, -4828410,-22910704,-11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857, }}}, - }}, - {{ /* k25519_precomp[ 7][ 7] */ - {{{ 801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480,-13538503, 1387155, }}}, - {{{ 19646058, 5720633,-11416706, 12814209, 11607948, 12749789, 14147075, 15156355,-21866831, 11835260, }}}, - {{{ 19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869,-26560550, 5052483, }}}, - }}, - }, - { - {{ /* k25519_precomp[ 8][ 0] */ - {{{ -3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123,-12618185, 12228557, -7003677, }}}, - {{{ 32944382, 14922211,-22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815, }}}, - {{{ 22865569, -4652735, 27603668,-12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751, }}}, - }}, - {{ /* k25519_precomp[ 8][ 1] */ - {{{ -16420968, -1113305, -327719,-12107856, 21886282,-15552774, -1887966, -315658, 19932058,-12739203, }}}, - {{{ -11656086, 10087521, -8864888, -5536143,-19278573, -3055912, 3999228, 13239134, -4777469,-13910208, }}}, - {{{ 1382174,-11694719, 17266790, 9194690,-13324356, 9720081, 20403944, 11284705,-14013818, 3093230, }}}, - }}, - {{ /* k25519_precomp[ 8][ 2] */ - {{{ 16650921,-11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225,-24049421, -6691850, }}}, - {{{ -21911077, -5927941, -4611316, -5560156,-31744103,-10785293, 24123614, 15193618,-21652117,-16739389, }}}, - {{{ -9935934, -4289447,-25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968, }}}, - }}, - {{ /* k25519_precomp[ 8][ 3] */ - {{{ -11307610, 6210372, 13206574, 5806320,-29017692,-13967200,-12331205, -7486601,-25578460,-16240689, }}}, - {{{ 14668462,-12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880, }}}, - {{{ 5974874, 3053895, -9433049,-10385191,-31865124, 3225009, -7972642, 3936128, -5652273, -3050304, }}}, - }}, - {{ /* k25519_precomp[ 8][ 4] */ - {{{ 30625386, -4729400,-25555961,-12792866,-20484575, 7695099, 17097188,-16303496,-27999779, 1803632, }}}, - {{{ -3553091, 9865099, -5228566, 4272701, -5673832,-16689700, 14911344, 12196514,-21405489, 7047412, }}}, - {{{ 20093277, 9920966,-11138194, -5343857, 13161587, 12044805,-32856851, 4124601,-32343828,-10257566, }}}, - }}, - {{ /* k25519_precomp[ 8][ 5] */ - {{{ -20788824, 14084654,-13531713, 7842147, 19119038,-13822605, 4752377, -8714640,-21679658, 2288038, }}}, - {{{ -26819236, -3283715, 29965059, 3039786,-14473765, 2540457, 29457502, 14625692,-24819617, 12570232, }}}, - {{{ -1063558,-11551823, 16920318, 12494842, 1278292, -5869109,-21159943, -3498680,-11974704, 4724943, }}}, - }}, - {{ /* k25519_precomp[ 8][ 6] */ - {{{ 17960970,-11775534, -4140968, -9702530, -8876562, -1410617,-12907383, -8659932,-29576300, 1903856, }}}, - {{{ 23134274,-14279132,-10681997, -1611936, 20684485, 15770816,-12989750, 3190296, 26955097, 14109738, }}}, - {{{ 15308788, 5320727,-30113809,-14318877, 22902008, 7767164, 29425325,-11277562, 31960942, 11934971, }}}, - }}, - {{ /* k25519_precomp[ 8][ 7] */ - {{{ -27395711, 8435796, 4109644, 12222639,-24627868, 14818669, 20638173, 4875028, 10491392, 1379718, }}}, - {{{ -13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697, }}}, - {{{ -11787308, 11500838, 13787581,-13832590,-22430679, 10140205, 1465425, 12689540,-10301319,-13872883, }}}, - }}, - }, - { - {{ /* k25519_precomp[ 9][ 0] */ - {{{ 5414091,-15386041,-21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912, }}}, - {{{ -26337395,-13766162, 32496025,-13653919, 17847801,-12669156, 3604025, 8316894,-25875034,-10437358, }}}, - {{{ 3296484, 6223048, 24680646,-12246460,-23052020, 5903205, -8862297, -4639164, 12376617, 3188849, }}}, - }}, - {{ /* k25519_precomp[ 9][ 1] */ - {{{ 29190488,-14659046, 27549113, -1183516, 3520066,-10697301, 32049515, -7309113,-16109234, -9852307, }}}, - {{{ -14744486, -9309156, 735818, -598978,-20407687, -5057904, 25246078,-15795669, 18640741, -960977, }}}, - {{{ -6928835,-16430795, 10361374, 5642961, 4910474, 12345252,-31638386, -494430, 10530747, 1053335, }}}, - }}, - {{ /* k25519_precomp[ 9][ 2] */ - {{{ -29265967,-14186805,-13538216,-12117373,-19457059,-10655384,-31462369, -2948985, 24018831, 15026644, }}}, - {{{ -22592535, -3145277, -2289276, 5953843,-13440189, 9425631, 25310643, 13003497, -2314791,-15145616, }}}, - {{{ -27419985, -603321, -8043984, -1669117,-26092265, 13987819,-27297622, 187899,-23166419, -2531735, }}}, - }}, - {{ /* k25519_precomp[ 9][ 3] */ - {{{ -21744398,-13810475, 1844840, 5021428,-10434399,-15911473, 9716667, 16266922, -5070217, 726099, }}}, - {{{ 29370922, -6053998, 7334071,-15342259, 9385287, 2247707,-13661962, -4839461, 30007388,-15823341, }}}, - {{{ -936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336, }}}, - }}, - {{ /* k25519_precomp[ 9][ 4] */ - {{{ -23376435, 1410446,-22253753,-12899614, 30867635, 15826977, 17693930, 544696,-11985298, 12422646, }}}, - {{{ 31117226,-12215734,-13502838, 6561947, -9876867,-12757670, -5118685, -4096706, 29120153, 13924425, }}}, - {{{ -17400879,-14233209, 19675799, -2734756,-11006962, -5858820, -9383939,-11317700, 7240931, -237388, }}}, - }}, - {{ /* k25519_precomp[ 9][ 5] */ - {{{ -31361739,-11346780,-15007447, -5856218,-22453340,-12152771, 1222336, 4389483, 3293637,-15551743, }}}, - {{{ -16684801,-14444245, 11038544, 11054958,-13801175, -3338533,-24319580, 7733547, 12796905, -6335822, }}}, - {{{ -8759414,-10817836,-25418864, 10783769,-30615557, -9746811,-28253339, 3647836, 3222231,-11160462, }}}, - }}, - {{ /* k25519_precomp[ 9][ 6] */ - {{{ 18606113, 1693100,-25448386,-15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985, }}}, - {{{ 9255317, -3131197,-12156162, -1004256, 13098013, -9214866, 16377220, -2102812,-19802075, -3034702, }}}, - {{{ -22729289, 7496160, -5742199, 11329249, 19991973, -3347502,-31718148, 9936966,-30097688,-10618797, }}}, - }}, - {{ /* k25519_precomp[ 9][ 7] */ - {{{ 21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293, }}}, - {{{ 27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276,-23659143, -8132100, }}}, - {{{ 19492550,-12104365,-29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688, }}}, - }}, - }, - { - {{ /* k25519_precomp[10][ 0] */ - {{{ 12015105, 2801261, 28198131, 10151021, 24818120, -4743133,-11194191, -5645734, 5150968, 7274186, }}}, - {{{ 2831366,-12492146, 1478975, 6122054, 23825128,-12733586, 31097299, 6083058, 31021603, -9793610, }}}, - {{{ -2529932, -2229646, 445613, 10720828,-13849527,-11505937,-23507731, 16354465, 15067285,-14147707, }}}, - }}, - {{ /* k25519_precomp[10][ 1] */ - {{{ 7840942, 14037873,-33364863, 15934016, -728213, -3642706, 21403988, 1057586,-19379462,-12403220, }}}, - {{{ 915865,-16469274, 15608285, -8789130,-24357026, 6060030,-17371319, 8410997, -7220461, 16527025, }}}, - {{{ 32922597, -556987, 20336074,-16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044, }}}, - }}, - {{ /* k25519_precomp[10][ 2] */ - {{{ 32752030, 11232950, 3381995, -8714866, 22652988,-10744103, 17159699, 16689107,-20314580, -1305992, }}}, - {{{ -4689649, 9166776,-25710296,-10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027, }}}, - {{{ 21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197, }}}, - }}, - {{ /* k25519_precomp[10][ 3] */ - {{{ 8651614, -4477032,-16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901, }}}, - {{{ 31486080, 15114593,-14261250, 12951354, 14369431, -7387845, 16347321,-13662089, 8684155,-10532952, }}}, - {{{ 19443825, 11385320, 24468943, -9659068,-23919258, 2187569,-26263207, -6086921, 31316348, 14219878, }}}, - }}, - {{ /* k25519_precomp[10][ 4] */ - {{{ -28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390, }}}, - {{{ 32382935, 1110093, 18477781, 11028262,-27411763, -7548111, -4980517, 10843782, -7957600,-14435730, }}}, - {{{ 2814918, 7836403, 27519878, -7868156,-20894015,-11553689,-21494559, 8550130, 28346258, 1994730, }}}, - }}, - {{ /* k25519_precomp[10][ 5] */ - {{{ -19578299, 8085545,-14000519, -3948622, 2785838,-16231307,-19516951, 7174894, 22628102, 8115180, }}}, - {{{ -30405132, 955511,-11133838,-15078069,-32447087,-13278079,-25651578, 3317160, -9943017, 930272, }}}, - {{{ -15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970,-22765376,-10650715, }}}, - }}, - {{ /* k25519_precomp[10][ 6] */ - {{{ -22751231, -5303997,-12907607,-12768866,-15811511, -7797053,-14839018,-16554220, -1867018, 8398970, }}}, - {{{ -31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408,-15772772, }}}, - {{{ -17220923, -9545221,-27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865, }}}, - }}, - {{ /* k25519_precomp[10][ 7] */ - {{{ 15100157,-15835752,-23923978, -1005098,-26450192, 15509408, 12376730, -3479146, 33166107, -8042750, }}}, - {{{ 20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263,-13878373, }}}, - {{{ 32529814,-11074689, 30361439,-16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348, }}}, - }}, - }, - { - {{ /* k25519_precomp[11][ 0] */ - {{{ 9923462, 11271500, 12616794, 3544722,-29998368, -1721626, 12891687, -8193132,-26442943, 10486144, }}}, - {{{ -22597207, -7012665, 8587003, -8257861, 4084309,-12970062, 361726, 2610596,-23921530,-11455195, }}}, - {{{ 5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086, }}}, - }}, - {{ /* k25519_precomp[11][ 1] */ - {{{ -13994457, 16616821, 14549246, 3341099, 32155958, 13648976,-17577068, 8849297, 65030, 8370684, }}}, - {{{ -8320926,-12049626, 31204563, 5839400,-20627288, -1057277,-19442942, 6922164, 12743482, -9800518, }}}, - {{{ -2361371, 12678785, 28815050, 4759974,-23893047, 4884717, 23783145, 11038569, 18800704, 255233, }}}, - }}, - {{ /* k25519_precomp[11][ 2] */ - {{{ -5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688,-14753793, }}}, - {{{ -2936654,-10827535,-10432089, 14516793, -3640786, 4372541,-31934921, 2209390, -1524053, 2055794, }}}, - {{{ 580882, 16705327, 5468415, -2683018,-30926419,-14696000, -7203346, -8994389,-30021019, 7394435, }}}, - }}, - {{ /* k25519_precomp[11][ 3] */ - {{{ 23838809, 1822728,-15738443, 15242727, 8318092, -3733104,-21672180, -3492205, -4821741, 14799921, }}}, - {{{ 13345610, 9759151, 3371034,-16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518, }}}, - {{{ 2286874, -4435931,-20042458, -2008336,-13696227, 5038122, 11006906,-15760352, 8205061, 1607563, }}}, - }}, - {{ /* k25519_precomp[11][ 4] */ - {{{ 14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278, }}}, - {{{ -27688051, 1585953,-10775053, 931069,-29120221,-11002319,-14410829, 12029093, 9944378, 8024, }}}, - {{{ 4368715, -3709630, 29874200,-15022983,-20230386,-11410704,-16114594, -999085, -8142388, 5640030, }}}, - }}, - {{ /* k25519_precomp[11][ 5] */ - {{{ 10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887,-16694564, 15219798,-14327783, }}}, - {{{ 27425505, -5719081, 3055006, 10660664, 23458024, 595578,-15398605, -1173195,-18342183, 9742717, }}}, - {{{ 6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844, }}}, - }}, - {{ /* k25519_precomp[11][ 6] */ - {{{ 14012521, -5024720,-18384453, -9578469,-26485342, -3936439,-13033478,-10909803, 24319929, -6446333, }}}, - {{{ 16412690, -4507367, 10772641, 15929391,-17068788, -4658621, 10555945,-10484049,-30102368, -4739048, }}}, - {{{ 22397382, -7767684, -9293161,-12792868, 17166287, -9755136,-27333065, 6199366, 21880021,-12250760, }}}, - }}, - {{ /* k25519_precomp[11][ 7] */ - {{{ -4283307, 5368523,-31117018, 8163389,-30323063, 3209128, 16557151, 8890729, 8840445, 4957760, }}}, - {{{ -15447727, 709327, -6919446,-10870178,-29777922, 6522332,-21720181, 12130072,-14796503, 5005757, }}}, - {{{ -2114751,-14308128, 23019042, 15765735,-25269683, 6002752, 10183197,-13239326,-16395286, -2176112, }}}, - }}, - }, - { - {{ /* k25519_precomp[12][ 0] */ - {{{ -19025756, 1632005, 13466291, -7995100,-23640451, 16573537,-32013908, -3057104, 22208662, 2000468, }}}, - {{{ 3065073, -1412761,-25598674, -361432,-17683065, -5703415, -8164212, 11248527, -3691214, -7414184, }}}, - {{{ 10379208, -6045554, 8877319, 1473647,-29291284,-12507580, 16690915, 2553332, -3132688, 16400289, }}}, - }}, - {{ /* k25519_precomp[12][ 1] */ - {{{ 15716668, 1254266,-18472690, 7446274, -8448918, 6344164,-22097271, -7285580, 26894937, 9132066, }}}, - {{{ 24158887, 12938817, 11085297, -8177598,-28063478, -4457083,-30576463, 64452, -6817084, -2692882, }}}, - {{{ 13488534, 7794716, 22236231, 5989356, 25426474,-12578208, 2350710, -3418511, -4688006, 2364226, }}}, - }}, - {{ /* k25519_precomp[12][ 2] */ - {{{ 16335052, 9132434, 25640582, 6678888, 1725628, 8517937,-11807024,-11697457, 15445875, -7798101, }}}, - {{{ 29004207, -7867081, 28661402, -640412,-12794003, -7943086, 31863255, -4135540, -278050,-15759279, }}}, - {{{ -6122061,-14866665,-28614905, 14569919,-10857999, -3591829, 10343412, -6976290,-29828287,-10815811, }}}, - }}, - {{ /* k25519_precomp[12][ 3] */ - {{{ 27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709, }}}, - {{{ 20263915, 11434237, -5765435, 11236810, 13505955,-10857102,-16111345, 6493122,-19384511, 7639714, }}}, - {{{ -2830798,-14839232, 25403038, -8215196, -8317012,-16173699, 18006287,-16043750, 29994677,-15808121, }}}, - }}, - {{ /* k25519_precomp[12][ 4] */ - {{{ 9769828, 5202651,-24157398,-13631392,-28051003,-11561624,-24613141,-13860782,-31184575, 709464, }}}, - {{{ 12286395, 13076066,-21775189, -1176622,-25003198, 4057652,-32018128, -8890874, 16102007, 13205847, }}}, - {{{ 13733362, 5599946, 10557076, 3195751, -5557991, 8536970,-25540170, 8525972, 10151379, 10394400, }}}, - }}, - {{ /* k25519_precomp[12][ 5] */ - {{{ 4024660,-16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039,-33302334, 8934414, }}}, - {{{ -15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094,-11536886, 11721158, }}}, - {{{ 17555939, -5013938, 8268606, 2331751,-22738815, 9761013, 9319229, 8835153, -9205489, -1280045, }}}, - }}, - {{ /* k25519_precomp[12][ 6] */ - {{{ -461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415, }}}, - {{{ -5070281, 12367917,-30663534, 3234473, 32617080, -8422642, 29880583,-13483331,-26898490, -7867459, }}}, - {{{ -31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688,-14992079, }}}, - }}, - {{ /* k25519_precomp[12][ 7] */ - {{{ 21594432,-14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833,-28256052, 4298412, }}}, - {{{ -20650503,-11961496,-27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743, }}}, - {{{ -14676630,-15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609,-26938930, -5863836, }}}, - }}, - }, - { - {{ /* k25519_precomp[13][ 0] */ - {{{ 12962541, 5311799,-10060768, 11658280, 18855286, -7954201, 13286263,-12808704, -4381056, 9882022, }}}, - {{{ 18512079, 11319350,-20123124, 15090309, 18818594, 5271736,-22727904, 3666879,-23967430, -3299429, }}}, - {{{ -6789020, -3146043, 16192429, 13241070, 15898607,-14206114,-10084880, -6661110, -2403099, 5276065, }}}, - }}, - {{ /* k25519_precomp[13][ 1] */ - {{{ 30169808, -5317648, 26306206,-11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861, }}}, - {{{ 10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736,-21016438, -8202000, }}}, - {{{ -33150110, 3261608, 22745853, 7948688, 19370557,-15177665,-26171976, 6482814,-10300080,-11060101, }}}, - }}, - {{ /* k25519_precomp[13][ 2] */ - {{{ 32869458, -5408545, 25609743, 15678670,-10687769,-15471071, 26112421, 2521008,-22664288, 6904815, }}}, - {{{ 29506923, 4457497, 3377935, -9796444,-30510046, 12935080, 1561737, 3841096,-29003639, -6657642, }}}, - {{{ 10340844, -6630377,-18656632, -2278430, 12621151,-13339055, 30878497,-11824370,-25584551, 5181966, }}}, - }}, - {{ /* k25519_precomp[13][ 3] */ - {{{ 25940115,-12658025, 17324188,-10307374, -8671468, 15029094, 24396252,-16450922, -2322852,-12388574, }}}, - {{{ -21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742, }}}, - {{{ -18882287,-11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689, }}}, - }}, - {{ /* k25519_precomp[13][ 4] */ - {{{ 12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020, }}}, - {{{ -10349955,-14680563, -8211979, 2330220,-17662549,-14545780, 10658213, 6671822, 19012087, 3772772, }}}, - {{{ 3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732,-15762884, 20527771, 12988982, }}}, - }}, - {{ /* k25519_precomp[13][ 5] */ - {{{ -14822485, -5797269, -3707987, 12689773, -898983,-10914866,-24183046,-10564943, 3299665,-12424953, }}}, - {{{ -16777703,-15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331,-25583147, 8991218, }}}, - {{{ -17226263, 1816362, -1673288, -6086439, 31783888, -8175991,-32948145, 7417950,-30242287, 1507265, }}}, - }}, - {{ /* k25519_precomp[13][ 6] */ - {{{ 29692663, 6829891,-10498800, 4334896, 20945975,-11906496,-28887608, 8209391, 14606362,-10647073, }}}, - {{{ -3481570, 8707081, 32188102, 5672294, 22096700, 1711240,-33020695, 9761487, 4170404, -2085325, }}}, - {{{ -11587470, 14855945, -4127778, -1531857,-26649089, 15084046, 22186522, 16002000,-14276837, -8400798, }}}, - }}, - {{ /* k25519_precomp[13][ 7] */ - {{{ -4811456, 13761029,-31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870, }}}, - {{{ -7742563, -8256762,-14768334,-13656260,-23232383, 12387166, 4498947, 14147411, 29514390, 4302863, }}}, - {{{ -13413405,-12407859, 20757302,-13801832, 14785143, 8976368, -5061276, -2144373, 17846988,-13971927, }}}, - }}, - }, - { - {{ /* k25519_precomp[14][ 0] */ - {{{ -2244452, -754728, -4597030, -1066309, -6247172, 1455299,-21647728, -9214789, -5222701, 12650267, }}}, - {{{ -9906797,-16070310, 21134160, 12198166,-27064575, 708126, 387813, 13770293,-19134326, 10958663, }}}, - {{{ 22470984, 12369526, 23446014, -5441109,-21520802, -9698723,-11772496,-11574455,-25083830, 4271862, }}}, - }}, - {{ /* k25519_precomp[14][ 1] */ - {{{ -25169565,-10053642,-19909332, 15361595, -5984358, 2159192, 75375, -4278529,-32526221, 8469673, }}}, - {{{ 15854970, 4148314, -8893890, 7259002, 11666551, 13824734,-30531198, 2697372, 24154791, -9460943, }}}, - {{{ 15446137,-15806644, 29759747, 14019369, 30811221, -9610191,-31582008, 12840104, 24913809, 9815020, }}}, - }}, - {{ /* k25519_precomp[14][ 2] */ - {{{ -4709286, -5614269,-31841498,-12288893,-14443537, 10799414, -9103676, 13438769, 18735128, 9466238, }}}, - {{{ 11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821,-10896103,-22728655, 16199064, }}}, - {{{ 14576810, 379472,-26786533, -8317236,-29426508,-10812974, -102766, 1876699, 30801119, 2164795, }}}, - }}, - {{ /* k25519_precomp[14][ 3] */ - {{{ 15995086, 3199873, 13672555, 13712240,-19378835, -4647646,-13081610,-15496269,-13492807, 1268052, }}}, - {{{ -10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338,-12600221,-17055369, 3565904, }}}, - {{{ 29210088, -9419337, -5919792, -4952785, 10834811,-13327726,-16512102,-10820713,-27162222,-14030531, }}}, - }}, - {{ /* k25519_precomp[14][ 4] */ - {{{ -13161890, 15508588, 16663704, -8156150,-28349942, 9019123,-29183421, -3769423, 2244111,-14001979, }}}, - {{{ -5152875, -3800936, -9306475, -6071583, 16243069, 14684434,-25673088,-16180800, 13491506, 4641841, }}}, - {{{ 10813417, 643330,-19188515, -728916, 30292062,-16600078, 27548447, -7721242, 14476989,-12767431, }}}, - }}, - {{ /* k25519_precomp[14][ 5] */ - {{{ 10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259,-27912810, 12651324, }}}, - {{{ -31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940, }}}, - {{{ 10202177, -6545839,-31373232, -9574638,-32150642, -8119683,-12906320, 3852694, 13216206, 14842320, }}}, - }}, - {{ /* k25519_precomp[14][ 6] */ - {{{ -15815640,-10601066, -6538952, -7258995, -6984659, -6581778,-31500847, 13765824,-27434397, 9900184, }}}, - {{{ 14465505,-13833331,-32133984,-14738873,-27443187, 12990492, 33046193, 15796406, -7051866, -8040114, }}}, - {{{ 30924417, -8279620, 6359016,-12816335, 16508377, 9071735,-25488601, 15413635, 9524356, -7018878, }}}, - }}, - {{ /* k25519_precomp[14][ 7] */ - {{{ 12274201,-13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784, }}}, - {{{ -2951309, 8903985, 17349946, 601635,-16432815, -4612556,-13732739,-15889334,-22258478, 4659091, }}}, - {{{ -16916263, -4952973,-30393711,-15158821, 20774812, 15897498, 5736189, 15026997, -2178256,-13455585, }}}, - }}, - }, - { - {{ /* k25519_precomp[15][ 0] */ - {{{ -8858980, -2219056, 28571666,-10155518, -474467,-10105698, -3801496, 278095, 23440562, -290208, }}}, - {{{ 10226241, -5928702, 15139956, 120818,-14867693, 5218603, 32937275, 11551483,-16571960, -7442864, }}}, - {{{ 17932739,-12437276,-24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661, }}}, - }}, - {{ /* k25519_precomp[15][ 1] */ - {{{ 7749907, -969567,-16339731, -16464,-25018111, 15122143, -1573531, 7152530, 21831162, 1245233, }}}, - {{{ 26958459,-14658026, 4314586, 8346991, -5677764, 11960072,-32589295, -620035,-30402091,-16716212, }}}, - {{{ -12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357,-22338025, 13987525, }}}, - }}, - {{ /* k25519_precomp[15][ 2] */ - {{{ -24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068, }}}, - {{{ 9681908, -6737123,-31951644, 13591838, -6883821, 386950, 31622781, 6439245,-14581012, 4091397, }}}, - {{{ -8426427, 1470727,-28109679, -1596990, 3978627, -5123623,-19622683, 12092163, 29077877,-14741988, }}}, - }}, - {{ /* k25519_precomp[15][ 3] */ - {{{ 5269168, -6859726,-13230211, -8020715, 25932563, 1763552, -5606110, -5505881,-20017847, 2357889, }}}, - {{{ 32264008,-15407652, -5387735, -1160093, -2091322, -3946900, 23104804,-12869908, 5727338, 189038, }}}, - {{{ 14609123, -8954470, -6000566,-16622781,-14577387, -7743898,-26745169, 10942115,-25888931,-14884697, }}}, - }}, - {{ /* k25519_precomp[15][ 4] */ - {{{ 20513500, 5557931,-15604613, 7829531, 26413943, -2019404,-21378968, 7471781, 13913677, -5137875, }}}, - {{{ -25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905, }}}, - {{{ -25656801, 3393631, -2955415, -7075526, -2250709, 9366908,-30223418, 6812974, 5568676, -3127656, }}}, - }}, - {{ /* k25519_precomp[15][ 5] */ - {{{ 11630004, 12144454, 2116339, 13606037, 27378885, 15676917,-17408753,-13504373,-14395196, 8070818, }}}, - {{{ 27117696,-10007378,-31282771, -5570088, 1127282, 12772488,-29845906, 10483306,-11552749, -1028714, }}}, - {{{ 10637467, -5688064, 5674781, 1072708,-26343588, -6982302, -1683975, 9177853,-27493162, 15431203, }}}, - }}, - {{ /* k25519_precomp[15][ 6] */ - {{{ 20525145, 10892566,-12742472, 12779443,-29493034, 16150075,-28240519, 14943142,-15056790, -7935931, }}}, - {{{ -30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024, }}}, - {{{ -23752644, 2636870, -5163910,-10103818, 585134, 7877383, 11345683, -6492290, 13352335,-10977084, }}}, - }}, - {{ /* k25519_precomp[15][ 7] */ - {{{ -1931799, -5407458, 3304649,-12884869, 17015806, -4877091,-29783850, -7752482,-13215537, -319204, }}}, - {{{ 20239939, 6607058, 6203985, 3483793,-18386976, -779229,-20723742, 15077870,-22750759, 14523817, }}}, - {{{ 27406042, -6041657, 27423596, -4497394, 4996214, 10002360,-28842031, -4545494,-30172742, -4805667, }}}, - }}, - }, - { - {{ /* k25519_precomp[16][ 0] */ - {{{ 11374242, 12660715, 17861383,-12540833, 10935568, 1099227,-13886076, -9091740,-27727044, 11358504, }}}, - {{{ -12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336,-26123651, 4985768, }}}, - {{{ -19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114,-19414307,-15621255, }}}, - }}, - {{ /* k25519_precomp[16][ 1] */ - {{{ 6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790, }}}, - {{{ 1656497, 13457317, 15370807, 6364910, 13605745, 8362338,-19174622, -5475723,-16796596, -5031438, }}}, - {{{ -22273315,-13524424, -64685, -4334223,-18605636,-10921968,-20571065, -7007978, -99853,-10237333, }}}, - }}, - {{ /* k25519_precomp[16][ 2] */ - {{{ 17747465, 10039260, 19368299, -4050591,-20630635,-16041286, 31992683,-15857976,-29260363, -5511971, }}}, - {{{ 31932027, -4986141,-19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242,-10626905, }}}, - {{{ 29796507, 37186, 19818052, 10115756,-11829032, 3352736, 18551198, 3272828, -5190932, -4162409, }}}, - }}, - {{ /* k25519_precomp[16][ 3] */ - {{{ 12501286, 4044383, -8612957,-13392385,-32430052, 5136599,-19230378, -3529697, 330070, -3659409, }}}, - {{{ 6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499, }}}, - {{{ -8365515, -4042521, 25133448, -4517355, -6211027, 2265927,-32769618, 1936675, -5159697, 3829363, }}}, - }}, - {{ /* k25519_precomp[16][ 4] */ - {{{ 28425966, -5835433, -577090, -4697198,-14217555, 6870930, 7921550, -6567787, 26333140, 14267664, }}}, - {{{ -11067219, 11871231, 27385719,-10559544, -4585914,-11189312, 10004786, -8709488,-21761224, 8930324, }}}, - {{{ -21197785,-16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911,-26491501,-16408940, }}}, - }}, - {{ /* k25519_precomp[16][ 5] */ - {{{ 13537262, -7759490,-20604840, 10961927, -5922820,-13218065,-13156584, 6217254,-15943699, 13814990, }}}, - {{{ -17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914, }}}, - {{{ -25045300,-10191966, 15366585, 15166509,-13105086, 8423556,-29171540, 12361135,-18685978, 4578290, }}}, - }}, - {{ /* k25519_precomp[16][ 6] */ - {{{ 24579768, 3711570, 1342322,-11180126,-27005135, 14124956,-22544529, 14074919, 21964432, 8235257, }}}, - {{{ -6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433, }}}, - {{{ -16304899,-13605259, -6632427, -5142349, 16974359,-10911083, 27202044, 1719366, 1141648,-12796236, }}}, - }}, - {{ /* k25519_precomp[16][ 7] */ - {{{ -12863944,-13219986, -8318266,-11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045, }}}, - {{{ 11423335, -5468059, 32344216, 8962751, 24989809, 9241752,-13265253, 16086212,-28740881,-15642093, }}}, - {{{ -1409668, 12530728, -6368726, 10847387, 19531186,-14132160,-11709148, 7791794,-27245943, 4383347, }}}, - }}, - }, - { - {{ /* k25519_precomp[17][ 0] */ - {{{ -28970898, 5271447, -1266009, -9736989,-12455236, 16732599, -4862407, -4906449, 27193557, 6245191, }}}, - {{{ -15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507, }}}, - {{{ -12632451, 11257346,-32692994, 13548177, -721004, 10879011, 31168030, 13952092,-29571492, -3635906, }}}, - }}, - {{ /* k25519_precomp[17][ 1] */ - {{{ 3877321, -9572739, 32416692, 5405324,-11004407,-13656635, 3759769, 11935320, 5611860, 8164018, }}}, - {{{ -16275802, 14667797, 15906460, 12155291,-22111149, -9039718, 32003002, -8832289, 5773085, -8422109, }}}, - {{{ -23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926, }}}, - }}, - {{ /* k25519_precomp[17][ 2] */ - {{{ -24593607,-16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564,-25341555, -3627528, }}}, - {{{ 8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941,-14786005, -1672488, 827625, }}}, - {{{ -32720583,-16289296,-32503547, 7101210, 13354605, 2659080, -1800575,-14108036,-24878478, 1541286, }}}, - }}, - {{ /* k25519_precomp[17][ 3] */ - {{{ 2901347, -1117687, 3880376,-10059388,-17620940, -3612781,-21802117, -3567481, 20456845, -1885033, }}}, - {{{ 27019610, 12299467,-13658288, -1603234,-12861660, -4861471,-19540150, -5016058, 29439641, 15138866, }}}, - {{{ 21536104, -6626420,-32447818,-10690208,-22408077, 5175814, -5420040,-16361163, 7779328, 109896, }}}, - }}, - {{ /* k25519_precomp[17][ 4] */ - {{{ 30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075, }}}, - {{{ 26572847, 3405927,-31701700, 12890905,-19265668, 5335866, -6493768, 2378492, 4439158,-13279347, }}}, - {{{ -22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434,-12731527,-17717757, -5461437, }}}, - }}, - {{ /* k25519_precomp[17][ 5] */ - {{{ -5056483, 16566551, 15953661, 3767752,-10436499, 15627060, -820954, 2177225, 8550082,-15114165, }}}, - {{{ -18473302, 16596775, -381660, 15663611, 22860960, 15585581,-27844109, -3582739,-23260460, -8428588, }}}, - {{{ -32480551, 15707275, -8205912, -5652081, 29464558, 2713815,-22725137, 15860482,-21902570, 1494193, }}}, - }}, - {{ /* k25519_precomp[17][ 6] */ - {{{ -19562091,-14087393,-25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017, }}}, - {{{ -28464899, 1553205, 32536856,-10473729,-24691605, -406174, -8914625, -2933896,-29903758, 15553883, }}}, - {{{ 21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923,-12647961, }}}, - }}, - {{ /* k25519_precomp[17][ 7] */ - {{{ 8832269,-14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043, }}}, - {{{ 29306751, 5123106, 20245049,-14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663, }}}, - {{{ -20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362, }}}, - }}, - }, - { - {{ /* k25519_precomp[18][ 0] */ - {{{ -33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416,-12936300,-18319198, 10212860, }}}, - {{{ 2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298,-12506466, }}}, - {{{ -24645692, 13317462,-30449259,-15653928, 21365574,-10869657, 11344424, 864440, -2499677,-16710063, }}}, - }}, - {{ /* k25519_precomp[18][ 1] */ - {{{ -26432803, 6148329,-17184412,-14474154, 18782929, -275997,-22561534, 211300, 2719757, 4940997, }}}, - {{{ -1323882, 3911313, -6948744, 14759765,-30027150, 7851207, 21690126, 8518463, 26699843, 5276295, }}}, - {{{ -13149873, -6429067, 9396249, 365013, 24703301,-10488939, 1321586, 149635,-15452774, 7159369, }}}, - }}, - {{ /* k25519_precomp[18][ 2] */ - {{{ 9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385, }}}, - {{{ 18155857,-16504990, 19744716, 9006923, 15154154,-10538976, 24256460, -4864995,-22548173, 9334109, }}}, - {{{ 2986088, -4911893, 10776628, -3473844, 10620590, -7083203,-21413845, 14253545,-22587149, 536906, }}}, - }}, - {{ /* k25519_precomp[18][ 3] */ - {{{ 4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060,-15420424, }}}, - {{{ -19342404, 867880, 9277171, -3218459,-14431572, -1986443, 19295826,-15796950, 6378260, 699185, }}}, - {{{ 7895026, 4057113, -7081772,-13077756,-17886831, -323126, -716039, 15693155, -5045064,-13373962, }}}, - }}, - {{ /* k25519_precomp[18][ 4] */ - {{{ -7737563, -5869402,-14566319, -7406919, 11385654, 13201616, 31730678,-10962840, -3918636, -9669325, }}}, - {{{ 10188286,-15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568,-21786507, 5427593, }}}, - {{{ 696102, 13206899, 27047647,-10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404, }}}, - }}, - {{ /* k25519_precomp[18][ 5] */ - {{{ -11229439, 11243796,-17054270, -8040865, -788228, -8167967, -3897669, 11180504,-23169516, 7733644, }}}, - {{{ 17800790,-14036179,-27000429,-11766671, 23887827, 3149671, 23466177,-10538171, 10322027, 15313801, }}}, - {{{ 26246234, 11968874, 32263343, -5468728, 6830755,-13323031,-15794704, -101982,-24449242, 10890804, }}}, - }}, - {{ /* k25519_precomp[18][ 6] */ - {{{ -31365647, 10271363,-12660625, -6267268, 16690207,-13062544,-14982212, 16484931, 25180797, -5334884, }}}, - {{{ -586574, 10376444,-32586414,-11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577, }}}, - {{{ -9882808, -4510367, -2115506, 16457136,-11100081, 11674996, 30756178, -7515054, 30696930, -3712849, }}}, - }}, - {{ /* k25519_precomp[18][ 7] */ - {{{ 32988917, -9603412, 12499366, 7910787,-10617257,-11931514, -7342816, -9985397,-32349517, 7392473, }}}, - {{{ -8855661, 15927861, 9866406, -3649411, -2396914,-16655781,-30409476, -9134995, 25112947, -2926644, }}}, - {{{ -2504044, -436966, 25621774, -5678772, 15085042, -5479877,-24884878,-13526194, 5537438,-13914319, }}}, - }}, - }, - { - {{ /* k25519_precomp[19][ 0] */ - {{{ -11225584, 2320285, -9584280, 10149187,-33444663, 5808648,-14876251, -1729667, 31234590, 6090599, }}}, - {{{ -9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768, }}}, - {{{ -27757857, 247744,-15194774, -9002551, 23288161,-10011936,-23869595, 6503646, 20650474, 1804084, }}}, - }}, - {{ /* k25519_precomp[19][ 1] */ - {{{ -27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995,-10329713, 27842616, -202328, }}}, - {{{ -15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932,-11375082, 12714369, }}}, - {{{ 20807691, -7270825, 29286141, 11421711,-27876523,-13868230,-21227475, 1035546,-19733229, 12796920, }}}, - }}, - {{ /* k25519_precomp[19][ 2] */ - {{{ 12076899,-14301286, -8785001,-11848922,-25012791, 16400684,-17591495,-12899438, 3480665,-15182815, }}}, - {{{ -32361549, 5457597, 28548107, 7833186, 7303070,-11953545,-24363064,-15921875,-33374054, 2771025, }}}, - {{{ -21389266, 421932, 26597266, 6860826, 22486084, -6737172,-17137485, -4210226,-24552282, 15673397, }}}, - }}, - {{ /* k25519_precomp[19][ 3] */ - {{{ -20184622, 2338216, 19788685, -9620956, -4001265, -8740893,-20271184, 4733254, 3727144,-12934448, }}}, - {{{ 6120119, 814863,-11794402, -622716, 6812205,-15747771, 2019594, 7975683, 31123697,-10958981, }}}, - {{{ 30069250,-11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260,-16432438, 9648165, }}}, - }}, - {{ /* k25519_precomp[19][ 4] */ - {{{ 32705432, -1550977, 30705658, 7451065,-11805606, 9631813, 3305266, 5248604,-26008332,-11377501, }}}, - {{{ 17219865, 2375039,-31570947, -5575615,-19459679, 9219903, 294711, 15298639, 2662509,-16297073, }}}, - {{{ -1172927, -7558695, -4366770, -4287744,-21346413, -8434326, 32087529, -1222777, 32247248,-14389861, }}}, - }}, - {{ /* k25519_precomp[19][ 5] */ - {{{ 14312628, 1221556, 17395390, -8700143, -4945741, -8684635,-28197744, -9637817,-16027623,-13378845, }}}, - {{{ -1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211, }}}, - {{{ 18510800, 15337574, 26171504, 981392,-22241552, 7827556,-23491134,-11323352, 3059833,-11782870, }}}, - }}, - {{ /* k25519_precomp[19][ 6] */ - {{{ 10141598, 6082907, 17829293, -1947643, 9830092, 13613136,-25556636, -5544586,-33502212, 3592096, }}}, - {{{ 33114168,-15889352,-26525686,-13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803, }}}, - {{{ -32939165, -4255815, 23947181, -324178,-33072974,-12305637,-16637686, 3891704, 26353178, 693168, }}}, - }}, - {{ /* k25519_precomp[19][ 7] */ - {{{ 30374239, 1595580,-16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965, }}}, - {{{ -14370654, -7772529, 1510301, 6434173,-18784789, -6262728, 32732230,-13108839, 17901441, 16011505, }}}, - {{{ 18171223,-11934626,-12500402, 15197122,-11038147,-15230035,-19172240,-16046376, 8764035, 12309598, }}}, - }}, - }, - { - {{ /* k25519_precomp[20][ 0] */ - {{{ 5975908, -5243188,-19459362, -9681747,-11541277, 14015782,-23665757, 1228319, 17544096,-10593782, }}}, - {{{ 5811932, -1715293, 3442887, -2269310,-18367348, -8359541,-18044043,-15410127, -5565381, 12348900, }}}, - {{{ -31399660, 11407555, 25755363, 6891399, -3256938, 14872274,-24849353, 8141295,-10632534, -585479, }}}, - }}, - {{ /* k25519_precomp[20][ 1] */ - {{{ -12675304, 694026, -5076145, 13300344, 14015258,-14451394, -9698672,-11329050, 30944593, 1130208, }}}, - {{{ 8247766, -6710942,-26562381, -7709309,-14401939,-14648910, 4652152, 2488540, 23550156, -271232, }}}, - {{{ 17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719, }}}, - }}, - {{ /* k25519_precomp[20][ 2] */ - {{{ 16091085,-16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271, }}}, - {{{ -4910104,-13332887, 18550887, 10864893,-16459325, -7291596,-23028869,-13204905,-12748722, 2701326, }}}, - {{{ -8574695, 16099415, 4629974,-16340524,-20786213, -6005432,-10018363, 9276971, 11329923, 1862132, }}}, - }}, - {{ /* k25519_precomp[20][ 3] */ - {{{ 14763076,-15903608,-30918270, 3689867, 3511892, 10313526,-21951088, 12219231, -9037963, -940300, }}}, - {{{ 8894987, -3446094, 6150753, 3013931, 301220, 15693451,-31981216, -2909717,-15438168, 11595570, }}}, - {{{ 15214962, 3537601,-26238722,-14058872, 4418657,-15230761, 13947276, 10730794,-13489462, -4363670, }}}, - }}, - {{ /* k25519_precomp[20][ 4] */ - {{{ -2538306, 7682793, 32759013, 263109,-29984731, -7955452,-22332124,-10188635, 977108, 699994, }}}, - {{{ -12466472, 4195084, -9211532, 550904,-15565337, 12917920, 19118110, -439841,-30534533,-14337913, }}}, - {{{ 31788461,-14507657, 4799989, 7372237, 8808585,-14747943, 9408237,-10051775, 12493932, -5409317, }}}, - }}, - {{ /* k25519_precomp[20][ 5] */ - {{{ -25680606, 5260744,-19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730, }}}, - {{{ 842132, -2794693, -4763381, -8722815, 26332018,-12405641, 11831880, 6985184, -9940361, 2854096, }}}, - {{{ -4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078, }}}, - }}, - {{ /* k25519_precomp[20][ 6] */ - {{{ -15218652, 14667096,-13336229, 2013717, 30598287, -464137,-31504922, -7882064, 20237806, 2838411, }}}, - {{{ -19288047, 4453152, 15298546,-16178388, 22115043,-15972604, 12544294,-13470457, 1068881,-12499905, }}}, - {{{ -9558883,-16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654, }}}, - }}, - {{ /* k25519_precomp[20][ 7] */ - {{{ -28198521, 10744108, -2958380, 10199664, 7759311,-13088600, 3409348, -873400, -6482306,-12885870, }}}, - {{{ -23561822, 6230156,-20382013, 10655314,-24040585,-11621172, 10477734, -1240216, -3113227, 13974498, }}}, - {{{ 12966261, 15550616,-32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579, }}}, - }}, - }, - { - {{ /* k25519_precomp[21][ 0] */ - {{{ 14741879,-14946887, 22177208,-11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677, }}}, - {{{ 10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647, }}}, - {{{ -2453894, 15725973,-20436342,-10410672, -5803908,-11040220, -7135870,-11642895, 18047436,-15281743, }}}, - }}, - {{ /* k25519_precomp[21][ 1] */ - {{{ -25173001,-11307165, 29759956, 11776784,-22262383,-15820455, 10993114,-12850837,-17620701, -9408468, }}}, - {{{ 21987233, 700364,-24505048, 14972008, -7774265, -5718395, 32155026, 2581431,-29958985, 8773375, }}}, - {{{ -25568350, 454463,-13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389,-13920155, }}}, - }}, - {{ /* k25519_precomp[21][ 2] */ - {{{ 6028182, 6263078,-31011806,-11301710, -818919, 2461772,-31841174, -5468042, -1721788, -2776725, }}}, - {{{ -12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612, }}}, - {{{ -10358094, -8237829, 19549651,-12169222, 22082623, 16147817, 20613181, 13982702,-10339570, 5067943, }}}, - }}, - {{ /* k25519_precomp[21][ 3] */ - {{{ -30505967, -3821767, 12074681, 13582412,-19877972, 2443951,-19719286, 12746132, 5331210,-10105944, }}}, - {{{ 30528811, 3601899, -1957090, 4619785,-27361822,-15436388, 24180793,-12570394, 27679908, -1648928, }}}, - {{{ 9402404,-13957065, 32834043, 10838634,-26580150,-13237195, 26653274, -8685565, 22611444,-12715406, }}}, - }}, - {{ /* k25519_precomp[21][ 4] */ - {{{ 22190590, 1118029, 22736441, 15130463,-30460692, -5991321, 19189625, -4648942, 4854859, 6622139, }}}, - {{{ -8310738, -2953450, -8262579, -3388049,-10401731, -271929, 13424426, -3567227, 26404409, 13001963, }}}, - {{{ -31241838,-15415700, -2994250, 8939346, 11562230,-12840670,-26064365,-11621720,-15405155, 11020693, }}}, - }}, - {{ /* k25519_precomp[21][ 5] */ - {{{ 1866042, -7949489, -7898649,-10301010, 12483315, 13477547, 3175636,-12424163, 28761762, 1406734, }}}, - {{{ -448555, -1777666, 13018551, 3194501, -9580420,-11161737, 24760585, -4347088, 25577411,-13378680, }}}, - {{{ -24290378, 4759345, -690653, -1852816, 2066747, 10693769,-29595790, 9884936, -9368926, 4745410, }}}, - }}, - {{ /* k25519_precomp[21][ 6] */ - {{{ -9141284, 6049714,-19531061, -4341411,-31260798, 9944276,-15462008,-11311852, 10931924,-11931931, }}}, - {{{ -16561513, 14112680, -8012645, 4817318, -8040464,-11414606,-22853429, 10856641,-20470770, 13434654, }}}, - {{{ 22759489,-10073434,-16766264, -1871422, 13637442,-10168091, 1765144,-12654326, 28445307, -5364710, }}}, - }}, - {{ /* k25519_precomp[21][ 7] */ - {{{ 29875063, 12493613, 2795536, -3786330, 1710620, 15181182,-10195717, -8788675, 9074234, 1167180, }}}, - {{{ -26205683, 11014233, -9842651, -2635485,-26908120, 7532294,-18716888, -9535498, 3843903, 9367684, }}}, - {{{ -10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895, }}}, - }}, - }, - { - {{ /* k25519_precomp[22][ 0] */ - {{{ 22092954,-13191123, -2042793,-11968512, 32186753,-11517388, -6574341, 2470660,-27417366, 16625501, }}}, - {{{ -11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725,-27351616, 14247413, }}}, - {{{ 6314175,-10264892,-32772502, 15957557,-10157730, 168750, -8618807, 14290061, 27108877, -1180880, }}}, - }}, - {{ /* k25519_precomp[22][ 1] */ - {{{ -8586597, -7170966, 13241782, 10960156,-32991015,-13794596, 33547976,-11058889,-27148451, 981874, }}}, - {{{ 22833440, 9293594,-32649448,-13618667, -9136966, 14756819,-22928859,-13970780,-10479804,-16197962, }}}, - {{{ -7768587, 3326786,-28111797, 10783824, 19178761, 14905060, 22680049, 13906969,-15933690, 3797899, }}}, - }}, - {{ /* k25519_precomp[22][ 2] */ - {{{ 21721356, -4212746,-12206123, 9310182, -3882239,-13653110, 23740224, -2709232, 20491983, -8042152, }}}, - {{{ 9209270,-15135055,-13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063, }}}, - {{{ 7392032, 16618386, 23946583, -8039892,-13265164, -1533858,-14197445, -2321576, 17649998, -250080, }}}, - }}, - {{ /* k25519_precomp[22][ 3] */ - {{{ -9301088,-14193827, 30609526, -3049543,-25175069, -1283752,-15241566, -9525724, -2233253, 7662146, }}}, - {{{ -17558673, 1763594,-33114336, 15908610,-30040870,-12174295, 7335080, -8472199, -3174674, 3440183, }}}, - {{{ -19889700, -5977008,-24111293, -9688870, 10799743,-16571957, 40450, -4431835, 4862400, 1133, }}}, - }}, - {{ /* k25519_precomp[22][ 4] */ - {{{ -32856209, -7873957, -5422389, 14860950,-16319031, 7956142, 7258061, 311861,-30594991, -7379421, }}}, - {{{ -3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622, }}}, - {{{ -4381906, 8508652,-19898366, -3674424, -5984453, 15149970,-13313598, 843523,-21875062, 13626197, }}}, - }}, - {{ /* k25519_precomp[22][ 5] */ - {{{ 2281448,-13487055,-10915418, -2609910, 1879358, 16164207,-10783882, 3953792, 13340839, 15928663, }}}, - {{{ 31727126, -7179855,-18437503, -8283652, 2875793,-16390330,-25269894, -7014826,-23452306, 5964753, }}}, - {{{ 4100420, -5959452,-17179337, 6017714,-18705837, 12227141,-26684835, 11344144, 2538215, -7570755, }}}, - }}, - {{ /* k25519_precomp[22][ 6] */ - {{{ -9433605, 6123113, 11159803, -2156608, 30016280, 14966241,-20474983, 1485421, -629256,-15958862, }}}, - {{{ -26804558, 4260919, 11851389, 9658551,-32017107, 16367492,-20205425,-13191288, 11659922,-11115118, }}}, - {{{ 26180396, 10015009,-30844224, -8581293, 5418197, 9480663, 2231568,-10170080, 33100372, -1306171, }}}, - }}, - {{ /* k25519_precomp[22][ 7] */ - {{{ 15121113, -5201871,-10389905, 15427821,-27509937,-15992507, 21670947, 4486675, -5931810,-14466380, }}}, - {{{ 16166486, -9483733,-11104130, 6023908,-31926798, -1364923, 2340060,-16254968,-10735770,-10039824, }}}, - {{{ 28042865, -3557089,-12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270, }}}, - }}, - }, - { - {{ /* k25519_precomp[23][ 0] */ - {{{ -817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431,-14117438, }}}, - {{{ -31031306,-14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292,-20095739, 11763584, }}}, - {{{ -594563, -2514283,-32234153, 12643980, 12650761, 14811489, 665117,-12613632,-19773211,-10713562, }}}, - }}, - {{ /* k25519_precomp[23][ 1] */ - {{{ 30464590,-11262872, -4127476,-12734478, 19835327, -7105613,-24396175, 2075773,-17020157, 992471, }}}, - {{{ 18357185, -6994433, 7766382, 16342475,-29324918, 411174, 14578841, 8080033,-11574335,-10601610, }}}, - {{{ 19598397, 10334610, 12555054, 2555664, 18821899,-10339780, 21873263, 16014234, 26224780, 16452269, }}}, - }}, - {{ /* k25519_precomp[23][ 2] */ - {{{ -30223925, 5145196, 5944548, 16385966, 3976735, 2009897,-11377804, -7618186,-20533829, 3698650, }}}, - {{{ 14187449, 3448569,-10636236,-10810935,-22663880, -3433596, 7268410,-10890444, 27394301, 12015369, }}}, - {{{ 19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777,-13259127, -3402461, }}}, - }}, - {{ /* k25519_precomp[23][ 3] */ - {{{ 30860103, 12735208, -1888245, -4699734,-16974906, 2256940, -8166013, 12298312, -8550524,-10393462, }}}, - {{{ -5719826,-11245325, -1910649, 15569035, 26642876, -7587760, -5789354,-15118654, -4976164, 12651793, }}}, - {{{ -2848395, 9953421, 11531313, -5282879, 26895123,-12697089,-13118820,-16517902, 9768698, -2533218, }}}, - }}, - {{ /* k25519_precomp[23][ 4] */ - {{{ -24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226, }}}, - {{{ 18860224, 15980149,-18987240, -1562570,-26233012,-11071856, -7843882, 13944024,-24372348, 16582019, }}}, - {{{ -15504260, 4970268,-29893044, 4175593,-20993212, -2199756,-11704054, 15444560,-11003761, 7989037, }}}, - }}, - {{ /* k25519_precomp[23][ 5] */ - {{{ 31490452, 5568061, -2412803, 2182383,-32336847, 4531686,-32078269, 6200206,-19686113,-14800171, }}}, - {{{ -17308668,-15879940,-31522777, -2831,-32887382, 16375549, 8680158,-16371713, 28550068, -6857132, }}}, - {{{ -28126887, -5688091, 16837845, -1820458, -6850681, 12700016,-30039981, 4364038, 1155602, 5988841, }}}, - }}, - {{ /* k25519_precomp[23][ 6] */ - {{{ 21890435,-13272907,-12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181, }}}, - {{{ -33136107,-10512751, 9975416, 6841041,-31559793, 16356536, 3070187, -7025928, 1466169, 10740210, }}}, - {{{ -1509399,-15488185,-13503385,-10655916, 32799044, 909394,-13938903, -5779719,-32164649,-15327040, }}}, - }}, - {{ /* k25519_precomp[23][ 7] */ - {{{ 3960823,-14267803,-28026090,-15918051,-19404858, 13146868, 15567327, 951507, -3260321, -573935, }}}, - {{{ 24740841, 5052253,-30094131, 8961361, 25877428, 6165135,-24368180, 14397372, -7380369, -6144105, }}}, - {{{ -28888365, 3510803,-28103278, -1158478,-11238128,-10631454,-15441463,-14453128, -1625486, -6494814, }}}, - }}, - }, - { - {{ /* k25519_precomp[24][ 0] */ - {{{ 793299, -9230478, 8836302, -6235707,-27360908, -2369593, 33152843, -4885251, -9906200, -621852, }}}, - {{{ 5666233, 525582, 20782575, -8038419,-24538499, 14657740, 16099374, 1468826, -6171428,-15186581, }}}, - {{{ -4859255, -3779343, -2917758, -6748019, 7778750, 11688288,-30404353, -9871238, -1558923, -9863646, }}}, - }}, - {{ /* k25519_precomp[24][ 1] */ - {{{ 10896332, -7719704, 824275, 472601,-19460308, 3009587, 25248958, 14783338,-30581476,-15757844, }}}, - {{{ 10566929, 12612572,-31944212, 11118703,-12633376, 12362879, 21752402, 8822496, 24003793, 14264025, }}}, - {{{ 27713862, -7355973,-11008240, 9227530, 27050101, 2504721, 23886875,-13117525, 13958495, -5732453, }}}, - }}, - {{ /* k25519_precomp[24][ 2] */ - {{{ -23481610, 4867226,-27247128, 3900521, 29838369, -8212291,-31889399,-10041781, 7340521,-15410068, }}}, - {{{ 4646514, -8011124,-22766023,-11532654, 23184553, 8566613, 31366726, -1381061,-15066784,-10375192, }}}, - {{{ -17270517, 12723032,-16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921, }}}, - }}, - {{ /* k25519_precomp[24][ 3] */ - {{{ -9064912, 2103172, 25561640,-15125738, -5239824, 9582958, 32477045, -9017955, 5002294,-15550259, }}}, - {{{ -12057553,-11177906, 21115585,-13365155, 8808712,-12030708, 16489530, 13378448,-25845716, 12741426, }}}, - {{{ -5946367, 10645103,-30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072, }}}, - }}, - {{ /* k25519_precomp[24][ 4] */ - {{{ -17335748, -9107057,-24531279, 9434953, -8472084, -583362,-13090771, 455841, 20461858, 5491305, }}}, - {{{ 13669248,-16095482,-12481974,-10203039,-14569770,-11893198,-24995986, 11293807,-28588204, -9421832, }}}, - {{{ 28497928, 6272777,-33022994, 14470570, 8906179, -1225630, 18504674,-14165166, 29867745, -8795943, }}}, - }}, - {{ /* k25519_precomp[24][ 5] */ - {{{ -16207023, 13517196,-27799630,-13697798, 24009064, -6373891, -6367600,-13175392, 22853429, -4012011, }}}, - {{{ 24191378, 16712145,-13931797, 15217831, 14542237, 1646131, 18603514,-11037887, 12876623, -2112447, }}}, - {{{ 17902668, 4518229, -411702, -2829247, 26878217, 5258055,-12860753, 608397, 16031844, 3723494, }}}, - }}, - {{ /* k25519_precomp[24][ 6] */ - {{{ -28632773, 12763728,-20446446, 7577504, 33001348,-13017745, 17558842, -7872890, 23896954, -4314245, }}}, - {{{ -20005381,-12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859, }}}, - {{{ 28816045, 298879,-28165016,-15920938, 19000928, -1665890,-12680833, -2949325,-18051778, -2082915, }}}, - }}, - {{ /* k25519_precomp[24][ 7] */ - {{{ 16000882, -344896, 3493092,-11447198,-29504595,-13159789, 12577740, 16041268,-19715240, 7847707, }}}, - {{{ 10151868, 10572098, 27312476, 7922682, 14825339, 4723128,-32855931, -6519018,-10020567, 3852848, }}}, - {{{ -11430470, 15697596,-21121557, -4420647, 5386314, 15063598, 16514493,-15932110, 29330899,-15076224, }}}, - }}, - }, - { - {{ /* k25519_precomp[25][ 0] */ - {{{ -25499735, -4378794,-15222908, -6901211, 16615731, 2051784, 3303702, 15490,-27548796, 12314391, }}}, - {{{ 15683520, -6003043, 18109120, -9980648, 15337968, -5997823,-16717435, 15921866, 16103996, -3731215, }}}, - {{{ -23169824,-10781249, 13588192, -1628807, -3798557, -1074929,-19273607, 5402699,-29815713, -9841101, }}}, - }}, - {{ /* k25519_precomp[25][ 1] */ - {{{ 23190676, 2384583,-32714340, 3462154,-29903655, -1529132,-11266856, 8911517,-25205859, 2739713, }}}, - {{{ 21374101, -3554250,-33524649, 9874411, 15377179, 11831242,-33529904, 6134907, 4931255, 11987849, }}}, - {{{ -7732, -2978858,-16223486, 7277597, 105524, -322051,-31480539, 13861388,-30076310, 10117930, }}}, - }}, - {{ /* k25519_precomp[25][ 2] */ - {{{ -29501170,-10744872,-26163768, 13051539,-25625564, 5089643, -6325503, 6704079, 12890019, 15728940, }}}, - {{{ -21972360,-11771379, -951059, -4418840, 14704840, 2695116, 903376,-10428139, 12885167, 8311031, }}}, - {{{ -17516482, 5352194, 10384213,-13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404, }}}, - }}, - {{ /* k25519_precomp[25][ 3] */ - {{{ -25817338, -3107312,-13494599, -3182506, 30896459,-13921729,-32251644,-12707869,-19464434, -3340243, }}}, - {{{ -23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116, }}}, - {{{ -24830458,-12733720,-15165978, 10367250,-29530908, -265356, 22825805, -7087279,-16866484, 16176525, }}}, - }}, - {{ /* k25519_precomp[25][ 4] */ - {{{ -23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182,-10363426,-28746253,-10197509, }}}, - {{{ -10626600, -4486402,-13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883, }}}, - {{{ 15030977, 5768825,-27451236, -2887299, -6427378,-15361371,-15277896, -6809350, 2051441,-15225865, }}}, - }}, - {{ /* k25519_precomp[25][ 5] */ - {{{ -3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398,-14154188,-22686354, 16633660, }}}, - {{{ 4577086,-16752288, 13249841,-15304328, 19958763,-14537274, 18559670,-10759549, 8402478, -9864273, }}}, - {{{ -28406330, -1051581,-26790155, -907698,-17212414,-11030789, 9453451,-14980072, 17983010, 9967138, }}}, - }}, - {{ /* k25519_precomp[25][ 6] */ - {{{ -25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560, }}}, - {{{ -10420457, -4118111, 14584639, 15971087,-15768321, 8861010, 26556809, -5574557,-18553322,-11357135, }}}, - {{{ 2839101, 14284142, 4029895, 3472686, 14402957, 12689363,-26642121, 8459447, -5605463, -7621941, }}}, - }}, - {{ /* k25519_precomp[25][ 7] */ - {{{ -4839289, -3535444, 9744961, 2871048, 25113978, 3187018,-25110813, -849066, 17258084, -7977739, }}}, - {{{ 18164541,-10595176,-17154882, -1542417, 19237078, -9745295, 23357533,-15217008, 26908270, 12150756, }}}, - {{{ -30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701,-32302074, 16215819, }}}, - }}, - }, - { - {{ /* k25519_precomp[26][ 0] */ - {{{ -6898905, 9824394,-12304779, -4401089,-31397141, -6276835, 32574489, 12532905, -7503072, -8675347, }}}, - {{{ -27343522,-16515468,-27151524,-10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028, }}}, - {{{ 21260961, -8424752,-16831886,-11920822,-23677961, 3968121, -3651949, -6215466, -3556191, -7913075, }}}, - }}, - {{ /* k25519_precomp[26][ 1] */ - {{{ 16544754, 13250366,-16804428, 15546242, -4583003, 12757258, -2462308, -8680336,-18907032, -9662799, }}}, - {{{ -2415239,-15577728, 18312303, 4964443,-15272530,-12653564, 26820651, 16690659, 25459437, -4564609, }}}, - {{{ -25144690, 11425020, 28423002,-11020557, -6144921,-15826224, 9142795, -2391602, -6432418, -1644817, }}}, - }}, - {{ /* k25519_precomp[26][ 2] */ - {{{ -23104652, 6253476, 16964147, -3768872,-25113972,-12296437,-27457225,-16344658, 6335692, 7249989, }}}, - {{{ -30333227, 13979675, 7503222,-12368314,-11956721, -4621693,-30272269, 2682242, 25993170,-12478523, }}}, - {{{ 4364628, 5930691, 32304656,-10044554, -8054781, 15091131, 22857016,-10598955, 31820368, 15075278, }}}, - }}, - {{ /* k25519_precomp[26][ 3] */ - {{{ 31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886,-17970238, 12833045, }}}, - {{{ 19073683, 14851414,-24403169,-11860168, 7625278, 11091125,-19619190, 2074449, -9413939, 14905377, }}}, - {{{ 24483667,-11935567, -2518866,-11547418, -1553130, 15355506,-25282080, 9253129, 27628530, -7555480, }}}, - }}, - {{ /* k25519_precomp[26][ 4] */ - {{{ 17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582,-14110875, 15297016, }}}, - {{{ 510886, 14337390,-31785257, 16638632, 6328095, 2713355,-20217417,-11864220, 8683221, 2921426, }}}, - {{{ 18606791, 11874196, 27155355, -5281482,-24031742, 6265446,-25178240, -1278924, 4674690, 13890525, }}}, - }}, - {{ /* k25519_precomp[26][ 5] */ - {{{ 13609624, 13069022,-27372361,-13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396, }}}, - {{{ 9922506, -519394, 13613107, 5883594,-18758345, -434263,-12304062, 8317628, 23388070, 16052080, }}}, - {{{ 12720016, 11937594,-31970060, -5028689, 26900120, 8561328,-20155687,-11632979,-14754271,-10812892, }}}, - }}, - {{ /* k25519_precomp[26][ 6] */ - {{{ 15961858, 14150409, 26716931, -665832,-22794328, 13603569, 11829573, 7467844,-28822128, 929275, }}}, - {{{ 11038231,-11582396,-27310482, -7316562,-10498527,-16307831,-23479533, -9371869,-21393143, 2465074, }}}, - {{{ 20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140, }}}, - }}, - {{ /* k25519_precomp[26][ 7] */ - {{{ -16358878,-12663911,-12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717, }}}, - {{{ -1731589,-15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101, }}}, - {{{ 24536016,-16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159,-28377538, 10048127, }}}, - }}, - }, - { - {{ /* k25519_precomp[27][ 0] */ - {{{ -12622226, -6204820, 30718825, 2591312,-10617028, 12192840, 18873298, -7297090,-32297756, 15221632, }}}, - {{{ -26478122,-11103864, 11546244, -1852483, 9180880, 7656409,-21343950, 2095755, 29769758, 6593415, }}}, - {{{ -31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160, }}}, - }}, - {{ /* k25519_precomp[27][ 1] */ - {{{ 31429822,-13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876, }}}, - {{{ 22648901, 1402143,-22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625, }}}, - {{{ -15491917, 8012313, -2514730,-12702462,-23965846,-10254029, -1612713, -1535569,-16664475, 8194478, }}}, - }}, - {{ /* k25519_precomp[27][ 2] */ - {{{ 27338066, -7507420, -7414224, 10140405,-19026427, -6589889, 27277191, 8855376, 28572286, 3005164, }}}, - {{{ 26287124, 4821776, 25476601, -4145903, -3764513,-15788984,-18008582, 1182479,-26094821,-13079595, }}}, - {{{ -7171154, 3178080, 23970071, 6201893,-17195577, -4489192,-21876275,-13982627, 32208683, -1198248, }}}, - }}, - {{ /* k25519_precomp[27][ 3] */ - {{{ -16657702, 2817643,-10286362, 14811298, 6024667, 13349505,-27315504,-10497842,-27672585,-11539858, }}}, - {{{ 15941029, -9405932,-21367050, 8062055, 31876073, -238629,-15278393, -1444429, 15397331, -4130193, }}}, - {{{ 8934485,-13485467,-23286397,-13423241,-32446090, 14047986, 31170398, -1441021,-27505566, 15087184, }}}, - }}, - {{ /* k25519_precomp[27][ 4] */ - {{{ -18357243, -2156491, 24524913,-16677868, 15520427, -6360776,-15502406, 11461896, 16788528, -5868942, }}}, - {{{ -1947386, 16013773, 21750665, 3714552,-17401782,-16055433, -3770287,-10323320, 31322514,-11615635, }}}, - {{{ 21426655, -5650218,-13648287, -5347537,-28812189, -4920970,-18275391,-14621414, 13040862,-12112948, }}}, - }}, - {{ /* k25519_precomp[27][ 5] */ - {{{ 11293895, 12478086,-27136401, 15083750,-29307421, 14748872, 14555558,-13417103, 1613711, 4896935, }}}, - {{{ -25894883, 15323294, -8489791, -8057900, 25967126,-13425460, 2825960, -4897045,-23971776,-11267415, }}}, - {{{ -15924766, -5229880,-17443532, 6410664, 3622847, 10243618, 20615400, 12405433,-23753030, -8436416, }}}, - }}, - {{ /* k25519_precomp[27][ 6] */ - {{{ -7091295, 12556208,-20191352, 9025187,-17072479, 4333801, 4378436, 2432030, 23097949, -566018, }}}, - {{{ 4565804,-16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221,-18512313, 2424778, }}}, - {{{ 366633,-11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659, }}}, - }}, - {{ /* k25519_precomp[27][ 7] */ - {{{ -24001791, 7690286, 14929416, -168257,-32210835,-13412986, 24162697,-15326504, -3141501, 11179385, }}}, - {{{ 18289522,-14724954, 8056945, 16430056,-21729724, 7842514, -6001441, -1486897,-18684645,-11443503, }}}, - {{{ 476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329, }}}, - }}, - }, - { - {{ /* k25519_precomp[28][ 0] */ - {{{ 20678546, -8375738,-32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056, }}}, - {{{ -13644050,-10350239,-15962508, 5075808, -1514661,-11534600,-33102500, 9160280, 8473550, -3256838, }}}, - {{{ 24900749, 14435722, 17209120,-15292541,-22592275, 9878983, -7689309,-16335821,-24568481, 11788948, }}}, - }}, - {{ /* k25519_precomp[28][ 1] */ - {{{ -3118155,-11395194,-13802089, 14797441, 9652448, -6845904,-20037437, 10410733,-24568470, -1458691, }}}, - {{{ -15659161, 16736706,-22467150, 10215878, -9097177, 7563911, 11871841,-12505194,-18513325, 8464118, }}}, - {{{ -23400612, 8348507,-14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517, }}}, - }}, - {{ /* k25519_precomp[28][ 2] */ - {{{ -20186973, -4967935, 22367356, 5271547, -1097117, -4788838,-24805667,-10236854, -8940735, -5818269, }}}, - {{{ -6948785, -1795212,-32625683,-16021179, 32635414, -7374245, 15989197,-12838188, 28358192, -4253904, }}}, - {{{ -23561781, -2799059,-32351682, -1661963, -9147719, 10429267,-16637684, 4072016, -5351664, 5596589, }}}, - }}, - {{ /* k25519_precomp[28][ 3] */ - {{{ -28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193, }}}, - {{{ -7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991,-24660491, 3442910, }}}, - {{{ -30210571, 5124043, 14181784, 8197961, 18964734,-11939093, 22597931, 7176455,-18585478, 13365930, }}}, - }}, - {{ /* k25519_precomp[28][ 4] */ - {{{ -7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667, }}}, - {{{ 25008904,-10771599, -4305031, -9638010, 16265036, 15721635, 683793,-11823784, 15723479,-15163481, }}}, - {{{ -9660625, 12374379,-27006999, -7026148, -7724114,-12314514, 11879682, 5400171, 519526, -1235876, }}}, - }}, - {{ /* k25519_precomp[28][ 5] */ - {{{ 22258397,-16332233, -7869817, 14613016,-22520255, -2950923,-20353881, 7315967, 16648397, 7605640, }}}, - {{{ -8081308, -8464597, -8223311, 9719710, 19259459,-15348212, 23994942, -5281555, -9468848, 4763278, }}}, - {{{ -21699244, 9220969,-15730624, 1084137,-25476107, -2852390, 31088447, -7764523,-11356529, 728112, }}}, - }}, - {{ /* k25519_precomp[28][ 6] */ - {{{ 26047220,-11751471, -6900323,-16521798, 24092068, 9158119, -4273545,-12555558,-29365436, -5498272, }}}, - {{{ 17510331, -322857, 5854289, 8403524, 17133918, -3112612,-28111007, 12327945, 10750447, 10014012, }}}, - {{{ -10312768, 3936952, 9156313, -8897683, 16498692, -994647,-27481051, -666732, 3424691, 7540221, }}}, - }}, - {{ /* k25519_precomp[28][ 7] */ - {{{ 30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422,-16317219, -9244265, 15258046, }}}, - {{{ 13054562, -2779497, 19155474, 469045,-12482797, 4566042, 5631406, 2711395, 1062915, -5136345, }}}, - {{{ -19240248,-11254599,-29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310, }}}, - }}, - }, - { - {{ /* k25519_precomp[29][ 0] */ - {{{ 19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003,-11174937, }}}, - {{{ 31395534, 15098109, 26581030, 8030562,-16527914, -5007134, 9012486, -7584354, -6643087, -5442636, }}}, - {{{ -9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543,-32294889, -6456008, }}}, - }}, - {{ /* k25519_precomp[29][ 1] */ - {{{ -2444496, -149937, 29348902, 8186665, 1873760, 12489863,-30934579, -7839692, -7852844, -8138429, }}}, - {{{ -15236356,-15433509, 7766470, 746860, 26346930,-10221762,-27333451, 10754588, -9431476, 5203576, }}}, - {{{ 31834314, 14135496, -770007, 5159118, 20917671,-16768096, -7467973, -7337524, 31809243, 7347066, }}}, - }}, - {{ /* k25519_precomp[29][ 2] */ - {{{ -9606723,-11874240, 20414459, 13033986, 13716524,-11691881, 19797970,-12211255, 15192876, -2087490, }}}, - {{{ -12663563, -2181719, 1168162, -3804809, 26747877,-14138091, 10609330, 12694420, 33473243,-13382104, }}}, - {{{ 33184999, 11180355, 15832085,-11385430, -1633671, 225884, 15089336,-11023903, -6135662, 14480053, }}}, - }}, - {{ /* k25519_precomp[29][ 3] */ - {{{ 31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275, }}}, - {{{ -20318852,-15150239, 10933843,-16178022, 8335352, -7546022,-31008351,-12610604, 26498114, 66511, }}}, - {{{ 22644454, -8761729,-16671776, 4884562, -3105614,-13559366, 30540766, -4286747,-13327787, -7515095, }}}, - }}, - {{ /* k25519_precomp[29][ 4] */ - {{{ -28017847, 9834845, 18617207, -2681312, -3401956,-13307506, 8205540, 13585437,-17127465, 15115439, }}}, - {{{ 23711543, -672915, 31206561, -8362711, 6164647, -9709987,-33535882, -1426096, 8236921, 16492939, }}}, - {{{ -23910559,-13515526,-26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424, }}}, - }}, - {{ /* k25519_precomp[29][ 5] */ - {{{ 2101391, -4930054, 19702731, 2367575,-15427167, 1047675, 5301017, 9328700, 29955601,-11678310, }}}, - {{{ 3096359, 9271816,-21620864,-15521844,-14847996, -7592937,-25892142,-12635595, -9917575, 6216608, }}}, - {{{ -32615849, 338663,-25195611, 2510422,-29213566,-13820213, 24822830, -6146567,-26767480, 7525079, }}}, - }}, - {{ /* k25519_precomp[29][ 6] */ - {{{ -23066649,-13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495,-19386633, 11994101, }}}, - {{{ 21691500,-13624626, -641331,-14367021, 3285881, -3483596,-25064666, 9718258, -7477437, 13381418, }}}, - {{{ 18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576, }}}, - }}, - {{ /* k25519_precomp[29][ 7] */ - {{{ 30098053, 3089662, -9234387, 16662135,-21306940, 11308411,-14068454, 12021730, 9955285,-16303356, }}}, - {{{ 9734894,-14576830, -7473633, -9138735, 2060392, 11313496,-18426029, 9924399, 20194861, 13380996, }}}, - {{{ -26378102, -7965207,-22167821, 15789297,-18055342, -6168792, -1984914, 15707771, 26342023, 10146099, }}}, - }}, - }, - { - {{ /* k25519_precomp[30][ 0] */ - {{{ -26016874, -219943, 21339191, -41388, 19745256, -2878700,-29637280, 2227040, 21612326, -545728, }}}, - {{{ -13077387, 1184228, 23562814, -5970442,-20351244, -6348714, 25764461, 12243797,-20856566, 11649658, }}}, - {{{ -10031494, 11262626, 27384172, 2271902, 26947504,-15997771, 39944, 6114064, 33514190, 2333242, }}}, - }}, - {{ /* k25519_precomp[30][ 1] */ - {{{ -21433588,-12421821, 8119782, 7219913,-21830522, -9016134, -6679750,-12670638, 24350578,-13450001, }}}, - {{{ -4116307,-11271533,-23886186, 4843615,-30088339, 690623,-31536088,-10406836, 8317860, 12352766, }}}, - {{{ 18200138,-14475911,-33087759, -2696619,-23702521, -9102511,-23552096, -2287550, 20712163, 6719373, }}}, - }}, - {{ /* k25519_precomp[30][ 2] */ - {{{ 26656208, 6075253, -7858556, 1886072,-28344043, 4262326, 11117530, -3763210, 26224235, -3297458, }}}, - {{{ -17168938,-14854097, -3395676,-16369877,-19954045, 14050420, 21728352, 9493610, 18620611,-16428628, }}}, - {{{ -13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556,-30701573,-16479657, }}}, - }}, - {{ /* k25519_precomp[30][ 3] */ - {{{ -23860538,-11233159, 26961357, 1640861,-32413112,-16737940, 12248509, -5240639, 13735342, 1934062, }}}, - {{{ 25089769, 6742589, 17081145,-13406266, 21909293,-16067981,-15136294, -3765346,-21277997, 5473616, }}}, - {{{ 31883677, -7961101, 1083432,-11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014, }}}, - }}, - {{ /* k25519_precomp[30][ 4] */ - {{{ 24244947,-15050407,-26262976, 2791540,-14997599, 16666678, 24367466, 6388839,-10295587, 452383, }}}, - {{{ -25640782, -3417841, 5217916, 16224624, 19987036, -4082269,-24236251, -5915248, 15766062, 8407814, }}}, - {{{ -20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718, }}}, - }}, - {{ /* k25519_precomp[30][ 5] */ - {{{ 30157918, 12924066,-17712050, 9245753, 19895028, 3368142,-23827587, 5096219, 22740376, -7303417, }}}, - {{{ 2041139,-14256350, 7783687, 13876377,-25946985,-13352459, 24051124, 13742383,-15637599, 13295222, }}}, - {{{ 33338237, -8505733, 12532113, 7977527, 9106186, -1715251,-17720195, -4612972, -4451357,-14669444, }}}, - }}, - {{ /* k25519_precomp[30][ 6] */ - {{{ -20045281, 5454097,-14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597, }}}, - {{{ 23208068, 7979712, 33071466, 8149229, 1758231,-10834995, 30945528, -1694323,-33502340,-14767970, }}}, - {{{ 1439958,-16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170,-11440799, }}}, - }}, - {{ /* k25519_precomp[30][ 7] */ - {{{ -5037580,-13028295, -2970559, -3061767, 15640974, -6701666,-26739026, 926050, -1684339,-13333647, }}}, - {{{ 13908495, -3549272, 30919928, -6273825,-21521863, 7989039, 9021034, 9078865, 3353509, 4033511, }}}, - {{{ -29663431,-15113610, 32259991, -344482, 24295849,-12912123, 23161163, 8839127, 27485041, 7356032, }}}, - }}, - }, - { - {{ /* k25519_precomp[31][ 0] */ - {{{ 9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036,-16771834, }}}, - {{{ -23839233, -8311415,-25945511, 7480958,-17681669, -8354183,-22545972, 14150565, 15970762, 4099461, }}}, - {{{ 29262576, 16756590, 26350592, -8793563, 8529671,-11208050, 13617293, -9937143, 11465739, 8317062, }}}, - }}, - {{ /* k25519_precomp[31][ 1] */ - {{{ -25493081, -6962928, 32500200, -9419051,-23038724, -2302222, 14898637, 3848455, 20969334, -5157516, }}}, - {{{ -20384450,-14347713,-18336405, 13884722,-33039454, 2842114,-21610826, -3649888, 11177095, 14989547, }}}, - {{{ -24496721,-11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286,-28487508, 9930240, }}}, - }}, - {{ /* k25519_precomp[31][ 2] */ - {{{ -17751622, -2097826, 16544300,-13009300,-15914807,-14949081, 18345767,-13403753, 16291481, -5314038, }}}, - {{{ -33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741, }}}, - {{{ 16660756, 7281060,-10830758, 12911820, 20108584, -8101676,-21722536, -8613148, 16250552,-11111103, }}}, - }}, - {{ /* k25519_precomp[31][ 3] */ - {{{ -19765507, 2390526,-16551031, 14161980, 1905286, 6414907, 4689584, 10604807,-30190403, 4782747, }}}, - {{{ -1354539, 14736941, -7367442,-13292886, 7710542,-14155590, -9981571, 4383045, 22546403, 437323, }}}, - {{{ 31665577,-12180464,-16186830, 1491339,-18368625, 3294682, 27343084, 2786261,-30633590,-14097016, }}}, - }}, - {{ /* k25519_precomp[31][ 4] */ - {{{ -14467279, -683715,-33374107, 7448552, 19294360, 14334329,-19690631, 2355319,-19284671, -6114373, }}}, - {{{ 15121312,-15796162, 6377020, -6031361,-10798111,-12957845, 18952177, 15496498,-29380133, 11754228, }}}, - {{{ -2637277,-13483075, 8488727,-14303896, 12728761, -1622493, 7141596, 11724556, 22761615,-10134141, }}}, - }}, - {{ /* k25519_precomp[31][ 5] */ - {{{ 16918416, 11729663,-18083579, 3022987,-31015732,-13339659,-28741185,-12227393, 32851222, 11717399, }}}, - {{{ 11166634, 7338049, -6722523, 4531520,-29468672, -7302055, 31474879, 3483633, -1193175, -4030831, }}}, - {{{ -185635, 9921305, 31456609,-13536438,-12013818, 13348923, 33142652, 6546660,-19985279, -3948376, }}}, - }}, - {{ /* k25519_precomp[31][ 6] */ - {{{ -32460596, 11266712,-11197107, -7899103, 31703694, 3855903, -8537131,-12833048,-30772034,-15486313, }}}, - {{{ -18006477, 12709068, 3991746, -6479188,-21491523,-10550425,-31135347,-16049879, 10928917, 3011958, }}}, - {{{ -6957757,-15594337, 31696059, 334240, 29576716, 14796075,-30831056,-12805180, 18008031, 10258577, }}}, - }}, - {{ /* k25519_precomp[31][ 7] */ - {{{ -22448644, 15655569, 7018479, -4410003,-30314266, -1201591, -1853465, 1367120, 25127874, 6671743, }}}, - {{{ 29701166,-14373934,-10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684, }}}, - {{{ -20430234, 14955537,-24126347, 8124619, -5369288, -5990470, 30468147,-13900640, 18423289, 4177476, }}}, - }}, - }, -}; - diff --git a/src/ballet/ed25519/table/fd_f25519_table_avx512.c b/src/ballet/ed25519/table/fd_f25519_table_avx512.c new file mode 100644 index 0000000000..498e7edf75 --- /dev/null +++ b/src/ballet/ed25519/table/fd_f25519_table_avx512.c @@ -0,0 +1,66 @@ +/* Do NOT modify. This file is auto generated by fd_curve25519_tables. */ + +#ifndef HEADER_fd_src_ballet_ed25519_fd_f25519_h +#error "Do not include this directly; use fd_f25519.h" +#endif + +// 0x0000000000000000000000000000000000000000000000000000000000000000 +static const fd_f25519_t fd_f25519_zero[1] = {{ + { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0, 0x0, } +}}; + +// 0x0100000000000000000000000000000000000000000000000000000000000000 +static const fd_f25519_t fd_f25519_one[1] = {{ + { 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0, 0x0, } +}}; + +// 0xecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +static const fd_f25519_t fd_f25519_minus_one[1] = {{ + { 0x000007ffffffffec, 0x000007ffffffffff, 0x000007ffffffffff, 0x000007ffffffffff, 0x000007ffffffffff, 0x000000ffffffffff, 0x0, 0x0, } +}}; + +// 0x0200000000000000000000000000000000000000000000000000000000000000 +static const fd_f25519_t fd_f25519_two[1] = {{ + { 0x0000000000000002, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0, 0x0, } +}}; + +// 0x59f1b226949bd6eb56b183829a14e00030d1f3eef2808e19e7fcdf56dcd90624 +static const fd_f25519_t fd_f25519_k[1] = {{ + { 0x0000039426b2f159, 0x000000762add7ad3, 0x0000000380526a0a, 0x000000797779e898, 0x000005ffce7198e8, 0x000000480db3b8ad, 0x0, 0x0, } +}}; + +// 0x940e4dd96b642914a94e7c7d65eb1fffcf2e0c110d7f71e6180320a92326f95b +static const fd_f25519_t fd_f25519_minus_k[1] = {{ + { 0x0000046bd94d0e94, 0x00000789d522852c, 0x000007fc7fad95f5, 0x0000078688861767, 0x00000200318e6717, 0x000000b7f24c4752, 0x0, 0x0, } +}}; + +// 0xa3785913ca4deb75abd841414d0a700098e879777940c78c73fe6f2bee6c0352 +static const fd_f25519_t fd_f25519_d[1] = {{ + { 0x000005ca135978a3, 0x0000003b156ebd69, 0x00000001c0293505, 0x0000003cbbbcf44c, 0x000006ffe738cc74, 0x000000a406d9dc56, 0x0, 0x0, } +}}; + +// 0xb0a00e4a271beec478e42fad0618432fa7d7fb3d99004d2b0bdfc14f8024832b +static const fd_f25519_t fd_f25519_sqrtm1[1] = {{ + { 0x000003274a0ea0b0, 0x000005fc8f189dc3, 0x000004bd0c601ab4, 0x0000004c9efdebd3, 0x0000041df0b2b4d0, 0x000000570649009f, 0x0, 0x0, } +}}; + +// 0xea405d80aafdc899be72415a17162f9d40d801fe917bc216a2fcafcf05896c78 +static const fd_f25519_t fd_f25519_invsqrt_a_minus_d[1] = {{ + { 0x000005aa805d40ea, 0x0000002e57d3391f, 0x00000274bc585d69, 0x000005c8ff00ec20, 0x000002ffca216c27, 0x000000f0d9120b9f, 0x0, 0x0, } +}}; + +// 0x76c15f94c1097ce20f355ecd38a1812ce4df70beddab9499d7e0b3b2a8729002 +static const fd_f25519_t fd_f25519_one_minus_d_sq[1] = {{ + { 0x000001c1945fc176, 0x000003c6a1fc4f81, 0x000000b20684e335, 0x000005eedf386ff2, 0x0000033e0d79994a, 0x0000000520e55165, 0x0, 0x0, } +}}; + +// 0x204ded44aa5aad3199191eb02c4a9ed2eb4e9b522fd3dc4c41226cf67ab36859 +static const fd_f25519_t fd_f25519_d_minus_one_sq[1] = {{ + { 0x000002aa44ed4d20, 0x000003c3332635ab, 0x0000074a7928b2c0, 0x00000197a94da775, 0x000006c22414cdcd, 0x000000b2d166f5ec, 0x0, 0x0, } +}}; + +// 0x1b2e7b49a0f6977ebd54781b0c8e9daffdd1f531c9fc3c0fac48832bbf316937 +static const fd_f25519_t fd_f25519_sqrt_ad_minus_one[1] = {{ + { 0x000006a0497b2e1b, 0x0000070a97afd2fe, 0x000006be7638306d, 0x0000066498fae8fe, 0x000000348ac0f3cf, 0x0000006ed2637e57, 0x0, 0x0, } +}}; + diff --git a/src/ballet/ed25519/table/fd_f25519_table_ref.c b/src/ballet/ed25519/table/fd_f25519_table_ref.c new file mode 100644 index 0000000000..adfb6e23fc --- /dev/null +++ b/src/ballet/ed25519/table/fd_f25519_table_ref.c @@ -0,0 +1,66 @@ +/* Do NOT modify. This file is auto generated by fd_curve25519_tables. */ + +#ifndef HEADER_fd_src_ballet_ed25519_fd_f25519_h +#error "Do not include this directly; use fd_f25519.h" +#endif + +// 0x0000000000000000000000000000000000000000000000000000000000000000 +static const fd_f25519_t fd_f25519_zero[1] = {{ + { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, } +}}; + +// 0x0100000000000000000000000000000000000000000000000000000000000000 +static const fd_f25519_t fd_f25519_one[1] = {{ + { 0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, } +}}; + +// 0xecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f +static const fd_f25519_t fd_f25519_minus_one[1] = {{ + { 0x0007ffffffffffec, 0x0007ffffffffffff, 0x0007ffffffffffff, 0x0007ffffffffffff, 0x0007ffffffffffff, } +}}; + +// 0x0200000000000000000000000000000000000000000000000000000000000000 +static const fd_f25519_t fd_f25519_two[1] = {{ + { 0x0000000000000002, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, } +}}; + +// 0x59f1b226949bd6eb56b183829a14e00030d1f3eef2808e19e7fcdf56dcd90624 +static const fd_f25519_t fd_f25519_k[1] = {{ + { 0x00069b9426b2f159, 0x00035050762add7a, 0x0003cf44c0038052, 0x0006738cc7407977, 0x0002406d9dc56dff, } +}}; + +// 0x940e4dd96b642914a94e7c7d65eb1fffcf2e0c110d7f71e6180320a92326f95b +static const fd_f25519_t fd_f25519_minus_k[1] = {{ + { 0x0009646bd94d0e81, 0x000cafaf89d52284, 0x000c30bb3ffc7fac, 0x00098c7338bf8687, 0x000dbf92623a91ff, } +}}; + +// 0xa3785913ca4deb75abd841414d0a700098e879777940c78c73fe6f2bee6c0352 +static const fd_f25519_t fd_f25519_d[1] = {{ + { 0x00034dca135978a3, 0x0001a8283b156ebd, 0x0005e7a26001c029, 0x000739c663a03cbb, 0x00052036cee2b6ff, } +}}; + +// 0xb0a00e4a271beec478e42fad0618432fa7d7fb3d99004d2b0bdfc14f8024832b +static const fd_f25519_t fd_f25519_sqrtm1[1] = {{ + { 0x00061b274a0ea0b0, 0x0000d5a5fc8f189d, 0x0007ef5e9cbd0c60, 0x00078595a6804c9e, 0x0002b8324804fc1d, } +}}; + +// 0xea405d80aafdc899be72415a17162f9d40d801fe917bc216a2fcafcf05896c78 +static const fd_f25519_t fd_f25519_invsqrt_a_minus_d[1] = {{ + { 0x0000fdaa805d40ea, 0x0002eb482e57d339, 0x000007610274bc58, 0x0006510b613dc8ff, 0x000786c8905cfaff, } +}}; + +// 0x76c15f94c1097ce20f355ecd38a1812ce4df70beddab9499d7e0b3b2a8729002 +static const fd_f25519_t fd_f25519_one_minus_d_sq[1] = {{ + { 0x000409c1945fc176, 0x000719abc6a1fc4f, 0x0001c37f90b20684, 0x00006bccca55eedf, 0x000029072a8b2b3e, } +}}; + +// 0x204ded44aa5aad3199191eb02c4a9ed2eb4e9b522fd3dc4c41226cf67ab36859 +static const fd_f25519_t fd_f25519_d_minus_one_sq[1] = {{ + { 0x00055aaa44ed4d20, 0x00059603c3332635, 0x00026d3baf4a7928, 0x000120a66e6997a9, 0x0005968b37af66c2, } +}}; + +// 0x1b2e7b49a0f6977ebd54781b0c8e9daffdd1f531c9fc3c0fac48832bbf316937 +static const fd_f25519_t fd_f25519_sqrt_ad_minus_one[1] = {{ + { 0x0007f6a0497b2e1b, 0x0001836f0a97afd2, 0x0007d747f6be7638, 0x000456079e7e6498, 0x000376931bf2b834, } +}}; + diff --git a/src/ballet/ed25519/table/fd_r43x6_ge_smul_base_small_table b/src/ballet/ed25519/table/fd_r43x6_ge_smul_base_small_table deleted file mode 100644 index 3ea4cea4104b3c685faf1b2733d97f7313720717..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49152 zcmX6_cR)|?7mjFYsc6wsiiVPCX-|cQBB>M+LK$gMsWeCuN~x4&wN)aer3fu4N(&7Y zk&+g_=X`&EJ+Qc3dn3|C-Fy?|n=R49scATlpCn7%oprRRuxcd2Y4)9r#Q5 zyo=od9)VrHD}$IB7z#YBGRz>GIQrgJgZwBpbY~6X4Eg>0$02_geq^qN{BJy*;`c&c z8+~(sBJ4_1PSX*<{U_8@xPTQ3texUOt)|}+UBJ8V3iNh^x6M;Cb{26LL-+192RivC z-hK%CJK;y~3sF}P1PhuL7TP$!!(`@VK3RcZL%fdUkct zPvqCPSi9>Y{3L!m$)5xN0XgwwzOY|=+Z7cGyW-gB`aa0p^|syYgdF1LR&EG?zqmN< zCm2tIvX&Fwe`QUjN5oK^Uo!aeKs|uynx@iLdD%1 zkUuonESw)`&-DI$6|k_Pu6Gsc-K3==(u(jD?#QEbKQc<%-f#!c)L4Kf6J#ciz^W<8 zyMp80J>h3~c(U#mu%b@>B0aZSD$Snaz&!D__Y=VT?ADemjX*PVujbQ5eN3yW-%23=RI7$uC*u1yPo6M2H>A4DLVsA%F}4Nz zJ6)`2l)xh;JRtoNc8%7^2`1>PSDj>=g5P)Z(7=4~)(^FmH^FcC^Vu?Go=%Ijr$fN93e-82t56#o(140N=-Z@LY9%WtgN!-=?+!c$#?kZZp%iPP`? z$t^XD=4ZK5rIteI-FMr)%0gUhO2#@X=-nSU7}Il=_~Ew1O4NJmR5OnS>In~*|CU4J zv52>)>pvrZ_1Aa!)fA5#BqC1Dcu~n-$ZPz0;!;s(yIs4UG5ibXZs+nK@22@Xw|+xD z=C1Z^XZY#FPG@ug(>j}u(f#8fp%5hw>~bnQEe-#LFLngq1kcy&ca+kHCXWOn-;HsV&KU6RSyU%+1oFNDt&`V*gHf^*cfqT$Sut4;bu{HSIMck_ zzFqA#&6oEbHv}Mz;e;BOlr`{t&5!m>;5wFy8!5=wxMpWfDB=WJe6M{4Ps?QJfu+cM z`0KN0%s{zQQEFn)dw6ZFOotpDk-O0z@_3Czq&MokD|X_~YsB-r3QYWieK28wjRAJY zS1}Is+-3)6NN7MVXWaOK?q}`U%9YPiP@1j1+8F#_KQOqI2mAYxP^Lu4(!9P?dm)!z zd8Du({?YwrldFJ#R@Y3^{mlGMZ6V2(S3BcEkiU4ubITeax41=?CGvH4polbX)F7!tS{}r@C?$z8odl7M8-Guw;dM=IoBDfFrJ?~ND z-vPAwJ^ZK**R$aHQ?6|Io2l#nutfa5O4X)3=;!x&*-?seh{1xDp*=)J_Bl1{J_AN+29XxKC88lCGFVf;ZkNDB?iqR90wbx&{ z9u5AW&o5sv1Dn~d@2msLPwcy`f;js!yJhsd*)v$0JOv-0c;H+=;)lBe<_jX;>;0zF z+Cb-Qv0>^X7V*~D&j80q)Y4G~!xgI}wngCi;<)CN7~&pFRvw^nuj|-&jjqE$@DC>g zpp>p{AU&U@Opn$u!cT9?q;VGUbJBI@!?0hFXtnzVx#QTMaRFQh$tdPU1E@>DsI&eo z>}PWfUblkxtkqRXPspdU4tCJ*rR|ZlM+<&CYOFrpf?ob=PiQ!>`JkxpDcC>F^63PC zcl6;M1pvddn~Yc5fjUmJhopd;KhIvPhW}-eqggBAKWJ%ZIfFVEW@ltCz_@Z$Rke% zH)b9-WEJ%XXX;m#QC55ETyuSc_ycW0S#g)rH%%(meF! z>e-+4TyN7(8<_uz@IChwCp_?Bapl zm79$*0(Q0DKO3BZH6qL}k}<9jPs1Gy@Vn^xRXFayJn~HE;cs}bdFll6ta+Y2UmA6! z7)C`;1F!Y*_0#-$KxkNy<`wB5>wJDA{_x2!38ztCSdIJf9^gK;*b8)jt-g?Jumn6t z+j0wvP*}Q%3%+`faolr24J9v)j37@`)(ZXqvtni zXPYSX(etMbf75lJTlj?aEO51+J7;^Iju8*?)s<}Y; z`7YTib`_{PbpNeC?6pg5~`>9 zZhGhy+!zAQ6<<={6Y#KMJ@rA;i3NenkjJ4=Acf|&zwUg`={;}s^02x*>;|0PTYGSQ zexKdyOz)%LR{I`j2NBP^&?C;>mDE;W^ zB;ta&i)7}3e~An`-#YjWwf!1?g}5AF!#-EY=Z50qsITx-$n&E2i;$)*5%hj>HQJ%v z5Ai+hDeGz7I((jm&mDOA#N==+u%*F1lCGD+_8TG>fEyAAgJr>6w3pw%1-uuTwBmO| zKaux9#t(8_$h}_;klp-j*%eV|EYH5vG>>OKkQk)rp)b4XYCY-@vQ#*z1pZZWrUMy} zRfHZdISJl+u4`}4BTnhZ0l5?4`B{0Ak*?d)heGRD!G31;NzQucgBT4hUcxV~!-AFi z9PZG~`W!&Uk;?iq;4JS(C0$^^YkBoK@GFcAh0?m2sGjFthj^>!Tf$Tj-}sa9z*^KN zKi#Le2>b$lDdT4$4+!mEbQ*cTuQlbN^&+JHlOJ8jgjOTYW6-;PyP$eIGYjnB zQ`hqM14n&MTABd4&qZcG0#=&m%Ung=YM+56;_zRSq@qUetz|BCHFRGKtMy24fSfnn zWZQ!Jjdv|sTa9rR-x_+Of%u)j)+iQ3f4NxkaS3=T-fE@2L!6deg~MvZoj}u3Bc%dNvuka;+fz{qA^grRO4KM_4XBCj$&WPOJp( zmMl6-^=^?m^o1Xo*M3EKkmULXE9x&b^}QF+yzOD184`*3)9KcJG%tUWyT9uyeuswO z5zh(O8AEgq)BeJ&-?PiKzp(u4%+es(E%&4!mx2GXuErlU?|l|u!$tET_x48BA=Gv6 zNz%q#{0_7I?1oohXB7PPT=+H zziEhh2QVZ=p^aoezb2Wtz=pr=<3_00MDX6he$>JKE&Ff*;(B>3FPnkq*@qQU-@wa1 zaYjfP`A-e}+$95jxB%y^Hu&}3n(UfJ{2k#$J0b9GaiP0q31E);0zH4KFUI^)kZ0T8!>X^B)60YEWmEs#Oc(Qcjtqra%|&5BhKRw?*I?SGV|-e z{y_fQ;2qevHS_$}*Y8{HKq$t0w^$UXpt50{sVDyM~)UP3e7FIzWxl zNTw)YHTTJ>W59enyB{=<4*2lCm;tX*M{87MPwi35-#E1>xi3^NUQ3H|BdN2Qp7^a84vH&b6QP=#GGUT~nUPk!a$J&+UI z>f1NMzE?&`suJ>>w7-vuSE{bs`YSO0$-D*^`0qFTtC)nkwrmvn)D8T&rFcK>)5xsv z`F;ZNZ7)R^pND^#k7$Pn#(7gba?MeU$B=uCQyIqbWVG=n?bk53{gHEl--veAWffpW zT7C3Fv=Z zX^QUu;0yIkbpPi*kDHc8{L%Rz&zyq1;_4g|-M=3X&YzzE944s z{w^AaR@b2T3h;B93V(TyI8#USE6%vSOMjoaZ-ndpl{LubG33Gk9eL{43TA92sc$~U zclo#+^ijiyFT91{(+=HRhY>#~CR$GOy3|B2L#>PAC-mgB@B`G;eC% z-aJ9DmY@8ke!ivWK)0P!t{widKbafefS2=5)xaOb*(Y6k ziSiiIU5>8*3*PJprGZZHH(Zlk@eJ_~1mvPWL%(g{t;aI>@s3_G(g8Z(YA>Vfe(vgw z73dgz4lc-=0v1h&y|+jFuklPbItM7td0eQ7cts1NO%1R!C_XyD3K-$Zy}kv0N>2Af zpFpm^Y2!=J%{u>z!vKcIuTS{SqP~dcP&P{_yySf+vY{8hzVQmpMM9ovB!8?K(_VT)I)vq*u#rP zPk|ifo{#l`FH({&7@@8wN~g-`{lGMkK){_x3z4sycV9;?{53|dOKye!$5-J}>I)j!;!}ix|1K=v z@(=Yf9RHrj0RJ=5`(;*A-2vR%0mv6?Kk{J!=$_8IQUH3rq|r~>a5rs??d1fXUbtTP z0`Tng%P+@)H$Dw?@S~1iKi0nwz{~AkuSES&XRK2FAMmu4W}4O_&p&VLrJLYa7WmVR z-v4w1IOFL3FJt1$aoQg_psX&%2>GH=@Srhd&pv`b?-4{#PRz?$Em1{72pF3+m9;)%$xKa(P+lJi5*=666P^fs5{#em)DdT+}*4 zeMI*7ss*V)v%jrcbnei~*l11j=BXS@cUJItS!BolhQ4k)+tL-tC%=4Mkvi~=#i?_T zpkJF4?qdSK%{uXa=>1-=>aHBE+nq;M4%vWL;!@p}`>5kn>C+QWFuv{n#|)@1dem7~ z6o_~e30+g_rw#gU9H4djmqeP*3t)J#w=uovpYjhY_QLqO-&c&$b-rYp_nq$dFFFq8 z20-CwY1;HW1RUFQnEFr=tG4g--q*X)XUPzF*(=Wt(YT~MxA%WS9S0X}iPL~xgv7JEngHhJ>ht7#u6MdFa-KEy|la|NFQcDu}e zp}t-$iBUKbc+yHNBNaT_C$g7aBYlsIQwQ?D5pBCE3E3{&c%1H|D_+yTvgkU!aj~F% zH}+sRNF&-J(m98KD&n4IeP3F zs=Iyu(R?{i=FrN6sQ=2P%3sf62z?Q9RT_G?4SomTBYtT~5JwkKPJmOK_O-{Sep=qc z^;^WmnQaUCvqSeMIv+cq<5Niebk>_24;#T_wRVsB8pvsG-FHu-ZfADy%~8;|I)yYi zfq&IaKgFBiwc)*$M}6~sw@4-t_+2@gQbzOpp-a1U^)rbWa9xdD{Zd^KcPAmlF#&dsJq4%fK4Aa0P)Q$w{1WqQ z={_0k{CiIxaWAfv@YDO~C1+)8ns;xMZqDcd&mO&eJ5kibenWkN_V2pFH>I;<-0kXd z6{{diJ$KV;MZA^X#5Q{WJUBS7cs=~xR{y#|{a4&O_C3^pRkf$`heBp#y()bOX!d>T zLLRVSG1KuaK;9NdeHrjsOM0-GgJ(^{+Eq`WFH?NeO6%+7yl$yYbx*+_-*R}cG0y1-liP8P`XVkl!<}u$~dzC84Ni*HrbWXdWb7DL7 zZ7(F)?ouE3GVqQ51oGM>I!9;`U+%6zci_dXw*q33=d{Bb+0BT*9BH*98yHY;`(IlS zsB};9A7uXCMJeHk-?Qf#mlgQjereg%LJnoGxUY)q#cBFCrUB^On4(YjQSGW1e|`W} zTQ@LsAzqD@+42hNsXW+z;u-w<%PyXy{boU3PoHn7L$h69k$wlskuwT(zVhp^O=U5V z{qp^d#>n&SaKTar#Bbz3uviRyvHq7+2cUNkKI|v}Kfa6aL%%_vgZ&7+G&dLsRir+m>Jn>OUh-;%v!5PTYWmUpNhi!*+#uM5n}m2=z*dk43j!zAjL z9L-2$LA>_B;Bgz+7qj;73P;>3<$x{G;A?#ynCAii_~nu*)CUS>ZSkf)O<6_dnltKp zT~~L2&huC4Hk(esuQs-Ir!e>y_V+DP0ME3b(0CK#a&59TX`bv@qrAft7+AAchwhI6 zwZvzJzz^&kRXy-e?a|;a0B`;g!wEWf(};P(M(1!`W=jNXV87l!&AJKpiD3QB3_v#j zr}=cw^|8*$eq70+yf|GtifphD!&|Lwhu`ixg`(#Bmt|C9(v`rU(f zd!;fUF8|DRwIcACJ{-PCbs9~+^mvZ=$1Llk)e(O;P~NH)dea}AZ$*I&DM2aw0snTN z*&PoIy^zn}io6VlA2@aZH@?(bO8rjm`iifk;CE6`;iB(qX01JYbHIC_YugwP>^46h zaD0Q^*m>t^`n?0ST`!-8+_!on(F^`U@7VUze&`W*bARefQWY(iA4FWzym!ZffG&Sm zN1Y-6k6oMjfn_m6rVkN!qt2~o5w6c3l{nFH@Gc$otP+C%5tY@gXMui;@4tEj4Eb)e zZY@xWPxHAM;%7LGw(29k)a-9O5ArD%%-jDB<3BF?p`F%Sp2LmyVZ>9;p+)OQjP_Us z?GtrXekgH3p69b~r^|tsAO1N60<%{#q)|V1?(delEGja;^C7RcZ~GiwA$dYylh-V0omH#>a> zE-$iHqx0le3k~CC;5j_N{Ad9BK!HCd0?_}1yJ_ET#D6f=7~>1^YPd5GcE1S49e-gDeH$tPdWN6g+Wi0qkL%*D`+?E>x)SLA zc`16jq5%#bg3bOAG(VSm>`#=cIPi!Ovx2A1IYiqj|<}*zh>^xd>q zQ5e^!&m%i8L0_j|esT+V0wbDMRv|9HOW}hic#Kvxf2V#TRI9LiC2-JT>gf!SKaEKr zVGMloS&pjU3Gh|ar{8Vjgqybl41Xfy!kSR0NHjMKy{{bDXzE1Yz2xZbO6!1ZQFhBg z5`H6&tW4*j-}2zs`2t{=VZ>?LpYVR-b(Z!g)SDFPv0!*6Te)%p{LN&#*YiM8&?ffs z8|)fdi?gEm*$KBSil3}hRZWvSHD@9^j+WYnIgaU8Sid8_=g3BiP3vyzm&>~ zr@*3$b;*3dl0^H2XF!9!>8?8PbDBt3VL`m;rX(#I@0gN>O$Y28^*Q$?VUJMk{XU25 z;jqJcHUZb4-_Bo=2Y!PY!435Nh7adGZ3EQdR&yooJ&>ijVAB!cq`X;S46ydb?Opr8 z7aM2(!U6Zk)uW6De35U*rP*ttun#QaIzZnSv}!0N7=yQt&(&TRs4|?8PWus-A2_Zo zfqzwUrH&%}n|CMA%7RBe#hI}M^~?$#&k2ES-+d$D4(v_JR$SCCE40cKYq&sy%NaPWP5GkT2r<*QR!9reKF<3}%1-*Zezz_}I})i;o=3M{$lq*x07 zkahmEG%ocPvm-^Q@1bl#j4A4qyzw)x0@rD559iY_(8pA%c|^hQh-OXnF~pfRq@H{Y zx&H9_5j9|S)YEQB-+A=CVt`CZ_fnp2w-$91y~Qa;HB zJ=fcn0Sy?}+hccJZ$U2?wIg8{{5A+(DjWmPOp(g@9$^1(^^H0}LDuJ$&wxVLuJmq& zA4|T!gFND$O!EG0gZ|>9EzA#)cd5_a<+P7sqFHe19q{#r_x9B9D!-6Ur~P)xS6}bZ z{*)qD-!7V0k3L;?JQd@-r2qMXBgW6JxM~GI_@9+K+-iq?-IAwyuCTuv(%+H*yUMc3 zsg>YKtvKoT89edNAAjLP{{8Ak!o%>Nin_}i4Y~eYV1zC3u6Wu>E#USphsX-x&+~H{ zPr<+VaJGLXcrH6_tf1%6{${0?8SK7%@ds&Lwu_T=pm~eGw78Z7c?R{2RmTvQcS!dZ zy+3#_JaRP#b){twRdIpG!E%Y_4~(_acgE`i7L$_Cw|$Rpit zl17S+0_p!L%ruo)qVQ>uXL!O)VKe7~jetNB? z@4&y%Z{oly$l^>j3LD|qHKo>6iShDB1PcnoepF$ohURs)VFOR`XDZndTn@$;&FNR2}NtI5^Qjd;!DcBUqXi`Q|iw}$_GubxHrz_|#~@pSMA-=2P4 zj5-};pI&K%U)P?c-P^z;e&egy1IV>CJ4APZPu`=_!xboKT*^WFaQ(%4V`qV@zkO^Q zK>h399Flnqo~e&7n@WM>66+Q8pbv5nZV`kZSMApiT*!Om(Vl}`(8rkExcUQrJQo*V zJPv)$)f*j8Am?*!nx^x>%|8kk(tTCNd!+5Z_i=9*8R}2I=n2w46XlTo z?u2;T57VXH(5Lj;1- z^AGL%GqD={oV`hJ93gj$xU8jl?LgQ5l2qhr<>+jB4Zig$YvpMF=H>1;Z)yK#xysU2 z2O!VW4j-fMrn9T-EU1sP)KJMWhrMMuoFN?X4p-co3TZt55@qVatIM#rO$m7foGqGZ ze&J>3txJWR=zCIhBjWdlM)p)9UX%0mN9vpZ{jyP~KD439BBL3osE}hP58SvsQJ(tZ ztfDaQ=is*%Z0vssOz2-DXpX$Xuk6m#I)2tS)lv!dja-snaSgn@N1H!V-QVrEoHu~K zs;pg`D0n1)Tyy9|9UWW;(j*`cjl?R>ho9t;c^=N-(+M}OC7;$iy%(1|zJ*_+=ciOT=r^^Nn(c(Y{65pGY`}Z@UB^EFZ8wWwSPA@_`#Y)@{7WX9 zP7NU5T=3TPG~!eHcP(6q_>bPD#q?e1F-FJ3UBC(Xiq+H~vNdbHqyErS;^3_^#GBt% z6QTX+6>@KO)&W1hU3*&vcIL|rt{lMQ!X+tm|5-ThYN2z$g>`k>Pm_-lz6 zt)%zwA}1FPDdac3nKVZG1-2(<7V4o+tGJ(+Xr9P4EwCH{S{IpRF9B|s+!9QEX6Vs{ ziR|!i7#x~;34Rg&B@5Pr|4`204DBnQ-X0;Y1m06^h5Yvr7cR4Dkj_2K!%MuY;6M5P z-!%0-b_rpBeuF2&)ti|W{>(Y^Tp3aStZ&>LeP3u7J#fzld>I}Bw&$R)ddKtb1L9I{ znNDm5&xgnQ7OxP$(&%XpeQ*8wcS<+)?+Y@@>XU&_gd+CQxw~PX*LB)oeQ_^uXbs}8 z@%*)*{S(<6aW`n5uiWFdhxYBKin2OsU3f2`dYAhDpu4&HxyW;7`_`vh;orRI*5hdS zJ>aMs*3uw5$lbYmXXso?fpz%!Az;AM75=}#Q^hhIP5qJPB%cTMM_1m(rw9XQ z7Jcsv1plqBdMVnc-zBcpPS5Q_+g{T^pm_82PwG=Xb!qtC1}+z`4yF4lvAO%o62!%x zwC3UfX0)V#P5{5Lto<_Tr&#Vvgam_ctH)J!+Mkei9T2~R`rjuAbnQU>X@9MvsJ~dF z5c0Ad_QCg~(Km4Y_@%i$_CV%+qOg|w61S4x8v5>%OXp9oBK&_mV-{&Z{^}FXwxQrN zmrGYO1fRxMNj2(As&hMPs88`+Y~D)!+xo2o{2{cFi zc`Lphytnqf>Gy`b>H1p1Fz|f4A9yqjb(}6#|I&;6b3*An_R!Dov;US3KeM3?xpZAS znAm;25MK~8eypSUtATo!S#mf~ono3v!5^V7TM^#F3qReDr$k4fzb+Q+sgf+*0aCcRk-X7K`}1 zFDr}ad%NT6+?tD#$M^YY)pz7?apraOhx|D5+Mi(f3)RXo(|${z>f1k}7)SqnjhFO1 z9C{Y2bRP1K`Au_6A>Wx(m`}fpYW>xtPLNqugG=9mM`l-^5cSz@x3=^(z^=sKAw~Q1 zEgEGdD-fS~^TC-B$ktBVf_PE?y+(}ziqB|mKCzhMuEqcA0LmQL&n^knV{ne~2C{MU zn9}!qQ~Q_RqJ5n4xUaj)5x?8YyN{j50=&JKM=X|>fnHSZe^^o5*;-w>%q!^%|D_xUv4)T1x#@#;1-(1rDiN3GV zaoDRu`*-07+VpL~cj}tVQ`%SWx$FL&`k(oHRp)5_za8t-b^y53{hZ7-ps(nWqFV61 zx?#2KE3O;s!#CZuZhSFcD@NJ7P4^+w=y7eDhkQ>|PV7S*ch}w(v_CN_p7@dWCtBkE*l@!y z)->UL74jZ&7%y{zJtl3D?oHTl*M~dig7=*g3$p@nuUqYd0bpXB>Nc7ejTeX>Z3M63 zfzkuiC+0prAlHGojYikrN`lAuz=zXn(7$uZKFA7`Z%p;1edOjfju&aYEjCqO^anhb ziXGBpFy7Oj`kYHp$JymV$@JZH?vm4C^!`=4NAm^E@0vN!84clIWuZR%1o|U0-U%-- z-ao%}i&PLd)^d`k5PA;T$ZwnA7j=vO0r49-uYXqn96D6+dlI{n+V9lHRY2Kk}%W56|;uPk_hjn?aOX#V0~U2b{? zabxQWtZ4nYYsz^-3UP)-KhL*A=2*G-H@!~}B%FIf8!oNaq-C!FR~>lYatL{wiUyC; zIp?+gE0;Aw4*h-ksx7XwFYDoh^u4g_H{K3<&UkEu{ptIRBO~t9kAN|}u?tNQHx_B6 zLi^QQSEjz$jd-aA`HeKsw9jl_^Bs9LAF~>VLEh%IDiZDt8^3jEbpk7SBr7C<_Z!+* z(RZ_NHYcuM3S1My+DG4Al==M@qVF&=?6o`b*pf#+{8LXN$rF6RmV-^pb?@!%EzD81kaaPg-dw#(u7efgbxpOA-p z?deSiz;`t%pMjo>PQI~Ucfcz#%)!0``p8F;ng=1T_&QzV2vi)qO~(-o4IDcaY5p5= zoA-bYlq61yU!?CIz3ztQ8i4oIcHgZfkPnCT-=gPQ#N^hq4AfP+Yg6Jf@ao+v-1`~v zFsg-b5`ZFIDMz0VkP^9`rW#$7U4GV zZQr))0NtlnZ*T3P`Q~xf0-3k48(Gb?(YcnJfZaX1PA2C9?IM8fQ#DdHKq)4*_WQuI zYEkS|hxnjy9`$3U%{zm`~>6q4h`hKz~`+9-3Do98+(rLGP97xRcH`HZLnH zTL=7*vR3a4^6gUnT21}it=gp;G;i{X$c=jgZ%bOPVnrUK=vC#k9zOPH)mA~iE}g;Q zSKt?L)4taP3}PDorHDLdruf(!F#hi5x$z3b{q|(d=mD1Yf4)!()Dv8GTo3q5Syq)E zjCri>;NXxDfX}^EJ~C@MuiADXc*JkleQxn)fnu)PfJfZf#NHPknKr!eAtQ z2YPJti#%WOugfm7evA5FS(;|jcO|kK9ma+5d&}w?umPyIXX6iAk4tY%dsPRleHD<38LPT8_B0A6I>U z5BX5gm-+NOEm)ubvI}`Ov70Y+#_`OLeSt79N71J99QqE9{z!lf06FRo`7AoKcUVOx~$h zly@0#U2MyNWKwmeb_gcWvxX02Jz{4Irp`q|M zV+`3%_rL$vw*Ss8J#%ILJI72)t1b3Go=w3^J8UqX{aZ&f$`BWy%WX%`#qqy;R?_}U zr(YD?B>e6vrbT`SpKXJ~$;HT@qEQ{^3wgtF)(>=!kssor5CYun7v1Cs{|1*hy$;0p zd|=y8`(Syd3DfR~+fwAZFcxu_xLa=JAm7s1d3!zr4XR(CjRlryD4%u*R*QaDsX$#d z*=C=}F3tW&cA(>OPLYcce{^-8R6LVn0@r$XmcGGWzahY{E2t)Y7v@``P5o;aY+ zA={USX}x6D)NZ2loj+CO3Kh^d|5)D{1OKQEYqX7kqc7QB&~wGTeqsX`aGXQ2-4cF= zdhgN#5jQX7Yq}unAMsmi-;a8A@)JU-&r@F=GDzPYDUVJ*bcOtyo5ef<`I(O`v!(aJ zjXsX6X&+#nZH_U$KfStVQB3bo4R5yy^25K~t8_gR{F__i*>r&Nvim2VLI3;0r9N)> zb@$4jrTwS$iPl6q2e4;bwbvCqtlviI7>+?k_V?F~z(Wt@^=SUQvaPw4=Ff&T0+E-1 z^WLYk86sZhInxqaFQ2PV4eiG`Mz8zbdjQ!vxOzz}_!h3K-9~-J^efc|Bgn%Y|Kt(v zySCk3q;U#`Xmq6+#wZr;b4 zQBT;!*kxM(wxt#;x`5|_qj5tL^l@*Fnn%Nr|J8{;A@H_*+0sDstE_OIBHagbev4b~ zP~4x=j#~{)|jQWw1lR4c>A^$7iW<~SK zBH>P9~#!FBhK+fus#!HE3+35o`El`V8b>Y#6`*7)p-t{ z(}L^o(YbI=$NDQY|5!-AJVf))76Au!TE9dY{(hwEy<%4Y$6w&bTY+@^z>u%_wu;`L zt>bc-sbA}mnAG2cI(Rx+p5A~gvP*nJ5&T@D7e1ozFT_MWc!t2=-4p$73HY-zns$GN zeQa*JWd!vFGDK%eLm%+Z!BH!JC4oLy4#^>n_c!9KO`JN#`;?fZBresrVv4D5W|m0|SvnLQz#VRXK* z>BNPRGe9e@&$ErdtRKr5*MRTIcQ#+D^Np9lkO$DtL;Wf3*JMOL*QYw7g6+<}2LAfd zk$VmPX||=42XS4@?&-16-@OQMW#$VbU%TbIapDQ*+@AIs`cpseIxK@9`>(6^zfecz zMC;lch+j4+txDgie&&B)OMUBJs~UTC_^+^Qrq_RlWZM+xb+9|%+x_Pi>_W^d?$P&5 zp#x=StRW{I8_T8rQI{x=t+YQn$&*Q!pFvM8Z&?X2jLY&*3()&VHnS|S*Eh{!6!En( zNw4WT_V8cN`G9&j2KQO4MBN+DFHmMh{@5z{?i^r{*W?tv|DK6pVWRinmZT&FTFBfO z#`5AJf7_XS>O=oJW!N0LENL2%}jpg7ESJeB_ zFZu8Z#AywS|Dfwy!Pmt_zb~Uh*|trPnUmOaY2Rh*U{fv4Ted2@IAQ-~j) z_zWBbY8-eIbqQE~ZSAq6$bV%!V{Qug_t#Zr7DHaw`LJ;{>VG9+zUCeD;Xdq9Gsrhm zl-fz}aS6^!+|%H7O|BnZh&)$o7QLtaDwph_rh1@3tNtkmV9Bbd;b}liQ$7td@Y$r7 z$WdXhx&x?B{#L1UJ{Ec2`UyCt1ACO4KP3T0U&}A2{oI8^2d|xizsyP{ zsWI>!?y9)y0{dlgEvF>dThE{0wF>r>f)@Qb=tnr`yV7|c@6WjedM{g?HJ74>JSJKZ zTWEcM6qbKA2>vGCn-9`^dF`Gq#g*Xw$Sw9(3TP;*n!pWw(o^d?3hb&@xbYnR>A9Ue zG~YU@kR#J}adJM@aj&SVBb?s9ipZV7+!*qfiS!9OAI>XQtA_J_W2 z=sOIBsYq{q=$n{MhS9mKM{SeMTKtZc{8@w4@AoVW9pQp3I_=9#=c`(C=j6wL3|0O{ zalndk-d|;i(^@pbu1oxXWRKRuyleGpeY#(!Lf7=11v2?Iik=2uN%L6v7<`&dqk~b% zzg=N%v^MZs(;JU+)Lr?vGuH$5pZgRen!(rb+bNRzdPUZoC#lbO`6+de1^HMx#rv6{ zuP%O=xdpr$#^%;^uJF9~G($D&dS`d=#SWlfEuYXi*h5r@`+Q)(QNj9>&W##W5Ap>- z-qQSTp+EBE$*-Oc2JgQyuM@-YH&3dMu&8unlv=1(`ud0=P*Z5hT##ZPz?H6XJ_v*sM4Y@*e$Zxf6Ep0GaAA)Oj+=Ca4zNUEUw zq+Usu;Sprf`j&qt$p3hC7AL(=WZ!8VegV{V_4`TvZCOGHC-t}6pEKQ+Mt&g|i8c@9 z^>lIeKLY*5q~zcj`1STgDA9XD@k`^AecD7Cp&!Db% zhrT-QfqwOsrKvaIS2e!qp2x_I)#YEuZ1&zz2=eSxB&;dPgBT|&bOD_^4yU++yDm65OW#NyL5e}&w(v;6@3 z%F33YJwZ2-I&v$UG_F+7ia)%XpROv``R1HTIsf0zY; z#|H-9(fgjSfWYcd@Pw5@ zKkzBvr%P$w2oKf&O6!P_Eb};>yI(NLx2HZO$SLI_%?D?0?)Id=AKAIU%})*bFFi9p zKOi&QHsPiI`QOe*Bh){yN|^Nc?|H4Wc_jw3vvU1YIbiZ@CH=R+r`|#z==y)Fd;W19 z>WYZlKLWr$dps|_=k8LK5mQE8$1SS7O5kVV;?DgEyg5m+qsx)UmVN9seJ?5_=D#lm zaRSyOEXE)h$mE?Y#`v~%PYJ8TUy#8#IRO5=GfiuSp&wbG@P^iX@#7LJXZXC$F&~-F!41A_mZ{GF;(oT;tBy6-U9F z+%n}%^Xpbwreq%QDA+pm$I*2dRr&8cpy$(#gicssVznV#>R?i-UI0C#Mxbfxv!>cYfn>MQ51 zce#~=>oW2(X_p1+dYj`CLF)teWJJ0r>S?QX{qMU=8I1%nS?DFW&MRL+zE;kfb87Hk z>z%cX&V}BDS$+QRoJexZa@u!QdauEI6ZYrc>v!G(s)xP2O@9}pS15i$0ldkl28MP) z@3J`cAf3M@eRsTC4tw^Cx^-_5|9snI);i#8#VN1%K;;Ie2x;Ks-iJGlP+|%!8aylF*j2T43 z0)C-C)Xvj)$i7@PCqAJLeaZY6%Yd~akte9Xe*gYU{|%~7T3B!oQ1I`+)r{baf4lqv z{r?LK+L`QDfaj~!RK`chr(WxI()`x{ICJVRVqJiT;OQW8EMZiTpbt^oO=L^qs zj!wuI8*)GDBhE>2>k2v#HQ?m2@^HU# zqQ2&$_^g%z{5-oDE9iYmcfZdjI;S_8Ox2=&gLnKxpc!Fdf(BxTEsgD zzU7&(U(>wMXsxVF^F(%#BVz{Y(qPrRaRTFH4k<~b_rX7Y2777WphD@6$SCY?C7R3V zdnv~{gQ{fMQ&mbdona5ZH+twAaI7Msh#eTAzKfgA%ejhPc2$+9zWFcJ~DJ z0pO?quV(0Kso{)K(C-{35?=u$SY>946p8vGUJ73Daf-q5XndUn9+5ABbK z;h#EBE5Qmpj(;m$={vVTA+7^7f7&|aKc@csn*Ej?MX2vUdfpvV=(!!{F;l3^KW%XrgOd^`&)@rH>+1v@NQt+nou|DH)I-ps402IhBsuh4|InUIqX zneFQR4(fL&4%$f4{y9%}eA6S?f9q~b)&cr8vWgS}L)QH6-2^Jr zeysSjR_O1$cj>GGU*6^RwY1NZu-B@3DfsvUtd7LMZ!j<`<_O}9y2Cb?!~RZcg%BHX z?#q*S`n#F=!iM|l?`S+PbY&`n??`;uKI)GHFK7Q0gFfJ}C1*GMj=wMMqwjLG(!M9I zK)w^&=8P5KKVSZERtx+YEw8TmA@1plXR0PZ9m7w4^xpXF$?_0dw>C|?1k*ZJ&pp0i z3wQ)J=}CM=+`Gck&ZXd4@@v`OMbKZ0{P^GZi$&S4`^F)gS|(gyg#2HgeRyL`affa; zmScRziraS5xqETLgWDyr`zUp#(7x*a56>ftVNY3i(Tc{s`;})FU59Y%Jt0oeC%GNo zO#2isr9v}leP7@1YkeDad3WDgCk)i@zn4jUXZ=IxMTdY&=E>t%fLERJ=(b@nTfHGC z2LIq^u%D!PqxD}p3(X@DEFOV+kbN2q^z&h7$~e=Tj{2tTf<)|5-{&iTJ%b^8#T)#k zeq=`Cm82!=SILOuY30HadQUVNW2k8@7*C%lAm_M|LCHm z>Lc*awBB1n>%MMgq5<^*z9J_t4x`SucT}b}L#`OxXhHLh7Dr_cH;vG{e1$*vORfP(Eon%rqKrDs($(8JvFEr>kXypT<%&*<`VkPG6XzP(d;@7$dmj+ z&YjM0YMrHpXkSq^`F-CE>=(u|?pA^)^Oae+8Sve=vI{D})jYb#>ww26o2zJ_U2szg zAN{{E(xUTKwt%muXRa;}bqO|n^gjW)K-D#I7=CMu&dvX?KQr~2qu)tiy_6*iJc-2} zKWRRcI{LhUe&_Z}>WXwu+9z3aj-Ka;$ORt~!FSSiXH)~^$b{R+6p=4(fu%0}os9F? zkN1x%*EJ_E(QrUKIl0=QU@l_<^FA z?VgwcTQ7#5hz3e5iD43keNdy@-cZOJ4M%P0d_c(qwy<8vkqx4|>7443fh_Ym+($>> zvM2Q1g?P!HFo9j8+~@V#>p2(_S9af;>-CDV^%^XYlh$<=}m`c}peLr6vNb z6?=dz?l)hp0b1zZJ#`ZN9EvWN>DcM_D?d<_u49X%>RgAaZY)r3H*O6!epjl=fw8x z#uvJ;qX%tyV4uEM&L9c)UH=#qFX4LAZcBO4{*k6dtzQ}J=a-4N`hX`PiPwkj&)wvE z2k7s6=J@I7mcWUEaHkr?&FdJVOXvRz!hQPa+@O?|_bNI^SUf(@GXVNqYd_pGf}Vp% zbk%v>pKo7U`{*1^O|KKL3vjow^ghbdCTxaN|A3bzj8kh7;(Ga5U@Ps?vgA_FgC*c^7{ByP4!m2=%-gXRd~e2@x6=F= zR59je2XxuN8c5H}0gZ3=w_%@QcC>=>o;6(SZU>>ihM`Ui7s%UtyM^fawsTr0=nQ== z=k8-GAxjOvO&>si!D3ZuR}n|G$J+mY?@&26RBr-y1!{H=S>V6frT*SI#Nn(p*Gzdq zcKYSic=)RyyQpOV|MkC1xjzHzirKS?r_pQJrW5VrzMNs}p#QdHhdtB`?@lSqvH?vp zQ$uOoi9MoaN8=FhTX$88t8$)f8twCRdj|TG|I$lt7s%iLmyiza)3)FKVNTESzMwo= z`aYx3Wq;Xw`044cc(oPrZM@jWM)S(REnab2Pp&*S*fn&+0<*1MCT=%R^QfH0lRYP84V8j8>&o2l>q&G zr}H;}-@|L6Y76*%n(epIeXTPueM|MnhTjQOG%rgs=`W^v`uEqW^;2lS+IKWu9%z>{ zsvHaqJ;YYv4E*_Nd#)Y&SKT6estNL2Tg$JkkT=|jhA{8E_E!~P#OKUR9H!UL%T#oh(Q_j@6J2M%fha8lF6|R`f{80w{?(r45taI z;yNohH9PX5kKp@kI|%=*d$S3&4%83~F3E;}Mu)SUI_&RiH`P(TT0L;>292K~`E1F; zKu6Wl;~#kv{YI@eLpP}N$0udVm?{Yc&aY@B0dWIBd3`zuYo+h8dnSc zg}pET{)7LKK^C4I$i|DWuJA-Wv)^tQ_94D`9Jc@eUd^7RD~{9e;`e99zt|04Mx)|e zg6MDVzWlik=yz#$Kk0(M=KbXzv`%Vd)C!~hZSlEO8(Md5u6xhC9=N7D{D}^5@gpS( zSKyTH%Xe3Rv8pR048d2o*mSB4vQUTCI@(XE5=`y9f;cj3_6pK?d24rJ7VWo8X=&wC zy?SwKs_JUAo9zf5qB@nHBeVYlpn2L~2HKyG(wzUV1iX5?WLpj)u7HE$+xJ5+>g>9G z8T?vKyY=XIS!t8XcV*@u}iF z0<8Dm-k%Ay*fV&I>b#S+toC&O&z_K-e1U$iJSk&VL4QT53|&+Q)xYO&xe4|e=Lbwi zVW$zXGL{YTwyi5{s)N7!`5;lU`&SVC?g)@U*-Ro6{*eo8dlk_xe`bDQ4)mXj77ua& zh4xJG(!9{&@oE{Z>v_8)w$b-Djaj1JIdB(0-0E`(ei}hq-_jv(Ibid%88{G>Q$+K@ zN|!@>J_ARrO#0~k<|umQ(FXs#N8V>BuidWebC>emI!(jr<%skA7Ev9_uk~|Bk1ay{ z32JQVR2SuT&RhNrGJit2#|--8ck}W|26hMfdLIYx7XDkW6wt1>oV}mcN3U#T$0%=A z3@c-$Jl1Vj6yqnzjnS*b*ud{1_`a0B6AtRwyo>&x7rjMR>VxNj&vVW`;D?~HiXNbt zi|h`X-_rz6%!I;z^i`%oGwj+6`De zt0f(Xc3s!52Q*K-FWmZjKd#$zXNa370y&hv*J?5lkby{B~cM=Qj6 zsajn)9DfJfrz(qHK)>NrDl6@SY*=>YHm!eJe%`g9^^aEzv!F6~WTmdOTLA;5a<_N_ z-D=h9F98`uCtbwAGa6bqbr$`v+u-HS2CQlE4H(7!+Bbjh2JHvBir(d+@#s~-Yb_c# z6_piIX&iM7v|3XO`?n{eN~u0_cz*yF{oS+j+=u8n$jN!2stNl6c3VmMy@KarnGaS% zf8fIrLz=&38Ju05z#p&mH;#S}MlGc9cRAW~9rrQqM7#1|7kjGX-s(0pI|qCyw3xjE zsP}1VL=bq_Bu1|R*O|xasz!Ok{OYOAW{77c@b)~OaHhI`ZOM7tf8cwzM{B_- z{0oHci-J~G{;G~Nt5ZI09DZ_s`D)cw;I z_S=N`m)$_TRgI$Fv_8*H-twL55W7Xc&i;kp+g9#*G@jN)IZe_0)|cebvY7lx$d>zLNeeiFS;C|r8C*HDk=y&vAYB%L$ zYz$ibw{V?eDdm0Uh(jzf{o7T@$&4R=7Q*iMoba-J&~IA*nV0s3TzJCT|DWIAU5iXW zKf5IyEcFp*7-#QO8eemt75r3$U3}De2AYoz%p?9$o#1=&n4Kcx>C8@eBndR%X;Qcf z7*!s-uMZghc(IlO;;Y=SdmP!XsG++1B-HtLuzY^A${=P$e z?{0d|mq2{BF}XkK+*EFM!su4Wd(Q6exrp|nJ8#!qhFoZS?Cvbhim7!no%TXOy+=+f=^OwFVM;u}5?H(CGu|#Q(061LC9rkiZ zKbO@weFJcx-ir+DX~X|=g|j#10Uk4x-=op)w}5#Ctp^jhwuaIesTPH z%6tCG8${Sc&vUqIj{c79W`iqR!P8iIQ&t++D=uSQRt>q{!|5o(!a4aFO}gKXl4o&bViusTT8udDR~=Q^EKKK!{7*lxvq!%c_YQ2m4*AEIb~QTJUTNERf!1}ims%I+ zpx=3(qEm;UH#mA*(iQmo`S#r_z$0~V&G-M`_h&sTyr6HNSI|c10d8^-iD zP~OtQ`jEZX?-ShXhfg(0Zf$y zO=f{HFFRuAp}$k7Jr=hE7j7+GOXEe*yxi$7@Vd;ZEfhdMu2;&Q-T}|{)W*^oVD*E} z@cFpjZ_)?PtJT(TjN!j_6T8J8*ne&sxm^T({QIw&^!y*WA(9aSEK5p^ zrsqdi=cE}uKeJB`H`ahR(zp4-X7HZhl*Lcq?_6p++${|MjDf#<{(!fxdf}Y_*ac_~ z4S$5}p2o!~41X40_aC!#UH@X;z0f|GBzx{E{CRcCZaKk!wBX)XdLB1et@5JpHog|C zgw?>0TmFU3Hpn~~mU4mcTblpiD1C2t`{|4S^L>k>Dz&s8o>Wasc7c8B4e8O-)Suo` zZ)4!Z!*QQDptt1fpbX%$(txEjZ_9@4{^bsy9LKjy=zEY24hnLV@9Fce&7yO1PwuS_ zt_Sal)4k4Hpcj=LlBW2>0(Mu$Anq!LlkT*h+5RsvzytE%f0AEmT$kJz&>)96gO6?c z7Yf-qy@`R=;Vcoq3~!=8DN)HTb>PhYD+Th-?xwZ z0NXZ;EcFI_dp#wA5|9iJBro=$1N)B{Si;ih-Pa) za2tD?C?Dcf%ucr3g1FZDWfyG2b92Wsw&4MI&qkU^(z;S?@&ktqaJ=&HJ<<;)nE%lS zFPDDQq6F|JRm-^2xLQ~1qVo{#Hm)!J=7T@%ipqT2SN!?yNaTI!mv_t#QT_7mqqx>u>Ol_02LCLf*dU=yl5T zs{TB+r}N5d+@>P6(2vBK%0D`YW9wj?T?+i`c#T7~VV@K?tDpqADKmy~8PN09$GNlM zyQC=0cn5xW?Hn4nL%tc-aEBlAj@cKifsiZasf@Wn9?4Qt6ocOu|I=9_K=*qejVplx zr-kEWfXA4*g6;t`&7vOC^WbmWs8xgbEN+OWZbN)4qMlZ-1>eOB-^FM=Fj*qgOm(W* zUzHna|L#)tesTIfcEEi-3!MiOsR`AqM|=A=yN6rQp3d6SE(P3}XSp{X_=H6OaSFVwR|4-Ek-e+infs7;wf;Cpb%5$r(-Wo8uX3HYcm&te zcV%{p9dR!jzkV$OcJk{xT-2cN-n8862m0r4`Vqbyyuy(e0;$e>{ZrM^&G7d%Yscs<~bAyfQ7#l;PD9vI><@|e!>JD+t3z^M; z#*@>N(ZD(9yLoh8m;HOt?PBqiBx zVaK_Jt>Y&A?9H_J==t+3-(EoLg*C^@OK4o}N#7|)*=m(E-OK0KPuLHUT@Q}u5&Z=}XYKc%|K)Uf(-PT2EHmNT?N z?rzxmPlW!yj~l(|{v{UAOpPP%{0#=BR1Z{biQi>`{xZVfHao$-?tLl4ZeYB`z?W2@ z!Ml|_l$T{K{r#QJy>^~mw`2(M=GENtI0*mk+s^sXy71Yc7H=W+J5R(Em=f>E<22fb z$!9;Mc^Lg_XqK|lKFbl?hCQ@@DVViifZmIa!+Blwo?KQub%63#({-huREH>SIWEf& z+_fROtQ-2iBwr&3;Ke<{N#33%O8FPkU{BqK>$$j& zHCtQk)!^s;IONs@`pQ zkQ*M?M$x{nSl=@1kKoglJ26M~P_0d@jVmFiHjRl7fPX-8AmuCKRNrT1wi9UQY%WHB z&(Pqg50Su1Mr+Yk@LQ3q?HG&xSg$2Ac0=FgaB`0Jk()e+^C+K~e{Az3Mzn{XR=-Q< z9PI98pP{-IgW}l}yco)Z)p+6QMc>`I*x&QL|qjWAVyldT|1fXf%x%Y!; zkJ)-_GYw!|d=)3G;qTo4<;s2Zw`2Y~MVdD&{&v2id2~CzPoligzkEyP4#;ATE2pS# z@*!kkF$es-)T?%?LLaLj@r3F!AD<-aCxJ)!#PI|j_#L)F-$>_2H9J-R>7g6{WgBh_Pj;U{rFKm84OcGo^E-wWPI0Z-X*#2sX|?XWlO zU7~BUd=SS5mYD1y*xkG}?tU9~f33wVZ-Hn2%@2|E+#b6X5J2NxXGP?_lV}%MxmJMo zx4Q;DchUZK$?jNNS`SA*syI&P5EH8ldY=GKN-M8E0p61eV!~YTPY77CF$CC@-hZCf zlbeq5MYsYVo;Hx9bH1+`YhrWZH!QxL^%vxMja6fGZZN(*kog^OOr!8Aorh>}Sgc3q z1|+XdJ*0C4i};z;m!qBS+PFA9MB zJFcIHT~@UUe0yg$|1_ugb6I~DgU|YF_8wXX-Q-p;;)R_-L7^#)H>(y~9HV*mMBIoe zjiXPD*<;jzi;5P_{sQ{5jL*`#;dMV-%t`o3@Qs=#f+y~T>JD%43wo$Y*+M>aN`Z&s z%X$3z3&qDitHe*^>BOJFrhe#UvmWfD^-0-b!$Ml0_=x5?SyMj}EMl~t*e9pWOy__K zOHwB5>F?NlpN-aMtvhu;9fEzXfOVb<_|&>??x(zl)4x2)5B_J49Fs}{dhL^{BtGB5 zTA7=`M5&>2dDuTV)823$JX=Eg%{phD?FpK2^D45hzQ-Tt@o4&dFI zx4W3ugSq@1j+AdRzp`OgL43iXiFQ;6aJD-cO6T8F-c%hNMVtqP+;VxrxA~i?4%NNh zbHpUML7v*$dxG-OxWcR}If&nHYPkuG=N^lH#HPak#sm8SHrUyi*pJY2xMA9|{}ixg zVI<#UpvZwg-IPDZzP@8czY`oBGr6V+XllybL*L_;dhZ*c{RFX3=4Y4@r$djyWGCXe zwkDo=9pnIJh4Ys5_exu~f}T?Wt*D!-u!v z^GwDXKD0~S`TT4O{=#F`b2J{h&pVPxa=>in$;IFo@EU5WhJNLndh=Dlm$jm~(?BJu zRyCM0#ODd`raaKdy?%_w!fO=VlucqMt@bEsx#qfVs^Y^X~klkVIuQ~L>5mpyGVfXQT zxIgVTa&H|r=*D&2J;N)digwnJV(Ta1A9Iwyc>?^x@or)lpl>bEiKpl0!1o5Oc;NFD zl0yc-Pw6K^j)4D|q}~>)zkcKI`t=gX*e$R`3GJmj-#Dd!@8+mwLNEHcedT(^Ch%Ig z+V7zKrJrS2q?w@q(82zJ=BFpC8C`pDA5QenU0DOY0k2K)F4$=o z{k?h*)xn;QUVTaLt6*+Vp9cE1sy>&s75#=w-#Scn?bE-;WDFs@tXnAl6u3Xa&lPkG zdFMT@P##*+=6Qwcp1imBi0XrfbM=(YF8H0>%d#l_H*S~0wdleQs4~}|*{~pu% zyN4b4sUO(aWMx>=IJHpYYE~EGUj4Q_!Vz-s?w#jDAT!zgWv>Cx$j=)|w7)rXl0*C_ zcormnYg~rwktns=BaHss&+>h2hF#eep=}SqE9?5H#t`fO713XPFmmX4`YUKt`y$6UR+OXonUD%DMO}qN2*8BuDwa|?qSG(s^{C%-#>h4 zXTAq`t+>in{m@UJW=Y!u*fH)Di4_2UiigN%8c($S+TYW9|LNeO7*6=@3^3NJ1ey*l ztfuiehHF}y70B`;up$}PxmCGafa=88TX<&3-e|*@1yom1DR4EW>%IH*$c<(AN5nQK zCpwpOzUJ!Hcj&L*xZQyE`2&1q#Wte9enz7kl$Y_%-M6JYP3c$7*F@-bp2`|HgRkFm zT{?~be36~UX#Ah!ei*d?{_9t3-`b9T_MMLle+mA=2xBYyy@_i*QLZPUFCKM&Pw&-> zmDLB=0aXU1pV56REmM?S3Vfy9mM{!^t)F~?lt15D*55(-v&Qw){IoyBc%(!~9vFVv zj>8`IRu@CRT}M0uPWFynz+L^H#<_qtEXBDrUW84^t5F^8;rEAsFM#*BrgGMM=xvNL z)FZ$Xc3&g=JoMWZ40_TzWyX0TZZf#eqH>qpRHxaqGsuGS^?#|8O}9s0v;ZU8mVTrBTTsM}p9lB%>ZDqY1$a&~=We?VdAII^{lVZ#F!i!HhJHTt z?6}AbdF_{q%aiD5XvwkX^KqSGYdzZ6gGX-kPMaU(61KDJJs@-cIJn&vayC;R$9u@1 zy;7zq|61#-y_n8vI~Lkkhe5xrA^#5LgZDOXXSIU<^!uu@aM&#wF)yQWdGXF=zr}&w zUv~cW0rK;d&!=_#+|xF%8rTb0@EC0e9{m_rvkUrr!ZzDVAzu;-5IG0D==`@|1vuuz zG~hNqqDfdTrsDl7)!V zq;^3Hoj;6~n$f27hms|86*ONRYx>yu8W<$>`Aa42T|TYlq51$vPSE58>=p^@{P6@j zdy7_DgD2RhRput{_n~91o5G-fcewtn3+y$QDsQ57Puh4vlLGjbPye__`F{NPfegxj ze(AM8i~}xtD57T!loxyWG9GrWW1st|-W6akl1k5)`So_K7RXAT(kA-gbGj%mN9Vgo zcWHa|pntZ~6yG(F-R4Oal*9ho^Rt?1u)pHmyrT%$?;5^bH-BhfjbLk7kxPoI5N7DP1WpqCMFMo6;CvbkZnanWS3qNLZ(C=zSJe#;D z2)mPR8V{*1lo*(ymxBIxIg}d(!LIF8*x^+4GkJNY!wblKae<&O;`ylR{e2(o&UA9^ z%mXe6t=&d{j~P3unn<8Tg0faJ?uXxuUKFk0cQ1?OqlAn&)*N?s4-ZGM;b0X%bl5w_oqNRp)Sa5ZlRxOKB?UmymJb6Cmyi} zuY$gR_RM2iPx8&Xdy4AQtN4X_gwWoTwa+>iMt)nCydG9BHr@eBI z$r8wi=alv>MSNL|FAK*J-(H~}Pea(>H&1=q0R54)XAzOmXKEfiZwa|t+V1=~_%|(S z>dyjpHI>aX0SauAos9)bZ1Fuo&&gc0=5~4XqnG>X7_FOcstKjjI=c7U?1m4Jw;gPB zs|VWrHW_&a{xGIk_JiR6s{YNl05X&8s4nGY&IdEZ^PmrYrqQ?`a&&P;-%i9Q%zWh& zeV4Q~HTk3|`mNJCo*0Asy?#LMfC>7sb^InR3BQ^G=5We`wkc0qWx!59%UO!-_XTzM zO94;c+dfRs-M!OQoZ7%*(LcYv;lIm$wOlRycRX~Er}}ZO-nC+?9~XQ`W}*o*6X#Y~;fL`=Q$gN+WR2=}{xz0mZ z*uZx!{P33*uy?S^;`xsL&)Xe;^QMZ_jjWv{8p(kiKl@_d+|QE{m>s_ zdpt<_r;-ovgD&7p??FQWV42DZ?-ay&XZ5jXpAn~GV%&Gy_e?!$yn^;Yn?B5NTce$C z-IHlLr+Y4UPR0*-OO3J81N=OuYZ~c(-_>dQO#AakZm~^>12fN!vNS?(@9>f14S2?V z+t`O-e)Xb;Hmr1U#6#1HaeqhKy&y({yM$%L;PN zq4W=4z(Y0W^O#BA7BxEwTy{?XoE+@#PJ1LCL)=qAE>o1B|8fpmO!@iONIMZh=&g%x zmD72JYX`2g(t6h6x&0WO7g6P{U#1D3%4f@}?BF+$GoD(6xKIe#@%u4jh5}@UhdqQSiTQ zzP)!Z;(eFRQW_6G3H6CxRPPJ9nYUdO{#{M4Rc=G}eRAg}t>?T>oVCt`UFN;}PO9)1 zzoI={2fkI>xokA<_NAze(l|WU;MzKY_Qm@dODKQQkzabQ3Vun&G&%{^12&5b3j{;iS-ZRf1ks_F%9>X%}cVV4)J{QZP>FFdQSd?#Bbn9 zk)C{D1LU*ynll0R<5UWbzsm%kFIoiqaOV~8seU3}_{BCFa^pUp8)opo_EP`#2=qN{ zTF-T%_a3QVN8^(Z`<6}`pN!nwV`%@S;7iX(Z|H~Be7EaSzqwvj^u7I<`>MV4UKGv< zI8$Dk?@~GY52zX>125!xR%LtX`O;5ZVo7=C>reZRrb3nwDtxL1IdA=b4m!7?lPyEaY@03*SOFIF4JsT(44ZXrV;|6}%?M&zKqIJnNK9hOJ zfYDwz{x~CUGhf?9!NezfeZDjJP3$XY>3L#WU3ydxcE5Xf{r^2lhv2FpXULCK*s{xk z`ANr@L;+QGl7E>4x%vA_Dc}84FZi|r@=Kc{Tbj?dhV8jQc~HXmC3pIc>AB`b7f0wj za^vIa{S;I)FrfFd(kFRf6ms+<`&0BBiB}3Pl0`g?G97;?pQzt>v5M-W!+SUKC&FIJ z%`u7UYPEqOI<#)Dd2^$C6UFgOK5aGpxf@fh*P#8YxYo@cv@2_U@uj@qAvz_%9VmA3 zL9s0G!(~JHGGN@CS^En3eOYFgK;Q8 z`Ay@G;OibH8h@11CsXPCRoRPyw?5$WSgC!9&i~mDq(IW<;13bVDWv)Am-x?Svd?kW*iH2h*Le4Qs?T3B2vDWPDzANp??*-%Y+JMU6knM8^^ZgO%D>|BkRnTsH&w7q_P3U&$;pASX=b45m8 z(tD)V&aRXWOkc%2%LD%-?G685U&eS-t}No0U%E-H4DqlF&5x$& zx^M}&FiXeZ6PSOoweKS0seUJwPW4S&*Y^S3K(8yC-M@mbsJ37B3-}_AFLyG9-mc+^ zAmyc@k|#PSPvw)&F`#`G(Y_qrJlOdsD`{uJ@51qyDTiUd?9SKJzvyS^#plu&(4Shc zU)2Kd`TGc^PyIvhb(UnZJ;ah>gV1{(R;Kc2la$UUIn-U<|&D@5(upPaBS8 zXwf?J0lP-(H{hF!wav6|eXl-XC;{==hkv_~0KJD5hb_(b`vX&&H6ZUVE#jR+yIIAG zN%|f$ddGKW`d;6icYkLK+F2!HW@z89J$qdR?Qe*vckZD5jj{8mEiVK2_@6P^i#WMk zHwN2*_p4~Lb13{cCk{QgMck`Djcyx)Ed04ZTLE?-*D9ybeB*bl=n~~UR?J^r>AC+K zac*e|aQ^vQ<8r{U-ruA2y^pW&=U=VpCqg34ntnI&)H}_awBPLY-J{b1`17Wq5}ltp zuqrOq2ys5|GuFC~_yg86tfhUEjk6LT3xJz8ar}D>`=+LE45uL9_{ZZ%<5F?iVM#hS zD(jikNp+O6ONZ96gJ=3*lK2wf;}u&Y*umes%>4>IH>-aJxYBdvB(w2pHDpI!OD?+J zYEKpons=lxO=Qq>z;$}jK3%%bg-4ouz{|tL)2E5+Z~6UYRT}hqRUX5w!14m8=k#8; zEdSF&^_~qs7H!Z#Tu)tPqG+DD<7Biq8~wRNv(#lEo*=V{ts3B4=yA4+&Y`B>?(3lM z!0!0*Zl>=S&Uy^Kr}1v9bf_&q_+RM1_PPQ)^|DD!RkBf~~Tm`oHxjWO}yU$iGVgu~OYxABx2fmTofA9c!_A^V?Y(l&H;WJ%9 z=s$Gzu^qAK->x^k!UX#DwKdZFpbzKL({=z~zjb3O&A)s%#kFYueb@29n)aRUo!htA z2<>a$D%)H~d(ZBIFgm|ysGRdL81nUi(!metuZ8Ky1)8rm{9f))b&7BH)ob5Du5f3H zqxWj%e93EDfdhXV9O{6Nopp9{0^jg0t+e`mKZBfK+Z4bFT#!o>lfp1VZ1M(FKrB8dIo+we@rFPdsM!B@kz>uHrQz>QJs3rvr4E5hpGj_z$6R`M!17sHWDZ^`MPu5dZjm7;jJXyqK zf%b$0lJ#^xME`li7CIkNyfgNpD*6-oB5zD}yjbBw^J)EQ@-gQxtv?Iyx%@H$Dv6k8 zQ{rB|_w1K6p!AzNJeshZ|K!PA6U14(W}P~nH@$dWZZ+-WUbZjkRU^ON@eed^GO)_n z1Oqy6#NF=!uCp~ZqI#U;I}5-dAT9ve+9bAbpB;j=}`fle+iIzC>w)#b62Z5 z(>`IchDVa`Hj>*$~RVsEeSY<>q$3B{XqN0$6~d_=v>Cy3O2LN;4Q3^ zD%g(pccQF;`DmAD9dlDfJJX%T=K|0k9rB$e1N;%erJ_=>JMX-!wHE#6)J1JKL3?nJ znSKzEp|apOtponaC?}T!t-~95>344AF8toL9)44zhuei9|N4+6@(KO$Dm}8kjW}aN zW;QFpzU~w=|3k#T_3>o49`ycd!HTqx@**QWi0Zu!Y<<5^L6#g{#YFS!(H$Fg=sh$) zdSO1*4?pR!TTxyhlr$1fd4gD0b2{zg%%9%BJz{QEu z{ZyA_+8@433HUqDs_!Mxd!4RbtH#GcZ)?>%g}=`OCrJgff10OXGC2NuyhDp>XW&wTJD+^xH;94vu^IBF=~Plb=<t!#8{)X)8exI!qJXZpYM%SSqPHX%>qZDsi zAy*gBCVp$*a$uN2-KrnJmxFhhRN&_zI>A8ak5w(xSJ3`)V&t*!w7>j`N!b4h^lH&} zt7$*%3;VTwv=7NM;!rq?c#i59-KRS3Y_Ixu`abLm=fQpV!0S5vtnf7SMZrpSV$k#4 zIep_3}ba~B8S+GvLW+OM#eySSqV_Q_9DtLc8dSeIK*b$FFdwJlWF=>5iXmfll* zHr%xv$XfAwp(Ai?hr%?Ct7#hFo$i1?Y4CzhA>tCaYO;{>&|0V1=}GYW$Twd83cE9j z%el`%@3xI8kk(6qHNV|xJZXHb$w~8Ar{8m)aM)=IByCv*yRSPDVJ?H+^H{elz0f-y zx;kzE?93bBr15{<{*}Wt{znR{wynVRMtm|^L-WcyeugIv=(nc(-wCRx_ABW&(7bu> z_{0aQ>oYpf`=|?fE_hb>5&ZgeoEYePBlehgOV>lsJs0vj1oBr#M<%*Y3i5Rl&vCt$ zM`o4oAs)HuJ-4X7T(Yp}9MzYPA6k__d7C9)Th0#HxmQ%1Ql1#FLpp}mOXfjuo%PWE zO@m>O=2-*T^L1Ik__BzthkH*$&0{PMm|k9LNA>6r$ss19uoFA(7~2Xy-(b6pbl5u% zifp6vPqpkJo%6seHR8B#7X7GomK%SDUAU?6UpM$0of~n!2EO~Z*n=r=43D~KL3vLk z?=1#5;MuF?+{ z>C)xCJOJEuUpDeGu*s;*@*=Rc&EWSY*fonpUCM;K_YvPJsuQN`_V>{`M^?7}A=O(v zM0WmvE-g*U`2daInzg~tY5eZE_DXsf@kmvQNF75w?@hbnsV=cOM!=}jQW3Yor`XKD5U%U zqUqistz)t~Mklg?>Vj-6>c9p6jQwc6v9I5yOb&b{X-)e#LcdXSQ(iOTd~!!Ai1Ojf z8qB&>=jPrLS3&ETul2?|+|lpnJy$zv-MaNgQe+$C@ST^6_v1RO%01=tpwHUs)=cLO zJ>Fd3txWPm=hr&mKdcw5K zH}P>5Ff;hhddeS;IG=4R19Ofw90r5od?(4_A^@_ z{S4i|AXoy7DZFstGSGCN|8si&50x6$(f1Xc1-C@wfku%9|Nnmk*DaM5Y2PvUpvP1% zc&@K*;H85rCHdV}`LL5yXz+_#^)%<8nRUiN4*o7UMUH!Kn# zgMWtoWPKs9B0$zi4!Fa;>^@zOnaIa~+tE*#mD?{*^k=RZxa1Pz2(q!_q5X}sIg$Ss!SBf<^&^x&p3u$Cr2H{^Ovif! zelt7D3eCYk%Db069(HVlZ$=E@_gN(U7dP(5U6)5}w4cMN9bH26)NqQK9No{*jMtkx zApg)ixjz@E9C9UODX_rN)o~nHynd^t0-TDo{T@WM`VTl+k!t2cgU72QR?RAbTFKKlI_5J=OOS zCs&Bz(H+1eCA@zrZ^)DzoKN#(_!6O0&hYEB9k8bPG|eJ-mnZZJx1CEbLDr4c4vq)k z%8Tv2G`^O%2CpqcygNmmKg;4e?bjw;rMhMT)2YSGXxG!UT~F`J!?YW1bdFs2$@}HC z;Fq{(m`ioIjEm;^%h0ZIIZE{>WWPu9x=xTY86pl+yem%*W$}P#Ad%}Z{T>&K&5AsG z$oU4rUrd09tE(T%0<)y0^~!*cs~6{S!7uUh(h)Y?m-SqI>57ochgKb<{Y?LC&gZ_6 zUzQA}a3kJYsRr*Y@RO>Q^r;8G^@lmWSj4xt`-CXvr;pA&G+7VSy{i{X`vYy67aujj zk7=dgi!-p_GEl_qh4%WDdnSF+KIXMH)EFqUpsXkq{T~vW%e2A$$@#!|gwAz@uK23P zjsCd$XL4xV=W=CRbPG6iW%SQEV3ql8HyTHylIz`4;BWUup2rmZc=8l~iGjZ9>0d=f z@bBNE=6?m4nEq-#&F?3VDYnu4{#PomUJSD7b8SQF_aV#sLCR;6B#I%T`{|MRPFBmCG4 zz~feFu0r=q#r%rqM%cfIa!qRnVWPFF5v^Cx&ri8+f_4G!r8=yLv+L`45}k9<3iHlm zf**v?W4K0t`@HlsH5>{csfz?A^46@JZs&DIFeZoiqd!^^&zT` z9k@tsmR@s)!!!4kgn(HKPQUyFoC)s_`~^S3(~C^0-!(Bod~}@+rY`-naFAJRwuIIR z@3t_N?M8#t$?OeOKd4PqZ=w1@h`3B$BK+cv2ln5F?3MRNp6a2#`xg~AL0+wP^~E*F zH{Y?G-U*&Sp))d+-?)9cTS@uNhKtY5>D(6odcG#wXLDWS_k*7MD?J{|={?{G6&zv% zCIsqc8UqD#-{{c%+oiTQiJqI5Kj->aI>I>zd`L!d9^ko!mbnLLBZDGKoW!h2l%HS`sEC5NTp zf42DbI(q)c-x|Gq16;cMz7pjxQc=+JH`n%t#oF_{2 z>(;R$uQ;@u?LPAV?^Q*=&D5dyamkI94>!U-a+PQyBkYSe7_FzctBx#2PV#-|1Jx?mF_@g*QamufnSYpWl)~P9d}OSChl94Te;;Z z^c`E<{|o{v)^5011l;ktD*d+!_L!GM>r-~e(w+B*mY!R zJB=gWGA<)D4uutK3DY=jBcJ+l5_nU7{3xvh%NrR}{-B?z6xZ|gq8!)067d!7BjR&q zw4PRIJKG=yePCn60~+t##LpYX!9MTTWIl}(Tmwr?1JS>kr>3b0F#1wjOgpagbldbq zBigIYzC4|Tzp~fd5~`mT_%i;Y_x+OmSJMI5G1z|`(Sv->ESQ_V1G*LM{FT0YGQ79L z^D~-vRLlHI1iDDK_R;(mR4uxS=CAPsJ=^I28Tr{e*hq1$W6gg|?{&?X>M7b+De(0_ z>IR+|xB7hAKUKLZvX|;YFPz%nP@U*PQ178`*nPL#>2eHyo8lB3s2<&9{7RDcF{hN| zGs9rl( z=+893?(s_Sjkad;*y4V%i5~fK1N}M`IeBTo-pF>;uf7avXMT~8+HK2Sk>qW&Yp7t~(NwTsS4b2|3cDnRC`SIDb?-Ipz|_tW#bUsIbo z8OY(Mr7r?JB5rJ;0L*NRi+>H=oT4H|-&0?&4u5S3|F`DTw;2(~hNy)WbGSbV_KX6< z;CEWFPPrcO4sU3BbQ<=YEt_=jLG~|jk)mH9x99JY1LSLG_2H?VN}A zgO_Rfb#?>juT{SKMe70w8O0^EPT25PRg({Kd{lnmHG}pr>49wyHyvN`rWU1se@k+3F8cdwv z1D}Ky+to{u52d|~z75RLR5G)G-6>CHn;h^wpR@Ae1WFt%AENR2-LsusEa*pH-y)ON z8S^f@Ja`;9Z23=|>H?gR42`0|k9CrMDnReR-771B#w?dx==U41O-Exn<);*Xo%U~1oj3|kLa%l8n{p!THmsOk zKZv-tvN46c0)CRnWqk}3dZ#va3TVEZZE+y%n^@T)w_j90K7x3;iXV-LgJ(!ym!0x{e#>RC zlDO^$;ekw=SJ$?Vex`ctXHmAbR5yF;&ow;;{~cnc`@Ta?U%Ef?D&jvjo@Yttnz&`6 zu6Duxr_I(F8h^G2Z#YczN0oC+7Om6c-NW|M_*^A?%!{6vsXsN%3gG#*aN9k`vPDPAyo$$Z9XU=#X{3aW0 zlJWH=3uCAIuQAhZ{vk2FI0bG6CDn$jn$9}r9 z*-|{!i)PNlu5#R9j`CuerSXiEC#Sh-yrO#Ogu)_k59l9o^TyD3KZaiiO>Mx>m|FFy z1w0aZ_g*o;?p#$(OEm0mZQr)R4F0aUha{)aUxm<_5F^;%*{=DC;yhcGCKL>w*?aFb zXui5^UDiqWXWqYe)-?alGDzH{`S(o5qW`?I*rTINfy+?db|% zjH&)V-l^hR1-_J9i$7{X);>2SoC?3$quQtFd+*0F&u$H(y?ecy(;@Kix8+{VK?esH zuo_Z6@Y`zpeI@uw%Wy9|47=*euhUu3uTe0xUkLo^n{bcj#U7=u z8EZy)@@%=}vKFALJEMCU@Jhg30Ief6q{{Vm!Iz(2S2+e0i4<8g0<5rX?_me;(iXvV z+AqJuwtnAA@YR*Y> z@!oK>(}MD6!J>)|8izXe>=0xD7O-~xqW!DyLlVcv;n%+})Xpa!^~DSQ&~D$M)Z~JGt_!~06oh`Y$J^ZL zzK0}?7g8P(C4WY7E6}|7?yEZB-%C8_Y203u-M*XZPC|S6I_Y;$tKRglqjM2)^Rsfk z0hJCK)l!{Ha@4zY9PJHkKD(AeA6)9|LiLb2k*3#=(0@eBYnBS&`3(vawBD^=woH@q z^S3LvyruILtb8*&=y@OOUr^Bweb&OPg*PEP?=il;8tnS?z8Cs=qr0<3 z5$8ht2VaVS+9msbmIG7d3YXD(uIKHZgckaHpR@i)&a+Y-{Ww>|*b}sKR<#+^ zc>1WXIi9}TGhMz)o6cdz{OC&wgZ)%bpHLM1?M*kU(>`~HPT&YH^nyul?6hCsx|ee> z8uIk&E_PbSW?y|2Kz`~@y6!Z-dHkxpbQrv81sy?@AMv?Ao>zu`-v^wUl|>wB)@AqU z?^0J*8%q0-LXPHwf6?Ekkf;v&yM<`BJhlKf@9=7)d~2V;nK?SgRM>TwaXZT=3sg7(9vw2z`Jk`>c{_=B?s zeIYW$=gdCY2Rt7=e4L)s2s6&)GT@H-bI<5~RlBI|paMCr)oLZ>;YUQn2RPs_G5pM# z@_{n9JH68ASL*SuU=3jHsZwV;XEJ?%^Cx<44!LryrjE?@)WiHCM?K88xq$0^lgR&z z_H#p7ADe#wwoi*?n?f(L@Pm2`?4;g2USSBlI=qU9-Y0#*A^S^+C!vGux+kvpS!ih! z)zh?%PG~v;rN=k9)Ady^Z3<`ritd#Z_=0#mRtS9I0q?D}v9sF16Pm1dQozf?UiOam z*W~9Guk3~W9lLXlyJ3Ge^p^Nr#INeZlS}h)dsV__s%OsXI{74_|9OwDdh0+w!WSLq z2EHZyoA4`F3m2zJmQhG!0a(-#kkS!7s{jNp2tbxkl=( zDPBR@+JVPF*6fH|Wxz4@^Z$<*R(}u5o`*cR_UnnZMw4d(3R-(TyALP`N7asLPemNGwV+MJl z-n6eC@Mfi7Od!x&#>15E!)R~>6U`?M`>Owh<35{u-!u?|9PDEq{{j4|M|HG5KrU3( z;X4l5YK7!YHOS%L8?197-{7CTM)C28^E%QwH@Rhsn)2W&`S~iX7}uqL`}rYp*!TZ< zu1EVJe#K%}-01Hu|G|~k%c?KT?bafWwcc;LDK7~MO!MIYkBgh8H;sFj*B5h}q5UuW zrF(wBqQhplvw(ZDqAd;sot<`u?g#qKcRU>qe@C`xw@AnrM$H1LjNzK4(DR?UX;A zU9lc^|6Fz7ZACl7l}8fvI~NX(<1Vz{^z`4LnmGB7YBZdI{y1BPF@OL?JK4fyqC z3S>FJd%{7**cfp7Tmmx$cSpgd^& ziFTYl{5E$vvaLZ}?*&3ed%!m#Y~3pj~ON!U0?10|XD8M@&@n4=?_A(dw*w(c6?1x>Y)oQJa z$md+{8Ufwst52%NQXQS?nz-{R^uBo^1qR^hZ#ZaQ4^)|U7+@hkS?0Q}povX12ug+E z{lMkKJcfSXLX{KFKz3W@f;WiIS!Mg>2M|v(o?qvHFKNW<7z8F(KC7hpD8%+BThb3b zKQ67xR&K>9*tiw~%=mnVwXCyZQO%QvJQo zG*?m$dE^Ov{~Lk$W}S!U{;x&7ZtUFuxfp1%9cY7Hy0>I!KK#nB@6O%@`>|$iubZ$h z&oFRyqCDm7Su{Uwb#ute1;3P6=IRMOtAkgkk35ak58qn|Jle#$Kyr*R+n?4Iw`-3u zsSo&cEY#N*dH(HVe3crw`j?wL-on21W$$vTpVamKV6`INCx>`V1=uYr3-6

1|Y& zb1irYme#>7uuq#kr!)*6OFVRh&KtDe?`c~Fe+BDm47=gyyg{@U)fESya(k%GXo~U_ z8p3{?%9XkAuncj6$MZ3+%1)B|1>=gET%FB`=NXtt?I%3H9j?&zf9X@%9=iV5=`4-y zLR?1!!I?Jjx!dL`(tXA%p844r$U z-+Y|-pZmez9Nf5>0sFg2rgy0imY?2v;0gl&lF+w;)(Ki=YZ)5w)8o+6)en7-f4cG^ z*vHv@NnQhg+VvB1R1bHX$&SZ?XVA|K_Jtp>8{D6pfb4%+4+jG|U#pdqfT7EL#1|mm zQtcM&H{h?7d2dPU=K3j>T6!)Iy5@g11W(*+;X$gyQ|k-dCcz6Z+sUKzLT0QhQ>8$C zfvOGZxj5^pD3E7{^F#p^L*+r8dxlOrVf9G zYY+QXKwc;wJ>Q@$(T?Z~=KFi*N{QI7CaHhr}P4TmjwIrR)6T91w zH`@j<9`0YO6oc{j3zj3aAAMeLi|tj63yKtE65xNAauWX>@aAx^O(^u*PfRk)5ij>$ z!e4YxC&0@%xu!%Gag|J`jmDst={UaP zALvzWzIC!;Kg5^T<-k5NtIm#|Z_JHc+2cU1_x!W9z#bKwLzX~`i6)^v{G^IUSxCap z;$g%+Iv-iMA`z8kCm$;r9kAjc?mG@!S_1a7mu8j)a(GCr}a5<0)9st z#e*{-i<{0S`N6(DalN`5Fl8)Z1>=apQ#Iv~-5osbYH}B-|eVIo{lOt@98;F^4>}%4!pF??L6w2$OXnI(!BKNmk@i} z5BFY>SWf)_u^T#c3{Z?^x1GHl7{oM7p!H^QLw#5(FuQ7Siu#(GmW=T&;CGwr$x$7z zP}ecO5PnJ-mp{?G#`g?5dKSEo-g3)jfQ$bee?@(p)0>?3&LBVG@3j(HK)<0Q$EdH8 zp?dm6HtxUW8O%sp*LiH3T5JV*>}dS85b)$)x4B9p<`S$CV3yr0uUi(!S)G z%Kr_}KIN9w_)}DujD|1CqU(pLd3&!Gcny8qvw9Hcd<$Qp0`~m+gt`Iv4;PK!GJ_m1 zA?H*Nxl_4Hs0zN5t>cR`K;CcVRkwg{IrdwefUDOxIM8}+CgLw^T6dnVHm+U+zkb$D z)=x05to!?{9r9S-J~>#9aYo6iM^vA5Ikp*5eS(klc)UhlhewwLP`@f6juFxhIV_?p zaV7YALJJoGW;^dHdhgbw=WPh>2hOXz|6wQm&X}7h g7C>*mwkCi9`9tB|LHc`kb#*W61u_`guW4TWKb?Fqb^rhX diff --git a/src/ballet/ed25519/test_ed25519.c b/src/ballet/ed25519/test_ed25519.c index 0ee81e3d33..4175a456d2 100644 --- a/src/ballet/ed25519/test_ed25519.c +++ b/src/ballet/ed25519/test_ed25519.c @@ -1,10 +1,13 @@ #include "../fd_ballet.h" -#include "fd_ed25519_private.h" +#include "fd_ed25519.h" +#include "fd_curve25519.h" +#include "../hex/fd_hex.h" #include "test_ed25519_wycheproof.c" +#include "test_ed25519_cctv.c" static uchar * fd_rng_b256( fd_rng_t * rng, - uchar * r ) { + uchar r[ 32 ] ) { ulong * u = (ulong *)r; u[0] = fd_rng_ulong( rng ); u[1] = fd_rng_ulong( rng ); u[2] = fd_rng_ulong( rng ); u[3] = fd_rng_ulong( rng ); return r; @@ -12,14 +15,14 @@ fd_rng_b256( fd_rng_t * rng, static uchar * fd_rng_b512( fd_rng_t * rng, - uchar * r ) { + uchar r[ 64 ] ) { ulong * u = (ulong *)r; u[0] = fd_rng_ulong( rng ); u[1] = fd_rng_ulong( rng ); u[2] = fd_rng_ulong( rng ); u[3] = fd_rng_ulong( rng ); u[4] = fd_rng_ulong( rng ); u[5] = fd_rng_ulong( rng ); u[6] = fd_rng_ulong( rng ); u[7] = fd_rng_ulong( rng ); return r; } -static void +void log_bench( char const * descr, ulong iter, long dt ) { @@ -46,312 +49,416 @@ fe_rng( int * h, } #endif -static void +void test_fe_frombytes( fd_rng_t * rng ) { - uchar _s[32]; uchar * s = _s; - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; -# if OPENSSL_COMPARE - for( ulong rem=1000000UL; rem; rem-- ) { - uchar ref_s[32]; fe ref_h; fe_frombytes( ref_h, fd_rng_b256( rng, ref_s ) ); - fd_memcpy( s, ref_s, 32UL ); - FD_TEST( fd_ed25519_fe_frombytes( h, s )==h ); - FD_TEST( !memcmp( s, ref_s, 32UL ) ); - FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); - } -# endif + uchar _s[32]; uchar * s = _s; + fd_f25519_t _h[1]; fd_f25519_t * h = _h; + + /* zero */ + + fd_hex_decode( s, "0000000000000000000000000000000000000000000000000000000000000000", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST( fd_f25519_is_zero( h ) ); + + fd_hex_decode( s, "0000000000000000000000000000000000000000000000000000000000000080", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST( fd_f25519_is_zero( h ) ); + + fd_hex_decode( s, "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST( fd_f25519_is_zero( h ) ); + + fd_hex_decode( s, "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST( fd_f25519_is_zero( h ) ); + + /* two */ + + fd_hex_decode( s, "0200000000000000000000000000000000000000000000000000000000000000", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST( fd_f25519_eq( h, fd_f25519_two ) ); + + fd_hex_decode( s, "0200000000000000000000000000000000000000000000000000000000000080", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST( fd_f25519_eq( h, fd_f25519_two ) ); + + fd_hex_decode( s, "efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST( fd_f25519_eq( h, fd_f25519_two ) ); + + fd_hex_decode( s, "efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST( fd_f25519_eq( h, fd_f25519_two ) ); + + /* bench */ fd_rng_b256( rng, s ); ulong iter = 1000000UL; long dt = fd_log_wallclock(); - for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( s ); FD_COMPILER_FORGET( h ); fd_ed25519_fe_frombytes( h, s ); } + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( s ); FD_COMPILER_FORGET( h ); fd_f25519_frombytes( h, s ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_frombytes", iter, dt ); + log_bench( "fd_f25519_frombytes", iter, dt ); } -static void +void test_fe_tobytes( fd_rng_t * rng ) { - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; - uchar _s[32]; uchar * s = _s; -# if OPENSSL_COMPARE - for( ulong rem=1000000UL; rem; rem-- ) { - fe ref_h; uchar ref_s[32]; fe_tobytes( ref_s, fe_rng( ref_h, rng ) ); - fd_memcpy( h, ref_h, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_tobytes( s, h )==s ); - FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); - FD_TEST( !memcmp( s, ref_s, 32UL ) ); - } -# endif + uchar _s[32]; uchar * s = _s; + uchar _e[32]; uchar * e = _e; + fd_f25519_t _h[1]; fd_f25519_t * h = _h; - fd_ed25519_fe_rng( h, rng ); - ulong iter = 1000000UL; - long dt = fd_log_wallclock(); - for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( h ); FD_COMPILER_FORGET( h ); fd_ed25519_fe_tobytes( s, h ); } - dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_tobytes", iter, dt ); -} + fd_hex_decode( e, "0000000000000000000000000000000000000000000000000000000000000000", 32 ); + fd_f25519_tobytes( s, fd_f25519_zero ); + FD_TEST( fd_memeq( e, s, 32 ) ); -static void -test_fe_copy( fd_rng_t * rng ) { - fd_ed25519_fe_t _f[1]; fd_ed25519_fe_t * f = _f; - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; -# if OPENSSL_COMPARE - for( ulong rem=1000000UL; rem; rem-- ) { - fe ref_f; fe ref_h; fe_copy( ref_h, fe_rng( ref_f, rng ) ); - fd_memcpy( f, ref_f, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_copy( h, f )==h ); - FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); - FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); + fd_hex_decode( e, "0100000000000000000000000000000000000000000000000000000000000000", 32 ); + fd_f25519_tobytes( s, fd_f25519_one ); + FD_TEST( fd_memeq( e, s, 32 ) ); - FD_TEST( fd_ed25519_fe_copy( f, f )==f ); - FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); - } -# endif + fd_hex_decode( e, "ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", 32 ); + fd_f25519_tobytes( s, fd_f25519_minus_one ); + FD_TEST( fd_memeq( e, s, 32 ) ); + + fd_hex_decode( e, "59f1b226949bd6eb56b183829a14e00030d1f3eef2808e19e7fcdf56dcd90624", 32 ); + fd_f25519_tobytes( s, fd_f25519_k ); + FD_TEST( fd_memeq( e, s, 32 ) ); + + /* fd_f25519_tobytes should reduce mod p, i.e. only produce canonical results */ + + fd_hex_decode( e, "0000000000000000000000000000000000000000000000000000000000000000", 32 ); + fd_f25519_add_nr( h, fd_f25519_minus_one, fd_f25519_one ); + fd_f25519_tobytes( s, h ); + FD_TEST( fd_memeq( e, s, 32 ) ); + + fd_hex_decode( e, "0100000000000000000000000000000000000000000000000000000000000000", 32 ); + fd_f25519_add_nr( h, fd_f25519_minus_one, fd_f25519_two ); + fd_f25519_tobytes( s, h ); + FD_TEST( fd_memeq( e, s, 32 ) ); + + /* frombytes > tobytes success */ + + fd_hex_decode( e, "feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f", 32 ); + fd_f25519_frombytes( h, e ); + fd_f25519_tobytes( s, h ); + FD_TEST( fd_memeq( e, s, 32 ) ); + + fd_hex_decode( e, "0000000000000000000000000000000000000000000000000000000000000002", 32 ); + fd_f25519_frombytes( h, e ); + fd_f25519_tobytes( s, h ); + FD_TEST( fd_memeq( e, s, 32 ) ); + + fd_hex_decode( e, "ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", 32 ); + fd_f25519_frombytes( h, e ); + fd_f25519_tobytes( s, h ); + FD_TEST( fd_memeq( e, s, 32 ) ); + + /* frombytes > tobytes expected failure */ + + fd_hex_decode( e, "0000000000000000000000000000000000000000000000000000000000000000", 32 ); + fd_hex_decode( s, "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", 32 ); + fd_f25519_frombytes( h, s ); + fd_f25519_tobytes( s, h ); + FD_TEST( fd_memeq( e, s, 32 ) ); + + /* bench */ - fd_ed25519_fe_rng( f, rng ); + fd_f25519_rng_unsafe( h, rng ); ulong iter = 1000000UL; long dt = fd_log_wallclock(); - for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_ed25519_fe_copy( h, f ); } + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( h ); FD_COMPILER_FORGET( h ); fd_f25519_tobytes( s, h ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_copy", iter, dt ); + log_bench( "fd_f25519_tobytes", iter, dt ); } -static void -test_fe_0( fd_rng_t * rng ) { - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; -# if OPENSSL_COMPARE - for( ulong rem=1000000UL; rem; rem-- ) { - fe ref_h; fe_rng( ref_h, rng ); fd_memcpy( h, ref_h, sizeof(fe) ); fe_0( ref_h ); - FD_TEST( fd_ed25519_fe_0( h )==h ); - FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); - } -# endif +void +test_fe_is_zero( FD_PARAM_UNUSED fd_rng_t * rng ) { + uchar _s[32]; uchar * s = _s; + fd_f25519_t _h[1]; fd_f25519_t * h = _h; - fd_ed25519_fe_rng( h, rng ); - ulong iter = 1000000UL; - long dt = fd_log_wallclock(); - for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( h ); fd_ed25519_fe_0( h ); } - dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_0", iter, dt ); + FD_TEST( fd_f25519_is_zero( fd_f25519_zero ) ); + + fd_hex_decode( s, "0000000000000000000000000000000000000000000000000000000000000000", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST_CUSTOM( fd_f25519_is_zero( h ), "fd_f25519_is_zero( 00..00 )" ); + + fd_hex_decode( s, "0000000000000000000000000000000000000000000000000000000000000080", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST_CUSTOM( fd_f25519_is_zero( h ), "fd_f25519_is_zero( 00..80 )" ); + + fd_hex_decode( s, "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST_CUSTOM( fd_f25519_is_zero( h ), "fd_f25519_is_zero( edff..7f )" ); + + fd_hex_decode( s, "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST_CUSTOM( fd_f25519_is_zero( h ), "fd_f25519_is_zero( edff..ff )" ); + + /* negative */ + + FD_TEST( !fd_f25519_is_zero( fd_f25519_one ) ); + FD_TEST( !fd_f25519_is_zero( fd_f25519_minus_one ) ); + + fd_hex_decode( s, "0100000000000000000000000000000000000000000000000000000000000000", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST_CUSTOM( !fd_f25519_is_zero( h ), "!fd_f25519_is_zero( 01..00 )" ); + + fd_hex_decode( s, "0100000000000000000000000000000000000000000000000000000000000080", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST_CUSTOM( !fd_f25519_is_zero( h ), "!fd_f25519_is_zero( 01..80 )" ); + + fd_hex_decode( s, "eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST_CUSTOM( !fd_f25519_is_zero( h ), "!fd_f25519_is_zero( eeff..7f )" ); + + fd_hex_decode( s, "eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST_CUSTOM( !fd_f25519_is_zero( h ), "!fd_f25519_is_zero( eeff..ff )" ); + + fd_hex_decode( s, "ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST_CUSTOM( !fd_f25519_is_zero( h ), "!fd_f25519_is_zero( ecff..7f )" ); + + fd_hex_decode( s, "ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 32 ); + fd_f25519_frombytes( h, s ); + FD_TEST_CUSTOM( !fd_f25519_is_zero( h ), "!fd_f25519_is_zero( ecff..ff )" ); } -static void -test_fe_1( fd_rng_t * rng ) { - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; +void +test_fe_copy( fd_rng_t * rng ) { + fd_f25519_t _f[1]; fd_f25519_t * f = _f; + fd_f25519_t _h[1]; fd_f25519_t * h = _h; # if OPENSSL_COMPARE for( ulong rem=1000000UL; rem; rem-- ) { - fe ref_h; fe_rng( ref_h, rng ); fd_memcpy( h, ref_h, sizeof(fe) ); fe_1( ref_h ); - FD_TEST( fd_ed25519_fe_1( h )==h ); + fe ref_f; fe ref_h; fe_copy( ref_h, fe_rng( ref_f, rng ) ); + fd_memcpy( f, ref_f, sizeof(fe) ); + FD_TEST( fd_f25519_set( h, f )==h ); + FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); + + FD_TEST( fd_f25519_set( f, f )==f ); + FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); } # endif - fd_ed25519_fe_rng( h, rng ); + fd_f25519_rng_unsafe( f, rng ); ulong iter = 1000000UL; long dt = fd_log_wallclock(); - for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( h ); fd_ed25519_fe_1( h ); } + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_f25519_set( h, f ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_1", iter, dt ); + log_bench( "fd_f25519_set", iter, dt ); } -static void +void test_fe_add( fd_rng_t * rng ) { - fd_ed25519_fe_t _f[1]; fd_ed25519_fe_t * f = _f; - fd_ed25519_fe_t _g[1]; fd_ed25519_fe_t * g = _g; - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; + fd_f25519_t _f[1]; fd_f25519_t * f = _f; + fd_f25519_t _g[1]; fd_f25519_t * g = _g; + fd_f25519_t _h[1]; fd_f25519_t * h = _h; # if OPENSSL_COMPARE for( ulong rem=1000000UL; rem; rem-- ) { fe ref_f; fe ref_g; fe ref_h; fe_add( ref_h, fe_rng( ref_f, rng ), fe_rng( ref_g, rng ) ); fd_memcpy( f, ref_f, sizeof(fe) ); fd_memcpy( g, ref_g, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_add( h, f, g )==h ); + FD_TEST( fd_f25519_add( h, f, g )==h ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( g, ref_g, sizeof(fe) ) ); FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); - FD_TEST( fd_ed25519_fe_add( f, f, g )==f ); + FD_TEST( fd_f25519_add( f, f, g )==f ); FD_TEST( !memcmp( g, ref_g, sizeof(fe) ) ); FD_TEST( !memcmp( f, ref_h, sizeof(fe) ) ); fd_memcpy( f, ref_f, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_add( g, f, g )==g ); + FD_TEST( fd_f25519_add( g, f, g )==g ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( g, ref_h, sizeof(fe) ) ); //fd_memcpy( g, ref_g, sizeof(fe) ); } # endif - fd_ed25519_fe_rng( f, rng ); - fd_ed25519_fe_rng( g, rng ); + fd_f25519_rng_unsafe( f, rng ); + fd_f25519_rng_unsafe( g, rng ); ulong iter = 1000000UL; long dt = fd_log_wallclock(); for( ulong rem=iter; rem; rem-- ) { - FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( g ); FD_COMPILER_FORGET( h ); fd_ed25519_fe_add( h, f, g ); + FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( g ); FD_COMPILER_FORGET( h ); fd_f25519_add( h, f, g ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_add", iter, dt ); + log_bench( "fd_f25519_add", iter, dt ); } -static void +void test_fe_sub( fd_rng_t * rng ) { - fd_ed25519_fe_t _f[1]; fd_ed25519_fe_t * f = _f; - fd_ed25519_fe_t _g[1]; fd_ed25519_fe_t * g = _g; - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; + fd_f25519_t _f[1]; fd_f25519_t * f = _f; + fd_f25519_t _g[1]; fd_f25519_t * g = _g; + fd_f25519_t _h[1]; fd_f25519_t * h = _h; # if OPENSSL_COMPARE for( ulong rem=1000000UL; rem; rem-- ) { fe ref_f; fe ref_g; fe ref_h; fe_sub( ref_h, fe_rng( ref_f, rng ), fe_rng( ref_g, rng ) ); fd_memcpy( f, ref_f, sizeof(fe) ); fd_memcpy( g, ref_g, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_sub( h, f, g )==h ); + FD_TEST( fd_f25519_sub( h, f, g )==h ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( g, ref_g, sizeof(fe) ) ); FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); - FD_TEST( fd_ed25519_fe_sub( f, f, g )==f ); + FD_TEST( fd_f25519_sub( f, f, g )==f ); FD_TEST( !memcmp( g, ref_g, sizeof(fe) ) ); FD_TEST( !memcmp( f, ref_h, sizeof(fe) ) ); fd_memcpy( f, ref_f, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_sub( g, f, g )==g ); + FD_TEST( fd_f25519_sub( g, f, g )==g ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( g, ref_h, sizeof(fe) ) ); //fd_memcpy( g, ref_g, sizeof(fe) ); } # endif - fd_ed25519_fe_rng( f, rng ); - fd_ed25519_fe_rng( g, rng ); + fd_f25519_rng_unsafe( f, rng ); + fd_f25519_rng_unsafe( g, rng ); ulong iter = 1000000UL; long dt = fd_log_wallclock(); for( ulong rem=iter; rem; rem-- ) { - FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( g ); FD_COMPILER_FORGET( h ); fd_ed25519_fe_sub( h, f, g ); + FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( g ); FD_COMPILER_FORGET( h ); fd_f25519_sub( h, f, g ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_sub", iter, dt ); + log_bench( "fd_f25519_sub", iter, dt ); } -static void +void test_fe_mul( fd_rng_t * rng ) { - fd_ed25519_fe_t _f[1]; fd_ed25519_fe_t * f = _f; - fd_ed25519_fe_t _g[1]; fd_ed25519_fe_t * g = _g; - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; + fd_f25519_t _f[1]; fd_f25519_t * f = _f; + fd_f25519_t _g[1]; fd_f25519_t * g = _g; + fd_f25519_t _h[1]; fd_f25519_t * h = _h; + fd_f25519_t _e[1]; fd_f25519_t * e = _e; # if OPENSSL_COMPARE for( ulong rem=1000000UL; rem; rem-- ) { fe ref_f; fe ref_g; fe ref_h; fe_mul( ref_h, fe_rng( ref_f, rng ), fe_rng( ref_g, rng ) ); fd_memcpy( f, ref_f, sizeof(fe) ); fd_memcpy( g, ref_g, sizeof(fe) ); - fd_ed25519_fe_t z[1]; fd_ed25519_fe_0( z ); - FD_TEST( fd_ed25519_fe_mul( h, f, g )==h ); + fd_f25519_t z[1]; fd_f25519_0( z ); + FD_TEST( fd_f25519_mul( h, f, g )==h ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( g, ref_g, sizeof(fe) ) ); FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); - FD_TEST( fd_ed25519_fe_mul( f, f, g )==f ); + FD_TEST( fd_f25519_mul( f, f, g )==f ); FD_TEST( !memcmp( g, ref_g, sizeof(fe) ) ); FD_TEST( !memcmp( f, ref_h, sizeof(fe) ) ); fd_memcpy( f, ref_f, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_mul( g, f, g )==g ); + FD_TEST( fd_f25519_mul( g, f, g )==g ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( g, ref_h, sizeof(fe) ) ); //fd_memcpy( f, ref_f, sizeof(fe) ); } # endif - fd_ed25519_fe_rng( f, rng ); - fd_ed25519_fe_rng( g, rng ); + uchar buf[32], ebuf[32]; + fd_hex_decode( buf, "67ccf547e004ba7acda6c72bf9d7d6c5ea20ff33bd887ef92764243c83488700", 32 ); + fd_f25519_frombytes( f, buf ); + fd_hex_decode( buf, "58ad456df8e6593162f595ee41b26590052a98a75a243db7f26b3c5f2aba1430", 32 ); + fd_f25519_frombytes( g, buf ); + fd_hex_decode( ebuf, "0000000000000000000000000000000000000000000000000000000000000002", 32 ); + fd_f25519_frombytes( e, ebuf ); + fd_f25519_mul( h, f, g ); + FD_TEST( fd_f25519_eq( e, h ) ); + fd_f25519_tobytes( buf, h ); + FD_TEST( fd_memeq( buf, ebuf, 32 ) ); + + fd_f25519_rng_unsafe( f, rng ); + fd_f25519_rng_unsafe( g, rng ); ulong iter = 1000000UL; long dt = fd_log_wallclock(); for( ulong rem=iter; rem; rem-- ) { - FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( g ); FD_COMPILER_FORGET( h ); fd_ed25519_fe_mul( h, f, g ); + FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( g ); FD_COMPILER_FORGET( h ); fd_f25519_mul( h, f, g ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_mul", iter, dt ); + log_bench( "fd_f25519_mul", iter, dt ); } -static void +void test_fe_sq( fd_rng_t * rng ) { - fd_ed25519_fe_t _f[1]; fd_ed25519_fe_t * f = _f; - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; + fd_f25519_t _f[1]; fd_f25519_t * f = _f; + fd_f25519_t _h[1]; fd_f25519_t * h = _h; # if OPENSSL_COMPARE for( ulong rem=1000000UL; rem; rem-- ) { fe ref_f; fe ref_h; fe_sq( ref_h, fe_rng( ref_f, rng ) ); fd_memcpy( f, ref_f, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_sq( h, f )==h ); + FD_TEST( fd_f25519_sqr( h, f )==h ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); - FD_TEST( fd_ed25519_fe_sq( f, f )==f ); + FD_TEST( fd_f25519_sqr( f, f )==f ); FD_TEST( !memcmp( f, ref_h, sizeof(fe) ) ); //fd_memcpy( f, ref_f, sizeof(fe) ); } # endif - fd_ed25519_fe_rng( f, rng ); + fd_f25519_rng_unsafe( f, rng ); ulong iter = 1000000UL; long dt = fd_log_wallclock(); - for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_ed25519_fe_sq( h, f ); } + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_f25519_sqr( h, f ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_sq", iter, dt ); + log_bench( "fd_f25519_sqr", iter, dt ); } -static void +void test_fe_invert( fd_rng_t * rng ) { - fd_ed25519_fe_t _f[1]; fd_ed25519_fe_t * f = _f; - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; + fd_f25519_t _f[1]; fd_f25519_t * f = _f; + fd_f25519_t _h[1]; fd_f25519_t * h = _h; # if OPENSSL_COMPARE for( ulong rem=10000UL; rem; rem-- ) { fe ref_f; fe ref_h; fe_invert( ref_h, fe_rng( ref_f, rng ) ); fd_memcpy( f, ref_f, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_invert( h, f )==h ); + FD_TEST( fd_f25519_inv( h, f )==h ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); - FD_TEST( fd_ed25519_fe_invert( f, f )==f ); + FD_TEST( fd_f25519_inv( f, f )==f ); FD_TEST( !memcmp( f, ref_h, sizeof(fe) ) ); //fd_memcpy( f, ref_f, sizeof(fe) ); } # endif - fd_ed25519_fe_rng( f, rng ); + fd_f25519_rng_unsafe( f, rng ); ulong iter = 10000UL; long dt = fd_log_wallclock(); - for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_ed25519_fe_invert( h, f ); } + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_f25519_inv( h, f ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_invert", iter, dt ); + log_bench( "fd_f25519_inv", iter, dt ); } -static void +void test_fe_neg( fd_rng_t * rng ) { - fd_ed25519_fe_t _f[1]; fd_ed25519_fe_t * f = _f; - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; + fd_f25519_t _f[1]; fd_f25519_t * f = _f; + fd_f25519_t _h[1]; fd_f25519_t * h = _h; # if OPENSSL_COMPARE for( ulong rem=100000UL; rem; rem-- ) { fe ref_f; fe ref_h; fe_neg( ref_h, fe_rng( ref_f, rng ) ); fd_memcpy( f, ref_f, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_neg( h, f )==h ); + FD_TEST( fd_f25519_neg( h, f )==h ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); - FD_TEST( fd_ed25519_fe_neg( f, f )==f ); + FD_TEST( fd_f25519_neg( f, f )==f ); FD_TEST( !memcmp( f, ref_h, sizeof(fe) ) ); //fd_memcpy( f, ref_f, sizeof(fe) ); } # endif - fd_ed25519_fe_rng( f, rng ); + fd_f25519_rng_unsafe( f, rng ); ulong iter = 100000UL; long dt = fd_log_wallclock(); - for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_ed25519_fe_neg( h, f ); } + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_f25519_neg( h, f ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_neg", iter, dt ); + log_bench( "fd_f25519_neg", iter, dt ); } -static void +void test_fe_if( fd_rng_t * rng ) { - fd_ed25519_fe_t _f[1]; fd_ed25519_fe_t * f = _f; - fd_ed25519_fe_t _g[1]; fd_ed25519_fe_t * g = _g; - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; - int c; + fd_f25519_t _f[1]; fd_f25519_t * f = _f; + fd_f25519_t _g[1]; fd_f25519_t * g = _g; + fd_f25519_t _h[1]; fd_f25519_t * h = _h; + uchar c; # if OPENSSL_COMPARE for( ulong rem=100000UL; rem; rem-- ) { fe ref_f; fe ref_g; fe ref_h; @@ -361,135 +468,137 @@ test_fe_if( fd_rng_t * rng ) { fd_memcpy( ref_h, ref_g, sizeof(fe) ); fe_cmov( ref_h, ref_f, (uint)c ); fd_memcpy( f, ref_f, sizeof(fe) ); fd_memcpy( g, ref_g, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_if( h, c, f, g )==h ); + FD_TEST( fd_f25519_if( h, c, f, g )==h ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( g, ref_g, sizeof(fe) ) ); FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); - FD_TEST( fd_ed25519_fe_if( f, c, f, g )==f ); + FD_TEST( fd_f25519_if( f, c, f, g )==f ); FD_TEST( !memcmp( g, ref_g, sizeof(fe) ) ); FD_TEST( !memcmp( f, ref_h, sizeof(fe) ) ); fd_memcpy( f, ref_f, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_if( g, c, f, g )==g ); + FD_TEST( fd_f25519_if( g, c, f, g )==g ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( g, ref_h, sizeof(fe) ) ); } # endif - fd_ed25519_fe_rng( f, rng ); - fd_ed25519_fe_rng( g, rng ); + fd_f25519_rng_unsafe( f, rng ); + fd_f25519_rng_unsafe( g, rng ); + FD_TEST( !fd_memeq( f, g, 32 ) ); + + FD_TEST( fd_memeq( fd_f25519_if( h, 1, f, g ), f, 32 ) ); + FD_TEST( fd_memeq( fd_f25519_if( h, 0, f, g ), g, 32 ) ); + ulong iter = 100000UL; long dt = fd_log_wallclock(); for( ulong rem=iter; rem; rem-- ) { - c = (int)(rem & 1UL); + c = (uchar)(rem & 1UL); FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( c ); FD_COMPILER_FORGET( h ); - fd_ed25519_fe_if( h, c, f, g ); + fd_f25519_if( h, c, f, g ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_if", iter, dt ); + log_bench( "fd_f25519_if", iter, dt ); } -static void +void test_fe_isnonzero( fd_rng_t * rng ) { - fd_ed25519_fe_t _f[1]; fd_ed25519_fe_t * f = _f; + fd_f25519_t _f[1]; fd_f25519_t * f = _f; int c; # if OPENSSL_COMPARE for( ulong rem=100000UL; rem; rem-- ) { fe ref_f; c = fe_isnonzero( fe_rng( ref_f, rng ) ); fd_memcpy( f, ref_f, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_isnonzero( f )==c ); + FD_TEST( fd_f25519_is_nonzero( f )==c ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); } # endif - fd_ed25519_fe_rng( f, rng ); + fd_f25519_rng_unsafe( f, rng ); ulong iter = 100000UL; long dt = fd_log_wallclock(); for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); - c = fd_ed25519_fe_isnonzero( f ); + c = fd_f25519_is_nonzero( f ); FD_COMPILER_FORGET( c ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_isnonzero", iter, dt ); + log_bench( "fd_f25519_is_nonzero", iter, dt ); } -static void -test_fe_isnegative( fd_rng_t * rng ) { - fd_ed25519_fe_t _f[1]; fd_ed25519_fe_t * f = _f; - int c; +void +test_fe_pow22523( fd_rng_t * rng ) { + fd_f25519_t _f[1]; fd_f25519_t * f = _f; + fd_f25519_t _h[1]; fd_f25519_t * h = _h; # if OPENSSL_COMPARE for( ulong rem=100000UL; rem; rem-- ) { - fe ref_f; c = fe_isnegative( fe_rng( ref_f, rng ) ); - fd_memcpy( f, ref_f, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_isnegative( f )==c ); - FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); - } -# endif - - fd_ed25519_fe_rng( f, rng ); - ulong iter = 100000UL; - long dt = fd_log_wallclock(); - for( ulong rem=iter; rem; rem-- ) { - FD_COMPILER_FORGET( f ); - c = fd_ed25519_fe_isnegative( f ); - FD_COMPILER_FORGET( c ); - } - dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_isnegative", iter, dt ); -} - -static void -test_fe_sq2( fd_rng_t * rng ) { - fd_ed25519_fe_t _f[1]; fd_ed25519_fe_t * f = _f; - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; -# if OPENSSL_COMPARE - for( ulong rem=1000000UL; rem; rem-- ) { - fe ref_f; fe ref_h; fe_sq2( ref_h, fe_rng( ref_f, rng ) ); + fe ref_f; fe ref_h; fe_pow22523( ref_h, fe_rng( ref_f, rng ) ); fd_memcpy( f, ref_f, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_sq2( h, f )==h ); + FD_TEST( fd_f25519_pow22523( h, f )==h ); FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); - FD_TEST( fd_ed25519_fe_sq2( f, f )==f ); + FD_TEST( fd_f25519_pow22523( f, f )==f ); FD_TEST( !memcmp( f, ref_h, sizeof(fe) ) ); //fd_memcpy( f, ref_f, sizeof(fe) ); } # endif - fd_ed25519_fe_rng( f, rng ); - ulong iter = 1000000UL; - long dt = fd_log_wallclock(); - for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_ed25519_fe_sq2( h, f ); } - dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_sq2", iter, dt ); -} + fd_f25519_rng_unsafe( f, rng ); + ulong iter = 100000UL; -static void -test_fe_pow22523( fd_rng_t * rng ) { - fd_ed25519_fe_t _f[1]; fd_ed25519_fe_t * f = _f; - fd_ed25519_fe_t _h[1]; fd_ed25519_fe_t * h = _h; -# if OPENSSL_COMPARE - for( ulong rem=100000UL; rem; rem-- ) { - fe ref_f; fe ref_h; fe_pow22523( ref_h, fe_rng( ref_f, rng ) ); - fd_memcpy( f, ref_f, sizeof(fe) ); - FD_TEST( fd_ed25519_fe_pow22523( h, f )==h ); - FD_TEST( !memcmp( f, ref_f, sizeof(fe) ) ); - FD_TEST( !memcmp( h, ref_h, sizeof(fe) ) ); + { + long dt = fd_log_wallclock(); + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_f25519_pow22523( h, f ); } + dt = fd_log_wallclock() - dt; + log_bench( "fd_f25519_pow22523", iter, dt ); + } - FD_TEST( fd_ed25519_fe_pow22523( f, f )==f ); - FD_TEST( !memcmp( f, ref_h, sizeof(fe) ) ); - //fd_memcpy( f, ref_f, sizeof(fe) ); + /* during refactor, fd_f25519_pow22523_2 & fd_f25519_pow22523_4 + were not implemented. leaving the tests in case we add them. */ +#if 0 + fd_f25519_t _fb[1]; fd_f25519_t * fb = _fb; + fd_f25519_t _hb[1]; fd_f25519_t * hb = _hb; + fd_f25519_t _fc[1]; fd_f25519_t * fc = _fc; + fd_f25519_t _hc[1]; fd_f25519_t * hc = _hc; + fd_f25519_t _fd[1]; fd_f25519_t * fd = _fd; + fd_f25519_t _hd[1]; fd_f25519_t * hd = _hd; + fd_f25519_t _ref_h[1]; fd_f25519_t * ref_h = _ref_h; + memset(ref_h, 0, sizeof(fd_f25519_t)); + memset(h, 0, sizeof(fd_f25519_t)); + memset(hb, 0, sizeof(fd_f25519_t)); + memset(hc, 0, sizeof(fd_f25519_t)); + memset(hd, 0, sizeof(fd_f25519_t)); + fd_f25519_rng_unsafe( fb, rng ); + fd_f25519_rng_unsafe( fc, rng ); + fd_f25519_rng_unsafe( fd, rng ); + + fd_f25519_pow22523( ref_h, f ); + fd_f25519_pow22523_2( h,f, hb,f ); + FD_TEST( !memcmp( h, ref_h, sizeof(fd_f25519_t) ) ); + FD_TEST( !memcmp( hb, ref_h, sizeof(fd_f25519_t) ) ); + + fd_f25519_pow22523_4( h,f, hb,f, hc,f, hd,f ); + FD_TEST( !memcmp( h, ref_h, sizeof(fd_f25519_t) ) ); + FD_TEST( !memcmp( hb, ref_h, sizeof(fd_f25519_t) ) ); + FD_TEST( !memcmp( hc, ref_h, sizeof(fd_f25519_t) ) ); + FD_TEST( !memcmp( hd, ref_h, sizeof(fd_f25519_t) ) ); + + { + long dt = fd_log_wallclock(); + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_f25519_pow22523_2( h,f, hb,fb ); } + dt = fd_log_wallclock() - dt; + log_bench( "fd_f25519_pow22523_2", iter, dt ); } -# endif - fd_ed25519_fe_rng( f, rng ); - ulong iter = 100000UL; - long dt = fd_log_wallclock(); - for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_ed25519_fe_pow22523( h, f ); } - dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_fe_pow22523", iter, dt ); + { + long dt = fd_log_wallclock(); + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( h ); fd_f25519_pow22523_4( h,f, hb,fb, hc,fc, hd,fd ); } + dt = fd_log_wallclock() - dt; + log_bench( "fd_f25519_pow22523_4", iter, dt ); + } +#endif } /* FIXME: ADD VMUL, VSQ, VSQN TESTS HERE */ @@ -498,9 +607,80 @@ test_fe_pow22523( fd_rng_t * rng ) { /* FIXME: ADD GE TESTS HERE */ +static void +test_point_validate( FD_PARAM_UNUSED fd_rng_t * rng ) { + uchar _buf[32]; uchar * buf = _buf; + + fd_ed25519_point_tobytes( buf, fd_ed25519_base_point ); + FD_TEST_CUSTOM( fd_ed25519_point_validate( buf ), "fd_ed25519_point_validate(fd_ed25519_base_point)" ); + + fd_hex_decode( buf, "0000000000000000000000000000000000000000000000000000000000000000", 32 ); + FD_TEST_CUSTOM( fd_ed25519_point_validate( buf ), "fd_ed25519_point_validate(00..00)" ); + + fd_hex_decode( buf, "0100000000000000000000000000000000000000000000000000000000000000", 32 ); + FD_TEST_CUSTOM( fd_ed25519_point_validate( buf ), "fd_ed25519_point_validate(01..00)" ); + + fd_hex_decode( buf, "26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05", 32 ); + FD_TEST_CUSTOM( fd_ed25519_point_validate( buf ), "fd_ed25519_point_validate(01..00)" ); + + fd_hex_decode( buf, "c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa", 32 ); + FD_TEST_CUSTOM( fd_ed25519_point_validate( buf ), "fd_ed25519_point_validate(01..00)" ); + + fd_hex_decode( buf, "0100000000000000000000000000000000000000000000000000000000000080", 32 ); + FD_TEST_CUSTOM( fd_ed25519_point_validate( buf ), "fd_ed25519_point_validate(01..00)" ); + + fd_hex_decode( buf, "eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 32 ); + FD_TEST_CUSTOM( fd_ed25519_point_validate( buf ), "fd_ed25519_point_validate(01..00)" ); + + fd_hex_decode( buf, "edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 32 ); + FD_TEST_CUSTOM( fd_ed25519_point_validate( buf ), "fd_ed25519_point_validate(01..00)" ); + + fd_hex_decode( buf, "0300000000000000000000000000000000000000000000000000000000000000", 32 ); + FD_TEST_CUSTOM( fd_ed25519_point_validate( buf ), "fd_ed25519_point_validate(01..00)" ); + + fd_hex_decode( buf, "f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", 32 ); + FD_TEST_CUSTOM( fd_ed25519_point_validate( buf ), "fd_ed25519_point_validate(01..00)" ); + + /* negative tests */ + + fd_hex_decode( buf, "0200000000000000000000000000000000000000000000000000000000000000", 32 ); + FD_TEST_CUSTOM( !fd_ed25519_point_validate( buf ), "!fd_ed25519_point_validate(02..00)" ); + + fd_hex_decode( buf, "b898e00f6f6df758b3f9a05cbf73b15fd392a008a9a417d471c178c1b28c7447", 32 ); + FD_TEST_CUSTOM( !fd_ed25519_point_validate( buf ), "!fd_ed25519_point_validate(02..00)" ); +} + + /**********************************************************************/ -static void +void +test_sc_validate( FD_PARAM_UNUSED fd_rng_t * rng ) { + uchar _in [64]; uchar * in = _in; + uchar _out[32]; uchar * out = _out; + + FD_TEST( fd_curve25519_scalar_validate( fd_curve25519_scalar_zero ) ); + FD_TEST( fd_curve25519_scalar_validate( fd_curve25519_scalar_one ) ); + FD_TEST( fd_curve25519_scalar_validate( fd_curve25519_scalar_minus_one ) ); + + /* negative test */ + fd_memcpy( out, fd_curve25519_scalar_minus_one, 32 ); out[0] = 0xed; + FD_TEST( !fd_curve25519_scalar_validate( out ) ); + fd_rng_b256( rng, out ); out[31] |= 0x20; + FD_TEST( !fd_curve25519_scalar_validate( out ) ); + + /* random success */ + fd_rng_b512( rng, in ); + fd_curve25519_scalar_reduce( out, in ); + FD_TEST( fd_curve25519_scalar_validate( out ) ); + + ulong iter = 1000000UL; + long dt = fd_log_wallclock(); + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( out ); fd_curve25519_scalar_validate( out ); } + dt = fd_log_wallclock() - dt; + log_bench( "fd_curve25519_scalar_validate", iter, dt ); +} + +void test_sc_reduce( fd_rng_t * rng ) { uchar _in [64]; uchar * in = _in; uchar _out[64]; uchar * out = _out; @@ -508,11 +688,11 @@ test_sc_reduce( fd_rng_t * rng ) { for( ulong rem=1000000UL; rem; rem-- ) { uchar ref_in[64]; uchar ref_out[64]; x25519_sc_reduce( fd_memcpy( ref_out, fd_rng_b512( rng, ref_in ), 64UL ) ); fd_memcpy( in, ref_in, 64UL ); - FD_TEST( fd_ed25519_sc_reduce( out, in )==out ); + FD_TEST( fd_curve25519_scalar_reduce( out, in )==out ); FD_TEST( !memcmp( in, ref_in, 64UL ) ); FD_TEST( !memcmp( out, ref_out, 32UL ) ); /* yes 32 */ - FD_TEST( fd_ed25519_sc_reduce( in, in )==in ); + FD_TEST( fd_curve25519_scalar_reduce( in, in )==in ); FD_TEST( !memcmp( in, ref_out, 64UL ) ); } # endif @@ -520,12 +700,12 @@ test_sc_reduce( fd_rng_t * rng ) { fd_rng_b512( rng, in ); ulong iter = 1000000UL; long dt = fd_log_wallclock(); - for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( in ); FD_COMPILER_FORGET( out ); fd_ed25519_sc_reduce( out, in ); } + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( in ); FD_COMPILER_FORGET( out ); fd_curve25519_scalar_reduce( out, in ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_sc_reduce", iter, dt ); + log_bench( "fd_curve25519_scalar_reduce", iter, dt ); } -static void +void test_sc_muladd( fd_rng_t * rng ) { uchar _a[32]; uchar * a = _a; uchar _b[32]; uchar * b = _b; @@ -538,25 +718,25 @@ test_sc_muladd( fd_rng_t * rng ) { fd_memcpy( a, ref_a, 32UL ); fd_memcpy( b, ref_b, 32UL ); fd_memcpy( c, ref_c, 32UL ); - FD_TEST( fd_ed25519_sc_muladd( s, a, b, c )==s ); + FD_TEST( fd_curve25519_scalar_muladd( s, a, b, c )==s ); FD_TEST( !memcmp( a, ref_a, 32UL ) ); FD_TEST( !memcmp( b, ref_b, 32UL ) ); FD_TEST( !memcmp( c, ref_c, 32UL ) ); FD_TEST( !memcmp( s, ref_s, 32UL ) ); - FD_TEST( fd_ed25519_sc_muladd( a, a, b, c )==a ); + FD_TEST( fd_curve25519_scalar_muladd( a, a, b, c )==a ); FD_TEST( !memcmp( b, ref_b, 32UL ) ); FD_TEST( !memcmp( c, ref_c, 32UL ) ); FD_TEST( !memcmp( a, ref_s, 32UL ) ); fd_memcpy( a, ref_a, 32UL ); - FD_TEST( fd_ed25519_sc_muladd( b, a, b, c )==b ); + FD_TEST( fd_curve25519_scalar_muladd( b, a, b, c )==b ); FD_TEST( !memcmp( a, ref_a, 32UL ) ); FD_TEST( !memcmp( c, ref_c, 32UL ) ); FD_TEST( !memcmp( b, ref_s, 32UL ) ); fd_memcpy( b, ref_b, 32UL ); - FD_TEST( fd_ed25519_sc_muladd( c, a, b, c )==c ); + FD_TEST( fd_curve25519_scalar_muladd( c, a, b, c )==c ); FD_TEST( !memcmp( a, ref_a, 32UL ) ); FD_TEST( !memcmp( b, ref_b, 32UL ) ); FD_TEST( !memcmp( c, ref_s, 32UL ) ); @@ -571,17 +751,18 @@ test_sc_muladd( fd_rng_t * rng ) { long dt = fd_log_wallclock(); for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( a ); FD_COMPILER_FORGET( b ); FD_COMPILER_FORGET( c ); - fd_ed25519_sc_muladd( s, a, b, c ); + fd_curve25519_scalar_muladd( s, a, b, c ); } dt = fd_log_wallclock() - dt; - log_bench( "fd_ed25519_sc_muladd", iter, dt ); + log_bench( "fd_curve25519_scalar_muladd", iter, dt ); } -static void +void test_public_from_private( fd_rng_t * rng, fd_sha512_t * sha ) { uchar _prv[32]; uchar * prv = _prv; uchar _pub[32]; uchar * pub = _pub; + uchar _exp[32]; uchar * exp = _exp; # if OPENSSL_COMPARE for( ulong rem=10000UL; rem; rem-- ) { uchar ref_prv[32]; uchar ref_pub[32]; ED25519_public_from_private( ref_pub, fd_rng_b256( rng, ref_prv ) ); @@ -591,8 +772,16 @@ test_public_from_private( fd_rng_t * rng, FD_TEST( !memcmp( pub, ref_pub, 32UL ) ); } # endif + fd_hex_decode( prv, "aac11373b6f936a0d22759e6a54e0a11947cd183cf34df9dec10e234b5d133eb", 32 ); + fd_hex_decode( exp, "1ddd2c92234f97eda0c91d0191491392a70fbe42fedc0df99d871583d9ad351f", 32 ); + fd_ed25519_public_from_private( pub, prv, sha ); + // FD_TEST( fd_memeq( pub, exp, 32UL ) ); fd_rng_b256( rng, prv ); + fd_ed25519_public_from_private( pub, prv, sha ); + // FD_LOG_HEXDUMP_WARNING(( "prv", prv, 32 )); + // FD_LOG_HEXDUMP_WARNING(( "pub", pub, 32 )); + ulong iter = 10000UL; long dt = fd_log_wallclock(); for( ulong rem=iter; rem; rem-- ) { @@ -603,13 +792,14 @@ test_public_from_private( fd_rng_t * rng, log_bench( "fd_ed25519_public_from_private", iter, dt ); } -static void +void test_sign( fd_rng_t * rng, fd_sha512_t * sha ) { uchar _msg[ 1024 ]; uchar * msg = _msg; uchar _pub[ 32 ]; uchar * pub = _pub; uchar _prv[ 32 ]; uchar * prv = _prv; uchar _sig[ 64 ]; uchar * sig = _sig; + uchar _exp[ 64 ]; uchar * exp = _exp; # if OPENSSL_COMPARE for( ulong rem=10000UL; rem; rem-- ) { uchar ref_msg[ 1024 ]; uchar ref_pub[32]; uchar ref_prv[32]; uchar ref_sig[64]; @@ -628,10 +818,16 @@ test_sign( fd_rng_t * rng, } # endif + fd_hex_decode( prv, "57835dc6a20e4efd70e90882dbd832b577dbc469960284e0ee718fb526d2ec84", 32 ); + fd_hex_decode( exp, "d65759870ce42b34fd955871f0371ce1c9a976edbe98417b84541bb4c68b65a0673799895c61d530624ffbf92c047d47d4eb4cd1bac2ecee1365faebb53a6303", 64 ); + fd_ed25519_public_from_private( pub, prv, sha ); + fd_ed25519_sign( sig, (uchar *)"", 0, pub, prv, sha ); + FD_TEST( fd_memeq( sig, exp, 64UL ) ); + for( ulong b=0; b<1024UL; b++ ) msg[b] = fd_rng_uchar( rng ); fd_ed25519_public_from_private( pub, fd_rng_b256( rng, prv ), sha ); - ulong iter = 10000UL; + ulong iter = 10000UL; for( ulong sz=128UL; sz<=1024UL; sz+=128UL ) { long dt = fd_log_wallclock(); for( ulong rem=iter; rem; rem-- ) { @@ -646,7 +842,7 @@ test_sign( fd_rng_t * rng, } } -static void +void test_verify( fd_rng_t * rng, fd_sha512_t * sha ) { uchar _msg[ 1024 ]; uchar * msg = _msg; @@ -712,7 +908,11 @@ test_verify( fd_rng_t * rng, ulong iter = 10000UL; for( ulong sz=128UL; sz<=1024UL; sz+=128UL ) { + char cstr[128]; fd_ed25519_sign( sig, msg, sz, pub, prv, sha ); + + FD_TEST_CUSTOM( fd_ed25519_verify( msg, sz, sig, pub, sha )==FD_ED25519_SUCCESS, fd_cstr_printf( cstr, 128UL, NULL, "fd_ed25519_verify(good %lu)", sz ) ); + long dt = fd_log_wallclock(); for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( sig ); FD_COMPILER_FORGET( msg ); FD_COMPILER_FORGET( sz ); @@ -720,10 +920,40 @@ test_verify( fd_rng_t * rng, fd_ed25519_verify( msg, sz, sig, pub, sha ); } dt = fd_log_wallclock() - dt; - char cstr[128]; log_bench( fd_cstr_printf( cstr, 128UL, NULL, "fd_ed25519_verify(good %lu)", sz ), iter, dt ); } + for( ulong sz=1024UL; sz<=1024UL; sz+=128UL ) { + uchar _pubs[ 32*16 ]; uchar * pubs = _pubs; + uchar _sigs[ 64*16 ]; uchar * sigs = _sigs; + uchar _prv2[ 32 ]; uchar * prv2 = _prv2; + fd_sha512_t * _shas[ 16 ]; fd_sha512_t ** shas = _shas; + for( ulong j=0; j<16; j++ ) { + _shas[j] = sha; + fd_rng_b256( rng, prv2 ); + fd_ed25519_public_from_private( &pubs[32*j], prv2, sha ); + fd_ed25519_sign( &sigs[64*j], msg, sz, &pubs[32*j], prv2, sha ); + } + for( uchar batch=1; batch<=12; batch=(uchar)(batch*2) ) { + + // FD_TEST( fd_ed25519_verify( msg, sz, sigs, pubs, sha )==FD_ED25519_SUCCESS ); + FD_TEST( fd_ed25519_verify_batch_single_msg( msg, sz, sigs, pubs, shas, batch )==FD_ED25519_SUCCESS ); + + long dt = fd_log_wallclock(); + for( ulong rem=iter/batch; rem; rem-- ) { + FD_COMPILER_FORGET( sigs ); FD_COMPILER_FORGET( msg ); FD_COMPILER_FORGET( sz ); + FD_COMPILER_FORGET( pubs ); FD_COMPILER_FORGET( shas ); FD_COMPILER_FORGET( batch ); + fd_ed25519_verify_batch_single_msg( msg, sz, sigs, pubs, shas, batch ); + } + dt = fd_log_wallclock() - dt; + char cstr[128]; + log_bench( fd_cstr_printf( cstr, 128UL, NULL, "fd_..._verify_batch(%lu / %u)", sz, batch ), iter/batch, dt ); + + /* trick to test 1, 2, 4, 8, 12 => 12 is the max we support */ + if( batch == 8 ) { batch = 6; } + } + } + for( ulong sz=128UL; sz<=1024UL; sz+=128UL ) { fd_ed25519_sign( sig, msg, sz, pub, prv, sha ); long dt = fd_log_wallclock(); @@ -779,19 +1009,76 @@ test_verify( fd_rng_t * rng, } } -static void +void test_wycheproofs( fd_sha512_t * sha ) { + char cstr[128]; for( fd_ed25519_verify_wycheproof_t const * proof = ed25519_verify_wycheproofs; proof->msg; proof++ ) { int actual = ( fd_ed25519_verify( proof->msg, proof->msg_sz, proof->sig, proof->pub, sha ) - == FD_ED25519_SUCCESS ); - FD_TEST( actual == proof->ok ); + == FD_ED25519_SUCCESS ); + FD_TEST_CUSTOM( actual == proof->ok, fd_cstr_printf( cstr, 128UL, NULL, "fd_ed25519_verify_wycheproof id=%d", proof->tc_id ) ); } + FD_LOG_NOTICE(( "fd_ed25519_verify_wycheproof: ok" )); +} +void +test_cctv( fd_sha512_t * sha ) { + char cstr[128]; + for( fd_ed25519_verify_cctv_t const * proof = ed25519_verify_cctvs; + proof->msg; + proof++ ) { + int actual = ( fd_ed25519_verify( proof->msg, proof->msg_sz, proof->sig, proof->pub, sha ) + == FD_ED25519_SUCCESS ); + FD_TEST_CUSTOM( actual == proof->ok, fd_cstr_printf( cstr, 128UL, NULL, "fd_ed25519_verify_cctv id=%d", proof->tc_id ) ); + } + FD_LOG_NOTICE(( "fd_ed25519_verify_cctv: ok" )); +} + +void +test_cctv_batch( fd_rng_t * rng, fd_sha512_t * sha ) { + char cstr[128]; + + uchar const * msg = ed25519_verify_cctvs[7].msg; + ulong msg_sz = ed25519_verify_cctvs[7].msg_sz; + + uchar _pubs[ 32*16 ]; uchar * pubs = _pubs; + uchar _sigs[ 64*16 ]; uchar * sigs = _sigs; + uchar _prv2[ 32 ]; uchar * prv2 = _prv2; + fd_sha512_t * _shas[ 16 ]; fd_sha512_t ** shas = _shas; + + /* generate 16 valid signatures */ + for( ulong j=0; j<16; j++ ) { + _shas[j] = sha; + fd_rng_b256( rng, prv2 ); + fd_ed25519_public_from_private( &pubs[32*j], prv2, sha ); + fd_ed25519_sign( &sigs[64*j], msg, msg_sz, &pubs[32*j], prv2, sha ); + } + FD_TEST( fd_ed25519_verify_batch_single_msg( msg, msg_sz, sigs, pubs, shas, 16 )==FD_ED25519_SUCCESS ); + + for( fd_ed25519_verify_cctv_t const * proof = ed25519_verify_cctvs; + proof->msg; + proof++ ) { + // only keep tests with the same msg + if (proof->msg_sz != msg_sz || !fd_memeq( proof->msg, msg, msg_sz )) { + continue; + } + + fd_memcpy( &sigs[64], proof->sig, 64 ); + fd_memcpy( &pubs[32], proof->pub, 32 ); + + int actual = ( fd_ed25519_verify_batch_single_msg( msg, msg_sz, sigs, pubs, shas, 2 ) + == FD_ED25519_SUCCESS ); + FD_TEST_CUSTOM( actual == proof->ok, fd_cstr_printf( cstr, 128UL, NULL, "fd_ed25519_verify_cctv_batch(2) id=%d", proof->tc_id ) ); + + actual = ( fd_ed25519_verify_batch_single_msg( msg, msg_sz, sigs, pubs, shas, 4 ) + == FD_ED25519_SUCCESS ); + FD_TEST_CUSTOM( actual == proof->ok, fd_cstr_printf( cstr, 128UL, NULL, "fd_ed25519_verify_cctv_batch(4) id=%d", proof->tc_id ) ); + } + FD_LOG_NOTICE(( "fd_ed25519_verify_cctv_batch: ok" )); } /**********************************************************************/ @@ -805,9 +1092,8 @@ main( int argc, test_fe_frombytes ( rng ); test_fe_tobytes ( rng ); + test_fe_is_zero ( rng ); test_fe_copy ( rng ); - test_fe_0 ( rng ); - test_fe_1 ( rng ); test_fe_add ( rng ); test_fe_sub ( rng ); test_fe_mul ( rng ); @@ -816,10 +1102,11 @@ main( int argc, test_fe_neg ( rng ); test_fe_if ( rng ); test_fe_isnonzero ( rng ); - test_fe_isnegative( rng ); - test_fe_sq2 ( rng ); test_fe_pow22523 ( rng ); + test_point_validate( rng ); + + test_sc_validate ( rng ); test_sc_reduce ( rng ); test_sc_muladd ( rng ); @@ -828,6 +1115,8 @@ main( int argc, test_verify ( rng, sha ); test_wycheproofs( sha ); + test_cctv ( sha ); + test_cctv_batch ( rng, sha ); fd_sha512_delete( fd_sha512_leave( sha ) ); fd_rng_delete( fd_rng_leave( rng ) ); diff --git a/src/ballet/ed25519/test_ed25519_cctv.c b/src/ballet/ed25519/test_ed25519_cctv.c new file mode 100644 index 0000000000..8e6e3b6eb2 --- /dev/null +++ b/src/ballet/ed25519/test_ed25519_cctv.c @@ -0,0 +1,6418 @@ +/* Code generated by gen_wycheproofs.py. DO NOT EDIT. */ +/* Generated at 2024-03-07T22:55:49.949587+00:00 */ + +#include "../fd_ballet_base.h" + +struct fd_ed25519_verify_cctv { + char const * comment; + uchar const * msg; + ulong msg_sz; + uchar pub[32]; + uchar sig[64]; + uint tc_id; + int ok; +}; + +typedef struct fd_ed25519_verify_cctv fd_ed25519_verify_cctv_t; + +static fd_ed25519_verify_cctv_t const ed25519_verify_cctvs[] = { + { .tc_id = 0, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 1, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 2, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 3, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 4, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x17\x6f\x12\xcf\xb0\xd4\xe6\xeb\x69\x29\xb1\x9a\xe4\xc9\x98\xef\x05\xc1\xc2\xcf\x62\x8a\x9b\x1f\xa1\xc2\x13\x12\x62\x71\x08", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 5, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x72\xa6\x9c\xd9\xa7\x01\xa5\x0d\x13\x0e\xd5\x21\x89\xe2\x45\x5b\x23\x76\x7d\xb5\x2c\xac\xb8\x71\x6f\xb8\x96\xff\xee\xac\x09", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 6, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\xc0\x2e\x2b\x9e\x63\xe3\x85\xc0\x58\xbf\x62\xb1\x4b\x3a\x2b\x29\xcc\xef\xe8\xe3\x8d\xdb\x53\x6b\xc3\xf9\x86\x53\x20\xa3\xd8\x01", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 7, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\xbb\xfd\x00\xbd\x9c\x25\x9d\x8d\x22\x2d\x15\xe6\x7a\x3d\x82\x28\x58\x50\x50\xdb\xb9\xb9\x58\x5b\xe2\x0d\x8f\xad\xc7\x21\xda\x03", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 1 }, + { .tc_id = 8, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 9, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 10, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 11, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 12, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 13, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 14, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 15, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 16, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x1c\xb4\x21\xdf\xbd\x92\xaa\x6c\x30\xd5\x50\xbf\xf5\x3c\x81\xcf\x65\x0a\xce\x6d\xeb\x96\xa8\xec\x22\xd2\xfe\xf8\x4d\xbb\xe2\x0b", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 17, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xad\x7a\x35\x54\x69\xb5\xc8\x7e\x55\x04\x69\xf6\xb2\xde\x40\x9e\xe7\x23\xac\xd5\x84\xbf\x35\xf8\x6b\x80\xc3\x84\xe8\xce\xb7\x02", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 18, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x5e\x17\x6f\x12\xcf\xb0\xd4\xe6\xeb\x69\x29\xb1\x9a\xe4\xc9\x98\xef\x05\xc1\xc2\xcf\x62\x8a\x9b\x1f\xa1\xc2\x13\x12\x62\x71\x08", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 19, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x94\x72\xa6\x9c\xd9\xa7\x01\xa5\x0d\x13\x0e\xd5\x21\x89\xe2\x45\x5b\x23\x76\x7d\xb5\x2c\xac\xb8\x71\x6f\xb8\x96\xff\xee\xac\x09", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 20, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 21, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 22, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 23, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 24, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 25, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 26, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x75\xb3\xd7\xe9\x54\x7f\xeb\xbd\xbf\x3f\xde\x21\xdf\x90\x1c\x7c\xa1\xfc\x59\xe8\xb6\x89\xa4\xae\x28\x39\x19\xe7\x8c\xf6\x2b\x03", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 27, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x05\x0a\xbf\xfc\xd4\xd8\xcc\xbb\x4b\x8d\x6b\xf6\x64\x9f\x5a\xa9\x9e\x8d\xe5\xcc\x18\x2a\x74\x09\x63\x38\x56\xff\x53\xf4\x9e\x0c", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 28, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x63\x97\x34\xcf\x98\x9e\x31\x4e\x9e\x04\x9f\xc0\x1a\x38\x64\xd1\x91\xfe\xd8\xf2\x31\xb1\x2f\xee\x6f\xa5\x0a\xaa\xdb\xa4\x4b\x0e", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 29, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x73\x2d\x9e\x02\x79\xfe\x00\x1d\x90\x32\x7e\xfa\x31\x98\x16\xe3\xe4\x50\x6b\x78\x43\x2b\x8b\x4e\x1f\x2f\xdc\x4b\x96\x0d\x70\x0f", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 1 }, + { .tc_id = 30, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 31, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 32, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 33, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 34, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 35, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 36, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 37, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 38, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x71\x17\xc2\xec\x78\x30\x65\xc5\x0f\x2c\x93\x0c\xfc\x9d\x31\x8c\x97\x37\x99\x1a\xcb\x26\x0b\x49\xe2\xca\x81\x54\x74\x53\x27\x09", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 39, + .comment = "ed25519vectors 27", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x37", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x5f\xae\x11\x4e\xb0\xc5\x34\xb5\xae\xd0\xa8\x92\xd0\xa0\xe1\xd4\x29\xdf\x6a\x02\x5c\x5a\xe0\x80\x12\xe0\xff\xce\x78\x31\x0c", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 40, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x75\xb3\xd7\xe9\x54\x7f\xeb\xbd\xbf\x3f\xde\x21\xdf\x90\x1c\x7c\xa1\xfc\x59\xe8\xb6\x89\xa4\xae\x28\x39\x19\xe7\x8c\xf6\x2b\x03", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 41, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\x0a\xbf\xfc\xd4\xd8\xcc\xbb\x4b\x8d\x6b\xf6\x64\x9f\x5a\xa9\x9e\x8d\xe5\xcc\x18\x2a\x74\x09\x63\x38\x56\xff\x53\xf4\x9e\x0c", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 42, + .comment = "ed25519vectors 39", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x39", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 43, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 44, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 45, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 46, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 47, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 48, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\xfd\x6f\x47\x8b\x59\xea\xb2\x54\x5c\xf8\xf3\xd4\x8c\x65\x74\xd2\xb4\xe8\xab\xd9\x48\x14\x8d\xa5\xc6\x24\x79\x11\x3b\x8d\x0f", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 49, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x9e\x87\x51\x04\x6a\x31\xd1\x63\xdf\x68\x05\x1b\xbd\x90\x9e\x6d\x26\xc8\x41\x48\x83\xba\x34\x75\xbf\x00\xe1\x7c\x1e\x7b\x04", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 50, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x08\xf3\x2d\x20\x6a\x7c\x0b\x7e\xfa\x9a\x59\xe6\x65\x46\xe8\xf1\xf5\x99\xef\x84\x3f\xb5\x02\xc9\xcc\x3c\x4a\xe8\xb7\xc1\x1e\x05", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 1 }, + { .tc_id = 51, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x03\x0b\x03\x79\x6b\x78\xf7\xaf\xea\xdf\xcc\xae\xdc\x9d\x09\xce\x6d\x48\x7d\x1e\xce\x1f\x16\xb1\xae\x2b\x59\xb7\xe5\xc4\x06\x03", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 52, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 53, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 54, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 55, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 56, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 57, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 58, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 59, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 60, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xc8\x5e\xfb\xb9\x6e\x35\xe1\xb6\x71\x72\x2d\x5d\x8d\xe6\x87\xd4\xe1\x48\xea\x15\xec\x56\x6b\xe6\xa1\xf3\xcf\xb8\xa1\x0a\x9d\x06", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 61, + .comment = "ed25519vectors 29", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x39", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x4b\x18\x62\x7c\xef\x97\x07\x13\x7b\x02\x35\x8c\x8b\x73\x76\x93\x81\x26\x9b\xf7\xca\xc9\xc4\x73\x48\x3c\x83\xc4\x6a\x61\x5d\x09", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 62, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xed\xfd\x6f\x47\x8b\x59\xea\xb2\x54\x5c\xf8\xf3\xd4\x8c\x65\x74\xd2\xb4\xe8\xab\xd9\x48\x14\x8d\xa5\xc6\x24\x79\x11\x3b\x8d\x0f", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 63, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x87\x9e\x87\x51\x04\x6a\x31\xd1\x63\xdf\x68\x05\x1b\xbd\x90\x9e\x6d\x26\xc8\x41\x48\x83\xba\x34\x75\xbf\x00\xe1\x7c\x1e\x7b\x04", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 64, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 65, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 66, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x97\xf5\xfc\x03\xf6\x58\xb5\xb7\x33\xcf\x20\xc4\xea\x55\x77\xe8\xe5\x98\x8e\xe9\x0c\xb2\xa3\xc9\x19\xc2\xa0\x5d\xd2\xfc\xde\x04", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 67, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x27\x86\xa7\x2a\x40\x58\x95\xf7\xb3\xb4\x75\x2e\xac\x49\xc8\x97\x32\x70\x17\x3a\x49\x5e\xc4\x75\xb3\x49\x33\xdc\x05\xd7\xe9\x04", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 68, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xed\xfd\x6f\x47\x8b\x59\xea\xb2\x54\x5c\xf8\xf3\xd4\x8c\x65\x74\xd2\xb4\xe8\xab\xd9\x48\x14\x8d\xa5\xc6\x24\x79\x11\x3b\x8d\x0f", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 69, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x87\x9e\x87\x51\x04\x6a\x31\xd1\x63\xdf\x68\x05\x1b\xbd\x90\x9e\x6d\x26\xc8\x41\x48\x83\xba\x34\x75\xbf\x00\xe1\x7c\x1e\x7b\x04", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 70, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 71, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 72, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\xa0\x75\x54\x95\xe4\xb7\x63\xc0\x7e\xee\xbd\xd5\x10\xeb\x7d\x7b\x16\x7b\xf1\x3b\xf1\x48\x97\x85\xfa\x2b\xe6\x15\x43\x89\x0e", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 73, + .comment = "ed25519vectors 25", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x35", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xaf\xde\xfa\xd9\xd0\x81\x38\x7f\xa5\x02\xd6\x50\x44\x2e\xd1\x56\x19\xfc\x93\x6d\x41\x44\x4f\xd5\xc4\x29\x26\x91\xa1\x6f\x1d\x06", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 74, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\xfd\x6f\x47\x8b\x59\xea\xb2\x54\x5c\xf8\xf3\xd4\x8c\x65\x74\xd2\xb4\xe8\xab\xd9\x48\x14\x8d\xa5\xc6\x24\x79\x11\x3b\x8d\x0f", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 75, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x9e\x87\x51\x04\x6a\x31\xd1\x63\xdf\x68\x05\x1b\xbd\x90\x9e\x6d\x26\xc8\x41\x48\x83\xba\x34\x75\xbf\x00\xe1\x7c\x1e\x7b\x04", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 76, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 77, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 78, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 79, + .comment = "ed25519vectors 22", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x32", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 80, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 81, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 82, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 83, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 84, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\xaa\x80\xce\x94\xa6\xf9\x4b\x9e\x01\xab\xfc\x08\x91\x82\xb3\xd8\x55\x48\x43\x73\x39\xd7\xad\x2e\x3d\x80\x4f\x60\xa8\x7a\x86\x05", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 85, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\xbb\xa6\x8b\x89\x1f\xdc\xe7\xad\x8f\xa9\x23\xbc\x88\x4a\xa3\x3e\xee\xa4\xf3\x41\xae\x5e\xe5\x27\xcb\x7d\x99\xa2\x30\x40\xab\x0e", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 86, + .comment = "ed25519vectors 21", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x31", + .msg_sz = 17UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 87, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 88, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 89, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 90, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 91, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x2c\xd7\xe8\x4d\x7f\x46\x09\xfc\x08\xf0\x69\x56\x1f\x20\x11\x61\x36\x9e\x38\xe5\x08\x56\x2e\xa2\x1f\x0c\x6f\x58\x28\x73\xf5\x00", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 92, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\xef\xaa\x29\xea\x31\xbb\xaf\x7b\x89\x66\x25\xbd\x0f\xbe\x78\xf6\xbb\x7f\x3c\xf0\x93\x40\x77\x94\xdd\x2c\xd6\x09\x6e\x3f\xd1\x03", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 93, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 94, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 95, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 96, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 97, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 98, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x57\xf5\x93\x1a\x40\x2c\x5c\xda\x57\x86\x90\xe3\x3a\x33\xba\x04\x58\xee\xc5\x10\x36\xb5\xc0\x1c\x5c\xd4\x86\xa5\x8c\x0d\x29\x0f", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 99, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x80\x93\x71\x1b\x51\xdc\xe8\xd4\xef\x35\xfd\x23\x9c\xae\xcd\x23\x6d\x2c\xa5\x86\x04\xbc\x77\x98\x80\x70\x85\x68\x42\x3a\x97\x00", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 100, + .comment = "ed25519vectors 23", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x33", + .msg_sz = 17UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 101, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 102, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 103, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 104, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 105, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x69\x13\x95\x2a\xa4\x2c\x06\xcd\x87\x59\xd2\x17\x5f\xa6\x0c\x29\xfb\xa5\xd9\x76\x72\x91\xb8\xcd\xa0\xf5\x8d\x18\x63\x20\xd6\x04", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 106, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x0b\x20\x98\x1a\x60\x24\x24\x34\xfb\x73\x51\xf2\xeb\xc2\x9b\x90\xbb\xd4\x5c\x90\xea\xe5\x37\x73\x79\xd7\x80\x15\x6e\x29\x74\x09", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 107, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 108, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 109, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 110, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 111, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 112, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 113, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 114, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x56\x39\xfc\x07\xdb\x8a\xe6\x13\x08\x18\x41\x87\x6d\x58\x85\x7e\x30\x14\xe5\xf2\xef\xde\xec\x15\x4a\xe0\x31\x8b\x25\x86\xf6\x01", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 115, + .comment = "ed25519vectors 31", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x31", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x15\x09\xe3\xa6\x8b\x74\xa8\xfd\x2b\x4e\x27\x1b\x7c\x58\x4a\x0e\x3c\xb8\x57\xb6\xc3\x47\x3e\x8f\xdf\x34\x36\xa2\xa2\xd0\xcc\x04", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 116, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\xf0\x91\x62\xea\x12\x1f\xb3\xe2\xd1\x27\x0d\xd3\x0a\xde\x8b\x5b\xcf\xdc\xfd\x1d\xcf\x62\x4a\xc2\x2c\xf6\x0a\xf9\x61\x0c\x6c\x02", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 117, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\xec\xf8\xdc\x78\xbf\x5c\x64\x7c\x71\x4a\x00\xac\xf1\x17\x19\x55\x19\x52\xb4\x88\xc2\xc9\xdf\x96\x7c\x7d\x48\xb4\x79\x42\x0e\x0e", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 1 }, + { .tc_id = 118, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 119, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 120, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 121, + .comment = "ed25519vectors 20", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x30", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 122, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 123, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 124, + .comment = "ed25519vectors 39", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x39", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 125, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 126, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\xd6\xa9\xe4\x26\xc0\x87\x1c\x55\xd7\x16\x3f\x0f\xe3\x4e\x77\x6b\xec\x47\xe5\x82\x54\x8d\x9b\xba\x07\x41\x02\xc8\x1f\xce\x02", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 127, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x03\x66\x72\xb8\x2d\x50\x11\x37\x11\x3e\x04\x8a\xbb\xd4\xf4\x40\x90\xe3\xaa\xa7\xe2\x62\xf5\x55\xe3\xe7\x8f\xec\x78\xe5\x07", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 128, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x39\xfc\x07\xdb\x8a\xe6\x13\x08\x18\x41\x87\x6d\x58\x85\x7e\x30\x14\xe5\xf2\xef\xde\xec\x15\x4a\xe0\x31\x8b\x25\x86\xf6\x01", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 129, + .comment = "ed25519vectors 31", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x31", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x15\x09\xe3\xa6\x8b\x74\xa8\xfd\x2b\x4e\x27\x1b\x7c\x58\x4a\x0e\x3c\xb8\x57\xb6\xc3\x47\x3e\x8f\xdf\x34\x36\xa2\xa2\xd0\xcc\x04", + .pub = "\x10\xeb\x7c\x3a\xcf\xb2\xbe\xd3\xe0\xd6\xab\x89\xbf\x5a\x3d\x6a\xfd\xdd\x11\x76\xce\x48\x12\xe3\x8d\x9f\xd4\x85\x05\x8f\xdb\x1f", + .ok = 0 }, + { .tc_id = 130, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 131, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 132, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 133, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 134, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 135, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 136, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x35\xc6\x91\xe8\x20\x33\x93\x82\xbb\x85\xc1\x51\x03\x8e\x4b\x18\x15\xce\xaa\xeb\x76\xbf\xa9\x0c\xb7\xbf\x33\x82\xec\x51\x0b", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 137, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\xab\xf2\x47\x72\x2e\x6b\x42\x13\xf1\x89\x0b\xeb\x32\xc7\x30\xb0\x2a\x92\x9e\x22\xa1\xa8\xde\x5f\xe8\x4f\xa1\xe8\xbe\xc4\x0b", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 138, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x2d\x15\x53\x43\xb4\x93\x37\x33\xbe\x02\x41\x9a\xc0\xad\x25\x56\x66\xea\x0a\xd8\x0d\x99\x98\xcc\x7c\x60\x86\xf4\xcf\x45\x35\x07", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 139, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x25\xe1\x80\xa8\xf9\x7d\xb7\x41\x9c\x7a\xdb\x79\xf5\x06\x3f\x04\x5c\xb1\x8f\xc6\xaf\x51\x78\x52\xe3\x68\x7b\xe8\x4b\xd7\xe8\x03", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 1 }, + { .tc_id = 140, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 141, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 142, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 143, + .comment = "ed25519vectors 27", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x37", + .msg_sz = 17UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 144, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 145, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 146, + .comment = "ed25519vectors 21", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x31", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 147, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 148, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x9b\x8a\x17\x87\xd3\x74\x7a\x07\x40\xed\x28\x3e\x74\xe2\xc4\x78\xd4\xb6\x81\xf0\xaa\x26\x76\xa5\xc6\x94\x88\x96\x96\x13\x82\x05", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 149, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x93\x8d\xd3\x02\x60\xe6\xbc\xe7\xf9\x42\x2c\x05\xde\xf4\x5b\xa6\x73\x29\x46\xa9\xf1\x23\x6a\xff\x3a\x18\x79\x02\xd7\x12\x88\x08", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 150, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x56\x35\xc6\x91\xe8\x20\x33\x93\x82\xbb\x85\xc1\x51\x03\x8e\x4b\x18\x15\xce\xaa\xeb\x76\xbf\xa9\x0c\xb7\xbf\x33\x82\xec\x51\x0b", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 151, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xd2\xab\xf2\x47\x72\x2e\x6b\x42\x13\xf1\x89\x0b\xeb\x32\xc7\x30\xb0\x2a\x92\x9e\x22\xa1\xa8\xde\x5f\xe8\x4f\xa1\xe8\xbe\xc4\x0b", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 152, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 153, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 154, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 155, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 156, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 157, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 158, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xfc\x5d\x42\x21\x1d\xbe\xe0\x53\xd3\xba\xc3\x91\x3e\x05\xf3\x2c\x80\x26\x27\x4b\x19\x26\xb5\x57\x06\xc6\x21\xee\xfa\xa7\xc8\x05", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 159, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7e\xcd\xe7\x5a\x10\xd2\xcf\x5c\x13\xc4\x9b\x78\xe4\x02\x61\x48\x48\x4c\x48\xd1\x51\x61\x6a\xe9\x34\xcf\x4e\xc6\x6f\x0e\x37\x02", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 160, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x68\x96\x6b\xbf\xc7\xbc\xce\x00\xae\xeb\xb5\x61\xf0\x19\x7c\xb0\xb8\x23\xec\x3f\x17\x05\x63\x33\xfc\xe7\x34\x86\xdc\x3c\xbe\x06", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 161, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x26\xc8\xd0\xde\x09\x53\xdf\x46\xbc\x00\x49\xfe\xd1\x26\x1b\x7c\x06\x18\x9e\x84\xe5\xc1\x49\x85\x45\x44\x85\xba\x5a\x4f\xb5\x01", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 1 }, + { .tc_id = 162, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 163, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 164, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 165, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 166, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 167, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 168, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 169, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 170, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\xd8\x0e\xd8\xbe\x56\x36\x44\x30\x22\xfa\x8a\x24\xdb\xe8\xf6\x49\xbe\xa0\xe6\xed\xc5\xa6\xa6\x5b\x29\xdb\x14\xca\xa1\xb8\x0e", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 171, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\xb0\x5c\x8a\x71\xd4\xd3\x41\xe7\x43\x40\x53\x6f\xea\x96\xcd\x93\x57\x7c\x80\x44\x87\x94\x00\xda\x68\xb5\x77\xed\x7d\x72\x07", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 172, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x5d\x42\x21\x1d\xbe\xe0\x53\xd3\xba\xc3\x91\x3e\x05\xf3\x2c\x80\x26\x27\x4b\x19\x26\xb5\x57\x06\xc6\x21\xee\xfa\xa7\xc8\x05", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 173, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7e\xcd\xe7\x5a\x10\xd2\xcf\x5c\x13\xc4\x9b\x78\xe4\x02\x61\x48\x48\x4c\x48\xd1\x51\x61\x6a\xe9\x34\xcf\x4e\xc6\x6f\x0e\x37\x02", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 174, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 175, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 176, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 177, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 178, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 179, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 180, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x4a\xae\x8a\xe8\xd1\x65\x86\x70\x53\xdd\x1c\x38\x06\x31\x9e\x06\x45\x23\xaa\x05\x3b\x1d\x70\x03\x46\x3d\xe8\xc5\xfc\xba\x0f", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 181, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x4c\xd8\x5e\x18\xf5\xb8\x9b\xfc\x21\xb4\xd2\x9b\x43\xe3\x00\x38\xf8\x42\x28\xfe\x81\xef\xf5\xb7\xd7\x35\x07\x3b\xa2\x99\x09", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 182, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x3c\xb7\x43\xa4\x85\xcf\xfa\xa6\x84\xd0\xd6\x6a\x5a\xe3\x47\xd1\x7a\x56\x38\xe9\x0d\xc2\xbe\x54\x10\x23\x11\x4a\x59\x61\xf8\x05", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 1 }, + { .tc_id = 183, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x1f\xc4\x09\xb2\x36\x53\x95\x03\xe7\x85\x60\xd6\x18\x3d\x74\x8c\x8a\x6d\x3e\x63\x5e\x87\xc9\x39\x75\x31\x39\x4f\x3c\xb3\xf9\x02", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 184, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 185, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 186, + .comment = "ed25519vectors 34", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x34", + .msg_sz = 17UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 187, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 188, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 189, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 190, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 191, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 192, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x1b\xb2\x60\xc3\x6a\xea\x3c\x94\xff\x57\x85\xb5\xa4\x4d\x99\xa8\x8c\x33\xe0\x2d\xce\xb9\xfd\xfe\x9a\xe5\x7a\xad\x60\x4b\x03", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 193, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xb3\x8e\x0b\x97\x73\x17\x5c\xda\xe4\x74\x1a\x49\x73\xfa\x1a\xc1\xbb\xcd\x72\x63\xc5\xf2\x8a\x3c\xf2\xa5\xbe\xdc\xa4\xd3\x11\x06", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 194, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x16\x4a\xae\x8a\xe8\xd1\x65\x86\x70\x53\xdd\x1c\x38\x06\x31\x9e\x06\x45\x23\xaa\x05\x3b\x1d\x70\x03\x46\x3d\xe8\xc5\xfc\xba\x0f", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 195, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xf9\x4c\xd8\x5e\x18\xf5\xb8\x9b\xfc\x21\xb4\xd2\x9b\x43\xe3\x00\x38\xf8\x42\x28\xfe\x81\xef\xf5\xb7\xd7\x35\x07\x3b\xa2\x99\x09", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 196, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 197, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 198, + .comment = "ed25519vectors 24", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x34", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x52\x2d\x2c\x5e\xdd\xb0\x7d\xa5\xdc\x5f\x22\x07\xa5\x13\x32\x2e\xe5\x86\x0d\x4b\x5f\x94\x10\x3c\xa6\x04\x06\x0d\x36\x72\xf4\x02", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 199, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xfb\xa7\xac\x98\xb3\x95\xcf\x8f\xfa\xec\xd3\x67\x6b\x36\x2f\x25\xf4\x04\x25\x2b\x7c\xbf\x07\x83\x7b\x6b\xf7\x80\xd2\x89\x7b\x0c", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 200, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x16\x4a\xae\x8a\xe8\xd1\x65\x86\x70\x53\xdd\x1c\x38\x06\x31\x9e\x06\x45\x23\xaa\x05\x3b\x1d\x70\x03\x46\x3d\xe8\xc5\xfc\xba\x0f", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 201, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xf9\x4c\xd8\x5e\x18\xf5\xb8\x9b\xfc\x21\xb4\xd2\x9b\x43\xe3\x00\x38\xf8\x42\x28\xfe\x81\xef\xf5\xb7\xd7\x35\x07\x3b\xa2\x99\x09", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 202, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 203, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 204, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x9c\xfd\x85\x91\x46\x2a\xa4\xba\x19\xc7\x96\x72\x66\x7e\x06\x65\xbf\xb2\x40\xf2\x9d\xe8\xab\x80\xb4\x34\x97\xf1\x2b\x34\x0e", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 205, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xbe\x22\x95\x25\x9b\x59\xb1\x46\x75\xc8\x40\x32\x02\xc2\xfe\x88\xc9\xd9\xea\xf7\x61\xf0\x0f\x67\xdb\x0d\xd2\x4b\x67\xb0\x9b\x01", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 206, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x4a\xae\x8a\xe8\xd1\x65\x86\x70\x53\xdd\x1c\x38\x06\x31\x9e\x06\x45\x23\xaa\x05\x3b\x1d\x70\x03\x46\x3d\xe8\xc5\xfc\xba\x0f", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 207, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf9\x4c\xd8\x5e\x18\xf5\xb8\x9b\xfc\x21\xb4\xd2\x9b\x43\xe3\x00\x38\xf8\x42\x28\xfe\x81\xef\xf5\xb7\xd7\x35\x07\x3b\xa2\x99\x09", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 208, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 209, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 210, + .comment = "ed25519vectors 22", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x32", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 211, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 212, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 213, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 214, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 215, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 216, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x48\x6f\xb2\xa5\xd2\xcb\x00\x2b\x46\x0d\xb9\xc5\x6c\x36\x95\x4a\xeb\xaa\x4e\x60\x62\xf3\x00\xbe\xeb\xb2\x74\x9e\x32\x27\x41\x06", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 217, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\xb9\xd3\xfa\xdc\x56\x6a\x3f\xb9\x52\xd9\x4b\x93\xf7\xad\xd4\xe9\xe0\x17\xbc\xf8\x43\x05\x89\x86\xb5\xec\x9b\xec\x06\x38\xba\x05", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 218, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 219, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 220, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 221, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 222, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 223, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\xb4\xf6\x02\x29\x7e\x87\x7c\xbb\xe4\x46\xde\x71\xc9\x86\x8e\x98\xc0\x4a\x56\xe9\xbc\x40\x9f\x60\xbe\xaa\x40\x0e\x7c\x63\x36\x00", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 224, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\xa1\x06\xed\x97\x3e\x5c\xdc\x86\x8e\xac\xe4\x9e\x63\x9e\xe5\x2f\x4c\xa5\x3f\xc7\x15\xf8\xec\x61\x2e\x09\x17\xf4\x20\x4f\x92\x0e", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 225, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 226, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 227, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 228, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 229, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 230, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x18\x73\xe9\xeb\xb3\x28\x20\x2c\x03\x34\x07\xe8\xb9\xf6\x7e\x52\x80\x93\xea\x89\x9d\xa6\x1e\x9e\xde\x69\x99\xb3\x58\xde\x0f\x08", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 231, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x1e\xb5\x3c\x48\x31\x22\x06\xed\x56\xa5\xf8\x3e\xf3\xfd\x7b\x6c\xa3\x01\x2f\xd4\xc2\xfb\x08\xac\xee\xa8\x3a\xd2\x51\x35\x80\x00", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 232, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 233, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 234, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 235, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 236, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 237, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x08\x26\xb7\xce\x39\xc8\x49\x1f\xab\xdd\x67\x59\xf8\x9e\x5a\x42\x4c\x34\x4e\xcb\x7d\x94\x63\x6b\x26\x8e\x61\xa2\xa9\x0a\xb2\x0a", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 238, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\xff\x8a\xa1\x1c\xfa\x5e\xa3\x4b\xc3\x53\x98\xcf\x04\x0a\xd3\x03\xd9\x6d\x5b\x5b\xd8\x18\x96\x3f\x69\xcd\xda\x87\x2d\x53\x69\x04", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 239, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 240, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 241, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 242, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 243, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 244, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 245, + .comment = "ed25519vectors 38", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x38", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 246, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x10\x9d\x35\xea\xfa\x88\xdf\x6c\x57\x70\xdd\x5e\xf7\x02\x3b\x39\x65\x89\x1d\x0c\x40\x50\xd2\xe9\xc7\x90\x66\x13\x22\x9d\x6c\x0e", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 247, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x86\xe5\xc5\x16\xa4\x46\xa3\xc8\xe6\x97\x28\x09\x1c\x2b\xe6\xeb\x47\x9d\xfe\x18\xbb\x36\xef\xd3\x4e\x08\xfd\x8a\xcc\x73\x04\x07", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 248, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x9f\x45\xef\x39\x94\xa1\x63\xd7\xcd\x58\xc2\xce\xad\x12\x8a\xfd\x1e\x3f\x3b\xc1\xa8\xff\x98\xcb\xf1\xbc\x35\xed\x60\x9d\x42\x0b", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 249, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x6f\x52\x5d\x28\xc6\x9b\xe1\x7f\xf4\xc0\x92\x2e\xc4\xde\x39\xda\x15\xd4\x6b\xaa\xd3\x2d\xde\x92\xe4\xc3\x72\x01\xb5\xcb\xd1\x03", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 1 }, + { .tc_id = 250, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 251, + .comment = "ed25519vectors 21", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x31", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 252, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 253, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 254, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 255, + .comment = "ed25519vectors 38", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x38", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 256, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 257, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 258, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb2\x32\x3a\x8a\xa3\xbc\x6e\xdc\x5f\x2f\x35\x90\xba\x2d\xb7\x57\xd5\x0b\xf4\x7c\x9f\x16\xcd\x1f\xd6\xa7\xdb\x0f\x4c\xa2\x4e\x0b", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 259, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x18\x9a\xbc\xcf\x6d\x92\x9d\xc8\x64\xb3\xee\xc1\x9e\x26\xe4\xcc\x94\xb2\x44\x56\x57\x79\xa7\xf8\x5d\xdb\x8e\x03\xc3\xc1\x08", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 260, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x9d\x35\xea\xfa\x88\xdf\x6c\x57\x70\xdd\x5e\xf7\x02\x3b\x39\x65\x89\x1d\x0c\x40\x50\xd2\xe9\xc7\x90\x66\x13\x22\x9d\x6c\x0e", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 261, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x86\xe5\xc5\x16\xa4\x46\xa3\xc8\xe6\x97\x28\x09\x1c\x2b\xe6\xeb\x47\x9d\xfe\x18\xbb\x36\xef\xd3\x4e\x08\xfd\x8a\xcc\x73\x04\x07", + .pub = "\xdd\x14\x83\xc5\x30\x4d\x41\x2c\x1f\x29\x54\x76\x40\xa5\xc2\x95\x02\x22\xee\x89\x31\xb7\xed\x1c\x72\x60\x2b\x7a\xfa\x70\x24\xe0", + .ok = 0 }, + { .tc_id = 262, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 263, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 264, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 265, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 266, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x11\x95\xf0\x61\x06\x12\x91\x20\x16\xb3\xee\x33\x05\x48\x29\xbc\xea\x20\xae\x4d\xe1\xe9\x34\x3b\x1c\x4e\x2e\x15\x64\x90\x03", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 267, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x2d\x47\x18\x82\x77\x3a\x67\x7a\xf1\xe3\x82\x4e\x75\x7a\x33\xf8\xdd\xf7\xbb\xea\xf3\xd2\x8a\x09\x59\x5e\xb8\xda\xa0\xd7\x4a\x03", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 268, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 269, + .comment = "ed25519vectors 20", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x30", + .msg_sz = 17UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 270, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 271, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 272, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 273, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 274, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 275, + .comment = "ed25519vectors 25", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x35", + .msg_sz = 17UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 276, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 277, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 278, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xa8\x3f\x56\xd4\xca\x92\xda\x1f\x05\x6c\x0b\xba\xa0\xcc\x73\xcb\x35\x07\x90\x21\x04\x31\xad\x64\x74\x15\xc6\xa7\x12\x42\x86\x0c", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 279, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xef\x11\x95\xf0\x61\x06\x12\x91\x20\x16\xb3\xee\x33\x05\x48\x29\xbc\xea\x20\xae\x4d\xe1\xe9\x34\x3b\x1c\x4e\x2e\x15\x64\x90\x03", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 280, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 281, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 282, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 283, + .comment = "ed25519vectors 30", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x30", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 284, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 285, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x0a\x49\x40\xad\x86\xa3\xdf\x96\x53\x46\x03\x7e\x94\xd0\x79\x6f\xa7\x85\x35\x3b\xe5\xf5\xd2\x5b\x5c\x3c\x1a\x50\x7c\x63\xbf\x0d", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 286, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x26\xcc\x29\x3b\x14\xd3\x04\x86\x4a\x4c\xd6\x89\xcb\xcc\x23\xcb\x13\xfc\xb1\x09\x8f\x9c\x43\x4c\xc9\xca\x74\x39\xc9\xcf\x25\x05", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 287, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 288, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 289, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 290, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 291, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 292, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 293, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 294, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 295, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 296, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 297, + .comment = "ed25519vectors 19", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x39", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x94\x45\x08\xfd\xd2\xe7\x90\x8f\xed\x1b\x0b\xbb\xef\x33\x42\xfd\x91\x19\x90\x12\x8c\xba\xa8\x71\x4b\x0d\x28\xa6\x17\xd4\xb5\x08", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 298, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x49\x40\xad\x86\xa3\xdf\x96\x53\x46\x03\x7e\x94\xd0\x79\x6f\xa7\x85\x35\x3b\xe5\xf5\xd2\x5b\x5c\x3c\x1a\x50\x7c\x63\xbf\x0d", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 299, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 300, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 301, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 302, + .comment = "ed25519vectors 23", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x33", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 303, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 304, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x0b\x30\xd6\xc1\xf0\x75\x11\xe2\x20\x8d\x23\x3b\x6a\x34\xd4\xed\x71\x09\xda\x2d\xea\x61\x5b\xcd\x97\xda\xee\x3a\x84\x27\x04", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 305, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x40\x65\x7f\x1c\xb0\x30\xf1\x25\x43\x54\x9b\xba\xbd\x84\x8d\xc6\x40\x3d\x35\x4e\x7c\x99\xc4\xd0\xdc\xee\x9f\x63\xc9\x03\x3b\x00", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 1 }, + { .tc_id = 306, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 307, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 308, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 309, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 310, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 311, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 312, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 313, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 314, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 315, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 316, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x2d\x32\xf9\xee\xcc\xaa\x31\xdb\xa2\xff\x4a\xb4\xe1\x96\xb6\x1e\x2e\xe1\x64\x80\x73\xbb\xb5\xf5\x99\xdc\xff\x4f\x7e\xa0\x29\x00", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 317, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x33\x0b\x30\xd6\xc1\xf0\x75\x11\xe2\x20\x8d\x23\x3b\x6a\x34\xd4\xed\x71\x09\xda\x2d\xea\x61\x5b\xcd\x97\xda\xee\x3a\x84\x27\x04", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 318, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 319, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x36\x7b\x7a\x92\xfe\xa8\x53\x9e\x87\x93\xcf\x81\x2e\x79\x9e\x8e\xd3\x42\xc6\x35\x59\x2e\x74\x32\x3a\x8d\xfd\x38\xa0\x6a\xea\x0b", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 320, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x33\x0b\x30\xd6\xc1\xf0\x75\x11\xe2\x20\x8d\x23\x3b\x6a\x34\xd4\xed\x71\x09\xda\x2d\xea\x61\x5b\xcd\x97\xda\xee\x3a\x84\x27\x04", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 321, + .comment = "ed25519vectors 18", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x38", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 322, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xee\x37\x86\x62\x45\xb5\xef\x5b\xb4\x86\x35\x72\x67\x28\x09\xb9\x8d\x93\x99\x71\x90\xc5\x14\xcc\xff\x47\x7e\xbc\xf8\x2f\x0d", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 323, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x0b\x30\xd6\xc1\xf0\x75\x11\xe2\x20\x8d\x23\x3b\x6a\x34\xd4\xed\x71\x09\xda\x2d\xea\x61\x5b\xcd\x97\xda\xee\x3a\x84\x27\x04", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 324, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 325, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 326, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 327, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 328, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 329, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 330, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 331, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 332, + .comment = "ed25519vectors 19", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x39", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 333, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 334, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 335, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\xaa\xc1\x6c\x21\x84\x7c\x8f\x77\xed\xe0\xe0\x35\x71\x48\x8e\x65\xc0\x1b\xc4\x18\x47\x0a\xce\xbc\x90\xa5\xf6\x5a\x69\xc3\xc6\x0f", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 336, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\xfd\x3e\xac\xd8\xd7\xa3\x54\x08\xe6\x69\xbb\xf2\x0f\xa7\x91\xfc\x50\xbe\x2a\x75\x30\x15\xc5\x1a\x7f\xf9\x55\x4c\x4c\x54\x09\x02", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 337, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 338, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 339, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 340, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 341, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 342, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 343, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 344, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 345, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 346, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 347, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 348, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x78\xb7\xa7\xa2\x7e\xc2\x14\xb7\x74\xab\x64\x34\xc7\xaf\xe2\x2b\xc3\xe6\xfa\x5f\x12\xd2\x4e\x81\xdf\xbd\x99\x08\x57\x89\x17\x0b", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 349, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x4a\xa4\xb6\x90\xec\x5d\x15\x02\xa0\xc7\x7d\x89\xed\xe5\x53\x49\xd9\x3b\x2f\x4d\xf5\x81\xbc\x97\x9f\x8f\x0a\xdb\xe6\x0d\xa3\x00", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 350, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 351, + .comment = "ed25519vectors 37", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x37", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 352, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 353, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 354, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 355, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 356, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 357, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 358, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 359, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 360, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 361, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\xfe\x03\xe5\xc2\x98\xe0\x79\xa7\x97\x94\xc3\xa8\x20\xa6\x16\x14\x32\x50\x41\xfc\x4c\x1b\xe8\x4e\x61\x69\x09\x2d\xd4\xe4\x2a\x01", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 362, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\xdf\x2a\x56\xe3\xf9\xf0\x22\xac\xe4\x2a\xa6\x11\x6f\x57\x6e\x76\xd0\xf7\x52\xdf\x8a\x5c\x87\x9f\xeb\x22\x88\x23\x6a\x88\x2d\x03", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 363, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 364, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 365, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 366, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 367, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 368, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 369, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 370, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 371, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 372, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 373, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 374, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x62\x45\xdb\x2e\x05\x5c\xd9\x6b\xa4\x2d\x2e\x13\x30\xef\x13\x1e\xef\xb5\x50\x27\x59\xcc\x73\x1c\x8c\xf7\x87\xd7\xfd\x2b\x5a\x0c", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 375, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x5e\xfb\x4c\xbf\x95\xba\x7a\x31\x70\x33\xc6\x34\xa3\xbd\x17\x4c\x2e\x36\xf6\xfb\x3a\x0b\x1d\x96\x60\x8d\xe7\xcf\xe4\x37\x4d\x05", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 376, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 377, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 378, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 379, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 380, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 381, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 382, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 383, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 384, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 385, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 386, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 387, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xd2\xc8\xbb\x23\x56\x8f\xc2\xc2\xab\x61\x43\x60\x89\x34\x92\x53\xdb\x30\x45\xd0\x56\x34\xc2\xf5\x0f\x67\xa8\x8a\xb4\x26\xe7\x09", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 388, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x59\x8a\x4a\xfb\xe7\xb2\xa7\x77\xd5\x9b\x9d\xd1\x5e\xd2\x48\xf4\x98\x09\x0c\x35\xea\x40\xd6\x91\xba\xb0\xce\xe5\x74\x46\x78\x07", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 389, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 390, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 391, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 392, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 393, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 394, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 395, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 396, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 397, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 398, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 399, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\xfc\x82\x96\x08\xae\x70\x07\x22\xe3\x8d\xf9\xeb\x97\x61\xd2\x00\xa3\xc8\x6e\x7e\xf6\xdd\xe9\x61\xba\x9c\xc8\x69\x1c\xbc\x07", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 400, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd2\xc8\xbb\x23\x56\x8f\xc2\xc2\xab\x61\x43\x60\x89\x34\x92\x53\xdb\x30\x45\xd0\x56\x34\xc2\xf5\x0f\x67\xa8\x8a\xb4\x26\xe7\x09", + .pub = "\xef\x75\xb2\x0e\x75\x40\xe3\xdf\xf7\x74\x04\x19\x36\x52\xba\x2b\xd1\x3d\xf9\x9c\x15\x08\xee\xe1\x51\x5e\x27\xae\x25\xf2\x80\x76", + .ok = 0 }, + { .tc_id = 401, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 402, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 403, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 404, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 405, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 406, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 407, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 408, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x06\x83\x47\x7c\x6e\xae\x0f\x5f\x96\x2c\xfb\x67\x5d\xc5\xf1\x12\x27\x5e\x72\x07\x52\x1b\x05\xf5\x7d\x86\x1f\xb8\xdf\xa8\x04", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 409, + .comment = "ed25519vectors 35", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x35", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x98\xe2\x71\x5f\x01\xf5\x7e\x97\x6d\xee\xa3\xaf\xb2\xc5\x1e\x93\xc4\x6f\x5f\x7e\x05\x4a\x37\x64\xfd\x07\x66\x82\x03\x40\x04", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 410, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x80\x43\x87\x2d\x01\xef\x87\xb4\x2d\x98\x7e\x20\xd1\xf5\x60\x4f\x59\x14\x41\xbe\xc2\x76\xcb\x28\x5e\x00\xc6\x0c\x38\x54\xa3\x07", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 411, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\xd7\x9e\x8f\xd6\x71\x73\x9b\x78\xd2\x19\xe1\x3e\x1b\x57\x85\x16\x54\x9b\x9c\x90\xc9\x88\x24\x9f\x62\xd1\xd6\xa2\xb4\x0e\xa6\x06", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 1 }, + { .tc_id = 412, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 413, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 414, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x9d\x21\xc5\xce\x09\xb1\x81\xf2\x1a\xb1\x40\x7e\x47\x44\x20\x69\xd6\x86\xbd\xe3\xa0\xd7\xd2\x50\xf0\x74\x6e\x98\x35\x31\x9f\x0a", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 415, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x80\x6f\x1e\x38\x87\x15\x87\xc8\xed\x56\x31\xfa\xf0\xf9\x41\xc7\x27\x44\xd2\x73\x3d\x28\x5b\x0d\x26\xeb\x5c\x7f\x79\x98\x2b\x02", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 416, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x62\x06\x83\x47\x7c\x6e\xae\x0f\x5f\x96\x2c\xfb\x67\x5d\xc5\xf1\x12\x27\x5e\x72\x07\x52\x1b\x05\xf5\x7d\x86\x1f\xb8\xdf\xa8\x04", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 417, + .comment = "ed25519vectors 35", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x35", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xab\x98\xe2\x71\x5f\x01\xf5\x7e\x97\x6d\xee\xa3\xaf\xb2\xc5\x1e\x93\xc4\x6f\x5f\x7e\x05\x4a\x37\x64\xfd\x07\x66\x82\x03\x40\x04", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 418, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 419, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 420, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 421, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 422, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x36\x7d\xbd\x8f\x23\xed\x46\xb1\x4c\x76\x43\x74\xff\xd8\x54\x21\x22\xd8\xa7\xb5\x7b\x50\xe5\x48\x51\xe7\x02\xe7\x0c\xa6\x66\x0f", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 423, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7d\xf5\x2a\x3f\xa4\xbd\xe9\x59\x5e\x64\xe4\x6e\xe4\x93\xb1\xf1\x47\x77\x42\x7d\x51\x8e\x42\xf1\x9b\x6e\x5a\x9d\x89\x1a\x00\x04", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 424, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\xcf\x6f\xfd\x24\xd4\x19\x62\x55\x8b\x5e\xc1\x87\xdd\x97\xdd\x62\xfa\xa0\xe7\x9f\x56\xe1\x0b\x95\x88\x66\x3b\x31\x0e\xce\x98\x00", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 425, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\xd2\x05\xa7\x02\xb9\x3f\x42\x92\xe2\x21\x86\xbd\x16\x77\x70\xbf\xa3\x27\x8f\x37\xa4\x62\x64\xa7\x35\xb3\x1e\x75\x73\x93\xe5\x0f", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 1 }, + { .tc_id = 426, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 427, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 428, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf7\x97\x08\x0e\x0e\x51\x6f\x4c\xe6\x96\xc1\xf6\x50\x8c\x42\x11\x24\x6c\x87\x34\xfe\x1c\x74\x08\x30\xbc\x07\xb4\x28\x00\x10\x07", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 429, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x88\x1c\x2e\x63\x37\xa2\xfc\x68\xad\xd0\x23\xc1\xc3\xb7\x70\x16\xce\xfb\x83\x04\xd7\x35\xcc\xa7\x57\x1e\xdd\xe7\x0f\xca\x14\x08", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 430, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x7d\xbd\x8f\x23\xed\x46\xb1\x4c\x76\x43\x74\xff\xd8\x54\x21\x22\xd8\xa7\xb5\x7b\x50\xe5\x48\x51\xe7\x02\xe7\x0c\xa6\x66\x0f", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 431, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\xf5\x2a\x3f\xa4\xbd\xe9\x59\x5e\x64\xe4\x6e\xe4\x93\xb1\xf1\x47\x77\x42\x7d\x51\x8e\x42\xf1\x9b\x6e\x5a\x9d\x89\x1a\x00\x04", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 432, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 433, + .comment = "ed25519vectors 21", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x31", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 434, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 435, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 436, + .comment = "ed25519vectors 25", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x35", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x43\x5f\x31\xd9\x33\xb4\xc6\x41\x8d\x7d\x48\xd1\x22\x3d\xdf\x20\x05\xf6\xff\x4c\x65\x55\xc5\x85\x03\x13\x29\x5f\x5f\x45\x07", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 437, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\xda\xaf\x7a\xfa\x21\x40\xdf\x39\x89\x63\x4c\xfe\xb1\xdd\x07\x04\xb1\xfe\xab\x73\x4e\x60\x32\xa9\x7f\x08\xff\x33\x65\x07\x04", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 438, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x06\xea\xfe\x34\xc3\x5b\x82\x4e\x46\xe0\x82\x06\x0c\xa7\x57\x77\xe6\x99\xbe\xb9\x48\x10\xd8\x19\x5d\x57\x03\x95\xc0\x50\x47\x0f", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 1 }, + { .tc_id = 439, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x04\x6f\x06\x94\xbe\xd0\x01\x1b\x90\x85\xa7\x4c\xa8\xf2\xad\xed\x38\x1a\x93\x92\xb8\x18\x2a\x64\x75\xce\x40\x67\xfe\x6a\x7b\x07", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 440, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 441, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 442, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xc5\x7b\x6e\x27\xf4\xd1\xaf\xcb\xc4\x35\x10\x89\x1e\xe7\x81\x6e\x69\x73\x2b\xda\xc3\x89\x3a\x4c\x4d\x75\xa6\x98\xec\x76\xfd\x09", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 443, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xef\x02\x27\xe5\x2e\x05\x47\x89\x66\xa9\x36\x98\xd9\xdd\xcd\xf7\x30\x08\x38\x82\x27\xb8\x2a\x9a\x3f\x43\x11\xcf\xf4\x1e\xbd\x01", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 444, + .comment = "ed25519vectors 25", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x35", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\x43\x5f\x31\xd9\x33\xb4\xc6\x41\x8d\x7d\x48\xd1\x22\x3d\xdf\x20\x05\xf6\xff\x4c\x65\x55\xc5\x85\x03\x13\x29\x5f\x5f\x45\x07", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 445, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xb1\xda\xaf\x7a\xfa\x21\x40\xdf\x39\x89\x63\x4c\xfe\xb1\xdd\x07\x04\xb1\xfe\xab\x73\x4e\x60\x32\xa9\x7f\x08\xff\x33\x65\x07\x04", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 446, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 447, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 448, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x69\xd1\x96\x0a\x5b\xe2\x3a\x7e\x46\xd1\x4e\x60\x94\x65\xc4\xfb\x82\xf3\xa4\x86\xb4\xcf\x9b\xa3\xcc\x00\xd7\x9f\x37\x1a\x30\x02", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 449, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xc5\x56\x3d\x65\xa2\x43\x38\x9f\xca\x7e\x1e\x6d\xa4\x22\x3a\x97\x87\x1e\xce\x32\x65\x55\xc7\x0d\x32\x3a\xde\x57\x64\xf6\x42\x0c", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 450, + .comment = "ed25519vectors 25", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x35", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x48\x43\x5f\x31\xd9\x33\xb4\xc6\x41\x8d\x7d\x48\xd1\x22\x3d\xdf\x20\x05\xf6\xff\x4c\x65\x55\xc5\x85\x03\x13\x29\x5f\x5f\x45\x07", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 451, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xb1\xda\xaf\x7a\xfa\x21\x40\xdf\x39\x89\x63\x4c\xfe\xb1\xdd\x07\x04\xb1\xfe\xab\x73\x4e\x60\x32\xa9\x7f\x08\xff\x33\x65\x07\x04", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 452, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 453, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 454, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\xe3\xf5\xbc\xb8\xf8\x80\x93\x36\xac\x10\x34\xf8\x8e\xa2\xe7\x7c\x63\x71\x3d\xa6\x2c\xdd\x73\xa7\xf5\xc7\x55\x0c\xa8\x92\x08", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 455, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x11\x19\x95\x4a\x49\x1e\x61\x64\x3a\x5f\x8b\xa9\x3e\xdc\xcf\x16\xb5\x2d\x78\x4f\x8a\x89\x6e\x5d\x7b\xa5\x3b\x73\xc8\x45\x04", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 456, + .comment = "ed25519vectors 25", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x35", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x43\x5f\x31\xd9\x33\xb4\xc6\x41\x8d\x7d\x48\xd1\x22\x3d\xdf\x20\x05\xf6\xff\x4c\x65\x55\xc5\x85\x03\x13\x29\x5f\x5f\x45\x07", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 457, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb1\xda\xaf\x7a\xfa\x21\x40\xdf\x39\x89\x63\x4c\xfe\xb1\xdd\x07\x04\xb1\xfe\xab\x73\x4e\x60\x32\xa9\x7f\x08\xff\x33\x65\x07\x04", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 458, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 459, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 460, + .comment = "ed25519vectors 18", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x38", + .msg_sz = 17UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 461, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 462, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x8f\xba\x89\x6e\x3c\xc7\x32\x4a\x5b\x00\x0f\xd0\xb9\x03\x49\x2c\x2a\xe0\xae\x71\xdf\xf7\xaf\x17\x66\x65\xba\x20\x5f\x39\x01", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 463, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x7c\x04\x7f\xf3\x0d\xb9\xb9\x2c\xac\x61\x79\x1c\x64\x66\x6e\xb0\xf6\xf1\x1d\xd8\x40\xd7\xd0\x5b\x92\x7c\x85\xf5\x05\x33\x60\x0e", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 464, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\xf7\xd8\x85\x66\xda\x56\x4c\x6f\xa7\x77\x23\x5d\x88\x64\xb9\xdf\x8d\x63\xee\x43\x69\xbc\xc3\xdb\xf0\xf4\x21\xfd\xfe\x9d\x73\x09", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 465, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\xdd\xfb\x80\xc3\xb5\x00\xd1\x9d\x9a\x01\x01\x0f\xb3\x4c\xf3\xc0\x0c\x7b\xc6\xe9\x72\xe7\xd6\x72\xe1\x9e\xc9\x69\xbd\x5b\x19\x08", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 1 }, + { .tc_id = 466, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 467, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 468, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 469, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 470, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\xa1\x2e\xe7\x5b\x7c\xe3\x6d\x92\x5b\xa8\x17\x78\x45\x3a\x97\xd8\x34\x4a\x8d\xec\xfd\xd7\x97\xee\x6d\x39\x8a\x2c\x68\x20\x26\x0e", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 471, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x27\xd6\x4d\x53\xfa\x7d\x8a\x7a\x56\xab\x4d\xcf\xce\x52\xe6\x41\x1f\xf5\xc5\x46\x60\x29\xd3\x0a\xa4\x15\x9a\xfa\xd8\x3f\x24\x09", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 472, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x23\xde\x7a\xc4\xb1\x46\xe4\xfb\x8b\x49\x2b\xe4\xfc\xc6\x9c\x95\x02\x2b\xb9\xbb\xa7\xef\xf6\x83\x91\x01\x40\x9b\xd5\xc5\xd5\x0a", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 473, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x6f\x03\xb9\xc4\x7f\x23\x61\x9e\x95\x18\x4c\x79\x14\xc1\x39\xf4\xa6\x69\x06\x15\x0b\xdc\x06\x35\x51\x24\x21\xbe\x6e\x28\x20\x04", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 1 }, + { .tc_id = 474, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 475, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 476, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 477, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 478, + .comment = "ed25519vectors 24", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x34", + .msg_sz = 17UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\xbe\xb9\xfd\xcc\xdf\x6e\x0b\xb4\x7d\xf7\xc1\xcb\xa3\x74\xf2\x0e\x53\xe2\xaf\x65\x1a\x4a\x69\xd9\xfa\x85\x54\xbc\xd5\x39\xe5\x0b", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 479, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\xb6\xcd\xec\x95\x50\x5f\x3f\xc3\xa3\xc5\x8d\x45\xa5\x91\x39\x9c\x73\x5e\x98\xc0\xca\xda\xba\x2b\x61\xee\x8b\x93\xf5\x4d\x41\x05", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 480, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x27\xf1\x96\x29\x8c\xd2\xb5\xae\xc8\xb6\x54\x5b\x12\x2e\xb0\x1d\xc4\xc8\x7a\xff\x39\x8c\x51\x52\xed\x45\x80\x36\x64\x3f\x6a\x0a", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 481, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x03\x59\x53\xcc\x64\x88\x8f\xcd\xb0\xe7\x0d\xe5\x77\x9b\x54\x6a\x4c\x56\xb2\xd8\xf5\x79\x74\x8b\x4c\xe9\x63\x88\x7e\xb3\x67\x05", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 1 }, + { .tc_id = 482, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 483, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 484, + .comment = "ed25519vectors 21", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x31", + .msg_sz = 17UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 485, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 486, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\xb5\x82\xb7\x39\x8d\x69\x16\xf2\x62\xad\x46\xab\x12\x89\x5c\xd1\x97\xae\x7a\x89\xfd\x94\x53\x0a\xd4\x07\x1a\x5d\x71\xee\x87\x0b", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 487, + .comment = "ed25519vectors 41", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34\x31", + .msg_sz = 17UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x8f\xb5\xbb\x60\x32\xe8\x01\xfd\xce\x88\x5f\xf4\xf8\x35\x60\xb6\xf5\x6e\x66\xd3\xd9\xad\x3a\x33\xeb\x92\x80\x19\x0b\x2c\x67\x0a", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 488, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\xf9\xa4\x98\xab\x4b\x8a\x71\x0d\xe4\xa8\x88\x67\x17\x9a\xf3\xa3\x55\xb9\x3c\x22\xf7\x9f\x39\x58\x1f\x7f\xb1\x96\xe7\x2f\x34\x00", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 489, + .comment = "ed25519vectors 41", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34\x31", + .msg_sz = 17UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\xc0\x09\x6a\xe4\xca\xfa\x9e\x22\x02\x65\x30\xdc\x5f\xd2\xef\xd3\x15\x9c\x8b\x1e\x4b\xcb\xfe\xe4\xbb\x18\x04\x9c\x43\xa3\x3a\x03", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 1 }, + { .tc_id = 490, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 491, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 492, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 493, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 494, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xfa\x4a\x31\x8b\x40\x63\xe4\x08\xde\xc2\x39\xcc\x05\x89\x53\x3d\x04\xf8\x01\xfe\x25\x00\x9c\x1e\xdd\x4c\x0a\x3b\x25\x09\x76\x00", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 495, + .comment = "ed25519vectors 30", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x30", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xd3\x09\x23\x66\x95\x7e\xb2\x89\xec\x45\x2b\x34\xbb\x67\x83\xc1\x79\x0a\x33\x9a\xd5\xd0\x04\xd9\xf6\xd4\x35\x32\x5b\xdc\x2c\x0a", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 496, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x5a\x0b\x32\xda\xb5\x08\x49\x74\x1c\x13\x62\x47\xa6\x10\x9c\xfa\x76\xdc\x57\x7c\xde\xc7\x98\xe4\x67\x68\x9e\x43\x61\x3d\xfc\x00", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 497, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\xb4\x52\xdd\x12\xa8\xb8\x7c\xd3\xb6\xa5\x27\x36\x4a\x5e\x6f\x99\xee\xad\x57\x39\x46\x9d\x5d\x12\x0d\x95\xe5\x03\x94\x68\x16\x05", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 1 }, + { .tc_id = 498, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 499, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05", + .ok = 0 }, + { .tc_id = 500, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x9a\x40\x07\x5f\x4b\x37\x1d\x65\x75\x91\x1a\xbe\xb7\x35\x74\xe1\xce\x0a\xda\x56\x40\xbd\xa6\x01\x48\x6e\xf9\x2e\xf7\xed\x0d", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 501, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x9a\x3e\xa3\x65\x7c\x36\x62\x4c\xec\x77\xed\x3f\xac\xee\x69\xb3\xee\xeb\x32\x13\x1c\x6b\x87\xba\x0a\x76\x99\x3d\x3a\x3a\x06", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 502, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfa\x4a\x31\x8b\x40\x63\xe4\x08\xde\xc2\x39\xcc\x05\x89\x53\x3d\x04\xf8\x01\xfe\x25\x00\x9c\x1e\xdd\x4c\x0a\x3b\x25\x09\x76\x00", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 503, + .comment = "ed25519vectors 30", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x30", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd3\x09\x23\x66\x95\x7e\xb2\x89\xec\x45\x2b\x34\xbb\x67\x83\xc1\x79\x0a\x33\x9a\xd5\xd0\x04\xd9\xf6\xd4\x35\x32\x5b\xdc\x2c\x0a", + .pub = "\x67\x18\xd0\xa3\xd5\x8d\xea\xea\xef\xa6\x55\xea\xe3\xf1\x19\x07\x1d\xea\xa2\xcf\xeb\xfd\x0c\xa2\x8b\x67\x0f\x87\x9d\x65\x70\x86", + .ok = 0 }, + { .tc_id = 504, + .comment = "ed25519vectors 35", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x35", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 505, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 506, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 507, + .comment = "ed25519vectors 27", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x37", + .msg_sz = 17UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 508, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x14\xfb\x94\x2d\x5f\xf1\x3c\xef\x4d\x78\x33\x75\xf3\xab\xef\x9a\xea\x3d\x9b\xce\xcc\x1a\x08\x66\x41\x5d\xae\x35\x09\xd5\x07", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 509, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x5f\x7f\xfd\x50\x8f\xc8\x4b\xd8\xfb\x5d\x9e\x90\xa3\xab\xc2\x4b\x2c\xba\xcc\x03\xb0\x0c\xa4\x2c\x28\xe7\xb8\x79\xc5\xd9\x0d", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 510, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x08\xa8\x5c\xde\xab\x6f\x57\x33\x09\x26\xe2\xeb\x38\x91\xc1\x01\x78\x63\xd5\x1e\x99\xf8\xd8\xf7\x32\xee\x42\xf5\x43\x3c\x75\x07", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 511, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x09\x7c\x3f\x79\x43\x7c\xd8\x7c\x60\x61\xfb\x03\x2f\x79\x2c\xd8\xcf\x46\xcb\xb4\xce\x39\x0b\x4d\xec\xb9\xc1\xbf\x5e\x70\xad\x0b", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 1 }, + { .tc_id = 512, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 513, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 514, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xcf\x5d\xd9\x93\x59\x09\x03\x34\x6c\x6c\x7d\xbb\xda\xb7\x84\xf8\xeb\x49\x8e\x70\x74\x89\x6f\xf0\x6f\x98\x22\x18\x70\x66\x3b\x07", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 515, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xca\x87\xbb\xa5\x47\xac\x14\x5c\xd6\xe8\x13\x32\x8d\xf6\xdf\x16\xac\x5a\x13\x7d\xf8\x50\x37\xb1\xc5\xad\x28\x77\x46\x4e\x84\x0d", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 516, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x6d\x14\xfb\x94\x2d\x5f\xf1\x3c\xef\x4d\x78\x33\x75\xf3\xab\xef\x9a\xea\x3d\x9b\xce\xcc\x1a\x08\x66\x41\x5d\xae\x35\x09\xd5\x07", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 517, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x5f\x5f\x7f\xfd\x50\x8f\xc8\x4b\xd8\xfb\x5d\x9e\x90\xa3\xab\xc2\x4b\x2c\xba\xcc\x03\xb0\x0c\xa4\x2c\x28\xe7\xb8\x79\xc5\xd9\x0d", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 518, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 519, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 520, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 521, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 522, + .comment = "ed25519vectors 31", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x31", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbf\x79\x04\x56\x65\xb3\x95\x25\xad\x5e\xc9\xe9\xad\xe8\x2b\xd5\xbc\x33\xfb\x04\x9b\x13\x50\x3d\xfb\x97\xaa\xcc\x4a\xd0\xae\x0e", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 523, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x6b\x11\x5a\x25\x73\xc0\xa4\xde\x9f\x34\x11\xa9\x6c\x31\xe1\x91\x9e\x57\xbf\xc3\xe5\xc2\x7f\xae\xfe\xbc\xdd\x47\x76\x8b\x9a\x05", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 524, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x50\xb2\x75\x0d\xbb\x4c\xa3\x6a\x55\xe8\x56\x1a\xe5\xf3\x92\x35\xdb\x09\x0d\xe3\x24\xb3\xc6\x01\x26\xad\x1f\x5c\x1d\x1a\xe3\x0a", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 525, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x16\xe0\xb2\xca\x09\xfe\x5b\x8b\xa0\x5f\x5f\x8d\x3b\x4a\xb0\xe3\x9b\x79\xb5\x49\x77\x5a\x9e\x13\x6f\xd9\xd6\xfe\xdf\x3b\x86\x09", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 1 }, + { .tc_id = 526, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 527, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 528, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9b\xc6\x93\xae\x3a\xf4\x29\x6f\x60\xff\xd9\xaf\xb5\x77\xca\xbb\x05\xc2\xdf\xf6\x34\xa5\xd4\x83\xe5\xa8\xc0\x94\xdd\x06\x84\x03", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 529, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x93\xb9\xac\x54\x2a\xe8\x0e\x10\x54\xd7\xf7\xaf\xf2\xc7\x2c\xfc\xb5\x14\x01\x30\xc3\x7c\x92\xd4\xeb\x38\x9c\x80\x6d\x15\x09", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 530, + .comment = "ed25519vectors 31", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x31", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xbf\x79\x04\x56\x65\xb3\x95\x25\xad\x5e\xc9\xe9\xad\xe8\x2b\xd5\xbc\x33\xfb\x04\x9b\x13\x50\x3d\xfb\x97\xaa\xcc\x4a\xd0\xae\x0e", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 531, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6b\x11\x5a\x25\x73\xc0\xa4\xde\x9f\x34\x11\xa9\x6c\x31\xe1\x91\x9e\x57\xbf\xc3\xe5\xc2\x7f\xae\xfe\xbc\xdd\x47\x76\x8b\x9a\x05", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 532, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 533, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 534, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 535, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 536, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\xa3\x25\x75\x9f\xf8\x30\xa4\xd1\x9c\x0f\x0c\xce\x63\x64\x31\x1d\xc1\xe7\xe4\xbc\x1e\xfa\xa8\xa5\x46\x32\x08\x2c\x05\xcf\x0f", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 537, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\xe9\x79\x9d\x77\x54\x08\x6f\x6e\xca\x31\x91\x60\xc0\xd2\xef\x1d\x35\x61\x7c\x01\x51\xc7\x19\x80\x64\x95\xeb\x10\x26\xac\x05", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 538, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x10\xdb\xa6\xa8\x31\x7c\xea\x9c\xda\x38\x6e\x05\xf6\x6e\xab\xb4\x24\x88\x90\x06\x43\x25\xc1\xd7\xa5\x67\xa3\x44\x3c\xe2\x66\x06", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 1 }, + { .tc_id = 539, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\xce\xed\xdc\x38\x49\x93\xff\xfb\x6e\xa6\x94\x00\xf4\xa1\x52\x9d\xdb\xd0\xf4\x3c\x63\x22\xbf\x53\xd9\xec\x14\x4e\x91\x27\x68\x0d", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 540, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 541, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 542, + .comment = "ed25519vectors 18", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x38", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xcd\xd1\x24\x8e\x74\x9c\xea\xc0\x1f\x10\x9b\xce\x3c\xe4\x15\x07\xe4\x9b\xa6\x5d\x6a\x42\xba\xa4\x43\xd7\x7a\xa6\x31\x13\xcd\x0f", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 543, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x63\xe6\xce\xf7\x56\xc8\xaf\xdf\x5e\x0b\x36\x4b\x01\xaf\xa2\x19\xce\xde\xad\xb5\x3d\x76\xc1\xac\x58\x14\x0d\xc8\xa7\xb3\x71\x06", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 544, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x92\xa3\x25\x75\x9f\xf8\x30\xa4\xd1\x9c\x0f\x0c\xce\x63\x64\x31\x1d\xc1\xe7\xe4\xbc\x1e\xfa\xa8\xa5\x46\x32\x08\x2c\x05\xcf\x0f", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 545, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x48\xe9\x79\x9d\x77\x54\x08\x6f\x6e\xca\x31\x91\x60\xc0\xd2\xef\x1d\x35\x61\x7c\x01\x51\xc7\x19\x80\x64\x95\xeb\x10\x26\xac\x05", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 546, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 547, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 548, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xd4\x85\x9f\x5c\x56\xa8\x43\xa8\x85\xbd\x86\x04\x5d\xfc\xda\x0b\xf1\x17\xf9\x5c\x07\xc2\x98\xf4\x56\x64\xad\x2f\x7f\x04\x31\x06", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 549, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x4e\xe4\x3c\x88\xb8\xd6\x70\x35\x11\xf5\xa8\x18\x42\x8f\xd6\x5e\x56\x43\x01\xe1\x84\x0c\x7e\xde\x88\xcf\x15\xff\xac\x56\x7a\x01", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 550, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x92\xa3\x25\x75\x9f\xf8\x30\xa4\xd1\x9c\x0f\x0c\xce\x63\x64\x31\x1d\xc1\xe7\xe4\xbc\x1e\xfa\xa8\xa5\x46\x32\x08\x2c\x05\xcf\x0f", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 551, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x48\xe9\x79\x9d\x77\x54\x08\x6f\x6e\xca\x31\x91\x60\xc0\xd2\xef\x1d\x35\x61\x7c\x01\x51\xc7\x19\x80\x64\x95\xeb\x10\x26\xac\x05", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 552, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 553, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 554, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x50\x2e\x79\x7c\x4c\xe3\x83\x33\xe3\x16\x6e\x4e\x10\x24\x83\xcd\x6e\xa5\xee\xa0\x7b\xd0\x34\x7a\x85\xd3\x03\xc6\x4e\x8b\x07", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 555, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\xe8\xd8\x20\xb1\x40\xfd\xd2\x77\x06\xee\x80\x11\x91\x3f\x95\x42\xad\xf9\x64\x1f\x0b\x29\x13\x05\x4c\x4e\xd3\xc2\xc1\xbe\x06", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 556, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\xa3\x25\x75\x9f\xf8\x30\xa4\xd1\x9c\x0f\x0c\xce\x63\x64\x31\x1d\xc1\xe7\xe4\xbc\x1e\xfa\xa8\xa5\x46\x32\x08\x2c\x05\xcf\x0f", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 557, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\xe9\x79\x9d\x77\x54\x08\x6f\x6e\xca\x31\x91\x60\xc0\xd2\xef\x1d\x35\x61\x7c\x01\x51\xc7\x19\x80\x64\x95\xeb\x10\x26\xac\x05", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 558, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 559, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 560, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 561, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 562, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x1f\x8c\x6e\x2a\xf7\x77\x51\xe5\x47\x42\x53\xbf\xac\x76\xad\x7d\x3e\x16\xbe\x0b\xe2\xff\x49\x9a\xc1\x7b\x66\xbe\xaf\xb7\x27\x0e", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 563, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x10\xeb\x9a\x21\x50\xd3\x68\x3d\x1d\x87\x3d\x60\x8d\x7f\xb3\x95\xb5\x96\x8b\x37\x9a\x0e\xc7\x26\xbb\xbf\xbe\x45\x31\x14\xfd\x01", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 564, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\xa6\x6d\x97\x18\x45\xa5\xee\xd7\xcd\x04\x32\x18\x26\x14\x11\x71\x96\x42\x9d\x78\x20\x5a\xa9\x12\xa4\x27\x2b\x13\x4a\xb1\x74\x0c", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 565, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x9c\x41\xf6\x76\xf8\x5c\xd5\xa5\xee\xe2\x82\x11\x21\x70\x36\x5b\xe8\xa4\x82\x0e\x7c\xc4\xd1\x3f\xdb\x88\xb1\xbf\x1f\x10\x6c\x0b", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 1 }, + { .tc_id = 566, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 567, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 568, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 569, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 570, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\xc7\x0a\xd2\x4a\x36\x88\x12\xeb\x8a\x9f\xd7\xbb\x0e\x30\x0f\x49\x2a\x0a\x9d\xbc\xda\x01\xdf\x28\x29\xbc\xa1\x4c\xcf\x5b\xf1\x0f", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 571, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x84\x03\x64\x15\x0c\xb0\x9a\x83\x01\x80\xd3\x0a\xc7\x90\x7c\x0a\x85\x8e\xef\x2a\x28\x2d\xc5\x39\xe6\xfd\x73\xd8\xa6\xdf\xad\x0f", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 572, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\xe3\x5a\xd3\xa3\x1e\xcb\xff\x62\x3f\x47\x33\xdd\xed\x01\x08\x6e\xd6\x8e\x2b\xda\xaa\x53\x17\x1f\x4b\x87\x48\xa2\x65\x14\x40\x0d", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 573, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x5f\x11\x91\x8f\x31\x8e\x44\x14\x7d\x45\x6b\x9e\x33\x39\x9d\xd9\x87\xef\xaa\x7f\xb0\x6b\x24\x85\xe1\xdd\x2f\x2e\x0c\x1e\x4b\x04", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 1 }, + { .tc_id = 574, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 575, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 576, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 577, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 578, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x3c\x8b\x7f\x81\xb7\xfc\xcd\xb4\xc6\xbc\x85\x12\x1b\xc7\x7a\xc9\xb2\xf2\xb2\x2f\x32\x41\x50\x1b\x15\x21\x19\x5c\x86\xf3\x82\x0f", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 579, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x3b\x8d\x3c\xe4\xad\xae\x6f\x05\x7f\x2f\x0b\x1a\xd9\xb4\x66\x78\x44\x3d\x6c\x79\x77\x9a\x69\x25\x4a\x6d\x11\x2d\xdf\x43\x5b\x0c", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 580, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x9e\x79\x60\xe8\x6a\xba\xde\xb7\xd5\xe1\xd2\x49\x21\x22\xd9\x25\x68\x5b\x47\x20\x31\x30\xaa\x8e\x62\x9d\x09\x3c\x61\xad\xa9\x0d", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 581, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x40\xbd\xef\xba\x7a\x8c\x40\xc0\x58\x04\x26\xe3\x27\x19\x14\x9f\x96\x00\x22\x6b\x48\xf5\xe2\x7d\xae\x52\xb6\xfb\xbd\xcf\x58\x05", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 1 }, + { .tc_id = 582, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 583, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 584, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 585, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 586, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x7c\x13\x68\xa4\x30\x39\xc4\x2a\xc2\xdb\xb6\x04\xb9\x61\x7d\xf9\x0b\x4d\x20\x22\xde\xee\x87\xdd\x75\xd3\x2f\xaf\x83\xb9\xb9\x01", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 587, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\xac\xf8\xc3\xc3\x42\xa8\x5f\xf0\x68\x4d\xf2\xe0\xdb\xda\xcf\x3a\x81\x41\x77\x55\xcb\x9f\x50\x05\xd2\x2b\xed\xf4\x3f\xd8\xc8\x03", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 588, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x1a\x33\xa7\xd0\x3b\xde\x08\x68\x8f\x72\x9a\xb2\x33\xec\xed\x41\xff\x1d\xb6\x7e\xaa\x08\x15\x7c\x3a\x1a\x27\xa0\x06\x70\xc7\x01", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 589, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x54\xaf\x5f\x2d\x4d\xd8\x09\x5d\xbe\xa5\x87\x3c\xc3\x8d\x78\xea\x42\x68\x17\xd2\xfd\x61\xe9\xde\x5e\xc5\x16\x5c\x93\xe6\x2f\x09", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 1 }, + { .tc_id = 590, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 591, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 592, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 593, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 594, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x9d\xff\x20\xf0\xd2\xac\xcc\xc3\x79\x28\xa0\x0e\xb2\x2a\x11\x50\x47\xb5\x2b\xcc\x2a\xb4\xb7\x9b\x44\x32\x87\x3d\x20\x17\x28\x00", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 595, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xd0\x82\x26\x8d\x79\x82\x1a\xb3\xa4\x74\x87\xf2\xde\x6f\x64\xa1\x3c\x92\x1c\x0e\xc2\x3e\x89\xe5\x7c\xd5\x96\xe5\x6f\x61\xfe\x0a", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 596, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x6c\x95\xb9\x4a\x5e\xd9\x66\xfe\x1a\xc4\xf8\x58\xc4\x9f\xe6\x90\xab\x5f\x2d\x3a\x45\x71\x54\x8d\x94\x3c\xd3\x13\x75\xe3\xf2\x0b", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 597, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\xe8\xdf\x7d\x32\xa6\x0f\xca\x52\x8b\x06\x06\xd0\x3f\x8b\xd6\xe5\x76\x19\x18\x3c\xb7\x2e\x99\xda\x23\x7d\x97\xf8\x72\x13\xd3\x01", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 1 }, + { .tc_id = 598, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 599, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85", + .ok = 0 }, + { .tc_id = 600, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x68\x1d\xcf\x44\x73\xcd\x9f\x43\xe2\x1c\x33\x92\xdd\xe1\x06\x17\xa6\x86\xde\x27\x2c\x10\x14\x02\x08\x96\xc9\xf4\x58\x98\x62\x02", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 601, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\xec\x9a\xad\xea\x22\x20\x1c\xaf\x2f\xad\xcc\x24\xf4\x81\x8d\x12\x02\x72\x3a\x9a\x35\x4e\x7b\x35\x10\x94\xf7\x46\x70\x63\x00", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 602, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9d\xff\x20\xf0\xd2\xac\xcc\xc3\x79\x28\xa0\x0e\xb2\x2a\x11\x50\x47\xb5\x2b\xcc\x2a\xb4\xb7\x9b\x44\x32\x87\x3d\x20\x17\x28\x00", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 603, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x82\x26\x8d\x79\x82\x1a\xb3\xa4\x74\x87\xf2\xde\x6f\x64\xa1\x3c\x92\x1c\x0e\xc2\x3e\x89\xe5\x7c\xd5\x96\xe5\x6f\x61\xfe\x0a", + .pub = "\xec\xa0\x0a\x6a\x1b\x1f\x52\x2f\xf2\x21\x76\x91\x05\x99\x15\xb0\x97\xb7\x3b\xc6\x9b\xef\x39\x6c\x36\xdd\xcd\x55\x9b\x79\xe2\xb0", + .ok = 0 }, + { .tc_id = 604, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 605, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 606, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 607, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 608, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\xac\x3e\xd1\x45\x3a\x28\xaf\x25\x2f\xf5\x42\xbe\x21\xa4\xc0\xef\x8b\x97\xc7\x49\x40\xe5\x17\x66\xb1\x85\x5d\xbe\x02\x35\x0d", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 609, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x03\x60\xa0\xc1\x76\xd4\x58\x6f\x28\xed\xbb\xca\xfc\x6e\x5d\x63\xd8\xf7\x09\x54\x51\x0a\xde\x43\x42\x19\x77\x0a\x86\xf2\x04", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 610, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x07\xfe\x06\x28\x0a\xd6\x17\xd2\xc9\x4c\x06\xe2\xb2\x09\x83\xe0\x35\xb2\x84\x84\x43\xf7\xde\x55\x0e\x53\x58\xbe\xa3\x6f\x0c\x03", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 611, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x94\x5f\xc1\x46\x9d\xbb\xa7\x76\xf4\x27\xc4\x7e\x38\x65\x24\xdc\x19\x16\xbf\x9a\xad\x21\x26\x82\x32\xb7\xf4\x9b\x15\x31\x0c\x06", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 1 }, + { .tc_id = 612, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 613, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 614, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x8a\xfc\x6f\xda\x14\x6d\x58\x9f\xa8\x05\xb8\x24\x26\x68\x62\xba\xa3\x09\xbb\x1e\xc0\x71\x22\x6b\x06\xba\x4e\xaf\xf9\x76\x3c\x0e", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 615, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xfa\x0b\x5b\x45\xeb\x2c\xb2\x4c\xab\x8a\x91\x0b\xfb\xcb\x08\x64\x14\x10\xd6\x47\x90\xb5\x16\xc5\x83\xb6\x39\x40\xd2\x5a\x95\x04", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 616, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x31\xac\x3e\xd1\x45\x3a\x28\xaf\x25\x2f\xf5\x42\xbe\x21\xa4\xc0\xef\x8b\x97\xc7\x49\x40\xe5\x17\x66\xb1\x85\x5d\xbe\x02\x35\x0d", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 617, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x42\x03\x60\xa0\xc1\x76\xd4\x58\x6f\x28\xed\xbb\xca\xfc\x6e\x5d\x63\xd8\xf7\x09\x54\x51\x0a\xde\x43\x42\x19\x77\x0a\x86\xf2\x04", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 618, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 619, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 620, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 621, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 622, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x69\xc9\x93\x16\x21\x50\x43\xec\x75\xea\x5a\x3d\x4e\x13\x57\xe3\xd0\xc5\x60\x23\x66\xe8\x2b\x24\xde\x31\x9a\x52\x0b\x58\x51\x06", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 623, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xc9\xa2\x87\x60\xbf\xdb\xaf\x4f\x02\x8f\xe8\xd8\xec\xb8\xc3\x4d\xb3\xb7\xc0\xc7\x1d\x24\xe2\x67\x34\xb2\xc8\x41\xe8\xfa\xc2\x07", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 624, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\xe8\xb6\xda\x45\x67\xe7\xbf\xba\x58\x29\xe7\xa1\x19\x7f\x80\x62\x46\x23\x42\xba\x28\xf6\x7b\x2c\xbc\xf1\x4a\x28\xaf\x6e\x97\x0a", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 625, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x8f\x8f\xa9\x22\x2a\xf8\x28\xb0\x40\xbc\xd8\x61\x87\xc6\x6d\x23\xfa\xa9\x7d\x1a\x51\xbe\x5d\x51\x26\xbf\xd7\x86\x88\x89\x7b\x00", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 1 }, + { .tc_id = 626, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 627, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 628, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\xb5\x48\xba\xa1\x5c\x22\x0f\x0c\x45\x64\x54\xbc\x0b\x35\x01\x75\x02\x39\xf6\x9a\xad\x45\x10\x09\x32\xd3\x6f\x0e\x9f\x32\x00", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 629, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa5\x37\xbd\x25\x97\x69\xd9\x11\x3a\x83\x4f\x55\xe1\xf4\x2b\x16\x0f\xad\x63\x0d\xaf\x58\xc8\xf9\xc7\xe8\x0d\x8e\x5d\xaa\x13\x02", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 630, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\xc9\x93\x16\x21\x50\x43\xec\x75\xea\x5a\x3d\x4e\x13\x57\xe3\xd0\xc5\x60\x23\x66\xe8\x2b\x24\xde\x31\x9a\x52\x0b\x58\x51\x06", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 631, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\xa2\x87\x60\xbf\xdb\xaf\x4f\x02\x8f\xe8\xd8\xec\xb8\xc3\x4d\xb3\xb7\xc0\xc7\x1d\x24\xe2\x67\x34\xb2\xc8\x41\xe8\xfa\xc2\x07", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 632, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 633, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 634, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 635, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 636, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x6c\xc6\x2c\xf5\x9c\x79\xdc\x96\xec\x34\x24\x3a\x10\xa1\x47\x50\x19\x44\x79\x37\x6a\x49\xcc\x84\x65\x1a\x23\xa4\x88\xee\x05", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 637, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\xbd\x8c\x87\x9c\x5b\xf2\x33\x5a\xa6\x40\xbc\x7b\xec\xf0\x54\x71\x46\xc5\xbe\xca\xae\x73\x56\x0e\x9e\x80\xc0\x36\xf2\xd5\x02", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 638, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x10\x4c\x83\x3a\x12\x53\xa4\x8c\xd6\x6e\x54\xca\xb3\x85\x43\x28\x1b\x75\xe5\x3c\x8b\xcc\xb6\xa1\xdc\xcd\x45\xeb\x25\x1f\x13\x07", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 1 }, + { .tc_id = 639, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\xf3\xae\x4b\xb3\xaf\xa8\x8c\x32\x85\xc8\xb1\x24\x1c\xf6\xdf\x83\x16\xbb\x4b\x35\xe7\x13\x46\x24\x85\x82\xcd\x62\x71\x21\xad\x02", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 640, + .comment = "ed25519vectors 25", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x35", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 641, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 642, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x9d\xfc\xac\x23\x33\x8d\x3f\x13\xdc\x0f\xf5\xde\x05\x9d\xb6\x19\x34\x19\x07\x41\xf1\xf0\x08\x36\xd7\xb7\x35\x97\x58\x92\xe0\x02", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 643, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x23\x03\x33\xf7\x8f\x5b\x3e\xac\xd7\x37\xfb\x60\x74\x2c\x5c\x04\x1e\x1e\xa5\x64\x10\xac\x40\xcc\x56\xb5\xb4\x09\x68\xcc\x12\x09", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 644, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xc4\x6c\xc6\x2c\xf5\x9c\x79\xdc\x96\xec\x34\x24\x3a\x10\xa1\x47\x50\x19\x44\x79\x37\x6a\x49\xcc\x84\x65\x1a\x23\xa4\x88\xee\x05", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 645, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7c\xbd\x8c\x87\x9c\x5b\xf2\x33\x5a\xa6\x40\xbc\x7b\xec\xf0\x54\x71\x46\xc5\xbe\xca\xae\x73\x56\x0e\x9e\x80\xc0\x36\xf2\xd5\x02", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 646, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 647, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 648, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x3a\x63\xdb\xb9\xc1\x7d\x6c\xa4\x1a\x6e\x1c\xe5\x5b\x0a\x99\xbf\x80\x25\xeb\x49\xcc\x46\x40\xb3\xde\x42\x4c\xb6\x65\xfb\xa2\x0c", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 649, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x5b\x02\x8c\x7e\x15\x84\x2f\xfa\x8f\x6a\x8e\xff\xc6\xf3\xa4\x47\x41\x9f\x42\x28\xcb\xfb\xa5\x7e\xbd\xf5\x22\x57\x3e\xd3\x8f\x08", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 650, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xc4\x6c\xc6\x2c\xf5\x9c\x79\xdc\x96\xec\x34\x24\x3a\x10\xa1\x47\x50\x19\x44\x79\x37\x6a\x49\xcc\x84\x65\x1a\x23\xa4\x88\xee\x05", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 651, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x7c\xbd\x8c\x87\x9c\x5b\xf2\x33\x5a\xa6\x40\xbc\x7b\xec\xf0\x54\x71\x46\xc5\xbe\xca\xae\x73\x56\x0e\x9e\x80\xc0\x36\xf2\xd5\x02", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 652, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 653, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 654, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\xd8\x5e\x93\x70\x7e\x2f\x67\x15\x7e\x9e\x4b\x3e\x28\x9b\x82\x3b\xe4\xcc\xec\x80\xab\xd8\x61\xef\xb9\xba\x2e\x4c\x32\x51\x0e", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 655, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xac\xed\x0f\xbc\x97\x7b\x44\xec\x36\xd8\x21\x76\xd9\x29\xc9\x87\x8b\xc6\xa9\x0d\xba\xbd\xac\x84\xf0\x71\xfa\x6d\xaf\x97\x05\x0a", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 656, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc4\x6c\xc6\x2c\xf5\x9c\x79\xdc\x96\xec\x34\x24\x3a\x10\xa1\x47\x50\x19\x44\x79\x37\x6a\x49\xcc\x84\x65\x1a\x23\xa4\x88\xee\x05", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 657, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\xbd\x8c\x87\x9c\x5b\xf2\x33\x5a\xa6\x40\xbc\x7b\xec\xf0\x54\x71\x46\xc5\xbe\xca\xae\x73\x56\x0e\x9e\x80\xc0\x36\xf2\xd5\x02", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 658, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 659, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 660, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 661, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 662, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x3f\xe4\xd5\x8f\x46\xc5\x23\x2b\x61\xf8\xe3\x15\xb2\x1a\x99\x83\x2e\x7e\xdb\x98\x75\xc9\xc2\xcf\xd0\xd7\x76\x26\x21\x5b\x58\x0a", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 663, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x3d\x8a\xcb\x56\xc0\x81\xe2\x9d\xa3\x32\x9a\x1f\x78\xce\xff\x08\xc5\xf9\x25\xcd\xe1\xc6\x46\x90\xdb\xf9\x1d\x52\x60\xbc\xd5\x0b", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 664, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\xea\x7f\x13\x06\x76\x4d\x7e\x91\x0b\xab\xd6\x6a\xc6\xb9\xed\x1b\x7d\xb6\xc0\x38\x1f\xbe\xfe\x5d\x98\xb7\x0a\x2c\x8f\xe9\x74\x07", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 665, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x10\xac\x57\x6c\xd0\x48\x11\x97\x77\x6c\x01\x21\xa4\x0c\xaf\x56\x0b\x3f\xc5\x93\xfa\x09\x82\xe1\xe2\x74\x00\x79\x55\xfe\x53\x0a", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 1 }, + { .tc_id = 666, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 667, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 668, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 669, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 670, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x8c\x65\x64\x55\x8b\x98\x5c\xc3\x83\x03\x5b\xfb\x35\x72\x08\x3c\x32\x37\x17\xac\xb6\xc0\x14\xdb\x50\xb4\xa5\x39\xa1\xe8\x90\x0a", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 671, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x1f\xeb\x0b\xd9\xcb\x3e\xa9\x4d\x28\xec\xce\x32\x3f\x06\x90\x1a\x96\xb3\xea\x2f\x9e\x5b\x88\x5a\xaf\xa1\x3d\x57\x1a\xe4\xf7\x0b", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 672, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\xfa\x29\x9c\x89\x56\x41\x28\xd4\xfe\x83\xc4\x75\x8e\xb9\xc2\x89\x90\x40\x71\x91\x10\x9a\xd3\x1f\x0c\xa2\xb1\x54\x8d\xa6\x34\x04", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 673, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x9a\x4f\xca\x0c\x74\x82\xf8\xd9\xf3\x79\x23\xd8\x70\x2d\x10\x4d\x07\xb5\x49\xe0\x82\x25\x19\x3b\x28\x18\xa6\x38\x0e\x9a\xb4\x0f", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 1 }, + { .tc_id = 674, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 675, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 676, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 677, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 678, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\xe3\x7e\x2c\xac\x72\x09\x1a\xf6\x8b\x51\xb4\x3b\x40\xf1\x5e\x49\x9c\x41\x62\x17\x07\xe1\xfb\x30\xcb\x17\x36\x23\x33\xcb\xba\x09", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 679, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x1e\x7d\x21\x9f\x45\x40\x98\x6f\x89\x04\xc6\xa1\x6a\x2b\x74\x96\x7c\x01\x3b\x9f\xf1\xa9\x9e\x6b\x9f\xdb\xb4\x83\x5c\x19\xd7\x0d", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 680, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x91\x01\xd1\xfb\x7d\x62\x47\x68\xec\x8e\xa7\xe3\x1a\xca\x21\x04\x2f\x34\x95\xad\x5e\x48\xfd\xd1\x51\x42\x3f\x5c\x5f\x21\x6c\x04", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 681, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\xf2\x82\xa2\x4a\x31\x6f\xe5\x44\x9e\xa4\x37\xd3\x24\x70\xdf\x2c\x96\x8f\x2f\x27\x68\x86\x53\xd1\xe0\x26\xad\x3d\x3b\xfb\x53\x0c", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 1 }, + { .tc_id = 682, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 683, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 684, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 685, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 686, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\xbf\xad\x7e\x6f\xdf\x80\x8e\x46\xdd\xaa\xa6\x5a\xd1\xe5\xfc\x47\x51\x47\x3c\x23\x9f\x63\xc4\x9c\x2e\x01\x7d\x72\x09\x05\x89\x00", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 687, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x75\x0d\x02\x35\x33\xf6\x55\xc6\xf3\x2c\x38\x99\x2a\x8a\x30\xf9\xf2\x0c\x59\xbd\xa3\x06\x82\xa7\xf5\xf6\x92\x76\x47\x24\xe6\x04", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 688, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\xf2\xc4\x59\x28\x4b\x53\x2c\xb7\xa7\x47\x79\xce\xd5\xcc\x53\x85\x21\xb7\xe4\x66\x56\x1e\x8a\xbd\xcd\xa7\xf6\x42\x38\x40\x42\x00", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 689, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x55\xba\x20\xbe\x6f\x48\xcd\xdf\x9d\x90\xae\xf6\x99\x58\xf1\xc5\x3b\xaa\x96\x22\x6c\x0d\x78\x8f\x25\xb1\x37\x54\xd1\xa3\x32\x07", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 1 }, + { .tc_id = 690, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 691, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 692, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 693, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 694, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xf1\x4a\x0b\x30\x71\x22\xc6\x32\xde\x6f\x34\xf1\x10\x72\x25\xf8\x8b\x1e\x21\x89\x3f\x4d\x67\x19\xdd\xef\xd9\x0f\x44\xb1\x1f\x05", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 695, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x51\x7f\xa7\xeb\x17\x54\x4d\x51\x49\x0f\x24\x17\xa1\x3f\x0d\x85\x91\x9d\xd5\x99\x8c\xc3\xc4\x65\xb8\xc3\x61\x4f\x46\x51\xd2\x0d", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 696, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\xa0\x5c\x2e\xbd\xd2\x6e\x6d\x36\xb0\xd3\x9a\x6d\xc8\xca\xd9\x1a\xc0\x93\x47\x00\xd6\xb7\x96\xb6\xd7\x49\x9d\x6e\xb8\x1f\x13\x01", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 697, + .comment = "ed25519vectors 18", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x38", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\xe9\x7e\x9b\x1f\x47\x28\x1e\xd6\x88\xa3\x20\xde\x59\x12\x61\x8b\x62\xc9\xda\xc6\x4d\x59\x71\xe2\xaa\xb2\xd4\x87\x03\x8c\xc9\x0b", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 1 }, + { .tc_id = 698, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 699, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a", + .ok = 0 }, + { .tc_id = 700, + .comment = "ed25519vectors 20", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x30", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x8f\x13\xd1\xb0\xc2\xaf\x47\x82\x51\x3a\x8c\x33\xda\x39\xdd\x7c\xf9\xca\xf4\xee\x3c\x85\xe5\x8d\xbc\xba\xec\x92\x8a\xee\x0b", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 701, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\xe1\xe3\x2f\x76\x30\x25\x58\xb0\x64\xad\x48\x73\x82\x41\x95\xaf\xc9\xfb\xdd\x1a\x6a\xa2\x0a\x8d\xd0\x5c\xd5\x4f\x70\x8f\x00", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 702, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x4a\x0b\x30\x71\x22\xc6\x32\xde\x6f\x34\xf1\x10\x72\x25\xf8\x8b\x1e\x21\x89\x3f\x4d\x67\x19\xdd\xef\xd9\x0f\x44\xb1\x1f\x05", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 703, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x51\x7f\xa7\xeb\x17\x54\x4d\x51\x49\x0f\x24\x17\xa1\x3f\x0d\x85\x91\x9d\xd5\x99\x8c\xc3\xc4\x65\xb8\xc3\x61\x4f\x46\x51\xd2\x0d", + .pub = "\x01\x5f\xf5\x95\xe4\xe0\xad\xd0\x0d\xde\x89\x6e\xfa\x66\xea\x4f\x68\x48\xc4\x39\x64\x10\xc6\x93\xc9\x22\x32\xaa\x64\x86\x1d\x4f", + .ok = 0 }, + { .tc_id = 704, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 705, + .comment = "ed25519vectors 30", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x30", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 706, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 707, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 708, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x3d\x62\x2b\x55\xaa\xd1\x7c\x5c\x7a\xad\x97\xa5\x6a\x7a\xda\x9e\xda\x2a\x92\xa1\x4a\x4c\x73\xe3\x49\xd8\xda\x4f\x64\xc7\x0a", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 709, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x34\xb8\x82\x30\x47\xa2\x3f\xb7\x76\xbe\x86\xdb\x7b\x3f\x4b\xb1\xc9\xe4\x9b\xc2\x9b\x35\x2c\x76\x00\x02\xbd\xc8\xe5\x4d\x02", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 710, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x55\xa1\xb0\x9e\x21\x02\x88\xe4\x7a\x47\x96\xde\xf7\x76\x67\x9c\xde\xc5\xa6\x4b\xd2\xbb\x9b\xc6\x99\x32\xc3\xbd\x47\xb9\x61\x09", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 711, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x07\x4f\xc0\xdd\x36\x1f\xa6\x5c\xf2\x75\x44\x3e\x32\x4c\x50\x40\x17\xfa\x8e\x80\xbb\xa2\xa1\xc5\xad\x46\xf1\x16\xc3\xda\xc9\x01", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 1 }, + { .tc_id = 712, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 713, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 714, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xa6\xf7\x9d\xb3\xf8\x13\x48\xfd\x22\x22\x4e\x50\xa2\x56\x21\xf8\x10\xd0\x38\xde\x20\x60\x25\x0f\x8a\x49\x37\xf3\xb4\xcc\x52\x08", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 715, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x59\xc4\x84\x33\xc2\x5f\xcb\x5f\x43\x5c\x32\x8a\xff\x1b\xad\x6e\xaf\x88\xcc\x0d\x75\x86\xa7\x23\xba\x3d\xc9\x21\xf5\x00\x9f\x0a", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 716, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xff\x3d\x62\x2b\x55\xaa\xd1\x7c\x5c\x7a\xad\x97\xa5\x6a\x7a\xda\x9e\xda\x2a\x92\xa1\x4a\x4c\x73\xe3\x49\xd8\xda\x4f\x64\xc7\x0a", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 717, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x07\x34\xb8\x82\x30\x47\xa2\x3f\xb7\x76\xbe\x86\xdb\x7b\x3f\x4b\xb1\xc9\xe4\x9b\xc2\x9b\x35\x2c\x76\x00\x02\xbd\xc8\xe5\x4d\x02", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 718, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 719, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 720, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 721, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 722, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x21\x6c\x38\xd9\xea\xe1\x30\xfe\xe5\x35\x69\xd8\xa1\x75\x0b\x2f\x2e\xf4\x91\x85\xcd\xdd\x7c\xf4\x33\x79\xe8\x4a\x3e\xf5\x0d\x04", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 723, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x26\xd6\x90\xd9\x30\x5a\x0d\x0a\x44\xeb\xb4\xe8\x2d\x11\xb7\xfb\x6e\x08\x50\xfd\xe3\xb2\x7c\xdf\x66\x2d\xfd\x30\x03\x93\xeb\x01", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 724, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x52\x83\x4a\x44\xfb\x88\x0f\x6b\x87\xa7\xe1\x73\xa2\x85\x6a\x90\xf9\x87\xbe\xf3\x9f\x1d\x95\xb0\x66\xa5\x28\x09\x9a\xf1\x33\x02", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 725, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\xa6\x91\x45\xf5\x08\xef\x4c\xe1\xa0\xfd\x25\x02\x5d\x82\x51\x6e\x06\xe4\x92\xef\x08\x8d\xe4\x5d\xa7\x84\xf8\xa8\x63\xeb\xe4\x01", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 1 }, + { .tc_id = 726, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 727, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 728, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x66\x8e\x1a\xa7\xf6\xb0\x02\x50\x31\x56\x77\x06\x3e\x6f\x34\x7c\x86\x9c\xc3\x1c\x7a\x9f\x31\xed\x42\xd0\x2e\x1b\xdd\x9e\x0d", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 729, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x8c\xe9\x3e\xf4\xa8\x64\x89\x01\x15\xed\x9c\xb1\x34\x1f\xa3\x2f\xa0\x99\x69\x11\xfe\x07\xc1\x49\x6e\x8c\x9a\x3d\xf4\x3a\x08", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 730, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x6c\x38\xd9\xea\xe1\x30\xfe\xe5\x35\x69\xd8\xa1\x75\x0b\x2f\x2e\xf4\x91\x85\xcd\xdd\x7c\xf4\x33\x79\xe8\x4a\x3e\xf5\x0d\x04", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 731, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\xd6\x90\xd9\x30\x5a\x0d\x0a\x44\xeb\xb4\xe8\x2d\x11\xb7\xfb\x6e\x08\x50\xfd\xe3\xb2\x7c\xdf\x66\x2d\xfd\x30\x03\x93\xeb\x01", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 732, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 733, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 734, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 735, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 736, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\xf2\x5d\x18\xd1\xd9\x4a\xa0\x74\xc5\x27\x7c\xaf\xc3\x9c\x51\x28\x60\x21\xe2\x16\x78\xcc\xc9\x19\xbd\x6f\x32\x6c\xfc\xb7\x09", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 737, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x71\xf5\xe7\x1c\x48\x3f\x08\x86\xdd\x67\x85\x75\xb4\x98\xd0\x31\x77\xd5\x1a\xd5\x42\xed\xf1\x13\xb6\x21\x4b\x93\xc7\x9b\x0b", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 738, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\xbc\x1f\x0d\x2c\x7b\x65\x3d\x5a\xaf\x07\xa7\x1c\x13\x0d\x8a\xff\x5b\xef\x86\x53\xd6\x98\x4f\x2b\x22\x30\x81\xac\x24\xa6\x20\x05", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 1 }, + { .tc_id = 739, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x13\x4f\xf3\xe6\xe5\xe3\xfc\xe6\xd8\xf4\x62\x95\x87\x17\x35\xf1\x70\x0c\x26\x74\xd3\x89\x2a\x7f\x06\xf0\x55\x53\x33\x36\xa0\x02", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 740, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 741, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 742, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x40\xab\x13\x0e\x00\x29\x35\x09\x1a\x7e\xac\x0f\x14\x76\xb9\xb5\xe6\x04\x11\xea\xd5\x8a\x3c\x0e\x95\x76\x5c\x23\x47\x52\xf7\x02", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 743, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xf2\x81\x44\xc1\x6a\x59\xec\xed\xbb\xe8\x2a\xa3\x48\x1c\xf4\x22\x79\xd8\x2c\x6c\x66\x9b\xeb\x6c\x59\x62\x2e\x94\xbc\xc0\x38\x08", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 744, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xcd\xf2\x5d\x18\xd1\xd9\x4a\xa0\x74\xc5\x27\x7c\xaf\xc3\x9c\x51\x28\x60\x21\xe2\x16\x78\xcc\xc9\x19\xbd\x6f\x32\x6c\xfc\xb7\x09", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 745, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x40\x71\xf5\xe7\x1c\x48\x3f\x08\x86\xdd\x67\x85\x75\xb4\x98\xd0\x31\x77\xd5\x1a\xd5\x42\xed\xf1\x13\xb6\x21\x4b\x93\xc7\x9b\x0b", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 746, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 747, + .comment = "ed25519vectors 25", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x35", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 748, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x45\x24\xc9\x28\xa5\x83\xec\x7c\xbd\xda\xb4\x76\x5d\xbd\xaf\x53\x2c\x7f\xd2\x78\xa5\xc4\xfd\x93\x3e\x9c\x4c\x01\xc2\xf5\x83\x02", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 749, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x33\x5e\xc1\x92\x61\xef\xdc\xd2\x5b\xbe\x64\xdd\xe6\xdc\xc7\x81\x5b\x23\x7b\xf5\x3f\xfe\xdc\x45\xd4\x43\x51\xd9\x69\x0e\x0e\x0b", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 750, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xcd\xf2\x5d\x18\xd1\xd9\x4a\xa0\x74\xc5\x27\x7c\xaf\xc3\x9c\x51\x28\x60\x21\xe2\x16\x78\xcc\xc9\x19\xbd\x6f\x32\x6c\xfc\xb7\x09", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 751, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x40\x71\xf5\xe7\x1c\x48\x3f\x08\x86\xdd\x67\x85\x75\xb4\x98\xd0\x31\x77\xd5\x1a\xd5\x42\xed\xf1\x13\xb6\x21\x4b\x93\xc7\x9b\x0b", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 752, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 753, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 754, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\xa1\x53\xa2\xd8\x92\x2b\x9f\xcf\xbc\x06\xa4\x25\xe6\xa5\x0f\x28\xdf\xe3\x79\x9f\x91\xcb\x5f\x98\x3b\x16\xea\xdf\x93\x04\x05", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 755, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb6\x1a\xd0\x67\x89\x85\x7c\x7a\x7c\x90\x25\xdf\x6b\x63\x21\x48\x3f\x53\x3c\x77\x5a\xba\xba\x02\xb5\x7e\xa2\x50\x85\x07\x34\x0c", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 756, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcd\xf2\x5d\x18\xd1\xd9\x4a\xa0\x74\xc5\x27\x7c\xaf\xc3\x9c\x51\x28\x60\x21\xe2\x16\x78\xcc\xc9\x19\xbd\x6f\x32\x6c\xfc\xb7\x09", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 757, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x40\x71\xf5\xe7\x1c\x48\x3f\x08\x86\xdd\x67\x85\x75\xb4\x98\xd0\x31\x77\xd5\x1a\xd5\x42\xed\xf1\x13\xb6\x21\x4b\x93\xc7\x9b\x0b", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 758, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 759, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 760, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 761, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 762, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\xdd\x5e\x46\xf5\x0f\x59\xe8\x54\xfd\xa2\xb2\xae\x82\xc6\xf0\xc6\x4d\xa0\x71\x46\xd4\xb7\xd3\x88\xa9\xc0\xac\xec\x03\x87\xde\x06", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 763, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x7a\x8a\xfc\x08\xcd\x56\xba\x35\x6a\xfe\x59\xbe\x2d\x03\xde\x9d\x4d\x0f\x44\xcd\x72\xc0\x0f\x85\xdd\xb1\xe8\x44\x27\x5b\x96\x01", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 764, + .comment = "ed25519vectors 21", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x31", + .msg_sz = 17UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\xe2\x51\x15\x11\x70\x21\x87\x1b\xa2\x56\xc8\x45\xf4\x62\x42\x2e\x38\x00\x99\x23\x5e\xb4\x8e\x8f\xc8\x98\xef\x6b\x49\xee\x5a\x0c", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 765, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x4f\x40\x6a\xcc\x5e\xf8\x98\x38\xac\x82\x4d\x84\x52\x9e\x25\x57\xb7\x38\xd6\x78\xe3\xb9\x07\x06\x34\x23\x2a\xf8\xe8\xa1\x6d\x02", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 1 }, + { .tc_id = 766, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 767, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 768, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 769, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 770, + .comment = "ed25519vectors 17", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x37", + .msg_sz = 17UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\xe1\x2d\x95\x10\xd5\x82\x03\xc8\x9c\x7d\x06\xa6\x11\x81\x5a\x2b\x39\x0a\x6f\x36\x38\x85\xb9\x0d\xa2\x66\xc8\x51\x35\xbc\x5c\x05", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 771, + .comment = "ed25519vectors 39", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x39", + .msg_sz = 17UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x0b\xbe\xcc\xb5\x22\x37\x43\xbd\x17\xf3\xa7\x3d\xac\x85\x07\x4b\xce\x77\xce\x10\x2d\x03\x1b\x2e\x2a\x89\x7a\x8b\x66\xec\x65\x0b", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 772, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x70\x1a\x59\x8b\x9a\x02\xae\x60\x50\x5d\xd0\xc2\x93\x8a\x1a\x0c\x2d\x6f\xfd\x46\x76\xcf\xb4\x91\x25\xb1\x9e\x9c\xb3\x58\xda\x06", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 773, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x1a\x1b\xa7\x5d\xc7\x1a\x1c\x32\x75\xe4\xdd\x31\x15\xb1\x63\x8f\x67\xd1\x6f\x14\x40\xd1\x6d\xcc\x2c\x01\x88\xbb\xb1\x7d\x62\x06", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 1 }, + { .tc_id = 774, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 775, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 776, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 777, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 778, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x1d\x48\x95\x56\x27\xf6\x85\xfc\xa0\x0a\x5d\x62\x88\x6f\xa4\xca\xe9\x66\xaf\x75\x22\x51\x03\x49\x04\x35\x84\x48\x89\x1d\x90\x00", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 779, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x19\x77\x5c\x38\x55\x8d\xaf\xa0\x93\xe9\xe2\x49\x29\x33\xbc\xd4\xdd\x13\x65\x6d\x43\xb7\x5c\x7d\x13\xb4\x50\xa9\x86\xcc\x36\x0d", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 780, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x91\xcf\xde\xb8\x75\xd8\x6b\xf7\x0f\x14\x73\x37\x91\xc8\x5a\xdd\x6b\x98\xdc\x81\x38\x42\xc1\x33\x8c\x48\xea\x3e\x53\xe4\xaa\x0f", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 781, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x39\x39\xad\x4e\x37\x97\xf4\xd8\x69\xb5\x1c\xb3\x6f\x6b\x93\x79\x87\xdf\x79\x7d\x46\xb8\x51\xc6\xab\xc7\x6e\xf7\x07\xc6\x05\x03", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 1 }, + { .tc_id = 782, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 783, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 784, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 785, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 786, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\xf5\x1d\xee\xe4\xff\xb0\x0d\x12\x6b\x97\xff\x2d\x90\x1b\x8e\x7d\xe8\xbf\xb8\xa9\x6e\x1d\xfa\xbf\x49\x49\xa3\x0b\x1c\x28\xec\x01", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 787, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x4b\x4f\x0d\x71\x71\xf6\x09\x28\x9d\x3b\xbb\x7c\xbc\xef\xb4\x24\xa1\x3b\x46\x8e\x84\x8d\x58\xfd\xdb\xb7\x34\x29\x04\x0c\x79\x06", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 788, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x1b\xdf\x45\x2e\x32\x74\xbd\xa9\x64\x8c\x0e\x27\xac\x71\x39\xf6\xc9\x9c\x7f\xf2\xe9\x66\x37\xaf\xe5\x41\xce\x41\x4e\x37\x8b\x05", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 789, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x83\x45\x86\x50\xb4\x97\xc3\xf7\x22\x6c\xb9\x3e\x93\x24\xdf\x56\x7b\x1a\xdd\xa3\x93\x78\xe8\x44\x23\x04\x53\xb9\x5a\xa8\xc8\x01", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 1 }, + { .tc_id = 790, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 791, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 792, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 793, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 794, + .comment = "ed25519vectors 22", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x32", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x96\xd7\x6d\x74\x8c\x70\x43\x0e\x98\x61\x90\xb5\x47\xbe\xf0\x3c\x36\xd3\xe5\x3d\x48\x34\xf5\xc6\x0b\x23\xd3\x92\x69\x5b\xbe\x06", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 795, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xf8\x99\xfc\xb8\x7a\x68\x9f\x9a\x17\xbb\x3d\x7a\x54\xab\x6b\xbd\x06\x0f\x3f\x30\x61\x50\x2f\x1f\xa6\xa1\xfc\x2a\x8e\xee\x06\x03", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 796, + .comment = "ed25519vectors 15", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x35", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\xe9\xbc\xd5\x64\x3a\xdd\x13\xde\x8c\x05\xd9\xe6\x30\x35\x98\x15\x21\x2d\xf8\x72\x30\x4b\xef\x49\x1f\x58\xf8\x67\xbd\x54\x27\x09", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 797, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x04\x86\x48\x48\xc5\xff\x53\x61\x60\x9e\x94\x1b\x21\x36\x01\x2a\xc8\x81\x39\xa3\x47\x07\xe1\x2c\xad\xf6\x64\x5d\xff\x0b\x10\x08", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 1 }, + { .tc_id = 798, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 799, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa", + .ok = 0 }, + { .tc_id = 800, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x77\xde\x70\xf3\x61\x1e\xb2\x9e\xe7\x26\xca\x74\xd2\x02\x67\xc1\x84\xa3\x5f\x0f\xbc\x42\x61\x45\x8e\xaa\xd8\x6f\x54\x5d\x5b\x03", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 801, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x1a\x58\xa2\x53\xfd\xd4\x22\x10\x25\x58\xa4\x10\x77\xd9\x50\x55\xa4\xf9\x88\xbb\x5f\x47\x50\x06\xa4\x1a\x79\xd3\xa2\xba\x01", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 802, + .comment = "ed25519vectors 22", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x32", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x96\xd7\x6d\x74\x8c\x70\x43\x0e\x98\x61\x90\xb5\x47\xbe\xf0\x3c\x36\xd3\xe5\x3d\x48\x34\xf5\xc6\x0b\x23\xd3\x92\x69\x5b\xbe\x06", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 803, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x99\xfc\xb8\x7a\x68\x9f\x9a\x17\xbb\x3d\x7a\x54\xab\x6b\xbd\x06\x0f\x3f\x30\x61\x50\x2f\x1f\xa6\xa1\xfc\x2a\x8e\xee\x06\x03", + .pub = "\x86\xe7\x2f\x5c\x2a\x72\x15\x15\x10\x59\xaa\x15\x1c\x0e\xe6\xf8\xe2\x15\x5d\x30\x14\x02\xf3\x5d\x74\x98\xf0\x78\x62\x9a\x8f\x79", + .ok = 0 }, + { .tc_id = 804, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 805, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 806, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x9a\xa7\xc9\x08\x1f\x2e\x43\xb7\x52\x4f\xdd\x27\xef\x57\x8f\x48\xdd\x9f\x02\x37\x1b\x31\xf8\x01\x3b\xd0\xc5\x32\x1c\x66\x0f", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 807, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x9d\xbd\xa3\x4f\x2a\xc6\x0e\xe9\xd8\x93\xb9\xb1\x6f\x89\x86\x17\xe8\x13\x47\x88\x60\x67\xf4\x9d\x79\xd3\x77\x40\xbb\x42\xa8\x0b", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 808, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 809, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 810, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x36\x68\x4e\xa9\x10\x32\xba\x5b\x1d\xba\xb2\xd0\x2f\x4d\xeb\xc7\x4c\x33\x27\xf2\xb3\x80\x2e\x2e\x4d\x37\x1a\xa4\x2b\x12\xb5\x6b\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 811, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 812, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x16\x30\xa3\x51\x11\x47\x92\x03\x09\x05\x84\x2b\x0d\x44\x0c\x30\xc3\xc3\xc0\x8f\x8e\x27\x5c\xc3\x27\x18\x75\x66\x75\xd1\x0f\x06", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 813, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x81\x9a\xa7\xc9\x08\x1f\x2e\x43\xb7\x52\x4f\xdd\x27\xef\x57\x8f\x48\xdd\x9f\x02\x37\x1b\x31\xf8\x01\x3b\xd0\xc5\x32\x1c\x66\x0f", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 814, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 815, + .comment = "ed25519vectors 19", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x39", + .msg_sz = 17UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 816, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 817, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x82\x07\xec\x4d\x9a\x9b\x8a\xae\xee\x21\x7e\xcb\x5d\x87\xa9\x58\xde\x17\xbe\xb5\x1f\xae\xc5\x32\x36\xe7\xf7\xe0\x7e\x6c\x05", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 818, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x67\xf0\x5a\xf9\x57\x5f\x4d\x1a\x13\xf2\x39\x73\xe2\x8c\x59\x1c\x49\x44\xc7\xde\xc5\xe4\x17\x8c\x71\xa8\x81\x10\xcc\x17\x50\x06", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 819, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 820, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 821, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xb7\x97\xb1\x56\xef\xcd\x45\xa4\xe2\x45\x4d\x2f\xd0\xb2\x14\x38\xb3\xcc\xd8\x0d\x4c\x7f\xd1\xd1\xb2\xc8\xe5\x5b\xd4\xed\x4a\x94\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 822, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 823, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\xed\x35\x04\xf9\xd9\xa8\x51\x15\x64\x3a\xb1\xfe\xfe\x19\x1b\x70\xc3\x9d\xc7\x08\x70\x82\x36\x22\x79\x41\x79\x2d\xc8\xc5\x02", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 824, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x82\x07\xec\x4d\x9a\x9b\x8a\xae\xee\x21\x7e\xcb\x5d\x87\xa9\x58\xde\x17\xbe\xb5\x1f\xae\xc5\x32\x36\xe7\xf7\xe0\x7e\x6c\x05", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 825, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 826, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 827, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 828, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 829, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 830, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x34\xfe\x4e\xdd\x70\x70\x95\x87\x70\x49\xd4\x05\xf5\x2b\x52\xa7\x26\xb4\xcb\xef\x9b\x8a\x1f\x95\x03\x40\xd5\x21\xfe\x11\x0d", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 831, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x98\xd1\x69\x33\x38\xd7\xc4\x6e\x61\xa3\xaa\xe0\x5b\xd2\x3a\x89\xfd\xf7\xb6\x2b\x83\xef\xdd\x06\x2d\xd1\x9a\x39\xd8\xd5\x05", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 832, + .comment = "ed25519vectors 23", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x33", + .msg_sz = 17UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\xcc\xbd\x21\x05\x92\xf2\xa2\xb7\x0a\x9c\x9b\xa9\x1f\x97\xd6\x42\xa2\xe5\x1b\x9a\x67\xec\x78\x81\x88\x03\x92\x28\xa2\x4e\x0e\x09", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 1 }, + { .tc_id = 833, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x60\xf8\x62\x04\x6e\x40\xdc\xc3\xaf\x08\xe1\xb9\x7b\x6c\xd1\x0e\xe4\x41\x58\xcb\xcc\xab\x65\x66\x88\x62\xe8\x44\xac\xe0\x05\x00", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 834, + .comment = "ed25519vectors 12", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x32", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 835, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 836, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 837, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 838, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 839, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xb6\x2c\xf8\x90\xde\x42\xc4\x13\xb1\x1b\x14\x11\xc9\xf0\x1f\x1c\x4d\x77\xaa\x87\xef\x18\x22\x58\xd1\x25\x1f\x69\xaf\x2a\x35\x06\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 840, + .comment = "ed25519vectors 24", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x34", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 841, + .comment = "ed25519vectors 16", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x36", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 842, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x41\xbd\x7a\xfd\x3d\x12\xb4\x2f\x00\xf9\xac\x87\x80\x4f\xce\xee\xa0\x02\xeb\x28\x00\x66\x5b\x0f\xe8\xac\xd0\xcf\x53\xee\x32\x07", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 843, + .comment = "ed25519vectors 21", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x31", + .msg_sz = 17UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x73\x9d\xee\xff\x2a\x8c\x31\x1e\x61\x72\xa2\xe9\xd0\x5f\x6d\x8a\x04\x8d\xf1\x23\xaa\x27\xe1\x01\x5b\xda\x97\x4e\x6b\x32\xb3\x06", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 844, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xce\x34\xfe\x4e\xdd\x70\x70\x95\x87\x70\x49\xd4\x05\xf5\x2b\x52\xa7\x26\xb4\xcb\xef\x9b\x8a\x1f\x95\x03\x40\xd5\x21\xfe\x11\x0d", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 845, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x77\x98\xd1\x69\x33\x38\xd7\xc4\x6e\x61\xa3\xaa\xe0\x5b\xd2\x3a\x89\xfd\xf7\xb6\x2b\x83\xef\xdd\x06\x2d\xd1\x9a\x39\xd8\xd5\x05", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 846, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 847, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 848, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x73\x6c\xd3\x90\xd6\xa2\xcb\x3d\x3a\x40\xbb\xbe\x09\xc8\x7f\xa3\xca\xce\xd7\x2c\xdd\x85\x3b\xfb\xf0\x47\xad\xf1\xde\xc9\x22\x07", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 849, + .comment = "ed25519vectors 23", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32\x33", + .msg_sz = 17UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xbe\x39\x02\x6e\xed\x2d\x5f\x2b\x23\x51\x0d\x25\xbc\x1a\x7b\xfa\xce\x53\xb1\xd7\xb9\x49\xfa\xce\xe0\xc7\xf6\xd1\x12\x1b\xbe\x02", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 850, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xce\x34\xfe\x4e\xdd\x70\x70\x95\x87\x70\x49\xd4\x05\xf5\x2b\x52\xa7\x26\xb4\xcb\xef\x9b\x8a\x1f\x95\x03\x40\xd5\x21\xfe\x11\x0d", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 851, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x77\x98\xd1\x69\x33\x38\xd7\xc4\x6e\x61\xa3\xaa\xe0\x5b\xd2\x3a\x89\xfd\xf7\xb6\x2b\x83\xef\xdd\x06\x2d\xd1\x9a\x39\xd8\xd5\x05", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 852, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 853, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 854, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x4f\xe3\x2e\x72\x29\x4d\x34\xff\x50\x60\xef\xff\x21\x41\x68\x7d\xd5\x21\x17\xf3\x63\x11\xaf\x92\x4b\x73\x63\x8f\x7b\xc6\x04", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 855, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x60\x65\xb5\xa7\xc4\xaa\x91\x98\x00\x74\x76\x05\xe9\x98\x00\xc0\x74\x04\x1d\x01\xee\xcc\xa3\xac\x39\xb7\x8e\xf0\x0d\xa9\x06", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 856, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xce\x34\xfe\x4e\xdd\x70\x70\x95\x87\x70\x49\xd4\x05\xf5\x2b\x52\xa7\x26\xb4\xcb\xef\x9b\x8a\x1f\x95\x03\x40\xd5\x21\xfe\x11\x0d", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 857, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x77\x98\xd1\x69\x33\x38\xd7\xc4\x6e\x61\xa3\xaa\xe0\x5b\xd2\x3a\x89\xfd\xf7\xb6\x2b\x83\xef\xdd\x06\x2d\xd1\x9a\x39\xd8\xd5\x05", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 858, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 859, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 860, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 861, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 862, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 863, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 864, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 865, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 866, + .comment = "ed25519vectors 10", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x30", + .msg_sz = 17UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\xdc\xf7\x68\x95\x21\x7b\xf0\xda\xce\xc8\x39\x95\x3c\x96\x0e\xe6\xd7\x84\x0b\x9f\xa8\xec\x66\x37\x7d\xf8\xa2\xe2\xdb\x72\x23\x05", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 867, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x15\x66\xa1\xad\x3f\x92\xad\xa5\x87\x07\xe4\x52\xdc\xd2\x90\xef\xc6\xa1\x95\x1a\xae\xfe\x43\xbe\x3b\x46\x63\xe3\x8c\x3a\xc0\x02", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 868, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 869, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 870, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\x5a\xe3\x6d\x43\x3a\x7b\xd0\xef\xb1\x50\xb6\xb0\x46\x10\xd1\x98\x6e\x30\x44\xc4\x6b\x6a\xd6\x9b\xae\x17\xaa\xf7\x6b\x60\x8d\x21\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 871, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 872, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 873, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x07\xe2\x5a\xc4\x29\xf3\xfd\xa8\x28\xfd\x20\xbb\xe3\x5e\x9d\x83\x48\x75\xb6\x40\x98\xf0\x5e\x40\xd1\xbb\xe6\x3f\x20\xb9\xc5\x0d", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 874, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x3f\xc2\xc9\x1b\x53\xd1\x27\xbf\xc4\xfb\x69\x10\x46\x7e\x73\x7f\xc5\xa6\x46\x39\x63\xca\x4d\xf8\x3d\x0c\x82\xa4\x19\x29\x9e\x06", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 875, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x26\xe8\x95\x8f\xc2\xb2\x27\xb0\x45\xc3\xf4\x89\xf2\xef\x98\xf0\xd5\xdf\xac\x05\xd3\xc6\x33\x39\xb1\x38\x02\x88\x6d\x53\xfc\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 876, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 877, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\xfa\x9d\xde\x27\x4f\x48\x20\xef\xb1\x9a\x89\x0f\x8b\xa2\xd8\x79\x17\x10\xa4\x30\x3c\xee\xf4\xae\xdf\x9d\xdd\xc4\xe8\x1a\x1f\x11\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 878, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 879, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 880, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x35\x40\xa5\x7b\x2b\xa0\x0d\x60\x51\x0c\xa5\x17\x4b\x63\xf5\xad\x62\x89\xf5\x02\x41\x88\x7e\xc1\x14\x58\x3b\x64\x3d\xfe\x60\x03", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 881, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\xf0\x81\xc9\x39\xb0\xfb\x2f\x42\x74\x9c\xd3\x92\xbe\x91\xb9\x0b\x20\x87\x5f\x6a\x7a\xbd\x40\x19\xa4\x70\x29\x95\x69\xf1\x6f\x01", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 882, + .comment = "ed25519vectors 9", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x39", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 883, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 884, + .comment = "ed25519vectors 13", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x33", + .msg_sz = 17UL, + .sig = "\xf3\x61\x21\xd8\xb0\xb7\xdf\x10\x4e\x65\x76\xf0\x74\x5d\x27\x86\xe8\xef\x5b\xcf\xc3\x11\x0b\x51\x20\x62\x22\x3b\x17\xe5\xe0\xee\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 885, + .comment = "ed25519vectors 11", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x31", + .msg_sz = 17UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 886, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 887, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x8c\x7f\xe7\xa9\xb4\x0d\xdb\x96\x17\xa6\xca\x67\x87\x29\xb5\x3a\xd7\xc9\x91\x65\x31\xc8\x29\x28\x8e\x41\x6e\x56\xfb\xb7\x48\x09", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 888, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x73\xda\x5e\x09\xd3\x60\xde\xbd\x54\x17\x71\x28\xd8\xb4\x03\xf3\xd8\xcd\xd8\x0e\xc8\x3c\xd6\x0b\x13\x8b\x51\x5d\x89\xd5\xcb\x0a", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 889, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xc7\x17\x6a\x70\x3d\x4d\xd8\x4f\xba\x3c\x0b\x76\x0d\x10\x67\x0f\x2a\x20\x53\xfa\x2c\x39\xcc\xc6\x4e\xc7\xfd\x77\x92\xac\x03\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 890, + .comment = "ed25519vectors 19", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x39", + .msg_sz = 17UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 891, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\x93\x1c\x92\xbc\xc5\x84\x2f\x10\x4e\xaf\x49\x4f\xb9\xef\x2e\x67\x91\xcf\xbb\x3b\x94\x95\x29\x64\x51\xe8\x55\x08\x94\x9f\x72\xde\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 892, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 893, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 894, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 895, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 896, + .comment = "ed25519vectors 36", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x36", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x63\xec\x46\x3d\xaf\x4a\x74\x74\x99\x95\xe1\xbc\xa0\x7d\x16\x90\x51\x63\x0e\x9c\xf3\x68\x60\xb8\x65\x36\xf5\xc7\xf6\xe8\x74\x05", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 897, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x8f\xcc\x9e\x16\x0c\xf7\x1f\x13\x43\xcf\x2a\x6c\xc8\xd5\x1c\xae\x1a\x9d\xc2\xe3\xde\xbc\x99\xd9\x7e\xc1\x19\x07\x82\x40\x6e\x05", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 898, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x2a\xde\xc0\xcb\xdc\x37\x18\x69\x7e\x37\x0f\x88\xb2\x91\xcb\xe1\x96\x5f\x51\x92\x14\x74\xe0\xfe\x35\x97\x3d\xbc\x47\x1c\x3e\x01", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 899, + .comment = "ed25519vectors 3", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x32\x7f\x51\xa8\x3c\xac\xea\x96\xd1\xf3\xfc\x6b\xe0\xe2\x68\x2f\x22\xce\x35\x40\x0c\xcb\x70\x7a\xa3\x0a\x73\x21\xed\x6d\xff\x05", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 1 }, + { .tc_id = 900, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 901, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 902, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 903, + .comment = "ed25519vectors 4", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x34", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 904, + .comment = "ed25519vectors 14", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31\x34", + .msg_sz = 17UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 905, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\x37\xd3\x07\x6f\x21\xbd\x3b\xec\x4e\xe4\xeb\xee\x36\x0f\xe0\xe3\xb2\x88\x55\x78\x10\xe7\xdd\xa7\x2e\xda\xe0\x96\x50\xd5\xca\xf9\x05\xba\x9a\x79\x62\x74\xd8\x04\x37\xaf\xa3\x6f\x12\x36\x56\x3f\x2f\x3b\x0a\xa8\x4c\xec\xdd\xc3\xd2\x09\x14\x61\x5b\xa4\xfe\x02", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 906, + .comment = "ed25519vectors", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73", + .msg_sz = 14UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 907, + .comment = "ed25519vectors 5", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x35", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 908, + .comment = "ed25519vectors 2", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x32", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x5f\x3d\x4d\x7d\x4f\xd1\xb0\x55\xea\x05\x19\x3e\xc3\x24\x58\xd7\x96\xb6\x9a\xca\x12\x8d\x34\xd5\xe4\xdb\xae\xc8\xa8\x6e\x0c", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 909, + .comment = "ed25519vectors 6", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x36", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x2e\x91\x41\xda\x7c\xc7\x35\x2a\xcd\x9c\x86\x88\xb8\x9b\x9c\x2a\xb8\x73\xaa\x6c\x42\x70\xe9\xc9\x83\x00\x51\xf8\x61\x86\x0f", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 910, + .comment = "ed25519vectors 36", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x33\x36", + .msg_sz = 17UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\xec\x46\x3d\xaf\x4a\x74\x74\x99\x95\xe1\xbc\xa0\x7d\x16\x90\x51\x63\x0e\x9c\xf3\x68\x60\xb8\x65\x36\xf5\xc7\xf6\xe8\x74\x05", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 911, + .comment = "ed25519vectors 7", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x37", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\xcc\x9e\x16\x0c\xf7\x1f\x13\x43\xcf\x2a\x6c\xc8\xd5\x1c\xae\x1a\x9d\xc2\xe3\xde\xbc\x99\xd9\x7e\xc1\x19\x07\x82\x40\x6e\x05", + .pub = "\xfe\x89\x4d\xf1\x8a\xbf\x1c\x20\x08\x8b\xfb\xe6\xc9\xad\x45\xd4\x2e\xc2\x06\x63\xea\xf7\x11\x1e\xae\xa1\xd8\x51\xda\x0d\x7f\x89", + .ok = 0 }, + { .tc_id = 912, + .comment = "ed25519vectors 1", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x31", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 913, + .comment = "ed25519vectors 8", + .msg = (uchar const *)"\x65\x64\x32\x35\x35\x31\x39\x76\x65\x63\x74\x6f\x72\x73\x20\x38", + .msg_sz = 16UL, + .sig = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + {0} +}; diff --git a/src/ballet/ed25519/test_ed25519_signature_malleability.c b/src/ballet/ed25519/test_ed25519_signature_malleability.c index 636cbd246f..7e1c881558 100644 --- a/src/ballet/ed25519/test_ed25519_signature_malleability.c +++ b/src/ballet/ed25519/test_ed25519_signature_malleability.c @@ -41,9 +41,9 @@ main( int argc, "sig: " FD_LOG_HEX16_FMT " " FD_LOG_HEX16_FMT "\n\t" "pub: " FD_LOG_HEX16_FMT, i, - FD_LOG_HEX16_FMT_ARGS(should_fail[i].sig), - FD_LOG_HEX16_FMT_ARGS(should_fail[i].sig+32), - FD_LOG_HEX16_FMT_ARGS(should_fail[i].pub))); + FD_LOG_HEX16_FMT_ARGS(should_pass[i].sig), + FD_LOG_HEX16_FMT_ARGS(should_pass[i].sig+32), + FD_LOG_HEX16_FMT_ARGS(should_pass[i].pub))); } } diff --git a/src/ballet/ed25519/test_ristretto255.c b/src/ballet/ed25519/test_ristretto255.c new file mode 100644 index 0000000000..9e523169c6 --- /dev/null +++ b/src/ballet/ed25519/test_ristretto255.c @@ -0,0 +1,518 @@ +#include + +#include "../fd_ballet.h" +#include "../hex/fd_hex.h" +#include "fd_ristretto255.h" + +/* base_point_multiples was imported from + draft-irtf-cfrg-ristretto255-decaf448-08 Appendix A.1 */ + +static uchar const base_point_multiples[][32] = { + /* B[ 0] */ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + /* B[ 1] */ "\xe2\xf2\xae\x0a\x6a\xbc\x4e\x71\xa8\x84\xa9\x61\xc5\x00\x51\x5f\x58\xe3\x0b\x6a\xa5\x82\xdd\x8d\xb6\xa6\x59\x45\xe0\x8d\x2d\x76", + /* B[ 2] */ "\x6a\x49\x32\x10\xf7\x49\x9c\xd1\x7f\xec\xb5\x10\xae\x0c\xea\x23\xa1\x10\xe8\xd5\xb9\x01\xf8\xac\xad\xd3\x09\x5c\x73\xa3\xb9\x19", + /* B[ 3] */ "\x94\x74\x1f\x5d\x5d\x52\x75\x5e\xce\x4f\x23\xf0\x44\xee\x27\xd5\xd1\xea\x1e\x2b\xd1\x96\xb4\x62\x16\x6b\x16\x15\x2a\x9d\x02\x59", + /* B[ 4] */ "\xda\x80\x86\x27\x73\x35\x8b\x46\x6f\xfa\xdf\xe0\xb3\x29\x3a\xb3\xd9\xfd\x53\xc5\xea\x6c\x95\x53\x58\xf5\x68\x32\x2d\xaf\x6a\x57", + /* B[ 5] */ "\xe8\x82\xb1\x31\x01\x6b\x52\xc1\xd3\x33\x70\x80\x18\x7c\xf7\x68\x42\x3e\xfc\xcb\xb5\x17\xbb\x49\x5a\xb8\x12\xc4\x16\x0f\xf4\x4e", + /* B[ 6] */ "\xf6\x47\x46\xd3\xc9\x2b\x13\x05\x0e\xd8\xd8\x02\x36\xa7\xf0\x00\x7c\x3b\x3f\x96\x2f\x5b\xa7\x93\xd1\x9a\x60\x1e\xbb\x1d\xf4\x03", + /* B[ 7] */ "\x44\xf5\x35\x20\x92\x6e\xc8\x1f\xbd\x5a\x38\x78\x45\xbe\xb7\xdf\x85\xa9\x6a\x24\xec\xe1\x87\x38\xbd\xcf\xa6\xa7\x82\x2a\x17\x6d", + /* B[ 8] */ "\x90\x32\x93\xd8\xf2\x28\x7e\xbe\x10\xe2\x37\x4d\xc1\xa5\x3e\x0b\xc8\x87\xe5\x92\x69\x9f\x02\xd0\x77\xd5\x26\x3c\xdd\x55\x60\x1c", + /* B[ 9] */ "\x02\x62\x2a\xce\x8f\x73\x03\xa3\x1c\xaf\xc6\x3f\x8f\xc4\x8f\xdc\x16\xe1\xc8\xc8\xd2\x34\xb2\xf0\xd6\x68\x52\x82\xa9\x07\x60\x31", + /* B[10] */ "\x20\x70\x6f\xd7\x88\xb2\x72\x0a\x1e\xd2\xa5\xda\xd4\x95\x2b\x01\xf4\x13\xbc\xf0\xe7\x56\x4d\xe8\xcd\xc8\x16\x68\x9e\x2d\xb9\x5f", + /* B[11] */ "\xbc\xe8\x3f\x8b\xa5\xdd\x2f\xa5\x72\x86\x4c\x24\xba\x18\x10\xf9\x52\x2b\xc6\x00\x4a\xfe\x95\x87\x7a\xc7\x32\x41\xca\xfd\xab\x42", + /* B[12] */ "\xe4\x54\x9e\xe1\x6b\x9a\xa0\x30\x99\xca\x20\x8c\x67\xad\xaf\xca\xfa\x4c\x3f\x3e\x4e\x53\x03\xde\x60\x26\xe3\xca\x8f\xf8\x44\x60", + /* B[13] */ "\xaa\x52\xe0\x00\xdf\x2e\x16\xf5\x5f\xb1\x03\x2f\xc3\x3b\xc4\x27\x42\xda\xd6\xbd\x5a\x8f\xc0\xbe\x01\x67\x43\x6c\x59\x48\x50\x1f", + /* B[14] */ "\x46\x37\x6b\x80\xf4\x09\xb2\x9d\xc2\xb5\xf6\xf0\xc5\x25\x91\x99\x08\x96\xe5\x71\x6f\x41\x47\x7c\xd3\x00\x85\xab\x7f\x10\x30\x1e", + /* B[15] */ "\xe0\xc4\x18\xf7\xc8\xd9\xc4\xcd\xd7\x39\x5b\x93\xea\x12\x4f\x3a\xd9\x90\x21\xbb\x68\x1d\xfc\x33\x02\xa9\xd9\x9a\x2e\x53\xe6\x4e", +}; + +/* bad_encodings was imported from + draft-irtf-cfrg-ristretto255-decaf448-08 Appendix A.2 */ + +static uchar const bad_encodings[][32] = { + /* Non-canonical field encodings */ + "\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + "\xf3\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + /* Negative field elements */ + "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + "\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + "\xed\x57\xff\xd8\xc9\x14\xfb\x20\x14\x71\xd1\xc3\xd2\x45\xce\x3c\x74\x6f\xcb\xe6\x3a\x36\x79\xd5\x1b\x6a\x51\x6e\xbe\xbe\x0e\x20", + "\xc3\x4c\x4e\x18\x26\xe5\xd4\x03\xb7\x8e\x24\x6e\x88\xaa\x05\x1c\x36\xcc\xf0\xaa\xfe\xbf\xfe\x13\x7d\x14\x8a\x2b\xf9\x10\x45\x62", + "\xc9\x40\xe5\xa4\x40\x41\x57\xcf\xb1\x62\x8b\x10\x8d\xb0\x51\xa8\xd4\x39\xe1\xa4\x21\x39\x4e\xc4\xeb\xcc\xb9\xec\x92\xa8\xac\x78", + "\x47\xcf\xc5\x49\x7c\x53\xdc\x8e\x61\xc9\x1d\x17\xfd\x62\x6f\xfb\x1c\x49\xe2\xbc\xa9\x4e\xed\x05\x22\x81\xb5\x10\xb1\x11\x7a\x24", + "\xf1\xc6\x16\x5d\x33\x36\x73\x51\xb0\xda\x8f\x6e\x45\x11\x01\x0c\x68\x17\x4a\x03\xb6\x58\x12\x12\xc7\x1c\x0e\x1d\x02\x6c\x3c\x72", + "\x87\x26\x0f\x7a\x2f\x12\x49\x51\x18\x36\x0f\x02\xc2\x6a\x47\x0f\x45\x0d\xad\xf3\x4a\x41\x3d\x21\x04\x2b\x43\xb9\xd9\x3e\x13\x09", + /* Non-square x^2 */ + "\x26\x94\x8d\x35\xca\x62\xe6\x43\xe2\x6a\x83\x17\x73\x32\xe6\xb6\xaf\xeb\x9d\x08\xe4\x26\x8b\x65\x0f\x1f\x5b\xbd\x8d\x81\xd3\x71", + "\x4e\xac\x07\x7a\x71\x3c\x57\xb4\xf4\x39\x76\x29\xa4\x14\x59\x82\xc6\x61\xf4\x80\x44\xdd\x3f\x96\x42\x7d\x40\xb1\x47\xd9\x74\x2f", + "\xde\x6a\x7b\x00\xde\xad\xc7\x88\xeb\x6b\x6c\x8d\x20\xc0\xae\x96\xc2\xf2\x01\x90\x78\xfa\x60\x4f\xee\x5b\x87\xd6\xe9\x89\xad\x7b", + "\xbc\xab\x47\x7b\xe2\x08\x61\xe0\x1e\x4a\x0e\x29\x52\x84\x14\x6a\x51\x01\x50\xd9\x81\x77\x63\xca\xf1\xa6\xf4\xb4\x22\xd6\x70\x42", + "\x2a\x29\x2d\xf7\xe3\x2c\xab\xab\xbd\x9d\xe0\x88\xd1\xd1\xab\xec\x9f\xc0\x44\x0f\x63\x7e\xd2\xfb\xa1\x45\x09\x4d\xc1\x4b\xea\x08", + "\xf4\xa9\xe5\x34\xfc\x0d\x21\x6c\x44\xb2\x18\xfa\x0c\x42\xd9\x96\x35\xa0\x12\x7e\xe2\xe5\x3c\x71\x2f\x70\x60\x96\x49\xfd\xff\x22", + "\x82\x68\x43\x6f\x8c\x41\x26\x19\x6c\xf6\x4b\x3c\x7d\xdb\xda\x90\x74\x6a\x37\x86\x25\xf9\x81\x3d\xd9\xb8\x45\x70\x77\x25\x67\x31", + "\x28\x10\xe5\xcb\xc2\xcc\x4d\x4e\xec\xe5\x4f\x61\xc6\xf6\x97\x58\xe2\x89\xaa\x7a\xb4\x40\xb3\xcb\xea\xa2\x19\x95\xc2\xf4\x23\x2b", + /* Negative xy value */ + "\x3e\xb8\x58\xe7\x8f\x5a\x72\x54\xd8\xc9\x73\x11\x74\xa9\x4f\x76\x75\x5f\xd3\x94\x1c\x0a\xc9\x37\x35\xc0\x7b\xa1\x45\x79\x63\x0e", + "\xa4\x5f\xdc\x55\xc7\x64\x48\xc0\x49\xa1\xab\x33\xf1\x70\x23\xed\xfb\x2b\xe3\x58\x1e\x9c\x7a\xad\xe8\xa6\x12\x52\x15\xe0\x42\x20", + "\xd4\x83\xfe\x81\x3c\x6b\xa6\x47\xeb\xbf\xd3\xec\x41\xad\xca\x1c\x61\x30\xc2\xbe\xee\xe9\xd9\xbf\x06\x5c\x8d\x15\x1c\x5f\x39\x6e", + "\x8a\x2e\x1d\x30\x05\x01\x98\xc6\x5a\x54\x48\x31\x23\x96\x0c\xcc\x38\xae\xf6\x84\x8e\x1e\xc8\xf5\xf7\x80\xe8\x52\x37\x69\xba\x32", + "\x32\x88\x84\x62\xf8\xb4\x86\xc6\x8a\xd7\xdd\x96\x10\xbe\x51\x92\xbb\xea\xf3\xb4\x43\x95\x1a\xc1\xa8\x11\x84\x19\xd9\xfa\x09\x7b", + "\x22\x71\x42\x50\x1b\x9d\x43\x55\xcc\xba\x29\x04\x04\xbd\xe4\x15\x75\xb0\x37\x69\x3c\xef\x1f\x43\x8c\x47\xf8\xfb\xf3\x5d\x11\x65", + "\x5c\x37\xcc\x49\x1d\xa8\x47\xcf\xeb\x92\x81\xd4\x07\xef\xc4\x1e\x15\x14\x4c\x87\x6e\x01\x70\xb4\x99\xa9\x6a\x22\xed\x31\xe0\x1e", + "\x44\x54\x25\x11\x7c\xb8\xc9\x0e\xdc\xbc\x7c\x1c\xc0\xe7\x4f\x74\x7f\x2c\x1e\xfa\x56\x30\xa9\x67\xc6\x4f\x28\x77\x92\xa4\x8a\x4b", + /* s = -1, which causes y = 0 */ + "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", +}; + +static void +log_bench( char const * descr, + ulong iter, + long dt ) { + float khz = 1e6f *(float)iter/(float)dt; + float tau = (float)dt /(float)iter; + FD_LOG_NOTICE(( "%-31s %11.3fK/s/core %10.3f ns/call", descr, (double)khz, (double)tau )); +} + +static void +fd_f25519_print (fd_f25519_t * f) { + uchar s[32]; + fd_f25519_tobytes(s, f); + for ( int i=0; i<32; i++ ) { printf("%02x", s[i]); } printf("\n"); +} + +FD_FN_UNUSED static void +fd_ed25519_ge_print (fd_ed25519_point_t * p) { + fd_f25519_t x[1], y[1], z[1], t[1]; + fd_ed25519_point_to( x, y, z, t, p ); + + printf("X = "); fd_f25519_print(x); + printf("Y = "); fd_f25519_print(y); + printf("Z = "); fd_f25519_print(z); + printf("T = "); fd_f25519_print(t); +} + +void +test_point_decompress( FD_FN_UNUSED fd_rng_t * rng ) { + uchar _s[32]; uchar * s = _s; + fd_ristretto255_point_t _h[1]; fd_ristretto255_point_t * h = _h; + + /* Decompress & compress base point multiples */ + for( uchar const * s = base_point_multiples[0]; + s < (uchar const *)base_point_multiples + sizeof base_point_multiples; + s += 32 ) { + fd_ristretto255_point_t h[1]; + if( FD_UNLIKELY( !fd_ristretto255_point_decompress( h, s ) ) ) { + FD_LOG_ERR(( "FAIL" + "\n\tfd_ristretto255_point_decompress failed to decode point:" + "\n\t\t" FD_LOG_HEX16_FMT " " FD_LOG_HEX16_FMT, + FD_LOG_HEX16_FMT_ARGS( s ), FD_LOG_HEX16_FMT_ARGS( s+16 ) )); + } + } + + /* Reject bad encodings */ + for( uchar const * s = *bad_encodings; + s < (uchar const *)bad_encodings + sizeof bad_encodings; + s += 32 ) { + fd_ristretto255_point_t h[1]; + if( FD_UNLIKELY( !!fd_ristretto255_point_decompress( h, s ) ) ) { + FD_LOG_ERR(( "FAIL" + "\n\tBad encoding was not rejected:" + "\n\t\t" FD_LOG_HEX16_FMT " " FD_LOG_HEX16_FMT, + FD_LOG_HEX16_FMT_ARGS( s ), FD_LOG_HEX16_FMT_ARGS( s+16 ) )); + } + } + + /* Benchmarks */ + fd_memcpy( s, base_point_multiples[5], 32 ); + ulong iter = 100000UL; + long dt = fd_log_wallclock(); + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( s ); FD_COMPILER_FORGET( h ); fd_ristretto255_point_decompress( h, s ); } + dt = fd_log_wallclock() - dt; + log_bench( "fd_ristretto255_point_decompress", iter, dt ); +} + +void +test_point_compress( FD_FN_UNUSED fd_rng_t * rng ) { + uchar _s[32]; uchar * s = _s; + fd_ristretto255_point_t _h[1]; fd_ristretto255_point_t * h = _h; + + /* Decompress & compress base point multiples */ + for( uchar const * s = base_point_multiples[0]; + s < (uchar const *)base_point_multiples + sizeof base_point_multiples; + s += 32 ) { + fd_ristretto255_point_t h[1]; + if( FD_UNLIKELY( !fd_ristretto255_point_decompress( h, s ) ) ) { + FD_LOG_ERR(( "FAIL" + "\n\tfd_ristretto255_point_decompress failed to decode point:" + "\n\t\t" FD_LOG_HEX16_FMT " " FD_LOG_HEX16_FMT, + FD_LOG_HEX16_FMT_ARGS( s ), FD_LOG_HEX16_FMT_ARGS( s+16 ) )); + } + uchar t[32]; + fd_ristretto255_point_compress( t, h ); + if( FD_UNLIKELY( !!memcmp( s, t, 32 ) ) ) { + FD_LOG_ERR(( "FAIL" + "\n\tfd_ristretto255_point_compress returned incorrect result:" + "\n\t\tExpected" FD_LOG_HEX16_FMT " " FD_LOG_HEX16_FMT + "\n\t\tGot " FD_LOG_HEX16_FMT " " FD_LOG_HEX16_FMT, + FD_LOG_HEX16_FMT_ARGS( s ), FD_LOG_HEX16_FMT_ARGS( s+16 ), + FD_LOG_HEX16_FMT_ARGS( t ), FD_LOG_HEX16_FMT_ARGS( t+16 ) )); + } + + /* Multiply all coordinates by const c */ + fd_f25519_t _c[1]; fd_f25519_t * c = _c; + fd_f25519_rng_unsafe(c, rng); + fd_f25519_t _x[1], _y[1], _z[1], _t[1]; + fd_ed25519_point_to( _x, _y, _z, _t, h ); + fd_f25519_mul( _x, _x, c ); + fd_f25519_mul( _y, _y, c ); + fd_f25519_mul( _z, _z, c ); + fd_f25519_mul( _t, _t, c ); + fd_ed25519_point_from( h, _x, _y, _z, _t ); + + fd_ristretto255_point_compress( t, h ); + if( FD_UNLIKELY( !!memcmp( s, t, 32 ) ) ) { + FD_LOG_ERR(( "FAIL" + "\n\tfd_ristretto255_point_compress returned incorrect result:" + "\n\t\tExpected" FD_LOG_HEX16_FMT " " FD_LOG_HEX16_FMT + "\n\t\tGot " FD_LOG_HEX16_FMT " " FD_LOG_HEX16_FMT, + FD_LOG_HEX16_FMT_ARGS( s ), FD_LOG_HEX16_FMT_ARGS( s+16 ), + FD_LOG_HEX16_FMT_ARGS( t ), FD_LOG_HEX16_FMT_ARGS( t+16 ) )); + } + } + + /* Benchmarks */ + fd_ristretto255_point_decompress( h, base_point_multiples[5] ); + ulong iter = 100000UL; + long dt = fd_log_wallclock(); + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( s ); FD_COMPILER_FORGET( h ); fd_ristretto255_point_compress( s, h ); } + dt = fd_log_wallclock() - dt; + log_bench( "fd_ristretto255_point_compress", iter, dt ); +} + +void +test_hash_to_curve( FD_FN_UNUSED fd_rng_t * rng ) { + uchar _s[64]; uchar * s = _s; + uchar _e[32]; uchar * e = _e; + fd_ristretto255_point_t _h[1]; fd_ristretto255_point_t * h = _h; + fd_ristretto255_point_t _g[1]; fd_ristretto255_point_t * g = _g; + + /* sha512("Ristretto is traditionally a short shot of espresso coffee") */ + fd_hex_decode( s, "5d1be09e3d0c82fc538112490e35701979d99e06ca3e2b5b54bffe8b4dc772c14d98b696a1bbfb5ca32c436cc61c16563790306c79eaca7705668b47dffe5bb6", 64 ); + fd_hex_decode( e, "3066f82a1a747d45120d1740f14358531a8f04bbffe6a819f86dfe50f44a0a46", 32 ); + fd_ristretto255_point_decompress( g, e ); + + fd_ristretto255_hash_to_curve( h, s ); + FD_TEST( fd_ristretto255_point_eq( h, g ) ); + FD_TEST( !fd_ed25519_point_eq( h, g ) ); + + uchar t[32]; + fd_ristretto255_point_compress( t, h ); + if( FD_UNLIKELY( !!memcmp( e, t, 32 ) ) ) { + FD_LOG_ERR(( "FAIL" + "\n\tfd_ristretto255_hash_to_curve returned incorrect result:" + "\n\t\tExpected" FD_LOG_HEX16_FMT " " FD_LOG_HEX16_FMT + "\n\t\tGot " FD_LOG_HEX16_FMT " " FD_LOG_HEX16_FMT, + FD_LOG_HEX16_FMT_ARGS( e ), FD_LOG_HEX16_FMT_ARGS( e+16 ), + FD_LOG_HEX16_FMT_ARGS( t ), FD_LOG_HEX16_FMT_ARGS( t+16 ) )); + } + + /* Benchmarks */ + ulong iter = 10000UL; + + { + long dt = fd_log_wallclock(); + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( s ); FD_COMPILER_FORGET( h ); fd_ristretto255_hash_to_curve( h, s ); } + dt = fd_log_wallclock() - dt; + log_bench( "fd_ristretto255_hash_to_curve", iter, dt ); + } + + { + long dt = fd_log_wallclock(); + for( ulong rem=iter; rem; rem-- ) { FD_COMPILER_FORGET( s ); FD_COMPILER_FORGET( h ); fd_ristretto255_map_to_curve( h, s ); } + dt = fd_log_wallclock() - dt; + log_bench( "fd_ristretto255_map_to_curve", iter, dt ); + } +} + +static void +test_point_add_sub( FD_FN_UNUSED fd_rng_t * rng ) { + fd_ristretto255_point_t _f[1]; fd_ristretto255_point_t * f = _f; + fd_ristretto255_point_t _g[1]; fd_ristretto255_point_t * g = _g; + fd_ristretto255_point_t _h[1]; fd_ristretto255_point_t * h = _h; + + /* Correctness */ + fd_ristretto255_point_t _t[1]; fd_ristretto255_point_t * t = _t; + + fd_ristretto255_point_decompress( t, base_point_multiples[0] ); + fd_ristretto255_point_decompress( f, base_point_multiples[5] ); + fd_ristretto255_point_add( h, t, f ); /* P = P + 0 */ + fd_ristretto255_point_add( g, f, t ); /* P = 0 + P */ + FD_TEST( fd_ristretto255_point_eq( h, f ) ); + fd_ristretto255_point_add( h, t, f ); /* P = 0 + P */ + FD_TEST( fd_ristretto255_point_eq( h, f ) ); + fd_ristretto255_point_sub(h, f, t); /* P = P - 0 */ + FD_TEST( fd_ristretto255_point_eq( h, f ) ); + + fd_ristretto255_point_sub( g, t, f ); /* 0 - P */ + fd_ristretto255_point_add( h, f, g ); /* 0 = P + (-P) */ + FD_TEST( fd_ristretto255_point_eq( h, t ) ); + fd_ristretto255_point_add( h, g, f ); /* 0 = (-P) + P */ + FD_TEST( fd_ristretto255_point_eq( h, t ) ); + + for ( int i=1; i<=15; i++ ) { + for ( int j=1; i+j<=15; j++ ) { + fd_ristretto255_point_decompress( f, base_point_multiples[i] ); + fd_ristretto255_point_decompress( g, base_point_multiples[j] ); + fd_ristretto255_point_decompress( t, base_point_multiples[i+j] ); + + fd_ristretto255_point_add( h, f, g ); /* (i+j)P = iP + jP */ + FD_TEST( fd_ristretto255_point_eq( h, t ) ); + + fd_ristretto255_point_sub( h, t, g ); /* iP = (i+j)P - jP */ + FD_TEST( fd_ristretto255_point_eq( h, f ) ); + } + } + + /* Benchmarks */ + ulong iter = 1000000UL; + + { + long dt = fd_log_wallclock(); + for( ulong rem=iter; rem; rem-- ) { + FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( g ); FD_COMPILER_FORGET( h ); + fd_ristretto255_point_add( h, f, g ); + } + dt = fd_log_wallclock() - dt; + log_bench( "fd_ristretto255_point_add", iter, dt ); + } + + { + long dt = fd_log_wallclock(); + for( ulong rem=iter; rem; rem-- ) { + FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( g ); FD_COMPILER_FORGET( h ); + fd_ristretto255_point_sub( h, f, g ); + } + dt = fd_log_wallclock() - dt; + log_bench( "fd_ristretto255_point_sub", iter, dt ); + } +} + +static void +test_scalar_validate( FD_FN_UNUSED fd_rng_t * rng ) { + uchar _a[32]; uchar * a = _a; + + // invalid + + // curve25519 r reduces to 0, hence invalid + fd_hex_decode( a, "EDD3F55C1A631258D69CF7A2DEF9DE1400000000000000000000000000000010", 32 ); + FD_TEST( fd_curve25519_scalar_validate( a )==NULL ); + + fd_hex_decode( a, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 32 ); + FD_TEST( fd_curve25519_scalar_validate( a )==NULL ); + + // valid + + fd_hex_decode( a, "0000000000000000000000000000000000000000000000000000000000000000", 32 ); + FD_TEST( fd_curve25519_scalar_validate( a )==a ); + + fd_hex_decode( a, "0100000000000000000000000000000000000000000000000000000000000000", 32 ); + FD_TEST( fd_curve25519_scalar_validate( a )==a ); + + // r-1 + fd_hex_decode( a, "ECD3F55C1A631258D69CF7A2DEF9DE1400000000000000000000000000000010", 32 ); + FD_TEST( fd_curve25519_scalar_validate( a )==a ); + + /* Benchmarks */ + ulong iter = 1000000UL; + + { + long dt = fd_log_wallclock(); + for( ulong rem=iter; rem; rem-- ) { + FD_COMPILER_FORGET( a ); + fd_ristretto255_scalar_validate( a ); + } + dt = fd_log_wallclock() - dt; + log_bench( "fd_ristretto255_scalar_validate", iter, dt ); + } +} + +static void +test_point_scalarmult( FD_FN_UNUSED fd_rng_t * rng ) { + fd_ristretto255_point_t _f[1]; fd_ristretto255_point_t * f = _f; + fd_ristretto255_point_t _h[1]; fd_ristretto255_point_t * h = _h; + uchar _a[32]; uchar * a = _a; + + /* Correctness */ + fd_ristretto255_point_t _t[1]; fd_ristretto255_point_t * t = _t; + fd_ristretto255_point_decompress( f, base_point_multiples[1] ); + fd_ristretto255_point_decompress( t, base_point_multiples[13] ); + memset( a, 0, 32 ); + a[0] = 13; + FD_TEST( fd_ristretto255_scalar_mul( h, a, f )==h ); + FD_TEST( fd_ristretto255_point_eq( h, t ) ); + + fd_hex_decode( a, "ECD3F55C1A631258D69CF7A2DEF9DE1400000000000000000000000000000010", 32 ); + fd_ristretto255_point_decompress( t, base_point_multiples[0] ); + fd_ristretto255_point_sub( t, t, f ); // -P + FD_TEST( fd_ristretto255_scalar_mul( h, a, f )==h ); + FD_TEST( fd_ristretto255_point_eq( h, t ) ); + + /* Benchmarks */ + ulong iter = 10000UL; + + { + long dt = fd_log_wallclock(); + for( ulong rem=iter; rem; rem-- ) { + FD_COMPILER_FORGET( f ); FD_COMPILER_FORGET( a ); FD_COMPILER_FORGET( h ); + fd_ristretto255_scalar_mul( h, a, f ); + } + dt = fd_log_wallclock() - dt; + log_bench( "fd_ristretto255_scalar_mul", iter, dt ); + } +} + +FD_FN_UNUSED static uchar * +fd_rng_b256( fd_rng_t * rng, + uchar * r ) { + ulong * u = (ulong *)r; + u[0] = fd_rng_ulong( rng ); u[1] = fd_rng_ulong( rng ); u[2] = fd_rng_ulong( rng ); u[3] = fd_rng_ulong( rng ); + return r; +} + +static void FD_FN_NO_ASAN +test_multiscalar_mul( FD_FN_UNUSED fd_rng_t * rng ) { + fd_ristretto255_point_t _h[1]; fd_ristretto255_point_t * h = _h; + + /* Correctness */ +#define MSM_N 126 + { + fd_ristretto255_point_t _f[MSM_N]; fd_ristretto255_point_t * f = _f; + uchar _a[MSM_N][32]; uchar * a = (uchar *)_a; + + for( ulong i=0; icomment; + proof++ ) { + + int actual = ( fd_x25519_exchange( shared, proof->prv, proof->pub ) + != NULL ); + FD_TEST_CUSTOM( actual == proof->ok, fd_cstr_printf( cstr, 128UL, NULL, "fd_x25519_exchange_wycheproof id=%d", proof->tc_id ) ); + if (proof->ok) { + FD_TEST_CUSTOM( fd_memeq( shared, proof->shared, 32 ), fd_cstr_printf( cstr, 128UL, NULL, "fd_x25519_exchange_wycheproof id=%d (shared)", proof->tc_id ) ); + } + } + FD_LOG_NOTICE(( "fd_x25519_exchange_wycheproof: ok" )); +} + int main( int argc, char ** argv ) { fd_boot( &argc, &argv ); fd_rng_t _rng[1]; fd_rng_t * rng = fd_rng_join( fd_rng_new( _rng, 0U, 0UL ) ); + test_wycheproofs(); + for( fd_x25519_test_vector_t const * test = test_x25519_vector; (ulong)test < ((ulong)test_x25519_vector + sizeof(test_x25519_vector)); test++ ) { diff --git a/src/ballet/ed25519/test_x25519_wycheproof.c b/src/ballet/ed25519/test_x25519_wycheproof.c new file mode 100644 index 0000000000..5d46c404ca --- /dev/null +++ b/src/ballet/ed25519/test_x25519_wycheproof.c @@ -0,0 +1,3127 @@ +/* Code generated by gen_wycheproofs.py. DO NOT EDIT. */ +/* Generated at 2024-03-07T22:55:49.790538+00:00 */ + +#include "../fd_ballet_base.h" + +struct fd_x25519_verify_wycheproof { + char const * comment; + uchar shared[32]; + uchar prv[32]; + uchar pub[32]; + uint tc_id; + int ok; +}; + +typedef struct fd_x25519_verify_wycheproof fd_x25519_verify_wycheproof_t; + +static fd_x25519_verify_wycheproof_t const x25519_verify_wycheproofs[] = { + { .tc_id = 1, + .comment = "normal case", + .shared = "\x43\x6a\x2c\x04\x0c\xf4\x5f\xea\x9b\x29\xa0\xcb\x81\xb1\xf4\x14\x58\xf8\x63\xd0\xd6\x1b\x45\x3d\x0a\x98\x27\x20\xd6\xd6\x13\x20", + .prv = "\xc8\xa9\xd5\xa9\x10\x91\xad\x85\x1c\x66\x8b\x07\x36\xc1\xc9\xa0\x29\x36\xc0\xd3\xad\x62\x67\x08\x58\x08\x80\x47\xba\x05\x74\x75", + .pub = "\x50\x4a\x36\x99\x9f\x48\x9c\xd2\xfd\xbc\x08\xba\xff\x3d\x88\xfa\x00\x56\x9b\xa9\x86\xcb\xa2\x25\x48\xff\xde\x80\xf9\x80\x68\x29", + .ok = 1 }, + { .tc_id = 2, + .comment = "public key on twist", + .shared = "\x27\x9d\xf6\x7a\x7c\x46\x11\xdb\x47\x08\xa0\xe8\x28\x2b\x19\x5e\x5a\xc0\xed\x6f\x4b\x2f\x29\x2c\x6f\xbd\x0a\xca\xc3\x0d\x13\x32", + .prv = "\xd8\x5d\x8c\x06\x1a\x50\x80\x4a\xc4\x88\xad\x77\x4a\xc7\x16\xc3\xf5\xba\x71\x4b\x27\x12\xe0\x48\x49\x13\x79\xa5\x00\x21\x19\x58", + .pub = "\x63\xaa\x40\xc6\xe3\x83\x46\xc5\xca\xf2\x3a\x6d\xf0\xa5\xe6\xc8\x08\x89\xa0\x86\x47\xe5\x51\xb3\x56\x34\x49\xbe\xfc\xfc\x97\x33", + .ok = 1 }, + { .tc_id = 3, + .comment = "public key on twist", + .shared = "\x4b\xc7\xe0\x1e\x7d\x83\xd6\xcf\x67\x63\x2b\xf9\x00\x33\x48\x7a\x5f\xc2\x9e\xba\x53\x28\x89\x0e\xa7\xb1\x02\x6d\x23\xb9\xa4\x5f", + .prv = "\xc8\xb4\x5b\xfd\x32\xe5\x53\x25\xd9\xfd\x64\x8c\xb3\x02\x84\x80\x39\x00\x0b\x39\x0e\x44\xd5\x21\xe5\x8a\xab\x3b\x29\xa6\x96\x4b", + .pub = "\x0f\x83\xc3\x6f\xde\xd9\xd3\x2f\xad\xf4\xef\xa3\xae\x93\xa9\x0b\xb5\xcf\xa6\x68\x93\xbc\x41\x2c\x43\xfa\x72\x87\xdb\xb9\x97\x79", + .ok = 1 }, + { .tc_id = 4, + .comment = "public key on twist", + .shared = "\x11\x9d\x37\xed\x4b\x10\x9c\xbd\x64\x18\xb1\xf2\x8d\xea\x83\xc8\x36\xc8\x44\x71\x5c\xdf\x98\xa3\xa8\xc3\x62\x19\x1d\xeb\xd5\x14", + .prv = "\xf8\x76\xe3\x4b\xcb\xe1\xf4\x7f\xbc\x0f\xdd\xfd\x7c\x1e\x1a\xa5\x3d\x57\xbf\xe0\xf6\x6d\x24\x30\x67\xb4\x24\xbb\x62\x10\xbe\x51", + .pub = "\x0b\x82\x11\xa2\xb6\x04\x90\x97\xf6\x87\x1c\x6c\x05\x2d\x3c\x5f\xc1\xba\x17\xda\x9e\x32\xae\x45\x84\x03\xb0\x5b\xb2\x83\x09\x2a", + .ok = 1 }, + { .tc_id = 5, + .comment = "public key on twist", + .shared = "\xcc\x48\x73\xae\xd3\xfc\xee\x4b\x3a\xae\xa7\xf0\xd2\x07\x16\xb4\x27\x63\x59\x08\x1f\x63\x4b\x7b\xea\x4b\x70\x5b\xfc\x8a\x4d\x3e", + .prv = "\x00\x6a\xc1\xf3\xa6\x53\xa4\xcd\xb1\xd3\x7b\xba\x94\x73\x8f\x8b\x95\x7a\x57\xbe\xb2\x4d\x64\x6e\x99\x4d\xc2\x9a\x27\x6a\xad\x45", + .pub = "\x34\x3a\xc2\x0a\x3b\x9c\x6a\x27\xb1\x00\x81\x76\x50\x9a\xd3\x07\x35\x85\x6e\xc1\xc8\xd8\xfc\xae\x13\x91\x2d\x08\xd1\x52\xf4\x6c", + .ok = 1 }, + { .tc_id = 6, + .comment = "public key on twist", + .shared = "\xb6\xf8\xe2\xfc\xb1\xaf\xfc\x79\xe2\xff\x79\x83\x19\xb2\x70\x11\x39\xb9\x5a\xd6\xdd\x07\xf0\x5c\xba\xc7\x8b\xd8\x3e\xdf\xd9\x2e", + .prv = "\x08\xda\x77\xb2\x6d\x06\xdf\xf9\xd9\xf7\xfd\x4c\x5b\x37\x69\xf8\xcd\xd5\xb3\x05\x16\xa5\xab\x80\x6b\xe3\x24\xff\x3e\xb6\x9e\x60", + .pub = "\xfa\x69\x5f\xc7\xbe\x8d\x1b\xe5\xbf\x70\x48\x98\xf3\x88\xc4\x52\xba\xfd\xd3\xb8\xea\xe8\x05\xf8\x68\x1a\x8d\x15\xc2\xd4\xe1\x42", + .ok = 1 }, + { .tc_id = 7, + .comment = "public key on twist", + .shared = "\xb8\x7a\x17\x22\xcc\x6c\x1e\x2f\xee\xcb\x54\xe9\x7a\xbd\x5a\x22\xac\xc2\x76\x16\xf7\x8f\x6e\x31\x5f\xd2\xb7\x3d\x9f\x22\x1e\x57", + .prv = "\xd0\x3e\xdd\xe9\xf3\xe7\xb7\x99\x04\x5f\x9a\xc3\x79\x3d\x4a\x92\x77\xda\xde\xad\xc4\x1b\xec\x02\x90\xf8\x1f\x74\x4f\x73\x77\x5f", + .pub = "\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 8, + .comment = "public key on twist", + .shared = "\xa2\x9d\x8d\xad\x28\xd5\x90\xcd\x30\x17\xaa\x97\xa4\x76\x1f\x85\x1b\xf1\xd3\x67\x2b\x04\x2a\x42\x56\xa4\x58\x81\xe2\xad\x90\x35", + .prv = "\xe0\x9d\x57\xa9\x14\xe3\xc2\x90\x36\xfd\x9a\x44\x2b\xa5\x26\xb5\xcd\xcd\xf2\x82\x16\x15\x3e\x63\x6c\x10\x67\x7a\xca\xb6\xbd\x6a", + .pub = "\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 9, + .comment = "public key on twist", + .shared = "\xe7\x03\xbc\x8a\xa9\x4b\x7d\x87\xba\x34\xe2\x67\x83\x53\xd1\x2c\xda\xaa\x1a\x97\xb5\xca\x3e\x1b\x8c\x06\x0c\x46\x36\x08\x7f\x07", + .prv = "\xe0\xed\x78\xe6\xee\x02\xf0\x8b\xec\x1c\x15\xd6\x6f\xbb\xe5\xb8\x3f\xfc\x37\xea\x14\xe1\x51\x2c\xc1\xbd\x4b\x2e\xa6\xd8\x06\x6f", + .pub = "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 10, + .comment = "public key on twist", + .shared = "\xff\x5c\xf0\x41\xe9\x24\xdb\xe1\xa6\x4a\xc9\xbd\xba\x96\xbd\xcd\xfa\xf7\xd5\x9d\x91\xc7\xe3\x3e\x76\xed\x0e\x4c\x8c\x83\x64\x46", + .prv = "\xa8\xa1\xa2\xec\x9f\xa9\x91\x5a\xe7\xaa\xce\x6a\x37\xc6\x85\x91\xd3\x9e\x15\x99\x5c\x4e\xf5\xeb\xd3\x56\x1c\x02\xf7\x2d\xda\x41", + .pub = "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 11, + .comment = "public key on twist", + .shared = "\xa9\x2a\x96\xfa\x02\x99\x60\xf9\x53\x0e\x6f\xe3\x7e\x24\x29\xcd\x11\x3b\xe4\xd8\xf3\xf4\x43\x1f\x85\x46\xe6\xc7\x63\x51\x47\x5d", + .prv = "\xa8\xc9\xdf\x58\x20\xeb\x39\x9d\x47\x1d\xfa\x32\x15\xd9\x60\x55\xb3\xc7\xd0\xf4\xea\x49\xf8\xab\x02\x8d\x6a\x6e\x31\x94\x51\x7b", + .pub = "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 12, + .comment = "public key on twist", + .shared = "\x9f\x89\x54\x86\x81\x58\xec\x62\xb6\xb5\x86\xb8\xca\xe1\xd6\x7d\x1b\x9f\x4c\x03\xd5\xb3\xca\x03\x93\xce\xe7\x1a\xcc\xc9\xab\x65", + .prv = "\xd0\xd3\x1c\x49\x1c\xbd\x39\x27\x18\x59\xb4\xa6\x3a\x31\x68\x26\x50\x7b\x1d\xb8\xc7\x01\x70\x9f\xd0\xff\xe3\xeb\x21\xc4\x46\x7c", + .pub = "\xff\xff\xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 13, + .comment = "public key on twist", + .shared = "\x6c\xbf\x1d\xc9\xaf\x97\xbc\x14\x85\x13\xa1\x8b\xe4\xa2\x57\xde\x1a\x3b\x06\x55\x84\xdf\x94\xe8\xb4\x3c\x1a\xb8\x97\x20\xb1\x10", + .prv = "\xd0\x53\xe7\xbf\x19\x02\x61\x9c\xd6\x1c\x9c\x73\x9e\x09\xd5\x4c\x41\x47\xf4\x6d\x19\x07\x20\x96\x6f\x7d\xe1\xd9\xcf\xfb\xbd\x4e", + .pub = "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 14, + .comment = "public key on twist", + .shared = "\x38\x28\x4b\x70\x86\x09\x5a\x94\x06\x02\x8c\x1f\x80\x0c\x07\x1e\xa1\x06\x03\x9a\xd7\xa1\xd7\xf8\x2f\xe0\x09\x06\xfd\x90\x59\x4b", + .prv = "\xa0\x21\xd7\x50\x09\xa4\x59\x6e\x5a\x33\xf1\x29\x21\xc1\x0f\x36\x70\x93\x3b\xc8\x0d\xde\x3b\xba\x22\x88\x1b\x61\x20\x58\x21\x44", + .pub = "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 15, + .comment = "public key on twist", + .shared = "\xc7\x21\x04\x1d\xf0\x24\x40\x71\x79\x4a\x8d\xb0\x6b\x9f\x7e\xae\xec\x69\x0c\x25\x72\x65\x34\x36\x66\xf4\x41\x6f\x41\x66\x84\x0f", + .prv = "\xa8\x9c\x66\x87\xf9\x9b\xd5\x69\xa0\x1f\xd8\xbd\x43\x82\x36\x16\x0d\x15\xce\x2c\x57\xc1\xd7\x1e\xba\xa3\xf2\xda\x88\x23\x38\x63", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 16, + .comment = "public key on twist", + .shared = "\x25\xff\x9a\x66\x31\xb1\x43\xdb\xdb\xdc\x20\x7b\x38\xe3\x8f\x83\x2a\xe0\x79\xa5\x2a\x61\x8c\x53\x43\x22\xe7\x73\x45\xfd\x90\x49", + .prv = "\x68\x96\x4b\xca\x51\x46\x5b\xf0\xf5\xba\x52\x4b\x14\x82\xce\xff\x0e\x96\x0a\x1e\xd9\xf4\x8d\xcc\x30\xf1\x60\x8d\x0e\x50\x1a\x50", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 17, + .comment = "public key on twist", + .shared = "\xf2\x94\xe7\x92\x2c\x6c\xea\x58\x7a\xef\xe7\x29\x11\x63\x0d\x50\xf2\x45\x6a\x2b\xa7\xf2\x12\x07\xd5\x7f\x1e\xcc\xe0\x4f\x62\x13", + .prv = "\xa8\xe5\x6b\xb1\x3a\x9f\x2b\x33\xb8\xe6\x75\x0b\x4a\x6e\x66\x21\xdc\x26\xae\x8c\x5c\x62\x4a\x09\x92\xc8\xf0\xd5\xb9\x10\xf1\x70", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 18, + .comment = "public key on twist", + .shared = "\xff\x47\x15\xbd\x8c\xf8\x47\xb7\x7c\x24\x4c\xe2\xd9\xb0\x08\xb1\x9e\xfa\xa8\xe8\x45\xfe\xb8\x5c\xe4\x88\x9b\x5b\x2c\x6a\x4b\x4d", + .prv = "\xe0\x45\xf5\x5c\x15\x94\x51\xe9\x78\x14\xd7\x47\x05\x0f\xd7\x76\x9b\xd4\x78\x43\x4a\x01\x87\x6a\x56\xe5\x53\xf6\x63\x84\xa7\x4c", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 19, + .comment = "public key on twist", + .shared = "\x61\xea\xce\x52\xda\x5f\x5e\xce\xfa\xfa\x4f\x19\x9b\x07\x7f\xf6\x4f\x2e\x3d\x2a\x6e\xce\x6f\x8e\xc0\x49\x78\x26\xb2\x12\xef\x5f", + .prv = "\x10\x5d\x62\x1e\x1e\xf3\x39\xc3\xd9\x92\x45\xcf\xb7\x7c\xd3\xa5\xbd\x0c\x44\x27\xa0\xe4\xd8\x75\x2c\x3b\x51\xf0\x45\x88\x9b\x4f", + .pub = "\xff\xff\xff\x03\x00\x00\xf8\xff\xff\x1f\x00\x00\xc0\xff\xff\xff\x00\x00\x00\xfe\xff\xff\x07\x00\x00\xf0\xff\xff\x3f\x00\x00\x00", + .ok = 1 }, + { .tc_id = 20, + .comment = "public key on twist", + .shared = "\xff\x1b\x50\x9a\x0a\x1a\x54\x72\x60\x86\xf1\xe1\xc0\xac\xf0\x40\xab\x46\x3a\x2a\x54\x2e\x5d\x54\xe9\x2c\x6d\xf8\x12\x6c\xf6\x36", + .prv = "\xd8\x8a\x44\x1e\x70\x6f\x60\x6a\xe7\xf6\x30\xf8\xb2\x1f\x3c\x25\x54\x73\x9e\x3e\x54\x9f\x80\x41\x18\xc0\x37\x71\xf6\x08\x01\x7b", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00", + .ok = 1 }, + { .tc_id = 21, + .comment = "public key on twist", + .shared = "\xf1\x34\xe6\x26\x7b\xf9\x39\x03\x08\x51\x17\xb9\x99\x32\xcc\x0c\x7b\xa2\x6f\x25\xfc\xa1\x21\x02\xa2\x6d\x75\x33\xd9\xc4\x27\x2a", + .prv = "\x80\xbb\xad\x16\x82\x22\x27\x62\x00\xaa\xfd\x36\xf7\xf2\x5f\xdc\x02\x56\x32\xd8\xbf\x9f\x63\x54\xbb\x76\x2e\x06\xfb\x63\xe2\x50", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", + .ok = 1 }, + { .tc_id = 22, + .comment = "public key on twist", + .shared = "\x74\xbf\xc1\x5e\x55\x97\xe9\xf5\x19\x3f\x94\x1e\x10\xa5\xc0\x08\xfc\x89\xf0\x51\x39\x27\x23\x88\x6a\x4a\x8f\xe5\x09\x3a\x73\x54", + .prv = "\x68\xe1\x34\x09\x2e\x94\xe6\x22\xc8\xa0\xcd\x18\xaf\xf5\x5b\xe2\x3d\xab\xd9\x94\xeb\xde\xe9\x82\xd9\x06\x01\xf6\xf0\xf4\xb3\x69", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f", + .ok = 1 }, + { .tc_id = 23, + .comment = "public key on twist", + .shared = "\x0d\x41\xa5\xb3\xaf\x77\x0b\xf2\xfc\xd3\x4f\xf7\x97\x22\x43\xa0\xe2\xcf\x4d\x34\xf2\x04\x6a\x14\x45\x81\xae\x1e\xc6\x8d\xf0\x3b", + .prv = "\xe8\xe4\x3f\xc1\xeb\xac\x0b\xbc\x9b\x99\xc8\x03\x5e\xe1\xac\x59\xb9\x0f\x19\xa1\x6c\x42\xc0\xb9\x0f\x96\xad\xfc\xc5\xfd\xee\x78", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", + .ok = 1 }, + { .tc_id = 24, + .comment = "public key on twist", + .shared = "\x58\x94\xe0\x96\x35\x83\xae\x14\xa0\xb8\x04\x20\x89\x41\x67\xf4\xb7\x59\xc8\xd2\xeb\x9b\x69\xcb\x67\x55\x43\xf6\x65\x10\xf6\x46", + .prv = "\x18\xbf\xfb\x16\xf9\x26\x80\xa9\xe2\x67\x47\x3e\x43\xc4\x64\x47\x6d\x53\x72\xdd\xd1\xf6\x64\xf3\xd0\x67\x8e\xfe\x7c\x98\xbc\x79", + .pub = "\x00\x00\x00\xfc\xff\xff\x07\x00\x00\xe0\xff\xff\x3f\x00\x00\x00\xff\xff\xff\x01\x00\x00\xf8\xff\xff\x0f\x00\x00\xc0\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 25, + .comment = "public key on twist", + .shared = "\xf8\x62\x4d\x6e\x35\xe6\xc5\x48\xac\x47\x83\x2f\x2e\x5d\x15\x1a\x8e\x53\xb9\x29\x03\x63\xb2\x8d\x2a\xb8\xd8\x4a\xb7\xcb\x6a\x72", + .prv = "\x30\x03\x05\xeb\x00\x2b\xf8\x6c\x71\xfe\x9c\x0b\x31\x19\x93\x72\x7b\x9d\xc6\x18\xd0\xce\x72\x51\xd0\xdf\xd8\x55\x2d\x17\x90\x5d", + .pub = "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 26, + .comment = "public key on twist", + .shared = "\xbf\xe1\x83\xba\x3d\x41\x57\xa7\xb5\x3e\xf1\x78\x61\x3d\xb6\x19\xe2\x78\x00\xf8\x53\x59\xc0\xb3\x9a\x9f\xd6\xe3\x21\x52\xc2\x08", + .prv = "\x80\xda\x9f\x02\x84\x22\x47\xd4\xad\xe5\xdd\xba\xc5\x1d\xbc\xe5\x5e\xa7\xdc\xa2\x84\x4e\x7f\x97\xab\x89\x87\xce\x7f\xd8\xbc\x71", + .pub = "\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 27, + .comment = "public key on twist", + .shared = "\xbc\xa4\xa0\x72\x4f\x5c\x1f\xeb\x18\x40\x78\x44\x8c\x89\x8c\x86\x20\xe7\xca\xf8\x1f\x64\xcc\xa7\x46\xf5\x57\xdf\xf2\x49\x88\x59", + .prv = "\x80\x6e\x7f\x26\xca\x32\x46\xde\x81\x82\x94\x6c\xbe\xd0\x9f\x52\xb9\x5d\xa6\x26\xc8\x23\xc7\xb5\x04\x50\x00\x1a\x47\xb7\xb2\x52", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 28, + .comment = "public key on twist", + .shared = "\xb3\x41\x8a\x52\x46\x4c\x15\xab\x0c\xac\xbb\xd4\x38\x87\xa1\x19\x92\x06\xd5\x92\x29\xce\xd4\x92\x02\x30\x06\x38\xd7\xa4\x0f\x04", + .prv = "\x58\x35\x4f\xd6\x4b\xc0\x22\xcb\xa3\xa7\x1b\x2a\xe6\x42\x81\xe4\xea\x7b\xf6\xd6\x5f\xdb\xae\xad\x14\x40\xee\xb1\x86\x04\xfe\x62", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 29, + .comment = "public key on twist", + .shared = "\xfc\xde\x6e\x0a\x3d\x5f\xd5\xb6\x3f\x10\xc2\xd3\xaa\xd4\xef\xa0\x51\x96\xf2\x6b\xc0\xcb\x26\xfd\x6d\x9d\x3b\xd0\x15\xea\xa7\x4f", + .prv = "\xf0\x01\x9c\xf0\x51\x59\x79\x4c\xc8\x05\x2b\x00\xc2\xe7\x5b\x7f\x46\xfb\x66\x93\xc4\xb3\x8c\x02\xb1\x2a\x4f\xe2\x72\xe8\x55\x6a", + .pub = "\xed\xff\xff\xff\xff\xff\xef\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 30, + .comment = "public key on twist", + .shared = "\x7d\x62\xf1\x89\x44\x4c\x62\x31\xa4\x8a\xfa\xb1\x0a\x0a\xf2\xee\xe4\xa5\x2e\x43\x1e\xa0\x5f\xf7\x81\xd6\x16\xaf\x21\x14\x67\x2f", + .prv = "\xd0\xfc\xa6\x4c\xc5\xf3\xa0\xc8\xe7\x5c\x82\x4e\x8b\x09\xd1\x61\x5a\xa7\x9a\xeb\xa1\x39\xbb\x73\x02\xe2\xbb\x2f\xcb\xe5\x4b\x40", + .pub = "\xed\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 31, + .comment = "public key on twist", + .shared = "\x07\xba\x5f\xcb\xda\x21\xa9\xa1\x78\x45\xc4\x01\x49\x2b\x10\xe6\xde\x0a\x16\x8d\x5c\x94\xb6\x06\x69\x4c\x11\xba\xc3\x9b\xea\x41", + .prv = "\xd0\x24\x56\xe4\x56\x91\x1d\x3c\x6c\xd0\x54\x93\x31\x99\x80\x77\x32\xdf\xdc\x95\x86\x42\xad\x1a\xeb\xe9\x00\xc7\x93\xbe\xf2\x4a", + .pub = "\xea\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 32, + .comment = "public key = 0", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x88\x22\x74\x94\x03\x8f\x2b\xb8\x11\xd4\x78\x05\xbc\xdf\x04\xa2\xac\x58\x5a\xda\x7f\x2f\x23\x38\x9b\xfd\x46\x58\xf9\xdd\xd4\x5e", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 33, + .comment = "public key = 1", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x48\x23\x2e\x89\x72\xb6\x1c\x7e\x61\x93\x0e\xb9\x45\x0b\x50\x70\xea\xe1\xc6\x70\x47\x56\x85\x54\x1f\x04\x76\x21\x7e\x48\x18\x4f", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 34, + .comment = "edge case public key", + .shared = "\x34\xb7\xe4\xfa\x53\x26\x44\x20\xd9\xf9\x43\xd1\x55\x13\x90\x23\x42\xb3\x86\xb1\x72\xa0\xb0\xb7\xc8\xb8\xf2\xdd\x3d\x66\x9f\x59", + .prv = "\xa8\x38\x6f\x7f\x16\xc5\x07\x31\xd6\x4f\x82\xe6\xa1\x70\xb1\x42\xa4\xe3\x4f\x31\xfd\x77\x68\xfc\xb8\x90\x29\x25\xe7\xd1\xe2\x5a", + .pub = "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 35, + .comment = "edge case public key", + .shared = "\x3a\xa2\x27\xa3\x07\x81\xed\x74\x6b\xd4\xb3\x36\x5e\x5f\x61\x46\x1b\x84\x4d\x09\x41\x0c\x70\x57\x0a\xbd\x0d\x75\x57\x4d\xfc\x77", + .prv = "\xd0\x5a\xbd\x08\xbf\x5e\x62\x53\x8c\xb9\xa5\xed\x10\x5d\xbe\xdd\x6d\xe3\x8d\x07\x94\x00\x85\x07\x2b\x43\x11\xc2\x67\x8e\xd7\x7d", + .pub = "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 36, + .comment = "edge case public key", + .shared = "\x97\x75\x5e\x7e\x77\x57\x89\x18\x4e\x17\x68\x47\xff\xbc\x2f\x8e\xf9\x87\x99\xd4\x6a\x70\x9c\x6a\x1c\x0f\xfd\x29\x08\x1d\x70\x39", + .prv = "\xf0\xb8\xb0\x99\x8c\x83\x94\x36\x4d\x7d\xcb\x25\xa3\x88\x5e\x57\x13\x74\xf9\x16\x15\x27\x54\x40\xdb\x06\x45\xee\x7c\x0a\x6f\x6b", + .pub = "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 37, + .comment = "edge case public key", + .shared = "\xc2\x12\xbf\xce\xb9\x1f\x85\x88\xd4\x6c\xd9\x46\x84\xc2\xc9\xee\x07\x34\x08\x77\x96\xdc\x0a\x9f\x34\x04\xff\x53\x40\x12\x12\x3d", + .prv = "\xd0\x0c\x35\xdc\x17\x46\x0f\x36\x0b\xfa\xe7\xb9\x46\x47\xbc\x4e\x9a\x7a\xd9\xce\x82\xab\xea\xdb\x50\xa2\xf1\xa0\x73\x6e\x21\x75", + .pub = "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 38, + .comment = "edge case public key", + .shared = "\x38\x8f\xaf\xfb\x4a\x85\xd0\x67\x02\xba\x3e\x47\x9c\x6b\x21\x6a\x8f\x33\xef\xce\x05\x42\x97\x9b\xf1\x29\xd8\x60\xf9\x3b\x9f\x02", + .prv = "\x38\x5f\xc8\x05\x89\x00\xa8\x50\x21\xdd\x92\x42\x5d\x2f\xb3\x9a\x62\xd4\xe2\x3a\xef\x1d\x51\x04\xc4\xc2\xd8\x87\x12\xd3\x9e\x4d", + .pub = "\xff\xff\xff\xff\xff\xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 39, + .comment = "edge case public key", + .shared = "\x87\x7f\xec\x06\x69\xd8\xc1\xa5\xc8\x66\x64\x14\x20\xee\xa9\xf6\xbd\x1d\xfd\x38\xd3\x6a\x5d\x55\xa8\xc0\xab\x2b\xf3\x10\x5c\x68", + .prv = "\xe0\x61\x4b\x0c\x40\x8a\xf2\x4d\x9d\x24\xc0\xa7\x2f\x91\x37\xfb\xd6\xb1\x6f\x02\xcc\xc9\x47\x97\xea\x39\x71\xab\x16\x07\x3a\x7f", + .pub = "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 40, + .comment = "edge case public key", + .shared = "\x18\x03\x73\xea\x0f\x23\xea\x73\x44\x7e\x5a\x90\x39\x8a\x97\xd4\x90\xb5\x41\xc6\x93\x20\x71\x9d\x7d\xd7\x33\xfb\x80\xd5\x48\x0f", + .prv = "\xf0\x04\xb8\xfd\x05\xd9\xff\xfd\x85\x3c\xdc\x6d\x22\x66\x38\x9b\x73\x7e\x8d\xfc\x29\x6a\xd0\x0b\x5a\x69\xb2\xa9\xdc\xf7\x29\x56", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 41, + .comment = "edge case public key", + .shared = "\x20\x81\x42\x35\x0a\xf9\x38\xab\xa5\x2a\x15\x6d\xce\x19\xd3\xc2\x7a\xb1\x62\x87\x29\x68\x3c\xf4\xef\x26\x67\xc3\xdc\x60\xcf\x38", + .prv = "\xe8\x0b\xf0\xe6\x09\xbf\x3b\x03\x5b\x55\x2f\x9d\xb7\xe9\xec\xbc\x44\xa0\x4b\x79\x10\xb1\x49\x36\x61\xa5\x24\xf4\x6c\x3c\x22\x77", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 42, + .comment = "edge case public key", + .shared = "\x1c\x32\x63\x89\x0f\x7a\x08\x1c\xef\xe5\x0c\xb9\x2a\xbd\x49\x65\x82\xd9\x0d\xcc\x2b\x9c\xb8\x58\xbd\x28\x68\x54\xaa\x6b\x0a\x7e", + .prv = "\x48\x89\x0e\x95\xd1\xb0\x3e\x60\x3b\xcb\x51\xfd\xf6\xf2\x96\xf1\xf1\xd1\x0f\x5d\xf1\x0e\x00\xb8\xa2\x5c\x98\x09\xf9\xaa\x1a\x54", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 43, + .comment = "edge case public key", + .shared = "\x56\x12\x8e\x78\xd7\xc6\x6f\x48\xe8\x63\xe7\xe6\xf2\xca\xa9\xc0\x98\x8f\xd4\x39\xde\xac\x11\xd4\xaa\xc9\x66\x40\x83\x08\x7f\x7a", + .prv = "\xa8\x06\xf1\xe3\x9b\x74\x26\x15\xa7\xdd\xe3\xb2\x94\x15\xed\x82\x7c\x68\xf0\x7d\x4a\x47\xa4\xd9\x59\x5c\x40\xc7\xfc\xcb\x92\x63", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 44, + .comment = "edge case public key", + .shared = "\x30\xec\xa5\x6f\x1f\x1c\x2e\x8f\xf7\x80\x13\x4e\x0e\x93\x82\xc5\x92\x7d\x30\x5d\x86\xb5\x34\x77\xe9\xae\xca\x79\xfc\x9c\xed\x05", + .prv = "\x98\x99\xd5\xe2\x65\xe1\xfc\x7c\x32\x34\x52\x27\xd6\x69\x9a\x6d\x6b\x55\x17\xcf\x33\xb4\x3a\xb1\x56\xee\x20\xdf\x48\x78\x79\x4e", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 45, + .comment = "edge case public key", + .shared = "\xcb\x21\xb7\xaa\x3f\x99\x2e\xcf\xc9\x29\x54\x84\x91\x54\xb3\xaf\x6b\x96\xa0\x1f\x17\xbf\x21\xc6\x12\xda\x74\x8d\xb3\x8e\xb3\x64", + .prv = "\xd8\x42\x31\x6e\x54\x76\xae\xae\xe8\x38\x20\x42\x58\xa0\x6f\x15\xde\x01\x1b\xa4\x0b\x99\x62\x70\x5e\x7f\x6e\x88\x9f\xe7\x1f\x40", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 46, + .comment = "edge case public key", + .shared = "\xc5\xca\xf8\xca\xbc\x36\xf0\x86\xde\xaf\x1a\xb2\x26\x43\x40\x98\xc2\x22\xab\xdf\x8a\xcd\x3c\xe7\x5c\x75\xe9\xde\xbb\x27\x15\x24", + .prv = "\xa0\x93\x3e\xe3\x05\x12\xb2\x5e\xe4\xe9\x00\xaa\xa0\x7f\x73\xe5\x07\xa8\xec\x53\xb5\x3a\x44\x62\x6e\x0f\x58\x9a\xf4\xe0\x35\x6c", + .pub = "\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 47, + .comment = "edge case public key", + .shared = "\x4d\x46\x05\x2c\x7e\xab\xba\x21\x5d\xf8\xd9\x13\x27\xe0\xc4\x61\x04\x21\xd2\xd9\x12\x9b\x14\x86\xd9\x14\xc7\x66\xcf\x10\x4c\x27", + .prv = "\x38\xd6\x40\x3e\x13\x77\x73\x4c\xdc\xe9\x82\x85\xe8\x20\xf2\x56\xad\x6b\x76\x9d\x6b\x56\x12\xbc\xf4\x2c\xf2\xb9\x79\x45\xc0\x73", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", + .ok = 1 }, + { .tc_id = 48, + .comment = "edge case public key", + .shared = "\xa0\xe0\x31\x51\x75\x78\x83\x62\xd4\xeb\xe0\x5e\x6a\xc7\x6d\x52\xd4\x01\x87\xbd\x68\x74\x92\xaf\x05\xab\xc7\xba\x7c\x70\x19\x7d", + .prv = "\x18\x21\x91\xb7\x05\x2e\x9c\xd6\x30\xef\x08\x00\x7f\xc6\xb4\x3b\xc7\x65\x29\x13\xbe\x67\x74\xe2\xfd\x27\x1b\x71\xb9\x62\xa6\x41", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03", + .ok = 1 }, + { .tc_id = 49, + .comment = "edge case public key", + .shared = "\x5e\x64\x92\x4b\x91\x87\x3b\x49\x9a\x54\x02\xfa\x64\x33\x7c\x65\xd4\xb2\xed\x54\xbe\xeb\x3f\xa5\xd7\x34\x78\x09\xe4\x3a\xef\x1c", + .prv = "\x10\x62\x21\xfe\x56\x94\xa7\x10\xd6\xe1\x47\x69\x6c\x5d\x5b\x93\xd6\x88\x7d\x58\x4f\x24\xf2\x28\x18\x2e\xbe\x1b\x1d\x2d\xb8\x5d", + .pub = "\xff\xff\xff\x0f\x00\x00\x00\xff\xff\xff\x0f\x00\x00\x00\xff\xff\xff\x0f\x00\x00\x00\xff\xff\xff\x0f\x00\x00\x00\xff\xff\xff\x0f", + .ok = 1 }, + { .tc_id = 50, + .comment = "edge case public key", + .shared = "\xc0\x52\x46\x6f\x97\x12\xd9\xec\x4e\xf4\x0f\x27\x6b\xb7\xe6\x44\x1c\x54\x34\xa8\x3e\xfd\x8e\x41\xd2\x0c\xe8\x3f\x2d\xbf\x59\x52", + .prv = "\xd0\x35\xde\x94\x56\x08\x0d\x85\xa9\x12\x08\x3b\x2e\x3c\x7d\xdd\x79\x71\xf7\x86\xf2\x5a\x96\xc5\xe7\x82\xcf\x6f\x43\x76\xe3\x62", + .pub = "\x00\x00\x00\xfc\xff\xff\x03\x00\x00\xe0\xff\xff\x1f\x00\x00\x00\xff\xff\xff\x00\x00\x00\xf8\xff\xff\x07\x00\x00\xc0\xff\xff\x3f", + .ok = 1 }, + { .tc_id = 51, + .comment = "edge case public key", + .shared = "\xd1\x51\xb9\x7c\xba\x9c\x25\xd4\x8e\x6d\x57\x63\x38\xb9\x7d\x53\xdd\x8b\x25\xe8\x4f\x65\xf7\xa2\x09\x1a\x17\x01\x63\x17\xc5\x53", + .prv = "\xa8\xf3\x73\x18\xa4\xc7\x60\xf3\xcb\x2d\x89\x48\x22\x91\x87\x35\x68\x3c\xb1\xed\xac\xf3\xe6\x66\xe1\x56\x94\x15\x49\x78\xfd\x6d", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f", + .ok = 1 }, + { .tc_id = 52, + .comment = "edge case public key", + .shared = "\x57\x16\x29\x6b\xaf\x2b\x1a\x6b\x9c\xd1\x5b\x23\xba\x86\x82\x97\x43\xd6\x0b\x03\x96\x56\x9b\xe1\xd5\xb4\x00\x14\xc0\x6b\x47\x7d", + .prv = "\x20\xd4\xd6\x24\xcf\x73\x2f\x82\x6f\x09\xe8\x08\x80\x17\x74\x2f\x13\xf2\xda\x98\xf4\xdc\xf4\xb4\x05\x19\xad\xb7\x90\xce\xbf\x64", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f", + .ok = 1 }, + { .tc_id = 53, + .comment = "edge case public key", + .shared = "\xdd\xbd\x56\xd0\x45\x4b\x79\x4c\x1d\x1d\x49\x23\xf0\x23\xa5\x1f\x6f\x34\xef\x3f\x48\x68\xe3\xd6\x65\x93\x07\xc6\x83\xc7\x41\x26", + .prv = "\xd8\x06\xa7\x35\xd1\x38\xef\xb3\xb4\x04\x68\x3c\x9d\x84\x48\x5a\xb4\xaf\x54\x0d\x0a\xf2\x53\xb5\x74\x32\x3d\x89\x13\x00\x3c\x66", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xff\x7f", + .ok = 1 }, + { .tc_id = 54, + .comment = "edge case public key", + .shared = "\x80\x39\xee\xbe\xd1\xa4\xf3\xb8\x11\xea\x92\x10\x2a\x62\x67\xd4\xda\x41\x23\x70\xf3\xf0\xd6\xb7\x0f\x1f\xaa\xa2\xe8\xd5\x23\x6d", + .prv = "\x18\x41\x98\xc6\x22\x81\x77\xf3\xef\x41\xdc\x9a\x34\x12\x58\xf8\x18\x1a\xe3\x65\xfe\x9e\xc9\x8d\x93\x63\x9b\x0b\xbe\xe1\x46\x7d", + .pub = "\xff\xff\xff\xff\xfe\xff\xff\x7f\xff\xff\xff\xff\xfe\xff\xff\x7f\xff\xff\xff\xff\xfe\xff\xff\x7f\xff\xff\xff\xff\xfe\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 55, + .comment = "edge case public key", + .shared = "\xb6\x95\x24\xe3\x95\x5d\xa2\x3d\xf6\xad\x1a\x7c\xd3\x85\x40\x04\x7f\x50\x86\x0f\x1c\x8f\xde\xd9\xb1\xfd\xfc\xc9\xe8\x12\xa0\x35", + .prv = "\xf0\xa4\x6a\x7f\x4b\x98\x9f\xe5\x15\xed\xc4\x41\x10\x93\x46\xba\x74\x6e\xc1\x51\x68\x96\xec\x5b\x7e\x4f\x4d\x90\x30\x64\xb4\x63", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 56, + .comment = "edge case public key", + .shared = "\xe4\x17\xbb\x88\x54\xf3\xb4\xf7\x0e\xce\xa5\x57\x45\x4c\x5c\x4e\x5f\x38\x04\xae\x53\x79\x60\xa8\x09\x7b\x9f\x33\x84\x10\xd7\x57", + .prv = "\x88\x18\x74\xfd\xa3\xa9\x9c\x0f\x02\x16\xe1\x17\x2f\xbd\x07\xab\x1c\x7d\xf7\x86\x02\xcc\x6b\x11\x26\x4e\x57\xaa\xb5\xf2\x3a\x49", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 57, + .comment = "edge case public key", + .shared = "\xaf\xca\x72\xbb\x8e\xf7\x27\xb6\x0c\x53\x0c\x93\x7a\x2f\x7d\x06\xbb\x39\xc3\x9b\x90\x3a\x7f\x44\x35\xb3\xf5\xd8\xfc\x1c\xa8\x10", + .prv = "\xb8\xd0\xf1\xae\x05\xa5\x07\x28\x31\x44\x31\x50\xe2\x02\xac\x6d\xb0\x03\x22\xcd\xf3\x41\xf4\x67\xe9\xf2\x96\x58\x8b\x04\xdb\x72", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 58, + .comment = "edge case public key", + .shared = "\x7e\x41\xc2\x88\x6f\xed\x4a\xf0\x4c\x16\x41\xa5\x9a\xf9\x38\x02\xf2\x5a\xf0\xf9\xcb\xa7\xa2\x9a\xe7\x2e\x2a\x92\xf3\x5a\x1e\x5a", + .prv = "\xc8\x61\x9b\xa9\x88\x85\x9d\xb7\xd6\xf2\x0f\xbf\x3f\xfb\x8b\x11\x34\x18\xcc\x27\x80\x65\xb4\xe8\xbb\x6d\x4e\x5b\x3e\x7c\xb5\x69", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 59, + .comment = "edge case public key", + .shared = "\xdd\x3a\xbd\x47\x46\xbf\x4f\x2a\x0d\x93\xc0\x2a\x7d\x19\xf7\x6d\x92\x1c\x09\x0d\x07\xe6\xea\x5a\xba\xe7\xf2\x88\x48\x35\x59\x47", + .prv = "\xf8\xd4\xca\x1f\x37\xa3\x0e\xc9\xac\xd6\xdb\xe5\xa6\xe1\x50\xe5\xbc\x44\x7d\x22\xb3\x55\xd8\x0b\xa0\x02\xc5\xb0\x5c\x26\x93\x5d", + .pub = "\xed\xff\xff\xff\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 60, + .comment = "edge case public key", + .shared = "\x8c\x27\xb3\xbf\xf8\xd3\xc1\xf6\xda\xf2\xd3\xb7\xb3\x47\x9c\xf9\xad\x20\x56\xe2\x00\x2b\xe2\x47\x99\x2a\x3b\x29\xde\x13\xa6\x25", + .prv = "\x88\x03\x7a\xc8\xe3\x3c\x72\xc2\xc5\x10\x37\xc7\xc8\xc5\x28\x8b\xba\x92\x65\xc8\x2f\xd8\xc3\x17\x96\xdd\x7e\xa5\xdf\x9a\xaa\x4a", + .pub = "\xed\xff\xff\xef\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 61, + .comment = "edge case public key", + .shared = "\x8e\x1d\x22\x07\xb4\x74\x32\xf8\x81\x67\x74\x48\xb9\xd4\x26\xa3\x0d\xe1\xa1\xf3\xfd\x38\xca\xd6\xf4\xb2\x3d\xbd\xfe\x8a\x29\x01", + .prv = "\x50\x34\xee\x7b\xf8\x3a\x13\xd9\x16\x7d\xf8\x6b\x06\x40\x29\x4f\x36\x20\xf4\xf4\xd9\x03\x0e\x5e\x29\x3f\x91\x90\x82\x4a\xe5\x62", + .pub = "\xed\xff\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 62, + .comment = "edge case public key", + .shared = "\x2c\xf6\x97\x4b\x0c\x07\x0e\x37\x07\xbf\x92\xe7\x21\xd3\xea\x9d\xe3\xdb\x6f\x61\xed\x81\x0e\x0a\x23\xd7\x2d\x43\x33\x65\xf6\x31", + .prv = "\x40\xbd\x4e\x1c\xaf\x39\xd9\xde\xf7\x66\x38\x23\x50\x2d\xad\x3e\x7d\x30\xeb\x6e\xb0\x1e\x9b\x89\x51\x6d\x4f\x2f\x45\xb7\xcd\x7f", + .pub = "\xeb\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 63, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\xe0\xf9\x78\xdf\xcd\x3a\x8f\x1a\x50\x93\x41\x8d\xe5\x41\x36\xa5\x84\xc2\x0b\x7b\x34\x9a\xfd\xf6\xc0\x52\x08\x86\xf9\x5b\x12\x72", + .pub = "\xe0\xeb\x7a\x7c\x3b\x41\xb8\xae\x16\x56\xe3\xfa\xf1\x9f\xc4\x6a\xda\x09\x8d\xeb\x9c\x32\xb1\xfd\x86\x62\x05\x16\x5f\x49\xb8\x00", + .ok = 0 }, + { .tc_id = 64, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x38\x73\x55\xd9\x95\x61\x60\x90\x50\x3a\xaf\xad\x49\xda\x01\xfb\x3d\xc3\xed\xa9\x62\x70\x4e\xae\xe6\xb8\x6f\x9e\x20\xc9\x25\x79", + .pub = "\x5f\x9c\x95\xbc\xa3\x50\x8c\x24\xb1\xd0\xb1\x55\x9c\x83\xef\x5b\x04\x44\x5c\xc4\x58\x1c\x8e\x86\xd8\x22\x4e\xdd\xd0\x9f\x11\x57", + .ok = 0 }, + { .tc_id = 65, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\xc8\xfe\x0d\xf9\x2a\xe6\x8a\x03\x02\x3f\xc0\xc9\xad\xb9\x55\x7d\x31\xbe\x7f\xee\xd0\xd3\xab\x36\xc5\x58\x14\x3d\xaf\x4d\xbb\x40", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 66, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\xc8\xd7\x4a\xcd\xe5\x93\x4e\x64\xb9\x89\x5d\x5f\xf7\xaf\xbf\xfd\x7f\x70\x4f\x7d\xfc\xcf\xf7\xac\x28\xfa\x62\xa1\xe6\x41\x03\x47", + .pub = "\xe0\xeb\x7a\x7c\x3b\x41\xb8\xae\x16\x56\xe3\xfa\xf1\x9f\xc4\x6a\xda\x09\x8d\xeb\x9c\x32\xb1\xfd\x86\x62\x05\x16\x5f\x49\xb8\x80", + .ok = 0 }, + { .tc_id = 67, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\xb8\x56\x49\xd5\x12\x0e\x01\xe8\xcc\xaf\x7b\x2f\xb8\xd8\x1b\x62\xe8\xad\x6f\x3d\x5c\x05\x53\xfd\xde\x19\x06\xcb\x9d\x79\xc0\x50", + .pub = "\x5f\x9c\x95\xbc\xa3\x50\x8c\x24\xb1\xd0\xb1\x55\x9c\x83\xef\x5b\x04\x44\x5c\xc4\x58\x1c\x8e\x86\xd8\x22\x4e\xdd\xd0\x9f\x11\xd7", + .ok = 0 }, + { .tc_id = 68, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x20\x64\xb2\xf4\xc9\xdc\x97\xec\x7c\xf5\x89\x32\xfd\xfa\x32\x65\xba\x6e\xa4\xd1\x1f\x02\x59\xb8\xef\xc8\xaf\xb3\x5d\xb8\x8c\x48", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 69, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 70, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 71, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 72, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\x5f\x9c\x95\xbc\xa3\x50\x8c\x24\xb1\xd0\xb1\x55\x9c\x83\xef\x5b\x04\x44\x5c\xc4\x58\x1c\x8e\x86\xd8\x22\x4e\xdd\xd0\x9f\x11\x57", + .ok = 0 }, + { .tc_id = 73, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\xe0\xeb\x7a\x7c\x3b\x41\xb8\xae\x16\x56\xe3\xfa\xf1\x9f\xc4\x6a\xda\x09\x8d\xeb\x9c\x32\xb1\xfd\x86\x62\x05\x16\x5f\x49\xb8\x00", + .ok = 0 }, + { .tc_id = 74, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 75, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 76, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 77, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 78, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 79, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\x5f\x9c\x95\xbc\xa3\x50\x8c\x24\xb1\xd0\xb1\x55\x9c\x83\xef\x5b\x04\x44\x5c\xc4\x58\x1c\x8e\x86\xd8\x22\x4e\xdd\xd0\x9f\x11\xd7", + .ok = 0 }, + { .tc_id = 80, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\xe0\xeb\x7a\x7c\x3b\x41\xb8\xae\x16\x56\xe3\xfa\xf1\x9f\xc4\x6a\xda\x09\x8d\xeb\x9c\x32\xb1\xfd\x86\x62\x05\x16\x5f\x49\xb8\x80", + .ok = 0 }, + { .tc_id = 81, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 82, + .comment = "public key with low order", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x6a\x33\xa4\xf7\xaf\x29\x7a\x20\xe7\x64\x29\x25\x93\x2b\xf5\x09\xe7\x07\x0f\xa1\xbc\x36\x98\x6a\xf1\xeb\x13\xf4\xf5\x0b\x55", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 0 }, + { .tc_id = 83, + .comment = "public key = 57896044618658097711785492504343953926634992332820282019728792003956564819949", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x40\xff\x58\x6e\x73\xd6\x1f\x09\x60\xdc\x2d\x76\x3a\xc1\x9e\x98\x22\x5f\x11\x94\xf6\xfe\x43\xd5\xdd\x97\xad\x55\xb3\xd3\x59\x61", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 84, + .comment = "public key = 57896044618658097711785492504343953926634992332820282019728792003956564819950", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x58\x4f\xce\xae\xba\xe9\x44\xbf\xe9\x3b\x2e\x0d\x0a\x57\x5f\x70\x6c\xe5\xad\xa1\xda\x2b\x13\x11\xc3\xb4\x21\xf9\x18\x6c\x7a\x6f", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 85, + .comment = "non-canonical public key", + .shared = "\xb4\xd1\x0e\x83\x27\x14\x97\x2f\x96\xbd\x33\x82\xe4\xd0\x82\xa2\x1a\x83\x33\xa1\x63\x15\xb3\xff\xb5\x36\x06\x1d\x24\x82\x36\x0d", + .prv = "\x00\x16\xb6\x2a\xf5\xca\xbd\xe8\xc4\x09\x38\xeb\xf2\x10\x8e\x05\xd2\x7f\xa0\x53\x3e\xd8\x5d\x70\x01\x5a\xd4\xad\x39\x76\x2d\x54", + .pub = "\xef\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 86, + .comment = "non-canonical public key", + .shared = "\x51\x5e\xac\x8f\x1e\xd0\xb0\x0c\x70\x76\x23\x22\xc3\xef\x86\x71\x6c\xd2\xc5\x1f\xe7\x7c\xec\x3d\x31\xb6\x38\x8b\xc6\xee\xa3\x36", + .prv = "\xd8\x36\x50\xba\x7c\xec\x11\x58\x81\x91\x62\x55\xe3\xfa\x5f\xa0\xd6\xb8\xdc\xf9\x68\x73\x1b\xd2\xc9\xd2\xae\xc3\xf5\x61\xf6\x49", + .pub = "\xf0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 87, + .comment = "non-canonical public key", + .shared = "\x69\x19\x99\x2d\x6a\x59\x1e\x77\xb3\xf2\xba\xcb\xd7\x4c\xaf\x3a\xea\x4b\xe4\x80\x2b\x18\xb2\xbc\x07\xeb\x09\xad\xe3\xad\x66\x62", + .prv = "\x88\xdd\x14\xe2\x71\x1e\xbd\x0b\x00\x26\xc6\x51\x26\x4c\xa9\x65\xe7\xe3\xda\x50\x82\x78\x9f\xba\xb7\xe2\x44\x25\xe7\xb4\x37\x7e", + .pub = "\xf1\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 88, + .comment = "non-canonical public key", + .shared = "\x9c\x03\x4f\xcd\x8d\x3b\xf6\x99\x64\x95\x8c\x01\x05\x16\x1f\xcb\x5d\x1e\xa5\xb8\xf8\xab\xb3\x71\x49\x1e\x42\xa7\x68\x4c\x23\x22", + .prv = "\x98\xc2\xb0\x8c\xba\xc1\x4e\x15\x95\x31\x54\xe3\xb5\x58\xd4\x2b\xb1\x26\x8a\x36\x5b\x0e\xf2\xf2\x27\x25\x12\x9d\x8a\xc5\xcb\x7f", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 89, + .comment = "non-canonical public key", + .shared = "\xed\x18\xb0\x6d\xa5\x12\xca\xb6\x3f\x22\xd2\xd5\x1d\x77\xd9\x9f\xac\xd3\xc4\x50\x2e\x4a\xbf\x4e\x97\xb0\x94\xc2\x0a\x9d\xdf\x10", + .prv = "\xc0\x69\x7b\x6f\x05\xe0\xf3\x43\x3b\x44\xea\x35\x2f\x20\x50\x8e\xb0\x62\x30\x98\xa7\x77\x08\x53\xaf\x5c\xa0\x97\x27\x34\x0c\x4e", + .pub = "\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 1 }, + { .tc_id = 90, + .comment = "non-canonical public key", + .shared = "\x44\x8c\xe4\x10\xff\xfc\x7e\x61\x49\xc5\xab\xec\x0a\xd5\xf3\x60\x7d\xfd\xe8\xa3\x4e\x2a\xc3\x24\x3c\x30\x09\x17\x61\x68\xb4\x32", + .prv = "\x18\x42\x2b\x58\xa1\x8e\x0f\x45\x19\xb7\xa8\x87\xb8\xcf\xb6\x49\xe0\xbf\xe4\xb3\x4d\x75\x96\x33\x50\xa9\x94\x4e\x5b\x7f\x5b\x7e", + .pub = "\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 1 }, + { .tc_id = 91, + .comment = "non-canonical public key", + .shared = "\x03\xa6\x33\xdf\x01\x48\x0d\x0d\x50\x48\xd9\x2f\x51\xb2\x0d\xc1\xd1\x1f\x73\xe9\x51\x5c\x69\x94\x29\xb9\x0a\x4f\x69\x03\x12\x2a", + .prv = "\x20\x62\x0d\x82\x48\x77\x07\xbe\xdf\x9e\xe3\x54\x9e\x95\xcb\x93\x90\xd2\x61\x8f\x50\xcf\x6a\xcb\xa4\x7f\xfa\xa1\x03\x22\x4a\x6f", + .pub = "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 1 }, + { .tc_id = 92, + .comment = "non-canonical public key", + .shared = "\x9b\x01\x28\x77\x17\xd7\x2f\x4c\xfb\x58\x3e\xc8\x5f\x8f\x93\x68\x49\xb1\x7d\x97\x8d\xba\xe7\xb8\x37\xdb\x56\xa6\x2f\x10\x0a\x68", + .prv = "\x28\x5a\x6a\x7c\xee\xb7\x12\x2f\x2c\x78\xd9\x9c\x53\xb2\xa9\x02\xb4\x90\x89\x2f\x7d\xff\x32\x6f\x89\xd1\x26\x73\xc3\x10\x1b\x53", + .pub = "\xda\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 1 }, + { .tc_id = 93, + .comment = "non-canonical public key", + .shared = "\xdf\xe6\x08\x31\xc9\xf4\xf9\x6c\x81\x6e\x51\x04\x88\x04\xdb\xdc\x27\x79\x5d\x76\x0e\xce\xd7\x5e\xf5\x75\xcb\xe3\xb4\x64\x05\x4b", + .prv = "\xc8\xe0\x33\x0a\xe9\xdc\xee\xff\x88\x7f\xba\x76\x12\x25\x87\x9a\x4b\xd2\xe0\xdb\x08\x79\x92\x44\x13\x6e\x47\x21\xb2\xc8\x89\x70", + .pub = "\xdb\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 1 }, + { .tc_id = 94, + .comment = "non-canonical public key", + .shared = "\x50\xbf\xa8\x26\xca\x77\x03\x6d\xd2\xbb\xfd\x09\x2c\x3f\x78\xe2\xe4\xa1\xf9\x80\xd7\xc8\xe7\x8f\x2f\x14\xdc\xa3\xcc\xe5\xcc\x3c", + .prv = "\x10\xdb\x62\x10\xfc\x1f\xb1\x33\x82\x47\x2f\xa1\x78\x7b\x00\x4b\x5d\x11\x86\x8a\xb3\xa7\x95\x10\xe0\xce\xe3\x0f\x4a\x6d\xf2\x6b", + .pub = "\xdc\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 1 }, + { .tc_id = 95, + .comment = "non-canonical public key", + .shared = "\x13\xda\x56\x95\xa4\xc2\x06\x11\x54\x09\xb5\x27\x7a\x93\x47\x82\xfe\x98\x5f\xa0\x50\xbc\x90\x2c\xba\x56\x16\xf9\x15\x6f\xe2\x77", + .prv = "\x90\x41\xc6\xe0\x44\xa2\x77\xdf\x84\x66\x27\x5c\xa8\xb5\xee\x0d\xa7\xbc\x02\x86\x48\x05\x4a\xde\x5c\x59\x2a\xdd\x30\x57\x47\x4e", + .pub = "\xea\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 1 }, + { .tc_id = 96, + .comment = "non-canonical public key", + .shared = "\x63\x48\x3b\x5d\x69\x23\x6c\x63\xcd\xdb\xed\x33\xd8\xe2\x2b\xae\xcc\x2b\x0c\xcf\x88\x65\x98\xe8\x63\xc8\x44\xd2\xbf\x25\x67\x04", + .prv = "\xb8\xd4\x99\x04\x1a\x67\x13\xc0\xf6\xf8\x76\xdb\x74\x06\x58\x7f\xdb\x44\x58\x2f\x95\x42\x35\x6a\xe8\x9c\xfa\x95\x8a\x34\xd2\x66", + .pub = "\xeb\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 1 }, + { .tc_id = 97, + .comment = "non-canonical public key", + .shared = "\xe9\xdb\x74\xbc\x88\xd0\xd9\xbf\x04\x6d\xdd\x13\xf9\x43\xbc\xcb\xe6\xdb\xb4\x7d\x49\x32\x3f\x8d\xfe\xed\xc4\xa6\x94\x99\x1a\x3c", + .prv = "\xc8\x5f\x08\xe6\x0c\x84\x5f\x82\x09\x91\x41\xa6\x6d\xc4\x58\x3d\x2b\x10\x40\x46\x2c\x54\x4d\x33\xd0\x45\x3b\x20\xb1\xa6\x37\x7e", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + .ok = 1 }, + { .tc_id = 98, + .comment = "public key = 57896044618658097711785492504343953926634992332820282019728792003956564819968", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x78\x87\x88\x9b\xac\x4c\x62\x9a\x10\x1d\x37\x24\xf2\xed\x8b\x98\xd9\x36\xfd\xe7\x9e\x1a\x1f\x77\xd8\x67\x79\x62\x6b\xf8\xf2\x63", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 99, + .comment = "public key = 57896044618658097711785492504343953926634992332820282019728792003956564819969", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\xe0\x79\x71\xee\x82\x0e\x48\xb0\xb2\x66\xd8\xbe\x3c\xdb\xbb\x5e\x90\x0a\x43\xf5\x9e\xe8\x53\x5c\x65\x72\x41\x86\x15\xde\x49\x62", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", + .ok = 0 }, + { .tc_id = 100, + .comment = "RFC 7748", + .shared = "\xc3\xda\x55\x37\x9d\xe9\xc6\x90\x8e\x94\xea\x4d\xf2\x8d\x08\x4f\x32\xec\xcf\x03\x49\x1c\x71\xf7\x54\xb4\x07\x55\x77\xa2\x85\x52", + .prv = "\xa0\x46\xe3\x6b\xf0\x52\x7c\x9d\x3b\x16\x15\x4b\x82\x46\x5e\xdd\x62\x14\x4c\x0a\xc1\xfc\x5a\x18\x50\x6a\x22\x44\xba\x44\x9a\x44", + .pub = "\xe6\xdb\x68\x67\x58\x30\x30\xdb\x35\x94\xc1\xa4\x24\xb1\x5f\x7c\x72\x66\x24\xec\x26\xb3\x35\x3b\x10\xa9\x03\xa6\xd0\xab\x1c\x4c", + .ok = 1 }, + { .tc_id = 101, + .comment = "RFC 7748", + .shared = "\x95\xcb\xde\x94\x76\xe8\x90\x7d\x7a\xad\xe4\x5c\xb4\xb8\x73\xf8\x8b\x59\x5a\x68\x79\x9f\xa1\x52\xe6\xf8\xf7\x64\x7a\xac\x79\x57", + .prv = "\x48\x66\xe9\xd4\xd1\xb4\x67\x3c\x5a\xd2\x26\x91\x95\x7d\x6a\xf5\xc1\x1b\x64\x21\xe0\xea\x01\xd4\x2c\xa4\x16\x9e\x79\x18\xba\x4d", + .pub = "\xe5\x21\x0f\x12\x78\x68\x11\xd3\xf4\xb7\x95\x9d\x05\x38\xae\x2c\x31\xdb\xe7\x10\x6f\xc0\x3c\x3e\xfc\x4c\xd5\x49\xc7\x15\xa4\x13", + .ok = 1 }, + { .tc_id = 102, + .comment = "RFC 8037, Section A.6", + .shared = "\x4a\x5d\x9d\x5b\xa4\xce\x2d\xe1\x72\x8e\x3b\xf4\x80\x35\x0f\x25\xe0\x7e\x21\xc9\x47\xd1\x9e\x33\x76\xf0\x9b\x3c\x1e\x16\x17\x42", + .prv = "\x77\x07\x6d\x0a\x73\x18\xa5\x7d\x3c\x16\xc1\x72\x51\xb2\x66\x45\xdf\x4c\x2f\x87\xeb\xc0\x99\x2a\xb1\x77\xfb\xa5\x1d\xb9\x2c\x2a", + .pub = "\xde\x9e\xdb\x7d\x7b\x7d\xc1\xb4\xd3\x5b\x61\xc2\xec\xe4\x35\x37\x3f\x83\x43\xc8\x5b\x78\x67\x4d\xad\xfc\x7e\x14\x6f\x88\x2b\x4f", + .ok = 1 }, + { .tc_id = 103, + .comment = "edge case for shared secret", + .shared = "\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\xb7\xb6\xd3\x9c\x76\x5c\xb6\x0c\x0c\x85\x42\xf4\xf3\x95\x2f\xfb\x51\xd3\x00\x2d\x4a\xeb\x9f\x8f\xf9\x88\xb1\x92\x04\x3e\x6d\x0a", + .ok = 1 }, + { .tc_id = 104, + .comment = "edge case for shared secret", + .shared = "\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\x3b\x18\xdf\x1e\x50\xb8\x99\xeb\xd5\x88\xc3\x16\x1c\xbd\x3b\xf9\x8e\xbc\xc2\xc1\xf7\xdf\x53\xb8\x11\xbd\x0e\x91\xb4\xd5\x15\x3d", + .ok = 1 }, + { .tc_id = 105, + .comment = "edge case for shared secret", + .shared = "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\xca\xb6\xf9\xe7\xd8\xce\x00\xdf\xce\xa9\xbb\xd8\xf0\x69\xef\x7f\xb2\xac\x50\x4a\xbf\x83\xb8\x7d\xb6\x01\xb5\xae\x0a\x7f\x76\x15", + .ok = 1 }, + { .tc_id = 106, + .comment = "edge case for shared secret", + .shared = "\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\x49\x77\xd0\xd8\x97\xe1\xba\x56\x65\x90\xf6\x0f\x2e\xb0\xdb\x6f\x7b\x24\xc1\x3d\x43\x69\x18\xcc\xfd\x32\x70\x8d\xfa\xd7\xe2\x47", + .ok = 1 }, + { .tc_id = 107, + .comment = "edge case for shared secret", + .shared = "\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\x98\x73\x0b\xc0\x3e\x29\xe8\xb0\x57\xfb\x1d\x20\xef\x8c\x0b\xff\xc8\x22\x48\x5d\x3d\xb7\xf4\x5f\x4e\x3c\xc2\xc3\xc6\xd1\xd1\x4c", + .ok = 1 }, + { .tc_id = 108, + .comment = "edge case for shared secret", + .shared = "\xf9\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\x97\xb4\xff\xf6\x82\xdf\x7f\x09\x6c\xd1\x75\x65\x69\xe2\x52\xdb\x48\x2d\x45\x40\x6a\x31\x98\xa1\xaf\xf2\x82\xa5\xda\x47\x4c\x49", + .ok = 1 }, + { .tc_id = 109, + .comment = "edge case for shared secret", + .shared = "\xf3\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\x31\x77\x81\xb0\x16\x3b\xae\x74\xac\xcc\x06\xc0\xd4\x4e\xf9\xa9\x11\xa2\x2b\x0d\x37\xfa\xf7\x72\x66\x21\x59\x1f\x93\x43\xea\x2f", + .ok = 1 }, + { .tc_id = 110, + .comment = "edge case for shared secret", + .shared = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\x7e\x26\xf8\xf2\x4c\xb5\x90\x02\x7f\x9d\x1b\xc4\x9b\x0e\x1a\x24\x2c\x7d\x8f\x43\x62\x4d\x3e\x8f\xab\x28\xee\x08\xe0\x2c\xb4\x5e", + .ok = 1 }, + { .tc_id = 111, + .comment = "edge case for shared secret", + .shared = "\xe5\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\xe9\x6d\x27\x80\xe5\x46\x9a\x74\x62\x0a\xb5\xaa\x2f\x62\x15\x1d\x14\x0c\x47\x33\x20\xdb\xe1\xb0\x28\xf1\xa4\x8f\x8e\x76\xf9\x5f", + .ok = 1 }, + { .tc_id = 112, + .comment = "edge case for shared secret", + .shared = "\xe3\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\x8d\x61\x2c\x58\x31\xaa\x64\xb0\x57\x30\x0e\x7e\x31\x0f\x3a\xa3\x32\xaf\x34\x06\x6f\xef\xca\xb2\xb0\x89\xc9\x59\x28\x78\xf8\x32", + .ok = 1 }, + { .tc_id = 113, + .comment = "edge case for shared secret", + .shared = "\xdd\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\x8d\x44\x10\x8d\x05\xd9\x40\xd3\xdf\xe5\x64\x7e\xa7\xa8\x7b\xe2\x4d\x0d\x03\x6c\x9f\x0a\x95\xa2\x38\x6b\x83\x9e\x7b\x7b\xf1\x45", + .ok = 1 }, + { .tc_id = 114, + .comment = "edge case for shared secret", + .shared = "\xdb\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\x21\xa3\x5d\x5d\xb1\xb6\x23\x7c\x73\x9b\x56\x34\x5a\x93\x0a\xee\xe3\x73\xcd\xcf\xb4\x70\x12\x66\x78\x2a\x8a\xc5\x94\x91\x3b\x29", + .ok = 1 }, + { .tc_id = 115, + .comment = "edge case for shared secret", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\x3e\x5e\xfb\x63\xc3\x52\xce\x94\x27\x62\x48\x2b\xc9\x33\x7a\x5d\x35\xba\x55\x66\x47\x43\xac\x5e\x93\xd1\x1f\x95\x73\x36\xcb\x10", + .ok = 1 }, + { .tc_id = 116, + .comment = "edge case for shared secret", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", + .prv = "\x60\xa3\xa4\xf1\x30\xb9\x8a\x5b\xe4\xb1\xce\xdb\x7c\xb8\x55\x84\xa3\x52\x0e\x14\x2d\x47\x4d\xc9\xcc\xb9\x09\xa0\x73\xa9\x76\x7f", + .pub = "\x8e\x41\xf0\x5e\xa3\xc7\x65\x72\xbe\x10\x4a\xd8\x78\x8e\x97\x08\x63\xc6\xe2\xca\x3d\xaa\xe6\x4d\x1c\x2f\x46\xde\xcf\xff\xa5\x71", + .ok = 1 }, + { .tc_id = 117, + .comment = "special case public key", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\xc8\xd0\x7c\x46\xbb\xfb\x82\x77\x53\xb9\x2c\x70\xe4\x95\x83\xce\x8b\xfa\x44\x64\x1a\x73\x82\x25\x8e\xa9\x03\xd6\xa8\x32\xc9\x6b", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 118, + .comment = "special case public key", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x90\xb7\xef\x23\x7a\x05\x5f\x34\x8d\xcb\x4c\x43\x64\xa5\x9d\x7d\x31\xed\xc7\xab\x78\xf2\xca\x25\x4e\x2c\x81\x09\x75\xc3\xf5\x43", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 0 }, + { .tc_id = 119, + .comment = "special case public key", + .shared = "\x0c\x50\xac\x2b\xfb\x68\x15\xb4\x7d\x07\x34\xc5\x98\x13\x79\x88\x2a\x24\xa2\xde\x61\x66\x85\x3c\x73\x53\x29\xd9\x78\xba\xee\x4d", + .prv = "\xe0\xa8\xbe\x63\x31\x5c\x4f\x0f\x0a\x3f\xee\x60\x7f\x44\xd3\x0a\x55\xbe\x63\xf0\x95\x61\xd9\xaf\x93\xe0\xa1\xc9\xcf\x0e\xd7\x51", + .pub = "\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 120, + .comment = "special case public key", + .shared = "\x77\x55\x71\x37\xa2\xa2\xa6\x51\xc4\x96\x27\xa9\xb2\x39\xac\x1f\x2b\xf7\x8b\x8a\x3e\x72\x16\x8c\xce\xcc\x10\xa5\x1f\xc5\xae\x66", + .prv = "\x08\x40\xa8\xaf\x5b\xc4\xc4\x8d\xa8\x85\x0e\x97\x3d\x7e\x14\x22\x0f\x45\xc1\x92\xce\xa4\x02\x0d\x37\x7e\xec\xd2\x5c\x7c\x36\x43", + .pub = "\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 121, + .comment = "special case public key", + .shared = "\xc8\x8e\x71\x9a\xe5\xc2\x24\x8b\x5f\x90\xda\x34\x6a\x92\xae\x21\x4f\x44\xa5\xd1\x29\xfd\x4e\x9c\x26\xcf\x6a\x0d\xa1\xef\xe0\x77", + .prv = "\x00\x92\x22\x9c\x75\x3a\x71\x28\x4d\x08\x53\x90\x94\x70\xad\x84\x7a\xb6\x2f\x43\x9e\xa5\x14\x82\xfb\x41\xd3\x0c\xc3\xb4\x47\x43", + .pub = "\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 122, + .comment = "special case public key", + .shared = "\x4b\xf6\x78\x9c\x7e\xa0\x36\xf9\x73\xcd\xe0\xaf\x02\xd6\xfd\xb9\xb6\x4a\x0b\x95\x70\x22\x11\x14\x39\x57\x0f\xad\x7d\x7a\x45\x3f", + .prv = "\xb8\xda\x2b\xd2\xd7\xcf\x25\xa3\xe5\x4e\x5f\x87\xee\x15\x91\x1e\xff\xb9\xff\x86\xba\xec\x40\x76\xd5\x6c\x8e\x95\x36\x70\xbf\x5b", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 123, + .comment = "special case public key", + .shared = "\xbc\xac\x23\x5a\xe1\x5c\xc7\x14\x83\x72\xe1\x1f\x93\x15\xe3\xbc\x76\xce\xb9\x04\xb3\xd2\xa8\x24\x6b\xd9\xd9\xbe\x20\x82\xbb\x62", + .prv = "\x68\x4c\xd4\x20\xaf\x41\xab\xb3\xd1\x0c\x61\xe7\x73\x23\x8c\xf7\x29\xc2\x15\x5f\x94\x1a\xc2\x7e\x15\xf4\xc3\x7f\x49\xb2\x95\x76", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 124, + .comment = "special case public key", + .shared = "\x5d\xd7\xd1\x6f\xff\x25\xcc\x5f\xdf\x9e\x03\xc3\x15\x7c\xb0\xa2\x35\xce\xa1\x7d\x61\x8f\x36\xe6\xf1\x34\x61\x56\x7e\xde\xb9\x43", + .prv = "\x38\xcf\xac\xaa\x44\x60\x79\x6b\x4d\xe4\x34\xbd\xd6\x73\x9f\x0d\x04\x36\x71\xf9\x7f\xa8\x29\x51\x75\x11\xe6\xb4\x7a\xa9\x34\x74", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 125, + .comment = "special case public key", + .shared = "\x28\x16\xfd\x03\x1d\x51\xd6\x75\x0f\x92\x25\xed\xe9\x50\x62\x5c\xca\x47\x44\x1c\xa9\x7e\x43\x09\x26\x50\x39\x69\x91\xaf\xcb\x6d", + .prv = "\x30\x83\x2e\x8c\xb6\x27\xac\x19\x5f\x77\xb1\x10\x52\x58\xe4\xbb\x18\xb9\x9a\x5e\xd9\x44\x40\x4b\xfa\xcb\x3a\x03\x9f\xbd\xb1\x4b", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 126, + .comment = "special case public key", + .shared = "\x7e\xd8\xf2\xd5\x42\x4e\x7e\xbb\x3e\xdb\xdf\x4a\xbe\x45\x54\x47\xe5\xa4\x8b\x65\x8e\x64\xab\xd0\x6c\x21\x8f\x33\xbd\x15\x1f\x64", + .prv = "\xd8\x18\xfd\x69\x71\xe5\x46\x44\x7f\x36\x1d\x33\xd3\xdb\xb3\xea\xdc\xf0\x2f\xb2\x8f\x24\x6f\x1d\x51\x07\xb9\x07\x3a\x93\xcd\x4f", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 127, + .comment = "special case public key", + .shared = "\xe8\x62\x0e\xd5\xca\x89\xc7\x2c\x5e\xa5\x50\x3e\x6d\xcd\x01\x13\x1c\xd5\xe8\x75\xc3\x0e\x13\xd5\xdc\x61\x9c\xe2\x8e\xc7\xd5\x59", + .prv = "\x10\x21\xcd\x86\x82\xbd\xc3\xf5\xda\x91\x00\xad\xff\x5b\x22\x30\xb3\xac\xd8\x36\xb3\xa4\x55\xdb\x83\x52\xa2\xc2\x7e\x69\xd1\x7e", + .pub = "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 128, + .comment = "special case public key", + .shared = "\xce\xad\xb2\x64\x37\x9d\xca\xdd\x6e\x3b\xb8\xad\x24\xdd\x65\x3d\x2a\x60\x9d\xd7\x03\xd4\x1d\xa6\xca\xf3\xad\x00\xf0\x01\x86\x2c", + .prv = "\x20\xe4\xc9\x24\x71\x02\x29\x26\x55\xd6\x76\x5d\x7d\x84\xc6\xfc\xe5\x30\x9b\x80\x04\x04\x5d\xae\xa6\xd7\xd7\xdc\xad\x46\x28\x71", + .pub = "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", + .ok = 1 }, + { .tc_id = 129, + .comment = "special case public key", + .shared = "\xf8\x6c\xc7\xbf\x1b\xe4\x95\x74\xfc\x97\xa0\x74\x28\x2e\x9b\xb5\xcd\x23\x8e\x00\x2b\xc8\xe9\xa7\xb8\x55\x2b\x2d\x60\xec\xcb\x52", + .prv = "\x90\xb1\x50\xd4\x62\xde\x51\x20\x56\xd5\xbd\x55\x17\x30\x74\x96\x9b\x49\x6f\x26\x2f\xb6\x91\x6b\x73\x3f\x62\x63\xa8\x07\x89\x71", + .pub = "\xa8\xb9\xc7\x37\x21\x18\xa5\x3a\x9d\xe9\xea\xf0\x86\x8e\x3b\x1a\x3d\x88\xe8\x1c\xb2\xe4\x07\xff\x71\x25\xe9\xf5\xc5\x08\x87\x15", + .ok = 1 }, + { .tc_id = 130, + .comment = "special case public key", + .shared = "\xcc\xbb\x8f\xd9\xde\xe1\x65\xa3\x98\xb2\xdb\xd7\xc8\x39\x6f\x81\x73\x6c\x1b\x3d\xa3\x6b\x35\xfb\xec\x8f\x32\x6f\x38\xf9\x27\x67", + .prv = "\x98\x87\x28\x6b\x32\x61\xc8\xd8\x57\xa1\x6f\x6d\xb2\x12\x77\xf7\x5d\x88\xd4\xe8\x61\xb3\xeb\xe7\x59\x66\x99\x04\x7e\x81\x66\x68", + .pub = "\xaa\xb9\xc7\x37\x21\x18\xa5\x3a\x9d\xe9\xea\xf0\x86\x8e\x3b\x1a\x3d\x88\xe8\x1c\xb2\xe4\x07\xff\x71\x25\xe9\xf5\xc5\x08\x87\x15", + .ok = 1 }, + { .tc_id = 131, + .comment = "special case public key", + .shared = "\x46\xad\xd6\xf4\x8f\xff\xf4\x61\x77\x7d\x4f\x89\xb6\xfd\xf1\x15\x5a\xa0\x51\xa9\x63\x87\xd4\x5f\x3e\x5e\x37\x1a\x23\x6b\x6e\x52", + .prv = "\x20\xca\x2c\x85\xcc\x87\x62\xe9\x6b\x70\x47\xbf\x15\xc7\x1c\x05\x0f\xfe\x0e\xd1\x61\x60\x40\xa9\x53\xae\x32\xa1\x29\x7a\xd8\x71", + .pub = "\x58\x50\x07\xa5\x93\x0d\x77\x62\x3c\xf2\x97\x56\x03\x8c\xa1\x97\xd3\xeb\xfd\x9e\x4c\x80\xa6\x95\x85\xef\xe0\x27\x40\x92\xc1\x15", + .ok = 1 }, + { .tc_id = 132, + .comment = "special case public key", + .shared = "\x1a\xdb\xe3\x22\x07\xe2\x1f\x71\xe1\xaf\x53\x88\x4d\x2a\x22\x76\x48\x1e\x29\x8e\x55\x7f\x4d\xac\xb3\x72\x0f\x24\x58\xe3\x08\x2d", + .prv = "\xd0\x27\x65\x66\x05\xb1\x0b\xf1\x8d\xea\x28\xbc\x52\x54\x6f\x9f\x1f\x08\xce\xf0\x6c\xaf\xd2\x00\xfc\x84\xf8\x7d\xbb\x4e\xbe\x46", + .pub = "\xfb\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f", + .ok = 1 }, + { .tc_id = 133, + .comment = "special case public key", + .shared = "\xe1\x2c\xc5\x8f\xbe\xb7\x0a\x5e\x35\xc8\x61\xc3\x37\x10\xbe\x65\x16\xa6\xa9\x2e\x52\x37\x60\x60\x21\x1b\x24\x87\xdb\x54\x2b\x4f", + .prv = "\x48\x67\xa8\x3e\xe9\xd0\x1b\x75\x10\x84\x08\x67\xdb\x1a\xf6\xa6\x04\x9b\xdb\xb0\x56\xb7\x44\x43\xf7\x0c\x35\x8e\x16\x2c\x88\x67", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", + .ok = 1 }, + { .tc_id = 134, + .comment = "special case public key", + .shared = "\x42\x1b\xed\x1b\x26\xda\x1e\x9a\xdb\xea\xda\x1f\x32\xb9\x1a\x0f\xb4\xce\xd0\xf1\x11\x0e\x0a\x4a\x88\xe7\x35\xa1\x9e\xe4\x57\x1e", + .prv = "\xa0\x15\x97\x0a\x8a\xdd\x94\x0f\xca\x5b\x1b\x5d\x23\x87\x53\x97\xd5\x47\xd8\xd4\x94\xfc\xb3\x14\xf2\x04\x5a\x67\xa2\xd1\x2c\x4b", + .pub = "\xaf\xa0\x0e\x4a\x27\x1b\xee\xc4\x78\xe4\x2f\xad\x06\x18\x43\x2f\xa7\xd7\xfb\x3d\x99\x00\x4d\x2b\x0b\xdf\xc1\x4f\x80\x24\x83\x2b", + .ok = 1 }, + { .tc_id = 135, + .comment = "special case public key", + .shared = "\xd7\xb4\x74\x63\xe2\xf4\xca\x9a\x1a\x7d\xee\xa0\x98\xda\x8e\x74\xac\x3b\x4a\x10\x90\x83\xd9\x97\x25\x9b\x12\x99\x2e\x7e\x7e\x06", + .prv = "\x40\x58\xcb\x6b\x9a\xab\xa0\x2a\x33\x8a\xaa\x39\x2d\xbc\x10\x03\x9e\x26\xe9\xe4\x44\x11\x7e\x75\x8e\x24\xc5\xd8\xb2\x32\xea\x5e", + .pub = "\xb1\xa0\x0e\x4a\x27\x1b\xee\xc4\x78\xe4\x2f\xad\x06\x18\x43\x2f\xa7\xd7\xfb\x3d\x99\x00\x4d\x2b\x0b\xdf\xc1\x4f\x80\x24\x83\x2b", + .ok = 1 }, + { .tc_id = 136, + .comment = "special case public key", + .shared = "\x68\x6e\xb9\x10\xa9\x37\x21\x1b\x91\x47\xc8\xa0\x51\xa1\x19\x79\x06\x81\x8f\xdc\x62\x66\x68\xeb\x5f\x5d\x39\x4a\xfd\x86\xd4\x1b", + .prv = "\xb8\x76\xb0\x5d\xaf\xf0\x53\x0b\x13\x9d\x9e\x11\x25\x05\x63\x41\x80\x77\x17\x82\x46\xc5\xfa\x70\x05\xba\x00\xe9\xb6\x64\x77\x63", + .pub = "\xfb\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f", + .ok = 1 }, + { .tc_id = 137, + .comment = "special case public key", + .shared = "\x09\x55\x97\x33\xb3\x5b\xcc\x6b\xb8\xac\x57\x4b\x5a\xbe\x3a\x4d\x88\x41\xde\xff\x05\x1c\x29\x4a\x07\x48\x7e\x3e\xec\x3c\x55\x58", + .prv = "\xd8\x7f\xd6\xaa\x5d\x8d\xee\xf6\xde\xe9\x61\x9a\x56\x84\x6a\x08\x29\x62\x05\x90\xf2\xda\x40\x83\x5d\x8e\x25\x15\x97\xe3\x90\x78", + .pub = "\x22\x23\x1c\x64\xef\x73\xad\x62\x31\x8b\x8a\x87\xbc\x38\xe2\x72\xe1\xbb\x8b\xf1\xa6\x0d\x7c\x00\x47\x6d\x0b\x05\x9d\x7b\x3c\x35", + .ok = 1 }, + { .tc_id = 138, + .comment = "special case public key", + .shared = "\xf7\xd5\xcb\xcf\x39\xeb\x72\x2b\x01\xed\x20\xc8\x55\x63\xeb\xb8\x1d\x07\x65\x11\xae\xad\x4c\xcc\x42\x90\x27\x86\x6b\x9f\xd2\x70", + .prv = "\x90\x03\x63\x21\xb6\x37\x51\xf7\x62\x2a\xa9\x3d\xa3\x4d\x85\xe5\x9c\xe8\x10\x09\xac\x5b\x9a\x06\x89\x21\xd8\x3b\xc4\x71\x5b\x57", + .pub = "\xf6\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f", + .ok = 1 }, + { .tc_id = 139, + .comment = "special case public key", + .shared = "\xe9\x95\xad\x6a\x1e\xc6\xc5\xab\x32\x92\x2c\xff\x9d\x20\x47\x21\x70\x46\x73\x14\x3c\x4a\x11\xde\xaa\x20\x3f\x3c\x81\x98\x9b\x3f", + .prv = "\xa0\x67\x81\xfd\x4c\x4a\x08\x74\xe0\x0e\x72\xba\x13\x1b\x9d\xd8\x7a\x83\xb2\x90\x4e\x29\x4d\xe1\x76\xe8\xa9\xaf\x1f\x69\x5d\x67", + .pub = "\xf7\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f", + .ok = 1 }, + { .tc_id = 140, + .comment = "special case public key", + .shared = "\x32\xb6\xda\xbe\x01\xd1\x38\x67\xf3\xb5\xb0\x89\x2f\xef\xd8\x0d\xca\x66\x6f\x2e\xdc\x5a\xfb\x43\xcd\x0b\xaf\x70\x3c\x3e\x69\x26", + .prv = "\xb8\x22\xd7\x2d\x8b\x68\xbd\xb4\xfb\xf6\x7e\x56\xa6\x1d\x67\x2b\x2c\x77\x47\xe9\x44\x79\xfe\x5a\xe4\x07\x2d\x0a\xcc\xdd\x65\x71", + .pub = "\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f", + .ok = 1 }, + { .tc_id = 141, + .comment = "special case public key", + .shared = "\xa9\x3d\x83\xfc\x9e\xa0\xf6\xcb\x0c\xc8\xb6\x31\xda\x60\x00\x19\xb7\x6c\xbb\x2e\xc5\x72\x22\xf2\xe4\x2d\xd5\x40\xe3\xda\x85\x0b", + .prv = "\xd0\x8c\xe1\x23\x7e\x24\x8d\x02\xcd\xf6\x19\xd2\x0b\xea\x58\x48\xad\xe4\xf6\xff\xd1\x71\xb8\xde\xe8\x79\x3f\xc6\x7c\x45\x96\x40", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40", + .ok = 1 }, + { .tc_id = 142, + .comment = "special case public key", + .shared = "\x01\x7c\xbf\xa2\xb3\x8e\x9e\xf3\x29\x7a\x33\x9e\xcc\xe1\xa9\x17\xbd\xcf\x7e\x91\x00\x36\x08\x6a\x41\xd1\xe2\x2d\x04\x24\x18\x70", + .prv = "\x18\x0a\xe3\xc9\x28\x51\x4c\xfb\x9e\xdd\x06\xe7\xdc\x1d\x5d\x06\x61\x60\xe9\x67\x44\x5a\x5c\x58\xe4\x46\x3b\x69\xed\x20\x5e\x6d", + .pub = "\xcb\xdc\xe3\x9b\x10\x8c\x52\x9d\xce\x74\x75\x78\x43\xc7\x1d\x8d\x1e\x44\x74\x0e\x59\xf2\x83\xff\xb8\x92\xf4\xfa\x62\x84\xc3\x4a", + .ok = 1 }, + { .tc_id = 143, + .comment = "special case public key", + .shared = "\x71\x13\x39\x05\xb8\xa5\x7e\xa8\xc3\x8d\xe0\xec\xf2\x13\x69\x9a\x75\xb0\x96\xc2\xdf\x21\xf0\x7f\x7e\x9e\xb0\x3e\x9f\xa5\x3f\x5c", + .prv = "\xe8\x81\xd8\x06\xa1\x10\x56\x0c\xd8\xfe\xe8\x99\xd5\x9c\x02\x49\xf1\x23\x3a\x43\x22\xc4\x1a\xa3\x69\xc7\xa2\xa9\x9f\x5b\x59\x62", + .pub = "\x3c\x5f\xf1\xb5\xd8\xe4\x11\x3b\x87\x1b\xd0\x52\xf9\xe7\xbc\xd0\x58\x28\x04\xc2\x66\xff\xb2\xd4\xf4\x20\x3e\xb0\x7f\xdb\x7c\x54", + .ok = 1 }, + { .tc_id = 144, + .comment = "special case public key", + .shared = "\x3d\xc7\xb7\x0e\x11\x07\x66\xb2\xbf\x52\x52\x52\xeb\xed\x98\xa1\x00\xb2\xe5\x32\xdc\x69\x54\x44\x64\xda\x1b\xba\xb8\x62\x5f\x6d", + .prv = "\x08\xe4\x10\xe1\xd7\xe8\xb9\x41\x12\x36\xaf\x4a\x35\xd6\xb6\x2a\x5d\x89\x31\x47\x8e\x4c\x62\x19\x7c\xfa\xfb\x49\x14\x67\xb1\x62", + .pub = "\x3e\x5f\xf1\xb5\xd8\xe4\x11\x3b\x87\x1b\xd0\x52\xf9\xe7\xbc\xd0\x58\x28\x04\xc2\x66\xff\xb2\xd4\xf4\x20\x3e\xb0\x7f\xdb\x7c\x54", + .ok = 1 }, + { .tc_id = 145, + .comment = "special case public key", + .shared = "\xe3\x17\xe5\xcc\x43\x8b\x5f\x79\xea\xd5\x53\x3a\xc7\xc4\x55\x19\xa1\x17\xb3\x10\x33\xcc\x21\x40\xb1\x9e\xdf\x85\x72\x01\x12\x40", + .prv = "\xe0\x2f\xdf\x7e\x0e\xe3\xd5\x5b\x44\x40\xf0\x14\x32\xdd\x25\x3c\x94\x97\x93\xbc\x04\xda\x44\xdd\xec\xe8\x3e\x54\xc8\xc3\x9b\x40", + .pub = "\xf2\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f", + .ok = 1 }, + { .tc_id = 146, + .comment = "special case public key", + .shared = "\xd8\x68\x10\x51\x6a\xed\xdc\x18\x06\x10\x36\xf5\x99\xa9\xeb\x84\xd1\xc6\x14\x6b\x0f\x54\x36\x52\xdd\x45\x26\x74\x3b\xa4\x2c\x04", + .prv = "\xf0\x5d\x18\xf6\x8e\xf7\xa5\x86\x5c\x14\xdb\x3a\x9c\x25\x5f\xdf\x2d\xab\xea\x2a\xa3\x65\x81\xe9\x4f\x68\xb7\x27\xb5\x82\x86\x7b", + .pub = "\xf6\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f", + .ok = 1 }, + { .tc_id = 147, + .comment = "special case public key", + .shared = "\xdf\xa9\x88\xa4\x77\x00\x3b\xe1\x25\xb9\x5c\xcb\xf2\x22\x3d\x97\x72\x95\x77\xd2\x5e\x1d\x6e\x89\xe3\xda\x0a\xfa\xbd\xd0\xae\x71", + .prv = "\x00\xc1\x03\x57\x8d\x5c\x07\x9d\x7b\xcc\x22\xc1\xc3\x1e\x78\x7c\x1b\x15\xc5\x7f\xcb\x49\x3f\xda\xfe\xfa\x20\x37\x1c\xfc\x74\x6b", + .pub = "\x95\xaf\xf8\x5a\x6c\xf2\x88\x9d\xc3\x0d\x68\xa9\xfc\x73\x5e\x68\x2c\x14\x02\x61\xb3\x7f\x59\x6a\x7a\x10\x1f\xd8\xbf\x6d\x3e\x6a", + .ok = 1 }, + { .tc_id = 148, + .comment = "special case public key", + .shared = "\xd4\x50\xaf\x45\xb8\xed\x5f\xe1\x40\xcc\x52\x63\xff\xb7\xb5\x2e\x66\x73\x68\x99\xa8\xb8\x72\xb6\xe2\x85\x52\x12\x98\x19\xb2\x5b", + .prv = "\x70\x05\xbb\x92\x74\x85\xc4\x35\x64\x2b\x42\x4a\x3d\xde\x01\x4b\xcf\x76\x34\x5e\x5b\xe6\x4a\xe6\xe9\xb2\x4d\xb3\x9e\x1c\xdb\x51", + .pub = "\x43\x46\x38\xc8\xde\xe7\x5a\xc5\x62\x16\x15\x0f\x79\x71\xc4\xe5\xc2\x77\x17\xe3\x4d\x1b\xf8\x00\x8e\xda\x16\x0a\x3a\xf7\x78\x6a", + .ok = 1 }, + { .tc_id = 149, + .comment = "special case public key", + .shared = "\x58\x00\x2c\x89\xbf\x8b\xc3\x2a\xe6\xfc\x20\x5b\x79\x6a\xcd\x13\xef\x7f\x84\x76\xf6\x49\x2a\xe4\xb2\xbe\x47\xf1\x09\x5e\x8a\x4f", + .prv = "\x08\x22\x03\x9a\x5d\xc1\x3c\x40\xfc\xcc\xf3\x46\xe2\xa7\x76\x9b\x4f\xd2\x72\x05\x2d\x43\x26\x0a\xd6\x26\x46\x8a\x50\xd4\x41\x62", + .pub = "\x45\x46\x38\xc8\xde\xe7\x5a\xc5\x62\x16\x15\x0f\x79\x71\xc4\xe5\xc2\x77\x17\xe3\x4d\x1b\xf8\x00\x8e\xda\x16\x0a\x3a\xf7\x78\x6a", + .ok = 1 }, + { .tc_id = 150, + .comment = "special case public key", + .shared = "\x77\x73\xaa\xd6\xe7\x2e\xb1\x73\x5b\x65\xad\x51\xf7\xda\xd2\x58\xc1\x1d\x7b\xff\xf5\x30\x94\x42\x4c\xb1\x03\xcd\x6b\xfb\x43\x68", + .prv = "\x40\xa6\x34\x9c\x03\xf0\xdc\x0a\x42\x35\x8f\x63\x53\xca\x67\x63\x2a\xf6\x87\xb1\x4c\x9d\xff\x62\x6c\x54\xe2\x11\xe8\xfc\x35\x5a", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 151, + .comment = "special case public key", + .shared = "\xc1\x18\xdd\xf6\x46\x2f\xbe\xa8\x0f\x14\xef\x1f\x29\x72\xa1\xab\x12\xca\xfa\x51\x1d\x13\x23\xd4\xd2\x2d\x0d\x42\x6d\x65\x1b\x5b", + .prv = "\x50\x69\x6d\x4d\x05\x20\x99\x71\xd6\xba\x06\x76\xea\x27\x42\x62\xba\x63\x9a\xac\x74\xfa\x75\xe5\xdf\x45\x70\x76\x8a\xd8\xae\x74", + .pub = "\xee\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 152, + .comment = "special case public key", + .shared = "\xcc\x07\x75\xbf\xd9\x70\xa2\x70\x6b\x11\xc7\x22\x2a\x44\x36\xa3\xd1\x71\x60\x38\x2c\x83\xb7\x6f\x89\xb6\x61\x92\xc8\x1b\x44\x08", + .prv = "\x68\xbb\x68\x0c\x85\x3f\x4e\x4d\xaa\x47\xc5\x86\xdc\x88\x6c\xf4\x56\x8d\x7b\x03\x83\x77\x0f\x6d\xf4\x39\xa5\x3b\xe4\xa3\x23\x6d", + .pub = "\xed\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 153, + .comment = "special case public key", + .shared = "\xf0\x09\x7f\xa0\xba\x70\xd0\x19\x12\x62\x77\xab\x15\xc5\x6e\xcc\x17\x0c\xa8\x81\x80\xb2\xbf\x9d\x80\xfc\xda\x3d\x7d\x74\x55\x2a", + .prv = "\xb0\xf6\xc2\x8d\xbd\xc6\x47\x06\x8a\x76\xd7\x18\x05\xef\x77\x0f\x08\x7c\xf7\x6b\x82\xaf\xdc\x0d\x26\xc4\x5b\x71\xac\xe4\x97\x68", + .pub = "\xeb\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 1 }, + { .tc_id = 154, + .comment = "special case public key", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x18\x63\x0f\x93\x59\x86\x37\xc3\x5d\xa6\x23\xa7\x45\x59\xcf\x94\x43\x74\xa5\x59\x11\x4c\x79\x37\x81\x10\x41\xfc\x86\x05\x56\x4a", + .pub = "\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f", + .ok = 0 }, + { .tc_id = 155, + .comment = "special case for E in multiplication by 2", + .shared = "\x59\xe7\xb1\xe6\xf4\x70\x65\xa4\x8b\xd3\x49\x13\xd9\x10\x17\x6b\x67\x92\xa1\x37\x2a\xad\x22\xe7\x3c\xd7\xdf\x45\xfc\xf9\x1a\x0e", + .prv = "\x58\x1e\xcb\xda\x5a\x4a\x22\x80\x44\xfe\xfd\x6e\x03\xdf\x23\x45\x58\xc3\xc7\x91\x52\xc6\xe2\xc5\xe6\x0b\x14\x2c\x4f\x26\xa8\x51", + .pub = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .ok = 1 }, + { .tc_id = 156, + .comment = "special case for E in multiplication by 2", + .shared = "\x17\x9f\x6b\x02\x07\x48\xac\xba\x34\x91\x33\xea\xa4\x51\x8f\x1b\xd8\xba\xb7\xbf\xc4\xfb\x05\xfd\x4c\x24\xe7\x55\x3d\xa1\xe9\x60", + .prv = "\xb0\x56\x1a\x38\x00\x07\x95\xb7\xcb\x53\x7b\x55\xe9\x75\xea\x45\x2c\x21\x18\x50\x62\x95\xd5\xeb\x15\xfd\x9c\x83\xb6\x7f\x7a\x50", + .pub = "\x77\xaf\x0d\x38\x97\xa7\x15\xdf\xe2\x5d\xf5\xd5\x38\xcf\x13\x3b\xc9\xab\x7a\xd5\x2d\xf6\xbd\x92\x2a\x2f\xb7\x56\x21\xd5\x99\x01", + .ok = 1 }, + { .tc_id = 157, + .comment = "special case for E in multiplication by 2", + .shared = "\x43\xc5\xee\x14\x51\xf2\x13\xef\x76\x24\x72\x9e\x59\x5a\x0f\xee\x7c\x9a\xf7\xee\x5d\x27\xeb\x03\x27\x8e\xe9\xf9\x4c\x20\x23\x52", + .prv = "\xb0\x0f\x7d\xf2\xd4\x71\x28\x44\x1c\x72\x70\xb9\xa8\x7e\xee\x45\xb6\x05\x6f\xc6\x42\x36\xa5\x7b\xdf\x81\xdb\xcc\xcf\x5f\x5d\x42", + .pub = "\x4e\x39\x86\x61\x27\xb6\xa1\x2a\x54\x91\x4e\x10\x6a\xab\x86\x46\x4a\xf5\x56\x31\xf3\xcb\x61\x76\x6d\x59\x99\xaa\x8d\x2e\x07\x0e", + .ok = 1 }, + { .tc_id = 158, + .comment = "special case for E in multiplication by 2", + .shared = "\x2f\x35\x0b\xcf\x0b\x40\x78\x4d\x1d\x75\x6c\x9c\xa3\xe3\x8e\xc9\xdd\x68\xba\x80\xfa\xf1\xf9\x84\x7d\xe5\x07\x79\xc0\xd4\x90\x2a", + .prv = "\xc8\xf7\xa0\xc0\xbf\xb1\xe9\xc7\x25\x76\xc5\x34\xf8\x68\x54\xfb\xe4\xaf\x52\x1d\x4f\xa8\x07\xf6\x7e\x24\x40\xe1\x00\xec\x88\x52", + .pub = "\xad\xc6\x79\x9e\xd8\x49\x5e\xd5\xab\x6e\xb1\xef\x95\x54\x79\xb9\xb5\x0a\xa9\xce\x0c\x34\x9e\x89\x92\xa6\x66\x55\x72\xd1\xf8\x11", + .ok = 1 }, + { .tc_id = 159, + .comment = "special case for E in multiplication by 2", + .shared = "\xd5\xd6\x50\xdc\x62\x10\x72\xec\xa9\x52\xe4\x34\x4e\xfc\x73\x20\xb2\xb1\x45\x9a\xba\x48\xf5\xe2\x48\x0d\xb8\x81\xc5\x0c\xc6\x50", + .prv = "\x58\x18\x1f\x58\x1a\xa3\x70\x22\xff\x71\xc5\x6c\x6e\x68\xe6\x17\x5d\x96\x7c\x5c\x99\x5a\x24\x98\x85\xf6\x65\x65\x07\x4d\xed\x4d", + .pub = "\x77\x0f\x42\x18\xef\x23\x4f\x5e\x18\x54\x66\xe3\x24\x42\xc3\x02\xbb\xec\x21\xbb\xb6\xcd\x28\xc9\x79\xe7\x83\xfe\x50\x13\x33\x3f", + .ok = 1 }, + { .tc_id = 160, + .comment = "special case for E in multiplication by 2", + .shared = "\x90\x9c\xc5\x72\x75\xd5\x4f\x20\xc6\x7b\x45\xf9\xaf\x94\x84\xfd\x67\x58\x1a\xfb\x7d\x88\x7b\xee\x1d\xb5\x46\x1f\x30\x3e\xf2\x57", + .prv = "\x30\x1c\x93\x5c\xae\x43\x57\x07\x0b\x0a\xda\xf9\xcd\x61\x92\x83\x0b\x2c\x98\x9c\x15\x37\x29\xee\xd9\x9f\x58\x9e\xb4\x5f\x88\x4b", + .pub = "\x5c\x61\x18\xc4\xc7\x4c\xfb\x84\x2d\x9a\x87\x44\x9f\x9d\x8d\xb8\xb9\x92\xd4\x6c\x5a\x90\x93\xce\x2f\xcb\x7a\x49\xb5\x35\xc4\x51", + .ok = 1 }, + { .tc_id = 161, + .comment = "special case for E in multiplication by 2", + .shared = "\x4a\x7e\x2c\x5c\xaf\x1d\x81\x80\xeb\x1c\x4f\x22\x69\x2f\x29\xa1\x4b\x4c\xdc\x9b\x19\x3b\xd1\xd1\x6e\x2f\x27\x43\x8e\xef\x14\x48", + .prv = "\xd0\x02\x29\x2d\x43\x59\xa3\xd4\x2b\xc8\x76\x7f\x13\x80\x00\x93\x32\xe7\xa0\xdf\x2f\x33\x79\x01\x1a\xb7\x8f\x78\x9f\x6b\xaa\x54", + .pub = "\x40\x39\x86\x61\x27\xb6\xa1\x2a\x54\x91\x4e\x10\x6a\xab\x86\x46\x4a\xf5\x56\x31\xf3\xcb\x61\x76\x6d\x59\x99\xaa\x8d\x2e\x07\x6e", + .ok = 1 }, + { .tc_id = 162, + .comment = "special case for E in multiplication by 2", + .shared = "\xc0\xee\x59\xd3\x68\x5f\xc2\xc3\xc8\x03\x60\x8b\x5e\xe3\x9a\x7f\x8d\xa3\x0b\x48\xe4\x29\x3a\xe0\x11\xf0\xea\x1e\x5a\xeb\x71\x73", + .prv = "\xd0\xc2\xc4\x9e\x64\x4a\xb7\x38\x27\x07\x07\xff\x99\x17\x06\x59\x42\x68\x7e\x2f\x12\x88\x6d\x96\x11\x61\xdb\x46\xc0\x5b\x56\x5f", + .pub = "\x07\x8f\xa5\x23\x49\x8f\xb5\x1c\xba\x11\x12\xd8\x3b\x20\xaf\x44\x8b\x80\x09\xd8\xee\xa1\x43\x68\x56\x4d\x01\xb8\xf9\xb6\x08\x6f", + .ok = 1 }, + { .tc_id = 163, + .comment = "special case for E in multiplication by 2", + .shared = "\xb2\x52\xbc\x8e\xab\xfa\xa6\x8c\x56\xe5\x4d\x61\xb9\x90\x61\xa3\x5d\x11\xe3\xa7\xb9\xbd\xa4\x17\xd9\x0f\x69\xb1\x11\x9b\xcf\x45", + .prv = "\xf0\x87\xd3\x8b\x27\x4c\x1d\xad\x1b\xce\x6e\xaa\x36\xb4\x8e\x21\x90\xb9\x0b\x9b\xf8\xca\x59\x66\x9c\xc5\xe0\x04\x64\x53\x43\x42", + .pub = "\x9f\xc6\x79\x9e\xd8\x49\x5e\xd5\xab\x6e\xb1\xef\x95\x54\x79\xb9\xb5\x0a\xa9\xce\x0c\x34\x9e\x89\x92\xa6\x66\x55\x72\xd1\xf8\x71", + .ok = 1 }, + { .tc_id = 164, + .comment = "special case for E in multiplication by 2", + .shared = "\xfb\xda\x33\xbc\x93\x0c\x08\xdf\x83\x72\x08\xe1\x9a\xfd\xc1\xcf\xe3\xfd\x0f\x8f\x0e\x39\x76\xbe\x34\x77\x5e\x58\xa4\xa7\x77\x1f", + .prv = "\x48\xdb\xcc\x5a\x69\x5f\x15\x14\xbb\xba\xa6\xad\x00\x84\x2b\x69\xd9\xae\x52\x16\xb1\x96\x3a\xdd\x07\xfb\x29\x47\xc9\x7b\x84\x47", + .pub = "\x76\x50\xf2\xc7\x68\x58\xea\x20\x1d\xa2\x02\x2a\xc7\x30\xec\xc4\x36\x54\x85\x2a\xd2\x09\x42\x6d\xd5\xd0\x48\xa9\xde\x2a\x66\x7e", + .ok = 1 }, + { .tc_id = 165, + .comment = "D = 0 in multiplication by 2", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\x58\x91\xc9\x27\x2c\xf9\xa1\x97\x73\x5b\x70\x1e\x57\x15\x26\x8d\x36\xd7\x43\x6b\x7e\x35\x1a\x3e\x99\x7a\x08\x62\xe4\x80\x7d\x4d", + .pub = "\xe0\xeb\x7a\x7c\x3b\x41\xb8\xae\x16\x56\xe3\xfa\xf1\x9f\xc4\x6a\xda\x09\x8d\xeb\x9c\x32\xb1\xfd\x86\x62\x05\x16\x5f\x49\xb8\x00", + .ok = 0 }, + { .tc_id = 166, + .comment = "D = 0 in multiplication by 2", + .shared = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .prv = "\xc0\xf9\xc6\x0a\xea\x73\x73\x1d\x92\xab\x5e\xd9\xf4\xce\xa1\x22\xf9\xa6\xeb\x25\x77\xbd\xa7\x2f\x94\x94\x8f\xea\x4d\x4c\xc6\x5d", + .pub = "\x5f\x9c\x95\xbc\xa3\x50\x8c\x24\xb1\xd0\xb1\x55\x9c\x83\xef\x5b\x04\x44\x5c\xc4\x58\x1c\x8e\x86\xd8\x22\x4e\xdd\xd0\x9f\x11\x57", + .ok = 0 }, + { .tc_id = 167, + .comment = "special case for DA - CB in multiplication by 2", + .shared = "\x8d\xac\xfe\x7b\xea\xaa\x62\xb9\x4b\xf6\xe5\x0e\xe5\x21\x4d\x99\xad\x7c\xda\x5a\x43\x1e\xa0\xc6\x2f\x2b\x20\xa8\x9d\x73\xc6\x2e", + .prv = "\x00\x66\xdd\x76\x74\xfe\x51\xf9\x32\x6c\x1e\x23\x9b\x87\x5f\x8a\xc0\x70\x1a\xae\x69\xa8\x04\xc2\x5f\xe4\x35\x95\xe8\x66\x0b\x45", + .pub = "\xb0\x22\x4e\x71\x34\xcf\x92\xd4\x0a\x31\x51\x5f\x2f\x0e\x89\xc2\xa2\x77\x7e\x8a\xc2\xfe\x74\x1d\xb0\xdc\x39\x39\x9f\xdf\x27\x02", + .ok = 1 }, + { .tc_id = 168, + .comment = "special case for DA - CB in multiplication by 2", + .shared = "\x20\xf1\xd3\xfe\x90\xe0\x8b\xc6\xf1\x52\xbf\x5d\xac\xc3\xed\x35\x89\x97\x85\x33\x3f\x14\x70\xe6\xa6\x2c\x3b\x8c\xbe\x28\xd2\x60", + .prv = "\x80\x06\x7f\x30\xf4\x0d\x61\x31\x8b\x42\x0c\x85\x9f\xce\x12\x8c\x90\x17\xab\x81\xb4\x7b\x76\x02\x8a\x57\xbc\x30\xd5\x85\x68\x46", + .pub = "\x60\x1e\x3f\xeb\xb8\x48\xec\x3e\x57\xfc\xe6\x45\x88\xaa\xd8\x2a\xfc\x9c\x2a\xf9\x9b\xbc\xdf\xfc\xc4\xcd\x58\xd4\xb3\xd1\x5c\x07", + .ok = 1 }, + { .tc_id = 169, + .comment = "special case for DA - CB in multiplication by 2", + .shared = "\x2b\x28\xcc\x51\x40\xb8\x16\xad\xd5\xad\x3a\x77\xa8\x1b\x1c\x07\x3d\x67\xbf\x51\xbf\x95\xbd\xa2\x06\x4a\x14\xeb\x12\xd5\xf7\x66", + .prv = "\x58\x45\x77\x66\x9d\x21\xce\x0a\xe3\xe3\x0b\x02\xc9\x78\x3f\xfe\x97\x70\x9c\xbf\xe3\x96\x88\x9a\xa3\x1e\x8e\xe4\x33\x52\xdc\x52", + .pub = "\x82\xa3\x80\x7b\xbd\xec\x2f\xa9\x93\x8f\xb4\x14\x1e\x27\xdc\x57\x45\x66\x06\x30\x1f\x78\xff\x71\x33\xcf\x24\xf3\xd1\x3e\xe1\x17", + .ok = 1 }, + { .tc_id = 170, + .comment = "special case for DA - CB in multiplication by 2", + .shared = "\x83\x92\x16\x00\x83\xb9\xaf\x9e\x0e\xf4\x4f\xcf\xce\x53\xba\x8f\xf7\x28\x2e\xe7\xa6\xc7\x1a\xb6\x6f\x88\x43\xa5\x5d\x09\xcd\x68", + .prv = "\x18\xe5\x97\xa4\xe2\xcc\xdb\x5e\x80\x52\xd5\x7c\x90\x09\x93\x8c\x2d\x4c\x43\xd6\xd8\xc9\xf9\x3c\x98\x72\x7b\x73\x11\x03\x59\x53", + .pub = "\xf3\x29\xab\x23\x76\x46\x2e\x5f\x31\x28\xa2\x68\x20\x86\x25\x3c\x19\x22\x2a\xc1\xe2\xbc\xa4\x56\x92\xf0\xc3\xb5\x28\xf4\xc4\x28", + .ok = 1 }, + { .tc_id = 171, + .comment = "special case for DA in multiplication by 2", + .shared = "\x42\x18\x4e\x22\xc5\x35\x53\x0c\x45\x7b\xd3\xb4\xf1\x08\x4c\xbf\x5e\x29\x7f\x50\x2f\xe1\x36\xb8\xd1\xda\xec\xf5\x33\x4c\xc9\x6c", + .prv = "\x88\x28\x1c\xc5\x1d\x55\x12\xd8\x81\x4e\xa5\x24\x9b\x87\x9d\xcb\xad\x03\x23\xd3\x85\x12\xda\xfb\xdc\x7b\xa8\x5b\xba\x8c\x8d\x5d", + .pub = "\x4f\xce\x3b\xb6\xc8\xaa\xf0\x22\xdb\xd1\x00\xe3\xcd\xe3\x94\x1b\x37\xd5\x43\xf0\x04\x01\xdb\xa7\xda\x9b\xc1\x43\xdf\xc5\x57\x09", + .ok = 1 }, + { .tc_id = 172, + .comment = "special case for DA in multiplication by 2", + .shared = "\xf6\x54\xd7\x8e\x59\x45\xb2\x4b\xc6\x3e\x3e\x6d\x79\x0e\x0a\xe9\x86\xe5\x39\x37\x76\x40\x68\xb1\xbc\xe9\x20\xe1\xd7\x9b\x75\x6f", + .prv = "\xd0\xe7\x95\x45\x0d\xf0\xa8\x13\xc6\x57\x34\x96\xec\x57\x93\xca\x02\xe1\xbd\xba\xd1\x0e\xd0\x8d\xf8\x3f\xda\xed\x68\xb3\x38\x5f", + .pub = "\x15\xc6\x88\x51\xc1\xdb\x84\x4b\x5a\x1e\xf3\x45\x6a\x65\x9f\x18\x88\x54\xb1\xa7\x5f\xbd\xb2\xf6\x8f\x51\x4c\x92\x89\xce\x71\x1f", + .ok = 1 }, + { .tc_id = 173, + .comment = "special case for DA in multiplication by 2", + .shared = "\xcd\x8a\x09\xb0\x47\x95\xed\xcc\x70\x61\x86\x73\x73\x98\x1a\xa7\x48\x65\x1e\xbd\xce\x5e\xc2\x18\xa3\x35\xb8\x78\xce\xfe\x48\x72", + .prv = "\x30\xb6\x9a\x1c\xc1\xeb\x2d\x0b\x83\xea\x21\x38\x46\xe9\x0a\x2c\x92\x20\x88\xbd\xf2\x94\xa6\x99\x5b\xf6\xe6\xe7\x7c\x64\x6c\x41", + .pub = "\x42\x00\xa2\x42\x43\x43\x37\xb8\x91\x4f\x49\x34\x53\x01\xed\x78\x2b\x13\x59\x4f\x9e\xde\x08\x9c\x41\xfb\x1e\x7e\xa8\x2c\x90\x53", + .ok = 1 }, + { .tc_id = 174, + .comment = "special case for DA in multiplication by 2", + .shared = "\xc9\xf8\x25\x8f\x23\x7d\xb1\xc8\x07\x02\xc5\xc4\xd9\x04\x8d\xfb\xa9\xdf\xe2\x59\xda\x4a\xee\xe9\x0d\xc2\x94\x55\x26\x96\x12\x75", + .prv = "\x78\xb3\x0b\xb6\x3c\xd8\xad\xe7\x1b\x7a\x77\xd4\x26\xf4\x41\x9d\x05\xf1\x99\xff\xef\x34\x9e\x89\xfa\xa9\xd9\xa5\xf2\x1f\x66\x54", + .pub = "\xba\xab\xf0\x17\x4a\xaa\xea\x4d\xe4\x8c\xc8\x3a\xdf\xb0\x40\x14\x61\xa7\x41\x90\x3e\xa6\xfb\x13\x0d\x7d\x64\xb7\xbf\x03\xa9\x66", + .ok = 1 }, + { .tc_id = 175, + .comment = "special case for x_2 in multiplication by 2", + .shared = "\x66\x00\xcb\xe9\x00\x61\x6a\x77\x0a\x12\x6b\x8b\x19\x15\x6d\x5e\x27\xe1\x17\x4b\xd5\x38\xd0\x94\x4e\xb3\xc0\xbe\x48\x99\xc7\x58", + .prv = "\xc0\xb3\x86\xf4\xef\x0d\x46\x98\x68\x64\x04\x97\x7e\x7b\x60\xcb\x6c\x1f\x8b\x60\x12\xa2\x2e\x29\xd6\x22\x4c\x59\x47\x43\x90\x41", + .pub = "\xf1\x2f\x18\xbd\x59\xc1\x26\x34\x8f\x6a\x7a\x9f\x4a\x5f\xdd\x9f\xca\xf5\x81\x34\x50\x73\xa8\x51\xfb\xa0\x98\xe5\xd6\x4b\x4a\x0c", + .ok = 1 }, + { .tc_id = 176, + .comment = "special case for x_2 in multiplication by 2", + .shared = "\x3f\xe7\x10\xd6\x34\x4f\xf0\xcb\x34\x2e\x52\x34\x9e\x1c\x5b\x57\xb7\xa2\x71\xf2\xa1\x33\xbb\x52\x49\xbb\xe4\x0d\xc8\x6e\x1b\x40", + .prv = "\x98\x86\x60\x2e\x71\x9b\xac\xaf\xea\x09\x2b\xb7\x5b\x51\xae\x72\x58\xab\xe1\xa3\x64\xc1\x76\x85\x7f\x3d\xc1\x88\xc0\x3e\x67\x59", + .pub = "\xbe\xe3\x86\x52\x7b\x77\x24\x90\xae\xb9\x6f\xc4\xd2\x3b\x93\x04\x03\x7c\xb4\x43\x0f\x64\xb2\x28\xf3\xd8\xb3\xb4\x98\x31\x9f\x22", + .ok = 1 }, + { .tc_id = 177, + .comment = "special case for x_2 in multiplication by 2", + .shared = "\x71\x37\x3e\xbe\x67\xf3\x9a\x2c\x23\x00\x27\xc7\xdb\x4b\x3b\x74\xba\xb8\x0e\xd2\x12\xb2\x32\x67\x97\x85\xee\x10\xf4\x7c\x30\x4e", + .prv = "\xb8\x39\x60\xf5\xd0\x61\x3c\xda\xac\x6d\xda\x69\x03\x51\x66\x6e\x9f\x27\x7b\xba\x6b\xd4\x06\xb0\xe2\x7a\x18\x86\xbb\x2d\x3e\x46", + .pub = "\xcf\x91\x1a\xc9\x1b\x0d\x94\x40\x49\xce\xc6\x6a\xe5\xef\x0c\x45\x49\xd1\xe6\x12\xe1\x07\xc6\x8e\x87\x26\x3a\x2f\xbc\xf8\x32\x3f", + .ok = 1 }, + { .tc_id = 178, + .comment = "special case for x_2 in multiplication by 2", + .shared = "\x23\x8e\xef\x43\xc5\x89\x82\x2e\x1d\x3d\xe4\x1c\x1c\xc4\x6d\xcf\xec\x7a\x93\xfe\xbf\x37\xc8\x54\x6b\x66\x25\xe1\xa1\x23\x81\x5d", + .prv = "\xd0\x3b\x75\xf0\x9a\xc8\x07\xdf\xd2\xee\x35\x2c\x04\xa1\xf2\x59\x84\x72\x0f\x78\x5f\xfa\xa0\xaf\x88\xbc\x5d\xb6\xff\x9c\x34\x53", + .pub = "\x1e\x6e\xe5\x36\xe4\xf2\x6b\xbf\xb6\x31\x39\x95\x1a\x10\xf3\xba\xb6\x2e\x19\xed\x1e\xf8\x39\x71\x78\xd9\xc5\xd0\x43\x07\xcd\x40", + .ok = 1 }, + { .tc_id = 179, + .comment = "special case for x_2 in multiplication by 2", + .shared = "\x87\xa7\x9c\x9c\x23\x1d\x3b\x95\x26\xb4\x9b\xf3\xd6\x83\xbf\x38\xc3\xc3\x19\xaf\x7c\x7c\x5d\x14\x56\x48\x73\x98\xda\x53\x50\x10", + .prv = "\xd0\x36\x94\x8c\x0e\xc2\x23\xf0\xee\x57\x7e\x39\x0d\xbf\x87\x22\x23\x58\xed\x19\x9f\x28\x23\x34\x5a\xd1\x54\xbb\xc4\xcb\xcc\x47", + .pub = "\x2f\x1c\x79\xad\x84\x88\xdb\x6f\x51\x46\x90\x3b\x2d\xc4\x6c\xfb\xfc\x83\x4b\xbc\xf0\x9b\x4d\xd7\x0c\x27\x4c\x4b\x67\xce\x60\x5d", + .ok = 1 }, + { .tc_id = 180, + .comment = "special case for x_2 in multiplication by 2", + .shared = "\xd6\x83\xca\x61\x94\x45\x2d\x87\x8c\x12\xd7\xda\x35\xf2\x28\x33\xf9\x97\x28\xbb\xa8\x99\x31\xa5\x12\x74\xf6\x12\x10\x33\x6a\x5f", + .prv = "\xd0\x54\xde\xd6\x13\xfe\xbf\x29\x50\xac\x5c\x92\x7f\xcb\x12\x0c\x38\x7d\xe0\xba\x61\xb3\x31\xcd\x33\x02\x4c\x8b\x6e\x73\x70\x48", + .pub = "\xfc\xcf\xe7\x42\xa6\x3e\xd9\xcb\x70\x95\x85\x60\xb5\xa0\x22\x60\x35\x0a\x7e\xcb\xaf\x8c\x57\xae\x04\x5f\x67\x1a\x29\xb4\xb5\x73", + .ok = 1 }, + { .tc_id = 181, + .comment = "special case for AA in multiplication by 2", + .shared = "\xdb\xf6\x20\x35\x16\x63\x58\x40\xcf\x69\xa0\x2d\xb8\x7c\xf0\xd9\x5d\xae\x31\x5d\xa7\xfc\x1e\xc7\xce\x2b\x29\xe1\xf2\xdb\x66\x66", + .prv = "\xe8\x2c\x48\x06\x31\xfb\x15\x3b\xa2\x21\x1f\xe6\x03\x03\x2b\x3e\x71\xb1\x62\xdb\xd3\xc1\x1b\xec\x03\x20\x8f\xfc\xd5\x10\x65\x5f", + .pub = "\xcb\x3d\x4a\x90\xf8\x6b\x30\x11\xda\x33\x69\xd9\x98\x85\x97\xc7\xff\xf1\x49\x92\x73\xb4\xa0\x4f\x84\xd0\xe2\x6e\xd1\x68\x3c\x0d", + .ok = 1 }, + { .tc_id = 182, + .comment = "special case for AA in multiplication by 2", + .shared = "\x1f\xe3\x14\x74\x43\x90\xd5\x25\x27\x8b\x1f\x5f\xbf\x10\x81\x01\xb8\xde\xd5\x87\x08\x13\x75\xed\x4a\xc4\xac\x69\x0d\x92\x41\x4f", + .prv = "\xc0\xc0\x1d\x28\xc1\xca\xb0\x1f\x59\x70\x0a\xca\x5f\x18\xd2\x69\x76\x58\xb3\x7f\xdd\x54\xa3\x39\xff\x39\x1c\x0a\x1a\x1b\x16\x45", + .pub = "\x10\x1e\x13\xf7\xbc\x05\x70\xfa\x26\x38\xca\xa2\x0a\x67\xc6\xe0\xc2\x1d\xab\x13\x2f\x4b\x45\x61\x91\x59\x02\x64\xc4\x93\xd0\x18", + .ok = 1 }, + { .tc_id = 183, + .comment = "special case for AA in multiplication by 2", + .shared = "\xad\x45\x43\x95\xee\x39\x2b\xe6\x77\xbe\x7b\x9c\xb9\x14\x03\x8d\x57\xd2\xd8\x7e\xc5\x6c\xc9\x86\x78\xdd\x84\xf1\x99\x20\x91\x2b", + .prv = "\xc8\x2b\xde\x72\xdf\x36\x47\x96\x88\xc4\x85\xa8\xbf\x44\x2f\x4a\x34\x41\x2e\x42\x9c\x02\xdb\x97\x70\x4f\x03\xda\xf4\xdf\xd5\x42", + .pub = "\xdc\xe1\xec\x08\x43\xfa\x8f\x05\xd9\xc7\x35\x5d\xf5\x98\x39\x1f\x3d\xe2\x54\xec\xd0\xb4\xba\x9e\x6e\xa6\xfd\x9b\x3b\x6c\x2f\x67", + .ok = 1 }, + { .tc_id = 184, + .comment = "special case for AA in multiplication by 2", + .shared = "\xc6\xd6\x49\x92\x55\x13\x33\x98\xf9\xdd\x7f\x32\x52\x5d\xb9\x77\xa5\x38\x11\x88\x00\xbf\xaf\x3a\xad\x8b\xcd\x26\xf0\x2c\x38\x63", + .prv = "\x50\x3f\x69\x76\x17\xfb\x02\xa7\xb8\xef\x00\xba\x34\xe7\xfc\x8c\xe9\x3f\x9e\xc3\xe1\xcb\xfe\x4b\xf2\xc0\x5b\xce\xe0\xcb\x97\x57", + .pub = "\x21\xc2\xb5\x6f\x07\x94\xcf\xee\x25\xcc\x96\x26\x67\x7a\x68\x38\x00\x0e\xb6\x6d\x8c\x4b\x5f\xb0\x7b\x2f\x1d\x91\x2e\x97\xc3\x72", + .ok = 1 }, + { .tc_id = 185, + .comment = "special case for BB in multiplication by 2", + .shared = "\x0d\x74\x21\x4d\xa1\x34\x4b\x11\x1d\x59\xdf\xad\x37\x13\xeb\x56\xef\xfe\x7c\x56\x0c\x59\xcb\xbb\x99\xec\x31\x39\x62\xdb\xba\x58", + .prv = "\x58\xcd\x4c\xa1\xe4\x33\x11\x88\xde\x2b\x28\x89\x41\x9c\xe2\x0e\xc5\xef\x88\xa0\xe9\x3a\xf0\x92\x09\x90\x65\x55\x1b\x90\x4e\x41", + .pub = "\xcc\x3d\x4a\x90\xf8\x6b\x30\x11\xda\x33\x69\xd9\x98\x85\x97\xc7\xff\xf1\x49\x92\x73\xb4\xa0\x4f\x84\xd0\xe2\x6e\xd1\x68\x3c\x0d", + .ok = 1 }, + { .tc_id = 186, + .comment = "special case for BB in multiplication by 2", + .shared = "\x7b\x9d\xbf\x8d\x6c\x6d\x65\x89\x8b\x51\x81\x67\xbf\x40\x11\xd5\x4d\xdc\x26\x5d\x95\x3c\x07\x43\xd7\x86\x8e\x22\xd9\x90\x9e\x67", + .prv = "\x00\x4e\xa3\x44\x8b\x84\xca\x50\x9e\xfe\xc5\xfc\xc2\x4c\x63\xee\x98\x4d\xef\x63\xb2\x9d\xeb\x90\x37\x89\x47\x09\x70\x9c\x09\x57", + .pub = "\x11\x1e\x13\xf7\xbc\x05\x70\xfa\x26\x38\xca\xa2\x0a\x67\xc6\xe0\xc2\x1d\xab\x13\x2f\x4b\x45\x61\x91\x59\x02\x64\xc4\x93\xd0\x18", + .ok = 1 }, + { .tc_id = 187, + .comment = "special case for BB in multiplication by 2", + .shared = "\xfb\x0e\x02\x09\xc5\xb9\xd5\x1b\x40\x11\x83\xd7\xe5\x6a\x59\x08\x1d\x37\xa6\x2a\xb1\xe0\x57\x53\xa0\x66\x7e\xeb\xd3\x77\xfd\x39", + .prv = "\xc8\xa6\xeb\x00\xa4\xd7\x4b\xbd\xff\x23\x95\x22\xc3\xc8\x91\xed\x7c\xe1\x90\x4b\xe2\xa3\x29\xcd\x0a\xe0\x06\x1a\x25\x3c\x95\x42", + .pub = "\xdd\xe1\xec\x08\x43\xfa\x8f\x05\xd9\xc7\x35\x5d\xf5\x98\x39\x1f\x3d\xe2\x54\xec\xd0\xb4\xba\x9e\x6e\xa6\xfd\x9b\x3b\x6c\x2f\x67", + .ok = 1 }, + { .tc_id = 188, + .comment = "special case for BB in multiplication by 2", + .shared = "\xdb\xe7\xa1\xfe\x3b\x33\x7c\x97\x20\x12\x3e\x6f\xcc\x02\xcf\x96\x95\x3a\x17\xdc\x9b\x39\x5a\x22\x06\xcb\x1b\xf9\x1d\x41\x75\x6e", + .prv = "\x50\x32\x2f\xf0\xd0\xdc\xdd\x6b\x14\xf3\x07\xc0\x4d\xfe\xce\xfe\x5b\x7c\xde\xaf\x92\xbf\xfb\x91\x9e\x9d\x62\xed\x27\x07\x90\x40", + .pub = "\x22\xc2\xb5\x6f\x07\x94\xcf\xee\x25\xcc\x96\x26\x67\x7a\x68\x38\x00\x0e\xb6\x6d\x8c\x4b\x5f\xb0\x7b\x2f\x1d\x91\x2e\x97\xc3\x72", + .ok = 1 }, + { .tc_id = 189, + .comment = "special case for D in multiplication by 2", + .shared = "\x97\xbd\x42\x09\x3e\x0d\x48\xf9\x73\xf0\x59\xdd\x7a\xb9\xf9\x7d\x13\xd5\xb0\xd5\xee\xdf\xfd\xf6\xda\x3c\x3c\x43\x28\x72\xc5\x49", + .prv = "\xe0\x32\x8c\x7d\x18\x8d\x98\xfa\xf2\xac\x72\xd7\x28\xb7\xd1\x4f\x2b\xbb\xd7\xa9\x4d\x0f\xbd\x8e\x8f\x79\xab\xe0\xb1\xfe\x10\x55", + .pub = "\xe5\x8b\xac\xce\xde\x32\xbc\xf3\x3b\x3b\x6e\x3d\x69\xc0\x2a\xf8\x28\x4a\x96\x31\xde\x74\xb6\xaf\x3f\x04\x6a\x93\x69\xdf\x04\x0f", + .ok = 1 }, + { .tc_id = 190, + .comment = "special case for D in multiplication by 2", + .shared = "\x99\xbc\xbc\x7b\x9a\xa5\xe2\x55\x80\xf9\x2b\xf5\x89\xe9\x5d\xae\x87\x4b\x83\xe4\x20\x22\x5d\x8a\x93\xe1\x8e\x96\xda\xc0\x0b\x63", + .prv = "\x50\x17\x67\x9a\x17\xbd\x23\xad\xf9\x5a\xd4\x7e\x31\x0f\xc6\x52\x6f\x4b\xa9\xca\x3b\x08\x39\xb5\x3b\xd0\xd9\x28\x39\xeb\x5b\x4f", + .pub = "\xc6\xd5\xc6\x93\xfc\x0a\x4e\x2d\xf6\xb2\x90\x02\x68\x60\x56\x6a\x16\x6b\x6d\x7a\xeb\xe3\xc9\x88\x28\xd4\x92\x74\x5c\x8d\xf9\x36", + .ok = 1 }, + { .tc_id = 191, + .comment = "special case for D in multiplication by 2", + .shared = "\xaf\xa2\xad\xb5\x2a\x67\x0a\xa9\xc3\xec\x30\x20\xd5\xfd\xa2\x85\x47\x4e\xde\x5c\x4f\x4c\x30\xe9\x23\x8b\x88\x4a\x77\x96\x94\x43", + .prv = "\x28\x64\xaa\xf6\x1c\x14\x6d\xf0\x6c\xc2\x56\xb0\x65\xf6\x6b\x34\x98\x5c\xc0\x15\xda\x5b\x1d\x64\x7a\x6e\xd4\xe2\xc7\x6b\xfc\x43", + .pub = "\xd1\x5f\x4b\xf2\xef\x5c\x7b\xda\x4e\xe9\x51\x96\xf3\xc0\xdf\x71\x0d\xf5\xd3\xd2\x06\x36\x0f\xc3\x17\x4e\xa7\x5c\x3a\xa3\xa7\x43", + .ok = 1 }, + { .tc_id = 192, + .comment = "special case for D in multiplication by 2", + .shared = "\xe6\xa2\xfc\x8e\xd9\x3c\xe3\x53\x01\x78\xfe\xf9\x4b\xb0\x05\x6f\x43\x11\x8e\x5b\xe3\xa6\xea\xbe\xe7\xd2\xed\x38\x4a\x73\x80\x0c", + .prv = "\x18\x4a\x6c\xfb\xab\xcb\xd1\x50\x7a\x2e\xa4\x1f\x52\x79\x65\x83\xdb\xdb\x85\x1b\x88\xa8\x57\x81\xee\x8e\x3c\x28\x78\x2c\x33\x49", + .pub = "\x6d\xff\xb0\xa2\x58\x88\xbf\x23\xcf\x1a\xc7\x01\xbf\xbd\xed\xe8\xa1\x8e\x32\x3b\x9d\x4d\x3d\x31\xe5\x16\xa0\x5f\xce\x7c\xe8\x72", + .ok = 1 }, + { .tc_id = 193, + .comment = "special case for D in multiplication by 2", + .shared = "\x7f\xc2\x87\x81\x63\x14\x10\xc5\xa6\xf2\x5c\x9c\xfd\x91\xec\x0a\x84\x8a\xdb\x7a\x9e\xb4\x0b\xc5\xb4\x95\xd0\xf4\x75\x3f\x22\x60", + .prv = "\xc8\x5f\x95\x4b\x85\xbc\x10\x2a\xca\x79\x96\x71\x79\x34\x52\x17\x65\x38\xd0\x77\x86\x2e\xe4\x5e\x0b\x25\x36\x19\x76\x7d\xff\x42", + .pub = "\x21\xf8\x6d\x12\x3c\x92\x3a\x92\xaa\xf2\x56\x3d\xf9\x4b\x5b\x5c\x93\x87\x4f\x5b\x7a\xb9\x95\x4a\xaa\x53\xe3\xd7\x2f\x0f\xf6\x7e", + .ok = 1 }, + { .tc_id = 194, + .comment = "special case for D in multiplication by 2", + .shared = "\x31\x4d\x8a\x2b\x5c\x76\xcc\x7e\xe1\x21\x7d\xf2\x28\x3b\x7e\x67\x24\x43\x6e\x27\x3a\xeb\x80\x62\x8d\xce\x06\x00\xab\x47\x8a\x63", + .prv = "\x50\xe3\xe5\xa9\xa1\x9b\xe2\xee\x35\x48\xb0\x96\x46\x72\xfb\x5e\x31\x34\xcb\x0d\x2f\x7a\xdf\x00\x0e\x45\x56\xd0\xff\xa3\x76\x43", + .pub = "\x58\x7c\x34\x7c\x8c\xb2\x49\x56\x4a\xb7\x73\x83\xde\x35\x8c\xc2\xa1\x9f\xe7\x37\x0a\x84\x76\xd4\x30\x91\x12\x35\x98\x94\x1c\x7f", + .ok = 1 }, + { .tc_id = 195, + .comment = "special case for DA + CB in multiplication by 2", + .shared = "\x2b\xfd\x8e\x53\x08\xc3\x44\x98\xeb\x2b\x4d\xaf\x9e\xd5\x1c\xf6\x23\xda\x3b\xea\xeb\x0e\xfd\x3d\x68\x7f\x2b\x8b\xec\xbf\x31\x01", + .prv = "\x08\xec\xe5\x80\xbb\x6d\xdf\x96\x55\x9b\x81\xd7\xa9\x7d\xd4\x53\x1d\xef\x6c\xc7\x8d\x44\x8a\x70\xce\xba\xbd\xd2\x6c\xaa\xb1\x46", + .pub = "\xf5\xc6\x31\x1a\x1d\xd1\xb9\xe0\xf8\xcf\xd0\x34\xac\x6d\x01\xbf\x28\xd9\xd0\xf9\x62\xa1\x93\x4a\xe2\xcb\x97\xcb\x17\x3d\xd8\x10", + .ok = 1 }, + { .tc_id = 196, + .comment = "special case for DA + CB in multiplication by 2", + .shared = "\xd5\x3c\x3d\x6f\x53\x8c\x12\x6b\x93\x36\x78\x5d\x1d\x4e\x69\x35\xdc\x8b\x21\xf3\xd7\xe9\xc2\x5b\xc2\x40\xa0\x3e\x39\x02\x33\x63", + .prv = "\xa8\x86\x03\x3e\x9d\xc2\xb6\xa9\x13\xff\xfb\xc2\xbd\x40\x2e\x8c\x11\xec\x34\xd4\x9c\x0d\xc0\xfa\x14\x29\x32\x9b\x69\x4a\x28\x5f", + .pub = "\x93\x16\xc0\x6d\x27\xb2\x4a\xbc\x67\x3f\xfb\x51\x05\xc5\xb9\xa8\x9b\xdf\xaa\x79\xe8\x1c\xdb\xb8\x95\x56\x07\x43\x77\xc7\x03\x20", + .ok = 1 }, + { .tc_id = 197, + .comment = "special case for DA + CB in multiplication by 2", + .shared = "\x45\x31\x88\x1a\xd9\xcf\x01\x16\x93\xdd\xf0\x28\x42\xfb\xda\xb8\x6d\x71\xe2\x76\x80\xe9\xb4\xb3\xf9\x3b\x4c\xf1\x5e\x73\x7e\x50", + .prv = "\x98\xb1\xcc\x20\x20\xa8\xec\x57\x5d\x5c\x46\xc7\x60\x24\xcf\x7c\x7a\xd7\x62\x8e\xb9\x09\x73\x0b\xc4\xf4\x60\xaa\xf0\xe6\xda\x4b", + .pub = "\x8a\x41\x79\x80\x7b\x07\x64\x9e\x04\xf7\x11\xbf\x94\x73\xa7\x99\x93\xf8\x42\x93\xe4\xa8\xb9\xaf\xee\x44\xa2\x2e\xf1\x00\x0b\x21", + .ok = 1 }, + { .tc_id = 198, + .comment = "special case for DA + CB in multiplication by 2", + .shared = "\x7b\xa4\xd3\xde\x69\x7a\xa1\x1a\xdd\xf3\x91\x1e\x93\xc9\x4b\x7e\x94\x3b\xef\xf3\xe3\xb1\xb5\x6b\x7d\xe4\x46\x1f\x9e\x48\xbe\x6b", + .prv = "\xc8\xe1\x93\xde\x16\x2a\xa3\x49\xa3\x43\x2c\x7a\x0c\x05\x21\xd9\x2c\xbc\x5e\x3b\xf8\x26\x15\xe4\x29\x55\xdd\x67\xec\x12\x34\x5f", + .pub = "\xa7\x73\x27\x7a\xe1\x02\x9f\x85\x47\x49\x13\x7b\x0f\x3a\x02\xb5\xb3\x56\x0b\x9c\x4c\xa4\xdb\xde\xb3\x12\x5e\xc8\x96\xb8\x18\x41", + .ok = 1 }, + { .tc_id = 199, + .comment = "special case for DA + CB in multiplication by 2", + .shared = "\xbc\xf0\x88\x40\x52\xf9\x12\xa6\x3b\xba\xb8\xc5\xc6\x74\xb9\x1c\x49\x89\xae\x05\x1f\xa0\x7f\xcf\x30\xcb\x53\x17\xfb\x1f\x2e\x72", + .prv = "\x88\xe0\x12\x37\xb3\x36\x01\x40\x75\x67\x60\x82\xaf\xbd\xe5\x1d\x59\x5d\x47\xe1\xfa\x52\x14\xb5\x1a\x35\x1a\xbb\xf6\x49\x14\x42", + .pub = "\x1e\xce\xb2\xb3\x76\x32\x31\xbc\x3c\x99\xdc\x62\x26\x6a\x09\xab\x5d\x36\x61\xc7\x56\x52\x4c\xdd\xc5\xaa\xbc\xed\xee\x92\xda\x61", + .ok = 1 }, + { .tc_id = 200, + .comment = "special case for DA + CB in multiplication by 2", + .shared = "\xe5\x77\x2a\x92\xb1\x03\xee\x69\x6a\x99\x97\x05\xcf\x07\x11\x0c\x46\x0f\x05\x45\x68\x2d\xb3\xfa\xc5\xd8\x75\xd6\x96\x48\xbc\x68", + .prv = "\xe8\x23\x13\xe4\x51\xa1\x98\xdc\xe4\xae\x95\xc6\x83\x2a\x82\x81\xd8\x47\xfc\x87\xb2\x8d\xb0\x0f\xe4\x37\x57\xc1\x6c\xc4\x9c\x4a", + .pub = "\x9a\x2a\xcb\xb3\xb5\xa3\x86\xa6\x10\x2e\x37\x28\xbe\x3a\x97\xde\x03\x98\x1d\x5c\x71\xfd\x2d\x95\x46\x04\xbe\xe3\xd3\xd0\xce\x62", + .ok = 1 }, + { .tc_id = 201, + .comment = "special case for DA + CB in multiplication by 2", + .shared = "\x37\x8c\x29\xe3\xbe\x97\xa2\x1b\x9f\x81\xaf\xca\x0d\x0f\x5c\x24\x2f\xd4\xf8\x96\x11\x4f\x77\xa7\x71\x55\xd0\x6c\xe5\xfb\xfa\x5e", + .prv = "\x28\x28\x59\x4d\x16\x76\x8e\x58\x6d\xf3\x96\x01\xec\xc8\x6d\x3f\xad\x63\x89\xd8\x72\xb5\x3f\xca\x3e\xdc\xaf\x6f\xb9\x58\xf6\x53", + .pub = "\x27\x43\x0e\x1c\x2d\x30\x89\x70\x8b\xca\x56\xd7\xa5\xad\x03\x79\x28\x28\xd4\x76\x85\xb6\x13\x1e\x02\x3d\xd0\x80\x87\x16\xb8\x63", + .ok = 1 }, + { .tc_id = 202, + .comment = "special case for z_2 in multiplication by 2", + .shared = "\x7e\xb4\x8a\x60\xb1\x4f\xb9\xea\x57\x28\xf6\x41\x0a\xef\x62\x7d\x15\x22\xfa\xd4\x81\xb9\x34\xaf\x64\xe2\xc4\x83\xb6\x4d\x58\x5f", + .prv = "\xa8\x4f\x48\x8e\x19\x31\x39\xf9\x86\xb0\xe5\xb2\x49\x63\x5b\x13\x7d\x38\x5e\x42\x03\x42\xae\xf1\xf1\x94\xfc\xde\x1f\xe5\xe8\x50", + .pub = "\x4e\xf3\x67\x90\x1a\xac\x8b\xa9\x0a\x50\xe0\xcf\x86\xca\x4e\x4a\x3f\xf1\x64\xfb\x12\x16\x05\xbe\x34\x6e\x2e\x48\xd0\x4a\xc9\x12", + .ok = 1 }, + { .tc_id = 203, + .comment = "special case for z_2 in multiplication by 2", + .shared = "\xb7\x1b\xdb\xed\x78\x02\x3a\x06\xde\xed\x1c\x18\x2e\x14\xc9\x8f\x7c\xf4\x6b\xc6\x27\xa4\xa2\xc1\x02\xad\x23\xc4\x1c\xf3\x24\x54", + .prv = "\x30\xfd\x2a\x78\x1e\x09\x5c\x34\xa4\x83\x90\x7b\x3d\xd2\xd8\xbd\x27\x36\xe2\x79\x61\x7b\xfa\x6b\x8b\x4e\x0e\x1c\xf9\x0f\xbd\x46", + .pub = "\xd1\xde\x30\x3c\x4d\xdd\x05\xd5\x7c\x29\xdf\x92\xad\x17\x2d\xd8\xc8\xf4\x24\xe6\x3e\xc9\x34\x45\xbe\xae\xa4\x4f\x9d\x12\x4b\x17", + .ok = 1 }, + { .tc_id = 204, + .comment = "special case for z_2 in multiplication by 2", + .shared = "\x5b\xb5\x68\x77\xca\xf2\xcd\xac\x98\x61\x1b\x60\x36\x7f\xbb\x74\x26\x59\x84\x61\x4e\x5e\x73\x99\x6e\x8e\xa1\xbd\x6f\x74\x9f\x1a", + .prv = "\x28\x31\x2e\x17\xb4\x7d\xd3\x2d\x90\x56\x11\x68\x24\x51\x87\x96\x3c\x74\x69\xa3\x1c\x88\x1e\x4a\x5c\x94\x38\x42\x62\xb7\x19\x59", + .pub = "\x5b\xcc\xd7\x39\xfd\x75\x17\xd9\x34\x4b\xf6\xb2\xb0\xf1\x9a\x1e\x0c\x38\xd9\x34\x9a\x25\xad\x1f\x94\xaf\x4a\x2c\xdc\xf5\xe8\x37", + .ok = 1 }, + { .tc_id = 205, + .comment = "special case for z_2 in multiplication by 2", + .shared = "\xb5\x68\xed\x46\xd0\x4f\x62\x91\xf8\xc1\x76\xdc\xa8\xaf\xf6\xd2\x21\xde\x4c\x9c\xce\x4b\x40\x4d\x54\x01\xfb\xe7\x0a\x32\x45\x01", + .prv = "\xa8\x76\x40\xcf\x82\x37\xb4\x73\xc6\x38\xb3\xe9\xdf\x08\x64\x4e\x86\x07\xe5\x63\xb5\x96\x43\x63\xcc\xc4\x21\x33\xb2\x99\x67\x42", + .pub = "\x8a\x7a\x93\x93\x10\xdf\x7e\xa7\x68\x45\x4d\xf5\x1b\xcd\x0d\xfb\xd7\xbe\x4f\xcb\xb2\xff\xc9\x84\x29\xd9\x13\xec\x69\x11\xf3\x37", + .ok = 1 }, + { .tc_id = 206, + .comment = "special case for z_2 in multiplication by 2", + .shared = "\x11\xfb\x44\xe8\x10\xbc\xe8\x53\x6a\x95\x7e\xaa\x56\xe0\x2d\x04\xdd\x86\x67\x00\x29\x8f\x13\xb0\x4e\xbe\xb4\x8e\x20\xd9\x36\x47", + .prv = "\x78\x0c\x5b\x88\x27\x20\xd8\x5e\x5d\xdf\xaf\x10\x33\xe9\xa1\x38\x5d\xf9\xe2\x16\x89\xee\xda\x4d\xcc\x74\x44\xad\x28\x33\x0a\x50", + .pub = "\xfe\x35\x90\xfc\x38\x2d\xa7\xa8\x2e\x28\xd0\x7f\xaf\xe4\x0d\x4a\xfc\x91\x18\x3a\x45\x36\xe3\xe6\xb5\x50\xfe\xe8\x4a\x4b\x7b\x4b", + .ok = 1 }, + { .tc_id = 207, + .comment = "special case for z_2 in multiplication by 2", + .shared = "\x85\xd9\xdb\x8f\x18\x2b\xc6\x8d\xb6\x7d\xe3\x47\x1f\x78\x6b\x45\xb1\x61\x9a\xec\x0f\x32\xb1\x08\xac\xe3\x0e\xe7\xb2\x62\x43\x05", + .prv = "\x20\x9e\x5e\x0a\xe1\x99\x4b\xd8\x59\xce\x89\x92\xb6\x2e\xc3\xa6\x6d\xf2\xeb\x50\x23\x2b\xcc\x3a\x3d\x27\xb6\x61\x4f\x6b\x01\x4d", + .pub = "\xfa\xd9\xab\x3e\x80\x3b\x49\xfc\x81\xb2\x7e\xe6\x9d\xb6\xfc\x9f\xdb\x82\xe3\x54\x53\xb5\x9e\xf8\xfa\xb2\xa3\xbe\xb5\xe1\x13\x4c", + .ok = 1 }, + { .tc_id = 208, + .comment = "special case for z_2 in multiplication by 2", + .shared = "\x61\xd4\xef\x71\xcb\xe7\xbe\x31\x28\xbe\x82\x9a\xb2\x6e\xd3\x46\x3e\xb4\xab\x25\x93\x7c\x30\x97\x88\xe8\x76\xb2\x34\x12\xaa\x7c", + .prv = "\x80\x6d\x1d\xee\x5f\xf6\xae\xa8\x4a\x84\x89\x16\x99\x1a\x89\xef\x36\x25\x58\x3e\x1b\xd4\xae\x0b\x3d\xd2\x5c\x25\x24\xa4\xff\x46", + .pub = "\x98\xbe\xd9\x55\xf1\x51\x6c\x7a\x44\x27\x51\xac\x59\x00\x46\xd7\xd5\x2c\xa6\x4f\x76\xdf\x82\xbe\x09\xd3\x2e\x5d\x33\xb4\x90\x73", + .ok = 1 }, + { .tc_id = 209, + .comment = "special case for z_2 in multiplication by 2", + .shared = "\x5b\xa4\x39\x4e\xd1\xa6\x64\x81\x1b\x01\x55\x79\x44\xbe\xcf\x75\x85\x65\x2a\x8a\xcb\xdb\xf8\x06\x74\x29\x11\x20\x7b\xd7\x93\x46", + .prv = "\x00\xf9\x8b\x02\xae\x0d\xf5\x27\x4c\xc8\x99\xf5\x26\xeb\x1b\x87\x72\x89\xe0\x96\x34\x40\xa5\x7d\xd9\x7e\x41\x4c\xdd\x2f\x7c\x51", + .pub = "\xe5\x9b\xe4\x91\x7b\x3f\x05\xb6\xfc\x87\x48\xc9\xb9\x0f\x1b\x91\x02\x73\xc9\xc6\xe1\x7f\xf9\x6e\xf4\x15\xff\x3d\x92\x7d\x98\x7e", + .ok = 1 }, + { .tc_id = 210, + .comment = "special case for A in multiplication by 2", + .shared = "\xa5\x95\x25\x88\x61\x3e\xb7\xa5\xcd\x49\xdd\x52\x6f\x1f\x20\xa4\xf0\xff\xe9\x42\x3e\x82\xce\xa3\x02\xc2\xdd\x90\xce\x55\x99\x55", + .prv = "\xd8\x6c\x18\xf2\xbe\x39\x6b\x3b\xb7\x2f\x22\xe6\xec\xe2\x2e\x27\x3a\xf6\xe1\x50\x6a\x1c\x09\xad\x4d\x01\xbd\xd2\xf4\x39\xf8\x43", + .pub = "\x8c\x98\x85\xa2\x6c\xb3\x34\x05\x47\x00\xa2\x70\xf7\xa5\xf4\xaa\xc0\x6b\xad\x82\x63\xb6\x51\xeb\xf0\x71\x2e\xca\x1e\xbb\x64\x16", + .ok = 1 }, + { .tc_id = 211, + .comment = "special case for A in multiplication by 2", + .shared = "\xcb\x6f\xb6\x23\x08\x4b\x61\x97\x44\x3e\xc9\xba\x10\x50\xc0\x92\x33\x32\xe5\xe8\x29\xae\x01\x94\x26\x9c\xfa\xf9\x20\xa4\x36\x01", + .prv = "\xf8\x1a\xad\xb9\x05\x3e\xb6\x98\x99\x6d\x0f\x78\x1d\x9c\xda\x67\xf8\x2d\xde\xfa\x39\x87\xd2\x76\xff\x5a\x94\xff\xdf\x5d\x25\x5f", + .pub = "\xf6\x13\x5f\xe9\x74\x1c\x2c\x9d\xe7\xdc\xf7\x62\x7e\xf0\x88\x32\xf3\x51\xcb\x32\x5d\xbb\x3a\x26\xf9\x3a\x2b\x48\x62\x0e\x17\x27", + .ok = 1 }, + { .tc_id = 212, + .comment = "special case for A in multiplication by 2", + .shared = "\x9e\x52\x60\x79\xc2\xfc\xf1\x24\x26\xae\x6c\x2a\x54\xb5\xff\xb7\x0f\x2e\xc6\x62\xe2\x9e\xa5\xce\x0c\x83\x85\xc3\xb2\x1c\xd1\x62", + .prv = "\x30\x5b\x4d\xb4\x32\x1b\x49\x23\xfc\x55\x9b\xf9\x1d\xf6\x77\xd0\xe1\x2c\x3a\x31\xb1\x6e\xc6\x55\xcb\x70\x8b\x75\x9d\x7c\x11\x4d", + .pub = "\xf6\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xbf\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f", + .ok = 1 }, + { .tc_id = 213, + .comment = "special case for A in multiplication by 2", + .shared = "\x63\x29\xc7\xdc\x23\x18\xec\x36\x15\x3e\xf4\xf6\xf9\x1b\xc6\xe7\xd1\xe0\x08\xf5\x29\x30\x65\xd9\x58\x6a\xb8\x8a\xbb\x58\xf2\x41", + .prv = "\x90\x06\x38\xd1\x97\x98\x02\xdb\x9b\x52\xe4\xdd\x84\xfa\x19\x57\x9f\x61\xcd\x7b\xef\x3c\x0b\x62\xfc\xcc\xae\xaa\x15\xfa\x48\x4d", + .pub = "\xf6\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40", + .ok = 1 }, + { .tc_id = 214, + .comment = "special case for A in multiplication by 2", + .shared = "\x60\x3f\x4f\xc4\x10\x08\x1f\x88\x09\x44\xe0\xe1\x3d\x56\xfc\x54\x2a\x43\x0e\xec\x81\x3f\xad\x30\x2b\x7c\x5a\xc3\x80\x57\x6f\x1c", + .prv = "\x38\x57\x5c\xf7\xc8\x69\x1e\xcc\x79\xcd\x5f\x8d\x7d\x47\x03\xaa\x48\x59\x2f\xf6\xe7\xf6\x47\x31\xc2\xd9\x8a\x19\xae\xae\x51\x4f", + .pub = "\xf6\xeb\xa0\x16\x8b\xe3\xd3\x62\x18\x23\x08\x9d\x81\x0f\x77\xcd\x0c\xae\x34\xcd\xa2\x44\xc5\xd9\x06\xc5\xd4\xb7\x9d\xf1\xe8\x58", + .ok = 1 }, + { .tc_id = 215, + .comment = "special case for A in multiplication by 2", + .shared = "\x83\x4b\xba\xd5\x47\x0e\x14\x98\xc4\xb0\x14\x87\x82\xdf\xe6\x30\xe8\xbf\xad\xff\x19\x97\xde\x80\x2a\xc8\xce\x30\x2a\x1b\xda\x28", + .prv = "\xe8\x8b\xd0\x2c\x70\x16\x54\x7a\x24\xf4\x28\xbc\x2a\x9d\xcc\xca\xd6\xc6\xf8\x80\xc1\x7b\xff\xcf\x66\xfc\x68\x45\x96\x27\xaf\x4e", + .pub = "\x60\x67\x7a\x5d\x93\x4c\xcb\xfa\xb8\xff\x5d\x8f\x08\x5a\x0b\x55\x3f\x94\x52\x7d\x9c\x49\xae\x14\x0f\x8e\xd1\x35\xe1\x44\x9b\x69", + .ok = 1 }, + { .tc_id = 216, + .comment = "special case for B in multiplication by 2", + .shared = "\xec\x90\x70\xad\x34\x91\xa5\xff\x50\xd7\xd0\xdb\x6c\x9c\x84\x47\x83\xdd\xe1\xc6\xfb\xd4\xfe\x16\x3e\x9a\xde\x1c\xe9\xcd\x04\x1d", + .prv = "\x90\x36\xed\x7d\x68\xf7\x44\x8a\xc4\x40\xdc\x51\x21\x6b\x49\x84\x0d\xca\xbd\x3d\x5e\x32\xe3\xb4\xff\xc3\x2a\x5f\xe9\xe9\x67\x42", + .pub = "\x8d\x98\x85\xa2\x6c\xb3\x34\x05\x47\x00\xa2\x70\xf7\xa5\xf4\xaa\xc0\x6b\xad\x82\x63\xb6\x51\xeb\xf0\x71\x2e\xca\x1e\xbb\x64\x16", + .ok = 1 }, + { .tc_id = 217, + .comment = "special case for B in multiplication by 2", + .shared = "\xdc\x6d\x05\xb9\x2e\xdc\xdb\x5d\xc3\x34\xb1\xfc\x3d\xff\x58\xfe\x5b\x24\xa5\xc5\xf0\xb2\xd4\x31\x15\x55\xd0\xfc\x94\x5d\x77\x59", + .prv = "\x90\xc5\x5e\x77\xaa\x0f\xe4\xaf\xb1\x28\x71\x09\xfd\x01\x0f\x52\x63\x64\xde\xa1\x8d\x88\xe2\xfd\x87\x0a\xc0\x1b\x66\xe3\xfa\x4e", + .pub = "\xf7\x13\x5f\xe9\x74\x1c\x2c\x9d\xe7\xdc\xf7\x62\x7e\xf0\x88\x32\xf3\x51\xcb\x32\x5d\xbb\x3a\x26\xf9\x3a\x2b\x48\x62\x0e\x17\x27", + .ok = 1 }, + { .tc_id = 218, + .comment = "special case for B in multiplication by 2", + .shared = "\x1b\x17\x4b\x18\x99\x81\xd8\x1b\xc6\x88\x79\x32\x08\x3e\x84\x88\xdf\x8b\xbb\xed\x57\xf9\x21\x4c\x9c\xfa\x59\xd5\x9b\x57\x23\x59", + .prv = "\xa0\x21\xba\x2f\xd4\xe3\xad\x57\xbc\xbf\x20\x4d\x6f\x6c\x3e\x80\x18\xd8\x97\x85\x52\x63\x3b\x6d\xff\x1b\x74\x47\xbf\x52\x94\x59", + .pub = "\xf7\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xbf\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f", + .ok = 1 }, + { .tc_id = 219, + .comment = "special case for B in multiplication by 2", + .shared = "\x15\xa0\x52\x14\x8a\xba\xad\x1b\x0f\x2e\x74\x81\xa3\x4e\xdb\x61\x40\x35\x89\x43\x9b\x5b\xd5\xe5\x64\x6c\xec\xeb\xe2\xa1\xbe\x2b", + .prv = "\x30\x35\x08\x3e\x98\x48\x37\x58\x7f\x6b\x73\x46\xaf\x87\x1b\xf3\xfc\x95\x81\xc5\x0e\xb5\x5c\x83\xae\xfa\xbe\xed\x68\xce\xe3\x49", + .pub = "\xf7\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40", + .ok = 1 }, + { .tc_id = 220, + .comment = "special case for B in multiplication by 2", + .shared = "\x1d\x04\x8c\xbe\x2f\x8d\xf0\x7c\x23\x3a\x8f\x93\x70\x6f\x30\x7d\x17\x13\x0c\x24\x97\xfb\x75\x2e\xea\xa3\x1f\xe3\xed\xfc\x72\x5a", + .prv = "\x30\x43\x5c\xe1\x87\xf2\x72\x3f\x9a\x3b\xde\xa0\xee\xf8\x92\x20\x7e\x15\x2e\x4c\xee\x89\x85\xfa\x72\xd2\xdb\x41\x47\xbd\x2a\x53", + .pub = "\xf7\xeb\xa0\x16\x8b\xe3\xd3\x62\x18\x23\x08\x9d\x81\x0f\x77\xcd\x0c\xae\x34\xcd\xa2\x44\xc5\xd9\x06\xc5\xd4\xb7\x9d\xf1\xe8\x58", + .ok = 1 }, + { .tc_id = 221, + .comment = "special case for B in multiplication by 2", + .shared = "\xcb\x92\xa9\x8b\x6a\xa9\x9a\xc9\xe3\xc5\x75\x0c\xea\x6f\x08\x46\xb0\x18\x1f\xaa\x59\x92\x84\x5b\x79\x89\x23\xd4\x19\xe8\x27\x56", + .prv = "\x58\x0f\x0a\x9b\xba\x72\x81\xa3\x0f\xb0\x33\x49\x0e\x0f\x42\x9f\x22\xe3\xf2\x67\x85\x2c\xae\xac\xef\xa3\xe5\x29\x1f\x0e\x61\x4e", + .pub = "\x61\x67\x7a\x5d\x93\x4c\xcb\xfa\xb8\xff\x5d\x8f\x08\x5a\x0b\x55\x3f\x94\x52\x7d\x9c\x49\xae\x14\x0f\x8e\xd1\x35\xe1\x44\x9b\x69", + .ok = 1 }, + { .tc_id = 222, + .comment = "special case for C in multiplication by 2", + .shared = "\xf1\xbd\x12\xd9\xd3\x2c\x6f\x4c\x5b\x2d\xcb\x3a\x5c\x52\xd9\xfd\x45\x4d\x52\xca\x70\x4c\x2c\x13\x79\x56\xec\x8a\xd9\xae\xf1\x07", + .prv = "\x70\x90\x98\xfe\xb2\xe2\x5c\x67\xb4\xbf\xd3\xbe\x0a\x01\xaf\x40\x9a\xdb\x6d\xa5\x2b\x3f\xbe\x3d\x97\x06\x42\xdd\x2c\x98\x38\x56", + .pub = "\xc8\x23\x9b\x71\x01\x36\xfe\x43\x1f\xb4\xd9\x84\x36\x15\x7e\x47\xc9\xe7\x8a\x10\xf0\x9f\xf9\x2e\x98\xba\xff\x15\x99\x26\x06\x1c", + .ok = 1 }, + { .tc_id = 223, + .comment = "special case for C in multiplication by 2", + .shared = "\xe6\xf1\xc4\x94\xc9\xe4\xbd\x23\x25\xc1\x71\x83\xe8\x2d\x31\xab\x0b\xbe\xe6\xc8\x47\xd4\xb0\xe4\xa9\x9c\x7c\x68\x91\x11\x7c\x3f", + .prv = "\x18\x5a\xc6\x2e\x72\x9f\x88\x52\x89\x50\x92\x6c\x0d\xe7\xc4\x81\xc9\x24\xbf\x9c\xf2\x6a\x12\x2f\x44\x3b\x86\x1e\x8b\x6a\xf6\x40", + .pub = "\xb7\xa2\xf7\x9e\x0d\xe9\xb5\x81\x47\x69\x1b\x55\x46\xd9\xec\x46\x3d\xa8\x32\x5e\x14\x40\xe5\x8b\xb2\x0a\xa1\x29\xd1\xb9\x73\x27", + .ok = 1 }, + { .tc_id = 224, + .comment = "special case for C in multiplication by 2", + .shared = "\xaa\x2a\x12\xed\xf7\x52\xd2\x79\xbd\xb0\x00\xfb\x14\x05\xa5\xdf\x8c\x5f\x1d\x41\x30\x9b\x4f\x2b\xd4\x1a\xed\x7a\xc1\xed\x01\x49", + .prv = "\xf0\x37\x43\xee\xad\x7c\x2f\x77\x19\x79\x43\x24\xf2\x71\x07\x28\x17\xd1\xa0\x4c\xbd\xa4\x2b\x23\x2f\x3b\xee\x43\xf3\x97\xcc\x40", + .pub = "\x2d\xc6\x24\xe1\x66\x3f\x42\xa7\xb9\x33\x63\x50\xf2\x77\x54\x1b\x50\xb8\xdd\xc7\xee\x0d\x86\x13\x3a\xd5\x32\x73\xae\xd4\xe6\x2e", + .ok = 1 }, + { .tc_id = 225, + .comment = "special case for C in multiplication by 2", + .shared = "\x74\xd5\x60\x6b\xa0\xb6\xad\x1d\x8b\xa3\x6a\xe6\xf2\x64\xd6\x31\x5f\x47\x9b\x39\x84\xde\x57\x3e\x9b\x00\x1e\x05\x55\x24\x7c\x32", + .prv = "\xa8\xfb\xb4\xf9\x0d\xa4\x57\x94\x98\x14\x05\xd5\x9e\xf3\x10\x62\x1e\x3c\x3b\x6b\x77\x60\xb5\xe3\x03\x08\xc7\x82\x2c\x88\xae\x5f", + .pub = "\x0e\x5e\xce\xee\x91\x04\xa6\x4f\x82\xc9\x09\x3b\x9b\xf7\xb4\x07\x6e\xe5\xbc\x70\x81\x5a\xf7\xee\x9f\x94\x2e\xf0\x15\x75\x61\x76", + .ok = 1 }, + { .tc_id = 226, + .comment = "special case for CB in multiplication by 2", + .shared = "\x8c\xf4\x53\x8a\xe5\xf4\x45\xcc\x6d\x27\x3d\xf4\xad\x30\x0a\x45\xd7\xbb\x2f\x6e\x37\x3a\x56\x24\x40\xf1\xb3\x77\x73\x90\x4e\x32", + .prv = "\xc8\x87\x88\x6f\xd0\x71\x07\xc7\x22\x1f\x6d\x9d\xd3\x6c\x30\x5e\xc7\x79\xce\xca\x13\x2a\xc9\x33\xff\x77\xda\xb2\xbe\xac\x63\x45", + .pub = "\x73\x7d\x45\x47\x7e\x2b\xeb\x77\xa6\xc3\x8b\x98\xe2\xa1\x9b\x05\xc3\x95\xdf\x7d\xa9\x98\xcb\x91\xf6\xdf\xab\x58\x19\x61\x4f\x27", + .ok = 1 }, + { .tc_id = 227, + .comment = "special case for CB in multiplication by 2", + .shared = "\xd5\x76\x67\x53\x21\x1d\x99\x68\xde\x4a\xc2\x55\x99\x98\xf2\x2e\xf4\x4e\x8a\xa8\x79\xf3\x32\x8c\xbc\x46\xaa\x85\x8d\xcb\x43\x3c", + .prv = "\x58\x09\x6e\xe2\x93\x61\x97\x8f\x63\x0a\xd1\xfb\x00\xc1\x26\x7c\x5a\x90\x1f\x99\xc5\x02\xf9\x56\x9b\x93\x3a\xd0\xdc\xce\x0f\x50", + .pub = "\x87\x3f\x8b\x26\x0e\xa9\xd9\xdd\xac\x08\xb7\xb0\x30\x72\x7b\xf0\x07\x23\x15\xab\x54\x07\x5e\xcc\x39\x3a\x37\xa9\x75\x88\x2b\x7e", + .ok = 1 }, + { .tc_id = 228, + .comment = "special case for CB in multiplication by 2", + .shared = "\x76\x1d\x8c\xec\xf1\x3f\x93\xb3\x79\xa7\x72\xe5\xfa\xc5\xb9\xff\xe9\x96\xca\xd9\xaf\x06\x15\x25\x80\xaf\xe8\x7f\xf9\x65\x1c\x71", + .prv = "\x08\x29\xa4\x90\x46\xdc\xe2\xc0\x7a\xb2\x84\x40\xdb\xad\x14\x64\x53\xe1\x28\x96\x0e\x85\xdd\x2e\x6a\x69\xa1\x51\x28\x73\xdd\x44", + .pub = "\x75\xe1\x58\x7c\x5e\xef\xc8\x37\x15\xd7\x10\x20\xaa\x6b\xe5\x34\x7b\xb9\xec\x9d\x91\xce\x5b\x28\xa9\xbb\xb7\x4c\x92\xef\x40\x7e", + .ok = 1 }, + { .tc_id = 229, + .comment = "special case for x_2 in multiplication by 3", + .shared = "\xf1\x2a\xcd\x36\xf6\x29\x9a\x4d\x19\x2c\x03\xaa\x4e\xfe\xea\x7d\xf5\x1e\x2d\x15\xd7\x63\x17\x2e\x68\xac\xcf\x7b\xc6\xf5\xc2\x30", + .prv = "\x58\x7a\xc3\x6b\x9a\x23\x59\x46\x32\x67\x9a\xde\xa1\xa8\x26\xf2\xf6\x2d\x79\x73\x82\x20\xfb\x48\x74\x64\x03\x9f\x36\xca\x23\x72", + .pub = "\xf8\x5a\x06\x06\x5e\xa2\x52\x72\x38\xfc\x5e\xc1\xb7\x5e\xad\x92\x62\xe6\xb1\xae\xd6\x1f\xef\xf8\x3b\x91\x23\x0a\xeb\x4b\x7d\x01", + .ok = 1 }, + { .tc_id = 230, + .comment = "special case for x_2 in multiplication by 3", + .shared = "\xb2\xbb\xbd\x17\x3f\x41\xd9\x52\xd3\x29\x25\x1d\xa9\x73\xa9\x50\x03\x00\x62\x81\x77\xad\x0f\xb7\x9d\x01\xe2\xe2\x63\x90\x5b\x38", + .prv = "\xa8\xa4\x42\xb7\xc0\xa9\x92\x27\xb4\xcb\x5c\x75\xfb\x9e\x5a\x72\xce\xa2\x5e\xba\x8a\x0b\xdf\x07\x27\x1b\xb4\xa9\x3c\x2b\x66\x65", + .pub = "\x6e\x0f\x1d\x00\xb1\x09\x9d\x2a\x71\xf7\xbe\x86\x65\x5f\xeb\x89\x88\xbb\xa5\x57\x7b\x02\xf9\x64\x04\x3a\x49\xf0\x0c\x74\x96\x13", + .ok = 1 }, + { .tc_id = 231, + .comment = "special case for x_2 in multiplication by 3", + .shared = "\x45\xec\xfa\x27\x5f\x1d\xaa\x25\xd3\xfa\xdf\x33\xcd\xf8\x9a\x15\x2a\xfe\xa2\x5e\xae\x37\xe6\x8e\x00\xb3\x0c\x36\x77\x89\x88\x7a", + .prv = "\xd8\xf7\x23\x3e\x96\x12\xc0\x0c\x9d\xca\x2c\x75\x1e\xc1\xd3\xf5\xf6\x7b\xad\x77\xc2\xe7\x14\xa2\x0e\x71\xeb\x3f\x22\x0a\x66\x71", + .pub = "\x69\x67\x57\xce\xd3\x09\x7f\xa9\x60\xc8\x39\x0a\x09\xe8\xbd\x6d\x39\x0d\xbd\xe8\xd1\xfa\x17\x02\x61\xf3\x42\x2e\xdc\x19\x29\x29", + .ok = 1 }, + { .tc_id = 232, + .comment = "special case for x_2 in multiplication by 3", + .shared = "\x59\x5e\x14\x4e\x07\xbb\xe6\x5b\x38\xe0\xe4\x16\x3d\x02\xad\x75\xa6\x5e\x42\x2e\x74\x06\x7d\xb3\x5c\x90\xdf\xa6\xe0\x55\xd4\x56", + .prv = "\xd8\x0c\x7c\x75\x57\xc9\x90\x7e\x1b\x11\xe8\x44\xbf\x13\x69\xcb\xa6\x69\xbc\x38\xe9\xb7\xb2\x53\xe5\x1f\x23\x9b\xda\x32\x23\x74", + .pub = "\xfd\x84\xb3\xf2\xfb\xfa\x16\xae\xbf\x40\xc2\x7f\x46\xe1\x8d\x77\xba\xfa\x0c\x79\x71\xbe\xdd\xe4\x90\x92\x12\xe7\x71\xbd\x3c\x35", + .ok = 1 }, + { .tc_id = 233, + .comment = "special case for x_2 in multiplication by 3", + .shared = "\x22\x6e\x16\xa2\x79\xac\x81\xe2\x68\x43\x7e\xb3\xe0\x9e\x07\x40\x63\x24\xcb\x72\xa9\xd4\xee\x58\xe4\xcf\x00\x91\x47\x49\x72\x01", + .prv = "\x80\x02\xa8\x51\x15\xad\x7b\x41\xc5\x0f\x84\xf3\x5f\xac\x75\x0e\xe8\xe1\x97\x34\x80\x71\x02\x83\x0f\xf6\xa3\x06\xbe\xed\x44\x64", + .pub = "\x80\x54\x85\x70\x3c\xcf\xc4\xa2\x21\xef\x28\x12\x67\xf5\x2b\x61\xce\xbc\x87\x9f\x0f\x13\xb1\xe5\xf5\x21\xc1\x73\x52\xa0\x78\x4f", + .ok = 1 }, + { .tc_id = 234, + .comment = "special case for x_2 in multiplication by 3", + .shared = "\x79\x0d\x09\xb1\x72\x6d\x21\x09\x57\xce\x8f\x65\x86\x9c\xa1\xec\x8f\xa0\xb2\xb0\x6b\x6b\xcf\x94\x83\xb3\xeb\x55\xe4\x9e\x92\x72", + .prv = "\x78\x2d\xb0\xc8\xe3\xe6\x8f\x10\x6f\xe0\xc5\x64\x15\xe0\xbd\x13\xd8\x12\xde\xa0\xe9\x4c\xbd\x18\xbd\xf6\x76\x12\x95\x61\x3a\x6d", + .pub = "\x80\x64\x2a\x32\x79\xda\x6b\xf5\xfc\x13\xdb\x14\xa5\x69\xc7\x08\x9d\xb0\x14\x22\x5c\xfc\xae\x7d\xff\x5a\x0d\x25\xec\xc9\x23\x5b", + .ok = 1 }, + { .tc_id = 235, + .comment = "special case for z_2 in multiplication by 3", + .shared = "\x68\x4c\xc8\x3a\xf8\x06\xbc\xd9\xcd\x25\x1e\x18\x58\xf3\xc1\x0f\x01\x66\xe0\xa0\xcd\x2b\xe1\x54\x33\x9a\x88\x6b\x13\xe7\xc7\x6f", + .prv = "\x90\x9f\xb0\xbd\xbf\x53\xa6\x9a\x2f\xe3\x9c\x8b\x24\x97\xab\xd4\xfa\x57\xd2\xd5\x4e\x04\x6b\x5f\x51\x45\x95\xe2\xc0\xf3\x3d\x63", + .pub = "\x84\xe8\x27\xf7\x8c\xae\x0c\xf0\x63\xe4\x34\x01\x98\xf7\x88\xc2\x84\xe0\x74\x30\xb3\xa9\x4a\x38\x73\xdf\x38\xb1\xf8\x72\xce\x02", + .ok = 1 }, + { .tc_id = 236, + .comment = "special case for z_2 in multiplication by 3", + .shared = "\xe4\x26\xe4\xa3\xc5\x4d\x3e\x77\xf4\xf1\x57\x30\x1e\x0a\xc7\xd9\xe1\x23\x37\xa2\xb5\x8d\xf1\x67\x80\x04\x1c\xf6\xd6\x19\x8c\x5a", + .prv = "\x78\xa6\x79\x09\x75\x72\x48\x66\x5f\x79\x37\x1e\xb0\x14\x82\x5a\xb6\xbd\x4a\xf3\x57\x1f\x14\x03\x89\xc6\x36\xe0\x04\xbc\xf4\x6b", + .pub = "\xd4\x45\xe1\xdf\x00\x83\xbb\x6b\x8e\x88\x6e\x66\x32\x25\x18\x07\x17\x1d\x4e\x88\xc4\x18\x16\xfc\x68\x43\x73\xc0\x9d\x7e\x5d\x6e", + .ok = 1 }, + { .tc_id = 237, + .comment = "special case for z_2 in multiplication by 3", + .shared = "\x86\x2d\xf9\x2e\x25\x27\x7b\xd9\x4f\x9a\xf2\xe1\xdd\xa5\x1f\x90\x5a\x6e\x2a\x3f\x60\x68\xa9\x2f\xab\xfc\x6c\x53\xda\x21\xec\x11", + .prv = "\x28\x6a\x30\x2d\x5b\x07\x6d\x2a\xba\x7c\x2a\x4d\xaf\x9e\x7c\xc9\xd8\x53\x9b\x7c\x03\x91\x30\x7d\xb6\x5a\x2f\x42\x20\xd3\x0f\x70", + .pub = "\xf2\x6a\xa6\x15\x1a\x4b\x22\x39\x01\x76\xf6\x23\x3e\x74\x2f\x40\xf2\xec\xd5\x13\x71\x66\xfb\x2e\x1e\xc9\xb2\xf2\x45\x4a\xc2\x77", + .ok = 1 }, + { .tc_id = 238, + .comment = "special case for DA - CB in multiplication by 3", + .shared = "\x3f\x43\x8d\xbf\x03\x94\x79\x95\xc9\x9f\xd4\xcb\x36\x6c\xa7\xe0\x0e\x8c\xfb\xce\x64\xc3\x03\x9c\x26\xd9\xfa\xd0\x0f\xa4\x9c\x70", + .prv = "\xa8\x38\xb7\x0d\x17\x16\x1c\xb3\x82\x22\xf7\xbc\x69\xa3\xc8\x57\x60\x32\xd5\x80\x27\x5b\x3b\x7d\x63\xfb\xa0\x89\x08\xcb\x48\x79", + .pub = "\x2b\x02\xdb\x3c\x82\x47\x7f\xe2\x1a\xa7\xa9\x4d\x85\xdf\x37\x9f\x57\x1c\x84\x49\xb4\x3c\xbd\x06\x05\xd0\xac\xc5\x3c\x47\x2f\x05", + .ok = 1 }, + { .tc_id = 239, + .comment = "special case for DA - CB in multiplication by 3", + .shared = "\x95\xf3\xf1\x84\x9b\x0a\x07\x01\x84\xe6\x07\x7c\x92\xae\x36\xba\x33\x24\xbf\x14\x41\x16\x8b\x89\xbb\x4b\x91\x67\xed\xd6\x73\x08", + .prv = "\xb0\x73\x3b\x42\x03\x26\x7a\xb3\xc9\x4c\x50\x6a\xca\xdb\x94\x9a\x76\xcc\x60\x04\x86\xfc\xd6\x01\x47\x8f\xcd\xef\x79\xc2\x9d\x6c", + .pub = "\xd7\x1d\xd7\xdb\x12\x23\x30\xc9\xbb\xaa\xb5\xda\x6c\xf1\xf6\xe1\xc2\x53\x45\xee\x6a\x66\xb1\x75\x12\xb1\x80\x4a\xce\x28\x73\x59", + .ok = 1 }, + { .tc_id = 240, + .comment = "special case for BB in multiplication by 3", + .shared = "\x6a\x96\x9a\xf6\xd2\x36\xab\xa0\x8f\xa8\x31\x60\xf6\x99\xe9\xed\x76\xfb\x63\x55\xf0\x66\x2f\x03\xdb\xc5\x91\x5a\x3c\x23\x06\x3e", + .prv = "\xd8\x44\xa3\x6b\x58\xae\xfd\xb0\x8b\x98\x17\x96\x02\x9a\x27\x66\x10\x18\x84\xb3\x48\xf7\x0e\xed\x94\x7c\x25\x41\x06\x4c\xaf\x6a", + .pub = "\x73\x7b\xc0\x7d\xe0\x72\x9b\xbc\xfb\xee\x3a\x08\xe6\x96\xf9\x7f\x37\x70\x57\x7e\x4b\x01\xec\x10\x8f\x59\xca\xf4\x64\x06\xd2\x05", + .ok = 1 }, + { .tc_id = 241, + .comment = "special case for BB in multiplication by 3", + .shared = "\xab\x39\xdb\x4a\xa2\x9a\xc4\x01\x7c\x74\x46\xf1\xad\x0c\x7d\xaa\x9a\x37\xf1\xb6\xb4\xf2\xe9\xd2\x90\x2c\xce\xfb\x84\x83\x9d\x28", + .prv = "\xa0\xb7\xd3\x12\xd9\xb8\x32\xe1\x24\xd1\xbc\x8c\xb2\x1d\xb5\x45\x44\x0e\x3c\xf1\x4e\x74\x73\xee\x9c\xcb\xe9\xb6\x82\xf2\x15\x6c", + .pub = "\x97\x58\x06\x1a\x7b\x3e\x2c\x02\xfb\x5c\x20\x87\x5a\xe6\xb5\x5b\x11\xfb\x67\x95\x99\x0a\x0f\x4f\xdc\xd1\x14\x7b\xe5\x52\x16\x07", + .ok = 1 }, + { .tc_id = 242, + .comment = "special case for BB in multiplication by 3", + .shared = "\x13\xde\x41\x65\x9e\x3e\x30\x8d\x6e\x26\xc9\x42\x82\xfc\xc3\xe0\x36\x4d\xdf\x08\x09\xdd\xee\x6c\x8e\x7a\xbb\x50\x91\xb0\x2b\x00", + .prv = "\x78\x7f\x1d\xdd\x78\xcc\x64\x73\xd3\xe6\x39\x49\x40\x9a\xd3\xf3\x5b\xfe\x0c\xe0\x73\x8f\x25\x5d\xee\x68\x2f\x2b\xfb\xc8\x0f\x7f", + .pub = "\x37\xcd\x65\xd3\x30\x36\x20\x5f\x34\x49\xe8\x65\x5a\x50\xd4\xb0\xc8\x6f\xec\x02\x10\x0b\x4f\x2d\xb7\xda\x92\xdc\xf5\xe3\xaa\x0a", + .ok = 1 }, + { .tc_id = 243, + .comment = "special case for BB in multiplication by 3", + .shared = "\x69\xed\x8a\x0a\x27\x81\x2a\xe6\x74\x14\x74\xbd\x5c\x6a\x4e\x68\x3a\x12\x66\x49\xf7\x24\x5a\xa0\xf9\x1a\x3a\x38\x4b\xcd\xe2\x5a", + .prv = "\x40\x80\xae\x60\xa8\x5c\x1f\xa9\x5a\xad\x9b\xea\xbd\x98\xb4\x05\xe7\xf2\x81\x41\xbf\x08\xf2\xc9\xa4\xfd\xbd\xe1\xc5\x68\x02\x65", + .pub = "\xa9\xb6\xe8\x08\x14\x60\x38\x3a\xdc\x58\x7c\x8f\x91\xa0\x2c\x59\xa7\xa3\x55\x76\xca\x62\x43\x6c\xcd\x1b\x5f\xef\x1b\x92\x54\x5d", + .ok = 1 }, + { .tc_id = 244, + .comment = "special case for E in multiplication by 3", + .shared = "\x01\x02\x18\xbd\x67\xb1\xb9\x2f\xee\x3e\x7f\xa4\x57\x8c\x13\x61\x7d\x73\x19\x5d\xe1\x02\x79\x74\x7e\x53\xba\x01\xa2\x54\x52\x5a", + .prv = "\x08\xf9\xf4\xa4\xfa\xc4\xdb\x41\x33\x15\xf7\x4a\x59\x81\x8b\x24\x52\xfc\x7b\x76\x85\x59\x2e\x26\x55\x67\x75\xf9\xb8\x6d\x90\x7f", + .pub = "\xfd\x1a\x2c\xd1\x7a\x93\xf8\x50\xde\xb8\xc4\x5a\x2d\x34\x53\x92\x32\xdf\xd8\xa5\x58\x30\x42\x09\x78\x1c\x6c\xb5\x82\x29\x87\x0e", + .ok = 1 }, + { .tc_id = 245, + .comment = "special case for E in multiplication by 3", + .shared = "\xe6\xb2\x98\xde\x9c\xb6\x35\x8f\xbb\xb0\x0f\x11\x89\x0f\x57\x14\xa3\x85\x8e\x8f\x05\xa2\xa8\xd1\xcf\x39\xfe\x78\xcc\x55\xdd\x4e", + .prv = "\x18\x88\xcf\xae\x30\x85\x86\x76\x57\xb0\x94\x35\xc4\x2b\x74\xcc\x76\x24\x57\x83\x94\x51\xa3\x65\x9d\xb2\x18\xd4\x21\x4f\xdd\x63", + .pub = "\xb8\x81\x19\xe5\xae\x6d\x9e\x6b\x91\x2d\x52\x52\x47\x39\xe6\x12\xef\x19\xab\x7e\x5d\xd3\xd9\x46\xcb\x9b\xc0\x03\xc3\x78\xf8\x1f", + .ok = 1 }, + { .tc_id = 246, + .comment = "special case for E in multiplication by 3", + .shared = "\x96\x7b\xbe\x29\x84\x94\xb4\xa5\xf9\x58\x53\xcf\xde\x9d\xc8\x59\x70\xb2\xa4\xb5\xdd\x2c\x92\x78\x29\x01\xe8\x53\x95\x7f\x58\x09", + .prv = "\x78\x9c\xe1\x3e\xd0\x07\x81\x8d\x7a\x51\x81\xe6\x29\xee\xd9\x44\xa2\x0a\x05\x8c\xfe\x39\x66\x9c\x98\x31\xbf\xa5\x21\x5a\x12\x69", + .pub = "\x7b\x70\xe2\x9d\xce\x04\x79\xcd\xe4\xa3\x6c\x7f\x97\x86\x58\x2f\x10\x4b\xc0\x78\x8f\x04\x6b\x48\xaf\x49\x5e\x67\xbd\xb8\x8f\x36", + .ok = 1 }, + { .tc_id = 247, + .comment = "special case for E in multiplication by 3", + .shared = "\x9f\x66\x84\x86\x81\xd5\x34\xe5\x2b\x65\x99\x46\xea\x2c\x92\xd2\xfa\xbe\xd4\x3f\xe6\xe6\x90\x32\xc1\x11\x53\xdb\x43\xdc\xa7\x5b", + .prv = "\x00\x02\x2b\x43\x77\x5a\xb2\xf4\xb9\x1b\xc1\xcb\x54\xc9\x7f\x78\x02\x62\x89\xea\xaf\x02\xab\xee\xd0\x4c\xa8\x4f\x73\x6c\x68\x6c", + .pub = "\x2a\x20\x9e\x2a\xce\x0e\x3d\x69\x73\xff\xbf\x74\x03\xf9\x85\x7f\xf9\x7a\x5f\xdc\xd2\x7f\x2c\x70\x98\xb4\x44\xfc\x3c\x16\x67\x38", + .ok = 1 }, + { .tc_id = 248, + .comment = "special case for E in multiplication by 3", + .shared = "\xea\x75\x72\xe2\x7a\x91\x20\xde\x1f\x13\xb8\x57\x10\xba\x69\xa3\x47\x1b\x7b\x3f\x5d\x12\xbc\x43\x0c\x12\xc4\xbb\xf8\xaa\x39\x57", + .prv = "\x80\x97\xa5\x2f\xc5\x62\xe8\xa5\x16\x68\x2f\x53\x63\xcc\x5e\x7c\x88\xe9\xc7\x8e\x30\x8d\xf0\xde\xef\x40\x49\x7b\x35\xcc\x12\x7d", + .pub = "\xf5\x07\x09\xac\xa7\xf3\x14\xe8\xd0\x5b\x5f\xf9\x7a\x42\x7e\x42\x7b\xd5\xe8\x5c\x4e\x86\x71\x21\x25\x07\x6a\x77\x1b\xe2\x14\x48", + .ok = 1 }, + { .tc_id = 249, + .comment = "special case for E in multiplication by 3", + .shared = "\xe2\x3d\x63\xa4\x6b\xe6\x7c\x74\x43\xc0\x7b\x93\x71\xff\x6a\x06\xaf\xcd\x7a\x57\x94\xbf\x25\x37\x92\x60\x74\xb8\x81\x90\x30\x7a", + .prv = "\x40\x28\x80\x20\x30\xd8\xa8\x22\x1a\x71\x60\xee\xbb\xf1\x84\x61\x16\xc1\xc2\x53\xab\xc4\x67\xd6\xe4\x3c\xb8\x50\xf1\x45\x98\x60", + .pub = "\x0f\x13\x95\x59\x78\xb9\x3d\x7b\x9f\x9a\x2e\x70\xd9\x6d\xf9\x22\x85\x0a\x8f\xfd\x84\x12\xe2\x36\xfb\x07\x4a\xef\x99\xd3\x7d\x54", + .ok = 1 }, + { .tc_id = 250, + .comment = "special case for E in multiplication by 3", + .shared = "\x33\xcc\xaf\x24\xe1\xe2\x62\x90\xed\x7e\x46\x20\x93\xe9\xf7\x76\x07\xef\x52\xa0\x62\x6b\x2c\xd2\x51\x1c\x41\xcd\x24\xc1\x38\x49", + .prv = "\xd8\x51\x5d\x45\xc7\xab\x2b\x95\x29\x81\x65\x43\x15\x00\x68\xb8\xe4\xbb\x61\x4c\xf2\xb6\x8a\x8a\x99\x36\x39\x75\xaf\x50\x3d\x74", + .pub = "\x18\xff\xe9\x92\xa7\x29\xce\x70\xc3\xb7\xcd\xc5\x5b\xab\x55\xf2\x21\x0d\x27\x91\x34\xb3\x08\x2a\x9f\x68\x2d\x3a\x0b\x13\x12\x73", + .ok = 1 }, + { .tc_id = 251, + .comment = "special case for AA in multiplication by 3", + .shared = "\x74\xf9\x5b\x47\x00\xf0\x18\x5f\x33\xc5\xb5\x52\x8e\xd5\x01\x2a\x33\x63\xf8\xbb\xd6\xf6\xa8\x40\xaa\x1f\x0f\x3b\xdb\x7c\x96\x50", + .prv = "\xd8\x81\x5b\xd1\x44\x51\x8f\xa5\x26\xbe\xfd\xd3\x73\xf5\xf9\xcf\xf2\x54\xd5\xd3\xc4\x66\x0e\x8a\x90\xef\x2a\x22\xc6\x87\x6a\x74", + .pub = "\xc3\xba\x28\x05\x77\x28\xd0\x53\x39\x65\xec\x34\x97\x9f\xe7\xbd\x93\xcf\x6c\xb6\x44\xe8\xda\x03\x8b\xaa\x87\x99\x7b\x8d\xc2\x0e", + .ok = 1 }, + { .tc_id = 252, + .comment = "special case for AA in multiplication by 3", + .shared = "\xe9\x67\x7b\x85\x48\x51\xc4\x1c\xc4\x89\xe0\x39\x81\xae\x78\x69\x0b\xe6\xcb\xf0\x05\x4e\xa9\x83\x47\x59\xde\x3e\x27\xbc\xf0\x3e", + .prv = "\xa8\x2d\x99\x60\x93\xee\xfd\xaf\x28\x3f\x40\x49\xbb\xa4\xf5\xaf\x6e\xcc\x2e\x64\x89\x4f\x32\x5e\xe1\xf9\xca\x1e\x15\x6d\x05\x67", + .pub = "\x4e\xb0\x95\xa8\x6d\x1e\x78\x1b\xb1\x82\x23\x30\x75\xeb\xf1\xdb\x10\x9d\x57\x13\x5b\xf9\x1d\x54\xfd\xb1\x8e\xb3\x71\x42\x76\x40", + .ok = 1 }, + { .tc_id = 253, + .comment = "special case for AA in multiplication by 3", + .shared = "\xf1\x48\x71\x6e\xbe\x72\x69\xa7\x07\x6f\x0c\xf1\xf2\x2b\x69\x78\xd3\xc7\xe3\x60\x7b\x0b\xcc\x87\xa8\xc7\xa8\x5b\x9f\xd2\x0c\x2f", + .prv = "\xc0\x26\x09\xdf\x3d\x54\x36\xc1\x23\xdc\xd7\xee\x11\xf2\x3f\x1d\xa3\x21\x66\x6c\x09\xf3\x79\xd3\x79\x14\x20\x33\x40\x51\x08\x61", + .pub = "\x83\xf6\x7d\x7c\x92\xb1\x1c\x8f\xb0\x72\x48\x46\x42\xa0\x1f\x43\xde\xb0\x22\xb5\x4d\x94\xa4\x01\x5e\x39\x84\x9a\x2e\x2e\x95\x55", + .ok = 1 }, + { .tc_id = 254, + .comment = "special case for AA in multiplication by 3", + .shared = "\x1d\x5c\x12\x3e\x88\xe9\xdc\x7a\x3b\x16\xec\x90\xb6\x05\x78\xdf\xca\x7e\x11\xea\xb9\xb8\x8c\x6e\xca\x7b\xc3\x3d\x91\xfd\xe8\x3b", + .prv = "\xa0\xe3\xb7\x8c\x0f\x3b\xe2\xa7\x60\xb2\xc9\x16\xf2\x44\xdf\x21\x96\x24\xfd\xda\x2e\x9e\x31\xb1\x53\x28\xf4\xa7\x76\x90\x29\x6a", + .pub = "\x20\xcc\x75\xd3\x76\xd8\x45\x3b\x9d\x04\x9c\x84\xf5\x8e\xaf\xcf\x61\x12\x6c\x08\xa0\x36\x61\xe7\x35\xf0\xa8\xbe\x22\x8f\xd4\x66", + .ok = 1 }, + { .tc_id = 255, + .comment = "special case for AA in multiplication by 3", + .shared = "\x2f\xc0\x65\xba\x8f\x50\x40\xa0\xa6\x59\xf6\xf7\x33\x05\x54\xbd\x1b\x9d\x7c\x89\x3b\x91\xe3\x16\xe0\xaf\x90\xc3\x7a\xf4\xf1\x35", + .prv = "\x70\x1f\x13\x0a\x29\x05\x84\xcb\x28\xc7\xd6\x53\x95\x06\xa1\xa0\x54\xf9\x26\xa1\x7e\xf7\xc5\x68\xae\x43\x04\x7c\x05\xe1\x0f\x60", + .pub = "\xef\x31\xb4\x3d\x19\xc0\xa5\x43\x4d\xeb\x56\x12\x9c\x16\x29\x8a\x39\x4a\x70\x32\xa2\xe5\x2c\xb9\x97\x47\x6b\xde\xca\x32\x5b\x73", + .ok = 1 }, + { .tc_id = 256, + .comment = "special case for AA in multiplication by 3", + .shared = "\xef\x76\x12\xc1\x56\x07\x8d\xae\x3a\x81\xe5\x0e\xf3\x39\x51\xca\xb6\x61\xfb\x07\x73\x1d\x8f\x41\x9b\xc0\x10\x5c\x4d\x6d\x60\x50", + .prv = "\xd0\xe6\x7f\x68\x18\x3a\x4c\x1a\xed\x9c\x56\x86\x4b\x36\x27\x8b\xb7\xbb\x75\xd5\x7a\x78\x32\x1b\xc7\xc2\x4f\xf6\x16\x36\x60\x7a", + .pub = "\xd8\xc8\xe2\xc6\xf3\x3a\x98\x52\x5d\xf3\x76\x7d\x1d\x04\x43\x0d\xab\x0b\xda\x41\xf1\xf9\x04\xc9\x5b\xc6\x1c\xc1\x22\xca\xca\x74", + .ok = 1 }, + { .tc_id = 257, + .comment = "special case for AA in multiplication by 3", + .shared = "\xa3\xcf\x3d\x81\xec\x56\x89\x6a\x68\xfc\xa0\xda\x63\x35\x17\x1d\x0c\x62\x25\x68\x73\x8c\x0d\xb2\x6f\xe1\x17\x03\x37\x26\xa0\x49", + .prv = "\x88\xeb\x77\x75\xda\xcc\x32\xb0\x45\xce\xb3\x5f\x26\x1b\x36\x16\x31\x5e\xfa\x98\xb7\x80\xe0\x8c\x79\xd5\x44\xed\xad\xb5\x46\x7d", + .pub = "\x18\x33\x61\x95\x16\xb8\x0d\xb0\xc0\x5b\x22\x55\x09\xe6\x69\x8d\xf0\x28\xd8\x3b\x66\xed\x6b\xac\x6f\x0f\x63\x08\x97\x0d\x2c\x7d", + .ok = 1 }, + { .tc_id = 258, + .comment = "special case for AA in multiplication by 3", + .shared = "\xe7\xf4\x58\x23\xa4\x5b\x6a\x46\x19\x2b\x37\xd7\x3e\x86\x09\xb5\xbd\xa6\x8c\xd7\xcf\xbd\xcc\xaa\x49\x08\x20\x80\x99\x3e\x64\x0f", + .prv = "\x70\x55\xb1\xc0\x57\x6e\x7a\xb6\xc8\x9f\xcc\x1c\xe4\x9e\x79\xc8\xc3\x71\xbf\x9f\xc2\xb2\x2b\x8f\x83\x96\xa9\xb6\x4c\x5a\xe2\x6d", + .pub = "\xe2\xe9\x89\xaa\xd2\x39\x7f\xc3\x4b\x6c\xbe\x2d\xb2\x7d\x5a\xb6\x9b\x28\x04\x83\x83\xc9\x1d\x9e\x82\x26\xd5\x48\x25\x3f\xab\x7e", + .ok = 1 }, + { .tc_id = 259, + .comment = "special case for D in multiplication by 4", + .shared = "\x7c\x61\x48\x13\x4c\x9e\x8b\x2b\xa5\xda\xec\xa4\x1e\x6a\x1f\x3a\x82\xd8\xf7\x5d\x0b\x29\x2b\x23\xc4\x0f\xe7\xf5\xce\x0a\x2b\x7a", + .prv = "\x90\x6a\x9b\xfc\xfd\x71\x01\x4d\x18\x96\x76\x80\xd4\x50\x9e\xaa\x41\xc6\x66\x42\x4a\xf9\x8b\xf9\xff\x7f\xf4\x9e\xb1\xba\xba\x41", + .pub = "\xb9\xbd\x79\x36\x24\xd6\xa7\xe8\x08\x48\x61\x10\x05\x88\x53\xed\xb2\x5e\x13\x6b\xd4\xd6\xa7\x95\xd6\xd2\xef\x53\xb2\x5e\x38\x04", + .ok = 1 }, + { .tc_id = 260, + .comment = "special case for D in multiplication by 4", + .shared = "\xea\x5e\x77\x2b\xac\x46\x93\xce\x69\xea\x3a\xc7\x61\x01\x1f\xa7\x67\x40\x37\x65\x3a\x43\x3c\x7f\x05\x45\x6e\x72\x91\xcd\x3c\x4e", + .prv = "\x28\x39\x2b\x1b\x03\x5a\x84\x65\xaa\x22\xaa\xbb\x57\x10\x61\xc6\xef\xfe\xed\x40\xcc\x25\x30\xb6\x28\xe4\xfd\x40\x39\x5a\xe0\x4a", + .pub = "\xe3\xf4\x44\xe2\x08\xda\x90\x43\xf3\xf7\x4c\x20\xe2\x8d\x7f\x40\x4b\xb6\x87\xa3\x46\x70\x9a\xbc\xd5\x55\x15\x6f\x88\x60\x78\x20", + .ok = 1 }, + { .tc_id = 261, + .comment = "special case for D in multiplication by 4", + .shared = "\x81\xc3\x95\xae\xd5\xcc\x5f\x5e\x2a\x20\x6a\x8a\x4c\xac\xec\xd5\x01\xdf\x5b\x81\xe4\x94\x33\x83\x5a\xd8\xa3\x77\x9e\xdf\xfb\x30", + .prv = "\x78\xcb\xb3\x52\x04\xcc\x88\x67\x6c\x14\xe0\xff\x18\x17\x13\x92\xe9\x98\x41\x1b\x23\xd9\x05\xd4\xc4\xdc\xea\xb7\x05\x11\xf4\x42", + .pub = "\x87\xb4\x3f\x90\xf7\x6d\x12\xfb\x3a\x46\x9f\xa8\x68\x7c\x27\xe3\x69\xd4\xa8\x2f\x95\xcf\x95\xe8\xdc\x39\x70\xde\x8f\x86\xd9\x2b", + .ok = 1 }, + { .tc_id = 262, + .comment = "special case for D in multiplication by 4", + .shared = "\x51\x3e\xba\x58\x70\xdc\x51\x87\xe2\x55\x2f\xe3\xba\x82\x92\xb5\x16\xd2\xaf\x9e\xcb\x9a\x9b\xdc\x51\xea\xc2\xce\x2d\xe4\x01\x12", + .prv = "\xa8\x22\x5b\x49\xef\x7b\x73\x30\xe3\xde\x78\x7c\xbc\x40\x47\x96\x44\xdb\x7a\xb1\x26\x37\x02\x95\xc9\x41\x89\x67\x34\x30\xd7\x45", + .pub = "\x86\x44\x1e\xa0\x6c\x5c\xd2\xa3\x4c\x6b\x51\x26\x1e\x93\xa2\xf3\x0e\xa7\xdb\x0f\x74\xe1\x4c\x42\xf0\xfc\x44\x3c\x67\x35\x97\x3c", + .ok = 1 }, + { .tc_id = 263, + .comment = "special case for D in multiplication by 4", + .shared = "\x98\x3b\x7e\x23\x6f\xfa\xdd\xb4\xb7\x59\xb7\x35\x3f\xe8\x78\x46\xf5\x9f\xb6\xf2\x8a\x3e\xd6\x5c\x25\x61\x76\xb6\x60\x9b\x7c\x6e", + .prv = "\x08\x41\xe1\xa5\xc7\x42\x0b\x94\xb6\xcc\x69\x91\x31\x6e\xbd\xd6\x08\x62\x63\x39\xc0\x9d\x0f\x67\xb2\x40\x88\x58\x8b\x9d\x0d\x49", + .pub = "\x46\x24\xaa\x4a\xe9\xd1\x27\x25\xbf\x92\xb8\x5f\x93\xe3\xe8\xce\xa1\x6b\x7b\xd8\x3f\xda\x0e\xb1\x8f\xab\x2d\xbe\x0e\x8b\xf7\x42", + .ok = 1 }, + { .tc_id = 264, + .comment = "special case for D in multiplication by 4", + .shared = "\xc9\x41\x36\x9b\x08\x5c\x74\x65\xd5\x0d\x23\xce\xaf\x67\x17\xab\x06\xe2\x46\x38\xf2\x17\xa7\xb8\x05\x5c\xe8\xeb\xd3\xca\x12\x25", + .prv = "\x08\xec\xf7\x6e\x31\xa2\x30\x39\xea\x8a\x15\xee\x47\x4b\x62\x51\xa9\xd7\x25\xbf\xf1\xa5\x75\x1e\xb5\xec\xde\x9d\x7d\x4e\x2f\x49", + .pub = "\xa6\x25\xa5\xb7\xa0\x4c\xea\x46\x2d\x12\x3b\x48\x5c\x39\xea\x44\xa8\x07\x9a\xa2\x23\xc5\x9e\x9c\xa9\x7a\xbc\xd3\x0b\x50\x0e\x4b", + .ok = 1 }, + { .tc_id = 265, + .comment = "special case for D in multiplication by 4", + .shared = "\xa3\xf7\xe1\x69\xdb\x44\xd0\xd1\x79\xc2\x42\xe6\x63\x47\x36\x4a\xb9\x27\x44\xdc\x6a\xd8\x0e\x47\x75\xae\xf7\xf4\xff\x9d\x5f\x34", + .prv = "\x60\x38\xfb\x0a\x83\x0d\x10\x01\xca\x8e\xa7\x4a\x61\x3e\xa9\x8f\x6a\xb8\x51\x26\x44\xe5\x5e\x8d\x45\xa2\x90\x71\xbd\x4b\xef\x45", + .pub = "\x8a\x5f\x20\x63\xf2\x59\xf3\x31\x7a\xe3\xe0\xb4\x59\xf8\x2c\x46\x77\x66\x6e\x49\xa2\xeb\x9b\xf0\x36\x9a\xee\x66\x36\x31\x26\x5b", + .ok = 1 }, + { .tc_id = 266, + .comment = "special case for D in multiplication by 4", + .shared = "\x40\x1a\xab\xfb\xb7\x3f\xe6\x69\x4c\x44\x6e\xcf\xff\xb4\x30\x06\x42\x7a\x9d\x47\x56\xe0\x49\xa1\xff\xc7\x95\x78\xd6\x2f\x16\x60", + .prv = "\xc0\x4c\xf1\x29\xf0\xb3\x33\x32\xe2\x65\x4f\x8e\x45\x22\x5c\x04\x2d\x7f\xa6\xcb\xc7\x93\xc8\x8b\xd4\xc7\x31\x98\x52\x89\xb0\x45", + .pub = "\x54\xcf\xb6\xad\x0d\x03\xe3\x11\x5a\xca\xfe\xe1\x26\x06\x39\x7f\x2b\xb4\x6a\x8c\x5f\x32\x6a\x25\x5c\x49\x41\x18\xae\xad\x3b\x62", + .ok = 1 }, + { .tc_id = 267, + .comment = "special case for E in multiplication by 4", + .shared = "\x20\x32\x2d\xd0\x24\xfb\x5a\x40\xf3\x27\xcf\x7c\x00\xda\x20\x37\x34\xc2\xa2\x79\xb9\x66\x6a\x9f\xf7\xd8\x52\x7c\x92\x7b\x67\x5e", + .prv = "\x38\x06\xb0\x36\xc9\x2d\x7b\xc0\x77\x19\x98\xd2\x4d\xbd\xa2\x94\x5b\x60\x1d\x42\x44\x9b\xd3\xec\x4b\xbf\x37\x57\xd0\x1b\x89\x4d", + .pub = "\x0e\xe3\xbe\xe8\xcb\x3a\x0a\xfc\xec\x22\xfa\x22\x33\x70\x6e\x8e\xc2\x9c\xcf\x1a\xf2\x12\xc0\xa6\x74\x74\x5e\xbb\xa3\x4f\x9d\x08", + .ok = 1 }, + { .tc_id = 268, + .comment = "special case for E in multiplication by 4", + .shared = "\x46\x15\x2d\x59\xc2\xd2\xf3\xec\xf0\x3c\xe6\x52\xd2\xb6\x97\x8d\x40\x1d\x5e\xde\x45\x70\xa6\xc9\x11\x77\x1b\xdc\xfb\x37\xcd\x41", + .prv = "\x38\x0d\x90\x56\xb5\xa2\xf4\xb3\xdf\xfb\x30\xe6\xce\xb7\x22\xac\x46\x84\x24\x5f\x1b\xef\xaf\xb5\x66\x1b\xc8\xc7\xa9\xad\x4c\x43", + .pub = "\x79\x7e\xc7\x51\x2a\xfb\xf0\xad\x91\x8d\x0e\x49\x47\x90\x3b\xe9\x52\x34\xf3\xab\xf3\x67\x50\xa8\xf8\x54\x88\x8d\x11\x7b\x77\x4e", + .ok = 1 }, + { .tc_id = 269, + .comment = "special case for E in multiplication by 4", + .shared = "\x37\x56\x7f\x7e\xc0\x44\x9c\x7b\x82\x3c\xf7\xb0\xe2\x19\xe9\xdd\x88\x0e\x56\xa1\x46\x4d\x04\x17\xa9\xe6\x7e\xff\x42\x33\x28\x66", + .prv = "\x38\x49\x29\xa4\x2c\x8d\x8d\xf1\x46\xdb\x95\x08\xe2\xf2\x1a\x4e\x8c\xd4\xd9\x9c\x1b\x13\x38\xdf\x17\xa4\x57\xe8\x8a\xfb\x00\x43", + .pub = "\xd5\x70\xc7\x81\x0f\x69\xe5\x02\xb3\x55\x25\x3a\xfa\x7c\x66\x7b\xfa\x50\x60\xd9\x0d\xc8\x6e\x35\x8a\xb4\x45\xf6\x38\x1e\x41\x5d", + .ok = 1 }, + { .tc_id = 270, + .comment = "special case for E in multiplication by 4", + .shared = "\xfb\xf6\x58\x7e\xc1\x81\x11\x6c\xf1\xac\xe7\xdc\xd5\x48\x02\x9d\x69\xc1\x30\xe5\x0f\xcf\x6a\xd5\xdf\xcd\x25\xc2\x3e\xe9\xf9\x39", + .prv = "\x48\xa9\x86\x82\x5b\x26\x80\xe2\xf2\x54\x7b\xa7\x5a\x95\x99\xb0\x4e\xd5\x7f\x8e\xd1\x8d\x98\xe7\x09\x9c\x54\x4e\xfb\xdf\x28\x4b", + .pub = "\x2c\x61\x1c\xb9\x44\x48\xf1\xc7\x82\x24\x25\xa4\xcf\x53\x56\x23\x6b\x90\xa5\x55\xb1\xed\x47\x47\x82\x0b\xa7\xf7\x39\xc8\xf5\x7d", + .ok = 1 }, + { .tc_id = 271, + .comment = "special case for B in multiplication by 4", + .shared = "\xc7\xc6\xf6\xd7\xce\x1e\x4f\x54\xc7\x27\xe5\x90\x06\x86\xc3\x4e\x6a\x69\x53\x25\x4b\xd4\x70\xbb\xbf\x0c\x7c\x18\xbb\xdd\xad\x73", + .prv = "\x98\x45\x2a\xd7\xdf\x4e\x26\xbc\x4b\x3d\x40\x3f\x9e\xbf\x72\xbb\x2d\x7b\x6b\x7d\x58\x60\xdb\xf6\xfb\x9a\x4f\x78\xdc\x02\x70\x4a", + .pub = "\xe5\x59\xc4\x17\xda\x7f\xd5\x85\x13\x52\xf5\x08\xb9\x00\x31\xd4\x9b\x5d\x2d\x0a\xac\x88\xa9\xc8\xb5\xfb\x6e\x80\x16\x5a\xc1\x0b", + .ok = 1 }, + { .tc_id = 272, + .comment = "special case for B in multiplication by 4", + .shared = "\xcf\x7d\x2a\x66\xea\x4d\xfe\xd9\x44\x69\xb2\xd3\x43\x53\x3f\xf3\x02\xa5\x76\xf8\x40\x2e\xd2\x18\x79\x04\x43\x70\x38\xe5\x46\x65", + .prv = "\xa8\xdb\xc9\xbe\x50\x34\xed\x7f\xe7\xf4\x69\x26\x4f\x21\x35\xe9\xc6\x7c\xd3\x0f\x52\x55\x70\xd2\xd8\x41\xe4\xbd\xea\xc5\x23\x49", + .pub = "\x74\x6d\x97\xe7\x77\x42\x92\xa3\xd7\x03\xf6\x04\xe7\x9d\x87\x64\xc9\x9a\x6a\x2f\xe2\x80\xea\xa9\x81\x11\x15\xf5\xe0\x38\xf2\x1a", + .ok = 1 }, + { .tc_id = 273, + .comment = "special case for B in multiplication by 4", + .shared = "\xb2\x04\xd3\xbb\xcb\xdc\x62\x4f\x9f\x1a\x74\x3f\xa3\xda\xa8\xf4\xc8\x78\x5e\xd0\x88\xd3\x7d\x08\xcd\x13\xc6\x01\x17\x0a\x46\x1b", + .prv = "\xf8\xd2\x68\x78\xdf\xf2\x5c\xed\x02\xd3\xb2\x7c\xe7\x40\x02\x69\x5b\xb8\x79\xb3\xc4\x32\x89\x30\x93\x43\x15\xec\xae\x84\x2b\x47", + .pub = "\x1f\x35\x4a\xa8\xff\xc4\xea\xe2\xb4\x0d\xad\x2e\xbf\x83\x0d\xb3\xfe\xb0\x7e\x2a\x1a\x2d\xa3\x9e\x55\xdf\x87\xc8\xc6\x13\xde\x1d", + .ok = 1 }, + { .tc_id = 274, + .comment = "special case for B in multiplication by 4", + .shared = "\xb9\xf2\x14\x65\x61\x5f\x39\xdd\xdc\xc3\x75\x20\xce\x9b\x95\x6f\x7d\xe9\x88\x3a\xc9\x3a\x87\x0d\x74\xe3\x88\xb8\xe1\x77\x54\x63", + .prv = "\xd0\xf5\xe9\xc4\x3c\x95\xb1\xff\xc3\x6f\x83\x2b\x94\x36\x01\xd5\xe1\x76\x47\xf7\xd7\x8e\x2e\x77\x10\xac\xe6\x3f\xf2\x74\xd4\x47", + .pub = "\x9c\x3f\x00\x23\xe1\xa4\x83\x25\x86\xaf\x24\x83\xbb\xec\x64\xce\x9f\x06\xf3\xea\x80\x6d\x40\x19\xa5\xe4\xab\xb1\xb5\x62\x70\x29", + .ok = 1 }, + { .tc_id = 275, + .comment = "special case for B in multiplication by 4", + .shared = "\x20\xf1\xfc\x61\x38\x74\x49\x5f\x20\x56\x2c\x10\xb7\xa8\xbe\x47\xbf\xc1\x2c\x16\x8d\x82\x9d\x63\x21\xaa\x2d\xe1\x70\x60\xe4\x0d", + .prv = "\x70\x06\x79\xe8\xc2\x4d\xf8\x28\xf2\xe5\x21\x2a\x32\x63\xd5\xe9\x3e\xa6\x16\x79\x98\x82\x98\xba\xb3\xb4\x80\xf4\x6f\x96\x1a\x48", + .pub = "\xd0\x56\x56\xaa\x01\x4d\x47\x60\x22\xdf\xc5\x5e\x8d\x3b\x48\x84\xed\x0b\xdf\x85\x20\x9b\xe8\xb5\x53\x51\x39\x4d\x52\xbe\x68\x4b", + .ok = 1 }, + { .tc_id = 276, + .comment = "special case for B in multiplication by 4", + .shared = "\x65\x2b\x18\xff\xd4\x1c\xfb\x7d\x1f\x0b\x6d\xc7\x9b\xaa\x3b\x2a\x39\x2e\xf1\x61\x7f\x5c\xf6\x25\x9b\x5b\x4f\xf0\x65\x91\x6a\x16", + .prv = "\xd0\xd0\x77\xc9\x46\x1f\x74\x7e\x56\x60\xbe\x85\xcc\x62\x04\x28\xb4\xce\xfe\x80\x5d\xe0\xfd\x25\x4a\xda\xa4\x65\xea\x5e\x78\x4f", + .pub = "\xc4\xa1\x9b\x86\x86\xe1\x8c\x29\x35\x9a\xa5\x48\x42\x7f\x06\xa3\x68\xd5\x5a\x87\x37\x48\x3d\x48\x93\x52\x3a\xda\xc6\x79\x5a\x4c", + .ok = 1 }, + { .tc_id = 277, + .comment = "special case for B in multiplication by 4", + .shared = "\x67\x98\x25\xc2\x59\x39\x2d\x86\xf8\xed\xb1\x53\x28\xd4\xfa\xf5\x23\x00\x77\x9d\x97\x9a\x50\x3a\x76\xe2\x7b\xe3\xd7\xa8\x5e\x03", + .prv = "\x00\x71\x1a\xc0\x8e\xf8\x8c\x3d\x43\xa3\xcb\xda\x67\xb6\xfe\x5f\x34\xf5\x47\x23\xdb\xe6\xd7\x25\xc8\xa3\x56\x90\x70\xab\x9a\x4e", + .pub = "\x49\x89\xde\x79\x85\x3f\xf3\x5b\xe8\xc9\xf9\x2f\xc9\x46\x74\xfe\xef\x38\xa0\xe6\x57\x88\x47\x1c\x52\x1f\x8e\x25\x9a\xdf\x01\x5d", + .ok = 1 }, + { .tc_id = 278, + .comment = "special case for B in multiplication by 4", + .shared = "\x9c\xad\xc1\x4a\xc1\x53\xfa\x38\x3e\xf6\x6d\x18\x33\xf5\x89\x10\x0d\xff\x90\x52\x32\x72\xe3\x2b\x06\xe2\xc6\xf1\xf4\x42\x40\x40", + .prv = "\x98\x9a\x75\xb4\x04\x51\x13\x9e\xc3\x6c\xa6\xaa\x04\x37\x65\xc6\x1a\x18\xbe\x32\x3a\x59\x87\xfc\xb0\x25\xc2\xda\xd8\xd4\xbd\x40", + .pub = "\xa9\x81\x48\x3c\xb0\xea\x43\x85\xff\xbb\x55\x28\x26\xc3\xdd\x11\x0d\x4a\xe8\x9f\xf5\x2e\xd0\xcd\x60\x18\xf9\x9d\x33\x87\x98\x7b", + .ok = 1 }, + { .tc_id = 279, + .comment = "special case for BB in multiplication by 4", + .shared = "\xbc\xc9\x5f\xb4\x89\x0e\xd3\x11\xf3\xfb\x4f\x44\xc2\xb6\x08\x66\xcd\xdd\xec\x97\xdb\x82\x0a\x7f\x79\xf4\x75\x33\x7e\x16\x28\x4a", + .prv = "\x90\xc3\xcf\xed\xd9\x19\xa2\xcc\xd5\x1f\xb4\x55\x64\x9e\x3a\xd2\xda\x1e\xf0\xff\x61\x9b\x59\xa7\xf9\xc5\x5a\x68\xa8\x21\x96\x45", + .pub = "\x1d\xf3\xdf\xda\xb7\x4f\xf3\x81\x77\xda\xc2\x94\xb2\xda\x2f\x49\xa3\x48\xbc\x3b\x3b\xc6\xce\x93\x12\xbe\xa5\xef\x3e\xcd\xd3\x0b", + .ok = 1 }, + { .tc_id = 280, + .comment = "special case for BB in multiplication by 4", + .shared = "\x06\xf1\xb4\x95\xb0\x4a\x00\x10\x84\x5c\x9d\x39\xb1\x3b\xf2\x78\x4a\xde\x86\x0d\x96\x32\xc8\x84\x76\x18\xc0\xb3\x42\x97\xc2\x49", + .prv = "\xe8\xfe\xf5\xc9\xb6\x0f\x84\x98\x4e\x88\x36\xd5\x35\xac\xb3\x72\x09\x6b\xa8\x15\x98\x24\xa0\xb4\x9a\x17\xec\xcd\xa8\x43\xbd\x41", + .pub = "\xfc\x6b\x71\x8b\xa8\xb4\x7d\x24\xb1\xcf\xd6\xb5\xd0\xdd\x8b\x20\xfd\x92\x09\x60\xfa\xbc\x30\x2d\xbe\x4f\x93\xbd\x2a\x06\xe9\x33", + .ok = 1 }, + { .tc_id = 281, + .comment = "special case for BB in multiplication by 4", + .shared = "\xcc\xe7\xbb\x64\x4d\xf9\x45\x01\x42\x1d\xb4\x9d\x15\xe8\x21\xc7\xb0\xaa\xab\xec\xdf\x88\x37\xab\x98\x9b\x1f\x23\xba\xc0\x8f\x35", + .prv = "\xc0\xe0\x5b\xde\x77\x27\xdb\x4e\x35\x2b\x5e\x7f\x03\x53\x27\xb4\xd8\x6a\x42\xd5\x13\xca\x11\x6e\x22\xd6\x4a\x4e\xde\x56\x43\x4a", + .pub = "\xb2\x79\xb6\xc0\x65\xf9\x5c\x70\x40\xf1\x48\xbc\xb4\xa3\xd3\x10\xe3\x4b\xdb\x00\x59\x31\xa8\x79\xbe\x46\x95\x73\xde\xed\xd0\x41", + .ok = 1 }, + { .tc_id = 282, + .comment = "special case for BB in multiplication by 4", + .shared = "\x71\xfd\xd3\x40\x5c\x30\x80\x57\x01\xae\x4d\xfa\xd9\x8c\x49\x3a\xec\xfc\xf2\xe3\xb5\x63\xe7\x06\x83\x73\xc1\xb1\x91\x37\xc2\x68", + .prv = "\xd8\x73\x08\xbf\x75\x35\x73\xf5\x96\xac\x83\x30\xb2\x04\x01\x4b\x21\x52\xdb\xdf\xc9\x88\x1a\x0d\x99\x75\x05\x85\x82\xbd\xf6\x46", + .pub = "\x98\xe2\xcd\x4c\x10\x55\x4e\x41\xb0\xa3\xe4\x10\x82\xc8\xb6\xb6\x1b\x55\x44\x7d\x26\xc0\xaa\x97\xf9\xa0\x6b\xae\xeb\x54\xb5\x5b", + .ok = 1 }, + { .tc_id = 283, + .comment = "special case for BB in multiplication by 4", + .shared = "\xbf\x28\x0a\xee\xcb\x74\xab\x34\xe1\x31\x0a\xa6\xfe\x8d\xc9\x72\xf9\x4d\xc4\x0c\x7f\x88\xb7\x21\x37\xcc\xfe\x34\xed\x34\x3c\x13", + .prv = "\xd8\x00\x59\xa8\xa3\x87\xe1\x6f\x6d\xed\x6e\x7e\x98\x0e\x80\x6d\x1f\x78\xb4\x70\xbb\x61\x10\x3d\x0c\xa7\x06\x23\xcc\xee\x8b\x4f", + .pub = "\x87\x28\x97\xf1\xbd\x18\x85\xda\x08\xb9\xd0\x3e\x46\x81\x10\x44\xfb\xb0\x41\x86\xba\x30\xc8\x06\xf3\x8b\x94\xeb\xdc\x27\x18\x6a", + .ok = 1 }, + { .tc_id = 284, + .comment = "special case for x_2 in multiplication by 4", + .shared = "\x72\x56\x6a\x91\xcc\xd2\xbc\xf3\x8c\xf6\x39\xe4\xa5\xfc\xb2\x96\xf0\xb6\x7d\xe1\x92\xc6\x09\x12\x42\xa6\x2f\xae\x46\x7f\xb6\x35", + .prv = "\xb0\xa4\xfe\x63\x51\x51\x69\xbd\x82\x63\x9b\x51\x5f\xf7\xe5\xc4\xac\x85\xbb\xa0\xa5\x3b\xba\xca\x80\x47\x7e\xb3\xb4\x25\x0d\x44", + .pub = "\xc0\x8f\x72\x76\x0d\x9c\xb4\xa5\x42\xaa\xd6\xe2\xaf\x77\x79\x20\xc4\x45\x63\xbd\x90\x35\x61\x68\xc3\x60\x8c\x6b\x9a\xf2\xef\x0f", + .ok = 1 }, + { .tc_id = 285, + .comment = "special case for x_2 in multiplication by 4", + .shared = "\x24\xac\xb4\xaf\xa6\x39\x19\x62\x1d\xf7\x95\x20\x6c\x39\x29\xb5\x99\xec\x9d\x25\x36\x93\x89\x5d\x51\xa0\x55\x50\x72\xe8\x9a\x34", + .prv = "\x98\x42\x56\xb1\x2e\xf1\x54\xff\x6c\x2e\x1d\x03\x08\x26\x16\x4c\xba\x36\x14\xe3\xdf\x76\x88\xd8\x2b\x59\xe1\x62\x01\xc9\x11\x4d", + .pub = "\x4f\x03\x84\x9c\x24\xd5\x84\x53\x4d\x74\x30\x22\x20\xcf\xdc\x90\xe1\xbc\x36\x0b\xb5\xe2\x97\xc0\xfd\x0f\xd5\xf8\xd7\x99\xe4\x16", + .ok = 1 }, + { .tc_id = 286, + .comment = "special case for x_2 in multiplication by 4", + .shared = "\x5b\xa2\x11\x2a\x41\xb5\xbb\x38\x1f\x20\x24\x46\xfa\x9f\x23\xc5\x4d\x2d\xe1\x49\xf9\xad\x23\x37\x53\x41\x72\x63\x84\x0e\xa4\x32", + .prv = "\x68\x47\x14\x1d\x5d\x43\x77\xaf\x96\xa2\xa6\x47\xc6\x42\xee\x81\x60\x0f\xe4\x8d\x34\x67\xe3\xa7\x0f\x3e\xe3\x12\xbb\x62\x17\x42", + .pub = "\x49\x59\x77\x1a\x93\x1e\x24\x2d\x57\x13\xd5\xcb\x76\xf3\x33\x10\xc6\xa2\x83\xdf\x16\x64\x56\x04\x28\x95\x53\x80\x9c\xda\x65\x18", + .ok = 1 }, + { .tc_id = 287, + .comment = "special case for x_2 in multiplication by 4", + .shared = "\xa8\x7c\x9f\xdf\x40\xc4\x09\xb9\xed\xab\x48\x1b\x2c\xc6\x96\x87\xee\x1a\xb9\x2e\x34\x0c\x3d\xb0\x10\x7d\x40\xb5\xde\x6e\x7a\x20", + .prv = "\xe8\x5f\x11\x64\xe2\xab\x6f\xaf\x62\x66\x7c\x74\xb0\x3c\xe5\x29\xb4\x9a\x0e\x20\x41\xb1\xac\x0f\xa2\x42\xe5\x22\xd2\xb7\x69\x4c", + .pub = "\xf6\xfe\x69\x0c\xf5\x47\x04\x96\x35\xbb\x3a\x77\x85\x53\x7b\x43\x79\xc9\xee\x06\xb4\x61\x20\x49\x3b\x8b\xdb\x15\x2e\x09\xc8\x1d", + .ok = 1 }, + { .tc_id = 288, + .comment = "special case for x_2 in multiplication by 4", + .shared = "\x3b\xe9\x87\x98\xf0\x1e\x71\x63\x9f\x3c\xb8\xfd\x4a\x17\xbf\x27\x3e\x10\xc6\x7f\x89\x74\xdd\x98\x02\xee\xd5\x9d\x84\x7d\x40\x20", + .prv = "\x28\x1e\x1b\xbf\xa7\x11\xde\x69\x92\x1a\x64\xc5\xd2\x18\x3c\x33\x8d\xb5\x50\x46\x06\xce\x2b\x6b\x4c\xe1\xcd\xd5\x4b\x41\xe1\x4a", + .pub = "\xb4\x68\x68\x1a\x12\x75\x85\x0c\x11\xd3\x7e\xc7\x36\xaf\x93\x9a\x75\xa7\x09\x85\x14\xe0\x4c\xfc\x1c\x6c\xa7\x82\x39\xa8\x84\x26", + .ok = 1 }, + { .tc_id = 289, + .comment = "special case for x_2 in multiplication by 4", + .shared = "\x33\x8c\x99\x17\xdb\xf1\x1a\x0c\xab\xe8\xad\x4a\x65\x95\x92\x29\xbc\x00\xf9\x9c\x21\x1e\x75\x2b\x20\xb8\xb4\x9b\x87\x75\x6d\x0b", + .prv = "\x20\xaa\xcf\x19\x02\xb3\xcd\x60\x9d\x7e\xe1\x5c\xc9\x64\x53\xcc\x22\xe2\x89\x9d\x7d\x17\x85\x26\x80\xf2\xa7\x28\xba\xc6\xdc\x4a", + .pub = "\x2d\x71\xe8\x45\x70\x99\xe3\xf4\x45\xf9\xe2\xa1\x4f\x18\xb0\xf5\x91\x4b\xb3\x5f\x48\x2f\x9c\x06\x9b\x64\xbf\x63\x71\x0d\x42\x28", + .ok = 1 }, + { .tc_id = 290, + .comment = "special case for x_2 in multiplication by 4", + .shared = "\x56\xe2\xbf\xc7\xf6\xab\x7d\xa8\xfc\x73\x4a\xfc\x51\x5e\x57\xd0\x79\x4d\x00\x24\x34\xf9\xbc\x8e\x18\xbd\x0b\x72\xc0\xdf\x3c\x4a", + .prv = "\x00\x9e\x8e\x9f\xa9\x93\x80\x4d\xce\x94\xce\xcb\x96\xb1\xde\x25\x68\x24\x5a\x97\x05\x9e\x4d\x7a\xe1\x16\xec\xdb\x1b\xad\xd1\x41", + .pub = "\xfa\x8f\x24\xe9\x44\xde\x5d\x00\x37\x46\xd4\x63\x03\x50\xc0\xf4\xf6\x17\x5a\x32\x69\xc1\x91\x84\x82\x41\x05\x39\x8f\xbd\xd3\x29", + .ok = 1 }, + { .tc_id = 291, + .comment = "special case for x_2 in multiplication by 4", + .shared = "\x17\xfa\x12\x76\xd9\xfd\x50\x25\x17\x27\x36\x44\x9a\x1c\x0a\xe3\x35\x12\xe5\x03\x70\x14\xa1\x8d\xb5\x90\x3e\x47\xbb\x3b\xc9\x50", + .prv = "\xf0\x15\x74\x64\x3f\x23\x1f\xfa\xc0\x55\xbd\x23\x5e\xe7\x4d\xd4\x16\xb9\x4c\x8e\x55\xa2\xab\x2b\x4d\x13\xa8\xb7\x88\xd9\x01\x48", + .pub = "\xae\x4e\x37\xef\x53\xc7\x9e\x25\xe8\x27\x5a\x60\xf2\xfc\x1d\xfc\x27\x7e\xbc\x5d\x3b\x88\x42\x8c\x64\x32\xc3\xf9\x84\x94\x21\x2c", + .ok = 1 }, + { .tc_id = 292, + .comment = "special case for x_2 in multiplication by 4", + .shared = "\x16\x7a\x3b\x2f\xdc\xe9\x41\x3c\x89\xee\x89\x2d\xaf\x9f\x83\x9a\x2e\xea\x80\xea\x80\x44\x92\x40\x35\xdb\x17\x24\xa5\xb0\x21\x7c", + .prv = "\x38\x00\xa4\x26\x59\x95\x42\x81\xca\x26\x6d\x7c\xf1\xea\x9d\xb6\xd7\x98\x91\xa4\x06\xa7\x0f\x9e\x84\xc3\x57\x0a\x6a\x12\xd2\x4e", + .pub = "\x95\xe5\x6a\x83\x07\x92\x47\x8f\x7c\x42\x50\x40\x43\xa9\xca\xb8\xe2\xee\xbf\xf5\xfd\x90\x98\x37\x09\xe2\x9e\x03\xc0\xa4\x1b\x64", + .ok = 1 }, + { .tc_id = 293, + .comment = "special case for x_2 in multiplication by 4", + .shared = "\x30\xa4\xba\x79\x3f\x2d\xff\xe1\x70\x0c\x61\x42\x8b\x4d\x84\xb5\xfc\xd0\xaa\x99\xa2\x3b\x90\x3f\x84\xa4\x8e\xca\x5c\xc9\xfb\x0a", + .prv = "\x70\xa8\x26\xb1\x86\x96\x22\x18\xdb\xaf\xca\x11\x33\x19\xda\xef\xb5\xdd\xf3\xcf\x14\xe1\x5f\xe3\xfa\xad\xc4\xc0\xa2\xe4\x66\x48", + .pub = "\x5f\x16\xaa\x7c\xca\xbf\x4d\xa6\xb6\x86\xbd\x28\xc7\x46\x0e\x10\x6b\xb1\xb9\x7a\x82\x37\x92\x52\x77\x65\xc2\x9a\x9a\xd8\xfc\x71", + .ok = 1 }, + { .tc_id = 294, + .comment = "special case for DA + CB in multiplication by 4", + .shared = "\x2b\xf9\xab\x75\x0b\xd5\x8f\xf6\xf8\x77\xb7\x83\xed\xa4\x5a\x71\xa6\x5c\xc9\xb7\xc0\x37\xfc\xfe\xf4\xcb\x5f\x4c\x88\x42\xf5\x29", + .prv = "\xa8\x5a\x5e\xda\x0a\x26\x95\x00\xb3\xab\x0b\x58\x49\x5f\xc2\x54\xc2\x69\x10\x28\xac\x53\x34\x94\xb5\xf8\x6d\x44\xe9\xdc\x65\x4c", + .pub = "\x47\xfb\x78\x11\x18\x05\xa1\x19\x82\xa3\xd6\xc5\xd8\x3e\x8e\x18\x9e\x7f\xcc\x46\x2c\x9a\xbf\x80\x5d\x36\x25\xbe\x7a\x6e\xac\x11", + .ok = 1 }, + { .tc_id = 295, + .comment = "special case for DA + CB in multiplication by 4", + .shared = "\x35\xe9\x28\x92\x34\xbd\x5e\x53\x1d\xa6\x5d\x16\x1a\x06\x5a\x14\xf7\x85\x07\x60\x88\xd7\x41\xc9\xa2\xd8\x86\xef\xd7\xd1\x79\x21", + .prv = "\x18\x3f\x28\xec\x86\x76\x24\xef\x5e\xca\x48\x27\xed\x07\x14\xa5\x52\x5e\xf2\x1d\x5e\x35\x03\x8b\x24\xd3\x07\xa3\x39\x1a\x28\x46", + .pub = "\x03\xb8\xca\x5e\xfd\x17\x77\xd6\xd6\x25\xa9\x45\xdb\x52\xb8\x1f\x11\x21\x4d\xaf\x01\x5d\x09\xfd\xc9\xdf\x7d\x47\xb9\x85\x0e\x31", + .ok = 1 }, + { .tc_id = 296, + .comment = "special case for DA + CB in multiplication by 4", + .shared = "\x83\x3a\xfb\x86\x70\x54\xb8\xb9\xac\x70\xd6\x01\x3c\x16\x3e\x8b\x76\x76\xfd\x45\xae\x49\xa1\x32\x5f\x3a\xcb\x75\x97\x5d\x8c\x13", + .prv = "\x88\x8c\x64\x44\xff\x5e\xb4\x82\xb2\xb1\x0b\xd4\xe8\xa0\x1b\xdc\xcb\x65\xf3\x29\x34\xd8\x02\x61\x06\xf1\x6a\x91\x34\x9f\x48\x4c", + .pub = "\x4e\xca\x5f\x87\x31\xb0\xfa\x0c\x10\x6a\xcf\x57\x8b\x83\xa3\x50\xfa\x81\x73\xa2\x90\xf1\xeb\xa8\x03\x95\x6d\xe3\x4e\xeb\x76\x71", + .ok = 1 }, + { .tc_id = 297, + .comment = "special case for A in multiplication by 4", + .shared = "\x8a\x91\x47\x60\x12\x95\x75\xc8\xab\x32\x70\xd0\x4b\x04\x65\xfc\x2f\x32\x7a\xca\xf1\x67\x64\x63\x11\x38\x03\xbb\xb2\xec\x80\x21", + .prv = "\xc8\xa8\x5d\x14\x0b\xa1\x50\xf5\xc6\xa8\xd3\xcb\x36\x3b\xcb\xcb\x75\x36\x5e\x51\xc6\x16\x40\xe9\x74\xa0\x72\x5b\x5e\x9d\x59\x40", + .pub = "\xa5\x56\x2b\x4b\xa8\x6b\x46\x4d\xff\x4c\x2c\xfa\xe8\x5b\x38\x4b\xe2\x11\x77\x1e\xfe\x8a\x96\x97\xe5\x1d\x84\xde\x47\xf1\xeb\x14", + .ok = 1 }, + { .tc_id = 298, + .comment = "special case for A in multiplication by 4", + .shared = "\xc1\x98\x8b\x6e\x1f\x02\x01\x51\xec\x91\x3b\x4f\xb2\x69\x5b\xae\x2c\x21\xcc\x55\x3d\x0f\x91\xcf\x0c\x66\x86\x23\xa3\xe5\xa4\x3d", + .prv = "\x90\xa3\xae\xb1\x41\x7c\x3d\x61\xc1\xef\xef\x1a\xc0\x52\x21\x8f\xb5\x5d\x3a\x59\xc4\xfe\x93\x0b\x5a\x33\xcc\x51\x83\xb4\x85\x47", + .pub = "\x88\xae\x16\x31\xcd\x08\xab\x54\xc2\x4a\x31\xe1\xfe\xc8\x60\x39\x1f\xe2\x9b\xc5\x0d\xb2\x3e\xb6\x67\x09\x36\x2e\xc4\x26\x49\x29", + .ok = 1 }, + { .tc_id = 299, + .comment = "special case for A in multiplication by 4", + .shared = "\xbb\x24\x81\x7b\xd9\xff\xf4\x23\xdc\x09\x72\x90\x8e\x2c\x03\xfd\xdf\x4d\xbe\x10\x00\x16\xb4\x59\xf2\x8f\xe9\x59\x4a\xdb\x37\x14", + .prv = "\xb8\x58\xd7\x41\x4b\xd9\xab\x9a\x3e\xbe\xa7\x90\x64\xab\x87\xbc\x05\x0e\x74\x40\x7f\x4d\x47\x48\xf6\x2f\xa4\xd9\xd2\x03\xb6\x40", + .pub = "\xcb\xc4\xd5\x5d\x5b\xfd\xdd\x0b\xc5\xc5\xed\xbe\x3a\x04\x83\x6b\x2c\x70\x1d\x25\x19\x5b\x26\x22\x1c\xbe\xa1\x93\x11\xe5\x5a\x3d", + .ok = 1 }, + { .tc_id = 300, + .comment = "special case for A in multiplication by 4", + .shared = "\xb3\xb4\x51\x3f\x8a\x31\x02\xe1\xae\x78\x2f\xbc\x69\x88\x81\x77\xf2\xc2\x4c\x56\x93\x03\xa5\xd0\x1a\xb1\xc3\xc5\xe2\x85\x52\x4a", + .prv = "\xf8\x25\xed\xf1\xf7\x9e\xdd\xd7\x15\xa7\x2b\x3a\xc2\x67\xd6\xb2\xe9\x7e\x18\xbb\x13\xbc\xaf\xda\xc5\x94\x03\x70\xb8\x5b\xa6\x4b", + .pub = "\xd6\x6a\x2f\x9f\x75\x77\xe2\xdf\x4a\x56\xcb\x51\x96\x2b\x30\x56\xff\x5c\xc0\x49\x4c\x60\xf3\x95\x11\x78\x2e\x79\x92\x3e\xdd\x41", + .ok = 1 }, + { .tc_id = 301, + .comment = "special case for DA - CB in multiplication by 4", + .shared = "\x47\x1b\xa9\x1a\x99\x63\x4f\x9a\xcf\x34\xfd\x7f\xd5\x8f\x72\x68\x2b\xe9\x7e\xe1\xc8\x21\x48\x6d\x62\xba\x4e\x44\x8c\xbc\x04\x17", + .prv = "\xb0\xa7\x10\xb4\x70\xe3\x24\xbb\x56\xa7\xd8\xff\x87\x88\xd0\x5e\xb3\x27\x61\x61\x29\xb8\x49\x72\x48\x24\x25\xea\x4a\xd4\xf3\x4b", + .pub = "\xde\x0f\xed\x2f\xab\x6e\x01\x49\x26\x75\xbc\x75\xcb\xe4\x5d\x7b\x45\xb0\x30\x6c\xec\x8d\xc6\x76\x11\x69\x98\x11\xc9\xaa\xef\x16", + .ok = 1 }, + { .tc_id = 302, + .comment = "special case for DA - CB in multiplication by 4", + .shared = "\xcd\xb3\xca\x02\xd5\xfd\xb5\x36\xdb\xc7\x39\x5b\xab\x12\xbd\xcf\xd5\x5b\x1a\xe7\x71\xa4\x17\x6d\xed\xb5\x5e\xb4\xd7\x55\xc7\x52", + .prv = "\xb8\x98\xf0\x32\x97\x94\x74\x7d\x33\x26\x9a\x39\x89\xb6\x7e\x43\xa7\xab\x5a\x55\xfa\x12\x10\xb0\xe5\xdb\xa1\x93\xf4\xfa\x09\x4e", + .pub = "\x64\x18\xd4\x9f\xe4\x40\xa7\x55\xc9\xff\x1a\x35\x82\xd3\x5d\xc9\xb4\x4c\x81\x84\x98\xf1\x57\x82\xc9\x52\x84\xfe\x86\x8a\x91\x4c", + .ok = 1 }, + { .tc_id = 303, + .comment = "special case for DA - CB in multiplication by 4", + .shared = "\xcd\x32\x45\x40\x3f\xd9\xed\xfc\xf9\x1c\x95\x81\xeb\xb2\xeb\x7c\x77\xad\x68\x37\xfc\xa3\x72\x47\x9e\x78\xde\x9f\xaf\x60\xa3\x4a", + .prv = "\xa0\x52\x8e\xd9\xa8\xec\x22\xeb\xe9\xcc\x2e\x32\xfa\xfc\x3f\x46\x75\x00\xa9\xa2\x2f\x53\x77\x38\x2d\xf6\x60\x4e\xdc\xdf\x4f\x44", + .pub = "\xa8\x9b\xcf\xa2\x36\xbb\xcc\xf0\x7c\x43\x4b\x59\xf8\x65\x5f\xb0\x85\xb6\xcb\xe5\xed\x63\x76\x28\x1d\xf8\x13\xaf\xba\x22\xb7\x52", + .ok = 1 }, + { .tc_id = 304, + .comment = "special case for DA - CB in multiplication by 4", + .shared = "\xab\x7c\x47\xec\xb0\xc0\x16\x71\x56\xf4\x4f\x66\xa5\x27\x26\x4b\x95\x8f\xc9\x92\xc2\x1c\xe9\x8c\xef\x3a\xe2\x14\xd6\x6b\xd8\x2d", + .prv = "\xf0\x68\x88\xbd\xe7\x5d\x68\x9d\x05\x68\x74\xf6\x43\x60\x00\x49\x7d\x22\xd8\xad\x9b\x95\xa1\xc6\x7d\xe1\xdd\xa4\xad\xa3\x16\x4d", + .pub = "\xcd\xb1\xf9\x5f\x6e\xac\xc2\x4b\x6d\x02\x9c\x6e\xd9\x76\x66\x6d\xc5\x17\x94\xdb\x8e\x4a\xa9\x66\xba\x85\x0f\xd7\xf5\x04\x89\x65", + .ok = 1 }, + { .tc_id = 305, + .comment = "special case for DA - CB in multiplication by 4", + .shared = "\x1b\xfa\x26\x4a\x7c\x72\x29\x14\x7a\x20\xdd\x02\x12\x11\x89\x1e\x61\xf5\xd8\xc7\x6c\xd8\x3f\x0b\xe2\x4b\xc7\x0e\x46\x6a\x81\x5b", + .prv = "\xe0\x34\xfc\xaa\x3a\xe4\x06\x03\xf9\xb2\x2a\xf1\x59\xfd\x67\xef\x00\x93\x80\x94\x6d\xe9\x2c\xb1\xd8\x3c\xc4\x89\xe8\xb3\x50\x41", + .pub = "\x94\x91\xa8\x27\x44\xf1\xcb\x61\x05\xb7\x6b\x04\x42\xe5\x4e\x60\x5a\xc6\x7f\x47\xa1\xb2\xb3\xb5\x52\xd4\x86\xf7\x5b\xd9\x8e\x6a", + .ok = 1 }, + { .tc_id = 306, + .comment = "special case for C in multiplication by 4", + .shared = "\xc4\x60\x57\xfc\xf6\x30\x88\xb3\xa8\x0e\x0b\xe5\xce\x24\xc8\x02\x6d\xfa\xdd\x34\x1b\x5d\x82\x15\xb8\xaf\xcb\x2a\x5a\x02\xbb\x2b", + .prv = "\x70\x2a\x74\x48\xc0\xed\x58\xe1\xf4\xe0\xe3\x32\xd0\x96\xa3\x63\x60\xbe\xca\x2f\x69\x55\xc8\x15\xbc\x12\x0b\x3a\x69\x1d\x77\x42", + .pub = "\x4d\x19\xe1\x56\xe0\x84\xfe\x58\x2a\x0e\xb7\x9b\x2f\x12\xb6\x1d\x0b\x03\xf3\xf2\x29\x22\x7e\x79\x8a\x93\x3e\xea\x5a\x1b\x61\x29", + .ok = 1 }, + { .tc_id = 307, + .comment = "special case for C in multiplication by 4", + .shared = "\xd4\x36\x1e\x26\x12\x7a\xdf\xbe\x37\xc2\xed\x8f\x42\xcc\xe4\xeb\xab\x8a\xb7\x4e\xd9\xe7\x4f\x14\xc3\x43\x5d\x61\x2c\x1a\x99\x2a", + .prv = "\x50\x02\x5c\xb5\x08\xad\x4f\xaa\x06\xfa\xfd\x0f\x4a\x33\xb7\x47\xcc\xf1\xb3\x57\x38\x85\xd3\x42\x65\x00\xd5\x1b\x56\x30\x01\x44", + .pub = "\xcc\x47\x29\xc4\xea\xe2\x92\xe4\x31\xec\x3a\x5c\xf5\x02\x0e\x19\xf9\xbe\xa5\x0e\xf3\x21\x8d\x9a\x79\x00\x34\x52\x6c\x3e\xe1\x4a", + .ok = 1 }, + { .tc_id = 308, + .comment = "special case for C in multiplication by 4", + .shared = "\x80\xdf\xae\x7a\x28\xbb\x13\xd9\xe5\x1f\xf1\x99\x26\x7c\xec\x2a\x19\xdf\xc8\xb6\xf4\x97\x4e\x34\x46\xb2\xf6\x2f\xe9\xb6\x24\x70", + .prv = "\x70\x82\xfc\x53\x29\x9a\x4d\x30\xe5\xd0\xc3\x83\xc0\x35\x93\x5b\x1e\xee\xbd\x94\x08\xfe\x4d\x04\xb9\x3e\xec\x24\xbe\x52\xeb\x47", + .pub = "\x4a\x47\x42\x49\xaf\x8f\x77\x1f\x0c\xfb\x11\x16\xf2\x4f\xda\x4c\x42\xf4\x13\x6d\x2a\xfb\x76\x6d\x1b\x29\x1c\x73\xc6\x66\x8d\x5a", + .ok = 1 }, + { .tc_id = 309, + .comment = "special case for C in multiplication by 4", + .shared = "\x7a\x5c\x37\x30\x65\xe3\x39\xb2\x6e\xe5\x37\xcf\xf1\xcf\x45\x97\xcf\xcb\x4b\xf2\xdc\x7c\x4b\xcf\xec\x98\x84\x44\x32\x81\xc2\x73", + .prv = "\x98\xff\x7e\x71\x1d\x65\xcc\x7f\xd9\xd0\xac\x12\xdf\xe8\xb8\x94\xe0\xa9\x36\x02\xca\x9e\x75\xbf\x0e\xab\xbf\x0b\xfe\x67\x01\x48", + .pub = "\x0f\x2a\x5c\xbb\xe5\x03\x13\x95\x31\xac\x05\x29\x18\x3d\xa8\xe6\x24\xd2\x52\x86\xf6\xe3\x5d\x14\x07\xab\x1f\x4d\x76\xeb\xc2\x60", + .ok = 1 }, + { .tc_id = 310, + .comment = "special case for z_2 in multiplication by 4", + .shared = "\xc5\xed\xcc\x5d\x44\x70\x71\xc0\x8d\xfa\x82\x81\x41\x4a\xe6\xa0\x2d\xe7\x53\xe2\xf7\xbb\x80\xaf\x5f\x62\x53\xe5\x6d\xb4\x34\x22", + .prv = "\xb0\x80\xf4\xac\x1e\x75\x8b\xbf\xbf\xa8\x88\xa7\x8c\xb8\xd6\x24\xd9\x7b\x86\x88\x00\x2b\x20\x17\xe3\x5f\x52\xf3\xd7\xc7\x96\x49", + .pub = "\x2f\xe1\x1d\x72\x3d\xba\x63\x55\x9e\x1b\x96\x14\x78\x93\xcb\x7e\xc8\x62\x71\x18\x06\x31\x6d\xaa\x86\xcd\x4d\xa7\x69\xd4\xb2\x2d", + .ok = 1 }, + { .tc_id = 311, + .comment = "special case for z_2 in multiplication by 4", + .shared = "\x26\x3a\x38\xfe\x53\x8b\x50\xe8\xe9\x88\xbf\x07\xae\x86\xf3\x3d\x49\x88\x6b\x14\xc7\x14\x3e\xfd\x1d\x20\x25\xc8\x40\xe3\x6a\x25", + .prv = "\xe8\x15\xbf\x9a\x96\x7e\x12\x08\xaf\x8e\x74\xce\x9a\xf6\xd1\x13\xda\xb1\x7c\x01\xc9\x0f\x1a\xe2\xbc\x25\xe3\xe2\xf9\xe3\xa4\x4a", + .pub = "\x98\xe1\x21\x1d\xcf\x66\x51\xfa\x9f\x2d\x00\xeb\x08\x3a\xe5\x85\x58\x69\xa2\xa5\x3e\x83\x5f\x2e\x03\xb3\x0c\x0a\x19\xba\x80\x51", + .ok = 1 }, + { .tc_id = 312, + .comment = "special case for z_2 in multiplication by 4", + .shared = "\x34\x0a\xcf\x28\x01\xde\x71\xc1\x8f\x4c\x79\xcf\xea\x37\x2b\xc3\x54\xe4\xc8\xa5\xeb\x5c\x2c\xce\x8b\x45\xd8\x85\xdf\x16\x2f\x45", + .prv = "\x40\x51\xb0\x1c\xdf\x90\xaf\x38\xf0\xa9\x6f\xfb\x83\xf8\xd4\x13\x3a\xbe\x4f\xb0\x35\xb6\xfe\x6f\x65\x27\x64\x47\xca\xa7\x31\x4f", + .pub = "\x2f\x1b\x93\x8b\x81\xa4\xc9\x0e\x12\x51\x13\x5a\xd7\xfa\xbe\x83\x5f\x6a\x8b\xc5\xe2\x2d\x4b\x2a\xb1\x19\xf6\xf6\x77\x87\x76\x77", + .ok = 1 }, + { .tc_id = 313, + .comment = "special case for CB in multiplication by 4", + .shared = "\x9e\xfe\x5c\xd7\x11\x02\xd8\x99\xa3\x33\xa4\x5e\xa6\xd2\xc0\x89\x60\x4b\x92\x6d\xb8\xc2\x64\x5c\xe5\xff\x21\x49\x2f\x27\xa3\x14", + .prv = "\x98\xc0\x92\x36\x31\x84\xe5\x8a\xd6\xce\x51\x0b\xd3\x2b\x30\x9c\x9d\x5a\x46\xf8\xd9\xee\x6f\x64\xa6\x9d\x81\x80\xbb\xc6\xcb\x45", + .pub = "\x34\x0b\x9f\x61\x35\x50\xd1\x4e\x3c\x62\x56\xca\xf0\x29\xb3\x1c\xad\x3f\xe6\xdb\x58\x82\x94\xe2\xd3\xaf\x37\x60\x5a\x68\xd8\x37", + .ok = 1 }, + { .tc_id = 314, + .comment = "special case for CB in multiplication by 4", + .shared = "\x19\x61\x82\x09\x5b\xcd\x2e\xf4\x6b\x18\xf6\x4c\x63\x60\x7e\x0a\xb1\x62\xa0\x86\x9e\x62\x65\xac\x8a\xe3\x5e\x35\x8c\x3d\x8a\x63", + .prv = "\x68\x6e\x51\xc0\x01\x16\xd1\xc1\x91\xaa\x9d\x58\x23\xb9\x6e\x59\x56\x10\x2e\x8f\xe7\x5f\x5c\xf2\x37\x6d\x99\x98\x9f\x6f\x43\x42", + .pub = "\xed\xfb\xd6\xf0\x9a\xa3\x24\x35\x44\x0b\x0c\xa8\xba\x43\x63\x08\x31\x96\x13\xf8\xf2\xd5\x01\x13\x3c\x52\x6c\x3f\xf5\x5c\x7b\x3d", + .ok = 1 }, + { .tc_id = 315, + .comment = "special case for CB in multiplication by 4", + .shared = "\xa3\xc6\xb7\x51\x68\x21\x1e\x8e\x0a\x49\xca\x81\x5b\xfe\x3f\x46\x9f\x29\x86\x4d\xc8\x16\x61\x52\xb4\x56\xe7\x07\x4a\xfa\x9b\x5b", + .prv = "\x20\x8a\xf2\xc9\x44\x2b\x36\xb5\x21\xfc\x3a\x1e\xce\xfe\x34\x2a\xac\x30\x8b\xd6\xe6\x29\x6e\xe0\x91\xc1\x96\xdc\x02\xe7\xae\x40", + .pub = "\x9b\x05\x38\xcd\x61\x8b\x0a\x4d\xe0\x9e\x45\x42\x0f\x84\xd5\x4d\x74\x51\x4f\xbb\x1a\x31\xc1\xa4\xaa\x1e\x93\x30\x6f\x20\x72\x3f", + .ok = 1 }, + { .tc_id = 316, + .comment = "special case for CB in multiplication by 4", + .shared = "\xde\xaa\xe6\xc9\x95\x28\x44\xa3\xa1\xd0\x16\x88\xe7\x10\x5b\x0b\xbe\xad\xc1\x60\x76\x3c\x20\x02\xb6\xd0\xbc\xf3\x5c\x22\xd1\x23", + .prv = "\xc0\xd8\x61\xa6\xd5\xff\x91\xf9\x1e\x3b\xd0\x59\x34\x16\x1f\xf0\xab\x0f\x3c\xe7\xe4\xa2\xb5\xb4\xfc\xb3\x1a\xe3\x4b\x46\x66\x4f", + .pub = "\xae\x8c\xf2\xfc\xdd\xe7\x10\xc2\xc1\x18\x45\x24\xbc\x32\x43\x08\x74\xdf\xa0\x8c\x12\x5f\x61\xd6\x91\x9d\xaf\x8e\x66\xdb\x41\x5a", + .ok = 1 }, + { .tc_id = 317, + .comment = "special case for AA in multiplication by 4", + .shared = "\xc2\x04\xbd\x15\xf0\x1a\x11\xa2\xef\xda\xbe\x2e\x90\x2b\x7c\xd0\xaa\x07\x93\x16\xf6\x0e\x91\x1b\x3e\xe5\xd4\x62\x62\xe9\x86\x31", + .prv = "\x70\x78\x5c\xad\x16\x09\x72\xb7\x11\x31\x86\x59\xb4\x7b\x57\x4f\x69\x41\xef\x6d\xa1\xea\x06\x50\x8b\x26\x50\xf5\x7e\xc9\xe5\x4a", + .pub = "\x2a\x59\xf4\x78\x40\x2d\x28\x29\xcd\x3b\x62\xe9\xf7\xcc\x01\x44\x5e\x8e\x73\xa4\x2c\xb1\x1a\xf0\x0b\x6b\x9a\x9f\x0e\x44\xcb\x3b", + .ok = 1 }, + { .tc_id = 318, + .comment = "special case for AA in multiplication by 4", + .shared = "\xc5\x45\x74\x87\xe9\x09\x32\xf5\x7b\x94\xaf\x2e\x87\x50\x40\x3e\x09\xc9\xac\x72\x7e\x2b\xd2\x13\x59\x04\x62\xb6\x93\x7b\x07\x53", + .prv = "\x60\xaf\xc8\xeb\x1f\x87\xdf\x4b\x55\x28\x7f\x3c\x46\x98\xc5\xf8\xb9\x97\xb2\x8a\x73\xc5\x73\xfc\x27\x3e\x9c\x46\x7f\xb7\xe4\x4c", + .pub = "\x83\x6c\x8e\x45\xdd\x89\x0e\x65\x8c\x33\xe6\x9b\x6f\x57\x8a\x5a\x77\x4c\x48\xb4\x35\xbc\x3b\x91\xac\x69\x3d\xf9\x4a\x05\x58\x57", + .ok = 1 }, + { .tc_id = 319, + .comment = "special case for AA in multiplication by 4", + .shared = "\x4e\xd6\xf8\xd6\x29\x32\x54\x1c\x6b\xea\x16\xe0\x38\x35\xf1\xf7\x58\xa5\xc4\x17\x22\xb5\xc9\x98\x9c\x9c\x7c\xc0\x8e\x34\xe3\x7b", + .prv = "\xa8\x3c\x11\xb2\x83\x41\x36\xb9\xaa\xf0\x15\x2d\x90\xe7\x6e\x3c\x27\x17\x76\x93\xa2\x83\x4e\x8b\xed\xa0\xa3\x57\x1b\xce\x69\x47", + .pub = "\x59\x51\x9e\xad\x79\x95\xa6\xdf\x89\xbb\x54\xc8\x40\xd6\x1a\x84\x81\x88\x10\x98\xb8\xa4\xf8\x3c\x6a\x2f\x6b\xa8\x00\x33\x82\x57", + .ok = 1 }, + { .tc_id = 320, + .comment = "special case for AA in multiplication by 4", + .shared = "\x52\x1a\x5b\x81\x49\xa1\x32\xd1\x55\xe6\xb4\xed\x11\x39\x00\x50\x6c\xfc\x2f\x76\xd2\xa3\xe1\x41\x96\xd6\x9e\xb8\x5d\xb3\xc9\x52", + .prv = "\xb8\x0d\x87\x95\x73\x58\x06\x57\x9e\x71\x75\x98\x94\x93\x9d\x75\x88\x53\x59\x21\x27\xef\xe8\x4f\xc8\x2e\xb7\xcd\xee\x45\x01\x4f", + .pub = "\x32\xf3\x4d\xa8\x4a\xb4\xbf\xca\x36\x9c\x4b\x88\x46\x91\xbe\xcf\x54\xbe\x7f\xbe\xd1\x64\x49\xdc\x86\x96\x9d\xa7\xea\x9a\xbf\x62", + .ok = 1 }, + { .tc_id = 321, + .comment = "special case for AA in multiplication by 4", + .shared = "\xe8\x31\xd6\xce\xe9\x5c\xa1\xb4\xc9\x6b\xb8\x94\x57\x56\x2f\xff\x36\xcb\x4d\x08\xb8\x1d\xa8\x9b\x81\x0b\x42\x5e\xcd\xba\xfd\x78", + .prv = "\xe0\x8f\xfa\x45\xef\xbe\x1f\x96\x58\x4c\x76\x25\x45\x54\xad\xb9\x17\x7b\x58\xed\x09\x60\x9a\x6c\xe4\x99\xe5\xbd\x22\xd3\x5c\x45", + .pub = "\x82\xae\x48\xdc\xf5\x9b\xc5\xe4\x69\xf9\xa1\x1b\x18\xa3\x2d\x47\x53\xac\x81\x86\x92\xdf\xae\x27\xd6\x75\x41\x1a\x22\x72\xb3\x63", + .ok = 1 }, + { .tc_id = 322, + .comment = "special case for AA in multiplication by 4", + .shared = "\x35\x0e\x3a\xb9\xd0\xdb\xff\x78\xf3\xf2\x15\x74\x28\xbe\xba\x18\x93\x33\xbe\x27\x48\x27\xc1\x0d\x59\x67\x3f\x21\xc0\xc4\x8a\x24", + .prv = "\x68\x8e\x1b\xbb\x51\x14\xf3\x4e\x85\x31\xc2\x78\xb2\xd9\x71\x4b\xa0\x7c\x32\xa7\xae\xa6\xe6\x27\x13\x5b\xd1\xfc\x65\x23\x80\x45", + .pub = "\xb3\x3b\xd3\xad\x14\xb6\x68\x96\xf9\x71\xcb\xdf\x27\x78\x5f\xc3\xaa\x3c\xfb\x39\xad\xc6\xc2\x92\x57\xd2\x2e\xa4\xdf\x8c\xbf\x63", + .ok = 1 }, + { .tc_id = 323, + .comment = "special case for AA in multiplication by 4", + .shared = "\xad\xe7\x1d\x64\x60\x28\x7f\xe8\x08\xe9\x47\x56\x0e\x67\xa9\xd6\xff\x2f\x96\xea\xa1\x35\x5d\x2e\x9f\xbb\xe5\x49\xe8\x83\x38\x1b", + .prv = "\x80\x36\xa4\xe2\xe9\x3e\x9e\xd8\x2d\x99\xd7\x1a\x52\x2a\xac\x92\x89\xbd\x99\x05\xfe\x41\xd0\x1d\x08\xa4\x99\x37\x6a\x25\x84\x42", + .pub = "\x18\xe5\x8d\xf6\xbf\xbe\x18\x4b\x0e\x3c\x7c\x4b\xf2\xa0\x51\xed\x05\x5b\x79\x35\x01\xc0\xd4\xfc\x47\xbc\x8a\x95\xc4\xde\xec\x7c", + .ok = 1 }, + { .tc_id = 324, + .comment = "special case for DA in multiplication by 4", + .shared = "\x91\xa9\xbe\xc2\x8c\xf1\x8c\x70\x94\xe2\xd8\x0d\x27\x64\xdf\x59\xad\xa0\xcb\x19\x46\xbe\x42\x28\x64\xbd\x7a\xd0\xe5\x33\xb6\x63", + .prv = "\x90\x1b\x20\xf0\xcd\xa7\x40\x76\xc3\xd4\xbf\x4e\x02\x65\x3c\xd4\x06\xed\x48\x0c\x35\x51\x59\xe2\x2c\xa4\x4b\x98\x4f\x10\x76\x4f", + .pub = "\x77\x2e\x31\xe7\x76\xe8\xd4\xf2\x3b\x7a\xf2\x03\x7a\xf2\x8a\x37\xe6\x8f\x61\xe7\x40\xb3\x90\x4f\x4e\xc4\xc9\x01\x57\xbe\x14\x78", + .ok = 1 }, + { .tc_id = 325, + .comment = "special case for z_2 in multiplication by 5", + .shared = "\x6c\x1b\x8e\x24\x0e\xdf\xa5\xdb\x2a\xbb\x3d\xc1\x2b\xcf\x9e\x8a\xc9\xca\x10\xdd\x35\x07\x08\x37\x46\xf6\xf3\x6d\xc0\x35\xd7\x55", + .prv = "\xd8\x3e\xb7\xaf\xfd\x1b\xcc\x1e\xc0\xb4\x82\x3c\xee\x5c\xf0\xb1\x5b\x5f\x57\x08\x5a\xa2\x70\x8e\xd4\x37\xa2\x92\x53\x29\xb5\x50", + .pub = "\xa8\xd5\x5d\x5c\x11\x37\xe9\xbb\x62\x65\x57\xf9\xd6\xee\xa8\xd3\x12\x0e\x93\x64\xf8\xbc\xd9\xb6\x79\x34\x26\x0b\x1a\x09\x18\x01", + .ok = 1 }, + { .tc_id = 326, + .comment = "special case for z_2 in multiplication by 5", + .shared = "\xd4\xc3\xb3\x46\x77\x14\xf2\xd1\x05\x90\x4a\x84\xcc\x7e\x81\xd7\xf2\x91\x30\x4e\x90\x80\x41\x68\x2d\x89\x06\xa6\x83\xc1\x21\x25", + .prv = "\x98\x9e\xee\x31\x7b\x9c\x25\x4d\xc0\x23\xf9\xe3\x5e\xff\x02\x24\xbc\x2e\x0b\xc8\x71\x99\x6b\x94\x6a\x96\x97\x0e\x75\x06\xa8\x5e", + .pub = "\x33\xc9\x4b\xe5\x8b\x0f\x0e\x6c\xf3\x63\xe1\xb1\x2a\x2e\xbf\xb9\x30\x40\x71\x5b\xe9\x15\x18\xf2\x1d\xf2\x95\x3e\xea\xb5\xfb\x01", + .ok = 1 }, + { .tc_id = 327, + .comment = "special case for z_2 in multiplication by 5", + .shared = "\x1e\xbe\x6c\xa7\x11\xa6\x49\xae\x48\x7b\x33\x27\x47\xe3\xdc\x03\x06\x34\x05\x60\xca\xb6\xbc\x60\x29\xe4\x4f\x6a\x7e\x0e\xe4\x1c", + .prv = "\xb8\x35\x54\x55\xd3\x58\xf2\xdd\x7c\x57\x07\xb2\xc6\x97\x3c\x9c\x27\xb9\x9e\x7d\x8a\xc1\x65\x0c\x79\x1e\x5f\xdb\xcb\xea\x49\x57", + .pub = "\xa2\x18\xae\x96\x24\xb0\x7c\xe0\x51\x78\xb9\xd0\xcc\x1b\x71\xde\xe2\x1f\x27\x85\x2a\x2c\xeb\x18\x61\x0b\x40\x52\xb2\x44\xf0\x0f", + .ok = 1 }, + { .tc_id = 328, + .comment = "special case for z_2 in multiplication by 5", + .shared = "\x03\xe7\xa7\x77\xe6\x48\xbd\xc6\x12\x18\x9f\x3c\xd4\x2d\x34\xe3\x57\x36\xd3\xe5\x2e\x6e\xdc\x8a\xc8\x73\xa5\x8e\x24\x4a\x60\x73", + .prv = "\x80\x65\x56\x7e\xf0\x82\xb1\x6c\x20\x85\x34\x87\xf5\x48\x93\x01\x2b\xa4\x76\x22\x24\xe5\xc5\x9f\x25\x0d\xfb\xf8\x25\x81\xe8\x5a", + .pub = "\xd7\x06\x7f\xae\xaf\xd3\xe9\x66\xe5\x75\x25\xf9\x30\xb3\x31\x7c\x9e\x8b\x9c\x9a\x9a\xe9\x46\xe7\x6c\x1e\x46\x02\xa5\x9a\x7e\x33", + .ok = 1 }, + { .tc_id = 329, + .comment = "special case for z_2 in multiplication by 5", + .shared = "\x30\x8e\xf9\x9d\xae\x10\x64\xa4\x44\xfa\x90\x77\x5b\x5d\xd5\xb1\x95\x2d\x72\x24\xa0\xe5\xae\x03\x1d\xf4\x32\x64\x0f\x41\x62\x08", + .prv = "\x00\xb5\x14\x48\x13\x9a\x61\xfe\x6c\x5f\xbf\x93\x95\x87\x7d\x53\xd8\x20\xef\x59\xda\x3b\xe8\x56\x45\x8b\x5e\xb9\x09\x85\xba\x53", + .pub = "\x8d\xf9\x68\x2c\xbe\x88\x02\x47\x8a\x85\x31\x37\x7e\x75\x2c\xdd\xe5\x47\x38\xd5\x28\xd6\x39\xbe\xa9\xea\xf4\x77\x02\xf8\xbf\x3b", + .ok = 1 }, + { .tc_id = 330, + .comment = "special case for z_2 in multiplication by 5", + .shared = "\xf3\x3e\x2e\x86\x44\x3a\x2c\x68\x82\x3b\x72\xa2\xb5\x9d\x6a\x02\x8e\x0a\x8e\x28\x3c\xfe\x29\xfe\xa4\xf7\xaa\x22\xbd\x1a\xfe\x72", + .prv = "\xe8\xeb\x9f\x6f\x62\xf9\x3d\xbc\x32\x5b\x83\x3a\xa7\x63\xa9\x0f\x13\xf0\xac\xb2\xc2\xc4\xb8\xb3\x3d\xec\xd4\x71\xce\x70\xc4\x5f", + .pub = "\x7d\x92\x70\x68\x68\xaa\x09\x53\x86\x38\xd6\x33\xc2\x55\xf3\x33\xb9\xda\x03\xbc\x74\xb4\x9b\x35\x94\x1c\x57\x82\x0c\xd3\xfd\x47", + .ok = 1 }, + { .tc_id = 331, + .comment = "special case for E in multiplication by 5", + .shared = "\x7b\x53\x5f\xc3\x1c\x6c\x2a\x38\x03\xd8\xbd\x45\x41\x0a\x17\x81\xbd\x90\xa0\x92\x05\xda\x28\xc9\xdf\x12\x0d\xf2\x3a\x9f\xa3\x2d", + .prv = "\x68\xa1\xa7\xcc\xc5\x0b\xab\x4b\x01\xe5\x5e\x18\xcb\xd4\x64\xaf\xf4\x31\x31\xfb\x07\x41\xe6\x8d\x53\xcd\xeb\xfc\x54\xf3\x30\x51", + .pub = "\xdf\xb1\xff\xc1\x76\xaf\xf8\x4d\xb3\x01\x82\xd2\x37\x8f\x83\x72\x8f\x83\xdd\x1b\x33\xd7\x98\x56\xf3\xda\x54\x59\xcf\x9d\xf9\x07", + .ok = 1 }, + { .tc_id = 332, + .comment = "special case for E in multiplication by 5", + .shared = "\xca\x23\xa7\x81\xda\x09\x11\xe4\x11\x5a\x29\xa9\xf5\x64\x47\x15\x7c\x23\xbe\xe1\x87\xb0\xc1\x73\x69\xc4\xf7\x73\x0d\x78\x17\x18", + .prv = "\xe0\x75\xbc\xfc\x16\x5a\x47\x1b\x2f\x76\xc3\x00\x3f\xb0\x17\x2c\x82\xf7\x07\x13\x7d\xe2\xfa\x70\x82\xe4\x3a\x87\xa2\x55\x93\x5c", + .pub = "\x12\xe8\x1e\x83\x8b\x21\xea\xc9\x6d\xc1\x30\x43\x25\x71\x21\x6d\x7a\x9b\x4a\x81\x7f\x19\x38\x72\x1d\x22\x67\xdd\x15\x0e\xbf\x20", + .ok = 1 }, + { .tc_id = 333, + .comment = "special case for E in multiplication by 5", + .shared = "\xcd\x06\x86\xb3\x2e\xa4\xcd\xdb\x8e\x13\xff\x20\xa7\x8d\x38\x07\x49\xa5\xd4\xf6\xa3\xdc\x55\xd7\x2f\x48\x13\xd9\x49\xa0\xea\x57", + .prv = "\xc0\xe1\x96\x34\xdb\xf6\x46\x0e\x14\x86\x93\x0c\x46\xe8\x55\x6b\x3c\x16\xd6\xde\x95\x99\x04\x60\x05\x49\xbb\x3e\x08\x60\x34\x55", + .pub = "\x83\x2a\x46\xae\xc0\x22\x40\xd7\x16\xfe\x22\xde\xa9\x4a\xd5\x66\xa3\xfa\xfb\xee\xdc\xce\x35\xc8\x3e\x41\xe5\x80\x76\xc9\x97\x49", + .ok = 1 }, + { .tc_id = 334, + .comment = "special case for E in multiplication by 5", + .shared = "\xa9\x50\xaa\x57\xbb\x2b\xeb\x9e\xd5\xd3\x22\x8c\x7e\xf4\x48\xda\xb6\x95\x52\xf3\xd3\xb1\xe4\x66\xac\xcf\x41\xbf\xb6\xd5\xb8\x74", + .prv = "\xb8\x4c\xaa\x18\xac\xc3\xdb\x37\x22\x5d\x32\xca\xb4\xf6\x0e\x6f\xba\x4a\xca\xb1\x27\x7e\x20\x42\x5d\x30\xf9\x4c\xab\x2e\x2c\x55", + .pub = "\x8c\x80\x33\x43\x2b\xcc\x12\xd4\x79\xf6\x7d\x6d\x87\x6b\x1c\x8e\x89\xf1\x6a\x23\x4b\x9b\x09\x33\x22\xef\xfa\x9d\xee\x94\x55\x4d", + .ok = 1 }, + { .tc_id = 335, + .comment = "special case for E in multiplication by 5", + .shared = "\x54\xf5\xae\x57\xe6\x76\xd0\x8c\x8f\x8a\x3c\xf8\x91\xe3\x6d\xda\xab\x75\x10\x93\xf9\x2f\x40\x90\x60\xc5\x7e\x74\x59\x41\x70\x0e", + .prv = "\x28\x96\x81\x8c\xdd\xf5\x72\x52\x19\x43\xe9\xf0\xc5\xe8\x45\xf5\x30\xb7\x40\x42\x75\x88\xa0\xf6\xde\x25\x04\xbd\x5b\xf4\x0c\x53", + .pub = "\x6d\xf7\x99\xbb\xa6\xcd\xf5\xf4\x6a\x57\xab\x22\x7f\x93\xfb\xa4\x91\xda\xd2\x96\xa2\xfd\xb7\xe4\x91\x92\x1d\x61\x0c\xce\x8f\x5e", + .ok = 1 }, + { .tc_id = 336, + .comment = "special case for AA in multiplication by 5", + .shared = "\x2d\x49\xb0\x9f\x81\xf3\xf6\xfa\xb2\xc6\x7e\x32\xf1\xbc\xea\xd2\xad\x09\xac\x9e\x0d\x64\x2b\x08\x73\xbe\xcf\xb6\x4d\xe2\xab\x23", + .prv = "\xa0\x1f\x0c\xad\x98\xcf\x29\x05\xb8\x12\xd3\x53\x05\x31\xbb\x3a\xc8\x99\x39\x1a\xbd\x1e\xaf\x4a\x3e\xbe\xd9\x6a\xc6\x12\x6f\x58", + .pub = "\x0c\x80\x90\xe1\xcf\xe7\xf7\x61\xcf\xdf\x08\xd9\x44\xd4\xae\xb7\xa5\x09\xa0\x7a\x61\x01\x64\x5b\x9a\x4c\x7c\x9e\x9c\x3d\x46\x09", + .ok = 1 }, + { .tc_id = 337, + .comment = "special case for AA in multiplication by 5", + .shared = "\xa1\x99\x36\x8e\x68\x3c\x30\x36\xa4\x8f\x4c\x5f\x32\xb3\x2a\x54\x7d\xd3\x9f\x3d\x10\x07\xca\x0a\x0b\xeb\xca\xd0\xa8\xac\x6f\x5c", + .prv = "\x10\x6b\x36\x34\x4c\xc4\xa5\xa3\x89\xd8\x16\x81\x37\x78\x68\x06\xff\x03\xcd\x4a\x00\xf8\x63\x6b\xb7\xe7\x58\xd4\x56\x15\x1d\x59", + .pub = "\x08\x35\x29\x36\xc8\xaf\xd8\x54\x3a\xc9\x5f\x24\xbc\xe9\xa0\x7e\x3e\x32\x35\x76\x3e\xa5\x12\xa5\x84\x29\x89\x67\xb8\x3c\x07\x0a", + .ok = 1 }, + { .tc_id = 338, + .comment = "special case for AA in multiplication by 5", + .shared = "\x5a\xa7\x50\xde\x42\x07\x86\x9e\xc7\xfd\xda\xb3\x4c\x63\x95\x59\xb1\xeb\x27\xef\x24\x4a\xaf\x2a\x70\x2c\x84\x96\x3b\x6d\x6e\x7c", + .prv = "\x88\xf9\xa0\xd2\x35\x4a\xdf\xcb\xab\x2d\x12\xa0\xe0\x9b\x3c\x77\x19\xc9\x44\x38\x4e\xdf\xba\xa2\x7f\xe0\x73\x1c\xb9\xc6\xfc\x5a", + .pub = "\x73\xbd\xee\xf8\xcc\x04\x4f\x5a\xd8\xd6\xa2\x41\x27\x3e\x19\x95\xe0\x00\x7d\xc9\xe6\x57\x90\x46\xdf\x86\xaa\x6c\xd9\x7f\x5d\x2a", + .ok = 1 }, + { .tc_id = 339, + .comment = "special case for AA in multiplication by 5", + .shared = "\xa6\x94\x7e\xe0\x89\xff\x28\xce\x36\x44\xea\x4c\x6e\xb3\x3d\xbb\x20\xc7\x97\x4f\xb8\xd8\x53\xf4\xe1\x46\xe2\x46\x61\x77\x50\x2d", + .prv = "\x08\x11\xf2\xe5\x60\xa2\x05\xe9\x6e\x28\xbc\x31\x2b\xca\xd4\x5f\xe8\xbe\xfe\xfb\x7f\x6d\xa5\xfa\xa0\x35\x31\x1e\xed\x80\xb2\x51", + .pub = "\x7f\xdd\x39\x9b\x6e\xf4\xa3\xf5\xca\xde\x62\xe7\x41\x13\xb2\x9c\x27\xdb\x15\x20\x3f\x9b\x8e\x39\x8d\x2c\x6f\x23\x00\x51\xcd\x2b", + .ok = 1 }, + { .tc_id = 340, + .comment = "special case for DA - CB in multiplication by 5", + .shared = "\x23\x0b\x6a\xa1\xf2\x4d\xf9\x0a\x60\x83\x91\x79\xba\x5e\x9d\xe6\x73\xcf\xf1\x1c\xab\x59\xe8\x02\x0b\x20\x62\x6c\x22\x09\x0b\x0a", + .prv = "\x40\xad\x98\x40\x66\xa6\x90\x80\xfb\x4a\x31\x58\x78\xe7\x36\x09\x6c\xc5\x77\xda\xe4\xc4\x2c\x40\xd8\x93\xd8\xc2\x17\x3b\x78\x5a", + .pub = "\xf0\x17\x3a\x96\x27\x3c\x64\x6f\xb6\x3d\x13\xb0\xc6\x86\xb8\x9e\x37\x67\x6f\xcc\x71\x78\xfa\xf4\xa6\xf4\x60\x1f\x30\x68\x15\x0d", + .ok = 1 }, + { .tc_id = 341, + .comment = "special case for DA - CB in multiplication by 5", + .shared = "\x22\x99\xe3\x84\x95\x8b\xed\xd2\xc3\xd3\x67\x75\x91\x55\x13\x6d\x1f\xf7\x6e\x44\x34\xdc\x1d\x9e\x82\x12\xcd\xca\x52\xea\x84\x21", + .prv = "\x48\xb1\x0c\xd4\x56\x39\xbb\xbf\x83\xa0\xb2\x8f\x0d\xd3\xad\x0b\x7b\x00\xca\xf4\x8d\x05\x53\x44\x80\x55\x6a\x82\x78\x11\x6d\x59", + .pub = "\x25\x5b\xbe\x72\x30\xcd\x2b\xee\x90\xd2\x83\xf4\x18\xa4\x74\xab\x30\x14\x6c\xe5\xe8\x01\xa0\xf5\xed\x60\xee\x8d\xef\x3e\x65\x58", + .ok = 1 }, + { .tc_id = 342, + .comment = "special case for DA - CB in multiplication by 5", + .shared = "\x97\xfc\xa0\x65\xac\xd3\xb9\x43\xc6\x54\x99\x7c\x0f\x12\x57\x67\xf9\xab\xc4\xb7\xc9\xd8\xb7\x24\x69\x42\xf1\x2b\xe6\x5d\x92\x31", + .prv = "\xe8\xfa\xd7\x79\x46\xe0\xde\x4c\xf4\x23\x67\x98\x49\x0b\x83\x89\x48\xb8\x2c\xfb\x29\xf8\xe7\x68\x60\x01\xb1\x1e\x8d\x96\x16\x57", + .pub = "\x21\xac\xcf\x97\xb7\xfe\xe1\x73\x00\x1c\xcf\xca\xb2\x16\x37\xc1\x75\xef\x51\x86\xff\x00\x02\x50\x2b\x3d\x52\xfa\x8c\x51\xe7\x66", + .ok = 1 }, + { .tc_id = 343, + .comment = "special case for BB in multiplication by 5", + .shared = "\xf4\x82\x53\x1e\x52\x3d\x05\x8d\x6e\x3f\xe3\xa4\x27\xfc\x40\xdb\xce\x6d\xd6\xf1\x8d\xef\xbc\x09\x7b\xfd\x7d\x0c\xdd\x2f\x71\x0d", + .prv = "\xd0\x7b\xab\xed\x90\xb2\x7c\x4e\xac\xaf\xdc\x87\x17\x03\xbd\x03\x6b\x72\x0a\x82\xb5\xc0\x94\xdc\xeb\x47\x49\xee\xae\xb8\x10\x52", + .pub = "\x5b\x40\x77\x7e\x80\xff\x6e\xfe\x37\x8b\x5e\x81\x95\x9c\xcd\xcb\xb4\xca\x04\xb9\xd7\x7e\xdc\x6b\x30\x06\xde\xb9\x99\x26\xfa\x22", + .ok = 1 }, + { .tc_id = 344, + .comment = "special case for BB in multiplication by 5", + .shared = "\xde\x88\xaf\x90\x5d\x37\x41\x7d\x83\x31\x10\x53\x45\xda\xba\xab\x9f\xd2\xd3\xcb\x1e\xe9\x02\x91\x1c\x1c\x8e\xae\x29\x91\xd9\x11", + .prv = "\x68\xa3\x04\x9a\xef\x8c\x06\x9b\x90\x6c\xf7\x43\x28\x6d\x39\x52\xa8\x88\xbf\x2b\x9b\x93\xbc\x87\x75\xfb\x5a\xdd\xe0\x6e\x9f\x53", + .pub = "\x48\xd9\x52\xa2\x92\x4f\xf1\x67\xf0\x37\x70\x74\x69\xec\x71\x5d\xa7\x2b\xb6\x5f\x49\xaa\xf4\xdc\xe7\xec\x5a\x17\x03\x9d\xdb\x42", + .ok = 1 }, + { .tc_id = 345, + .comment = "special case for BB in multiplication by 5", + .shared = "\x07\x5d\x18\xcc\xc9\x84\x76\x1b\x70\x75\x22\x79\xe7\xf6\xa7\x57\x20\x8f\x6c\x11\xe2\x94\x80\xc3\x2b\x40\xab\xa1\x28\xa4\xd5\x2b", + .prv = "\x18\xd8\xc3\xd2\xa4\xe3\x66\x18\x5a\x85\xc3\x86\x98\xd9\x37\xe1\x3b\xbb\xaf\xdb\xda\xb1\xa0\xa8\x3d\xbb\xe8\x9b\xad\xf7\x07\x56", + .pub = "\xa5\xef\x26\x5c\xcb\xc5\xc5\x40\x21\xd3\x4f\x82\x36\x4a\x46\x24\x03\x0f\x5b\x9d\x5f\xf7\xe6\x3d\x7a\x37\x9e\x53\x3d\xe5\xe7\x42", + .ok = 1 }, + { .tc_id = 346, + .comment = "special case for x_2 in multiplication by 5", + .shared = "\x21\x2d\xbf\x9b\xc8\x9b\x68\x73\xa6\x0d\xfc\x87\x31\xa1\x0b\xe1\x1a\xb2\xdc\xa4\xb1\x72\x14\x2e\x6c\x9f\x06\x61\x4c\xd7\x28\x52", + .prv = "\x18\xef\xcd\x5f\xe3\x45\xbe\x49\x85\x31\x66\x95\x39\x1d\x2c\x95\x2e\xee\x13\xb0\xe1\xee\x75\x84\x72\x1f\xbe\x8b\x19\xd4\xfc\x5f", + .pub = "\x90\x51\xe5\x5a\x40\x50\xef\x4d\xce\x0b\x0c\x40\x81\x1f\x16\x37\x1e\x8b\x16\x93\x25\x41\xda\x37\xf0\x69\x40\x6d\x84\x8e\xa4\x24", + .ok = 1 }, + { .tc_id = 347, + .comment = "special case for x_2 in multiplication by 5", + .shared = "\x37\x9f\x92\x21\xab\xeb\xf3\x58\x26\x81\xa0\xe8\x57\xf3\xda\x57\x8a\x1b\x01\x21\x98\x2b\x96\xf1\x4b\x94\xde\x5d\xc8\xb2\x45\x28", + .prv = "\x28\xec\x7c\x69\x3e\x22\x2c\x72\xac\x08\x15\xf1\xfd\x36\x66\x13\x57\xe0\xa8\xda\x7b\xc9\x96\xda\xee\xea\xfc\xd2\x1c\x01\x34\x51", + .pub = "\x41\x9a\xdb\x8b\x1f\x2f\x87\xde\x01\x6b\x0c\x78\xd1\x02\x9a\x21\x04\x92\xeb\x8c\xad\xd1\x64\xb1\x2c\xd6\x5b\x1d\x57\xbf\x36\x34", + .ok = 1 }, + { .tc_id = 348, + .comment = "special case for x_2 in multiplication by 5", + .shared = "\xcf\xf2\x59\x6b\x7a\xfe\x36\xf4\xca\xb9\xc7\x01\x33\xd7\xaa\x0f\x99\x14\xf9\xab\xc6\xc3\xb9\x89\x54\x72\xe2\xa5\x89\x4a\x80\x37", + .prv = "\x78\xb3\x5e\x7a\xe5\x49\x30\x8b\x64\x14\xbb\x61\x01\x96\xc0\x4f\x2a\xf7\x9d\x42\x66\xc8\x6e\x8a\x9c\xe0\xc0\x2b\xbd\xb8\x8d\x59", + .pub = "\x13\xe0\x0d\xae\x3b\x1c\xcc\x97\xcc\xd6\x49\x08\x8c\x4a\x7f\x32\xca\x99\x76\x21\x4d\x64\x56\x67\xbd\x08\x20\x39\xbb\xd9\xab\x7a", + .ok = 1 }, + { .tc_id = 349, + .comment = "special case for C in multiplication by 6", + .shared = "\xd4\x7c\x46\xb4\x32\x9b\xed\xcb\xc1\x98\x6b\x3c\x6d\x2a\xa9\xbc\xd0\x27\xd6\xb6\x89\x25\x17\x5d\x35\xbb\xb5\x36\xb3\x44\x08\x01", + .prv = "\xf0\xde\x9c\x5f\x8a\x93\x72\xf3\x0c\x41\xca\x47\xa5\x57\x43\xce\x69\x7d\x46\xe3\x2e\x7a\x9a\xe2\x6d\x32\x50\x3f\xd5\x22\x27\x67", + .pub = "\x44\x1c\x48\x7a\x48\xf0\xa4\x98\x9d\x93\x1c\xd7\x7a\x61\x42\xa0\xa1\x3d\x1a\xab\xad\x82\x62\x3b\xa8\xd9\x4b\x5c\x37\x4f\x4f\x08", + .ok = 1 }, + { .tc_id = 350, + .comment = "special case for C in multiplication by 6", + .shared = "\x1d\x73\x01\x58\xda\x88\x05\x33\xdb\xf1\xe6\xc6\x4a\x8e\x99\xf9\x16\x96\x11\x66\x09\x69\xb0\xa8\x4f\xb4\x2d\xd8\xdc\x2e\xfa\x3d", + .prv = "\x68\x6b\xe5\xa1\x2b\x31\x04\x20\xf9\xbf\xb2\x09\x38\x1f\xd4\x59\xa5\xcc\xd5\x5c\x75\x2b\x88\x33\x7e\xbe\x89\xe1\x92\x1a\xe7\x65", + .pub = "\x0e\x67\xee\x5c\x6b\x65\xaa\x80\x22\x59\x81\x0b\x26\x05\xf8\xd7\xac\xcf\x9b\x49\xbf\x14\xcb\x4a\x53\x69\x28\xe8\x83\x17\x29\x15", + .ok = 1 }, + { .tc_id = 351, + .comment = "special case for C in multiplication by 6", + .shared = "\x07\x73\x25\x29\xa6\x28\xba\xde\xb8\xd7\x49\x46\x77\x5b\xa4\x57\xc7\x00\xbf\x83\x90\xf4\x6b\xc5\x23\xfb\x64\xe4\x71\xc8\x6a\x7e", + .prv = "\xa0\xc0\x33\x7c\x5b\xec\x5c\xa2\x4d\xea\x2f\x1d\x70\x14\x98\xae\x2b\xad\x87\xb8\x26\x9a\xc2\x3b\xe1\x13\x92\x9f\xe4\xeb\x19\x63", + .pub = "\xdc\x9d\x7e\xf1\xcb\x49\xc1\x91\xe2\x58\x66\x3a\x94\xe7\x31\xb9\xc0\x66\xc1\x1a\x17\xd8\xb5\xfd\xea\x19\x87\xf5\xd9\xa0\x05\x68", + .ok = 1 }, + { .tc_id = 352, + .comment = "special case for C in multiplication by 6", + .shared = "\x9e\x3a\xae\x35\xfa\x1c\xc8\x0a\x35\x98\x78\xe2\x12\x18\x02\x94\xff\x66\x08\xdc\xb4\x92\x9e\x91\x90\x1a\xbb\xf9\x76\xf3\x9c\x16", + .prv = "\xb8\x82\x4c\xfc\xe5\x55\x0b\x5e\x17\xb1\x2f\x74\xe2\x84\x59\xca\xb3\x4e\xb4\x98\x95\xcc\x36\xbf\x64\x5a\x0c\xf0\x0e\x3d\x2d\x67", + .pub = "\x55\x6b\x3e\xe7\xcd\x0d\x37\x97\x90\x56\xec\xc1\xf5\x6a\x56\x77\xa4\x93\x5b\xe6\xe4\x9c\xe2\x8e\x39\x4f\x8b\xfb\x73\xd1\x3b\x6a", + .ok = 1 }, + { .tc_id = 353, + .comment = "special case for C in multiplication by 6", + .shared = "\x88\x0f\x6d\xc7\x32\x20\x30\x7a\x59\x76\x70\xf3\x28\x2f\xc3\x66\xaa\x66\xf0\x4a\x0a\x9c\xa3\x0d\x89\x5f\xdd\xe3\x37\xaf\xe8\x25", + .prv = "\xe0\x2d\xba\x73\x35\xaf\x8f\xb9\x16\x8d\xe2\xfc\xd3\x10\xc2\xe2\xdf\x4a\x3e\x25\x26\x3e\x0a\xb9\xad\xa8\x7b\xfb\x82\x58\xa6\x6b", + .pub = "\x12\x11\xbe\x58\x09\x60\x5b\x54\xf5\x72\x7d\x23\x3c\x78\x3a\x2a\x19\x9a\x3d\xb2\x4e\xd4\x49\x9d\x7b\x48\xc7\x60\x3e\x4a\xd3\x71", + .ok = 1 }, + { .tc_id = 354, + .comment = "special case for CB in multiplication by 6", + .shared = "\xea\x62\xb0\xed\xa2\xd7\xb2\x49\xa4\x24\x17\x67\x5a\x2b\x82\xb1\xe6\xc0\xd6\x9a\x4e\x7c\xef\x33\x64\x48\x84\x4d\x2f\x43\x22\x51", + .prv = "\x30\xce\x71\xf8\x56\xce\xb8\x74\xfe\x58\x00\x39\xca\x67\xe8\x96\xe6\xd0\x82\x07\xa7\x3c\xd5\x5d\xb7\x05\x91\x27\xc1\x34\x2b\x67", + .pub = "\x50\x5e\x78\x51\xe2\x35\x2e\x31\x1c\xa9\x53\x6a\x1f\xe6\xc0\xd9\x5d\x64\x81\x97\x37\x4c\xe0\x8e\x4b\x8a\x0f\xbd\xdf\x62\x91\x0b", + .ok = 1 }, + { .tc_id = 355, + .comment = "special case for CB in multiplication by 6", + .shared = "\x30\x2c\x4f\x83\xb5\xc5\xbf\x30\xc1\xe3\xaf\xd9\xf6\x43\xf6\x5b\xfe\x56\xca\x16\x28\xee\x04\x2b\x1a\xb7\x39\x3b\xaf\xe3\x6c\x06", + .prv = "\xe8\x81\xf4\x6d\x41\x41\xea\x69\xa6\x71\x64\x9b\x93\xb6\x3e\x97\xdc\x67\xc1\x25\x21\xd4\x45\x86\x2f\x08\x7b\x26\x26\xfa\x2b\x6f", + .pub = "\xdd\xf4\xe9\x05\x03\xdd\x82\x61\x0c\x3a\x03\x4b\x92\x5a\x88\x0b\x72\xdb\xde\x30\xc6\x26\x00\x92\x02\xb3\x58\xc6\xeb\x00\xf4\x18", + .ok = 1 }, + { .tc_id = 356, + .comment = "special case for CB in multiplication by 6", + .shared = "\x8f\xf2\xac\x65\xc8\x5e\xe2\xfe\x94\x52\xfc\xe4\x60\xf8\xc8\x7f\x95\x70\xd7\x69\xca\xdd\xdc\x87\xfe\x93\xef\x8b\x76\x57\xc7\x26", + .prv = "\xe8\x79\x75\x26\x83\xcd\x73\xa8\x34\x25\x1c\x65\x74\x91\x35\xe0\x6e\xb9\x06\x4d\x3a\xe3\x50\x95\xd8\x8c\xde\x14\xa0\x2b\xa3\x66", + .pub = "\x0e\x9c\x44\x31\x99\x9e\xf1\xce\x17\x7e\x90\x0d\x37\xec\x6a\xe6\x65\xe3\x87\xe2\xd4\xfa\x27\xcb\xa8\xe7\xba\xeb\xc6\x5c\x65\x20", + .ok = 1 }, + { .tc_id = 357, + .comment = "special case for CB in multiplication by 6", + .shared = "\x97\xc9\x1a\x23\xc3\xe4\xf3\xff\x72\x7d\x18\x8a\x35\x2b\x67\xad\x49\x0b\x62\x38\x15\x66\xfb\x3e\x11\x1c\xb6\x7a\xa9\xe3\x43\x5c", + .prv = "\x20\x57\x6a\xb4\x56\xda\x26\xc1\x8d\xa5\xfb\xf0\x6e\xc4\xd1\x65\x64\xe1\x11\xbf\xae\x2a\x92\xb9\xf6\xe1\x92\x7c\x15\x77\x0a\x62", + .pub = "\x57\x61\xd6\xc0\x86\x24\x10\x4d\x41\x17\xff\x17\xc7\x5e\x92\x11\xa5\x91\xc9\xca\x9a\xec\xca\x3a\x66\x5a\x7e\xd8\x44\x19\x52\x25", + .ok = 1 }, + { .tc_id = 358, + .comment = "special case for CB in multiplication by 6", + .shared = "\x24\x34\x6b\xb1\x33\xdd\x9a\xe3\xff\x02\xd2\xf5\x05\x10\xb3\xa9\x2d\x90\x30\x83\x4d\x60\xe5\xaf\x08\xb0\xee\xbb\xf1\xd4\xdd\x6f", + .prv = "\xa8\x46\x74\x18\xb9\x24\xc2\xc0\x03\xc5\x6e\x16\x10\xa3\x54\x69\x35\x63\x60\xc2\x9d\x52\xaa\x55\x7a\x2b\xb3\x0f\xb8\xa9\xa4\x64", + .pub = "\xe9\x2d\x45\xb3\xec\x56\x53\x12\x66\x30\x3c\x51\x13\xc4\x63\x10\xc4\x16\x50\x00\x10\x65\xb4\xd8\x7b\x02\xb3\x82\xfc\x82\x66\x2e", + .ok = 1 }, + { .tc_id = 359, + .comment = "special case for CB in multiplication by 6", + .shared = "\xb3\x45\x3c\x9c\x82\xa2\xd1\xd9\x56\x15\x6d\xe2\x39\x9c\xb7\x0d\xd4\xe1\xec\x53\xae\xa9\x67\xe0\x35\x75\x3c\x1c\xda\xe1\x3c\x39", + .prv = "\xf0\xf5\xe1\x62\x92\x3d\x7c\x29\x93\x88\xbe\xd7\x81\x19\x94\x17\xad\xe0\x97\x47\x55\x15\x16\x2d\x95\x90\x97\x6a\x19\x6f\xb1\x6f", + .pub = "\xf3\x8b\x63\x45\x9d\x05\xe4\x22\xad\x02\x4c\x2d\xce\xa5\x02\x9a\x0a\x7a\x6b\x6c\x4c\x1d\x20\x93\xce\x55\x6a\xab\x33\x1e\x25\x40", + .ok = 1 }, + { .tc_id = 360, + .comment = "special case for CB in multiplication by 6", + .shared = "\xeb\xeb\x0c\x7b\x7a\x41\x65\xcd\x02\xa2\x78\xf3\xa2\x22\xc2\x36\xee\xd8\x32\x66\xb8\x06\xd1\x34\x94\xc1\xc3\xf9\x8a\x2f\x34\x25", + .prv = "\x60\x8f\xcf\x78\x7f\xe7\x89\x64\x4a\x09\xbc\xab\x95\x8f\x07\x37\xaa\x81\xa9\xe2\x9d\x50\x5f\x51\x03\x5c\x78\xe3\x74\xb9\xe4\x6b", + .pub = "\xa7\xde\xd0\xee\xa4\x5a\x40\x0b\x8f\x56\x37\x15\x4d\x42\x97\x4a\xa9\x8c\x92\x96\x23\x14\xd8\x22\xef\x88\xb0\x13\x83\xa9\xda\x4d", + .ok = 1 }, + { .tc_id = 361, + .comment = "special case for CB in multiplication by 6", + .shared = "\x92\x13\xa5\x3f\x22\xff\x0c\xb5\xec\xa8\x7b\x27\xb1\x93\xc7\x73\xbf\xdf\x4c\x01\xa1\x93\xa1\x1f\x37\xc1\x57\x47\x4e\x15\xcb\x07", + .prv = "\x58\xa3\x39\x6d\x29\x1e\xb2\x35\x71\xb5\x2d\x98\xa3\x15\x49\xe5\x14\xe5\x01\xe8\xd0\x95\x8a\xd9\xf2\x5f\xe5\xa7\x6c\x50\x3e\x69", + .pub = "\x7b\x0e\xcb\x4c\x72\xee\x14\x77\x89\xd7\x48\x13\xce\xd3\xeb\xe4\x0f\x45\xc3\xda\x52\x6e\xd1\x27\x29\x52\xe4\x53\xe4\x3b\x79\x6d", + .ok = 1 }, + { .tc_id = 362, + .comment = "special case for x_2 in multiplication by 6", + .shared = "\x66\x48\x4a\x41\x20\xe0\xeb\x0c\x7e\x05\x05\xe1\xd2\xc5\xd1\x5d\xe9\xb5\x2b\x72\xe0\x94\xc9\xba\xc8\x86\x34\x20\x0c\x55\x72\x67", + .prv = "\xd8\x05\xa7\x01\x47\x55\xdd\x65\x6f\x98\xd2\xb3\x31\xf2\xd2\xd4\x91\x27\x25\xef\x3d\x03\x75\x2f\x26\xf7\x4d\xc1\xad\x61\x66\x6a", + .pub = "\xa2\x44\x41\x3d\xdc\x3a\x20\x5d\x03\x8d\x64\x26\x68\x33\xee\xa1\xef\xba\x51\xba\x62\xc9\xc6\xcd\xcd\xbe\x94\x3b\xe5\x2b\xb0\x0c", + .ok = 1 }, + { .tc_id = 363, + .comment = "special case for x_2 in multiplication by 6", + .shared = "\x38\x4f\x22\x21\x61\x8e\x71\xd4\x56\xb1\x55\x16\x51\xef\xdb\x70\x8a\x16\x1d\x7f\x89\xf5\x60\x4b\x27\xeb\x87\x2d\x4a\xa9\x32\x76", + .prv = "\x40\xcb\x1f\xe0\x6b\x08\xf0\x68\xf7\x08\x0b\xa0\x7c\x69\x5e\xda\x91\xa2\xbe\xbe\xad\xd4\xdb\x95\xc9\x7d\xd7\xc9\x1a\xf2\x56\x6d", + .pub = "\xec\x3c\x8b\x0c\x10\xb1\xfa\x65\xdb\xbd\x17\xcf\x1b\xa5\xf8\x63\x81\x28\x47\x65\x70\x9b\x07\xc5\xf0\x42\x8e\x3d\x5b\xcd\x39\x20", + .ok = 1 }, + { .tc_id = 364, + .comment = "special case for x_2 in multiplication by 6", + .shared = "\x8d\xaf\x5f\x4b\x84\x73\x01\x44\xea\x8a\x53\xce\x39\xcc\x90\x7e\x39\xa8\x9e\xd0\x9f\x02\x02\xe7\xbe\x0d\x3b\xda\x38\xda\x66\x3b", + .prv = "\x80\x21\x46\x4c\x64\xc9\xd6\xd3\xc0\xc8\x52\xf6\x97\x2d\x11\x96\x9b\x04\xc9\xe0\x66\x56\x2f\xa7\xf0\xd5\xfa\x0d\x98\xeb\xad\x62", + .pub = "\x63\x30\xd3\xe2\x8a\x8b\x61\x26\xac\xe1\x65\xa9\xdf\xcc\xc6\xe4\xbd\x40\xdb\xc9\x76\x8c\xfb\x16\x33\x0c\xb7\xf2\x7f\x90\x62\x30", + .ok = 1 }, + { .tc_id = 365, + .comment = "special case for x_2 in multiplication by 6", + .shared = "\xda\x8b\x7e\xba\x6f\x72\xc3\xf3\xef\x33\xd8\x98\x20\x93\x49\x2e\x06\xbe\x39\xbb\x0d\xb2\x9c\x46\x5d\x95\xa8\xe5\x2e\xf6\x43\x41", + .prv = "\x70\x7a\x2d\x71\x0b\x32\xf5\x5c\x6e\xba\x34\x89\x80\x20\xa2\xfb\x98\x1d\x61\xb1\xe8\x22\xfc\xa8\x4c\x47\xd9\x32\x1e\x27\x92\x68", + .pub = "\x86\x78\xaa\x29\xcb\xc0\x6e\x78\xb2\x18\xd2\x2a\x3e\x66\xc3\x8e\xc0\xda\x8f\xdb\x0f\x25\x70\xc5\x85\xc6\x25\x17\xc9\x70\x4f\x37", + .ok = 1 }, + { .tc_id = 366, + .comment = "special case for x_2 in multiplication by 6", + .shared = "\x04\x19\xa7\x1a\x08\xd3\xfd\xd5\x74\xcb\xc9\x32\xe8\xf1\x60\x59\x33\xdd\xcd\xd9\x77\x4f\x56\x14\x26\x9b\x7e\xd8\x50\xc8\x65\x0e", + .prv = "\x20\x4a\x43\xde\xa7\x9d\x77\x95\x77\x58\x1b\x8c\x2a\x51\xbe\x66\xe1\xef\xfc\xe9\x64\x25\xb7\x42\x2b\x9c\xa6\x5b\xdf\x1a\x48\x67", + .pub = "\x30\x32\x89\xc2\xb1\x07\x9e\xa5\x94\x12\xfa\xcc\xfe\xba\x8c\x11\x3d\x22\x99\xb9\xdc\xfe\xde\xab\xc4\x26\x97\xb0\x82\x9c\x46\x58", + .ok = 1 }, + { .tc_id = 367, + .comment = "special case for x_2 in multiplication by 6", + .shared = "\x9f\x2f\xcd\x0c\x75\x62\x88\xc1\x71\x6e\xcd\x1f\x2a\x74\x86\x4b\x93\xa7\x71\x7b\xfa\xf5\x24\x88\x58\xdc\xb6\xfd\xbe\xa1\x28\x64", + .prv = "\x58\xe4\x74\x17\x35\xd2\x58\x93\x22\x15\x19\x47\xa1\xce\x2f\x58\x29\x90\x86\x26\x88\x69\x41\xcb\x16\x31\xd2\x5a\x8a\x68\x41\x69", + .pub = "\x3e\x6e\x16\xe0\x2d\x44\xeb\xd9\x46\x80\x83\x2e\x06\x5a\xed\xdc\xbb\x74\xaf\x64\xfb\xb7\xc6\xd8\x36\x7e\x76\x05\xbe\x13\xff\x5b", + .ok = 1 }, + { .tc_id = 368, + .comment = "special case for x_2 in multiplication by 6", + .shared = "\x26\x1a\xb6\x26\x7c\x35\xa9\x75\x53\x59\xe9\x57\x47\x38\x70\x52\x2b\x7f\x92\x3f\xe8\x39\xf2\xb1\x55\x40\x86\x49\xcc\x5e\x80\x04", + .prv = "\xd0\xaf\x34\x28\xea\x52\x05\xf6\xbf\x8d\x4f\x1b\x4e\x49\x03\xcd\x76\xf0\x42\x36\xa1\xc0\xb3\xec\xfd\xca\xf2\x8b\x21\x34\x8e\x63", + .pub = "\xa7\xc1\x71\x6a\x41\xed\x23\xa8\x87\x04\x38\x71\x4f\xf9\x74\x5f\xb0\xe4\x6f\x7a\x5b\xae\xb3\x7c\x9a\x2d\x83\xfe\x47\x7d\x14\x6c", + .ok = 1 }, + { .tc_id = 369, + .comment = "special case for DA - CB in multiplication by 6", + .shared = "\x90\x93\xbf\xa3\xed\x34\x91\xd0\x89\x1f\x02\xae\x46\x6e\x5e\x13\xc9\x80\xdf\x22\x9d\xb7\x40\x4c\x5b\x9d\x34\xe4\xed\x21\xc6\x53", + .prv = "\xc0\xea\x97\xe4\x42\xe5\xdc\x1c\x81\x42\xbf\xab\x70\x89\xec\xb9\xbb\x9c\x5a\xe3\x72\xf9\x90\x7c\x28\x25\xe6\x78\xde\xfa\xe5\x67", + .pub = "\xda\xd9\x81\x55\x2c\x57\x54\x1c\x57\xef\x39\x5e\xd7\x70\xce\x5e\xdc\x48\xf8\x01\x54\x61\xb2\xba\x7a\xa8\x31\xec\x59\x3c\xeb\x15", + .ok = 1 }, + { .tc_id = 370, + .comment = "special case for DA - CB in multiplication by 6", + .shared = "\x6e\x88\xbb\x6b\xf7\x55\x96\xbb\xe5\xf1\xfb\xe9\x1e\x36\x5a\x52\x7a\x15\x6f\x4f\x1b\x57\xc1\x3a\xc1\xe3\xe6\xdb\x93\x19\x12\x39", + .prv = "\xb0\x33\x3f\x09\xac\x1e\xaa\xcd\x3c\xd6\x17\xeb\x88\x32\xe9\xde\x48\x8b\x45\x8b\x73\x5c\xb4\xb5\x34\x5f\x51\x71\x30\xc2\x5d\x6b", + .pub = "\xc5\x88\xdf\xe6\xe7\x33\xd9\x05\x81\xcb\xe1\x12\x07\x97\x49\xd8\xeb\x30\xab\x86\x31\x13\x4e\xc2\x9a\xbf\xb9\x8b\x32\xe7\x65\x22", + .ok = 1 }, + { .tc_id = 371, + .comment = "special case for DA - CB in multiplication by 6", + .shared = "\xe6\xde\x74\xd2\xc5\xce\xa5\x40\x94\xd7\xa7\x0a\xf0\x3c\x76\x8a\xfe\x05\xd5\x2a\x03\x8b\xb7\x2d\x56\xdc\xac\xf0\xba\x50\x2d\x74", + .prv = "\x10\x71\x90\x99\xdc\x63\xbc\xc2\x82\xef\x52\x58\x45\xc1\x08\x89\x7a\xc9\xfa\xe9\x59\x0b\x59\x3e\x0d\x50\x5d\x1c\xf1\x67\xc0\x61", + .pub = "\x06\x70\x11\x6a\x43\x5e\x8d\x9b\x7a\x12\xff\xc4\x32\x2f\xd6\xb1\x49\xd0\xb1\xdc\x79\x9b\x5c\x09\x57\xd9\xd6\xe4\x25\x46\xe8\x24", + .ok = 1 }, + { .tc_id = 372, + .comment = "special case for DA - CB in multiplication by 6", + .shared = "\x78\xc9\xc3\xaf\xf9\x41\x6a\x53\x8c\xe3\xea\x8f\xa5\x53\x24\x45\x28\xd1\xfb\xec\xbc\xf9\x16\x95\xa3\x3c\xa4\x64\xef\x76\xb8\x5a", + .prv = "\x10\xe2\x0e\x4f\xda\x57\x08\x4c\xa9\x0f\x7a\xd5\x72\xa7\x8a\xa8\xe6\x57\x5c\x65\x9c\xd0\x1f\x30\xc4\x3c\x58\x04\x0c\x20\xe8\x60", + .pub = "\x8b\x20\x0d\xd2\x26\xc5\xc0\xf7\xe1\x16\xe5\x38\x8b\xa1\x62\x43\x8c\xaf\x1d\xdd\xf4\xed\xc3\xb6\xba\x83\x8c\x21\xb5\x92\x97\x37", + .ok = 1 }, + { .tc_id = 373, + .comment = "special case for DA - CB in multiplication by 6", + .shared = "\xc1\xa9\x6c\xcb\xa0\x8b\xdd\x82\xd0\xfc\x12\xe8\xcd\xe4\xcc\x1f\x25\xcf\xd5\x27\x6d\xce\x7f\x18\xe4\x07\xed\x0e\x4a\x89\x84\x66", + .prv = "\xa8\x31\x2d\xf4\x73\xad\xfe\xc7\x17\x1e\x16\x35\xf5\xba\xd4\x4f\x07\x53\xa8\x8a\x6b\x31\x74\xec\x5a\xe7\x62\x70\x3a\xe2\x5e\x60", + .pub = "\x41\x9a\x07\x6b\x17\x9f\x79\x72\x00\x96\xea\xab\xaf\x03\x47\x7e\x8f\x89\xd6\x1f\x88\x5c\x8d\x7f\x58\xf6\xea\xa4\xfa\x77\xdf\x5f", + .ok = 1 }, + { .tc_id = 374, + .comment = "special case for DA + CB in multiplication by 6", + .shared = "\x25\x33\xb8\x45\xbb\x83\xe3\xd4\x8c\xff\xa8\xdb\xd1\xed\xd5\xd6\x01\x77\x86\x62\xd5\xda\x03\x75\x91\x52\xa5\xe0\xa8\x4b\x35\x7d", + .prv = "\x10\x96\x97\xf4\x00\x21\x0f\x9a\x92\xde\x80\xa8\xbe\xd2\x64\x09\x71\x99\xbc\x24\x0e\x22\x76\x7b\x54\xd8\xbb\x22\x05\x0b\x7a\x61", + .pub = "\xaa\x34\xd7\x72\xe9\xac\xe4\x3c\x4d\x92\xf4\xf8\x55\x96\xab\x9c\xcd\x8c\x36\xc4\xf4\xcb\xdd\xc8\x19\xaf\xe2\xa3\x3c\xb8\xb2\x16", + .ok = 1 }, + { .tc_id = 375, + .comment = "special case for DA + CB in multiplication by 6", + .shared = "\xeb\x40\xa3\x97\x4b\x1b\x03\x10\xb1\x59\x7d\x1f\x1f\x41\x01\xc0\x8d\xca\x72\x74\x55\xa9\xd8\x22\x4c\xd0\x61\xa7\xaa\x3c\xb6\x28", + .prv = "\xd0\x36\x30\x8a\x53\xc1\x1b\xeb\xcb\x02\xe8\x36\x88\xad\x74\xfe\xc4\x3f\x84\x62\xef\x4d\x80\x62\x72\x67\x66\x37\xd9\x9b\x37\x65", + .pub = "\x1f\x06\xcf\xe4\x64\xcc\xc0\xe2\x7a\x5e\xc5\xf9\xed\xd9\xbc\x7b\xc8\x22\xad\x2f\xf5\x06\x8c\xa5\xc9\x63\xd2\x0e\xdd\x1a\x2d\x22", + .ok = 1 }, + { .tc_id = 376, + .comment = "special case for DA + CB in multiplication by 6", + .shared = "\x95\x09\x75\x7e\x28\x95\x53\xcf\xa2\xcc\x71\x31\x34\x73\xc3\xff\x1e\xeb\xce\x48\x4e\xe2\x37\xea\xe5\x54\xfd\xa3\xd3\xd2\x2f\x0e", + .prv = "\x78\x6e\x5a\x5f\xf3\x74\x05\xc7\x69\xd0\xd3\x78\x8c\x3c\x1b\x05\xa6\x2a\x84\x42\xc3\x85\x57\x0e\x44\x38\xbc\x5f\x2e\xaa\xcd\x67", + .pub = "\x9d\x4b\x2e\xd7\x81\x71\x32\xaf\x58\x30\xe8\x99\x62\x7e\xa9\x7d\xc3\x9b\xd3\x77\x2e\x82\xf2\xd0\x57\x69\xa9\x18\x27\x3d\xc0\x2e", + .ok = 1 }, + { .tc_id = 377, + .comment = "special case for DA + CB in multiplication by 6", + .shared = "\xba\xd9\xf7\xb2\x7d\xac\x64\xb0\xfc\x98\x0a\x41\xf1\xce\xfa\x50\xc5\xca\x40\xc7\x14\x29\x6c\x0c\x40\x42\x09\x5c\x2d\xb6\x0e\x11", + .prv = "\xc0\x1f\x66\xcb\x09\x42\x89\xd7\x28\x42\x1d\xd4\x6c\x6f\x97\x18\x41\x2e\x1c\x54\x6d\xad\x70\xe5\x86\x85\x1b\xe4\xda\x58\xbf\x67", + .pub = "\x4e\x05\x6b\x31\x7a\x31\xdd\x96\xf8\xec\x14\xb4\x84\x74\xaf\x58\x7d\x19\x5e\xfc\xc2\xa7\x0f\x01\xf0\x52\xef\x88\x2d\x7b\x3a\x45", + .ok = 1 }, + { .tc_id = 378, + .comment = "special case for DA + CB in multiplication by 6", + .shared = "\x51\xc3\x59\x76\x8a\xb0\x21\x90\x03\xaf\x19\x3e\x2b\xdb\x8e\x5c\xc9\xf8\xe1\x76\xb8\xdb\x49\xe5\x97\xaf\xca\x3e\x71\x25\xe3\x70", + .prv = "\x38\x77\xd9\xce\x25\xce\xde\xde\xb5\x72\x60\x4f\x2d\x12\x3d\xf6\x85\x69\x0c\x26\xe1\x81\xf7\x77\xed\x33\x30\x2b\x82\x08\x29\x66", + .pub = "\x72\xc6\x05\x35\xe9\xc4\x23\xf3\x02\xd6\xa1\x07\x96\xd9\x54\xd7\x78\x03\x2c\xd4\xdb\xd4\x0c\xa0\xf3\x59\xe2\x04\xd6\x7b\x6f\x4c", + .ok = 1 }, + { .tc_id = 379, + .comment = "special case for DA + CB in multiplication by 6", + .shared = "\xfa\x9f\xb0\xdf\x4c\xfb\xac\xd0\xfb\xf3\x26\x2d\x3a\x1b\xf8\xd7\xaa\xcb\x45\xf7\x3b\xf9\x46\x71\x77\x5e\x50\x9c\x80\x43\xdf\x7d", + .prv = "\x50\xb8\x46\x18\xd0\x73\xc4\x61\x8f\x9a\xa6\x9a\x3b\x85\x18\xda\x76\xdb\xb2\x12\x72\x86\x21\x4f\xb4\x3a\x2b\x44\x50\x3b\x99\x69", + .pub = "\x58\x56\x35\x8e\xd4\x20\x04\x7c\xd0\x84\xf1\x7a\xe6\x96\xba\xd7\x9a\x4d\x26\xc6\xd5\xbb\x79\xbf\xb8\x2b\xbc\x63\x32\x44\x2d\x51", + .ok = 1 }, + { .tc_id = 380, + .comment = "special case for DA + CB in multiplication by 6", + .shared = "\x91\xac\x72\xb0\xed\x8d\x7f\xc4\xc8\x84\x6b\x8a\x25\x30\xd9\xfb\x8f\x05\x32\x06\x48\x80\xc0\x0d\xab\x10\x0c\x97\x76\x97\xdb\x28", + .prv = "\x10\x9a\xcf\xa6\x38\xe1\x12\xf6\xbb\xec\x21\xe3\x52\xa7\x4e\x8f\xc9\xb7\xff\xe5\xd9\xdc\x28\x63\x4e\xeb\x51\x6e\x59\x83\x0a\x63", + .pub = "\xc3\x1e\x37\xb0\x43\x32\xab\xca\x83\x15\xf3\x17\x17\x15\x66\xae\xf3\x81\x11\xf6\x22\xd8\xbf\xfa\x29\xc2\x3c\x01\x51\xcd\xad\x6e", + .ok = 1 }, + { .tc_id = 381, + .comment = "special case for z_2 in multiplication by 6", + .shared = "\x11\x39\x3b\xb5\x48\x81\x3e\x04\xfb\x54\x13\x3e\xdb\xe0\x62\x64\x58\xe8\x09\x81\x88\x5e\x1f\xe5\xf3\x37\x7e\x8e\xbe\x9a\xfa\x52", + .prv = "\x68\x5c\x07\x84\xaa\x6d\x19\x4c\x1b\x85\x9b\xda\x44\xc4\xe2\x7c\xd1\xdf\xdf\x34\x77\x6e\x49\x8d\xd0\x3d\x09\xf8\x7a\xe6\x8a\x65", + .pub = "\xb7\x75\xe0\x16\xb3\x2a\x97\xf4\x99\x71\x12\x19\x06\x76\x3f\x3a\x0b\x41\x68\x90\x92\xb9\x58\x3b\x67\x10\xcf\x7d\xee\x03\xa6\x1c", + .ok = 1 }, + { .tc_id = 382, + .comment = "special case for z_2 in multiplication by 6", + .shared = "\x0a\x83\xa2\x24\xfb\xfc\xbc\x5d\x0f\x07\xf6\xdd\x8e\xbb\x2e\x9b\xbe\xe8\x13\x4f\x0f\xab\x26\x80\x02\xce\x83\x7f\x54\x95\xd8\x33", + .prv = "\x18\xe9\xa0\x5a\x20\x43\x6c\xf0\xdb\xc3\xd5\xb9\x2d\xac\x8d\x99\x6e\x62\xea\x11\xfb\xb3\x44\x5f\x29\x19\x5f\xc7\x5a\x8b\xeb\x69", + .pub = "\xf8\xbd\x0e\x7c\xf6\xec\x61\x86\xf2\x05\xab\x03\xab\x72\xc8\xf6\xb3\xcd\xe8\xf6\xad\x9b\x16\x69\x16\xa0\x4d\x43\xd1\xd6\xd5\x46", + .ok = 1 }, + { .tc_id = 383, + .comment = "special case for z_2 in multiplication by 6", + .shared = "\x45\xdc\x39\x83\x1f\x34\x71\xd7\x46\x6b\xbe\x29\xc8\x14\x2b\x1a\x6d\x6b\x00\xc4\x7f\xea\x02\x1b\xe2\xff\xc4\x52\xd9\x04\x68\x06", + .prv = "\x00\xe0\x99\xeb\x23\x12\x5d\xab\x5e\xc3\x5a\x41\x9d\x45\x5d\x0b\xa8\xc0\x1d\xa1\x60\xf9\x35\x4e\x9f\xb2\x1e\x6a\x55\xd5\x5c\x64", + .pub = "\x8d\xfe\xe4\x8a\xd8\xb3\x67\x48\x8e\xa4\xda\xfc\xf7\x08\x6e\x30\x53\x56\xa8\x09\x01\xf8\x7c\x72\x01\x49\xa5\xf5\x22\x33\x74\x53", + .ok = 1 }, + { .tc_id = 384, + .comment = "special case for z_2 in multiplication by 6", + .shared = "\xa2\x90\x05\xc6\xb9\xdb\xf1\x70\x7d\xc2\xad\xce\x45\x06\xb5\x58\x31\xe8\x67\x5b\x7d\x2d\x54\xb0\xc1\x03\x77\x41\xe3\xbc\x61\x1b", + .prv = "\xb0\xca\x25\x1e\x0d\xba\xe7\x32\x4a\x6c\xa0\xc2\xc8\xd6\xa8\x88\xed\xd1\x2d\x14\x47\xd4\x00\xa4\x7b\xcb\xa0\x04\xb6\x48\x71\x6e", + .pub = "\x8f\x68\xbf\xc5\x7d\x79\x2c\x32\x2e\xbb\x27\xf4\x4a\x37\xc1\xc9\x3e\x7e\xb1\x5c\x5d\x5f\xce\xdf\xfc\x1d\xe8\x50\x48\x7b\x33\x72", + .ok = 1 }, + { .tc_id = 385, + .comment = "special case for D in multiplication by 6", + .shared = "\x9f\x04\xe4\x2c\x1b\x2f\x31\x1d\x87\xe1\x47\x0a\x47\x08\xbb\xa2\x5a\xc6\xff\xd3\xf7\xb4\x86\xf9\xb6\xb5\x02\xec\xbb\x2c\x00\x4e", + .prv = "\xa8\xb6\x4b\x8e\xd3\x97\x77\x3b\x82\x90\x42\x5c\xa5\xc2\xf7\xc3\xe5\x0f\xac\x7a\x47\x81\xbd\x4a\x54\xc1\x33\x78\x1c\x9a\x13\x60", + .pub = "\xff\x0f\x15\xad\xea\xb3\x34\xaf\xed\xa3\x91\x67\x85\xdd\xd3\x8d\x25\x2d\xce\x98\x76\xc2\x35\x7b\x64\x3b\x5d\xc2\xc0\x6a\x3b\x1d", + .ok = 1 }, + { .tc_id = 386, + .comment = "special case for D in multiplication by 6", + .shared = "\x68\x80\x00\xbd\x60\xaf\x37\x5b\x4e\xea\xc4\xa7\xd0\xe0\x78\x2c\x0e\x61\x88\xea\xbd\xc6\x08\xb7\x32\xf4\x9b\x4d\x6c\xca\xb4\x4f", + .prv = "\xd0\xcd\x0d\xb5\x1f\xf2\x32\xaf\xa0\x91\x9d\x31\x06\xfc\xb3\xa8\xae\x58\x1e\xf1\x2d\x09\xc8\x77\xaa\x6f\x31\xef\x74\xee\xd0\x68", + .pub = "\x10\x76\xfd\xc8\x27\xf2\x55\x0e\xe9\x5f\xf9\xa1\x5d\x04\x4a\xed\xfa\xc6\x5b\x5e\x9b\xa8\x09\xf6\x24\x38\xcc\xea\x54\x63\x7a\x29", + .ok = 1 }, + { .tc_id = 387, + .comment = "special case for D in multiplication by 6", + .shared = "\xe0\xa8\x2f\x31\x30\x46\x02\x4b\x3c\xea\x93\xb9\x8e\x2f\x8e\xcf\x22\x8c\xbf\xab\x8a\xe1\x0b\x10\x29\x2c\x32\xfe\xcc\xff\x16\x03", + .prv = "\x20\x4a\x3b\x56\x52\x85\x4f\xf4\x8e\x25\xcd\x38\x5c\xab\xe6\x36\x0f\x64\xce\x44\xfe\xa5\x62\x1d\xb1\xfa\x2f\x6e\x21\x9f\x30\x63", + .pub = "\xed\x1c\x82\x08\x2b\x74\xcc\x2a\xae\xbf\x3d\xc7\x72\xba\x09\x55\x7c\x0f\xc1\x41\x39\xa8\x81\x4f\xc5\xf9\x37\x0b\xb8\xe9\x88\x58", + .ok = 1 }, + { .tc_id = 388, + .comment = "special case for D in multiplication by 6", + .shared = "\x1f\xcc\x50\x33\x3e\xb9\x07\x06\x93\x5f\x25\xb0\x2f\x43\x7b\xfd\x22\xb6\xb1\x6c\xc3\x75\xaf\xff\x8a\x1a\xa7\x43\x2f\xb8\x62\x51", + .prv = "\x88\x10\x9b\x1d\x0e\x7b\xac\xe4\x4d\x41\xa1\x5d\x5b\xcb\xcd\x36\x96\x8c\x5b\x8b\x47\xc0\xa2\xc6\x06\xb5\x7c\x4a\x68\xcc\x5f\x66", + .pub = "\x12\xe1\x58\x9a\x34\x09\x4a\xf5\xf1\x21\xc9\xbd\x3c\x11\x19\xf2\xb1\xf0\x52\x64\xc5\x73\xf6\x67\xa7\x48\x68\x3c\x56\x33\xa4\x7e", + .ok = 1 }, + { .tc_id = 389, + .comment = "special case for DA in multiplication by 6", + .shared = "\xfa\xc3\x0a\x74\xf4\xca\x99\xf6\xcf\x23\x30\x65\xe9\xac\xd8\x26\x69\x0c\xab\x36\x4b\xf6\x93\x20\xb5\x80\x95\x78\x3e\xd7\x6e\x11", + .prv = "\x50\x82\xe4\x97\xc4\x29\x79\xcd\xbf\xdd\x1b\x3b\x06\x53\xcf\xea\x6f\x2c\xeb\x7d\x07\x63\x9e\xbf\x35\x41\x86\x6b\xb6\x0e\xdb\x62", + .pub = "\x15\x1f\x54\xa8\xa8\x99\x71\x17\x57\xb3\xb1\x18\xfc\x55\x01\x77\x9d\x62\x1d\x25\x22\x7a\xf5\x3d\x0a\xf0\x0b\x75\x83\xba\x88\x24", + .ok = 1 }, + { .tc_id = 390, + .comment = "special case for DA in multiplication by 6", + .shared = "\x17\xf6\x54\x3c\x47\x27\xe7\xf1\x29\xee\x82\x47\x76\x55\x57\x76\x35\xc1\x25\xa2\x0c\x3d\xc8\xba\x20\x6c\xa3\xcc\x48\x54\xca\x6c", + .prv = "\xf8\x5a\x8d\xb4\x4f\x9e\x56\xb1\x17\x29\xf5\x16\x82\xa9\x76\x9f\xc5\x04\xf9\x35\x97\xcb\xe3\x94\x44\x61\x6b\x22\x45\x32\x10\x6e", + .pub = "\xa8\x19\xc6\x67\xed\x46\x6b\xd9\xa6\x9e\xa0\xb3\x86\x42\xee\x8e\x53\xf4\x0a\x50\x37\x7b\x05\x1e\xb5\x90\x14\x2d\xd2\x7e\x34\x31", + .ok = 1 }, + { .tc_id = 391, + .comment = "special case for DA in multiplication by 6", + .shared = "\x88\x9a\x8d\x61\x1e\x0a\x7d\xa7\x14\x75\xe7\xc9\x3a\x2d\x7f\x6f\x72\x28\xc7\x87\xa0\x0e\xe5\xcf\x55\x47\x4a\xdc\x37\x6f\xf7\x62", + .prv = "\x50\x5a\x07\x66\x41\xfa\xc3\x98\xfc\x7d\x8c\x62\x99\x37\xf4\x2d\xb5\x59\xdb\x5e\x12\x05\x2a\xd3\x66\xd4\x6d\x7b\x20\xe9\x57\x69", + .pub = "\x40\xb0\x53\xd0\x56\x66\x89\x82\xa1\xf5\x50\xbe\x95\xe1\x63\x48\xe3\x03\x94\x5f\x53\xa3\xac\x64\x49\x1a\x9a\x56\xd4\x09\x5b\x71", + .ok = 1 }, + { .tc_id = 392, + .comment = "special case for DA in multiplication by 6", + .shared = "\x37\x23\x2f\xb3\x97\xaf\x27\xf5\xfb\x5c\xa4\x93\x28\x4f\xf1\xc5\xd2\x57\x86\xb0\xd7\x16\xc7\x3b\x33\xac\xa8\xd4\x22\x65\xf3\x18", + .prv = "\xe8\xdb\x2b\xf1\xaf\x5b\x89\x07\x42\x07\x89\xc5\x6e\x71\x41\x47\x06\xae\xf0\xd9\xf6\xff\xae\xd0\xc2\x49\xc3\xb7\xab\x14\xbf\x65", + .pub = "\xe7\xdd\x05\x49\xa7\x65\xbb\xef\x34\xbe\x2e\x8d\xa1\x8a\x1b\xc1\xb9\x89\xa8\xb0\x61\x4d\x35\x8e\xbf\x38\xc1\x2a\x9c\xa6\x40\x79", + .ok = 1 }, + { .tc_id = 393, + .comment = "special case for z_2 in multiplication by 7", + .shared = "\xa1\xb3\x04\x18\x43\x6b\xa1\x90\x88\x04\xff\xcc\xe1\xbe\x2c\xdc\xf5\x0c\x61\xa8\xe3\x93\x8d\x95\xc7\x90\xab\xdb\x78\x6b\x80\x22", + .prv = "\xc0\x06\xab\x17\x62\x72\x08\x82\x01\x7d\x10\x6b\x9a\x46\x75\xfd\xd4\x70\x05\x65\x71\x55\xc9\x0c\xa6\x1d\x4c\xbf\x7c\xc4\xf9\x73", + .pub = "\x1e\xe1\xb9\xa7\x46\x04\xac\x31\xc3\xdb\x83\x28\x01\x70\xe3\x81\x15\x04\xfc\xc7\x8c\x76\x26\xb5\xb2\xc0\x7a\x99\xd8\x0d\xaa\x0a", + .ok = 1 }, + { .tc_id = 394, + .comment = "special case for z_2 in multiplication by 7", + .shared = "\xa5\x97\x6f\xda\x89\x95\x4a\x81\xe4\x42\x10\x7f\x9e\x41\x6a\x2b\x4b\x48\x1b\xbd\x46\x54\xeb\xc0\xc7\xb5\x7a\x78\xb4\x5b\x49\x79", + .prv = "\xd0\x71\x80\x7d\x60\x79\x53\xda\x43\x2d\x85\x74\xd5\xf3\xf4\x20\x67\x6d\xaf\xdb\xc6\xa2\x85\xa3\x6e\x1d\x73\x76\x24\xd7\x7c\x75", + .pub = "\xf2\x26\xc2\xd6\xbd\x78\x31\xed\xa1\xb5\x1e\xe5\xae\xc2\x94\x43\xa5\x07\xef\x9f\x7a\x04\xe2\x34\x0f\x34\x9d\xbf\x14\x93\x38\x44", + .ok = 1 }, + { .tc_id = 395, + .comment = "special case for z_2 in multiplication by 7", + .shared = "\x55\xb5\xb5\xeb\x38\xb1\x27\x61\x7f\xfe\x00\x05\x6d\x84\xd3\x5a\x50\x71\xd1\x87\x83\xe3\xa8\x2b\x5f\x4e\x13\x1b\x15\x38\xb1\x50", + .prv = "\x30\x4b\x52\x6f\x6f\xe9\x94\x73\x19\x80\xc0\x97\x55\x29\xbc\xa4\xd0\x61\x01\x7f\xbe\xc5\x6f\x60\x70\xd4\x26\x78\xd3\xe1\x11\x77", + .pub = "\xc5\x19\x73\x12\xde\x3a\x7a\x3e\xe1\x1b\x29\x87\x3b\xae\x3f\xc8\xc8\x51\x09\xc6\x67\x84\x80\x4f\x89\x43\x5d\xb2\x10\xfc\xc2\x4b", + .ok = 1 }, + { .tc_id = 396, + .comment = "special case for z_2 in multiplication by 7", + .shared = "\x00\x80\xe5\xb9\x98\x5a\x96\x0a\x83\x21\x33\x81\x2a\x7a\xb9\x95\x1c\x6b\x2c\x75\x89\x4d\xeb\x3e\x35\x50\x91\x90\xa6\xbd\xf4\x57", + .prv = "\x98\x2d\xdf\x2c\x03\x57\x89\x37\x9b\x8a\x58\x91\x7d\x5c\x3c\x6c\x06\x1b\x50\x3b\x19\xa0\x02\x8e\x01\x89\x4c\x2e\xb3\x71\xd0\x79", + .pub = "\x59\x0e\xd0\xb8\x79\x31\x9c\x38\xa1\x99\x62\xa5\xd2\x16\xff\x2b\xfa\xf3\x35\x55\x51\x88\x77\x96\x9c\x20\xc0\x54\xcb\xe4\x3e\x56", + .ok = 1 }, + { .tc_id = 397, + .comment = "special case for z_2 in multiplication by 7", + .shared = "\x52\x41\x22\x22\x26\x63\x8c\x4b\xbb\xc9\x87\x92\xcd\xbd\x74\x88\x2c\xa2\xe0\x8a\xa2\xed\xf3\x13\x07\x04\x25\x03\x10\x09\xe9\x25", + .prv = "\x78\xcc\x3e\xc0\x68\x7e\x3e\x53\xd9\xce\xc5\x6b\x79\xd1\x1b\xf0\x49\xd1\x73\xf1\x27\xf5\xb4\x0f\xae\x12\x2a\x6d\x00\x16\xcd\x76", + .pub = "\x7c\x5f\x01\x43\xa6\x68\x2f\x60\xcc\xad\x16\xf2\x11\x50\xc7\xbb\x5b\xc6\xf8\x07\x25\x4d\x08\xb3\x53\xfc\x96\xce\x07\xbc\xeb\x6f", + .ok = 1 }, + { .tc_id = 398, + .comment = "special case for BB in multiplication by 7", + .shared = "\x63\x78\x81\x90\xb1\x0d\x74\x51\xf5\xfc\x2b\x82\xc4\x21\x15\x1d\xb4\xf3\xe2\x27\x82\xe3\x92\xda\x6d\x8d\x3a\xba\x2c\x34\x43\x06", + .prv = "\xc8\x6f\xc7\x66\x50\xcf\x3b\x58\x83\x7a\xa0\xf0\x63\x35\x60\x41\x52\x41\xc6\xc4\xf8\xf2\x93\xba\x02\x22\xb7\xd6\xa3\x87\x57\x73", + .pub = "\x01\x08\x50\xa0\x97\x4d\x3e\x89\xc0\x29\xd2\x52\xb4\x6f\x73\x95\x48\x29\x4c\x0f\x9a\x23\x18\x38\x63\xf9\x45\x5b\x95\x59\xc2\x11", + .ok = 1 }, + { .tc_id = 399, + .comment = "special case for BB in multiplication by 7", + .shared = "\xe4\xb4\x09\x74\xa1\x66\xac\x49\xed\x83\x17\x15\xc0\x71\xc7\x51\x75\x27\x44\xb8\x91\x46\x5e\x6c\x45\x00\x18\x55\xaa\xcd\xc3\x62", + .prv = "\x88\x8d\x51\xc0\xa2\x23\x03\x69\xe5\xb6\x5a\x81\x4b\x32\x13\xdd\xe2\xe6\x2f\x2e\xb9\x5d\x09\x71\x48\x6b\x73\x3e\x4f\x90\xc1\x74", + .pub = "\xad\x1d\xd8\x2c\x23\xd6\xa0\xd5\xfe\x0f\x2a\x45\x61\xd1\xc1\x67\x33\xa3\xe1\xe6\xaf\xa6\xd9\x02\xdd\x07\x7d\xc4\x3a\x96\x16\x28", + .ok = 1 }, + { .tc_id = 400, + .comment = "special case for BB in multiplication by 7", + .shared = "\x51\x4a\x4c\xd0\x67\x6f\x1c\x31\x01\xc8\xc4\x5c\x17\xad\x41\x6b\xd3\x3e\x20\xa4\x05\x54\x4f\xc1\xa6\x04\x49\xab\xb2\x2f\xa1\x04", + .prv = "\x68\xbe\xd4\x25\xd5\x34\x31\x55\x84\xd8\x0f\x79\xda\x6e\xab\x9b\x7e\x60\x36\xb5\x1f\xe6\x2e\x1a\xd9\x33\xe2\x66\x64\x0b\x46\x73", + .pub = "\xd0\xc0\xd6\x39\x3c\x41\xf4\xd7\xe0\xd5\xe8\x50\xb7\x71\x6f\x40\x1e\xda\x1e\x02\x8a\x4e\xd4\xa0\x5b\xea\x8b\xf8\x1a\xcf\xd9\x30", + .ok = 1 }, + { .tc_id = 401, + .comment = "special case for E in multiplication by 7", + .shared = "\xed\x83\xe8\x10\xce\x5f\xf0\x86\x8f\x85\x89\x62\x3b\xb1\x34\x78\xde\xc1\xc2\x23\x26\xc9\x27\x65\xae\x5e\x48\xc8\x4b\xba\xbb\x24", + .prv = "\x98\xff\x28\x56\xef\x44\xb4\xfa\x14\xd8\x67\x82\xea\x79\x38\x28\xbd\xf6\xf1\xef\x9b\x66\x9c\xac\x1a\xae\x33\x8a\x7b\xb6\x93\x76", + .pub = "\x0f\x46\x01\x00\xd8\x8a\x1d\x31\x6d\xff\x02\xd1\xb2\x2f\xfb\x2e\x42\xd9\x9d\x0b\x92\x47\x4f\xc3\xec\x7d\x62\x56\x7d\x0c\xf1\x12", + .ok = 1 }, + { .tc_id = 402, + .comment = "special case for E in multiplication by 7", + .shared = "\xff\x94\x86\x21\x17\xd3\xc6\xed\xc9\xdd\x5f\x48\x52\xfa\x8a\x58\x94\x52\xb9\x24\xca\x8a\x75\xcb\x23\xb3\xd6\x8d\xfe\xd8\x8c\x4b", + .prv = "\xb0\xcd\xbf\xdd\x98\xbd\x98\x8d\x7c\x6a\x53\x04\x55\xc5\x1c\x57\xdd\x33\xfd\x2c\x7a\xee\x39\x61\x97\x1b\xd3\xa3\x13\x88\xfc\x71", + .pub = "\x13\x75\x6a\x41\x1f\xf3\xae\x0c\x39\x22\x2d\xde\x08\x10\xf0\x8c\x43\x24\x63\x16\x2d\x81\xef\x06\x10\x71\x24\x9a\x48\x43\x9e\x15", + .ok = 1 }, + { .tc_id = 403, + .comment = "special case for E in multiplication by 7", + .shared = "\x1c\x94\x86\x8b\xc8\xac\xb3\x13\x74\x98\x20\x9b\x28\x12\xfe\xb5\x35\x01\x38\x9f\x5a\xa3\x7f\xec\xbf\xd5\xcb\x54\xe1\x35\x8e\x0e", + .prv = "\xe0\x67\x76\x44\xed\x49\x35\xf0\x1e\x05\x2e\x99\x67\x30\x2d\x0f\xb7\x8f\xf2\x2b\xb9\x2f\xba\xe0\x60\x5f\x3e\xe5\x4e\x2f\x68\x78", + .pub = "\x8f\xc1\xfa\xe9\x69\xa6\x18\x54\x04\xdb\x22\x74\x9e\xf6\xd2\x25\xde\x86\x77\x3a\x4d\x1b\xf3\x85\x7e\xb8\xfb\xbd\x82\x9a\x1b\x47", + .ok = 1 }, + { .tc_id = 404, + .comment = "special case for E in multiplication by 7", + .shared = "\xad\xbf\x3b\x43\x9b\x16\xdb\xc6\x53\x57\x8f\x53\x37\x4e\xd3\xa8\x6f\x9c\x0b\xf1\xf7\x36\x57\x33\x49\x77\x3b\xc3\xb8\xd6\x07\x34", + .prv = "\x88\x7b\x61\x55\x38\x43\xca\x99\xad\x1c\xa9\x22\x53\xa6\xfe\x08\x2b\x82\x49\x47\x52\x51\x3f\xd5\x3f\xf6\x53\x0f\x54\xc4\x05\x72", + .pub = "\x7b\xab\x08\x91\xec\xb9\xe7\x2a\x15\x77\x1f\x0a\x4f\xff\x90\x54\x70\x24\x20\x63\x39\xc3\x40\xb1\xa2\xfd\xb5\x3b\xcf\xb8\x6b\x59", + .ok = 1 }, + { .tc_id = 405, + .comment = "special case for AA in multiplication by 7", + .shared = "\x39\x52\xef\xb9\x35\x73\xae\x9c\xe2\x16\x2d\x10\xe4\xb8\xc4\x64\x35\x85\x9f\x3f\x27\x78\xdb\x89\xf7\x2b\xc5\x79\xe6\x95\xcb\x51", + .prv = "\x00\x61\x5e\x46\x97\x01\x4f\xc1\x24\x84\xef\x53\xa1\x44\x02\x06\x41\x0a\x8d\xf7\x8c\xaa\x0b\xff\xf8\x21\x61\xdb\x83\xfe\xa5\x74", + .pub = "\x10\x2e\x95\xea\xdc\xa7\xc3\xc2\x8e\x5d\x52\x33\x6c\x85\x7b\xad\x99\xea\x24\x6f\x29\x9b\x06\x33\x4f\x40\x12\x76\xf4\x9c\xa8\x14", + .ok = 1 }, + { .tc_id = 406, + .comment = "special case for AA in multiplication by 7", + .shared = "\x96\x12\x8f\x92\x9f\xc0\x3c\x12\x69\xd4\x29\xf6\x09\xa1\xa8\xac\xac\x7a\x75\x8e\x34\x46\xa1\x25\xec\xf4\xa3\x59\xa0\xe3\x7b\x73", + .prv = "\x58\x17\x51\x13\x55\x0f\xaa\xd5\x64\x58\xfb\x37\x5a\x6c\xb3\xf0\x5d\xf2\xf6\xff\x3c\x4e\xe0\x9d\x4a\x6b\xa6\x43\xe0\x22\xd1\x7a", + .pub = "\x35\x48\xc1\x6b\xf3\x1a\xfd\xcd\x44\x5a\xd9\xbe\xf0\xe6\x0d\x7b\xd6\x19\x5a\xa5\x91\xca\x8c\x82\x81\x3c\xd7\xd4\x46\x22\x67\x20", + .ok = 1 }, + { .tc_id = 407, + .comment = "special case for AA in multiplication by 7", + .shared = "\xfe\xc3\xe9\x4c\xb5\xf3\x16\x62\x5b\x09\x0c\x2c\x82\x08\x28\xce\x0f\x3e\xe4\x31\xe8\xd6\xe1\x2a\xbc\xcc\x7e\xf2\xbd\x0b\xe8\x1a", + .prv = "\x00\x97\x38\xe1\xe6\xef\xef\x9e\x2c\xad\x8b\x41\x6f\xe9\x0a\x09\x8e\xb5\xcb\x01\x99\xf2\xdf\x52\x18\x16\x6c\x7b\x18\x1e\xa0\x79", + .pub = "\xba\x74\xe7\x66\xd4\x48\x55\xec\x93\xbd\x44\x1a\xa4\x10\x58\xa4\xc4\xad\x2b\xe6\x3c\x63\x9a\x3f\x9a\x87\xbd\xe5\x1e\xea\xba\x20", + .ok = 1 }, + { .tc_id = 408, + .comment = "special case for AA in multiplication by 7", + .shared = "\x96\x90\x3b\xac\x9d\xc6\x0b\x61\x78\xd7\x34\x89\x0c\x25\xdb\x4b\xed\x9e\xa4\xdb\xcf\x6f\xcb\xcd\xc9\x0e\x6f\x56\x94\xc8\xb2\x1c", + .prv = "\xc8\x20\x19\x15\x9b\xe7\x92\x74\x7a\x39\xf3\x88\xea\x48\xa8\xc5\x68\x59\x4e\x33\x83\x27\x3e\x51\x10\x07\x21\xb3\x76\xe8\xba\x73", + .pub = "\x9a\x5a\x1d\x37\xe5\x01\x0c\x35\x6a\xa8\x0a\xfb\x34\x7c\x3d\x61\x35\x42\xdd\xfa\x0b\xe7\xab\xb8\xe8\xcd\xcd\x66\x74\x41\x14\x49", + .ok = 1 }, + { .tc_id = 409, + .comment = "special case for AA in multiplication by 7", + .shared = "\x50\x05\x0d\x0a\xb1\xdd\xd2\xdd\x90\xc4\x60\xab\x8f\x09\xe1\xf8\x0e\x37\xca\xe5\x7d\x42\x31\xad\xae\x10\xc1\x0a\x4a\x2b\x00\x3e", + .prv = "\x10\xac\x9f\x83\x83\x26\x2e\xf2\x80\xfa\xac\x1e\x4d\xa1\x5a\x7d\xe4\xf2\xcb\x74\xaf\x33\xb5\x0e\x0d\x82\xdc\xb8\x5d\x8b\xcb\x70", + .pub = "\x63\x08\x47\xe2\x82\x74\xdb\xae\x54\x91\x21\x03\x03\xc8\x5a\x35\x90\x74\xee\x74\x29\x57\xb0\xfc\x3c\x9f\xf5\x5d\x9e\x01\x9a\x50", + .ok = 1 }, + { .tc_id = 410, + .comment = "special case for AA in multiplication by 7", + .shared = "\x91\x70\xc4\xc6\x28\xd5\xfc\xfd\x0e\xc7\x19\xcf\x6e\x17\x96\xda\xb0\xa6\x9e\x46\xd6\x37\x9f\xff\xa2\x47\xd4\x44\xa0\x05\x60\x41", + .prv = "\xb8\x4c\x09\x83\x82\xf6\xe3\x7d\x51\x0c\xc3\x3e\x62\xdd\xc6\x64\xe0\x2c\x8b\xb6\xed\x9e\xd0\xe5\xfa\x78\xcc\x09\x9a\x26\xfe\x73", + .pub = "\x11\x74\x9b\x00\xa4\x50\x67\xaf\x2c\x7e\x7d\x50\xf8\xd1\x78\xd5\xa9\xfe\xdb\x8f\x1b\x69\xb2\x39\x76\x38\x85\xbc\x61\x1b\x13\x6c", + .ok = 1 }, + { .tc_id = 411, + .comment = "special case for AA in multiplication by 7", + .shared = "\xd7\xd2\xa8\x29\x53\xf6\x80\xce\xe0\xc8\x1c\x4d\x00\xfe\x62\x8a\xc5\x30\xce\x68\x2e\xb7\xfb\x3b\x0a\xf2\x4f\x80\x4a\x58\xef\x5c", + .prv = "\x78\xcd\xe8\x93\x0a\x1d\x81\xae\xf6\x60\x1f\x71\x40\x97\x28\x85\x49\x87\x57\x8b\x0f\x83\x49\x58\x8c\x04\xad\xbe\x2c\x1f\x6e\x74", + .pub = "\xdf\x10\x21\xd8\xf9\x59\x50\xaf\xde\x77\xc8\x6b\xa5\xee\x2f\x58\x76\xef\x77\x83\x76\xa7\xfd\xc7\xef\xb8\xdf\xf0\xe4\x83\x6e\x7b", + .ok = 1 }, + { .tc_id = 412, + .comment = "special case for x_2 in multiplication by 7", + .shared = "\xa6\xb9\x7d\xa9\x89\xdc\xcf\x73\x0f\x12\x2d\x45\x51\x52\x32\x80\x51\xc8\xed\x9a\xbc\x18\x15\xc1\x9e\xec\x65\x01\xd6\xcf\xc7\x7c", + .prv = "\xb0\xfe\x7b\x06\xb9\x95\x06\x00\xb3\xa7\xce\x1d\x7b\xb2\xa1\xd9\x84\x19\x4c\xc9\xd6\xc8\x96\x45\x04\xc3\x64\xdd\x5c\x87\x5b\x74", + .pub = "\x27\x43\xba\x40\x8d\x5f\x68\xc6\x53\x24\xa4\x85\x08\x6a\x00\x4b\x6b\xbf\x78\x4c\xc9\xe8\xb1\xa7\xdb\xeb\x8c\x4b\x94\x14\xb0\x18", + .ok = 1 }, + { .tc_id = 413, + .comment = "special case for x_2 in multiplication by 7", + .shared = "\xb2\x10\xe3\x68\x72\x95\x01\xd9\xf9\xb6\xeb\xef\xbe\xba\xe3\x8f\x19\x5f\x91\xea\xf2\xa5\xa3\xa4\x92\x88\xbb\x61\x5f\xf2\x21\x6c", + .prv = "\xf0\xc9\xc3\x98\x48\x54\xd5\xbd\x59\x9d\x38\x19\x73\x8a\x02\x3e\xb7\x95\xe9\x35\x86\xdc\x0e\x5e\x29\xb1\xc8\x70\xc6\x12\xd1\x78", + .pub = "\xcc\x27\x5a\x2c\xdd\x91\x25\xe5\x2f\x20\xce\x2a\xba\xd4\x1f\x92\x0a\xfa\x5a\x64\x3f\xb7\xf2\x76\xef\x41\x6f\x76\x1d\x68\x9f\x1e", + .ok = 1 }, + { .tc_id = 414, + .comment = "special case for x_2 in multiplication by 7", + .shared = "\xb9\xe3\x79\x6c\x58\x70\x1d\xed\x42\x37\xc5\x29\x94\x50\x1c\xee\x14\xe1\x8f\x2f\xb0\x2b\x78\x1a\x84\x00\x92\x34\x84\xbd\x4a\x6c", + .prv = "\x90\x6c\x2f\x12\xbe\x89\x70\x2d\xb2\x6f\xa7\xee\x90\x5c\xe3\x65\x25\xd2\xde\xe4\xe9\x6a\x87\x9c\xa0\x7d\xa0\x97\xa6\xaa\x50\x75", + .pub = "\x49\x29\x54\x31\x01\xee\x7a\xe2\x39\x05\x9c\xd1\x34\xc3\x5d\x40\x0e\x50\xd0\x82\x14\x41\x35\x1d\x0f\xa6\xc3\xd5\x4e\xfb\x34\x2e", + .ok = 1 }, + { .tc_id = 415, + .comment = "special case for x_2 in multiplication by 7", + .shared = "\x6d\xcd\xf8\xe8\x69\x03\xb0\xca\xde\xd1\x24\xd8\xa7\xda\x18\xe6\x23\x43\x0c\xa8\x69\xaa\xf2\x67\xd3\x10\x29\xd9\x3d\xe9\x9e\x66", + .prv = "\xf0\x26\x03\x1e\xa3\x73\xe1\xd1\x6e\x6e\x7e\x03\x57\xbc\x96\xbc\x09\x3f\x4b\x6b\xb7\x6a\x73\x8c\xbb\x54\xfe\x6c\xfd\x2e\xa2\x71", + .pub = "\x13\x24\xe0\x36\x85\x97\xb3\x18\x15\x55\xbb\x5b\x2c\xc7\xb7\xeb\xba\x46\x93\x1a\xea\xbb\x6f\x05\xab\xab\xd4\x24\x0f\x0f\xb9\x33", + .ok = 1 }, + { .tc_id = 416, + .comment = "special case for x_2 in multiplication by 7", + .shared = "\x38\x5d\xdb\xf2\x50\x5e\xbf\x53\x7b\xf5\xe9\x76\xb6\x1a\x4b\x69\xd1\x90\xae\x96\x5b\x7e\x4a\x81\xae\x4e\x1c\x16\xb7\x14\x87\x48", + .prv = "\x70\x3f\x4a\xc8\x66\x7d\x77\xf9\x53\x60\x45\xcf\x74\x8f\x18\xd4\x23\x45\xe3\x9c\xca\xb1\x0c\x18\xdd\xe0\xf5\x17\x0d\x30\x7f\x73", + .pub = "\xc7\xf3\x84\x22\x97\xd6\x94\x1c\xac\x63\xd6\xf1\xbd\xae\xa0\x70\x94\x37\xc8\x2d\xbc\x91\x61\xfc\x1b\xae\x6c\x79\xd6\x68\xeb\x44", + .ok = 1 }, + { .tc_id = 417, + .comment = "special case for x_2 in multiplication by 7", + .shared = "\x0f\xba\xea\x73\xf9\x51\x87\x95\xe0\x26\xc1\xfc\x10\x79\xc3\x73\x8a\xeb\x9e\xe9\xc8\xdc\x97\x61\xd6\x5b\xbf\x8f\x94\xe3\x01\x54", + .prv = "\xc8\xa9\x6a\xe4\xe7\x72\x71\xa0\x68\x0d\xd2\x4f\xcb\x09\xf9\xc5\xd3\xee\x83\x16\x53\x6e\xec\x7c\xc2\x27\x65\x97\xe5\x0f\xe3\x7f", + .pub = "\x1e\x46\x60\xba\x86\x5f\xb8\x08\x5a\xfd\x46\x92\x88\x5d\x74\x23\x7f\xa3\xbc\xa5\xaf\x4b\x84\xba\x3d\xe4\x00\xf1\x6a\x5a\xc4\x5c", + .ok = 1 }, + { .tc_id = 418, + .comment = "special case for x_2 in multiplication by 7", + .shared = "\x51\x0c\x64\x15\x1e\x5d\x07\x37\xfc\x32\x4b\xd1\x5f\xb5\xd3\x96\x69\x08\x75\x1c\xd1\xa0\x69\x54\xb5\x56\x19\x66\x55\xee\x55\x40", + .prv = "\xd0\xdd\xe8\xed\xa3\x8c\x37\x83\x44\x28\x64\xc0\xcb\x46\xa0\xe9\x83\x2d\xcf\x78\x4c\x21\x26\x8a\x21\xbe\xd2\xca\xce\x87\xcd\x70", + .pub = "\x24\x88\xbb\x6f\xad\xb7\x9d\x46\x58\x5f\xf0\x1c\x16\x0c\x5b\x41\x72\x79\x9d\x92\xbd\x16\x8e\xdc\xeb\x65\xce\xde\xdc\x49\x27\x62", + .ok = 1 }, + { .tc_id = 419, + .comment = "special case for x_2 in multiplication by 7", + .shared = "\x23\xef\x82\x5e\x1c\x8e\x6e\x64\x42\x80\x01\xa7\x46\x3e\x32\xa9\x70\x1c\x81\xcf\x78\x20\x3e\x6a\xe7\x53\x74\x0c\x91\x57\x0e\x6b", + .prv = "\xc0\x9c\xd4\x7e\x1c\xe5\x36\x04\xf1\x4e\x4e\x13\x42\x6c\x8f\x08\x96\x2f\x55\x6b\xcd\x81\xf8\xd7\x53\x75\xb1\x50\x7c\x6f\xda\x78", + .pub = "\xa0\xc1\x08\x78\x11\xaf\x14\x91\x17\x1b\xc5\x16\x91\xb8\xca\x84\x71\x6a\xf3\x6c\x4b\xaa\x76\x4e\xc5\x36\x28\x0c\xc1\x98\x3d\x6d", + .ok = 1 }, + { .tc_id = 420, + .comment = "special case for x_2 in multiplication by 7", + .shared = "\x0e\x55\xa7\xec\x1a\x2d\xdb\xea\x1a\xc5\x98\x12\x00\x81\x22\x32\xf7\xf4\xc3\xa6\x0e\xe3\xc9\xab\x09\xf2\x16\x3b\xd1\x3d\xa3\x29", + .prv = "\xe0\x9a\x5f\x74\xf3\x18\xf0\x23\x03\x85\x7a\xa0\x20\x8d\x76\x91\x3d\x9e\x24\x0a\x80\x54\x9d\x12\x01\x31\x18\xba\xd6\x20\x59\x7f", + .pub = "\xcc\x5c\x97\x93\x46\x07\xd8\xb9\x81\xbc\xe1\xd6\xa2\x32\xbb\x3a\xec\xc3\x00\x1f\x69\x8a\xe1\xae\x84\x93\x8f\xbf\x28\x61\x07\x7b", + .ok = 1 }, + { .tc_id = 421, + .comment = "special case for DA - CB in multiplication by 7", + .shared = "\x06\x81\x03\x6a\x0d\x27\x58\x3b\xa6\xf2\xbe\x76\x30\x61\x31\x71\xa3\x3f\xb8\xa6\xc8\x99\x1c\x53\xb3\x79\x99\x9f\x0f\x15\x92\x3b", + .prv = "\x70\x6c\xee\x5f\x9b\x35\x7c\x03\xb2\xf1\x91\x32\x94\xf6\xe4\xf0\xca\x5a\x19\x0a\x87\xd3\x02\x68\x32\x7d\x0c\xb6\xbd\xd5\xbc\x79", + .pub = "\x23\x8d\xe7\xfc\xc8\xa3\xf1\x94\xc3\x55\x4c\x32\x8e\xfb\x12\x15\xd0\x64\x0a\xc6\x74\xb6\x1a\x98\xef\x93\x4e\xc0\x04\xcf\xd7\x3b", + .ok = 1 }, + { .tc_id = 422, + .comment = "special case for DA - CB in multiplication by 7", + .shared = "\x67\xb8\x87\x74\xf1\x9b\xd1\x08\x1d\x6f\x23\x65\x6a\x13\x58\x03\xe3\x4a\xe1\xcd\xca\xe1\x08\x18\x12\x4a\x78\x56\x9c\x29\x9f\x42", + .prv = "\x40\xe3\x00\xcb\x1f\xf2\x60\x57\x4f\x85\xb3\xf0\x4a\xac\x47\x84\x64\xa8\x6e\x62\x03\xb3\xd4\x65\x64\x18\xf4\x30\x51\x57\x87\x7b", + .pub = "\xac\x9f\xd8\x0a\x45\xda\x10\x9f\xa2\x32\x93\x90\xe5\xa9\x51\xcf\xc0\x30\x65\xd7\xbb\x4a\x78\x55\x82\x6c\xcb\x22\xc3\xbf\xeb\x3d", + .ok = 1 }, + { .tc_id = 423, + .comment = "special case for DA - CB in multiplication by 7", + .shared = "\xa5\x12\xe8\x64\xbd\x89\x8a\x5b\xa6\x55\x1a\xdc\xeb\xd8\x36\xc6\xa7\x8e\x78\x71\x72\x8e\x1b\x8e\xe5\x28\xd4\x83\xaf\x27\x61\x04", + .prv = "\x88\x2f\x78\xb4\x55\x8b\x7f\xaa\x83\x59\x04\xc9\x23\x5e\x32\xf3\x00\xfc\x8b\x5e\xf0\xa7\x18\x40\x6a\x5c\x85\x20\xca\x54\xd0\x71", + .pub = "\xa4\x5a\xb1\xdc\x2f\xa2\xc5\x07\x18\xfb\x49\x85\xd9\x79\x14\x01\xe8\xd2\xd3\x4f\xfe\x3c\xd9\x3c\xff\xb4\xe8\x70\xcc\xe5\xe8\x55", + .ok = 1 }, + { .tc_id = 424, + .comment = "special case for DA - CB in multiplication by 7", + .shared = "\x51\x8b\x77\x8c\xf5\xe9\x76\xc6\x02\x35\xab\xcf\x62\x11\xa1\x8b\xad\x2a\x8e\x69\x3a\xb2\x61\x07\x4c\x7f\xab\x43\xdb\xb5\xda\x27", + .prv = "\xd8\x64\x9b\x73\x55\x90\xa1\x7d\x0f\xc4\xc3\x78\xfb\xf4\xc2\xf7\xd6\x60\x05\x69\xb2\xe8\x4c\xbe\x0f\xf7\xbc\xdb\xac\x0b\x5f\x71", + .pub = "\x17\x61\xd3\xd5\x0b\xa4\x6b\x44\x66\x55\xaa\x6a\x8d\x9b\x8b\x75\xaa\x5b\xb2\x4a\x79\x53\x20\x8d\x5b\x69\xfc\xc3\x8f\x18\xec\x7a", + .ok = 1 }, + { .tc_id = 425, + .comment = "special case for D in multiplication by 8", + .shared = "\x6c\xfa\x93\x5f\x24\xb0\x31\xff\x26\x1a\x7c\xd3\x52\x66\x60\xfd\x6b\x39\x6c\x5c\x30\xe2\x99\x57\x5f\x6a\x32\x22\x81\x19\x1e\x03", + .prv = "\xa8\xed\xec\x59\xae\x6b\xa2\x38\x13\xec\x54\xd6\x6d\xf1\x52\xe0\x62\x67\x62\xb9\x7d\x4b\x0c\x20\xe0\xdd\x8a\x56\x95\xd8\x6e\x47", + .pub = "\xdc\x99\xad\x00\x31\x46\x3e\x45\x37\xc0\x1e\x16\x62\x99\x66\xd1\xb9\x62\xc0\xb4\xe4\x87\x2f\x06\x7c\xa3\xc2\x6c\xcc\x95\x70\x01", + .ok = 1 }, + { .tc_id = 426, + .comment = "special case for D in multiplication by 8", + .shared = "\xc6\x23\xe2\xd2\x08\x3f\x18\x11\x0a\x52\x5f\x2b\x66\xd8\x9e\xd8\x2d\x31\x3b\x6a\x2d\xd0\x82\xf6\xb7\xa6\xe7\x33\x13\x4f\x5a\x06", + .prv = "\x10\x98\x72\x3f\xfe\x56\x7e\xa6\xdc\xc8\xd0\x4e\xcc\x01\xef\xaf\xee\xa0\xae\xe4\x4e\x1c\x73\x3b\xe8\xb1\xe5\xd9\x7c\x8b\x80\x41", + .pub = "\xb3\x27\x50\xfd\x80\xd2\xd7\xc6\x2c\x6b\x8e\x39\x67\x06\x54\xba\xea\x57\x19\xa3\xe0\x72\xe9\x95\x07\xfd\x5b\xcb\x23\x89\x82\x64", + .ok = 1 }, + { .tc_id = 427, + .comment = "special case for D in multiplication by 8", + .shared = "\x38\x8e\xa4\x21\x65\x0a\x8d\x83\x7b\xad\x89\x04\x01\x81\x95\xe9\x9e\xf4\x94\xc2\xd1\x70\xb9\x3e\xe7\x21\xa6\x7d\x2c\x10\x87\x29", + .prv = "\xa0\xf2\x0d\xf9\x8b\x49\x21\x8a\xc8\x32\xf2\x6f\xa8\xc2\x18\xa0\xd6\x87\x2e\xb7\xae\xa0\x7c\x1d\x43\xc9\xff\x69\x9b\x46\x5b\x47", + .pub = "\xe7\xb3\x20\x57\x77\xb3\x75\xf1\xb1\x51\x5a\x50\xa1\x6a\x60\x67\x95\x3f\xf2\x21\xe1\x2b\x4f\x41\x6d\x74\xfb\x28\xc1\xc8\x58\x65", + .ok = 1 }, + { .tc_id = 428, + .comment = "special case for DA + CB in multiplication by 8", + .shared = "\xb9\xe5\x72\x8b\x37\x43\x5b\x1d\x33\x99\x88\xf9\x32\x67\xd5\x9f\x3b\xd1\xc5\x17\x85\x1c\x5a\x25\x8e\x74\xcb\x64\xae\xa7\x3d\x2d", + .prv = "\x30\x47\x3a\x77\xa9\x83\x74\xf6\x7d\x5b\xd4\x3d\xf2\x31\xce\x14\x29\x16\xae\xa0\xd2\x71\xe7\x23\x33\xfa\x47\xdc\x44\x1a\x02\x47", + .pub = "\x21\xcc\x33\x8d\x78\x69\xe5\x86\x33\x49\xcc\x73\x9c\x8a\x69\x46\xcf\xc7\x97\xcb\x82\xfb\xf6\x2d\xcd\x21\x54\x84\x4b\x10\x60\x03", + .ok = 1 }, + { .tc_id = 429, + .comment = "special case for DA + CB in multiplication by 8", + .shared = "\x20\xb6\x7b\x20\x5e\x22\xce\x87\xfd\x44\xa8\xe8\xfd\x10\xa6\xd8\x89\x0b\x92\x70\xb6\x0e\x1c\x6a\x68\xb4\xaa\x78\xe6\xe3\x79\x61", + .prv = "\xd8\x65\x7b\xe3\xa3\x0f\xc8\x5f\xb2\xf3\xa6\x8e\x92\xac\xe1\xb3\x1b\x26\xe7\x6e\x6b\xdb\x67\x27\xae\xa5\x07\xcb\x7c\x10\xdc\x45", + .pub = "\xc3\x42\x17\xc0\x20\x72\xd7\xe2\xbc\xa0\x45\x45\x25\x03\x07\x80\xcf\xb6\x02\x15\xd7\xca\x82\xdb\xec\x8f\x4a\x59\x03\x4c\x5f\x43", + .ok = 1 }, + { .tc_id = 430, + .comment = "special case for DA + CB in multiplication by 8", + .shared = "\x5f\xab\xa6\x45\xfc\x21\xf9\x42\x1e\xbd\x35\xc6\x9b\xdb\x1d\x85\xb4\x6f\x95\xe3\x74\x6f\xf7\xf4\x88\x6b\xc2\x80\xa9\xab\x25\x22", + .prv = "\x88\x2f\x55\x78\xae\x4a\x13\xd8\xf5\xaf\x47\x3b\xdd\xe1\x70\x9b\xf2\xe0\x59\xdf\x80\x9e\xe0\x5b\x50\x5f\x34\xde\x85\x7c\x34\x47", + .pub = "\x8a\xbb\x8c\xfd\x60\xc6\xf8\xa4\xd8\x4d\x07\x50\xd3\xb4\x0a\x4f\x84\x6b\x30\xed\xf2\x05\x2f\xef\x7d\xf8\x41\x42\xcd\x0d\x9e\x47", + .ok = 1 }, + { .tc_id = 431, + .comment = "special case for DA + CB in multiplication by 8", + .shared = "\x9c\xb8\xa0\xf4\xad\x86\xa2\x7b\x96\xca\x61\x24\x2e\xab\x19\x8d\xb2\x76\x7d\x38\x62\xdd\x32\x3e\x41\x36\x8f\xcd\xcc\x5f\xab\x68", + .prv = "\x98\x29\x4d\xb7\xcb\xf4\x95\x8b\xfb\x3e\xd2\x1d\x5d\x5c\x91\xe1\x3c\xc8\xdc\x27\xb3\xc7\x16\xc8\x6f\x71\x67\xa4\x81\x9f\x87\x41", + .pub = "\x9f\xd7\xb4\x9a\x08\xf2\x06\x68\x8d\x72\xdb\x73\x7d\xf8\xe5\x17\xaa\x7b\x76\x4f\x5d\xe7\xc9\xa2\xb1\xc3\xfc\xba\xa9\x85\xf6\x4c", + .ok = 1 }, + { .tc_id = 432, + .comment = "special case for DA + CB in multiplication by 8", + .shared = "\x4b\x42\xfc\xf8\x4b\x51\xb2\xb8\x2f\x1f\x70\xb3\xcf\x49\xbd\x9d\xc6\xab\x26\x72\x92\x0a\x8d\xe3\x7e\x81\xba\x7e\x99\xac\xf7\x34", + .prv = "\x78\x9b\xc4\x04\x7a\xd8\x1b\x9b\x66\x56\xee\xf2\x98\xb7\x66\xe8\x76\x3a\x2f\x8e\xa6\x4e\x37\x4a\x60\x3d\xc1\xfd\xf2\xee\xe1\x46", + .pub = "\xc4\xfe\xfa\xc7\xac\xd4\x48\xe8\xfd\x4d\x6a\xc4\xf5\xdd\x1b\xc2\x1f\x2c\x67\xd6\x38\x44\x40\x60\x91\x8f\xb3\x44\xaa\x77\xe7\x57", + .ok = 1 }, + { .tc_id = 433, + .comment = "special case for DA + CB in multiplication by 8", + .shared = "\xe5\x5f\xc9\x31\x66\x9b\xd0\x2d\x1c\x64\x68\x9e\xda\x62\x64\x82\x12\xb1\x07\x8c\x43\xb5\xca\xf9\x7c\xf9\x76\x3f\xf8\x7a\x34\x55", + .prv = "\x80\x1f\xfe\x4e\x0f\x6e\xeb\x8a\x50\xc8\xfe\x79\x66\x3f\xf5\x85\xf9\xd6\xae\xbc\xfb\xf4\xb7\xed\xc6\x76\xc6\x93\x90\x0c\xb1\x41", + .pub = "\xa8\x34\x1d\xee\xcc\x0b\xe6\xdb\x11\x40\x1e\xf7\xf8\x84\xac\x3a\xde\x35\x65\x0c\xc2\x1f\x14\xb5\xcd\xb0\xa5\xcf\x0e\xe6\xb1\x5a", + .ok = 1 }, + { .tc_id = 434, + .comment = "special case for DA + CB in multiplication by 8", + .shared = "\x87\xf7\x97\x6a\x17\xf3\xe0\x3a\x7f\x1e\xb7\x4e\x6d\xb9\x50\xb8\xc0\x99\x4f\x40\xb7\x90\x34\x95\x59\x9d\x22\x77\x25\x80\x9e\x01", + .prv = "\xe0\x4e\x41\x23\x83\xa6\x3b\x33\x8b\x70\xe1\xbe\x5f\xd7\x59\x95\x35\x03\x21\xde\xe4\x28\xaa\x4f\x3b\xa6\x2a\x50\xa3\xb0\xde\x44", + .pub = "\x55\xa0\xe6\x63\x1a\x52\xf2\x9f\xb9\x0a\x17\x77\xcc\xbc\x69\xff\x94\x54\x74\x59\xd5\x41\xf7\x2e\x83\x16\xe4\xd6\x16\x53\x5a\x67", + .ok = 1 }, + { .tc_id = 435, + .comment = "special case for DA + CB in multiplication by 8", + .shared = "\x3b\xb3\xe3\x01\x05\xa7\x19\x01\xb1\x15\x06\x5e\x39\xbd\xb3\xe0\x53\xd3\x87\xb3\x90\x27\xb1\x2c\x92\xcd\xf4\xc6\x38\xad\xf0\x0d", + .prv = "\x38\x2d\xbe\x9f\x10\x15\x8b\xfb\xb7\xd1\xd7\x9a\x35\xa7\x80\x92\x14\x89\x9a\x6b\x85\x72\xb3\x5b\x55\x87\x5d\x79\xbd\x2f\x16\x40", + .pub = "\x79\x76\xd5\x20\xf1\xa2\x51\x2d\x56\x4a\xf4\x1c\x68\x31\x3f\x53\x51\xb0\x15\x6d\x51\x18\xbe\x48\x17\xf1\x92\x79\x8a\xe9\x77\x7d", + .ok = 1 }, + { .tc_id = 436, + .comment = "special case for AA in multiplication by 8", + .shared = "\xf5\xcb\x3a\x1b\x76\x18\x5a\x29\xa6\x36\x0b\x21\x42\xfe\xeb\xb1\x1f\x3d\x08\xf4\xfd\x8d\x73\xdf\x3a\x52\x28\x62\x4a\x52\x1c\x02", + .prv = "\x60\xc9\xaf\x7f\x4d\x03\x13\x6a\x60\x34\xae\x52\xde\xad\xfd\x9d\x4f\x27\x4a\xd8\x12\x28\x12\xeb\x92\xa5\x31\x69\xc8\x35\x41\x41", + .pub = "\xa2\x6a\x72\x2f\x7b\xa7\x1c\xcf\xc9\x6e\xd8\xe1\x08\xd7\xc9\xf8\x42\xd1\x7f\x92\x05\x1e\xe7\xd4\x29\xea\x7f\xa7\x90\x8a\xb9\x07", + .ok = 1 }, + { .tc_id = 437, + .comment = "special case for AA in multiplication by 8", + .shared = "\xb0\xb4\x78\x68\xe7\x04\x65\xee\x2d\xd7\x37\xf1\xba\x5a\x63\x99\xe0\x9c\xd8\x13\xd7\x2d\xa7\x58\x5a\xb4\x5c\x94\x6c\xc2\x8d\x4d", + .prv = "\x28\x3f\xae\x8b\xd8\xb2\x94\xde\x28\x48\x05\x64\x49\x75\x19\x65\xab\xb5\xc7\xfa\x86\xba\x4c\x2c\x5c\xdc\x3b\xb5\x24\xda\xd1\x40", + .pub = "\xca\x3a\x2d\x96\xf5\xdd\xa4\x82\xb0\x02\x32\x4c\xbb\xdc\xf1\xda\xcc\x98\x15\xea\xb7\x97\xc7\x15\x1c\x3a\x88\xc7\x5c\xde\xd6\x21", + .ok = 1 }, + { .tc_id = 438, + .comment = "special case for AA in multiplication by 8", + .shared = "\x58\x1e\x4b\x12\xb0\xf3\x9a\x7c\xc4\x2d\xee\x45\x13\xec\xfd\xd2\x0b\x59\x5f\x90\x5f\x17\xad\x8c\x1f\xbf\x1b\x5c\xb2\x06\x8b\x31", + .prv = "\x40\x15\x39\x70\x3c\xa4\x98\x0d\xb4\xba\x42\xc5\x9f\xc2\x9e\x83\xb4\x18\x9f\x2d\xde\xa5\x3b\xa5\x4c\xa9\x66\xc0\x68\x98\xa6\x40", + .pub = "\xee\xbd\x85\x88\x50\xb5\x6f\xeb\xb7\x07\xf2\x7a\x7a\xad\x5f\xf5\xab\x4b\x0e\x0c\x73\xb9\xc8\x6e\xc4\xca\x0f\x42\xe7\xf3\x8e\x75", + .ok = 1 }, + { .tc_id = 439, + .comment = "special case for z_2 in multiplication by 8", + .shared = "\x6b\xf2\x64\x53\x2f\xc7\x0a\x6a\x7e\x45\x9f\x45\x79\xec\xa6\xb8\x4f\x8f\x76\xab\x85\xc3\x26\x4b\x20\xbc\xa7\x25\xa6\xeb\x6c\x40", + .prv = "\xc8\xeb\x05\x62\x86\xe0\x98\xe6\xb2\xc7\x9e\x42\xf0\x07\xeb\xc6\xab\x37\x05\x34\x6c\xdb\xda\xce\x94\x9b\x5d\xe1\xe8\xc3\x67\x43", + .pub = "\xc8\x00\xbf\x79\x97\x83\x27\x5e\xb9\x33\x12\xb4\x3d\xc0\x32\xcc\xdf\xb0\x0a\x4b\x77\xc8\xb3\x77\x2c\xd2\xfe\xc8\xdb\x7e\x4a\x09", + .ok = 1 }, + { .tc_id = 440, + .comment = "special case for z_2 in multiplication by 8", + .shared = "\x69\x03\x05\xc9\xe1\x92\xcd\x8a\x51\x3f\x70\x5b\x3f\x10\x1e\xcd\xf3\xdb\x1e\xa1\x5a\x09\xc4\xa1\xbc\xe3\xa8\xcd\xc3\xa1\xa9\x3f", + .prv = "\x48\x78\x82\x95\x6c\x49\xc6\x9f\xd0\xe2\xd7\x27\x7a\x24\xfb\x1d\xbe\x4b\x03\x65\xb3\x6a\x13\xf6\x34\x40\x24\x8b\xca\x2f\xbb\x42", + .pub = "\x7b\xbc\x50\x4e\x04\xd1\x34\xee\xdc\x13\xf0\x6d\xfd\xfc\x69\xc5\x18\x25\x7a\x3f\x37\x40\x40\xa4\x9a\x8d\x21\xda\xc1\x09\x11\x0c", + .ok = 1 }, + { .tc_id = 441, + .comment = "special case for z_2 in multiplication by 8", + .shared = "\xc5\x85\x91\xb3\x3e\x49\x0e\x47\x66\xff\x7a\xdd\xff\x57\x0c\xe4\xe8\x9a\x98\x33\x80\x15\xa5\x5d\xf3\xd2\xf2\x32\xae\xa3\xfc\x4f", + .prv = "\x98\x76\x01\x0f\x4d\x64\xc7\x7f\xfc\x4d\x7d\xcc\xd7\x2b\x9a\xc8\x20\x78\xde\xb8\x83\x60\x96\x50\xb8\xcf\xf8\xa6\x86\x71\x9d\x46", + .pub = "\x13\x25\x33\xdb\x62\xaf\xf4\xfa\x06\xe9\x63\x14\x38\x3b\xf5\x8e\xbd\xec\x51\x83\xa1\x9f\x2e\x4c\xb1\x75\x52\xae\x19\xa3\x36\x6e", + .ok = 1 }, + { .tc_id = 442, + .comment = "special case for B in multiplication by 8", + .shared = "\x3d\x14\x58\x51\xb6\xff\x2b\x92\xb5\x80\x7e\xd1\xdf\x21\xeb\x50\xc9\xf2\x4c\x44\x74\xd4\x72\x1d\xb3\xab\xb7\x35\x6d\xf7\xb7\x64", + .prv = "\xa8\xa5\xd4\xf7\x89\x4a\x51\x95\x37\xba\xbf\xac\x73\x6d\xe3\x60\x54\xf5\x08\xda\xe4\x34\xb4\xfe\x63\xcd\x56\x33\x84\x6a\x26\x47", + .pub = "\xce\xb9\x0c\x56\x50\x8c\xf3\x30\xc7\xf2\x5b\xab\x42\xb0\x5b\x56\x12\xa8\x31\x06\x90\x10\x7a\xc6\x3a\x40\x4c\x0a\xde\x78\x80\x09", + .ok = 1 }, + { .tc_id = 443, + .comment = "special case for B in multiplication by 8", + .shared = "\x14\x01\x82\x9a\xac\x4e\x64\xbc\xfa\x29\x7a\x7e\xff\xc6\x04\x77\x09\x0d\x36\x27\xa6\x4a\x35\xb8\x72\xae\x05\x5d\x20\x91\x78\x5f", + .prv = "\xf8\x3e\x46\x47\xe8\x2c\x56\x0a\xa0\x82\xc5\x96\x41\xe1\x3b\xf3\x66\xbe\x8f\x24\xdc\x01\xd1\x48\x01\xe6\x78\x41\x16\x0b\xed\x47", + .pub = "\x66\xa0\x97\x67\xa0\xd8\x3b\xb1\x8d\x40\x4e\x12\x00\x37\x5a\x74\x5d\x1f\x1f\x74\x9d\x5d\xc6\xf8\x4a\x20\x5e\xfa\x6a\x11\xbc\x65", + .ok = 1 }, + { .tc_id = 444, + .comment = "special case for B in multiplication by 8", + .shared = "\xa0\xeb\xe6\x90\x8c\x54\x72\xf9\x37\x76\x9b\x9a\xeb\x31\x32\x24\x43\x7f\xc5\xd7\x3f\x4f\x86\x6f\xe7\xef\x41\xf3\x0e\x35\x9e\x09", + .prv = "\x58\xc6\xb9\x4b\xce\x9b\x15\xf6\x49\x46\xc2\xaa\x6a\x4e\x38\x3b\x0b\x2d\x43\x65\xb7\x99\x7e\xb2\x31\x0a\xc4\xee\xf1\x80\x31\x45", + .pub = "\x39\xd4\x31\x31\x63\x07\xc8\x57\x47\xbd\x2b\xcf\x4f\x9e\x0f\x88\x92\xee\x45\xdf\x15\xf7\x80\x6c\xe6\x51\x47\xd9\x7f\x50\x34\x78", + .ok = 1 }, + { .tc_id = 445, + .comment = "special case for C in multiplication by 8", + .shared = "\x07\x53\x8f\x1b\x65\x83\x04\x1c\x49\x49\xfa\xfa\xe3\x34\x9d\x62\xf9\xdd\x30\x2d\x3d\x86\x85\x7a\xf0\xde\xdc\x0d\x5a\xd6\x74\x1f", + .prv = "\x78\x6a\x97\x20\x7a\xdb\xd4\xb0\xd6\xbf\xc9\xf4\x9b\x18\x66\x0a\xd3\x60\x6c\x12\xe3\x25\x04\x4b\x86\x90\xb4\xfa\x07\x87\x46\x41", + .pub = "\x84\xc9\x2d\x8e\xcf\x3d\x0c\xb2\x2d\xde\x7d\x72\x1f\x04\x14\x0c\x2d\x9c\x17\x9c\xc8\x13\xce\x6c\xf8\xdb\x2d\xce\x61\x68\x88\x0d", + .ok = 1 }, + { .tc_id = 446, + .comment = "special case for C in multiplication by 8", + .shared = "\x12\x23\x50\x5f\xbb\x53\x4c\x1b\xc6\x10\x8e\x6b\x98\xb4\xf0\xaf\x29\xe1\x11\x58\xc0\x2d\x33\x3d\x65\x59\xbe\xec\xd6\xd3\xe5\x58", + .prv = "\x28\x23\x10\x21\x0e\x57\x5a\x59\x39\x3c\xf1\x9b\xbe\x6e\x24\x75\x2d\xc2\x47\x70\x6f\x1e\x00\x31\xe5\xd3\x9b\x2d\xe4\xff\xf7\x45", + .pub = "\xa9\xce\xdb\x9e\x94\x2a\x47\x22\x1e\x42\x96\x95\x32\x20\xd1\x00\x07\xdb\x32\x7d\x2a\xcb\x68\xda\x6e\xf3\xa4\xf8\x77\xb8\xef\x1e", + .ok = 1 }, + { .tc_id = 447, + .comment = "special case for C in multiplication by 8", + .shared = "\xee\x03\x18\x68\x16\x5f\x45\x6f\x75\x90\x7b\xf3\x97\x42\xb8\x20\xe0\xf8\xe6\xdf\x9f\x97\x68\xd7\x57\xd4\x08\xe1\xcc\x92\xff\x7b", + .prv = "\xc8\xbf\x2f\xd4\xc4\x0d\x00\xf1\x46\x5a\xad\xa6\x82\xb1\x2f\xa9\x2d\xec\x10\x34\x34\x84\xab\x62\xb8\x87\x13\x37\xde\x1d\x33\x45", + .pub = "\x64\xe1\xc0\xc5\xf5\x94\x05\xbb\xc6\xc7\xdb\x41\xa3\x48\x5c\xc9\xf9\x1c\x18\x3b\x0f\x2b\x7e\x18\x94\xa7\xab\xd8\xfb\xbe\xeb\x23", + .ok = 1 }, + { .tc_id = 448, + .comment = "special case for C in multiplication by 8", + .shared = "\xc9\x54\xfa\x7b\x04\x2c\x32\x94\x3e\x03\x19\x1e\x36\x7d\x54\xbe\x00\x85\xfa\x89\x50\xef\x2b\xec\x99\x62\x0d\xf7\x9e\xcb\xea\x4b", + .prv = "\xc0\x6a\x4a\x4b\x70\xf6\x13\x13\x6f\x18\xc0\xf8\x8e\x22\x45\x08\x6c\x3d\x1a\x52\x71\x72\x10\xa2\x1a\xc9\xd6\x36\x82\xf2\xe7\x40", + .pub = "\xa6\x8d\x2f\x55\xe6\x0e\xac\x79\x83\x92\x63\x10\xf4\xfa\xe1\x3f\x95\xb2\xbb\xf1\x40\xbe\x5e\xa9\x17\x51\x88\x4d\x90\x0a\xb4\x4d", + .ok = 1 }, + { .tc_id = 449, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\x7c\x32\x19\xb3\xc1\xfa\xe1\xf9\x55\x90\xac\x84\x3e\xfd\x20\x84\xa1\xf4\xbd\x3e\xfa\x2f\x59\x2f\x02\x20\x32\xdb\x64\xeb\xcd\x77", + .prv = "\x20\x59\x6e\x1d\xc5\x65\x96\x82\x3d\x37\x69\x8d\xfa\x69\x9c\x79\x87\x4a\xae\xfd\xe7\x97\xf8\x63\xef\x92\x13\x59\x80\xfb\x20\x43", + .pub = "\x6d\x3c\xd6\x23\xf2\x6a\x74\x53\xfa\x05\xa0\x1a\xe7\x58\xba\x84\xd3\xc5\x8d\x93\xd6\x0c\xe3\x27\x35\xa1\x5e\x0d\x05\x3d\x5b\x12", + .ok = 1 }, + { .tc_id = 450, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\xa3\x1f\x6b\x24\x9d\x64\xa8\x7c\x4a\xed\x32\x9c\x6c\x05\xc3\xf2\x24\x0b\x3c\xa9\x38\xcc\xdc\x92\x0b\xa8\x01\x6c\x1a\xea\xeb\x45", + .prv = "\x38\x14\x15\x18\xe8\xe5\xef\xa1\xd0\x31\xc6\xc4\xd9\x54\x80\x23\x9f\x6c\x30\xb8\xcc\xd8\xc7\x51\xa9\xe0\x4b\xd3\xae\xc1\x73\x42", + .pub = "\x8f\x19\x55\x47\x34\x6b\x3d\x53\xb7\xea\x4f\x74\x2b\x22\xf1\xef\x7b\x3c\xc0\x1a\x7d\x3d\xcd\x19\xaa\x7c\x5b\x03\xf3\x1b\xd2\x14", + .ok = 1 }, + { .tc_id = 451, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\x4c\xff\x9f\x53\xce\x82\x06\x48\x82\x32\x9a\x18\xea\x4e\x4d\x0b\xc6\xd8\x0a\x63\x1c\x87\xc9\xe6\xfd\xc9\x18\xf9\xc1\xbd\xa3\x4a", + .prv = "\x20\x71\x47\xf2\xb6\x8f\xef\x1e\xfc\x10\xa0\x4f\x98\x8f\x0e\xb1\x8b\x27\x3b\x0b\x5e\xd1\x7a\xa7\xaf\x32\xc9\x04\x80\xe1\x9b\x43", + .pub = "\xff\xc4\xfe\x2c\x21\x27\xa3\x09\xc7\x39\x56\x56\x51\xe9\x81\x2f\x83\x4a\x86\xdb\xad\xbb\x78\x77\x69\x77\xf7\x86\xec\xdb\x02\x17", + .ok = 1 }, + { .tc_id = 452, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\x24\x8d\x3d\x1a\x49\xb7\xd1\x73\xeb\x08\x0a\xb7\x16\xac\x8f\xde\x6b\xd1\xc3\xed\x8e\x7f\xd5\xb4\x48\xaf\x21\xbc\xdc\x2c\x16\x16", + .prv = "\x48\x80\x84\x53\x7b\x84\x0f\x9c\x93\xca\x57\xb3\xee\x80\x49\x14\x18\xd4\x42\x21\x11\x3e\x03\xf5\x63\x55\x30\x26\x04\xd0\x35\x47", + .pub = "\x84\x75\xba\xbe\xea\xb9\x98\x0d\x42\x6a\xbd\x53\x23\xdf\xb3\x35\xb2\x19\xe1\x29\xbd\xda\xe4\xd6\xce\xbc\xda\x50\x75\x4a\x68\x25", + .ok = 1 }, + { .tc_id = 453, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\x66\xc6\xe7\x0c\xf6\x30\xbe\x90\xa2\xc8\x8f\xcd\xe7\xf5\x8c\xff\x38\x68\x66\x0f\xa9\x64\x06\xe8\xdf\x4a\xc6\x77\xdb\xd8\x5f\x50", + .prv = "\x28\xcf\xc1\xd0\x3f\x5c\x74\x28\xff\x3e\x20\xb1\x37\x26\x8b\x33\xcc\xc7\x4d\xb0\x35\x82\xd2\x12\x7c\x56\x6d\xf4\xac\x99\xf4\x41", + .pub = "\x81\xf9\x0a\x2f\x66\x33\xd3\x0c\x2b\x72\xa2\x57\x95\xd2\xa4\x94\x63\xa8\x0b\x6b\x0e\xdc\x5a\xa6\x8b\xae\x4b\xf7\x38\x18\x55\x39", + .ok = 1 }, + { .tc_id = 454, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\x06\x28\x3f\xcf\x69\xdc\x83\xe9\x9d\x92\xe5\x33\x6f\x49\x9a\x1d\x8f\xa7\x5e\xd2\xc8\x19\xb5\xae\x6e\xa8\x09\x44\x54\x32\x4b\x27", + .prv = "\xc8\xe3\x7d\x10\xf3\xd0\x3d\xb3\xf4\x3e\x46\x7b\xdd\xf9\x8f\x59\x5c\xb5\x29\xad\x25\x3c\x20\xd4\x91\x28\x2d\x14\x00\xb9\xe7\x40", + .pub = "\x41\x62\x6e\x33\xb3\xc8\xf4\x8b\xd1\x9e\x49\xde\xd3\x07\xf2\xb6\x3b\xde\x70\x5c\x4f\x3c\xdf\x9d\x4f\x92\xbf\x37\xc4\x8c\xba\x42", + .ok = 1 }, + { .tc_id = 455, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\x7d\x2a\xff\xb4\x33\x55\xf5\xdb\x12\x94\xda\xff\x55\xf5\x9b\x1f\x17\xe7\xd2\x5b\xca\x20\x74\x6f\x12\x48\x4d\x78\xe5\x01\x55\x17", + .prv = "\x00\x23\x7e\x91\x40\x6a\x7b\x4d\xb6\x1e\x78\x0c\x59\x76\xfb\xb9\x26\xcd\xac\xe2\xfb\xdf\xdb\xcf\xce\x65\xe6\xdb\xe7\x78\x2a\x42", + .pub = "\xeb\xb3\x2f\x78\x1c\x0e\x89\xb2\x52\xe6\x11\xf9\xd8\xf7\x9f\x85\x67\x87\x4c\x96\x65\x98\x31\x4b\x2f\x16\xaa\x44\xcf\xc0\x78\x43", + .ok = 1 }, + { .tc_id = 456, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\xef\x8e\x78\xca\xb0\x91\xd6\x67\x88\x84\x89\xfd\x3a\x2e\xc9\x3f\xb6\x33\x42\x7d\x02\xeb\x77\xb3\x28\xd5\x56\xf2\xb2\xb0\xe2\x66", + .prv = "\x48\x9c\x41\x84\xa2\x3a\x8f\x5e\xec\x68\xa3\x1b\x41\xaa\x2c\x03\x92\xcd\x6f\xb1\x23\xf1\x0a\xcd\xb4\xde\x75\x29\x2b\x4b\x9a\x43", + .pub = "\xfa\x75\xe6\xf0\x8c\xa8\x15\xb4\xe4\x2a\xf2\x4a\x8e\x05\x7c\x9e\x00\xe8\x28\xe3\x3d\x12\xc0\xe9\x4d\x10\x12\xa7\x58\x33\x67\x44", + .ok = 1 }, + { .tc_id = 457, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\xc8\xd8\x5b\xfa\x74\xb4\xb2\x64\x61\x29\x7b\x35\x0c\x97\x51\x83\xfe\xa9\xd3\x3b\xa2\x9c\x3a\x49\x34\x50\x9c\x2e\xcd\xa5\x8a\x79", + .prv = "\xc0\x59\x57\xfb\xc3\xa0\xe2\xc2\x2a\x2a\xef\x62\x76\x51\xca\x1e\x99\x30\x7b\x82\xa0\xc6\x17\x0f\x79\x50\xa3\x34\xf3\x00\x49\x41", + .pub = "\x4d\x96\x32\x0c\xdb\x0c\xa5\x26\x55\xe9\x11\x18\xc3\x3f\x93\xaf\xe4\xae\x69\xe9\xe5\x13\xff\x45\x06\x75\x0b\x8e\xa7\x84\xce\x46", + .ok = 1 }, + { .tc_id = 458, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\x22\x55\x7e\x0d\x87\x41\xed\x2a\x63\xaf\xd5\xe3\x13\xaa\x15\x79\xfc\x0c\x88\xc7\x77\x2e\x23\xa6\x76\xc9\x4b\x60\xc8\x9d\xf5\x77", + .prv = "\x60\x11\x1c\x66\x29\xf7\x36\x35\x98\x5b\xe9\x64\xb8\x45\xf8\x7a\x88\xae\x56\x52\xd4\x5b\xb1\x45\x1c\xe8\xcf\xd2\xea\x45\xfe\x41", + .pub = "\xc0\xef\x1b\x7c\x20\x23\x7d\xb3\x70\x50\x1f\x24\x27\x4e\x4e\xba\x91\x99\x8a\xe4\x54\x5f\x93\x70\x07\xe1\xc4\xa2\xea\xb6\x33\x65", + .ok = 1 }, + { .tc_id = 459, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\x54\xd7\xfc\x17\xba\xd0\x02\x96\xba\x50\xb0\xf3\xd5\xbf\x8f\xb8\x3f\x82\xd5\x71\x95\x2a\x5f\xdb\x5a\x49\x41\x20\xcc\x61\x44\x6b", + .prv = "\x58\x78\x58\x89\xa2\x16\xd1\x54\x56\x58\x2d\x4e\x1e\x3d\xe9\xe9\xca\x4a\x43\x29\x54\x41\x6d\x81\xca\xf5\x2b\x2b\x43\x4c\x17\x46", + .pub = "\xd5\x34\xd8\xff\x4d\x56\xa7\x3e\xf7\x61\x5e\x94\x52\x3b\x17\xe3\x5e\xdb\x3d\x0f\xb8\x7e\x98\xc6\x85\x36\xf6\x3f\x11\x4a\x8d\x6c", + .ok = 1 }, + { .tc_id = 460, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\xdb\x68\x51\xb1\x25\x85\xbc\x11\xbe\x93\x62\xc9\x6a\x54\x5c\x6f\x2b\xa5\x5f\x04\x00\x97\x92\x46\x3b\x96\xa3\x8c\xb9\xb3\xf0\x7c", + .prv = "\x60\xbe\xf3\x8a\x38\x90\xec\x1e\xd0\x5c\x29\x9f\xce\xb7\x7d\xb5\xea\xd4\xb8\x8d\x9e\x93\x1b\x0f\x21\xd6\x64\xf7\x7d\xf9\xb5\x44", + .pub = "\x73\x3a\x71\x1b\xa0\x1b\x6e\x9b\x64\xa0\xbe\x4c\xdc\xa8\xc7\xcf\x3c\x66\xdf\x24\x35\xd5\x24\x8f\xb4\x41\x3f\xec\x6e\xe0\x3f\x70", + .ok = 1 }, + { .tc_id = 461, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\xf6\xd1\xa6\x64\x25\x7f\xa5\xde\x3d\x4d\x57\xf0\x4e\xda\x29\x76\xbf\x1e\x35\xcc\x3a\xc5\x13\xe1\xee\x84\xd5\x7d\x21\x35\xed\x13", + .prv = "\x58\x54\xee\x56\x68\x78\xef\x8b\x7e\xba\xf5\xa0\x58\x30\x6f\x25\x0e\xdf\x0c\x84\xfd\x52\xaf\x2d\x74\xb7\xce\x3c\x1e\xdd\xa7\x46", + .pub = "\x35\x73\x8d\xd5\x39\xd6\x0f\x69\xcd\x1a\x1c\xff\xc8\xa4\x2b\x6a\xf6\x8f\xe7\xde\x45\x39\x2d\x02\x83\x1e\x2a\x77\x50\x0e\xa2\x78", + .ok = 1 }, + { .tc_id = 462, + .comment = "special case for x_2 in multiplication by 8", + .shared = "\xf8\xf7\x62\x5a\xc5\xbd\xe6\x3f\x75\x3a\x9b\xb4\xae\xfb\xfb\x9c\x46\x47\x20\x77\x08\xaf\x9d\x77\x4e\xf0\x8f\xf1\xb1\xe5\xa3\x54", + .prv = "\x98\x5b\x55\x12\x61\xfc\xe3\x8d\xdc\x8f\xf3\xad\xd3\x2f\x5c\x26\x81\x1d\x27\x1b\x9a\x17\x94\xe2\x49\xdd\x76\xa3\x8d\xf2\x84\x46", + .pub = "\xce\x93\x2b\x5a\xf4\xbe\x47\x21\xf9\x6f\x7b\x79\xba\x1c\x43\xb2\x06\x87\xd4\xaf\x49\xc3\x7b\x58\xdc\x89\x42\x79\xe0\x4b\xb5\x78", + .ok = 1 }, + { .tc_id = 463, + .comment = "special case for E in multiplication by 8", + .shared = "\x5e\x10\xdf\xbf\xf4\x44\x3e\xfc\xae\x2c\xcc\x78\xc2\x89\xa4\x14\x60\xd5\xa8\x2f\x79\xdf\x72\x6b\x88\x24\xcc\xbe\xf7\x14\x6d\x40", + .prv = "\x88\x15\x05\x23\x44\xdc\xad\x97\xef\xd1\x34\x1e\x90\x72\xa8\x08\xcf\x99\x9e\x46\xe5\x2c\xf0\x4e\x0c\xfb\xcd\x99\x01\xe1\x8d\x43", + .pub = "\xe3\x65\x54\x48\x33\x9e\x48\x50\x80\x6e\xb5\x8a\xbb\xa0\xc8\x91\x85\x51\x1e\xa7\x2c\x37\xc4\x9e\x95\x83\xee\x6d\xd2\x35\xd2\x13", + .ok = 1 }, + { .tc_id = 464, + .comment = "special case for E in multiplication by 8", + .shared = "\x19\xd7\xb4\x4c\x18\x47\xc4\x4e\x8f\x37\xa2\x2a\xb6\x9c\x18\x0f\xd9\xd7\x87\xf2\x04\x12\x30\x13\xe1\xb1\x68\x00\xb9\xcd\x0f\x57", + .prv = "\xb8\xe0\x32\xe9\xe5\xff\xba\xa0\x04\x39\x0f\x3a\x0b\x90\x0b\xc7\xcf\x5d\x11\x23\x8b\x7e\xc9\x64\xaf\xc4\xbd\xa2\xaa\x6c\x34\x44", + .pub = "\x4d\x16\x96\x5b\x16\x37\xe9\xd7\xae\x8f\xeb\x49\x9e\xd0\x55\x39\x62\xa9\xaa\x00\x22\xd1\x62\x0c\x92\x80\x72\xf6\x50\x1b\xc4\x1b", + .ok = 1 }, + { .tc_id = 465, + .comment = "special case for E in multiplication by 8", + .shared = "\xdb\x99\x0d\x97\x9f\x4f\x22\xf7\x66\xe7\x82\x6d\x93\x55\x4e\x77\x1b\x36\x1d\xe4\x61\x27\x4d\x6c\x37\xba\xad\xeb\x8e\xf7\xbe\x4e", + .prv = "\x70\x12\x85\x22\x11\xf6\x53\x6f\xca\x79\x93\x7e\x7e\x31\x6c\x91\x49\xb0\xe2\x0e\xa0\x3f\x95\x1e\x1b\xb0\x72\x89\x5c\xa0\xe0\x44", + .pub = "\xc6\xb9\xe6\x28\x87\x37\xad\x40\x45\x2c\xec\x10\x22\x87\x1d\x90\xaf\x16\x42\xd1\x0b\xd0\xa9\x77\x92\xb1\xa9\xc8\x99\x8e\x22\x20", + .ok = 1 }, + { .tc_id = 466, + .comment = "special case for E in multiplication by 8", + .shared = "\x6d\x7f\xc5\xd4\xa8\xf5\x34\xb1\xbc\x0f\xa5\xe0\x78\x10\x42\x34\x67\x5c\x02\x66\x47\x36\x95\x7a\xbd\xb2\x7d\xf6\xfa\xf0\x7c\x00", + .prv = "\xd0\x39\xc1\xb9\xec\x47\x63\xe0\xad\x8a\x0e\xf2\xb0\x87\x02\x97\xd0\xf8\xb4\x87\xe6\x60\x59\x5a\x48\x41\x05\xd1\x80\xe1\x4a\x47", + .pub = "\xd5\x66\xfa\xb5\x05\xac\x4c\x7a\x3d\xc3\xb9\x40\x3e\xf1\x21\x39\x2c\xbb\xe2\x12\x16\xe5\xbc\xb8\xea\xb2\xdc\x94\x08\x98\x6e\x34", + .ok = 1 }, + { .tc_id = 467, + .comment = "special case for E in multiplication by 8", + .shared = "\x53\x9c\x8d\x62\x9a\xb5\x1c\x2f\x3e\xa7\x27\x8f\xd5\xf1\xc3\x1b\x6c\x15\x0a\x82\xfe\x3f\x78\x6b\x93\xff\xa1\x59\xfd\x6d\x93\x16", + .prv = "\x58\xef\xcb\xc8\x77\x7c\x1b\x54\xf0\x9c\x61\xa2\x16\xef\xd4\x27\x29\x2e\xb1\x23\x12\xdb\xb3\xb3\x2b\xd4\x52\x54\xa6\x68\x3e\x47", + .pub = "\x46\x8d\x35\xec\xfb\x6d\x9b\x72\x72\x52\x32\x76\xcc\x5e\x13\x76\x05\x19\x66\x7f\x0e\x1e\x38\x88\xda\x4c\x56\x95\x5f\xe9\x11\x51", + .ok = 1 }, + { .tc_id = 468, + .comment = "special case for E in multiplication by 8", + .shared = "\xde\xe3\xfd\x19\xc8\xf2\x96\x41\x54\x48\xb2\x1a\xf4\x43\x85\xec\x46\x72\x7b\xbe\x67\xd4\x83\x9b\x93\xef\xe2\xf6\x80\xe7\x6d\x34", + .prv = "\xc8\xd7\x34\x46\x02\x6c\xd0\xea\x79\x57\x73\xc2\xeb\x7b\x16\x34\x8c\xd5\xf2\x28\xe3\x52\xdb\xc7\x73\x28\xc2\xd8\xb9\xcd\xe2\x40", + .pub = "\x19\x29\x53\x87\x43\x97\x7d\xfe\xa2\x0b\xf4\x92\x7d\xda\xbb\x2f\x3b\xb1\x5c\xac\x24\x61\x05\x45\x08\x84\x97\x18\x85\x4b\x55\x68", + .ok = 1 }, + { .tc_id = 469, + .comment = "special case for E in multiplication by 8", + .shared = "\x2a\x03\x40\xaa\xaf\xa0\x5d\x00\x52\x9c\x09\x05\x7e\xd0\x14\x5f\x34\xd2\xde\x66\xa3\xe1\x49\xcf\x08\x4e\xa9\x71\x68\x91\x4f\x39", + .prv = "\x98\xb5\x59\x52\x3b\xc7\x78\xb0\x41\x8a\xf5\x3c\x0c\x32\xf6\xff\x5c\xf7\x71\xff\x5d\xf8\xae\x7c\xbf\x7c\x3b\x72\xae\xdb\x5b\x43", + .pub = "\x2d\x7a\xb4\xc6\xf5\x98\x65\x35\x5e\xe8\xe9\xde\x57\xdb\x19\xaa\xdf\x77\x08\xb7\xc1\xd1\xa8\x18\x48\x7c\x34\x06\x23\xba\xdc\x6d", + .ok = 1 }, + { .tc_id = 470, + .comment = "special case for E in multiplication by 8", + .shared = "\x00\x31\x37\x17\xd3\x3e\x3b\x41\xa0\x86\x59\x86\x15\x75\x82\xe0\x53\x50\x2a\x17\x2b\x88\xd0\x1b\xb7\xb1\x08\x31\xa9\xfc\x4e\x6c", + .prv = "\x58\x98\x15\x02\x7c\xaf\x82\x71\x4e\x96\xc9\xf9\x1b\xac\xe6\x6e\xc4\xba\x3e\x92\xdf\x3f\xa1\x4b\x9b\x8f\xe5\x03\x55\x6e\x45\x43", + .pub = "\x43\x83\x9f\x4a\x6a\xa2\x06\xc8\x2c\x5a\x73\xf4\x9d\x8c\x9e\x57\x38\x26\xb3\xba\x72\x35\xd3\x12\x98\x7c\x17\xae\xbe\xe6\x27\x76", + .ok = 1 }, + { .tc_id = 471, + .comment = "special case for E in multiplication by 8", + .shared = "\x9b\x6b\xe9\xe6\xf2\xfd\xb5\xd3\x32\x18\x42\x22\x5d\x3e\x91\xd1\x48\x28\xcc\x53\xba\x66\x54\xda\xbe\x19\x0b\x0c\x3e\xde\xb3\x09", + .prv = "\x80\x71\x5f\x67\x27\x0c\x99\x78\x98\x55\xce\xae\xa9\x9b\x99\x57\xcc\xda\x33\x32\x6f\x76\xbb\x44\x74\xab\x52\xab\x1e\xc3\x70\x41", + .pub = "\x3c\x32\x1e\x7f\x0b\x9e\x55\x5b\xc2\x64\xa2\xce\xa6\x17\xe6\xb2\xb5\x62\xeb\xab\x21\xfe\x0c\x22\x6c\x3e\x48\x7b\x7d\xf9\xa2\x7d", + .ok = 1 }, + { .tc_id = 472, + .comment = "special case for DA - CB in multiplication by 8", + .shared = "\x22\x3f\x1e\xb5\x52\x30\x83\x73\x02\x6d\x11\xc9\x54\x68\x4c\xe6\xdb\x87\x0b\x63\x8b\x19\x0b\x94\x43\xe5\x0a\xae\x21\x9f\x4e\x3e", + .prv = "\x10\x1b\x99\x0b\xd8\x3d\x68\x41\x26\xff\x04\x7d\x93\x0c\x27\xd0\x86\xa5\x88\xdd\x19\x68\x3d\x26\x29\xf0\xe3\x4f\x43\x74\xab\x41", + .pub = "\x42\xe5\xa6\xb8\xe9\x65\x4b\xb4\xad\x62\x4a\xf3\xf4\x91\x87\x79\x77\x51\x3c\xc8\x77\x5c\x8f\xb3\x12\xad\x19\xdb\xf3\x90\x3a\x28", + .ok = 1 }, + { .tc_id = 473, + .comment = "special case for DA - CB in multiplication by 8", + .shared = "\xfb\x95\xce\x4a\x3c\x1f\x32\x56\x38\xb7\xd4\x7f\x42\x16\xd3\x9a\x7c\x6c\x5d\xa9\xa0\x1c\xaa\x29\x7c\x37\xb6\x28\x16\x55\x5b\x2a", + .prv = "\x20\x00\x89\xb7\x12\xd9\xa2\x05\x05\x97\x77\x9d\x46\x37\x12\xfc\xd2\x23\xe3\xd6\x78\x79\xc0\xfb\x76\x06\xf8\xf5\xf0\xef\xee\x40", + .pub = "\x0a\x51\xdd\x90\xab\x98\x5f\x6d\xea\xf7\x2f\x16\xc4\x50\x14\xda\x26\xdf\x84\x86\x97\xf6\x58\x2d\x75\x68\x8f\x52\x23\x34\x2b\x51", + .ok = 1 }, + { .tc_id = 474, + .comment = "special case for DA - CB in multiplication by 8", + .shared = "\x48\x8b\x83\x41\xc9\xcb\x1b\xbf\x12\x45\x10\xb9\xf8\xda\xe4\xfa\xf2\xe0\xdc\xa9\xb8\x4e\x00\xe9\x52\xa6\x3b\x5a\xa3\x28\xa8\x60", + .prv = "\xf0\x4f\x87\xf4\xe6\x23\xaf\x4c\x31\xce\xca\x0b\xb8\x7f\xac\x2d\x5b\x12\x51\x7b\x5a\x72\x84\x90\x2a\xd7\x58\x38\xe6\x5f\x1e\x41", + .pub = "\x88\x42\x31\x73\x57\xbd\xe8\x25\xef\x43\x8a\x1c\x53\x90\x6f\xb8\xb0\x4e\xa3\x60\xf7\xef\x33\x8c\x78\xe6\x68\x58\x60\x47\x93\x6a", + .ok = 1 }, + { .tc_id = 475, + .comment = "special case for DA - CB in multiplication by 8", + .shared = "\x11\x29\xea\xe9\x7b\xf7\x5f\x73\x14\xf2\xe1\xb4\x03\xb1\x87\x37\xad\x83\x0c\x80\x42\x9e\x2b\xa0\xd4\x86\x6b\x36\x23\x99\x85\x5f", + .prv = "\x38\x3c\xbd\x5a\x3d\xd0\x90\x1d\x09\xa3\xca\xc3\xd3\xa7\x7a\x97\x9c\xec\xf1\x5e\x20\x6a\x55\x3e\x4c\xa3\xf2\x4b\x90\x78\x39\x45", + .pub = "\xc7\x1d\x92\xd3\xc9\x2d\xbf\xae\xd7\x55\xfb\x32\x79\x7b\x66\x7c\xc8\x6b\x0e\x79\x36\x24\x98\xe2\xac\xa3\x8c\x68\x97\x13\xb1\x6e", + .ok = 1 }, + { .tc_id = 476, + .comment = "special case for DA - CB in multiplication by 8", + .shared = "\x07\x2f\x51\xd9\x47\x27\xf3\x92\xd5\x9d\xc7\xca\xff\x1f\x44\x60\x45\x23\x52\xec\x39\xc3\x2a\x1c\x9f\x07\x1e\x38\x88\x33\xda\x56", + .prv = "\x70\x1d\xf0\x9e\x57\xb9\x8a\xec\x37\x57\x45\xdf\x14\x7b\x72\x94\x9a\x6b\x2b\xb2\xca\x3a\x34\x88\x15\x12\xee\x31\xe7\x90\xad\x42", + .pub = "\x3a\x21\xd1\xcf\x7b\x37\x44\xd1\xad\x26\x19\x73\x35\x84\x49\x82\xc2\xa0\xc6\xa5\xaa\x83\x54\x92\xbd\x03\xc4\x01\xa4\xfe\x67\x78", + .ok = 1 }, + { .tc_id = 477, + .comment = "special case for CB in multiplication by 8", + .shared = "\x30\x51\x21\x42\xd3\xe3\xa4\xca\xd6\x72\x6d\x9d\x35\xf2\xe0\x43\xfc\xa9\xdf\xb7\x50\x88\x4a\xe2\x2b\x25\x47\xc8\x40\xf3\x58\x7b", + .prv = "\xb0\xff\xa5\xf4\x92\x2b\xb1\x17\xad\x75\xff\x43\xac\xac\x62\x33\x1e\xfa\xa4\x55\x36\xfe\x88\x30\x6e\x4a\x4c\xb5\x8d\xb7\x3a\x47", + .pub = "\xd1\x28\xea\x3e\x13\x32\x5e\xd6\xeb\xd6\x53\x3a\x9f\xd3\x04\x5a\x55\xf2\x5a\xd8\xb6\x7d\xef\x30\x91\x28\x43\x50\x4c\x1a\xab\x29", + .ok = 1 }, + { .tc_id = 478, + .comment = "special case for CB in multiplication by 8", + .shared = "\x5b\x81\xb3\x76\x1a\x66\xd1\x99\xe8\xef\x99\xd2\x49\x4b\xd5\x7a\x02\x29\xd4\x56\x4a\x7f\x6d\x60\x55\xf2\x2a\xa4\x86\x81\xbd\x3a", + .prv = "\x68\x5e\x32\x71\xd2\x01\x57\x41\x75\x66\x12\xa9\x30\xe8\x58\xb9\x30\xac\xf2\x01\x81\x45\xf3\x82\xc8\x3d\x8c\xce\xd2\xe2\x20\x44", + .pub = "\xe0\x79\xc8\xf8\x42\x31\x65\xc7\xe0\xa2\xc4\x8b\x4a\xbe\x90\xae\xce\x4e\x6d\x90\x3d\x7a\x5a\x16\x25\xfa\xd0\x41\x0c\xd5\x5b\x32", + .ok = 1 }, + { .tc_id = 479, + .comment = "special case for BB in multiplication by 8", + .shared = "\x03\x8d\xe7\xfd\xb9\xcc\x00\x30\xf5\xc1\x1d\xda\x00\x58\x9f\x0a\x95\xf6\x56\x58\x81\x5b\x06\xed\x01\x35\x53\xa0\x2b\x6c\x50\x17", + .prv = "\xf8\xe1\x61\xd6\x92\x97\xe0\x17\xd7\xc5\x1b\x1b\x1f\xf3\xba\x70\x3d\x4c\x4c\xf8\xfc\x2b\x8f\xf4\x7f\x74\xc3\xff\x8c\x7d\x35\x41", + .pub = "\x65\x92\x2a\x06\xe9\xbe\x4e\x8a\x5e\x8a\xce\xb1\xa4\xe0\x8f\xe9\x0f\x01\xe1\x0e\xf2\xdd\x27\x31\x54\x27\xce\xdf\xcf\x95\xec\x32", + .ok = 1 }, + { .tc_id = 480, + .comment = "special case for BB in multiplication by 8", + .shared = "\x22\xb0\xde\xa3\xb3\xb7\xca\x55\xec\xee\xaa\xe6\x44\x34\x26\x54\x8c\x7c\x15\xcc\x7d\xdf\x31\x78\x03\x18\xd1\xc2\x38\x79\xc1\x6a", + .prv = "\x10\x5d\x75\x89\xf8\xab\xef\x0a\xcf\x09\x40\xda\x84\xa6\x9e\x8f\x2f\x30\x6f\xa7\x3c\x9a\xfd\x27\x34\x22\x87\xc1\xdb\xa8\x00\x44", + .pub = "\xd3\x6a\x24\x0e\x97\x2d\xc1\x6e\x9b\x97\xa9\x97\xad\xa3\x37\xf0\x27\x60\xd0\x5c\x46\xd7\xf8\xd7\xb4\xe9\xea\x9a\x63\x5c\x7c\x64", + .ok = 1 }, + { .tc_id = 481, + .comment = "special case for BB in multiplication by 8", + .shared = "\xa2\x5e\x13\x06\x68\x4a\xd7\x87\x0a\x31\xf0\x40\x45\x66\xe8\xd2\x8f\x2d\x83\xd4\xb9\x49\x78\x22\xc5\x7f\x87\x81\xb1\x8f\xec\x20", + .prv = "\x18\x93\xd4\x38\x8b\x0e\x90\xf0\xb5\x02\x08\xaa\x8f\x0c\xc2\x4f\x57\x6d\x03\x64\x1b\xaf\x1c\x3e\xdd\xb2\xa3\xef\xa6\x9c\x9d\x40", + .pub = "\x4f\x5b\x8b\x98\x92\xb8\xa4\x6d\xf0\x8d\x76\xa4\x74\x5b\x1c\x58\xd4\xe7\xa3\x94\x90\x54\x35\x87\x56\x88\xca\x11\xf1\xe9\xd8\x6a", + .ok = 1 }, + { .tc_id = 482, + .comment = "special case for BB in multiplication by 8", + .shared = "\xbb\x44\x31\xbe\xa7\xa5\x87\x1c\x1b\xe2\x7a\x26\x74\x09\x46\x27\xea\xaa\x44\x25\xc9\x9c\xd3\xfa\x41\xbd\x7e\x13\xcb\xd7\xbf\x7e", + .prv = "\x00\x65\x17\x13\x01\xbf\x6b\x90\xfb\x16\xef\xa3\x55\x09\x16\x1f\x1b\xd6\xb3\xb9\x31\x30\xd4\x90\xaf\x9f\xe2\x24\xdd\x15\x5f\x45", + .pub = "\xaa\x2f\x02\x62\x82\x69\x13\x9a\x7a\x8a\x16\xfd\xe9\x5c\x9b\xad\x7d\xa7\xff\xbd\x54\x39\xc3\x96\xa7\xd7\x7b\x6c\x32\x13\xe6\x7f", + .ok = 1 }, + { .tc_id = 483, + .comment = "special case for A in multiplication by 8", + .shared = "\x33\x0f\x5d\x0b\x5b\xcc\xc9\x0f\x76\x94\xdf\xdd\x9c\x64\x49\xa6\x2d\x93\xaf\x88\x40\xea\xf5\x71\xe3\xe0\x61\x0e\x01\x98\xb0\x3f", + .prv = "\x10\xc8\x1a\x4e\x78\xd8\x21\x45\xb2\x66\xe1\xd7\x4b\x38\x69\xbf\x1c\x27\x42\x78\x03\xeb\xb1\x1c\x92\xff\x80\x73\xd1\xe4\xcc\x46", + .pub = "\xd9\x95\xcb\x28\x7e\x9a\x9c\x57\x91\xf3\xca\xe3\xd4\x94\xa5\xb5\x16\xa1\xe2\x6c\xbc\x93\x0f\x43\xe7\x3c\x8b\x70\xb6\x9d\x78\x3b", + .ok = 1 }, + { .tc_id = 484, + .comment = "special case for A in multiplication by 8", + .shared = "\xbd\xef\x00\xca\xa5\x14\xb2\xf8\xab\x1f\xb2\x24\x1e\x83\x78\x7a\x02\x60\x1e\xcd\xff\x6c\xf1\x66\xc4\x21\x0f\x8c\x1a\xde\x42\x11", + .prv = "\x48\xb9\x8b\x4a\x99\xea\xdd\x73\x01\x2c\x07\xfe\x5c\x4a\x0b\x95\x90\xac\x55\xe8\x21\x35\x3b\x41\xd5\xf6\x65\xe1\x71\x88\xbc\x41", + .pub = "\x47\x9a\xfb\x1e\x73\xdc\x77\xc3\x74\x3e\x51\xe9\xec\x0b\xcc\x61\xce\x66\xed\x08\x4d\xc1\x0b\xfa\x27\x94\xb4\xc3\xe4\x95\x37\x69", + .ok = 1 }, + { .tc_id = 485, + .comment = "special case for DA in multiplication by 8", + .shared = "\xbf\xd5\xb5\xac\xd2\xd8\x9f\x21\x3a\x26\xca\xf5\x40\x62\xf9\xa2\x4e\x6f\x6f\xd8\xdd\xd0\xcd\x2e\x5e\x47\xb7\xfe\xa4\xa9\xc5\x37", + .prv = "\x18\x97\x67\x8e\x38\x22\x2a\x61\xfe\x10\x5d\xc6\x64\x3c\x1e\xb5\x94\x0e\x8d\xbc\x73\xed\x6c\x00\xf2\x5a\x34\x32\x8f\x43\xa6\x41", + .pub = "\x37\x8e\xda\x41\x47\x0b\x0f\x23\x8a\x20\x0f\x80\x80\x9a\xd5\x62\xca\x41\xe6\x24\x11\xa6\x1f\xeb\x7f\x7e\x9b\x75\x2b\x55\x46\x42", + .ok = 1 }, + { .tc_id = 486, + .comment = "special case for DA in multiplication by 8", + .shared = "\xc8\x08\x58\x77\x80\x0c\x17\x5e\x94\x9c\xdd\x88\xe1\x96\xeb\x9c\x48\x41\xda\x2a\xc4\x46\xdf\xed\x90\x85\xbd\xa5\xbb\xec\x26\x5d", + .prv = "\xa8\x98\xaf\x81\x38\xe1\x1a\xe4\x5b\xbc\xef\xa7\x37\x18\x2a\x57\x18\x85\xf9\x2d\x51\x5c\x32\x05\x6c\x7c\xb0\xd7\xde\xac\x47\x41", + .pub = "\x0c\xad\x75\x45\xad\xe2\xfd\x93\xfc\xae\x00\x7c\x97\x64\x83\x48\xf2\x6d\x85\x82\x9b\xdb\x72\x23\xa6\x3e\xcc\xb8\x4e\x56\xd4\x75", + .ok = 1 }, + { .tc_id = 487, + .comment = "special case for AA in multiplication by 9", + .shared = "\x4c\x30\x08\x95\x82\x73\x82\xa9\xd1\x07\x90\x28\xbd\x6f\x69\x4a\x7a\x12\xdd\xac\x9c\x76\xab\xac\x6f\xdf\x5d\x29\x45\x7a\x33\x10", + .prv = "\xb0\xbf\xef\x6e\xc0\x95\xb5\xa1\xf9\x39\x17\xd3\x2f\x16\xa2\x1d\x04\x62\xc1\xfd\xe1\x74\x46\xf5\xa5\x90\x23\x2d\x9c\x89\x5f\x4a", + .pub = "\x60\xf2\x7e\xd0\xa2\x78\x04\xce\xd2\x37\xcf\x3c\x1c\xc7\x76\x65\x0f\xb3\x20\xba\xe6\xd5\xac\xb5\x64\xe9\x7b\x56\xcb\xa2\x52\x10", + .ok = 1 }, + { .tc_id = 488, + .comment = "special case for AA in multiplication by 9", + .shared = "\x72\x85\xfb\xb3\xf7\x63\x40\xa9\x79\xab\x6e\x28\x87\x27\xa2\x11\x33\x32\xcf\x93\x38\x09\xb0\x18\xb8\x73\x9a\x79\x6a\x09\xd0\x0b", + .prv = "\x60\x49\x7d\x44\x64\xed\x88\x23\xc5\x0f\xbc\x6b\x68\x62\x08\x26\xc4\xf6\x29\xc1\xd9\x19\x30\x58\xdf\x6b\xf8\x57\xc6\xae\xcc\x4b", + .pub = "\xf9\x3a\x73\x27\x0a\xc1\x91\x94\xb8\xe4\xff\xd0\x2b\xe4\xb1\x43\x85\x25\xf8\x4a\x76\x22\x46\x88\xea\x89\xa9\xdd\x6a\x1b\xd6\x23", + .ok = 1 }, + { .tc_id = 489, + .comment = "special case for AA in multiplication by 9", + .shared = "\xda\xbc\x3b\xd4\x9f\x19\xcf\x70\x71\x80\x2e\x43\xc8\x63\xed\x0b\x1d\x93\xa8\x41\x58\x80\x98\xb9\x8a\x0c\x58\x1b\xf4\xfe\x0a\x11", + .prv = "\x08\xc6\xcb\xe0\x37\x92\xa3\x82\x9f\x06\xe8\xad\x54\xc5\x5d\xb1\x13\x23\x6a\xc0\xdc\xc9\xab\x6a\x9a\x6b\x10\xee\xd1\x04\x1b\x48", + .pub = "\xcf\x80\xc3\x0f\xcb\xfd\x53\x56\x66\xca\x1d\xa4\x99\xe2\xe9\x9c\xc5\x37\x06\x3e\x2d\xe1\x94\x58\xfc\xf9\x2f\x5e\xe3\x4a\xcf\x47", + .ok = 1 }, + { .tc_id = 490, + .comment = "special case for AA in multiplication by 9", + .shared = "\xa6\x1a\x3b\x15\x0b\x47\x70\x53\x23\x73\x67\x62\x98\xc9\xa5\xda\x28\xad\xcc\x43\x65\xb0\x6f\xe0\x7c\x95\x9c\xa8\x0e\x47\x7a\x57", + .prv = "\x50\x04\x4d\xa3\x31\x5d\xd0\x82\xe9\xdf\xb6\xa1\x99\x4a\xab\xb3\x31\xf5\x3e\x0d\x1c\x12\x63\x33\x83\xb2\xa3\xc8\x67\x8c\xfe\x4c", + .pub = "\x69\x8e\xff\xe0\xad\x42\xe1\x5e\xe1\xf4\x6f\xde\x6f\xc5\x07\x4f\xfd\xa1\x83\xbc\xf1\xb2\xdb\x86\x47\xf5\x61\xdd\xd1\x91\xdd\x60", + .ok = 1 }, + { .tc_id = 491, + .comment = "special case for AA in multiplication by 9", + .shared = "\x91\x6a\xb4\xf3\xbf\xc8\x32\x1e\x10\x87\xd9\xc5\x44\x4f\x8f\x7a\x43\xe9\xca\x6d\x29\xe7\xba\x98\xa1\x9d\xc0\x5f\xff\x34\xed\x4c", + .prv = "\x28\x56\x40\xda\x7a\x48\x25\x2e\x35\xdd\xce\x60\xc1\x4a\xdd\xb7\x30\x97\xfb\xc9\xac\x2f\x87\xc8\xd2\x77\x2c\xe8\x9a\xa6\xbe\x4d", + .pub = "\xbd\x15\x65\xb4\xa3\xf8\x51\x5d\xff\x57\x7b\xe6\xdc\xb4\x14\x51\x1d\x3d\x4e\xc2\xde\x15\xe0\xbd\x45\xb2\x8e\x9c\xc4\xca\xef\x60", + .ok = 1 }, + { .tc_id = 492, + .comment = "special case for AA in multiplication by 9", + .shared = "\x84\x4a\x5d\xd5\x13\x95\x54\xca\x7b\x41\xcb\xe6\xa4\x79\x61\x93\x91\x2e\x7a\xa4\xe2\x01\xcc\x68\x94\x4c\xe2\xa5\x57\x74\xa1\x0f", + .prv = "\x78\x32\x71\xc2\x11\x99\xba\x2e\x94\xea\xd9\x2c\xd9\xdd\x79\xf7\x0a\xab\x37\x8b\x59\x49\x74\x55\xd3\x27\xa5\x90\x7d\xaf\xcb\x4a", + .pub = "\xb8\x64\x9e\x13\x84\x3f\x80\xcf\x57\x02\x39\x8e\x4a\x9a\x8c\x37\x8f\x29\xda\x96\xdf\xd6\x57\x9f\x1e\xb4\xf7\xea\x34\xdf\x67\x65", + .ok = 1 }, + { .tc_id = 493, + .comment = "special case for AA in multiplication by 9", + .shared = "\x10\x78\x03\x33\xb2\xa6\x17\x01\x36\x26\x5b\xb5\xeb\xc6\xc8\x18\x81\x7f\x2e\x48\xae\x37\x25\x28\xc8\xf3\x44\x33\xfd\xd6\x21\x5a", + .prv = "\xd0\x67\x6a\x0b\x9a\x04\x6c\x62\xd5\xb2\xe7\x40\xd9\xcc\x43\xfa\x37\x96\x5d\xea\x93\xc2\x32\x54\xf7\xbf\x56\x9f\x2b\xeb\xaa\x4a", + .pub = "\xc3\x96\x93\x87\x37\xab\xdf\x79\x1e\x09\xa9\x7e\xba\x57\x7c\x43\x7d\x9b\x67\xc2\xda\xe9\x4e\x13\xea\xb7\x29\x6e\xc0\xfc\x73\x7e", + .ok = 1 }, + { .tc_id = 494, + .comment = "special case for DA - CB in multiplication by 9", + .shared = "\x5c\xe8\x48\x42\xdb\xae\x8b\x79\x5b\x3d\x54\x53\x43\x55\x80\x45\x50\x8f\x27\x13\x83\xbf\xb3\xdd\x39\x43\xf4\x10\x13\x98\xc8\x64", + .prv = "\x60\x8c\x84\xd2\xb7\x6f\xcc\xda\x57\x9e\x97\x4d\xb3\xd3\xb2\xce\x39\xa6\xbc\x0d\xad\x44\x05\x99\xdb\x22\x41\x1b\x60\x46\x78\x49", + .pub = "\x55\x7b\x82\x50\x12\xd9\x8f\x06\x5b\xb9\x5a\x2a\xb9\xb2\xd2\xd8\xb8\x3f\xd2\x03\x79\x12\x50\x8c\x26\x3f\x86\xd7\xe3\x6c\x4f\x24", + .ok = 1 }, + { .tc_id = 495, + .comment = "special case for z_2 in multiplication by 9", + .shared = "\x4f\x11\xaa\x0c\x31\x31\x95\xf9\x6f\x25\xca\xdc\xbf\x49\xf0\x6a\x93\x2d\x8b\x05\x18\x79\xea\x53\x7d\x1c\x6d\xfe\xe7\xf3\x6d\x35", + .prv = "\x80\xf2\x33\x93\x6a\x88\x21\x93\x6d\x39\x11\x4c\x84\xd9\x29\xe7\x97\x60\xb2\x76\x80\x77\x9e\x50\x09\xe1\x70\x94\x10\xdd\x8e\x4f", + .pub = "\xae\x98\x29\x6d\x4a\x2f\xbc\xbb\x40\xb4\x72\xf4\x06\x32\x31\x60\x8b\xb1\x46\x5c\x22\x6c\x8a\x4a\x2d\xff\x29\xaf\xd9\x15\x88\x2a", + .ok = 1 }, + { .tc_id = 496, + .comment = "special case for z_2 in multiplication by 9", + .shared = "\x1d\x61\x90\x70\xbf\x56\x26\x06\x4b\xe1\x00\x25\xe7\x4e\x33\x6c\x81\xef\x31\x66\xb7\x43\xf9\x9c\x75\x1f\xb9\x05\x87\xc3\x1d\x7e", + .prv = "\xc8\xd8\x0b\x1a\x34\xf2\x11\x94\xf0\x47\xa6\xf0\x32\x8b\xb9\x47\xe2\xe7\xaf\xf6\xa0\x43\x55\x3a\xa0\x7f\x2a\xbf\x99\xaa\xf0\x48", + .pub = "\x8b\x9d\x24\x98\x29\xfb\xe8\x13\x33\xd8\x50\x50\xda\x88\x99\x8f\x63\xfa\xc6\x65\x67\x9e\x27\xdb\xbe\x21\xb7\x45\xdd\x14\xe1\x45", + .ok = 1 }, + { .tc_id = 497, + .comment = "special case for z_2 in multiplication by 9", + .shared = "\x53\x2e\x79\x78\x61\xdb\x56\xb9\xd5\xdb\x88\x25\xfb\x72\xf8\x62\x9c\x24\x22\xf8\xab\xea\x72\x1a\xd2\xd7\xb9\xe7\x7a\x95\xb5\x76", + .prv = "\x90\x21\x47\x7b\x45\x23\x61\x58\x00\x59\x36\x4c\x6f\x94\xf4\x98\x1e\xe9\x4e\xa3\xf9\xb7\xd3\x74\x39\xbc\x82\xae\x45\x81\x6f\x4d", + .pub = "\x61\x89\x60\x93\xe2\x69\x7c\x78\x23\x0a\xfd\xda\x12\x63\x9c\xbe\x43\x42\x82\x7b\x8d\x2b\x09\x32\x81\xf1\x48\xeb\x60\xb9\x03\x4b", + .ok = 1 }, + { .tc_id = 498, + .comment = "special case for z_2 in multiplication by 9", + .shared = "\x4f\x67\x8b\x64\xfd\x1f\x85\xcb\xbd\x5f\x7e\x7f\x3c\x8a\xc9\x5e\xc7\x50\x0e\x10\x2e\x90\x06\xd6\xd4\x2f\x48\xfb\x24\x73\xab\x02", + .prv = "\x60\x79\xda\xe0\x4c\x40\xa5\x9e\xa4\xe0\xc8\xc1\x70\x92\xe4\xc8\x5e\xa9\x13\x3d\x14\x33\x07\x36\x34\x87\x83\x6d\xf4\xe3\x03\x49", + .pub = "\xcc\xc1\xdc\x18\x62\x29\xdb\xa9\xa9\x36\x0a\x0f\x7f\xf0\x02\x47\xa3\x73\x26\x25\xac\xaa\xcd\x18\xea\x13\xa9\xa8\xb4\x0f\xac\x4f", + .ok = 1 }, + { .tc_id = 499, + .comment = "special case for z_2 in multiplication by 9", + .shared = "\xe0\x69\xfd\x06\x70\x2f\x10\xf3\x3a\xdb\x8c\xf0\x76\x68\x80\x63\x48\x65\xb5\x10\xe2\xda\x40\x92\x41\xfb\x5f\x17\x80\x50\x51\x4a", + .prv = "\x28\x1d\xb6\xa5\xac\x9a\x47\xd4\xa7\xb2\xb9\x1a\x87\xf6\x53\x6c\xe6\x2d\x4e\x51\x29\xb8\xd6\x47\xb9\x7f\x9c\x50\x40\x14\x89\x4c", + .pub = "\x69\xe3\x68\xc0\xb7\xe7\x8e\xb9\xf3\xa5\x3b\xf4\x58\xf6\xe7\x9d\xc4\x88\x3b\xf9\x45\x8f\x04\xa8\xc1\x2c\x4d\xdd\x94\xd6\x21\x51", + .ok = 1 }, + { .tc_id = 500, + .comment = "special case for z_2 in multiplication by 9", + .shared = "\xfe\xe2\x18\xeb\x1f\x92\x86\x44\x86\xe8\x3c\x17\x31\xf0\x4b\xb8\xc7\xe6\xd7\x14\x3e\x39\x15\xbc\xbf\x80\xfe\x03\xff\x69\xdc\x77", + .prv = "\xd8\x30\xf3\xc4\x78\x58\x29\xa0\xf9\x45\x85\x7e\x0e\x85\xe0\xae\x72\x37\x02\xb5\x77\x83\xb9\x33\xcd\x2a\x2a\xd0\x54\x84\xfe\x49", + .pub = "\xf2\x1f\x9b\xad\xd9\x8d\xd8\xa1\x03\xcc\x2a\xb5\x48\x4f\xac\x6c\x2b\xfd\xd2\x67\x1e\xe6\xe6\x74\x13\x4a\x86\xb8\x9c\xee\x91\x60", + .ok = 1 }, + { .tc_id = 501, + .comment = "special case for E in multiplication by 9", + .shared = "\x64\xbd\xfa\x02\x07\xa1\x74\xca\x17\xee\xba\x8d\xf7\x4d\x79\xb2\x5f\x54\x51\x0e\x61\x74\x92\x30\x34\xa4\xd6\xee\x0c\x16\x7e\x7b", + .prv = "\x10\x23\x0b\xd0\x72\x1f\x4c\x8c\x4b\x92\x18\x81\xdd\x88\xc6\x03\xaf\x50\x1e\xe8\x0e\x21\x02\xf8\xac\xc3\x0c\xf8\xb2\xac\xd3\x49", + .pub = "\xe8\x53\x06\x2b\x2d\x6f\x38\xd0\x21\xd6\x45\x16\x3e\xa2\x08\xd0\xe1\x93\xa4\x79\xf1\x1f\x99\x97\x1b\x98\xe2\x11\x88\xfd\x0b\x2c", + .ok = 1 }, + { .tc_id = 502, + .comment = "special case for E in multiplication by 9", + .shared = "\xd7\xf4\x58\x3e\xe4\xfe\x86\xaf\x3a\x3f\x1d\xfc\xb2\x95\xba\x3a\x3e\x37\xbc\xed\x7b\x9c\x6f\x00\x0a\x95\x33\x65\x30\x31\x89\x02", + .prv = "\xf0\xa3\x4d\x6d\x76\x89\x6e\x17\xcb\x8f\x66\xfe\xda\x23\x11\x5f\xfb\x96\xf2\x46\xb8\x23\xbb\x63\xde\xc0\x83\x35\x78\x7d\xe7\x4c", + .pub = "\x36\x2e\xb9\x2d\xab\x9f\xb2\x9f\x7e\xd0\xe0\x38\x43\xdc\xc1\x57\x97\x92\x8c\x2b\x4e\x51\xec\x26\x02\x04\x17\x9c\x1c\x12\x94\x5f", + .ok = 1 }, + { .tc_id = 503, + .comment = "special case for E in multiplication by 9", + .shared = "\xc1\xb5\xe5\xf4\x40\x1c\x98\xfa\x14\xeb\xa8\xaa\xfa\xe3\x0a\x64\x1b\xfd\x8f\xb1\x32\xbe\x03\x41\x3f\x3b\xf2\x92\x90\xd4\x9e\x0b", + .prv = "\x90\x73\xc1\xd0\xa1\x73\xc7\xff\x02\xdc\x96\x6a\x16\x59\x93\xd9\xc4\xc9\x35\x75\x14\xf7\xa6\xbb\x7a\xaa\x4b\x08\x27\x71\x89\x48", + .pub = "\xff\x54\x3f\x1e\x81\x99\x6e\x88\x63\x1f\x03\x0c\xeb\xa7\xe6\x03\xb1\x30\x33\xef\xd2\x05\xe6\x8b\xd3\x6b\x28\x46\x81\x34\xaa\x73", + .ok = 1 }, + { .tc_id = 504, + .comment = "special case for x_2 in multiplication by 9", + .shared = "\x93\x69\xeb\xb3\xd2\xb7\x44\x34\x1c\xba\x77\x30\x27\x19\xa4\xb2\xd6\x3a\xff\x61\x28\x72\xf8\x6d\x98\x77\xa7\x6b\xc9\x19\xca\x1c", + .prv = "\xb0\xc1\x82\x25\x66\xe0\x16\xc1\x2a\xe3\x5e\xc0\x35\xed\xd0\x9a\xf3\xcb\x7a\x48\xf5\x5c\x90\x28\xe0\x5e\x11\x78\xa8\xc3\x82\x4e", + .pub = "\x90\xef\x70\x84\x4e\xad\x16\x13\xf6\x9d\xf7\xd7\x8c\x05\x78\x13\xf8\x66\xc0\xd9\x5e\x6d\x22\xca\xee\x4a\x01\x2b\x9c\x1c\x4b\x33", + .ok = 1 }, + { .tc_id = 505, + .comment = "special case for x_2 in multiplication by 9", + .shared = "\x33\x53\x94\xbe\x9c\x15\x49\x01\xc0\xb4\x06\x33\x00\x00\x18\x04\xb1\xcd\x01\xb2\x7f\xa5\x62\xe4\x4f\x33\x02\x16\x88\x37\x16\x6e", + .prv = "\xe0\x6f\xe6\x4e\x21\x17\x79\x6f\x99\x7b\xbc\xd3\xbc\xad\x30\x67\xcf\x12\x91\x64\x0a\x3a\x64\x3f\xb3\x59\x80\x9a\x40\x16\x83\x4d", + .pub = "\x88\xc1\xae\x57\x5a\xd0\x73\xdd\xa6\x6c\x6e\xac\xb7\xb7\xf4\x36\xe1\xf8\xad\x72\xa0\xdb\x5c\x04\xe5\x66\x0b\x7b\x71\x9e\x4c\x4b", + .ok = 1 }, + { .tc_id = 506, + .comment = "special case for x_2 in multiplication by 9", + .shared = "\x7e\xcd\xd5\x4c\x5e\x15\xf7\xb4\x06\x1b\xe2\xc3\x0b\x5a\x48\x84\xa0\x25\x65\x81\xf8\x7d\xf6\x0d\x57\x9a\x33\x45\x65\x3e\xb6\x41", + .prv = "\x70\x7e\xe8\x1f\x11\x3a\x24\x4c\x9d\x87\x60\x8b\x12\x15\x8c\x50\xf9\xac\x1f\x2c\x89\x48\xd1\x70\xad\x16\xab\x0a\xd8\x66\xd7\x4b", + .pub = "\xdc\xff\xc4\xc1\xe1\xfb\xa5\xfd\xa9\xd5\xc9\x84\x21\xd9\x9c\x25\x7a\xfa\x90\x92\x1b\xc2\x12\xa0\x46\xd9\x0f\x66\x83\xe8\xa4\x67", + .ok = 1 }, + { .tc_id = 507, + .comment = "special case for BB in multiplication by 9", + .shared = "\x0d\x8c\x21\xfa\x80\x0e\xe6\x3c\xe5\xe4\x73\xd4\xc2\x97\x54\x95\x06\x2d\x8a\xfa\x65\x50\x91\x12\x2c\xb4\x17\x99\xd3\x74\x59\x4f", + .prv = "\x70\x89\x65\x4b\xaa\xcb\xb6\x5b\xd0\x0c\xd8\xcb\x9d\xe4\x68\x0e\x74\x80\x75\xe8\x84\x2c\xa6\x9d\x44\x8f\xb5\x0f\xea\x85\xe7\x4e", + .pub = "\x6c\x00\x44\xcd\x10\x57\x8c\x5a\xff\x1f\xf4\x91\x7b\x04\x1b\x76\xc9\xa9\xae\x23\x66\x4e\xb8\xcf\x97\x8b\xd7\xaa\x19\x2c\xf2\x49", + .ok = 1 }, + { .tc_id = 508, + .comment = "special case for BB in multiplication by 9", + .shared = "\xdb\x6f\xec\x44\xbf\x11\x83\x16\xa6\xbd\xfb\xae\x9a\xf4\x47\xba\xed\xe4\xd8\x2d\xaa\x16\xbe\xd5\x96\xea\x6f\x05\xd4\xa5\x14\x00", + .prv = "\x80\x89\x78\x4c\x52\xcd\x67\xe4\x53\x6e\x56\x82\x18\xc7\xb7\x03\x3b\x28\x41\x3f\x94\x2f\xca\x24\xed\x69\xe4\x34\x96\xef\xa1\x4b", + .pub = "\xd9\x08\x9d\xe9\x02\xe1\x43\xdc\xd9\x10\x7e\x5a\x33\x93\xa3\xf7\xfe\x05\xd9\x26\xc3\x57\xb4\x7e\x30\x7a\x23\x6c\xb5\x90\xfd\x64", + .ok = 1 }, + { .tc_id = 509, + .comment = "special case for BB in multiplication by 9", + .shared = "\xec\xc1\x20\x4b\xc7\x53\xc4\xce\xc4\xc9\x05\x9f\xd7\xb5\x04\x94\x4e\xbf\x99\x5a\xb1\xb1\xd4\x9f\x0b\x3b\x32\x53\x53\xbe\x3a\x15", + .prv = "\x00\xe7\x3e\x4e\x01\x31\x48\xb9\xf0\x52\x73\xba\xd6\x26\xbb\x12\x6a\x40\xec\x45\x58\xf5\x42\x50\x96\xb4\x89\x47\xe0\xa9\xde\x4a", + .pub = "\x8c\x4a\x26\xaa\x31\x9c\x2c\xc4\xa4\x15\x8c\x2b\xc6\x9a\x0d\x5b\x34\x0b\x60\x62\x8a\x14\xcf\x31\xbb\x0a\xe5\xdd\xc3\x8a\xe8\x66", + .ok = 1 }, + { .tc_id = 510, + .comment = "special case for BB in multiplication by 9", + .shared = "\x37\x40\xde\x29\x7f\xf0\x12\x20\x67\x95\x1e\x89\x85\x24\x71\x23\x44\x0e\x0f\x27\x17\x1d\xa9\x9e\x26\x3d\x5b\x44\x50\xf5\x9f\x3d", + .prv = "\x78\xed\x4c\x9b\xf9\xf4\x4d\xb8\xd9\x33\x88\x98\x51\x91\xec\xf5\x92\x26\xb9\xc1\x20\x5f\xe7\xe7\x62\xc3\x27\x58\x1c\x75\x88\x4e", + .pub = "\xce\x72\x95\xd1\x22\x7c\x90\x62\xaa\xb9\xcf\x02\xfc\x56\x71\xfb\x81\x63\x2e\x72\x53\x67\xf1\x31\xd4\x12\x28\x24\xa6\x13\x2d\x68", + .ok = 1 }, + { .tc_id = 511, + .comment = "private key == -1 (mod order)", + .shared = "\x6c\x05\x87\x13\x52\xa4\x51\xdb\xe1\x82\xed\x5e\x6b\xa5\x54\xf2\x03\x44\x56\xff\xe0\x41\xa0\x54\xff\x9c\xc5\x6b\x8e\x94\x63\x76", + .prv = "\xa0\x23\xcd\xd0\x83\xef\x5b\xb8\x2f\x10\xd6\x2e\x59\xe1\x5a\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50", + .pub = "\x6c\x05\x87\x13\x52\xa4\x51\xdb\xe1\x82\xed\x5e\x6b\xa5\x54\xf2\x03\x44\x56\xff\xe0\x41\xa0\x54\xff\x9c\xc5\x6b\x8e\x94\x63\x76", + .ok = 1 }, + { .tc_id = 512, + .comment = "private key == 1 (mod order) on twist", + .shared = "\x2e\xae\x5e\xc3\xdd\x49\x4e\x9f\x2d\x37\xd2\x58\xf8\x73\xa8\xe6\xe9\xd0\xdb\xd1\xe3\x83\xef\x64\xd9\x8b\xb9\x1b\x3e\x0b\xe0\x35", + .prv = "\x58\x08\x3d\xd2\x61\xad\x91\xef\xf9\x52\x32\x2e\xc8\x24\xc6\x82\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f", + .pub = "\x2e\xae\x5e\xc3\xdd\x49\x4e\x9f\x2d\x37\xd2\x58\xf8\x73\xa8\xe6\xe9\xd0\xdb\xd1\xe3\x83\xef\x64\xd9\x8b\xb9\x1b\x3e\x0b\xe0\x35", + .ok = 1 }, + { .tc_id = 513, + .comment = "special case private key", + .shared = "\x63\xef\x7d\x1c\x58\x64\x76\xec\x78\xbb\x7f\x74\x7e\x32\x1e\x01\x10\x21\x66\xbf\x96\x7a\x9e\xa9\xba\x97\x41\xf4\x9d\x43\x95\x10", + .prv = "\x48\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55", + .pub = "\x3e\x3e\x77\x08\xef\x72\xa6\xdd\x78\xd8\x58\x02\x50\x89\x76\x5b\x1c\x30\xa1\x97\x15\xac\x19\xe8\xd9\x17\x06\x7d\x20\x8e\x06\x66", + .ok = 1 }, + { .tc_id = 514, + .comment = "special case private key", + .shared = "\x8b\x98\xef\x4d\x6b\xf3\x0d\xf7\xf8\x8e\x58\xd5\x15\x05\xd3\x7e\xd6\x84\x5a\x96\x9f\xe5\x98\x74\x7c\x03\x3d\xcd\x08\x01\x40\x65", + .prv = "\x48\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55", + .pub = "\x9f\x40\xbb\x30\xf6\x8a\xb6\x7b\x1c\x4b\x8b\x66\x49\x82\xfd\xab\x04\xff\x38\x5c\xd8\x50\xde\xac\x73\x2f\x7f\xb7\x05\xe6\x01\x3a", + .ok = 1 }, + { .tc_id = 515, + .comment = "special case private key", + .shared = "\xcf\xa8\x3e\x09\x88\x29\xfe\x82\xfd\x4c\x14\x35\x5f\x70\x82\x90\x15\x21\x99\x42\xc0\x1e\x2b\x85\xbd\xd9\xac\x48\x89\xec\x29\x21", + .prv = "\x48\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55", + .pub = "\xbe\x3b\x3e\xde\xff\xaf\x83\xc5\x4a\xe5\x26\x37\x9b\x23\xdd\x79\xf1\xcb\x41\x44\x6e\x36\x87\xfe\xf3\x47\xeb\x9b\x5f\x0d\xc3\x08", + .ok = 1 }, + { .tc_id = 516, + .comment = "special case private key", + .shared = "\x47\x82\x03\x6d\x6b\x13\x6c\xa4\x4a\x2f\xd7\x67\x4d\x8a\xfb\x01\x69\x94\x32\x30\xac\x8e\xab\x51\x60\xa2\x12\x37\x6c\x06\xd7\x78", + .prv = "\xb8\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x6a", + .pub = "\x3e\x3e\x77\x08\xef\x72\xa6\xdd\x78\xd8\x58\x02\x50\x89\x76\x5b\x1c\x30\xa1\x97\x15\xac\x19\xe8\xd9\x17\x06\x7d\x20\x8e\x06\x66", + .ok = 1 }, + { .tc_id = 517, + .comment = "special case private key", + .shared = "\x65\xfc\x1e\x74\x53\xa3\xf8\xc7\xeb\xcd\x57\x7a\xde\x4b\x8e\xfe\x10\x35\xef\xc1\x81\xab\x3b\xdb\x2f\xcc\x74\x84\xcb\xcf\x1e\x4e", + .prv = "\xb8\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x6a", + .pub = "\x9f\x40\xbb\x30\xf6\x8a\xb6\x7b\x1c\x4b\x8b\x66\x49\x82\xfd\xab\x04\xff\x38\x5c\xd8\x50\xde\xac\x73\x2f\x7f\xb7\x05\xe6\x01\x3a", + .ok = 1 }, + { .tc_id = 518, + .comment = "special case private key", + .shared = "\xe3\xc6\x49\xbe\xae\x7c\xc4\xa0\x69\x8d\x51\x9a\x0a\x61\x93\x2e\xe5\x49\x3c\xbb\x59\x0d\xbe\x14\xdb\x02\x74\xcc\x86\x11\xf9\x14", + .prv = "\xb8\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x6a", + .pub = "\xbe\x3b\x3e\xde\xff\xaf\x83\xc5\x4a\xe5\x26\x37\x9b\x23\xdd\x79\xf1\xcb\x41\x44\x6e\x36\x87\xfe\xf3\x47\xeb\x9b\x5f\x0d\xc3\x08", + .ok = 1 }, + {0} +}; diff --git a/src/ballet/fiat-crypto/curve25519_32.c b/src/ballet/fiat-crypto/curve25519_32.c new file mode 100644 index 0000000000..e4acfc04f9 --- /dev/null +++ b/src/ballet/fiat-crypto/curve25519_32.c @@ -0,0 +1,1565 @@ +/* Autogenerated: 'src/ExtractionOCaml/unsaturated_solinas' --inline --static --use-value-barrier 25519 32 '(auto)' '2^255 - 19' carry_mul carry_square carry add sub opp selectznz to_bytes from_bytes relax carry_scmul121666 */ +/* curve description: 25519 */ +/* machine_wordsize = 32 (from "32") */ +/* requested operations: carry_mul, carry_square, carry, add, sub, opp, selectznz, to_bytes, from_bytes, relax, carry_scmul121666 */ +/* n = 10 (from "(auto)") */ +/* s-c = 2^255 - [(1, 19)] (from "2^255 - 19") */ +/* tight_bounds_multiplier = 1 (from "") */ +/* */ +/* Computed values: */ +/* carry_chain = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1] */ +/* eval z = z[0] + (z[1] << 26) + (z[2] << 51) + (z[3] << 77) + (z[4] << 102) + (z[5] << 128) + (z[6] << 153) + (z[7] << 179) + (z[8] << 204) + (z[9] << 230) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ +/* balance = [0x7ffffda, 0x3fffffe, 0x7fffffe, 0x3fffffe, 0x7fffffe, 0x3fffffe, 0x7fffffe, 0x3fffffe, 0x7fffffe, 0x3fffffe] */ + +#include +typedef unsigned char fiat_25519_uint1; +typedef signed char fiat_25519_int1; +#if defined(__GNUC__) || defined(__clang__) +# define FIAT_25519_FIAT_INLINE __inline__ +#else +# define FIAT_25519_FIAT_INLINE +#endif + +/* The type fiat_25519_loose_field_element is a field element with loose bounds. */ +/* Bounds: [[0x0 ~> 0xc000000], [0x0 ~> 0x6000000], [0x0 ~> 0xc000000], [0x0 ~> 0x6000000], [0x0 ~> 0xc000000], [0x0 ~> 0x6000000], [0x0 ~> 0xc000000], [0x0 ~> 0x6000000], [0x0 ~> 0xc000000], [0x0 ~> 0x6000000]] */ +typedef uint32_t fiat_25519_loose_field_element[10]; + +/* The type fiat_25519_tight_field_element is a field element with tight bounds. */ +/* Bounds: [[0x0 ~> 0x4000000], [0x0 ~> 0x2000000], [0x0 ~> 0x4000000], [0x0 ~> 0x2000000], [0x0 ~> 0x4000000], [0x0 ~> 0x2000000], [0x0 ~> 0x4000000], [0x0 ~> 0x2000000], [0x0 ~> 0x4000000], [0x0 ~> 0x2000000]] */ +typedef uint32_t fiat_25519_tight_field_element[10]; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_25519_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint32_t fiat_25519_value_barrier_u32(uint32_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_25519_value_barrier_u32(x) (x) +#endif + + +/* + * The function fiat_25519_addcarryx_u26 is an addition with carry. + * + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^26 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^26⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0x3ffffff] + * arg3: [0x0 ~> 0x3ffffff] + * Output Bounds: + * out1: [0x0 ~> 0x3ffffff] + * out2: [0x0 ~> 0x1] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_addcarryx_u26(uint32_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint32_t x1; + uint32_t x2; + fiat_25519_uint1 x3; + x1 = ((arg1 + arg2) + arg3); + x2 = (x1 & UINT32_C(0x3ffffff)); + x3 = (fiat_25519_uint1)(x1 >> 26); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_25519_subborrowx_u26 is a subtraction with borrow. + * + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^26 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^26⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0x3ffffff] + * arg3: [0x0 ~> 0x3ffffff] + * Output Bounds: + * out1: [0x0 ~> 0x3ffffff] + * out2: [0x0 ~> 0x1] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_subborrowx_u26(uint32_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int32_t x1; + fiat_25519_int1 x2; + uint32_t x3; + x1 = ((int32_t)(arg2 - arg1) - (int32_t)arg3); + x2 = (fiat_25519_int1)(x1 >> 26); + x3 = ((uint32_t)x1 & UINT32_C(0x3ffffff)); + *out1 = x3; + *out2 = (fiat_25519_uint1)(0x0 - x2); +} + +/* + * The function fiat_25519_addcarryx_u25 is an addition with carry. + * + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^25 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^25⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0x1ffffff] + * arg3: [0x0 ~> 0x1ffffff] + * Output Bounds: + * out1: [0x0 ~> 0x1ffffff] + * out2: [0x0 ~> 0x1] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_addcarryx_u25(uint32_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint32_t x1; + uint32_t x2; + fiat_25519_uint1 x3; + x1 = ((arg1 + arg2) + arg3); + x2 = (x1 & UINT32_C(0x1ffffff)); + x3 = (fiat_25519_uint1)(x1 >> 25); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_25519_subborrowx_u25 is a subtraction with borrow. + * + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^25 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^25⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0x1ffffff] + * arg3: [0x0 ~> 0x1ffffff] + * Output Bounds: + * out1: [0x0 ~> 0x1ffffff] + * out2: [0x0 ~> 0x1] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_subborrowx_u25(uint32_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int32_t x1; + fiat_25519_int1 x2; + uint32_t x3; + x1 = ((int32_t)(arg2 - arg1) - (int32_t)arg3); + x2 = (fiat_25519_int1)(x1 >> 25); + x3 = ((uint32_t)x1 & UINT32_C(0x1ffffff)); + *out1 = x3; + *out2 = (fiat_25519_uint1)(0x0 - x2); +} + +/* + * The function fiat_25519_cmovznz_u32 is a single-word conditional move. + * + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_cmovznz_u32(uint32_t* out1, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t arg3) { + fiat_25519_uint1 x1; + uint32_t x2; + uint32_t x3; + x1 = (!(!arg1)); + x2 = ((uint32_t)(fiat_25519_int1)(0x0 - x1) & UINT32_C(0xffffffff)); + x3 = ((fiat_25519_value_barrier_u32(x2) & arg3) | (fiat_25519_value_barrier_u32((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_25519_carry_mul multiplies two field elements and reduces the result. + * + * Postconditions: + * eval out1 mod m = (eval arg1 * eval arg2) mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_carry_mul(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1, const fiat_25519_loose_field_element arg2) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + uint64_t x83; + uint64_t x84; + uint64_t x85; + uint64_t x86; + uint64_t x87; + uint64_t x88; + uint64_t x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint32_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint32_t x115; + uint64_t x116; + uint64_t x117; + uint32_t x118; + uint64_t x119; + uint64_t x120; + uint32_t x121; + uint64_t x122; + uint64_t x123; + uint32_t x124; + uint64_t x125; + uint64_t x126; + uint32_t x127; + uint64_t x128; + uint64_t x129; + uint32_t x130; + uint64_t x131; + uint64_t x132; + uint32_t x133; + uint64_t x134; + uint64_t x135; + uint32_t x136; + uint64_t x137; + uint64_t x138; + uint32_t x139; + uint64_t x140; + uint64_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + fiat_25519_uint1 x145; + uint32_t x146; + uint32_t x147; + x1 = ((uint64_t)(arg1[9]) * ((arg2[9]) * UINT8_C(0x26))); + x2 = ((uint64_t)(arg1[9]) * ((arg2[8]) * UINT8_C(0x13))); + x3 = ((uint64_t)(arg1[9]) * ((arg2[7]) * UINT8_C(0x26))); + x4 = ((uint64_t)(arg1[9]) * ((arg2[6]) * UINT8_C(0x13))); + x5 = ((uint64_t)(arg1[9]) * ((arg2[5]) * UINT8_C(0x26))); + x6 = ((uint64_t)(arg1[9]) * ((arg2[4]) * UINT8_C(0x13))); + x7 = ((uint64_t)(arg1[9]) * ((arg2[3]) * UINT8_C(0x26))); + x8 = ((uint64_t)(arg1[9]) * ((arg2[2]) * UINT8_C(0x13))); + x9 = ((uint64_t)(arg1[9]) * ((arg2[1]) * UINT8_C(0x26))); + x10 = ((uint64_t)(arg1[8]) * ((arg2[9]) * UINT8_C(0x13))); + x11 = ((uint64_t)(arg1[8]) * ((arg2[8]) * UINT8_C(0x13))); + x12 = ((uint64_t)(arg1[8]) * ((arg2[7]) * UINT8_C(0x13))); + x13 = ((uint64_t)(arg1[8]) * ((arg2[6]) * UINT8_C(0x13))); + x14 = ((uint64_t)(arg1[8]) * ((arg2[5]) * UINT8_C(0x13))); + x15 = ((uint64_t)(arg1[8]) * ((arg2[4]) * UINT8_C(0x13))); + x16 = ((uint64_t)(arg1[8]) * ((arg2[3]) * UINT8_C(0x13))); + x17 = ((uint64_t)(arg1[8]) * ((arg2[2]) * UINT8_C(0x13))); + x18 = ((uint64_t)(arg1[7]) * ((arg2[9]) * UINT8_C(0x26))); + x19 = ((uint64_t)(arg1[7]) * ((arg2[8]) * UINT8_C(0x13))); + x20 = ((uint64_t)(arg1[7]) * ((arg2[7]) * UINT8_C(0x26))); + x21 = ((uint64_t)(arg1[7]) * ((arg2[6]) * UINT8_C(0x13))); + x22 = ((uint64_t)(arg1[7]) * ((arg2[5]) * UINT8_C(0x26))); + x23 = ((uint64_t)(arg1[7]) * ((arg2[4]) * UINT8_C(0x13))); + x24 = ((uint64_t)(arg1[7]) * ((arg2[3]) * UINT8_C(0x26))); + x25 = ((uint64_t)(arg1[6]) * ((arg2[9]) * UINT8_C(0x13))); + x26 = ((uint64_t)(arg1[6]) * ((arg2[8]) * UINT8_C(0x13))); + x27 = ((uint64_t)(arg1[6]) * ((arg2[7]) * UINT8_C(0x13))); + x28 = ((uint64_t)(arg1[6]) * ((arg2[6]) * UINT8_C(0x13))); + x29 = ((uint64_t)(arg1[6]) * ((arg2[5]) * UINT8_C(0x13))); + x30 = ((uint64_t)(arg1[6]) * ((arg2[4]) * UINT8_C(0x13))); + x31 = ((uint64_t)(arg1[5]) * ((arg2[9]) * UINT8_C(0x26))); + x32 = ((uint64_t)(arg1[5]) * ((arg2[8]) * UINT8_C(0x13))); + x33 = ((uint64_t)(arg1[5]) * ((arg2[7]) * UINT8_C(0x26))); + x34 = ((uint64_t)(arg1[5]) * ((arg2[6]) * UINT8_C(0x13))); + x35 = ((uint64_t)(arg1[5]) * ((arg2[5]) * UINT8_C(0x26))); + x36 = ((uint64_t)(arg1[4]) * ((arg2[9]) * UINT8_C(0x13))); + x37 = ((uint64_t)(arg1[4]) * ((arg2[8]) * UINT8_C(0x13))); + x38 = ((uint64_t)(arg1[4]) * ((arg2[7]) * UINT8_C(0x13))); + x39 = ((uint64_t)(arg1[4]) * ((arg2[6]) * UINT8_C(0x13))); + x40 = ((uint64_t)(arg1[3]) * ((arg2[9]) * UINT8_C(0x26))); + x41 = ((uint64_t)(arg1[3]) * ((arg2[8]) * UINT8_C(0x13))); + x42 = ((uint64_t)(arg1[3]) * ((arg2[7]) * UINT8_C(0x26))); + x43 = ((uint64_t)(arg1[2]) * ((arg2[9]) * UINT8_C(0x13))); + x44 = ((uint64_t)(arg1[2]) * ((arg2[8]) * UINT8_C(0x13))); + x45 = ((uint64_t)(arg1[1]) * ((arg2[9]) * UINT8_C(0x26))); + x46 = ((uint64_t)(arg1[9]) * (arg2[0])); + x47 = ((uint64_t)(arg1[8]) * (arg2[1])); + x48 = ((uint64_t)(arg1[8]) * (arg2[0])); + x49 = ((uint64_t)(arg1[7]) * (arg2[2])); + x50 = ((uint64_t)(arg1[7]) * ((arg2[1]) * 0x2)); + x51 = ((uint64_t)(arg1[7]) * (arg2[0])); + x52 = ((uint64_t)(arg1[6]) * (arg2[3])); + x53 = ((uint64_t)(arg1[6]) * (arg2[2])); + x54 = ((uint64_t)(arg1[6]) * (arg2[1])); + x55 = ((uint64_t)(arg1[6]) * (arg2[0])); + x56 = ((uint64_t)(arg1[5]) * (arg2[4])); + x57 = ((uint64_t)(arg1[5]) * ((arg2[3]) * 0x2)); + x58 = ((uint64_t)(arg1[5]) * (arg2[2])); + x59 = ((uint64_t)(arg1[5]) * ((arg2[1]) * 0x2)); + x60 = ((uint64_t)(arg1[5]) * (arg2[0])); + x61 = ((uint64_t)(arg1[4]) * (arg2[5])); + x62 = ((uint64_t)(arg1[4]) * (arg2[4])); + x63 = ((uint64_t)(arg1[4]) * (arg2[3])); + x64 = ((uint64_t)(arg1[4]) * (arg2[2])); + x65 = ((uint64_t)(arg1[4]) * (arg2[1])); + x66 = ((uint64_t)(arg1[4]) * (arg2[0])); + x67 = ((uint64_t)(arg1[3]) * (arg2[6])); + x68 = ((uint64_t)(arg1[3]) * ((arg2[5]) * 0x2)); + x69 = ((uint64_t)(arg1[3]) * (arg2[4])); + x70 = ((uint64_t)(arg1[3]) * ((arg2[3]) * 0x2)); + x71 = ((uint64_t)(arg1[3]) * (arg2[2])); + x72 = ((uint64_t)(arg1[3]) * ((arg2[1]) * 0x2)); + x73 = ((uint64_t)(arg1[3]) * (arg2[0])); + x74 = ((uint64_t)(arg1[2]) * (arg2[7])); + x75 = ((uint64_t)(arg1[2]) * (arg2[6])); + x76 = ((uint64_t)(arg1[2]) * (arg2[5])); + x77 = ((uint64_t)(arg1[2]) * (arg2[4])); + x78 = ((uint64_t)(arg1[2]) * (arg2[3])); + x79 = ((uint64_t)(arg1[2]) * (arg2[2])); + x80 = ((uint64_t)(arg1[2]) * (arg2[1])); + x81 = ((uint64_t)(arg1[2]) * (arg2[0])); + x82 = ((uint64_t)(arg1[1]) * (arg2[8])); + x83 = ((uint64_t)(arg1[1]) * ((arg2[7]) * 0x2)); + x84 = ((uint64_t)(arg1[1]) * (arg2[6])); + x85 = ((uint64_t)(arg1[1]) * ((arg2[5]) * 0x2)); + x86 = ((uint64_t)(arg1[1]) * (arg2[4])); + x87 = ((uint64_t)(arg1[1]) * ((arg2[3]) * 0x2)); + x88 = ((uint64_t)(arg1[1]) * (arg2[2])); + x89 = ((uint64_t)(arg1[1]) * ((arg2[1]) * 0x2)); + x90 = ((uint64_t)(arg1[1]) * (arg2[0])); + x91 = ((uint64_t)(arg1[0]) * (arg2[9])); + x92 = ((uint64_t)(arg1[0]) * (arg2[8])); + x93 = ((uint64_t)(arg1[0]) * (arg2[7])); + x94 = ((uint64_t)(arg1[0]) * (arg2[6])); + x95 = ((uint64_t)(arg1[0]) * (arg2[5])); + x96 = ((uint64_t)(arg1[0]) * (arg2[4])); + x97 = ((uint64_t)(arg1[0]) * (arg2[3])); + x98 = ((uint64_t)(arg1[0]) * (arg2[2])); + x99 = ((uint64_t)(arg1[0]) * (arg2[1])); + x100 = ((uint64_t)(arg1[0]) * (arg2[0])); + x101 = (x100 + (x45 + (x44 + (x42 + (x39 + (x35 + (x30 + (x24 + (x17 + x9))))))))); + x102 = (x101 >> 26); + x103 = (uint32_t)(x101 & UINT32_C(0x3ffffff)); + x104 = (x91 + (x82 + (x74 + (x67 + (x61 + (x56 + (x52 + (x49 + (x47 + x46))))))))); + x105 = (x92 + (x83 + (x75 + (x68 + (x62 + (x57 + (x53 + (x50 + (x48 + x1))))))))); + x106 = (x93 + (x84 + (x76 + (x69 + (x63 + (x58 + (x54 + (x51 + (x10 + x2))))))))); + x107 = (x94 + (x85 + (x77 + (x70 + (x64 + (x59 + (x55 + (x18 + (x11 + x3))))))))); + x108 = (x95 + (x86 + (x78 + (x71 + (x65 + (x60 + (x25 + (x19 + (x12 + x4))))))))); + x109 = (x96 + (x87 + (x79 + (x72 + (x66 + (x31 + (x26 + (x20 + (x13 + x5))))))))); + x110 = (x97 + (x88 + (x80 + (x73 + (x36 + (x32 + (x27 + (x21 + (x14 + x6))))))))); + x111 = (x98 + (x89 + (x81 + (x40 + (x37 + (x33 + (x28 + (x22 + (x15 + x7))))))))); + x112 = (x99 + (x90 + (x43 + (x41 + (x38 + (x34 + (x29 + (x23 + (x16 + x8))))))))); + x113 = (x102 + x112); + x114 = (x113 >> 25); + x115 = (uint32_t)(x113 & UINT32_C(0x1ffffff)); + x116 = (x114 + x111); + x117 = (x116 >> 26); + x118 = (uint32_t)(x116 & UINT32_C(0x3ffffff)); + x119 = (x117 + x110); + x120 = (x119 >> 25); + x121 = (uint32_t)(x119 & UINT32_C(0x1ffffff)); + x122 = (x120 + x109); + x123 = (x122 >> 26); + x124 = (uint32_t)(x122 & UINT32_C(0x3ffffff)); + x125 = (x123 + x108); + x126 = (x125 >> 25); + x127 = (uint32_t)(x125 & UINT32_C(0x1ffffff)); + x128 = (x126 + x107); + x129 = (x128 >> 26); + x130 = (uint32_t)(x128 & UINT32_C(0x3ffffff)); + x131 = (x129 + x106); + x132 = (x131 >> 25); + x133 = (uint32_t)(x131 & UINT32_C(0x1ffffff)); + x134 = (x132 + x105); + x135 = (x134 >> 26); + x136 = (uint32_t)(x134 & UINT32_C(0x3ffffff)); + x137 = (x135 + x104); + x138 = (x137 >> 25); + x139 = (uint32_t)(x137 & UINT32_C(0x1ffffff)); + x140 = (x138 * UINT8_C(0x13)); + x141 = (x103 + x140); + x142 = (uint32_t)(x141 >> 26); + x143 = (uint32_t)(x141 & UINT32_C(0x3ffffff)); + x144 = (x142 + x115); + x145 = (fiat_25519_uint1)(x144 >> 25); + x146 = (x144 & UINT32_C(0x1ffffff)); + x147 = (x145 + x118); + out1[0] = x143; + out1[1] = x146; + out1[2] = x147; + out1[3] = x121; + out1[4] = x124; + out1[5] = x127; + out1[6] = x130; + out1[7] = x133; + out1[8] = x136; + out1[9] = x139; +} + +/* + * The function fiat_25519_carry_square squares a field element and reduces the result. + * + * Postconditions: + * eval out1 mod m = (eval arg1 * eval arg1) mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_carry_square(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint64_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint64_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint32_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + uint64_t x83; + uint64_t x84; + uint64_t x85; + uint64_t x86; + uint64_t x87; + uint32_t x88; + uint64_t x89; + uint64_t x90; + uint32_t x91; + uint64_t x92; + uint64_t x93; + uint32_t x94; + uint64_t x95; + uint64_t x96; + uint32_t x97; + uint64_t x98; + uint64_t x99; + uint32_t x100; + uint64_t x101; + uint64_t x102; + uint32_t x103; + uint64_t x104; + uint64_t x105; + uint32_t x106; + uint64_t x107; + uint64_t x108; + uint32_t x109; + uint64_t x110; + uint64_t x111; + uint32_t x112; + uint64_t x113; + uint64_t x114; + uint32_t x115; + uint32_t x116; + uint32_t x117; + fiat_25519_uint1 x118; + uint32_t x119; + uint32_t x120; + x1 = ((arg1[9]) * UINT8_C(0x13)); + x2 = (x1 * 0x2); + x3 = ((arg1[9]) * 0x2); + x4 = ((arg1[8]) * UINT8_C(0x13)); + x5 = ((uint64_t)x4 * 0x2); + x6 = ((arg1[8]) * 0x2); + x7 = ((arg1[7]) * UINT8_C(0x13)); + x8 = (x7 * 0x2); + x9 = ((arg1[7]) * 0x2); + x10 = ((arg1[6]) * UINT8_C(0x13)); + x11 = ((uint64_t)x10 * 0x2); + x12 = ((arg1[6]) * 0x2); + x13 = ((arg1[5]) * UINT8_C(0x13)); + x14 = ((arg1[5]) * 0x2); + x15 = ((arg1[4]) * 0x2); + x16 = ((arg1[3]) * 0x2); + x17 = ((arg1[2]) * 0x2); + x18 = ((arg1[1]) * 0x2); + x19 = ((uint64_t)(arg1[9]) * (x1 * 0x2)); + x20 = ((uint64_t)(arg1[8]) * x2); + x21 = ((uint64_t)(arg1[8]) * x4); + x22 = ((arg1[7]) * ((uint64_t)x2 * 0x2)); + x23 = ((arg1[7]) * x5); + x24 = ((uint64_t)(arg1[7]) * (x7 * 0x2)); + x25 = ((uint64_t)(arg1[6]) * x2); + x26 = ((arg1[6]) * x5); + x27 = ((uint64_t)(arg1[6]) * x8); + x28 = ((uint64_t)(arg1[6]) * x10); + x29 = ((arg1[5]) * ((uint64_t)x2 * 0x2)); + x30 = ((arg1[5]) * x5); + x31 = ((arg1[5]) * ((uint64_t)x8 * 0x2)); + x32 = ((arg1[5]) * x11); + x33 = ((uint64_t)(arg1[5]) * (x13 * 0x2)); + x34 = ((uint64_t)(arg1[4]) * x2); + x35 = ((arg1[4]) * x5); + x36 = ((uint64_t)(arg1[4]) * x8); + x37 = ((arg1[4]) * x11); + x38 = ((uint64_t)(arg1[4]) * x14); + x39 = ((uint64_t)(arg1[4]) * (arg1[4])); + x40 = ((arg1[3]) * ((uint64_t)x2 * 0x2)); + x41 = ((arg1[3]) * x5); + x42 = ((arg1[3]) * ((uint64_t)x8 * 0x2)); + x43 = ((uint64_t)(arg1[3]) * x12); + x44 = ((uint64_t)(arg1[3]) * (x14 * 0x2)); + x45 = ((uint64_t)(arg1[3]) * x15); + x46 = ((uint64_t)(arg1[3]) * ((arg1[3]) * 0x2)); + x47 = ((uint64_t)(arg1[2]) * x2); + x48 = ((arg1[2]) * x5); + x49 = ((uint64_t)(arg1[2]) * x9); + x50 = ((uint64_t)(arg1[2]) * x12); + x51 = ((uint64_t)(arg1[2]) * x14); + x52 = ((uint64_t)(arg1[2]) * x15); + x53 = ((uint64_t)(arg1[2]) * x16); + x54 = ((uint64_t)(arg1[2]) * (arg1[2])); + x55 = ((arg1[1]) * ((uint64_t)x2 * 0x2)); + x56 = ((uint64_t)(arg1[1]) * x6); + x57 = ((uint64_t)(arg1[1]) * (x9 * 0x2)); + x58 = ((uint64_t)(arg1[1]) * x12); + x59 = ((uint64_t)(arg1[1]) * (x14 * 0x2)); + x60 = ((uint64_t)(arg1[1]) * x15); + x61 = ((uint64_t)(arg1[1]) * (x16 * 0x2)); + x62 = ((uint64_t)(arg1[1]) * x17); + x63 = ((uint64_t)(arg1[1]) * ((arg1[1]) * 0x2)); + x64 = ((uint64_t)(arg1[0]) * x3); + x65 = ((uint64_t)(arg1[0]) * x6); + x66 = ((uint64_t)(arg1[0]) * x9); + x67 = ((uint64_t)(arg1[0]) * x12); + x68 = ((uint64_t)(arg1[0]) * x14); + x69 = ((uint64_t)(arg1[0]) * x15); + x70 = ((uint64_t)(arg1[0]) * x16); + x71 = ((uint64_t)(arg1[0]) * x17); + x72 = ((uint64_t)(arg1[0]) * x18); + x73 = ((uint64_t)(arg1[0]) * (arg1[0])); + x74 = (x73 + (x55 + (x48 + (x42 + (x37 + x33))))); + x75 = (x74 >> 26); + x76 = (uint32_t)(x74 & UINT32_C(0x3ffffff)); + x77 = (x64 + (x56 + (x49 + (x43 + x38)))); + x78 = (x65 + (x57 + (x50 + (x44 + (x39 + x19))))); + x79 = (x66 + (x58 + (x51 + (x45 + x20)))); + x80 = (x67 + (x59 + (x52 + (x46 + (x22 + x21))))); + x81 = (x68 + (x60 + (x53 + (x25 + x23)))); + x82 = (x69 + (x61 + (x54 + (x29 + (x26 + x24))))); + x83 = (x70 + (x62 + (x34 + (x30 + x27)))); + x84 = (x71 + (x63 + (x40 + (x35 + (x31 + x28))))); + x85 = (x72 + (x47 + (x41 + (x36 + x32)))); + x86 = (x75 + x85); + x87 = (x86 >> 25); + x88 = (uint32_t)(x86 & UINT32_C(0x1ffffff)); + x89 = (x87 + x84); + x90 = (x89 >> 26); + x91 = (uint32_t)(x89 & UINT32_C(0x3ffffff)); + x92 = (x90 + x83); + x93 = (x92 >> 25); + x94 = (uint32_t)(x92 & UINT32_C(0x1ffffff)); + x95 = (x93 + x82); + x96 = (x95 >> 26); + x97 = (uint32_t)(x95 & UINT32_C(0x3ffffff)); + x98 = (x96 + x81); + x99 = (x98 >> 25); + x100 = (uint32_t)(x98 & UINT32_C(0x1ffffff)); + x101 = (x99 + x80); + x102 = (x101 >> 26); + x103 = (uint32_t)(x101 & UINT32_C(0x3ffffff)); + x104 = (x102 + x79); + x105 = (x104 >> 25); + x106 = (uint32_t)(x104 & UINT32_C(0x1ffffff)); + x107 = (x105 + x78); + x108 = (x107 >> 26); + x109 = (uint32_t)(x107 & UINT32_C(0x3ffffff)); + x110 = (x108 + x77); + x111 = (x110 >> 25); + x112 = (uint32_t)(x110 & UINT32_C(0x1ffffff)); + x113 = (x111 * UINT8_C(0x13)); + x114 = (x76 + x113); + x115 = (uint32_t)(x114 >> 26); + x116 = (uint32_t)(x114 & UINT32_C(0x3ffffff)); + x117 = (x115 + x88); + x118 = (fiat_25519_uint1)(x117 >> 25); + x119 = (x117 & UINT32_C(0x1ffffff)); + x120 = (x118 + x91); + out1[0] = x116; + out1[1] = x119; + out1[2] = x120; + out1[3] = x94; + out1[4] = x97; + out1[5] = x100; + out1[6] = x103; + out1[7] = x106; + out1[8] = x109; + out1[9] = x112; +} + +/* + * The function fiat_25519_carry reduces a field element. + * + * Postconditions: + * eval out1 mod m = eval arg1 mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_carry(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + x1 = (arg1[0]); + x2 = ((x1 >> 26) + (arg1[1])); + x3 = ((x2 >> 25) + (arg1[2])); + x4 = ((x3 >> 26) + (arg1[3])); + x5 = ((x4 >> 25) + (arg1[4])); + x6 = ((x5 >> 26) + (arg1[5])); + x7 = ((x6 >> 25) + (arg1[6])); + x8 = ((x7 >> 26) + (arg1[7])); + x9 = ((x8 >> 25) + (arg1[8])); + x10 = ((x9 >> 26) + (arg1[9])); + x11 = ((x1 & UINT32_C(0x3ffffff)) + ((x10 >> 25) * UINT8_C(0x13))); + x12 = ((fiat_25519_uint1)(x11 >> 26) + (x2 & UINT32_C(0x1ffffff))); + x13 = (x11 & UINT32_C(0x3ffffff)); + x14 = (x12 & UINT32_C(0x1ffffff)); + x15 = ((fiat_25519_uint1)(x12 >> 25) + (x3 & UINT32_C(0x3ffffff))); + x16 = (x4 & UINT32_C(0x1ffffff)); + x17 = (x5 & UINT32_C(0x3ffffff)); + x18 = (x6 & UINT32_C(0x1ffffff)); + x19 = (x7 & UINT32_C(0x3ffffff)); + x20 = (x8 & UINT32_C(0x1ffffff)); + x21 = (x9 & UINT32_C(0x3ffffff)); + x22 = (x10 & UINT32_C(0x1ffffff)); + out1[0] = x13; + out1[1] = x14; + out1[2] = x15; + out1[3] = x16; + out1[4] = x17; + out1[5] = x18; + out1[6] = x19; + out1[7] = x20; + out1[8] = x21; + out1[9] = x22; +} + +/* + * The function fiat_25519_add adds two field elements. + * + * Postconditions: + * eval out1 mod m = (eval arg1 + eval arg2) mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_add(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1, const fiat_25519_tight_field_element arg2) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + x1 = ((arg1[0]) + (arg2[0])); + x2 = ((arg1[1]) + (arg2[1])); + x3 = ((arg1[2]) + (arg2[2])); + x4 = ((arg1[3]) + (arg2[3])); + x5 = ((arg1[4]) + (arg2[4])); + x6 = ((arg1[5]) + (arg2[5])); + x7 = ((arg1[6]) + (arg2[6])); + x8 = ((arg1[7]) + (arg2[7])); + x9 = ((arg1[8]) + (arg2[8])); + x10 = ((arg1[9]) + (arg2[9])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; + out1[8] = x9; + out1[9] = x10; +} + +/* + * The function fiat_25519_sub subtracts two field elements. + * + * Postconditions: + * eval out1 mod m = (eval arg1 - eval arg2) mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_sub(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1, const fiat_25519_tight_field_element arg2) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + x1 = ((UINT32_C(0x7ffffda) + (arg1[0])) - (arg2[0])); + x2 = ((UINT32_C(0x3fffffe) + (arg1[1])) - (arg2[1])); + x3 = ((UINT32_C(0x7fffffe) + (arg1[2])) - (arg2[2])); + x4 = ((UINT32_C(0x3fffffe) + (arg1[3])) - (arg2[3])); + x5 = ((UINT32_C(0x7fffffe) + (arg1[4])) - (arg2[4])); + x6 = ((UINT32_C(0x3fffffe) + (arg1[5])) - (arg2[5])); + x7 = ((UINT32_C(0x7fffffe) + (arg1[6])) - (arg2[6])); + x8 = ((UINT32_C(0x3fffffe) + (arg1[7])) - (arg2[7])); + x9 = ((UINT32_C(0x7fffffe) + (arg1[8])) - (arg2[8])); + x10 = ((UINT32_C(0x3fffffe) + (arg1[9])) - (arg2[9])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; + out1[8] = x9; + out1[9] = x10; +} + +/* + * The function fiat_25519_opp negates a field element. + * + * Postconditions: + * eval out1 mod m = -eval arg1 mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_opp(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + x1 = (UINT32_C(0x7ffffda) - (arg1[0])); + x2 = (UINT32_C(0x3fffffe) - (arg1[1])); + x3 = (UINT32_C(0x7fffffe) - (arg1[2])); + x4 = (UINT32_C(0x3fffffe) - (arg1[3])); + x5 = (UINT32_C(0x7fffffe) - (arg1[4])); + x6 = (UINT32_C(0x3fffffe) - (arg1[5])); + x7 = (UINT32_C(0x7fffffe) - (arg1[6])); + x8 = (UINT32_C(0x3fffffe) - (arg1[7])); + x9 = (UINT32_C(0x7fffffe) - (arg1[8])); + x10 = (UINT32_C(0x3fffffe) - (arg1[9])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; + out1[8] = x9; + out1[9] = x10; +} + +/* + * The function fiat_25519_selectznz is a multi-limb conditional select. + * + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_selectznz(uint32_t out1[10], fiat_25519_uint1 arg1, const uint32_t arg2[10], const uint32_t arg3[10]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + fiat_25519_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); + fiat_25519_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); + fiat_25519_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); + fiat_25519_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); + fiat_25519_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); + fiat_25519_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); + fiat_25519_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); + fiat_25519_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); + fiat_25519_cmovznz_u32(&x9, arg1, (arg2[8]), (arg3[8])); + fiat_25519_cmovznz_u32(&x10, arg1, (arg2[9]), (arg3[9])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; + out1[8] = x9; + out1[9] = x10; +} + +/* + * The function fiat_25519_to_bytes serializes a field element to bytes in little-endian order. + * + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] + * + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x7f]] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_to_bytes(uint8_t out1[32], const fiat_25519_tight_field_element arg1) { + uint32_t x1; + fiat_25519_uint1 x2; + uint32_t x3; + fiat_25519_uint1 x4; + uint32_t x5; + fiat_25519_uint1 x6; + uint32_t x7; + fiat_25519_uint1 x8; + uint32_t x9; + fiat_25519_uint1 x10; + uint32_t x11; + fiat_25519_uint1 x12; + uint32_t x13; + fiat_25519_uint1 x14; + uint32_t x15; + fiat_25519_uint1 x16; + uint32_t x17; + fiat_25519_uint1 x18; + uint32_t x19; + fiat_25519_uint1 x20; + uint32_t x21; + uint32_t x22; + fiat_25519_uint1 x23; + uint32_t x24; + fiat_25519_uint1 x25; + uint32_t x26; + fiat_25519_uint1 x27; + uint32_t x28; + fiat_25519_uint1 x29; + uint32_t x30; + fiat_25519_uint1 x31; + uint32_t x32; + fiat_25519_uint1 x33; + uint32_t x34; + fiat_25519_uint1 x35; + uint32_t x36; + fiat_25519_uint1 x37; + uint32_t x38; + fiat_25519_uint1 x39; + uint32_t x40; + fiat_25519_uint1 x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint8_t x50; + uint32_t x51; + uint8_t x52; + uint32_t x53; + uint8_t x54; + uint8_t x55; + uint32_t x56; + uint8_t x57; + uint32_t x58; + uint8_t x59; + uint32_t x60; + uint8_t x61; + uint8_t x62; + uint32_t x63; + uint8_t x64; + uint32_t x65; + uint8_t x66; + uint32_t x67; + uint8_t x68; + uint8_t x69; + uint32_t x70; + uint8_t x71; + uint32_t x72; + uint8_t x73; + uint32_t x74; + uint8_t x75; + uint8_t x76; + uint32_t x77; + uint8_t x78; + uint32_t x79; + uint8_t x80; + uint32_t x81; + uint8_t x82; + uint8_t x83; + uint8_t x84; + uint32_t x85; + uint8_t x86; + uint32_t x87; + uint8_t x88; + fiat_25519_uint1 x89; + uint32_t x90; + uint8_t x91; + uint32_t x92; + uint8_t x93; + uint32_t x94; + uint8_t x95; + uint8_t x96; + uint32_t x97; + uint8_t x98; + uint32_t x99; + uint8_t x100; + uint32_t x101; + uint8_t x102; + uint8_t x103; + uint32_t x104; + uint8_t x105; + uint32_t x106; + uint8_t x107; + uint32_t x108; + uint8_t x109; + uint8_t x110; + uint32_t x111; + uint8_t x112; + uint32_t x113; + uint8_t x114; + uint32_t x115; + uint8_t x116; + uint8_t x117; + fiat_25519_subborrowx_u26(&x1, &x2, 0x0, (arg1[0]), UINT32_C(0x3ffffed)); + fiat_25519_subborrowx_u25(&x3, &x4, x2, (arg1[1]), UINT32_C(0x1ffffff)); + fiat_25519_subborrowx_u26(&x5, &x6, x4, (arg1[2]), UINT32_C(0x3ffffff)); + fiat_25519_subborrowx_u25(&x7, &x8, x6, (arg1[3]), UINT32_C(0x1ffffff)); + fiat_25519_subborrowx_u26(&x9, &x10, x8, (arg1[4]), UINT32_C(0x3ffffff)); + fiat_25519_subborrowx_u25(&x11, &x12, x10, (arg1[5]), UINT32_C(0x1ffffff)); + fiat_25519_subborrowx_u26(&x13, &x14, x12, (arg1[6]), UINT32_C(0x3ffffff)); + fiat_25519_subborrowx_u25(&x15, &x16, x14, (arg1[7]), UINT32_C(0x1ffffff)); + fiat_25519_subborrowx_u26(&x17, &x18, x16, (arg1[8]), UINT32_C(0x3ffffff)); + fiat_25519_subborrowx_u25(&x19, &x20, x18, (arg1[9]), UINT32_C(0x1ffffff)); + fiat_25519_cmovznz_u32(&x21, x20, 0x0, UINT32_C(0xffffffff)); + fiat_25519_addcarryx_u26(&x22, &x23, 0x0, x1, (x21 & UINT32_C(0x3ffffed))); + fiat_25519_addcarryx_u25(&x24, &x25, x23, x3, (x21 & UINT32_C(0x1ffffff))); + fiat_25519_addcarryx_u26(&x26, &x27, x25, x5, (x21 & UINT32_C(0x3ffffff))); + fiat_25519_addcarryx_u25(&x28, &x29, x27, x7, (x21 & UINT32_C(0x1ffffff))); + fiat_25519_addcarryx_u26(&x30, &x31, x29, x9, (x21 & UINT32_C(0x3ffffff))); + fiat_25519_addcarryx_u25(&x32, &x33, x31, x11, (x21 & UINT32_C(0x1ffffff))); + fiat_25519_addcarryx_u26(&x34, &x35, x33, x13, (x21 & UINT32_C(0x3ffffff))); + fiat_25519_addcarryx_u25(&x36, &x37, x35, x15, (x21 & UINT32_C(0x1ffffff))); + fiat_25519_addcarryx_u26(&x38, &x39, x37, x17, (x21 & UINT32_C(0x3ffffff))); + fiat_25519_addcarryx_u25(&x40, &x41, x39, x19, (x21 & UINT32_C(0x1ffffff))); + x42 = (x40 << 6); + x43 = (x38 << 4); + x44 = (x36 << 3); + x45 = (x34 * (uint32_t)0x2); + x46 = (x30 << 6); + x47 = (x28 << 5); + x48 = (x26 << 3); + x49 = (x24 << 2); + x50 = (uint8_t)(x22 & UINT8_C(0xff)); + x51 = (x22 >> 8); + x52 = (uint8_t)(x51 & UINT8_C(0xff)); + x53 = (x51 >> 8); + x54 = (uint8_t)(x53 & UINT8_C(0xff)); + x55 = (uint8_t)(x53 >> 8); + x56 = (x49 + (uint32_t)x55); + x57 = (uint8_t)(x56 & UINT8_C(0xff)); + x58 = (x56 >> 8); + x59 = (uint8_t)(x58 & UINT8_C(0xff)); + x60 = (x58 >> 8); + x61 = (uint8_t)(x60 & UINT8_C(0xff)); + x62 = (uint8_t)(x60 >> 8); + x63 = (x48 + (uint32_t)x62); + x64 = (uint8_t)(x63 & UINT8_C(0xff)); + x65 = (x63 >> 8); + x66 = (uint8_t)(x65 & UINT8_C(0xff)); + x67 = (x65 >> 8); + x68 = (uint8_t)(x67 & UINT8_C(0xff)); + x69 = (uint8_t)(x67 >> 8); + x70 = (x47 + (uint32_t)x69); + x71 = (uint8_t)(x70 & UINT8_C(0xff)); + x72 = (x70 >> 8); + x73 = (uint8_t)(x72 & UINT8_C(0xff)); + x74 = (x72 >> 8); + x75 = (uint8_t)(x74 & UINT8_C(0xff)); + x76 = (uint8_t)(x74 >> 8); + x77 = (x46 + (uint32_t)x76); + x78 = (uint8_t)(x77 & UINT8_C(0xff)); + x79 = (x77 >> 8); + x80 = (uint8_t)(x79 & UINT8_C(0xff)); + x81 = (x79 >> 8); + x82 = (uint8_t)(x81 & UINT8_C(0xff)); + x83 = (uint8_t)(x81 >> 8); + x84 = (uint8_t)(x32 & UINT8_C(0xff)); + x85 = (x32 >> 8); + x86 = (uint8_t)(x85 & UINT8_C(0xff)); + x87 = (x85 >> 8); + x88 = (uint8_t)(x87 & UINT8_C(0xff)); + x89 = (fiat_25519_uint1)(x87 >> 8); + x90 = (x45 + (uint32_t)x89); + x91 = (uint8_t)(x90 & UINT8_C(0xff)); + x92 = (x90 >> 8); + x93 = (uint8_t)(x92 & UINT8_C(0xff)); + x94 = (x92 >> 8); + x95 = (uint8_t)(x94 & UINT8_C(0xff)); + x96 = (uint8_t)(x94 >> 8); + x97 = (x44 + (uint32_t)x96); + x98 = (uint8_t)(x97 & UINT8_C(0xff)); + x99 = (x97 >> 8); + x100 = (uint8_t)(x99 & UINT8_C(0xff)); + x101 = (x99 >> 8); + x102 = (uint8_t)(x101 & UINT8_C(0xff)); + x103 = (uint8_t)(x101 >> 8); + x104 = (x43 + (uint32_t)x103); + x105 = (uint8_t)(x104 & UINT8_C(0xff)); + x106 = (x104 >> 8); + x107 = (uint8_t)(x106 & UINT8_C(0xff)); + x108 = (x106 >> 8); + x109 = (uint8_t)(x108 & UINT8_C(0xff)); + x110 = (uint8_t)(x108 >> 8); + x111 = (x42 + (uint32_t)x110); + x112 = (uint8_t)(x111 & UINT8_C(0xff)); + x113 = (x111 >> 8); + x114 = (uint8_t)(x113 & UINT8_C(0xff)); + x115 = (x113 >> 8); + x116 = (uint8_t)(x115 & UINT8_C(0xff)); + x117 = (uint8_t)(x115 >> 8); + out1[0] = x50; + out1[1] = x52; + out1[2] = x54; + out1[3] = x57; + out1[4] = x59; + out1[5] = x61; + out1[6] = x64; + out1[7] = x66; + out1[8] = x68; + out1[9] = x71; + out1[10] = x73; + out1[11] = x75; + out1[12] = x78; + out1[13] = x80; + out1[14] = x82; + out1[15] = x83; + out1[16] = x84; + out1[17] = x86; + out1[18] = x88; + out1[19] = x91; + out1[20] = x93; + out1[21] = x95; + out1[22] = x98; + out1[23] = x100; + out1[24] = x102; + out1[25] = x105; + out1[26] = x107; + out1[27] = x109; + out1[28] = x112; + out1[29] = x114; + out1[30] = x116; + out1[31] = x117; +} + +/* + * The function fiat_25519_from_bytes deserializes a field element from bytes in little-endian order. + * + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x7f]] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_from_bytes(fiat_25519_tight_field_element out1, const uint8_t arg1[32]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint8_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint8_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint8_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint8_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint8_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint8_t x52; + uint32_t x53; + uint32_t x54; + uint32_t x55; + uint32_t x56; + uint32_t x57; + uint32_t x58; + uint32_t x59; + uint8_t x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint8_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint8_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint8_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + x1 = ((uint32_t)(arg1[31] & 0x7F) << 18); + x2 = ((uint32_t)(arg1[30]) << 10); + x3 = ((uint32_t)(arg1[29]) << 2); + x4 = ((uint32_t)(arg1[28]) << 20); + x5 = ((uint32_t)(arg1[27]) << 12); + x6 = ((uint32_t)(arg1[26]) << 4); + x7 = ((uint32_t)(arg1[25]) << 21); + x8 = ((uint32_t)(arg1[24]) << 13); + x9 = ((uint32_t)(arg1[23]) << 5); + x10 = ((uint32_t)(arg1[22]) << 23); + x11 = ((uint32_t)(arg1[21]) << 15); + x12 = ((uint32_t)(arg1[20]) << 7); + x13 = ((uint32_t)(arg1[19]) << 24); + x14 = ((uint32_t)(arg1[18]) << 16); + x15 = ((uint32_t)(arg1[17]) << 8); + x16 = (arg1[16]); + x17 = ((uint32_t)(arg1[15]) << 18); + x18 = ((uint32_t)(arg1[14]) << 10); + x19 = ((uint32_t)(arg1[13]) << 2); + x20 = ((uint32_t)(arg1[12]) << 19); + x21 = ((uint32_t)(arg1[11]) << 11); + x22 = ((uint32_t)(arg1[10]) << 3); + x23 = ((uint32_t)(arg1[9]) << 21); + x24 = ((uint32_t)(arg1[8]) << 13); + x25 = ((uint32_t)(arg1[7]) << 5); + x26 = ((uint32_t)(arg1[6]) << 22); + x27 = ((uint32_t)(arg1[5]) << 14); + x28 = ((uint32_t)(arg1[4]) << 6); + x29 = ((uint32_t)(arg1[3]) << 24); + x30 = ((uint32_t)(arg1[2]) << 16); + x31 = ((uint32_t)(arg1[1]) << 8); + x32 = (arg1[0]); + x33 = (x31 + (uint32_t)x32); + x34 = (x30 + x33); + x35 = (x29 + x34); + x36 = (x35 & UINT32_C(0x3ffffff)); + x37 = (uint8_t)(x35 >> 26); + x38 = (x28 + (uint32_t)x37); + x39 = (x27 + x38); + x40 = (x26 + x39); + x41 = (x40 & UINT32_C(0x1ffffff)); + x42 = (uint8_t)(x40 >> 25); + x43 = (x25 + (uint32_t)x42); + x44 = (x24 + x43); + x45 = (x23 + x44); + x46 = (x45 & UINT32_C(0x3ffffff)); + x47 = (uint8_t)(x45 >> 26); + x48 = (x22 + (uint32_t)x47); + x49 = (x21 + x48); + x50 = (x20 + x49); + x51 = (x50 & UINT32_C(0x1ffffff)); + x52 = (uint8_t)(x50 >> 25); + x53 = (x19 + (uint32_t)x52); + x54 = (x18 + x53); + x55 = (x17 + x54); + x56 = (x15 + (uint32_t)x16); + x57 = (x14 + x56); + x58 = (x13 + x57); + x59 = (x58 & UINT32_C(0x1ffffff)); + x60 = (uint8_t)(x58 >> 25); + x61 = (x12 + (uint32_t)x60); + x62 = (x11 + x61); + x63 = (x10 + x62); + x64 = (x63 & UINT32_C(0x3ffffff)); + x65 = (uint8_t)(x63 >> 26); + x66 = (x9 + (uint32_t)x65); + x67 = (x8 + x66); + x68 = (x7 + x67); + x69 = (x68 & UINT32_C(0x1ffffff)); + x70 = (uint8_t)(x68 >> 25); + x71 = (x6 + (uint32_t)x70); + x72 = (x5 + x71); + x73 = (x4 + x72); + x74 = (x73 & UINT32_C(0x3ffffff)); + x75 = (uint8_t)(x73 >> 26); + x76 = (x3 + (uint32_t)x75); + x77 = (x2 + x76); + x78 = (x1 + x77); + out1[0] = x36; + out1[1] = x41; + out1[2] = x46; + out1[3] = x51; + out1[4] = x55; + out1[5] = x59; + out1[6] = x64; + out1[7] = x69; + out1[8] = x74; + out1[9] = x78; +} + +/* + * The function fiat_25519_relax is the identity function converting from tight field elements to loose field elements. + * + * Postconditions: + * out1 = arg1 + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_relax(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + x1 = (arg1[0]); + x2 = (arg1[1]); + x3 = (arg1[2]); + x4 = (arg1[3]); + x5 = (arg1[4]); + x6 = (arg1[5]); + x7 = (arg1[6]); + x8 = (arg1[7]); + x9 = (arg1[8]); + x10 = (arg1[9]); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; + out1[8] = x9; + out1[9] = x10; +} + +/* + * The function fiat_25519_carry_scmul_121666 multiplies a field element by 121666 and reduces the result. + * + * Postconditions: + * eval out1 mod m = (121666 * eval arg1) mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_carry_scmul_121666(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint32_t x11; + uint32_t x12; + uint64_t x13; + uint32_t x14; + uint32_t x15; + uint64_t x16; + uint32_t x17; + uint32_t x18; + uint64_t x19; + uint32_t x20; + uint32_t x21; + uint64_t x22; + uint32_t x23; + uint32_t x24; + uint64_t x25; + uint32_t x26; + uint32_t x27; + uint64_t x28; + uint32_t x29; + uint32_t x30; + uint64_t x31; + uint32_t x32; + uint32_t x33; + uint64_t x34; + uint32_t x35; + uint32_t x36; + uint64_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + fiat_25519_uint1 x42; + uint32_t x43; + uint32_t x44; + fiat_25519_uint1 x45; + uint32_t x46; + uint32_t x47; + x1 = ((uint64_t)UINT32_C(0x1db42) * (arg1[9])); + x2 = ((uint64_t)UINT32_C(0x1db42) * (arg1[8])); + x3 = ((uint64_t)UINT32_C(0x1db42) * (arg1[7])); + x4 = ((uint64_t)UINT32_C(0x1db42) * (arg1[6])); + x5 = ((uint64_t)UINT32_C(0x1db42) * (arg1[5])); + x6 = ((uint64_t)UINT32_C(0x1db42) * (arg1[4])); + x7 = ((uint64_t)UINT32_C(0x1db42) * (arg1[3])); + x8 = ((uint64_t)UINT32_C(0x1db42) * (arg1[2])); + x9 = ((uint64_t)UINT32_C(0x1db42) * (arg1[1])); + x10 = ((uint64_t)UINT32_C(0x1db42) * (arg1[0])); + x11 = (uint32_t)(x10 >> 26); + x12 = (uint32_t)(x10 & UINT32_C(0x3ffffff)); + x13 = (x11 + x9); + x14 = (uint32_t)(x13 >> 25); + x15 = (uint32_t)(x13 & UINT32_C(0x1ffffff)); + x16 = (x14 + x8); + x17 = (uint32_t)(x16 >> 26); + x18 = (uint32_t)(x16 & UINT32_C(0x3ffffff)); + x19 = (x17 + x7); + x20 = (uint32_t)(x19 >> 25); + x21 = (uint32_t)(x19 & UINT32_C(0x1ffffff)); + x22 = (x20 + x6); + x23 = (uint32_t)(x22 >> 26); + x24 = (uint32_t)(x22 & UINT32_C(0x3ffffff)); + x25 = (x23 + x5); + x26 = (uint32_t)(x25 >> 25); + x27 = (uint32_t)(x25 & UINT32_C(0x1ffffff)); + x28 = (x26 + x4); + x29 = (uint32_t)(x28 >> 26); + x30 = (uint32_t)(x28 & UINT32_C(0x3ffffff)); + x31 = (x29 + x3); + x32 = (uint32_t)(x31 >> 25); + x33 = (uint32_t)(x31 & UINT32_C(0x1ffffff)); + x34 = (x32 + x2); + x35 = (uint32_t)(x34 >> 26); + x36 = (uint32_t)(x34 & UINT32_C(0x3ffffff)); + x37 = (x35 + x1); + x38 = (uint32_t)(x37 >> 25); + x39 = (uint32_t)(x37 & UINT32_C(0x1ffffff)); + x40 = (x38 * UINT8_C(0x13)); + x41 = (x12 + x40); + x42 = (fiat_25519_uint1)(x41 >> 26); + x43 = (x41 & UINT32_C(0x3ffffff)); + x44 = (x42 + x15); + x45 = (fiat_25519_uint1)(x44 >> 25); + x46 = (x44 & UINT32_C(0x1ffffff)); + x47 = (x45 + x18); + out1[0] = x43; + out1[1] = x46; + out1[2] = x47; + out1[3] = x21; + out1[4] = x24; + out1[5] = x27; + out1[6] = x30; + out1[7] = x33; + out1[8] = x36; + out1[9] = x39; +} diff --git a/src/ballet/fiat-crypto/curve25519_64.c b/src/ballet/fiat-crypto/curve25519_64.c new file mode 100644 index 0000000000..51fcabcdcc --- /dev/null +++ b/src/ballet/fiat-crypto/curve25519_64.c @@ -0,0 +1,972 @@ +/* Autogenerated: 'src/ExtractionOCaml/unsaturated_solinas' --inline --static --use-value-barrier 25519 64 '(auto)' '2^255 - 19' carry_mul carry_square carry add sub opp selectznz to_bytes from_bytes relax carry_scmul121666 */ +/* curve description: 25519 */ +/* machine_wordsize = 64 (from "64") */ +/* requested operations: carry_mul, carry_square, carry, add, sub, opp, selectznz, to_bytes, from_bytes, relax, carry_scmul121666 */ +/* n = 5 (from "(auto)") */ +/* s-c = 2^255 - [(1, 19)] (from "2^255 - 19") */ +/* tight_bounds_multiplier = 1 (from "") */ +/* */ +/* Computed values: */ +/* carry_chain = [0, 1, 2, 3, 4, 0, 1] */ +/* eval z = z[0] + (z[1] << 51) + (z[2] << 102) + (z[3] << 153) + (z[4] << 204) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ +/* balance = [0xfffffffffffda, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe] */ + +#include +typedef unsigned char fiat_25519_uint1; +typedef signed char fiat_25519_int1; +#if defined(__GNUC__) || defined(__clang__) +# define FIAT_25519_FIAT_EXTENSION __extension__ +# define FIAT_25519_FIAT_INLINE __inline__ +#else +# define FIAT_25519_FIAT_EXTENSION +# define FIAT_25519_FIAT_INLINE +#endif + +FIAT_25519_FIAT_EXTENSION typedef signed __int128 fiat_25519_int128; +FIAT_25519_FIAT_EXTENSION typedef unsigned __int128 fiat_25519_uint128; + +/* The type fiat_25519_loose_field_element is a field element with loose bounds. */ +/* Bounds: [[0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ +typedef uint64_t fiat_25519_loose_field_element[5]; + +/* The type fiat_25519_tight_field_element is a field element with tight bounds. */ +/* Bounds: [[0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ +typedef uint64_t fiat_25519_tight_field_element[5]; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_25519_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint64_t fiat_25519_value_barrier_u64(uint64_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_25519_value_barrier_u64(x) (x) +#endif + + +/* + * The function fiat_25519_addcarryx_u51 is an addition with carry. + * + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^51 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^51⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0x7ffffffffffff] + * arg3: [0x0 ~> 0x7ffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0x7ffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_addcarryx_u51(uint64_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) { + uint64_t x1; + uint64_t x2; + fiat_25519_uint1 x3; + x1 = ((arg1 + arg2) + arg3); + x2 = (x1 & UINT64_C(0x7ffffffffffff)); + x3 = (fiat_25519_uint1)(x1 >> 51); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_25519_subborrowx_u51 is a subtraction with borrow. + * + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^51 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^51⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0x7ffffffffffff] + * arg3: [0x0 ~> 0x7ffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0x7ffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_subborrowx_u51(uint64_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) { + int64_t x1; + fiat_25519_int1 x2; + uint64_t x3; + x1 = ((int64_t)((int64_t)arg2 - (int64_t)arg1) - (int64_t)arg3); + x2 = (fiat_25519_int1)(x1 >> 51); + x3 = ((uint64_t)x1 & UINT64_C(0x7ffffffffffff)); + *out1 = x3; + *out2 = (fiat_25519_uint1)(0x0 - x2); +} + +/* + * The function fiat_25519_cmovznz_u64 is a single-word conditional move. + * + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_cmovznz_u64(uint64_t* out1, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_25519_uint1 x1; + uint64_t x2; + uint64_t x3; + x1 = (!(!arg1)); + x2 = ((uint64_t)(fiat_25519_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + x3 = ((fiat_25519_value_barrier_u64(x2) & arg3) | (fiat_25519_value_barrier_u64((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_25519_carry_mul multiplies two field elements and reduces the result. + * + * Postconditions: + * eval out1 mod m = (eval arg1 * eval arg2) mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_carry_mul(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1, const fiat_25519_loose_field_element arg2) { + fiat_25519_uint128 x1; + fiat_25519_uint128 x2; + fiat_25519_uint128 x3; + fiat_25519_uint128 x4; + fiat_25519_uint128 x5; + fiat_25519_uint128 x6; + fiat_25519_uint128 x7; + fiat_25519_uint128 x8; + fiat_25519_uint128 x9; + fiat_25519_uint128 x10; + fiat_25519_uint128 x11; + fiat_25519_uint128 x12; + fiat_25519_uint128 x13; + fiat_25519_uint128 x14; + fiat_25519_uint128 x15; + fiat_25519_uint128 x16; + fiat_25519_uint128 x17; + fiat_25519_uint128 x18; + fiat_25519_uint128 x19; + fiat_25519_uint128 x20; + fiat_25519_uint128 x21; + fiat_25519_uint128 x22; + fiat_25519_uint128 x23; + fiat_25519_uint128 x24; + fiat_25519_uint128 x25; + fiat_25519_uint128 x26; + uint64_t x27; + uint64_t x28; + fiat_25519_uint128 x29; + fiat_25519_uint128 x30; + fiat_25519_uint128 x31; + fiat_25519_uint128 x32; + fiat_25519_uint128 x33; + uint64_t x34; + uint64_t x35; + fiat_25519_uint128 x36; + uint64_t x37; + uint64_t x38; + fiat_25519_uint128 x39; + uint64_t x40; + uint64_t x41; + fiat_25519_uint128 x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + fiat_25519_uint1 x50; + uint64_t x51; + uint64_t x52; + x1 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[4]) * UINT8_C(0x13))); + x2 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[3]) * UINT8_C(0x13))); + x3 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[2]) * UINT8_C(0x13))); + x4 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[1]) * UINT8_C(0x13))); + x5 = ((fiat_25519_uint128)(arg1[3]) * ((arg2[4]) * UINT8_C(0x13))); + x6 = ((fiat_25519_uint128)(arg1[3]) * ((arg2[3]) * UINT8_C(0x13))); + x7 = ((fiat_25519_uint128)(arg1[3]) * ((arg2[2]) * UINT8_C(0x13))); + x8 = ((fiat_25519_uint128)(arg1[2]) * ((arg2[4]) * UINT8_C(0x13))); + x9 = ((fiat_25519_uint128)(arg1[2]) * ((arg2[3]) * UINT8_C(0x13))); + x10 = ((fiat_25519_uint128)(arg1[1]) * ((arg2[4]) * UINT8_C(0x13))); + x11 = ((fiat_25519_uint128)(arg1[4]) * (arg2[0])); + x12 = ((fiat_25519_uint128)(arg1[3]) * (arg2[1])); + x13 = ((fiat_25519_uint128)(arg1[3]) * (arg2[0])); + x14 = ((fiat_25519_uint128)(arg1[2]) * (arg2[2])); + x15 = ((fiat_25519_uint128)(arg1[2]) * (arg2[1])); + x16 = ((fiat_25519_uint128)(arg1[2]) * (arg2[0])); + x17 = ((fiat_25519_uint128)(arg1[1]) * (arg2[3])); + x18 = ((fiat_25519_uint128)(arg1[1]) * (arg2[2])); + x19 = ((fiat_25519_uint128)(arg1[1]) * (arg2[1])); + x20 = ((fiat_25519_uint128)(arg1[1]) * (arg2[0])); + x21 = ((fiat_25519_uint128)(arg1[0]) * (arg2[4])); + x22 = ((fiat_25519_uint128)(arg1[0]) * (arg2[3])); + x23 = ((fiat_25519_uint128)(arg1[0]) * (arg2[2])); + x24 = ((fiat_25519_uint128)(arg1[0]) * (arg2[1])); + x25 = ((fiat_25519_uint128)(arg1[0]) * (arg2[0])); + x26 = (x25 + (x10 + (x9 + (x7 + x4)))); + x27 = (uint64_t)(x26 >> 51); + x28 = (uint64_t)(x26 & UINT64_C(0x7ffffffffffff)); + x29 = (x21 + (x17 + (x14 + (x12 + x11)))); + x30 = (x22 + (x18 + (x15 + (x13 + x1)))); + x31 = (x23 + (x19 + (x16 + (x5 + x2)))); + x32 = (x24 + (x20 + (x8 + (x6 + x3)))); + x33 = (x27 + x32); + x34 = (uint64_t)(x33 >> 51); + x35 = (uint64_t)(x33 & UINT64_C(0x7ffffffffffff)); + x36 = (x34 + x31); + x37 = (uint64_t)(x36 >> 51); + x38 = (uint64_t)(x36 & UINT64_C(0x7ffffffffffff)); + x39 = (x37 + x30); + x40 = (uint64_t)(x39 >> 51); + x41 = (uint64_t)(x39 & UINT64_C(0x7ffffffffffff)); + x42 = (x40 + x29); + x43 = (uint64_t)(x42 >> 51); + x44 = (uint64_t)(x42 & UINT64_C(0x7ffffffffffff)); + x45 = (x43 * UINT8_C(0x13)); + x46 = (x28 + x45); + x47 = (x46 >> 51); + x48 = (x46 & UINT64_C(0x7ffffffffffff)); + x49 = (x47 + x35); + x50 = (fiat_25519_uint1)(x49 >> 51); + x51 = (x49 & UINT64_C(0x7ffffffffffff)); + x52 = (x50 + x38); + out1[0] = x48; + out1[1] = x51; + out1[2] = x52; + out1[3] = x41; + out1[4] = x44; +} + +/* + * The function fiat_25519_carry_square squares a field element and reduces the result. + * + * Postconditions: + * eval out1 mod m = (eval arg1 * eval arg1) mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_carry_square(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + fiat_25519_uint128 x9; + fiat_25519_uint128 x10; + fiat_25519_uint128 x11; + fiat_25519_uint128 x12; + fiat_25519_uint128 x13; + fiat_25519_uint128 x14; + fiat_25519_uint128 x15; + fiat_25519_uint128 x16; + fiat_25519_uint128 x17; + fiat_25519_uint128 x18; + fiat_25519_uint128 x19; + fiat_25519_uint128 x20; + fiat_25519_uint128 x21; + fiat_25519_uint128 x22; + fiat_25519_uint128 x23; + fiat_25519_uint128 x24; + uint64_t x25; + uint64_t x26; + fiat_25519_uint128 x27; + fiat_25519_uint128 x28; + fiat_25519_uint128 x29; + fiat_25519_uint128 x30; + fiat_25519_uint128 x31; + uint64_t x32; + uint64_t x33; + fiat_25519_uint128 x34; + uint64_t x35; + uint64_t x36; + fiat_25519_uint128 x37; + uint64_t x38; + uint64_t x39; + fiat_25519_uint128 x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + fiat_25519_uint1 x48; + uint64_t x49; + uint64_t x50; + x1 = ((arg1[4]) * UINT8_C(0x13)); + x2 = (x1 * 0x2); + x3 = ((arg1[4]) * 0x2); + x4 = ((arg1[3]) * UINT8_C(0x13)); + x5 = (x4 * 0x2); + x6 = ((arg1[3]) * 0x2); + x7 = ((arg1[2]) * 0x2); + x8 = ((arg1[1]) * 0x2); + x9 = ((fiat_25519_uint128)(arg1[4]) * x1); + x10 = ((fiat_25519_uint128)(arg1[3]) * x2); + x11 = ((fiat_25519_uint128)(arg1[3]) * x4); + x12 = ((fiat_25519_uint128)(arg1[2]) * x2); + x13 = ((fiat_25519_uint128)(arg1[2]) * x5); + x14 = ((fiat_25519_uint128)(arg1[2]) * (arg1[2])); + x15 = ((fiat_25519_uint128)(arg1[1]) * x2); + x16 = ((fiat_25519_uint128)(arg1[1]) * x6); + x17 = ((fiat_25519_uint128)(arg1[1]) * x7); + x18 = ((fiat_25519_uint128)(arg1[1]) * (arg1[1])); + x19 = ((fiat_25519_uint128)(arg1[0]) * x3); + x20 = ((fiat_25519_uint128)(arg1[0]) * x6); + x21 = ((fiat_25519_uint128)(arg1[0]) * x7); + x22 = ((fiat_25519_uint128)(arg1[0]) * x8); + x23 = ((fiat_25519_uint128)(arg1[0]) * (arg1[0])); + x24 = (x23 + (x15 + x13)); + x25 = (uint64_t)(x24 >> 51); + x26 = (uint64_t)(x24 & UINT64_C(0x7ffffffffffff)); + x27 = (x19 + (x16 + x14)); + x28 = (x20 + (x17 + x9)); + x29 = (x21 + (x18 + x10)); + x30 = (x22 + (x12 + x11)); + x31 = (x25 + x30); + x32 = (uint64_t)(x31 >> 51); + x33 = (uint64_t)(x31 & UINT64_C(0x7ffffffffffff)); + x34 = (x32 + x29); + x35 = (uint64_t)(x34 >> 51); + x36 = (uint64_t)(x34 & UINT64_C(0x7ffffffffffff)); + x37 = (x35 + x28); + x38 = (uint64_t)(x37 >> 51); + x39 = (uint64_t)(x37 & UINT64_C(0x7ffffffffffff)); + x40 = (x38 + x27); + x41 = (uint64_t)(x40 >> 51); + x42 = (uint64_t)(x40 & UINT64_C(0x7ffffffffffff)); + x43 = (x41 * UINT8_C(0x13)); + x44 = (x26 + x43); + x45 = (x44 >> 51); + x46 = (x44 & UINT64_C(0x7ffffffffffff)); + x47 = (x45 + x33); + x48 = (fiat_25519_uint1)(x47 >> 51); + x49 = (x47 & UINT64_C(0x7ffffffffffff)); + x50 = (x48 + x36); + out1[0] = x46; + out1[1] = x49; + out1[2] = x50; + out1[3] = x39; + out1[4] = x42; +} + +/* + * The function fiat_25519_carry reduces a field element. + * + * Postconditions: + * eval out1 mod m = eval arg1 mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_carry(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + x1 = (arg1[0]); + x2 = ((x1 >> 51) + (arg1[1])); + x3 = ((x2 >> 51) + (arg1[2])); + x4 = ((x3 >> 51) + (arg1[3])); + x5 = ((x4 >> 51) + (arg1[4])); + x6 = ((x1 & UINT64_C(0x7ffffffffffff)) + ((x5 >> 51) * UINT8_C(0x13))); + x7 = ((fiat_25519_uint1)(x6 >> 51) + (x2 & UINT64_C(0x7ffffffffffff))); + x8 = (x6 & UINT64_C(0x7ffffffffffff)); + x9 = (x7 & UINT64_C(0x7ffffffffffff)); + x10 = ((fiat_25519_uint1)(x7 >> 51) + (x3 & UINT64_C(0x7ffffffffffff))); + x11 = (x4 & UINT64_C(0x7ffffffffffff)); + x12 = (x5 & UINT64_C(0x7ffffffffffff)); + out1[0] = x8; + out1[1] = x9; + out1[2] = x10; + out1[3] = x11; + out1[4] = x12; +} + +/* + * The function fiat_25519_add adds two field elements. + * + * Postconditions: + * eval out1 mod m = (eval arg1 + eval arg2) mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_add(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1, const fiat_25519_tight_field_element arg2) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + x1 = ((arg1[0]) + (arg2[0])); + x2 = ((arg1[1]) + (arg2[1])); + x3 = ((arg1[2]) + (arg2[2])); + x4 = ((arg1[3]) + (arg2[3])); + x5 = ((arg1[4]) + (arg2[4])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; +} + +/* + * The function fiat_25519_sub subtracts two field elements. + * + * Postconditions: + * eval out1 mod m = (eval arg1 - eval arg2) mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_sub(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1, const fiat_25519_tight_field_element arg2) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + x1 = ((UINT64_C(0xfffffffffffda) + (arg1[0])) - (arg2[0])); + x2 = ((UINT64_C(0xffffffffffffe) + (arg1[1])) - (arg2[1])); + x3 = ((UINT64_C(0xffffffffffffe) + (arg1[2])) - (arg2[2])); + x4 = ((UINT64_C(0xffffffffffffe) + (arg1[3])) - (arg2[3])); + x5 = ((UINT64_C(0xffffffffffffe) + (arg1[4])) - (arg2[4])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; +} + +/* + * The function fiat_25519_opp negates a field element. + * + * Postconditions: + * eval out1 mod m = -eval arg1 mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_opp(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + x1 = (UINT64_C(0xfffffffffffda) - (arg1[0])); + x2 = (UINT64_C(0xffffffffffffe) - (arg1[1])); + x3 = (UINT64_C(0xffffffffffffe) - (arg1[2])); + x4 = (UINT64_C(0xffffffffffffe) - (arg1[3])); + x5 = (UINT64_C(0xffffffffffffe) - (arg1[4])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; +} + +/* + * The function fiat_25519_selectznz is a multi-limb conditional select. + * + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_selectznz(uint64_t out1[5], fiat_25519_uint1 arg1, const uint64_t arg2[5], const uint64_t arg3[5]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + fiat_25519_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); + fiat_25519_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); + fiat_25519_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); + fiat_25519_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); + fiat_25519_cmovznz_u64(&x5, arg1, (arg2[4]), (arg3[4])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; +} + +/* + * The function fiat_25519_to_bytes serializes a field element to bytes in little-endian order. + * + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] + * + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x7f]] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_to_bytes(uint8_t out1[32], const fiat_25519_tight_field_element arg1) { + uint64_t x1; + fiat_25519_uint1 x2; + uint64_t x3; + fiat_25519_uint1 x4; + uint64_t x5; + fiat_25519_uint1 x6; + uint64_t x7; + fiat_25519_uint1 x8; + uint64_t x9; + fiat_25519_uint1 x10; + uint64_t x11; + uint64_t x12; + fiat_25519_uint1 x13; + uint64_t x14; + fiat_25519_uint1 x15; + uint64_t x16; + fiat_25519_uint1 x17; + uint64_t x18; + fiat_25519_uint1 x19; + uint64_t x20; + fiat_25519_uint1 x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint8_t x26; + uint64_t x27; + uint8_t x28; + uint64_t x29; + uint8_t x30; + uint64_t x31; + uint8_t x32; + uint64_t x33; + uint8_t x34; + uint64_t x35; + uint8_t x36; + uint8_t x37; + uint64_t x38; + uint8_t x39; + uint64_t x40; + uint8_t x41; + uint64_t x42; + uint8_t x43; + uint64_t x44; + uint8_t x45; + uint64_t x46; + uint8_t x47; + uint64_t x48; + uint8_t x49; + uint8_t x50; + uint64_t x51; + uint8_t x52; + uint64_t x53; + uint8_t x54; + uint64_t x55; + uint8_t x56; + uint64_t x57; + uint8_t x58; + uint64_t x59; + uint8_t x60; + uint64_t x61; + uint8_t x62; + uint64_t x63; + uint8_t x64; + fiat_25519_uint1 x65; + uint64_t x66; + uint8_t x67; + uint64_t x68; + uint8_t x69; + uint64_t x70; + uint8_t x71; + uint64_t x72; + uint8_t x73; + uint64_t x74; + uint8_t x75; + uint64_t x76; + uint8_t x77; + uint8_t x78; + uint64_t x79; + uint8_t x80; + uint64_t x81; + uint8_t x82; + uint64_t x83; + uint8_t x84; + uint64_t x85; + uint8_t x86; + uint64_t x87; + uint8_t x88; + uint64_t x89; + uint8_t x90; + uint8_t x91; + fiat_25519_subborrowx_u51(&x1, &x2, 0x0, (arg1[0]), UINT64_C(0x7ffffffffffed)); + fiat_25519_subborrowx_u51(&x3, &x4, x2, (arg1[1]), UINT64_C(0x7ffffffffffff)); + fiat_25519_subborrowx_u51(&x5, &x6, x4, (arg1[2]), UINT64_C(0x7ffffffffffff)); + fiat_25519_subborrowx_u51(&x7, &x8, x6, (arg1[3]), UINT64_C(0x7ffffffffffff)); + fiat_25519_subborrowx_u51(&x9, &x10, x8, (arg1[4]), UINT64_C(0x7ffffffffffff)); + fiat_25519_cmovznz_u64(&x11, x10, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_25519_addcarryx_u51(&x12, &x13, 0x0, x1, (x11 & UINT64_C(0x7ffffffffffed))); + fiat_25519_addcarryx_u51(&x14, &x15, x13, x3, (x11 & UINT64_C(0x7ffffffffffff))); + fiat_25519_addcarryx_u51(&x16, &x17, x15, x5, (x11 & UINT64_C(0x7ffffffffffff))); + fiat_25519_addcarryx_u51(&x18, &x19, x17, x7, (x11 & UINT64_C(0x7ffffffffffff))); + fiat_25519_addcarryx_u51(&x20, &x21, x19, x9, (x11 & UINT64_C(0x7ffffffffffff))); + x22 = (x20 << 4); + x23 = (x18 * (uint64_t)0x2); + x24 = (x16 << 6); + x25 = (x14 << 3); + x26 = (uint8_t)(x12 & UINT8_C(0xff)); + x27 = (x12 >> 8); + x28 = (uint8_t)(x27 & UINT8_C(0xff)); + x29 = (x27 >> 8); + x30 = (uint8_t)(x29 & UINT8_C(0xff)); + x31 = (x29 >> 8); + x32 = (uint8_t)(x31 & UINT8_C(0xff)); + x33 = (x31 >> 8); + x34 = (uint8_t)(x33 & UINT8_C(0xff)); + x35 = (x33 >> 8); + x36 = (uint8_t)(x35 & UINT8_C(0xff)); + x37 = (uint8_t)(x35 >> 8); + x38 = (x25 + (uint64_t)x37); + x39 = (uint8_t)(x38 & UINT8_C(0xff)); + x40 = (x38 >> 8); + x41 = (uint8_t)(x40 & UINT8_C(0xff)); + x42 = (x40 >> 8); + x43 = (uint8_t)(x42 & UINT8_C(0xff)); + x44 = (x42 >> 8); + x45 = (uint8_t)(x44 & UINT8_C(0xff)); + x46 = (x44 >> 8); + x47 = (uint8_t)(x46 & UINT8_C(0xff)); + x48 = (x46 >> 8); + x49 = (uint8_t)(x48 & UINT8_C(0xff)); + x50 = (uint8_t)(x48 >> 8); + x51 = (x24 + (uint64_t)x50); + x52 = (uint8_t)(x51 & UINT8_C(0xff)); + x53 = (x51 >> 8); + x54 = (uint8_t)(x53 & UINT8_C(0xff)); + x55 = (x53 >> 8); + x56 = (uint8_t)(x55 & UINT8_C(0xff)); + x57 = (x55 >> 8); + x58 = (uint8_t)(x57 & UINT8_C(0xff)); + x59 = (x57 >> 8); + x60 = (uint8_t)(x59 & UINT8_C(0xff)); + x61 = (x59 >> 8); + x62 = (uint8_t)(x61 & UINT8_C(0xff)); + x63 = (x61 >> 8); + x64 = (uint8_t)(x63 & UINT8_C(0xff)); + x65 = (fiat_25519_uint1)(x63 >> 8); + x66 = (x23 + (uint64_t)x65); + x67 = (uint8_t)(x66 & UINT8_C(0xff)); + x68 = (x66 >> 8); + x69 = (uint8_t)(x68 & UINT8_C(0xff)); + x70 = (x68 >> 8); + x71 = (uint8_t)(x70 & UINT8_C(0xff)); + x72 = (x70 >> 8); + x73 = (uint8_t)(x72 & UINT8_C(0xff)); + x74 = (x72 >> 8); + x75 = (uint8_t)(x74 & UINT8_C(0xff)); + x76 = (x74 >> 8); + x77 = (uint8_t)(x76 & UINT8_C(0xff)); + x78 = (uint8_t)(x76 >> 8); + x79 = (x22 + (uint64_t)x78); + x80 = (uint8_t)(x79 & UINT8_C(0xff)); + x81 = (x79 >> 8); + x82 = (uint8_t)(x81 & UINT8_C(0xff)); + x83 = (x81 >> 8); + x84 = (uint8_t)(x83 & UINT8_C(0xff)); + x85 = (x83 >> 8); + x86 = (uint8_t)(x85 & UINT8_C(0xff)); + x87 = (x85 >> 8); + x88 = (uint8_t)(x87 & UINT8_C(0xff)); + x89 = (x87 >> 8); + x90 = (uint8_t)(x89 & UINT8_C(0xff)); + x91 = (uint8_t)(x89 >> 8); + out1[0] = x26; + out1[1] = x28; + out1[2] = x30; + out1[3] = x32; + out1[4] = x34; + out1[5] = x36; + out1[6] = x39; + out1[7] = x41; + out1[8] = x43; + out1[9] = x45; + out1[10] = x47; + out1[11] = x49; + out1[12] = x52; + out1[13] = x54; + out1[14] = x56; + out1[15] = x58; + out1[16] = x60; + out1[17] = x62; + out1[18] = x64; + out1[19] = x67; + out1[20] = x69; + out1[21] = x71; + out1[22] = x73; + out1[23] = x75; + out1[24] = x77; + out1[25] = x80; + out1[26] = x82; + out1[27] = x84; + out1[28] = x86; + out1[29] = x88; + out1[30] = x90; + out1[31] = x91; +} + +/* + * The function fiat_25519_from_bytes deserializes a field element from bytes in little-endian order. + * + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x7f]] + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_from_bytes(fiat_25519_tight_field_element out1, const uint8_t arg1[32]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint8_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint8_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint8_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint8_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint8_t x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + x1 = ((uint64_t)(arg1[31] & 0x7F) << 44); + x2 = ((uint64_t)(arg1[30]) << 36); + x3 = ((uint64_t)(arg1[29]) << 28); + x4 = ((uint64_t)(arg1[28]) << 20); + x5 = ((uint64_t)(arg1[27]) << 12); + x6 = ((uint64_t)(arg1[26]) << 4); + x7 = ((uint64_t)(arg1[25]) << 47); + x8 = ((uint64_t)(arg1[24]) << 39); + x9 = ((uint64_t)(arg1[23]) << 31); + x10 = ((uint64_t)(arg1[22]) << 23); + x11 = ((uint64_t)(arg1[21]) << 15); + x12 = ((uint64_t)(arg1[20]) << 7); + x13 = ((uint64_t)(arg1[19]) << 50); + x14 = ((uint64_t)(arg1[18]) << 42); + x15 = ((uint64_t)(arg1[17]) << 34); + x16 = ((uint64_t)(arg1[16]) << 26); + x17 = ((uint64_t)(arg1[15]) << 18); + x18 = ((uint64_t)(arg1[14]) << 10); + x19 = ((uint64_t)(arg1[13]) << 2); + x20 = ((uint64_t)(arg1[12]) << 45); + x21 = ((uint64_t)(arg1[11]) << 37); + x22 = ((uint64_t)(arg1[10]) << 29); + x23 = ((uint64_t)(arg1[9]) << 21); + x24 = ((uint64_t)(arg1[8]) << 13); + x25 = ((uint64_t)(arg1[7]) << 5); + x26 = ((uint64_t)(arg1[6]) << 48); + x27 = ((uint64_t)(arg1[5]) << 40); + x28 = ((uint64_t)(arg1[4]) << 32); + x29 = ((uint64_t)(arg1[3]) << 24); + x30 = ((uint64_t)(arg1[2]) << 16); + x31 = ((uint64_t)(arg1[1]) << 8); + x32 = (arg1[0]); + x33 = (x31 + (uint64_t)x32); + x34 = (x30 + x33); + x35 = (x29 + x34); + x36 = (x28 + x35); + x37 = (x27 + x36); + x38 = (x26 + x37); + x39 = (x38 & UINT64_C(0x7ffffffffffff)); + x40 = (uint8_t)(x38 >> 51); + x41 = (x25 + (uint64_t)x40); + x42 = (x24 + x41); + x43 = (x23 + x42); + x44 = (x22 + x43); + x45 = (x21 + x44); + x46 = (x20 + x45); + x47 = (x46 & UINT64_C(0x7ffffffffffff)); + x48 = (uint8_t)(x46 >> 51); + x49 = (x19 + (uint64_t)x48); + x50 = (x18 + x49); + x51 = (x17 + x50); + x52 = (x16 + x51); + x53 = (x15 + x52); + x54 = (x14 + x53); + x55 = (x13 + x54); + x56 = (x55 & UINT64_C(0x7ffffffffffff)); + x57 = (uint8_t)(x55 >> 51); + x58 = (x12 + (uint64_t)x57); + x59 = (x11 + x58); + x60 = (x10 + x59); + x61 = (x9 + x60); + x62 = (x8 + x61); + x63 = (x7 + x62); + x64 = (x63 & UINT64_C(0x7ffffffffffff)); + x65 = (uint8_t)(x63 >> 51); + x66 = (x6 + (uint64_t)x65); + x67 = (x5 + x66); + x68 = (x4 + x67); + x69 = (x3 + x68); + x70 = (x2 + x69); + x71 = (x1 + x70); + out1[0] = x39; + out1[1] = x47; + out1[2] = x56; + out1[3] = x64; + out1[4] = x71; +} + +/* + * The function fiat_25519_relax is the identity function converting from tight field elements to loose field elements. + * + * Postconditions: + * out1 = arg1 + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_relax(fiat_25519_loose_field_element out1, const fiat_25519_tight_field_element arg1) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + x1 = (arg1[0]); + x2 = (arg1[1]); + x3 = (arg1[2]); + x4 = (arg1[3]); + x5 = (arg1[4]); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; +} + +/* + * The function fiat_25519_carry_scmul_121666 multiplies a field element by 121666 and reduces the result. + * + * Postconditions: + * eval out1 mod m = (121666 * eval arg1) mod m + * + */ +static FIAT_25519_FIAT_INLINE void fiat_25519_carry_scmul_121666(fiat_25519_tight_field_element out1, const fiat_25519_loose_field_element arg1) { + fiat_25519_uint128 x1; + fiat_25519_uint128 x2; + fiat_25519_uint128 x3; + fiat_25519_uint128 x4; + fiat_25519_uint128 x5; + uint64_t x6; + uint64_t x7; + fiat_25519_uint128 x8; + uint64_t x9; + uint64_t x10; + fiat_25519_uint128 x11; + uint64_t x12; + uint64_t x13; + fiat_25519_uint128 x14; + uint64_t x15; + uint64_t x16; + fiat_25519_uint128 x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + fiat_25519_uint1 x22; + uint64_t x23; + uint64_t x24; + fiat_25519_uint1 x25; + uint64_t x26; + uint64_t x27; + x1 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[4])); + x2 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[3])); + x3 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[2])); + x4 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[1])); + x5 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[0])); + x6 = (uint64_t)(x5 >> 51); + x7 = (uint64_t)(x5 & UINT64_C(0x7ffffffffffff)); + x8 = (x6 + x4); + x9 = (uint64_t)(x8 >> 51); + x10 = (uint64_t)(x8 & UINT64_C(0x7ffffffffffff)); + x11 = (x9 + x3); + x12 = (uint64_t)(x11 >> 51); + x13 = (uint64_t)(x11 & UINT64_C(0x7ffffffffffff)); + x14 = (x12 + x2); + x15 = (uint64_t)(x14 >> 51); + x16 = (uint64_t)(x14 & UINT64_C(0x7ffffffffffff)); + x17 = (x15 + x1); + x18 = (uint64_t)(x17 >> 51); + x19 = (uint64_t)(x17 & UINT64_C(0x7ffffffffffff)); + x20 = (x18 * UINT8_C(0x13)); + x21 = (x7 + x20); + x22 = (fiat_25519_uint1)(x21 >> 51); + x23 = (x21 & UINT64_C(0x7ffffffffffff)); + x24 = (x22 + x10); + x25 = (fiat_25519_uint1)(x24 >> 51); + x26 = (x24 & UINT64_C(0x7ffffffffffff)); + x27 = (x25 + x13); + out1[0] = x23; + out1[1] = x26; + out1[2] = x27; + out1[3] = x16; + out1[4] = x19; +} diff --git a/src/ballet/fiat-crypto/curve25519_scalar_64.c b/src/ballet/fiat-crypto/curve25519_scalar_64.c new file mode 100644 index 0000000000..5f26ad286b --- /dev/null +++ b/src/ballet/fiat-crypto/curve25519_scalar_64.c @@ -0,0 +1,2049 @@ +/* Autogenerated: 'src/ExtractionOCaml/word_by_word_montgomery' --inline --static --use-value-barrier 25519_scalar 64 '2^252 + 27742317777372353535851937790883648493' mul square add sub opp from_montgomery to_montgomery nonzero selectznz to_bytes from_bytes one msat divstep divstep_precomp */ +/* curve description: 25519_scalar */ +/* machine_wordsize = 64 (from "64") */ +/* requested operations: mul, square, add, sub, opp, from_montgomery, to_montgomery, nonzero, selectznz, to_bytes, from_bytes, one, msat, divstep, divstep_precomp */ +/* m = 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed (from "2^252 + 27742317777372353535851937790883648493") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ +/* twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) in */ +/* if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^256 */ + +#include +typedef unsigned char fiat_25519_scalar_uint1; +typedef signed char fiat_25519_scalar_int1; +#if defined(__GNUC__) || defined(__clang__) +# define FIAT_25519_SCALAR_FIAT_EXTENSION __extension__ +# define FIAT_25519_SCALAR_FIAT_INLINE __inline__ +#else +# define FIAT_25519_SCALAR_FIAT_EXTENSION +# define FIAT_25519_SCALAR_FIAT_INLINE +#endif + +FIAT_25519_SCALAR_FIAT_EXTENSION typedef signed __int128 fiat_25519_scalar_int128; +FIAT_25519_SCALAR_FIAT_EXTENSION typedef unsigned __int128 fiat_25519_scalar_uint128; + +/* The type fiat_25519_scalar_montgomery_domain_field_element is a field element in the Montgomery domain. */ +/* Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ +typedef uint64_t fiat_25519_scalar_montgomery_domain_field_element[4]; + +/* The type fiat_25519_scalar_non_montgomery_domain_field_element is a field element NOT in the Montgomery domain. */ +/* Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ +typedef uint64_t fiat_25519_scalar_non_montgomery_domain_field_element[4]; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_25519_SCALAR_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint64_t fiat_25519_scalar_value_barrier_u64(uint64_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_25519_scalar_value_barrier_u64(x) (x) +#endif + + +/* + * The function fiat_25519_scalar_addcarryx_u64 is an addition with carry. + * + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^64 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_addcarryx_u64(uint64_t* out1, fiat_25519_scalar_uint1* out2, fiat_25519_scalar_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_25519_scalar_uint128 x1; + uint64_t x2; + fiat_25519_scalar_uint1 x3; + x1 = ((arg1 + (fiat_25519_scalar_uint128)arg2) + arg3); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (fiat_25519_scalar_uint1)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_25519_scalar_subborrowx_u64 is a subtraction with borrow. + * + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^64 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_subborrowx_u64(uint64_t* out1, fiat_25519_scalar_uint1* out2, fiat_25519_scalar_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_25519_scalar_int128 x1; + fiat_25519_scalar_int1 x2; + uint64_t x3; + x1 = ((arg2 - (fiat_25519_scalar_int128)arg1) - arg3); + x2 = (fiat_25519_scalar_int1)(x1 >> 64); + x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + *out1 = x3; + *out2 = (fiat_25519_scalar_uint1)(0x0 - x2); +} + +/* + * The function fiat_25519_scalar_mulx_u64 is a multiplication, returning the full double-width result. + * + * Postconditions: + * out1 = (arg1 * arg2) mod 2^64 + * out2 = ⌊arg1 * arg2 / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0xffffffffffffffff] + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_mulx_u64(uint64_t* out1, uint64_t* out2, uint64_t arg1, uint64_t arg2) { + fiat_25519_scalar_uint128 x1; + uint64_t x2; + uint64_t x3; + x1 = ((fiat_25519_scalar_uint128)arg1 * arg2); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (uint64_t)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_25519_scalar_cmovznz_u64 is a single-word conditional move. + * + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_cmovznz_u64(uint64_t* out1, fiat_25519_scalar_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_25519_scalar_uint1 x1; + uint64_t x2; + uint64_t x3; + x1 = (!(!arg1)); + x2 = ((uint64_t)(fiat_25519_scalar_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + x3 = ((fiat_25519_scalar_value_barrier_u64(x2) & arg3) | (fiat_25519_scalar_value_barrier_u64((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_25519_scalar_mul multiplies two field elements in the Montgomery domain. + * + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_mul(fiat_25519_scalar_montgomery_domain_field_element out1, const fiat_25519_scalar_montgomery_domain_field_element arg1, const fiat_25519_scalar_montgomery_domain_field_element arg2) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + fiat_25519_scalar_uint1 x14; + uint64_t x15; + fiat_25519_scalar_uint1 x16; + uint64_t x17; + fiat_25519_scalar_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + fiat_25519_scalar_uint1 x29; + uint64_t x30; + uint64_t x31; + fiat_25519_scalar_uint1 x32; + uint64_t x33; + fiat_25519_scalar_uint1 x34; + uint64_t x35; + fiat_25519_scalar_uint1 x36; + uint64_t x37; + fiat_25519_scalar_uint1 x38; + uint64_t x39; + fiat_25519_scalar_uint1 x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + fiat_25519_scalar_uint1 x50; + uint64_t x51; + fiat_25519_scalar_uint1 x52; + uint64_t x53; + fiat_25519_scalar_uint1 x54; + uint64_t x55; + uint64_t x56; + fiat_25519_scalar_uint1 x57; + uint64_t x58; + fiat_25519_scalar_uint1 x59; + uint64_t x60; + fiat_25519_scalar_uint1 x61; + uint64_t x62; + fiat_25519_scalar_uint1 x63; + uint64_t x64; + fiat_25519_scalar_uint1 x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + fiat_25519_scalar_uint1 x75; + uint64_t x76; + uint64_t x77; + fiat_25519_scalar_uint1 x78; + uint64_t x79; + fiat_25519_scalar_uint1 x80; + uint64_t x81; + fiat_25519_scalar_uint1 x82; + uint64_t x83; + fiat_25519_scalar_uint1 x84; + uint64_t x85; + fiat_25519_scalar_uint1 x86; + uint64_t x87; + uint64_t x88; + uint64_t x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + fiat_25519_scalar_uint1 x97; + uint64_t x98; + fiat_25519_scalar_uint1 x99; + uint64_t x100; + fiat_25519_scalar_uint1 x101; + uint64_t x102; + uint64_t x103; + fiat_25519_scalar_uint1 x104; + uint64_t x105; + fiat_25519_scalar_uint1 x106; + uint64_t x107; + fiat_25519_scalar_uint1 x108; + uint64_t x109; + fiat_25519_scalar_uint1 x110; + uint64_t x111; + fiat_25519_scalar_uint1 x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + fiat_25519_scalar_uint1 x122; + uint64_t x123; + uint64_t x124; + fiat_25519_scalar_uint1 x125; + uint64_t x126; + fiat_25519_scalar_uint1 x127; + uint64_t x128; + fiat_25519_scalar_uint1 x129; + uint64_t x130; + fiat_25519_scalar_uint1 x131; + uint64_t x132; + fiat_25519_scalar_uint1 x133; + uint64_t x134; + uint64_t x135; + uint64_t x136; + uint64_t x137; + uint64_t x138; + uint64_t x139; + uint64_t x140; + uint64_t x141; + uint64_t x142; + uint64_t x143; + fiat_25519_scalar_uint1 x144; + uint64_t x145; + fiat_25519_scalar_uint1 x146; + uint64_t x147; + fiat_25519_scalar_uint1 x148; + uint64_t x149; + uint64_t x150; + fiat_25519_scalar_uint1 x151; + uint64_t x152; + fiat_25519_scalar_uint1 x153; + uint64_t x154; + fiat_25519_scalar_uint1 x155; + uint64_t x156; + fiat_25519_scalar_uint1 x157; + uint64_t x158; + fiat_25519_scalar_uint1 x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + uint64_t x167; + uint64_t x168; + fiat_25519_scalar_uint1 x169; + uint64_t x170; + uint64_t x171; + fiat_25519_scalar_uint1 x172; + uint64_t x173; + fiat_25519_scalar_uint1 x174; + uint64_t x175; + fiat_25519_scalar_uint1 x176; + uint64_t x177; + fiat_25519_scalar_uint1 x178; + uint64_t x179; + fiat_25519_scalar_uint1 x180; + uint64_t x181; + uint64_t x182; + fiat_25519_scalar_uint1 x183; + uint64_t x184; + fiat_25519_scalar_uint1 x185; + uint64_t x186; + fiat_25519_scalar_uint1 x187; + uint64_t x188; + fiat_25519_scalar_uint1 x189; + uint64_t x190; + fiat_25519_scalar_uint1 x191; + uint64_t x192; + uint64_t x193; + uint64_t x194; + uint64_t x195; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_25519_scalar_mulx_u64(&x5, &x6, x4, (arg2[3])); + fiat_25519_scalar_mulx_u64(&x7, &x8, x4, (arg2[2])); + fiat_25519_scalar_mulx_u64(&x9, &x10, x4, (arg2[1])); + fiat_25519_scalar_mulx_u64(&x11, &x12, x4, (arg2[0])); + fiat_25519_scalar_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_25519_scalar_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_25519_scalar_addcarryx_u64(&x17, &x18, x16, x8, x5); + x19 = (x18 + x6); + fiat_25519_scalar_mulx_u64(&x20, &x21, x11, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x22, &x23, x20, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x24, &x25, x20, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x26, &x27, x20, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x28, &x29, 0x0, x27, x24); + x30 = (x29 + x25); + fiat_25519_scalar_addcarryx_u64(&x31, &x32, 0x0, x11, x26); + fiat_25519_scalar_addcarryx_u64(&x33, &x34, x32, x13, x28); + fiat_25519_scalar_addcarryx_u64(&x35, &x36, x34, x15, x30); + fiat_25519_scalar_addcarryx_u64(&x37, &x38, x36, x17, x22); + fiat_25519_scalar_addcarryx_u64(&x39, &x40, x38, x19, x23); + fiat_25519_scalar_mulx_u64(&x41, &x42, x1, (arg2[3])); + fiat_25519_scalar_mulx_u64(&x43, &x44, x1, (arg2[2])); + fiat_25519_scalar_mulx_u64(&x45, &x46, x1, (arg2[1])); + fiat_25519_scalar_mulx_u64(&x47, &x48, x1, (arg2[0])); + fiat_25519_scalar_addcarryx_u64(&x49, &x50, 0x0, x48, x45); + fiat_25519_scalar_addcarryx_u64(&x51, &x52, x50, x46, x43); + fiat_25519_scalar_addcarryx_u64(&x53, &x54, x52, x44, x41); + x55 = (x54 + x42); + fiat_25519_scalar_addcarryx_u64(&x56, &x57, 0x0, x33, x47); + fiat_25519_scalar_addcarryx_u64(&x58, &x59, x57, x35, x49); + fiat_25519_scalar_addcarryx_u64(&x60, &x61, x59, x37, x51); + fiat_25519_scalar_addcarryx_u64(&x62, &x63, x61, x39, x53); + fiat_25519_scalar_addcarryx_u64(&x64, &x65, x63, x40, x55); + fiat_25519_scalar_mulx_u64(&x66, &x67, x56, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x68, &x69, x66, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x70, &x71, x66, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x72, &x73, x66, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x74, &x75, 0x0, x73, x70); + x76 = (x75 + x71); + fiat_25519_scalar_addcarryx_u64(&x77, &x78, 0x0, x56, x72); + fiat_25519_scalar_addcarryx_u64(&x79, &x80, x78, x58, x74); + fiat_25519_scalar_addcarryx_u64(&x81, &x82, x80, x60, x76); + fiat_25519_scalar_addcarryx_u64(&x83, &x84, x82, x62, x68); + fiat_25519_scalar_addcarryx_u64(&x85, &x86, x84, x64, x69); + x87 = ((uint64_t)x86 + x65); + fiat_25519_scalar_mulx_u64(&x88, &x89, x2, (arg2[3])); + fiat_25519_scalar_mulx_u64(&x90, &x91, x2, (arg2[2])); + fiat_25519_scalar_mulx_u64(&x92, &x93, x2, (arg2[1])); + fiat_25519_scalar_mulx_u64(&x94, &x95, x2, (arg2[0])); + fiat_25519_scalar_addcarryx_u64(&x96, &x97, 0x0, x95, x92); + fiat_25519_scalar_addcarryx_u64(&x98, &x99, x97, x93, x90); + fiat_25519_scalar_addcarryx_u64(&x100, &x101, x99, x91, x88); + x102 = (x101 + x89); + fiat_25519_scalar_addcarryx_u64(&x103, &x104, 0x0, x79, x94); + fiat_25519_scalar_addcarryx_u64(&x105, &x106, x104, x81, x96); + fiat_25519_scalar_addcarryx_u64(&x107, &x108, x106, x83, x98); + fiat_25519_scalar_addcarryx_u64(&x109, &x110, x108, x85, x100); + fiat_25519_scalar_addcarryx_u64(&x111, &x112, x110, x87, x102); + fiat_25519_scalar_mulx_u64(&x113, &x114, x103, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x115, &x116, x113, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x117, &x118, x113, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x119, &x120, x113, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x121, &x122, 0x0, x120, x117); + x123 = (x122 + x118); + fiat_25519_scalar_addcarryx_u64(&x124, &x125, 0x0, x103, x119); + fiat_25519_scalar_addcarryx_u64(&x126, &x127, x125, x105, x121); + fiat_25519_scalar_addcarryx_u64(&x128, &x129, x127, x107, x123); + fiat_25519_scalar_addcarryx_u64(&x130, &x131, x129, x109, x115); + fiat_25519_scalar_addcarryx_u64(&x132, &x133, x131, x111, x116); + x134 = ((uint64_t)x133 + x112); + fiat_25519_scalar_mulx_u64(&x135, &x136, x3, (arg2[3])); + fiat_25519_scalar_mulx_u64(&x137, &x138, x3, (arg2[2])); + fiat_25519_scalar_mulx_u64(&x139, &x140, x3, (arg2[1])); + fiat_25519_scalar_mulx_u64(&x141, &x142, x3, (arg2[0])); + fiat_25519_scalar_addcarryx_u64(&x143, &x144, 0x0, x142, x139); + fiat_25519_scalar_addcarryx_u64(&x145, &x146, x144, x140, x137); + fiat_25519_scalar_addcarryx_u64(&x147, &x148, x146, x138, x135); + x149 = (x148 + x136); + fiat_25519_scalar_addcarryx_u64(&x150, &x151, 0x0, x126, x141); + fiat_25519_scalar_addcarryx_u64(&x152, &x153, x151, x128, x143); + fiat_25519_scalar_addcarryx_u64(&x154, &x155, x153, x130, x145); + fiat_25519_scalar_addcarryx_u64(&x156, &x157, x155, x132, x147); + fiat_25519_scalar_addcarryx_u64(&x158, &x159, x157, x134, x149); + fiat_25519_scalar_mulx_u64(&x160, &x161, x150, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x162, &x163, x160, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x164, &x165, x160, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x166, &x167, x160, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x168, &x169, 0x0, x167, x164); + x170 = (x169 + x165); + fiat_25519_scalar_addcarryx_u64(&x171, &x172, 0x0, x150, x166); + fiat_25519_scalar_addcarryx_u64(&x173, &x174, x172, x152, x168); + fiat_25519_scalar_addcarryx_u64(&x175, &x176, x174, x154, x170); + fiat_25519_scalar_addcarryx_u64(&x177, &x178, x176, x156, x162); + fiat_25519_scalar_addcarryx_u64(&x179, &x180, x178, x158, x163); + x181 = ((uint64_t)x180 + x159); + fiat_25519_scalar_subborrowx_u64(&x182, &x183, 0x0, x173, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_subborrowx_u64(&x184, &x185, x183, x175, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_subborrowx_u64(&x186, &x187, x185, x177, 0x0); + fiat_25519_scalar_subborrowx_u64(&x188, &x189, x187, x179, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_subborrowx_u64(&x190, &x191, x189, x181, 0x0); + fiat_25519_scalar_cmovznz_u64(&x192, x191, x182, x173); + fiat_25519_scalar_cmovznz_u64(&x193, x191, x184, x175); + fiat_25519_scalar_cmovznz_u64(&x194, x191, x186, x177); + fiat_25519_scalar_cmovznz_u64(&x195, x191, x188, x179); + out1[0] = x192; + out1[1] = x193; + out1[2] = x194; + out1[3] = x195; +} + +/* + * The function fiat_25519_scalar_square squares a field element in the Montgomery domain. + * + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m + * 0 ≤ eval out1 < m + * + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_square(fiat_25519_scalar_montgomery_domain_field_element out1, const fiat_25519_scalar_montgomery_domain_field_element arg1) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + fiat_25519_scalar_uint1 x14; + uint64_t x15; + fiat_25519_scalar_uint1 x16; + uint64_t x17; + fiat_25519_scalar_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + fiat_25519_scalar_uint1 x29; + uint64_t x30; + uint64_t x31; + fiat_25519_scalar_uint1 x32; + uint64_t x33; + fiat_25519_scalar_uint1 x34; + uint64_t x35; + fiat_25519_scalar_uint1 x36; + uint64_t x37; + fiat_25519_scalar_uint1 x38; + uint64_t x39; + fiat_25519_scalar_uint1 x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + fiat_25519_scalar_uint1 x50; + uint64_t x51; + fiat_25519_scalar_uint1 x52; + uint64_t x53; + fiat_25519_scalar_uint1 x54; + uint64_t x55; + uint64_t x56; + fiat_25519_scalar_uint1 x57; + uint64_t x58; + fiat_25519_scalar_uint1 x59; + uint64_t x60; + fiat_25519_scalar_uint1 x61; + uint64_t x62; + fiat_25519_scalar_uint1 x63; + uint64_t x64; + fiat_25519_scalar_uint1 x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + fiat_25519_scalar_uint1 x75; + uint64_t x76; + uint64_t x77; + fiat_25519_scalar_uint1 x78; + uint64_t x79; + fiat_25519_scalar_uint1 x80; + uint64_t x81; + fiat_25519_scalar_uint1 x82; + uint64_t x83; + fiat_25519_scalar_uint1 x84; + uint64_t x85; + fiat_25519_scalar_uint1 x86; + uint64_t x87; + uint64_t x88; + uint64_t x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + fiat_25519_scalar_uint1 x97; + uint64_t x98; + fiat_25519_scalar_uint1 x99; + uint64_t x100; + fiat_25519_scalar_uint1 x101; + uint64_t x102; + uint64_t x103; + fiat_25519_scalar_uint1 x104; + uint64_t x105; + fiat_25519_scalar_uint1 x106; + uint64_t x107; + fiat_25519_scalar_uint1 x108; + uint64_t x109; + fiat_25519_scalar_uint1 x110; + uint64_t x111; + fiat_25519_scalar_uint1 x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + fiat_25519_scalar_uint1 x122; + uint64_t x123; + uint64_t x124; + fiat_25519_scalar_uint1 x125; + uint64_t x126; + fiat_25519_scalar_uint1 x127; + uint64_t x128; + fiat_25519_scalar_uint1 x129; + uint64_t x130; + fiat_25519_scalar_uint1 x131; + uint64_t x132; + fiat_25519_scalar_uint1 x133; + uint64_t x134; + uint64_t x135; + uint64_t x136; + uint64_t x137; + uint64_t x138; + uint64_t x139; + uint64_t x140; + uint64_t x141; + uint64_t x142; + uint64_t x143; + fiat_25519_scalar_uint1 x144; + uint64_t x145; + fiat_25519_scalar_uint1 x146; + uint64_t x147; + fiat_25519_scalar_uint1 x148; + uint64_t x149; + uint64_t x150; + fiat_25519_scalar_uint1 x151; + uint64_t x152; + fiat_25519_scalar_uint1 x153; + uint64_t x154; + fiat_25519_scalar_uint1 x155; + uint64_t x156; + fiat_25519_scalar_uint1 x157; + uint64_t x158; + fiat_25519_scalar_uint1 x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + uint64_t x167; + uint64_t x168; + fiat_25519_scalar_uint1 x169; + uint64_t x170; + uint64_t x171; + fiat_25519_scalar_uint1 x172; + uint64_t x173; + fiat_25519_scalar_uint1 x174; + uint64_t x175; + fiat_25519_scalar_uint1 x176; + uint64_t x177; + fiat_25519_scalar_uint1 x178; + uint64_t x179; + fiat_25519_scalar_uint1 x180; + uint64_t x181; + uint64_t x182; + fiat_25519_scalar_uint1 x183; + uint64_t x184; + fiat_25519_scalar_uint1 x185; + uint64_t x186; + fiat_25519_scalar_uint1 x187; + uint64_t x188; + fiat_25519_scalar_uint1 x189; + uint64_t x190; + fiat_25519_scalar_uint1 x191; + uint64_t x192; + uint64_t x193; + uint64_t x194; + uint64_t x195; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_25519_scalar_mulx_u64(&x5, &x6, x4, (arg1[3])); + fiat_25519_scalar_mulx_u64(&x7, &x8, x4, (arg1[2])); + fiat_25519_scalar_mulx_u64(&x9, &x10, x4, (arg1[1])); + fiat_25519_scalar_mulx_u64(&x11, &x12, x4, (arg1[0])); + fiat_25519_scalar_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_25519_scalar_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_25519_scalar_addcarryx_u64(&x17, &x18, x16, x8, x5); + x19 = (x18 + x6); + fiat_25519_scalar_mulx_u64(&x20, &x21, x11, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x22, &x23, x20, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x24, &x25, x20, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x26, &x27, x20, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x28, &x29, 0x0, x27, x24); + x30 = (x29 + x25); + fiat_25519_scalar_addcarryx_u64(&x31, &x32, 0x0, x11, x26); + fiat_25519_scalar_addcarryx_u64(&x33, &x34, x32, x13, x28); + fiat_25519_scalar_addcarryx_u64(&x35, &x36, x34, x15, x30); + fiat_25519_scalar_addcarryx_u64(&x37, &x38, x36, x17, x22); + fiat_25519_scalar_addcarryx_u64(&x39, &x40, x38, x19, x23); + fiat_25519_scalar_mulx_u64(&x41, &x42, x1, (arg1[3])); + fiat_25519_scalar_mulx_u64(&x43, &x44, x1, (arg1[2])); + fiat_25519_scalar_mulx_u64(&x45, &x46, x1, (arg1[1])); + fiat_25519_scalar_mulx_u64(&x47, &x48, x1, (arg1[0])); + fiat_25519_scalar_addcarryx_u64(&x49, &x50, 0x0, x48, x45); + fiat_25519_scalar_addcarryx_u64(&x51, &x52, x50, x46, x43); + fiat_25519_scalar_addcarryx_u64(&x53, &x54, x52, x44, x41); + x55 = (x54 + x42); + fiat_25519_scalar_addcarryx_u64(&x56, &x57, 0x0, x33, x47); + fiat_25519_scalar_addcarryx_u64(&x58, &x59, x57, x35, x49); + fiat_25519_scalar_addcarryx_u64(&x60, &x61, x59, x37, x51); + fiat_25519_scalar_addcarryx_u64(&x62, &x63, x61, x39, x53); + fiat_25519_scalar_addcarryx_u64(&x64, &x65, x63, x40, x55); + fiat_25519_scalar_mulx_u64(&x66, &x67, x56, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x68, &x69, x66, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x70, &x71, x66, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x72, &x73, x66, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x74, &x75, 0x0, x73, x70); + x76 = (x75 + x71); + fiat_25519_scalar_addcarryx_u64(&x77, &x78, 0x0, x56, x72); + fiat_25519_scalar_addcarryx_u64(&x79, &x80, x78, x58, x74); + fiat_25519_scalar_addcarryx_u64(&x81, &x82, x80, x60, x76); + fiat_25519_scalar_addcarryx_u64(&x83, &x84, x82, x62, x68); + fiat_25519_scalar_addcarryx_u64(&x85, &x86, x84, x64, x69); + x87 = ((uint64_t)x86 + x65); + fiat_25519_scalar_mulx_u64(&x88, &x89, x2, (arg1[3])); + fiat_25519_scalar_mulx_u64(&x90, &x91, x2, (arg1[2])); + fiat_25519_scalar_mulx_u64(&x92, &x93, x2, (arg1[1])); + fiat_25519_scalar_mulx_u64(&x94, &x95, x2, (arg1[0])); + fiat_25519_scalar_addcarryx_u64(&x96, &x97, 0x0, x95, x92); + fiat_25519_scalar_addcarryx_u64(&x98, &x99, x97, x93, x90); + fiat_25519_scalar_addcarryx_u64(&x100, &x101, x99, x91, x88); + x102 = (x101 + x89); + fiat_25519_scalar_addcarryx_u64(&x103, &x104, 0x0, x79, x94); + fiat_25519_scalar_addcarryx_u64(&x105, &x106, x104, x81, x96); + fiat_25519_scalar_addcarryx_u64(&x107, &x108, x106, x83, x98); + fiat_25519_scalar_addcarryx_u64(&x109, &x110, x108, x85, x100); + fiat_25519_scalar_addcarryx_u64(&x111, &x112, x110, x87, x102); + fiat_25519_scalar_mulx_u64(&x113, &x114, x103, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x115, &x116, x113, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x117, &x118, x113, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x119, &x120, x113, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x121, &x122, 0x0, x120, x117); + x123 = (x122 + x118); + fiat_25519_scalar_addcarryx_u64(&x124, &x125, 0x0, x103, x119); + fiat_25519_scalar_addcarryx_u64(&x126, &x127, x125, x105, x121); + fiat_25519_scalar_addcarryx_u64(&x128, &x129, x127, x107, x123); + fiat_25519_scalar_addcarryx_u64(&x130, &x131, x129, x109, x115); + fiat_25519_scalar_addcarryx_u64(&x132, &x133, x131, x111, x116); + x134 = ((uint64_t)x133 + x112); + fiat_25519_scalar_mulx_u64(&x135, &x136, x3, (arg1[3])); + fiat_25519_scalar_mulx_u64(&x137, &x138, x3, (arg1[2])); + fiat_25519_scalar_mulx_u64(&x139, &x140, x3, (arg1[1])); + fiat_25519_scalar_mulx_u64(&x141, &x142, x3, (arg1[0])); + fiat_25519_scalar_addcarryx_u64(&x143, &x144, 0x0, x142, x139); + fiat_25519_scalar_addcarryx_u64(&x145, &x146, x144, x140, x137); + fiat_25519_scalar_addcarryx_u64(&x147, &x148, x146, x138, x135); + x149 = (x148 + x136); + fiat_25519_scalar_addcarryx_u64(&x150, &x151, 0x0, x126, x141); + fiat_25519_scalar_addcarryx_u64(&x152, &x153, x151, x128, x143); + fiat_25519_scalar_addcarryx_u64(&x154, &x155, x153, x130, x145); + fiat_25519_scalar_addcarryx_u64(&x156, &x157, x155, x132, x147); + fiat_25519_scalar_addcarryx_u64(&x158, &x159, x157, x134, x149); + fiat_25519_scalar_mulx_u64(&x160, &x161, x150, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x162, &x163, x160, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x164, &x165, x160, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x166, &x167, x160, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x168, &x169, 0x0, x167, x164); + x170 = (x169 + x165); + fiat_25519_scalar_addcarryx_u64(&x171, &x172, 0x0, x150, x166); + fiat_25519_scalar_addcarryx_u64(&x173, &x174, x172, x152, x168); + fiat_25519_scalar_addcarryx_u64(&x175, &x176, x174, x154, x170); + fiat_25519_scalar_addcarryx_u64(&x177, &x178, x176, x156, x162); + fiat_25519_scalar_addcarryx_u64(&x179, &x180, x178, x158, x163); + x181 = ((uint64_t)x180 + x159); + fiat_25519_scalar_subborrowx_u64(&x182, &x183, 0x0, x173, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_subborrowx_u64(&x184, &x185, x183, x175, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_subborrowx_u64(&x186, &x187, x185, x177, 0x0); + fiat_25519_scalar_subborrowx_u64(&x188, &x189, x187, x179, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_subborrowx_u64(&x190, &x191, x189, x181, 0x0); + fiat_25519_scalar_cmovznz_u64(&x192, x191, x182, x173); + fiat_25519_scalar_cmovznz_u64(&x193, x191, x184, x175); + fiat_25519_scalar_cmovznz_u64(&x194, x191, x186, x177); + fiat_25519_scalar_cmovznz_u64(&x195, x191, x188, x179); + out1[0] = x192; + out1[1] = x193; + out1[2] = x194; + out1[3] = x195; +} + +/* + * The function fiat_25519_scalar_add adds two field elements in the Montgomery domain. + * + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_add(fiat_25519_scalar_montgomery_domain_field_element out1, const fiat_25519_scalar_montgomery_domain_field_element arg1, const fiat_25519_scalar_montgomery_domain_field_element arg2) { + uint64_t x1; + fiat_25519_scalar_uint1 x2; + uint64_t x3; + fiat_25519_scalar_uint1 x4; + uint64_t x5; + fiat_25519_scalar_uint1 x6; + uint64_t x7; + fiat_25519_scalar_uint1 x8; + uint64_t x9; + fiat_25519_scalar_uint1 x10; + uint64_t x11; + fiat_25519_scalar_uint1 x12; + uint64_t x13; + fiat_25519_scalar_uint1 x14; + uint64_t x15; + fiat_25519_scalar_uint1 x16; + uint64_t x17; + fiat_25519_scalar_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + fiat_25519_scalar_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_25519_scalar_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_25519_scalar_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_25519_scalar_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_25519_scalar_subborrowx_u64(&x9, &x10, 0x0, x1, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_subborrowx_u64(&x11, &x12, x10, x3, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_subborrowx_u64(&x13, &x14, x12, x5, 0x0); + fiat_25519_scalar_subborrowx_u64(&x15, &x16, x14, x7, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_subborrowx_u64(&x17, &x18, x16, x8, 0x0); + fiat_25519_scalar_cmovznz_u64(&x19, x18, x9, x1); + fiat_25519_scalar_cmovznz_u64(&x20, x18, x11, x3); + fiat_25519_scalar_cmovznz_u64(&x21, x18, x13, x5); + fiat_25519_scalar_cmovznz_u64(&x22, x18, x15, x7); + out1[0] = x19; + out1[1] = x20; + out1[2] = x21; + out1[3] = x22; +} + +/* + * The function fiat_25519_scalar_sub subtracts two field elements in the Montgomery domain. + * + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_sub(fiat_25519_scalar_montgomery_domain_field_element out1, const fiat_25519_scalar_montgomery_domain_field_element arg1, const fiat_25519_scalar_montgomery_domain_field_element arg2) { + uint64_t x1; + fiat_25519_scalar_uint1 x2; + uint64_t x3; + fiat_25519_scalar_uint1 x4; + uint64_t x5; + fiat_25519_scalar_uint1 x6; + uint64_t x7; + fiat_25519_scalar_uint1 x8; + uint64_t x9; + uint64_t x10; + fiat_25519_scalar_uint1 x11; + uint64_t x12; + fiat_25519_scalar_uint1 x13; + uint64_t x14; + fiat_25519_scalar_uint1 x15; + uint64_t x16; + fiat_25519_scalar_uint1 x17; + fiat_25519_scalar_subborrowx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_25519_scalar_subborrowx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_25519_scalar_subborrowx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_25519_scalar_subborrowx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_25519_scalar_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_25519_scalar_addcarryx_u64(&x10, &x11, 0x0, x1, (x9 & UINT64_C(0x5812631a5cf5d3ed))); + fiat_25519_scalar_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT64_C(0x14def9dea2f79cd6))); + fiat_25519_scalar_addcarryx_u64(&x14, &x15, x13, x5, 0x0); + fiat_25519_scalar_addcarryx_u64(&x16, &x17, x15, x7, (x9 & UINT64_C(0x1000000000000000))); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x16; +} + +/* + * The function fiat_25519_scalar_opp negates a field element in the Montgomery domain. + * + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_opp(fiat_25519_scalar_montgomery_domain_field_element out1, const fiat_25519_scalar_montgomery_domain_field_element arg1) { + uint64_t x1; + fiat_25519_scalar_uint1 x2; + uint64_t x3; + fiat_25519_scalar_uint1 x4; + uint64_t x5; + fiat_25519_scalar_uint1 x6; + uint64_t x7; + fiat_25519_scalar_uint1 x8; + uint64_t x9; + uint64_t x10; + fiat_25519_scalar_uint1 x11; + uint64_t x12; + fiat_25519_scalar_uint1 x13; + uint64_t x14; + fiat_25519_scalar_uint1 x15; + uint64_t x16; + fiat_25519_scalar_uint1 x17; + fiat_25519_scalar_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_25519_scalar_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_25519_scalar_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_25519_scalar_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_25519_scalar_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_25519_scalar_addcarryx_u64(&x10, &x11, 0x0, x1, (x9 & UINT64_C(0x5812631a5cf5d3ed))); + fiat_25519_scalar_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT64_C(0x14def9dea2f79cd6))); + fiat_25519_scalar_addcarryx_u64(&x14, &x15, x13, x5, 0x0); + fiat_25519_scalar_addcarryx_u64(&x16, &x17, x15, x7, (x9 & UINT64_C(0x1000000000000000))); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x16; +} + +/* + * The function fiat_25519_scalar_from_montgomery translates a field element out of the Montgomery domain. + * + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^64)⁻¹ mod m)^4) mod m + * 0 ≤ eval out1 < m + * + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_from_montgomery(fiat_25519_scalar_non_montgomery_domain_field_element out1, const fiat_25519_scalar_montgomery_domain_field_element arg1) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + fiat_25519_scalar_uint1 x11; + uint64_t x12; + fiat_25519_scalar_uint1 x13; + uint64_t x14; + fiat_25519_scalar_uint1 x15; + uint64_t x16; + fiat_25519_scalar_uint1 x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + fiat_25519_scalar_uint1 x27; + uint64_t x28; + fiat_25519_scalar_uint1 x29; + uint64_t x30; + fiat_25519_scalar_uint1 x31; + uint64_t x32; + fiat_25519_scalar_uint1 x33; + uint64_t x34; + fiat_25519_scalar_uint1 x35; + uint64_t x36; + fiat_25519_scalar_uint1 x37; + uint64_t x38; + fiat_25519_scalar_uint1 x39; + uint64_t x40; + fiat_25519_scalar_uint1 x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + fiat_25519_scalar_uint1 x51; + uint64_t x52; + fiat_25519_scalar_uint1 x53; + uint64_t x54; + fiat_25519_scalar_uint1 x55; + uint64_t x56; + fiat_25519_scalar_uint1 x57; + uint64_t x58; + fiat_25519_scalar_uint1 x59; + uint64_t x60; + fiat_25519_scalar_uint1 x61; + uint64_t x62; + fiat_25519_scalar_uint1 x63; + uint64_t x64; + fiat_25519_scalar_uint1 x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + fiat_25519_scalar_uint1 x75; + uint64_t x76; + fiat_25519_scalar_uint1 x77; + uint64_t x78; + fiat_25519_scalar_uint1 x79; + uint64_t x80; + fiat_25519_scalar_uint1 x81; + uint64_t x82; + fiat_25519_scalar_uint1 x83; + uint64_t x84; + uint64_t x85; + fiat_25519_scalar_uint1 x86; + uint64_t x87; + fiat_25519_scalar_uint1 x88; + uint64_t x89; + fiat_25519_scalar_uint1 x90; + uint64_t x91; + fiat_25519_scalar_uint1 x92; + uint64_t x93; + fiat_25519_scalar_uint1 x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + uint64_t x98; + x1 = (arg1[0]); + fiat_25519_scalar_mulx_u64(&x2, &x3, x1, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x4, &x5, x2, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x6, &x7, x2, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x8, &x9, x2, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x10, &x11, 0x0, x9, x6); + fiat_25519_scalar_addcarryx_u64(&x12, &x13, 0x0, x1, x8); + fiat_25519_scalar_addcarryx_u64(&x14, &x15, x13, 0x0, x10); + fiat_25519_scalar_addcarryx_u64(&x16, &x17, 0x0, x14, (arg1[1])); + fiat_25519_scalar_mulx_u64(&x18, &x19, x16, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x20, &x21, x18, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x22, &x23, x18, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x24, &x25, x18, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x26, &x27, 0x0, x25, x22); + fiat_25519_scalar_addcarryx_u64(&x28, &x29, 0x0, x16, x24); + fiat_25519_scalar_addcarryx_u64(&x30, &x31, x29, (x17 + (x15 + (x11 + x7))), x26); + fiat_25519_scalar_addcarryx_u64(&x32, &x33, x31, x4, (x27 + x23)); + fiat_25519_scalar_addcarryx_u64(&x34, &x35, x33, x5, x20); + fiat_25519_scalar_addcarryx_u64(&x36, &x37, 0x0, x30, (arg1[2])); + fiat_25519_scalar_addcarryx_u64(&x38, &x39, x37, x32, 0x0); + fiat_25519_scalar_addcarryx_u64(&x40, &x41, x39, x34, 0x0); + fiat_25519_scalar_mulx_u64(&x42, &x43, x36, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x44, &x45, x42, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x46, &x47, x42, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x48, &x49, x42, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x50, &x51, 0x0, x49, x46); + fiat_25519_scalar_addcarryx_u64(&x52, &x53, 0x0, x36, x48); + fiat_25519_scalar_addcarryx_u64(&x54, &x55, x53, x38, x50); + fiat_25519_scalar_addcarryx_u64(&x56, &x57, x55, x40, (x51 + x47)); + fiat_25519_scalar_addcarryx_u64(&x58, &x59, x57, (x41 + (x35 + x21)), x44); + fiat_25519_scalar_addcarryx_u64(&x60, &x61, 0x0, x54, (arg1[3])); + fiat_25519_scalar_addcarryx_u64(&x62, &x63, x61, x56, 0x0); + fiat_25519_scalar_addcarryx_u64(&x64, &x65, x63, x58, 0x0); + fiat_25519_scalar_mulx_u64(&x66, &x67, x60, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x68, &x69, x66, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x70, &x71, x66, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x72, &x73, x66, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x74, &x75, 0x0, x73, x70); + fiat_25519_scalar_addcarryx_u64(&x76, &x77, 0x0, x60, x72); + fiat_25519_scalar_addcarryx_u64(&x78, &x79, x77, x62, x74); + fiat_25519_scalar_addcarryx_u64(&x80, &x81, x79, x64, (x75 + x71)); + fiat_25519_scalar_addcarryx_u64(&x82, &x83, x81, (x65 + (x59 + x45)), x68); + x84 = (x83 + x69); + fiat_25519_scalar_subborrowx_u64(&x85, &x86, 0x0, x78, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_subborrowx_u64(&x87, &x88, x86, x80, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_subborrowx_u64(&x89, &x90, x88, x82, 0x0); + fiat_25519_scalar_subborrowx_u64(&x91, &x92, x90, x84, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_subborrowx_u64(&x93, &x94, x92, 0x0, 0x0); + fiat_25519_scalar_cmovznz_u64(&x95, x94, x85, x78); + fiat_25519_scalar_cmovznz_u64(&x96, x94, x87, x80); + fiat_25519_scalar_cmovznz_u64(&x97, x94, x89, x82); + fiat_25519_scalar_cmovznz_u64(&x98, x94, x91, x84); + out1[0] = x95; + out1[1] = x96; + out1[2] = x97; + out1[3] = x98; +} + +/* + * The function fiat_25519_scalar_to_montgomery translates a field element into the Montgomery domain. + * + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_to_montgomery(fiat_25519_scalar_montgomery_domain_field_element out1, const fiat_25519_scalar_non_montgomery_domain_field_element arg1) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + fiat_25519_scalar_uint1 x14; + uint64_t x15; + fiat_25519_scalar_uint1 x16; + uint64_t x17; + fiat_25519_scalar_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + fiat_25519_scalar_uint1 x28; + uint64_t x29; + fiat_25519_scalar_uint1 x30; + uint64_t x31; + fiat_25519_scalar_uint1 x32; + uint64_t x33; + fiat_25519_scalar_uint1 x34; + uint64_t x35; + fiat_25519_scalar_uint1 x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + fiat_25519_scalar_uint1 x46; + uint64_t x47; + fiat_25519_scalar_uint1 x48; + uint64_t x49; + fiat_25519_scalar_uint1 x50; + uint64_t x51; + fiat_25519_scalar_uint1 x52; + uint64_t x53; + fiat_25519_scalar_uint1 x54; + uint64_t x55; + fiat_25519_scalar_uint1 x56; + uint64_t x57; + fiat_25519_scalar_uint1 x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint64_t x66; + uint64_t x67; + fiat_25519_scalar_uint1 x68; + uint64_t x69; + fiat_25519_scalar_uint1 x70; + uint64_t x71; + fiat_25519_scalar_uint1 x72; + uint64_t x73; + fiat_25519_scalar_uint1 x74; + uint64_t x75; + fiat_25519_scalar_uint1 x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + uint64_t x83; + uint64_t x84; + uint64_t x85; + fiat_25519_scalar_uint1 x86; + uint64_t x87; + fiat_25519_scalar_uint1 x88; + uint64_t x89; + fiat_25519_scalar_uint1 x90; + uint64_t x91; + fiat_25519_scalar_uint1 x92; + uint64_t x93; + fiat_25519_scalar_uint1 x94; + uint64_t x95; + fiat_25519_scalar_uint1 x96; + uint64_t x97; + fiat_25519_scalar_uint1 x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + fiat_25519_scalar_uint1 x108; + uint64_t x109; + fiat_25519_scalar_uint1 x110; + uint64_t x111; + fiat_25519_scalar_uint1 x112; + uint64_t x113; + fiat_25519_scalar_uint1 x114; + uint64_t x115; + fiat_25519_scalar_uint1 x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + uint64_t x122; + uint64_t x123; + uint64_t x124; + uint64_t x125; + fiat_25519_scalar_uint1 x126; + uint64_t x127; + fiat_25519_scalar_uint1 x128; + uint64_t x129; + fiat_25519_scalar_uint1 x130; + uint64_t x131; + fiat_25519_scalar_uint1 x132; + uint64_t x133; + fiat_25519_scalar_uint1 x134; + uint64_t x135; + fiat_25519_scalar_uint1 x136; + uint64_t x137; + fiat_25519_scalar_uint1 x138; + uint64_t x139; + uint64_t x140; + uint64_t x141; + uint64_t x142; + uint64_t x143; + uint64_t x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + fiat_25519_scalar_uint1 x148; + uint64_t x149; + fiat_25519_scalar_uint1 x150; + uint64_t x151; + fiat_25519_scalar_uint1 x152; + uint64_t x153; + fiat_25519_scalar_uint1 x154; + uint64_t x155; + fiat_25519_scalar_uint1 x156; + uint64_t x157; + uint64_t x158; + fiat_25519_scalar_uint1 x159; + uint64_t x160; + fiat_25519_scalar_uint1 x161; + uint64_t x162; + fiat_25519_scalar_uint1 x163; + uint64_t x164; + fiat_25519_scalar_uint1 x165; + uint64_t x166; + fiat_25519_scalar_uint1 x167; + uint64_t x168; + uint64_t x169; + uint64_t x170; + uint64_t x171; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_25519_scalar_mulx_u64(&x5, &x6, x4, UINT64_C(0x399411b7c309a3d)); + fiat_25519_scalar_mulx_u64(&x7, &x8, x4, UINT64_C(0xceec73d217f5be65)); + fiat_25519_scalar_mulx_u64(&x9, &x10, x4, UINT64_C(0xd00e1ba768859347)); + fiat_25519_scalar_mulx_u64(&x11, &x12, x4, UINT64_C(0xa40611e3449c0f01)); + fiat_25519_scalar_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_25519_scalar_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_25519_scalar_addcarryx_u64(&x17, &x18, x16, x8, x5); + fiat_25519_scalar_mulx_u64(&x19, &x20, x11, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x21, &x22, x19, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x23, &x24, x19, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x25, &x26, x19, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x27, &x28, 0x0, x26, x23); + fiat_25519_scalar_addcarryx_u64(&x29, &x30, 0x0, x11, x25); + fiat_25519_scalar_addcarryx_u64(&x31, &x32, x30, x13, x27); + fiat_25519_scalar_addcarryx_u64(&x33, &x34, x32, x15, (x28 + x24)); + fiat_25519_scalar_addcarryx_u64(&x35, &x36, x34, x17, x21); + fiat_25519_scalar_mulx_u64(&x37, &x38, x1, UINT64_C(0x399411b7c309a3d)); + fiat_25519_scalar_mulx_u64(&x39, &x40, x1, UINT64_C(0xceec73d217f5be65)); + fiat_25519_scalar_mulx_u64(&x41, &x42, x1, UINT64_C(0xd00e1ba768859347)); + fiat_25519_scalar_mulx_u64(&x43, &x44, x1, UINT64_C(0xa40611e3449c0f01)); + fiat_25519_scalar_addcarryx_u64(&x45, &x46, 0x0, x44, x41); + fiat_25519_scalar_addcarryx_u64(&x47, &x48, x46, x42, x39); + fiat_25519_scalar_addcarryx_u64(&x49, &x50, x48, x40, x37); + fiat_25519_scalar_addcarryx_u64(&x51, &x52, 0x0, x31, x43); + fiat_25519_scalar_addcarryx_u64(&x53, &x54, x52, x33, x45); + fiat_25519_scalar_addcarryx_u64(&x55, &x56, x54, x35, x47); + fiat_25519_scalar_addcarryx_u64(&x57, &x58, x56, ((x36 + (x18 + x6)) + x22), x49); + fiat_25519_scalar_mulx_u64(&x59, &x60, x51, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x61, &x62, x59, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x63, &x64, x59, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x65, &x66, x59, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x67, &x68, 0x0, x66, x63); + fiat_25519_scalar_addcarryx_u64(&x69, &x70, 0x0, x51, x65); + fiat_25519_scalar_addcarryx_u64(&x71, &x72, x70, x53, x67); + fiat_25519_scalar_addcarryx_u64(&x73, &x74, x72, x55, (x68 + x64)); + fiat_25519_scalar_addcarryx_u64(&x75, &x76, x74, x57, x61); + fiat_25519_scalar_mulx_u64(&x77, &x78, x2, UINT64_C(0x399411b7c309a3d)); + fiat_25519_scalar_mulx_u64(&x79, &x80, x2, UINT64_C(0xceec73d217f5be65)); + fiat_25519_scalar_mulx_u64(&x81, &x82, x2, UINT64_C(0xd00e1ba768859347)); + fiat_25519_scalar_mulx_u64(&x83, &x84, x2, UINT64_C(0xa40611e3449c0f01)); + fiat_25519_scalar_addcarryx_u64(&x85, &x86, 0x0, x84, x81); + fiat_25519_scalar_addcarryx_u64(&x87, &x88, x86, x82, x79); + fiat_25519_scalar_addcarryx_u64(&x89, &x90, x88, x80, x77); + fiat_25519_scalar_addcarryx_u64(&x91, &x92, 0x0, x71, x83); + fiat_25519_scalar_addcarryx_u64(&x93, &x94, x92, x73, x85); + fiat_25519_scalar_addcarryx_u64(&x95, &x96, x94, x75, x87); + fiat_25519_scalar_addcarryx_u64(&x97, &x98, x96, ((x76 + (x58 + (x50 + x38))) + x62), x89); + fiat_25519_scalar_mulx_u64(&x99, &x100, x91, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x101, &x102, x99, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x103, &x104, x99, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x105, &x106, x99, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x107, &x108, 0x0, x106, x103); + fiat_25519_scalar_addcarryx_u64(&x109, &x110, 0x0, x91, x105); + fiat_25519_scalar_addcarryx_u64(&x111, &x112, x110, x93, x107); + fiat_25519_scalar_addcarryx_u64(&x113, &x114, x112, x95, (x108 + x104)); + fiat_25519_scalar_addcarryx_u64(&x115, &x116, x114, x97, x101); + fiat_25519_scalar_mulx_u64(&x117, &x118, x3, UINT64_C(0x399411b7c309a3d)); + fiat_25519_scalar_mulx_u64(&x119, &x120, x3, UINT64_C(0xceec73d217f5be65)); + fiat_25519_scalar_mulx_u64(&x121, &x122, x3, UINT64_C(0xd00e1ba768859347)); + fiat_25519_scalar_mulx_u64(&x123, &x124, x3, UINT64_C(0xa40611e3449c0f01)); + fiat_25519_scalar_addcarryx_u64(&x125, &x126, 0x0, x124, x121); + fiat_25519_scalar_addcarryx_u64(&x127, &x128, x126, x122, x119); + fiat_25519_scalar_addcarryx_u64(&x129, &x130, x128, x120, x117); + fiat_25519_scalar_addcarryx_u64(&x131, &x132, 0x0, x111, x123); + fiat_25519_scalar_addcarryx_u64(&x133, &x134, x132, x113, x125); + fiat_25519_scalar_addcarryx_u64(&x135, &x136, x134, x115, x127); + fiat_25519_scalar_addcarryx_u64(&x137, &x138, x136, ((x116 + (x98 + (x90 + x78))) + x102), x129); + fiat_25519_scalar_mulx_u64(&x139, &x140, x131, UINT64_C(0xd2b51da312547e1b)); + fiat_25519_scalar_mulx_u64(&x141, &x142, x139, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_mulx_u64(&x143, &x144, x139, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_mulx_u64(&x145, &x146, x139, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_addcarryx_u64(&x147, &x148, 0x0, x146, x143); + fiat_25519_scalar_addcarryx_u64(&x149, &x150, 0x0, x131, x145); + fiat_25519_scalar_addcarryx_u64(&x151, &x152, x150, x133, x147); + fiat_25519_scalar_addcarryx_u64(&x153, &x154, x152, x135, (x148 + x144)); + fiat_25519_scalar_addcarryx_u64(&x155, &x156, x154, x137, x141); + x157 = ((x156 + (x138 + (x130 + x118))) + x142); + fiat_25519_scalar_subborrowx_u64(&x158, &x159, 0x0, x151, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_subborrowx_u64(&x160, &x161, x159, x153, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_subborrowx_u64(&x162, &x163, x161, x155, 0x0); + fiat_25519_scalar_subborrowx_u64(&x164, &x165, x163, x157, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_subborrowx_u64(&x166, &x167, x165, 0x0, 0x0); + fiat_25519_scalar_cmovznz_u64(&x168, x167, x158, x151); + fiat_25519_scalar_cmovznz_u64(&x169, x167, x160, x153); + fiat_25519_scalar_cmovznz_u64(&x170, x167, x162, x155); + fiat_25519_scalar_cmovznz_u64(&x171, x167, x164, x157); + out1[0] = x168; + out1[1] = x169; + out1[2] = x170; + out1[3] = x171; +} + +/* + * The function fiat_25519_scalar_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_nonzero(uint64_t* out1, const uint64_t arg1[4]) { + uint64_t x1; + x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | (arg1[3])))); + *out1 = x1; +} + +/* + * The function fiat_25519_scalar_selectznz is a multi-limb conditional select. + * + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_selectznz(uint64_t out1[4], fiat_25519_scalar_uint1 arg1, const uint64_t arg2[4], const uint64_t arg3[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + fiat_25519_scalar_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); + fiat_25519_scalar_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); + fiat_25519_scalar_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); + fiat_25519_scalar_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; +} + +/* + * The function fiat_25519_scalar_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0x1fffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x1f]] + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_to_bytes(uint8_t out1[32], const uint64_t arg1[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint8_t x5; + uint64_t x6; + uint8_t x7; + uint64_t x8; + uint8_t x9; + uint64_t x10; + uint8_t x11; + uint64_t x12; + uint8_t x13; + uint64_t x14; + uint8_t x15; + uint64_t x16; + uint8_t x17; + uint8_t x18; + uint8_t x19; + uint64_t x20; + uint8_t x21; + uint64_t x22; + uint8_t x23; + uint64_t x24; + uint8_t x25; + uint64_t x26; + uint8_t x27; + uint64_t x28; + uint8_t x29; + uint64_t x30; + uint8_t x31; + uint8_t x32; + uint8_t x33; + uint64_t x34; + uint8_t x35; + uint64_t x36; + uint8_t x37; + uint64_t x38; + uint8_t x39; + uint64_t x40; + uint8_t x41; + uint64_t x42; + uint8_t x43; + uint64_t x44; + uint8_t x45; + uint8_t x46; + uint8_t x47; + uint64_t x48; + uint8_t x49; + uint64_t x50; + uint8_t x51; + uint64_t x52; + uint8_t x53; + uint64_t x54; + uint8_t x55; + uint64_t x56; + uint8_t x57; + uint64_t x58; + uint8_t x59; + uint8_t x60; + x1 = (arg1[3]); + x2 = (arg1[2]); + x3 = (arg1[1]); + x4 = (arg1[0]); + x5 = (uint8_t)(x4 & UINT8_C(0xff)); + x6 = (x4 >> 8); + x7 = (uint8_t)(x6 & UINT8_C(0xff)); + x8 = (x6 >> 8); + x9 = (uint8_t)(x8 & UINT8_C(0xff)); + x10 = (x8 >> 8); + x11 = (uint8_t)(x10 & UINT8_C(0xff)); + x12 = (x10 >> 8); + x13 = (uint8_t)(x12 & UINT8_C(0xff)); + x14 = (x12 >> 8); + x15 = (uint8_t)(x14 & UINT8_C(0xff)); + x16 = (x14 >> 8); + x17 = (uint8_t)(x16 & UINT8_C(0xff)); + x18 = (uint8_t)(x16 >> 8); + x19 = (uint8_t)(x3 & UINT8_C(0xff)); + x20 = (x3 >> 8); + x21 = (uint8_t)(x20 & UINT8_C(0xff)); + x22 = (x20 >> 8); + x23 = (uint8_t)(x22 & UINT8_C(0xff)); + x24 = (x22 >> 8); + x25 = (uint8_t)(x24 & UINT8_C(0xff)); + x26 = (x24 >> 8); + x27 = (uint8_t)(x26 & UINT8_C(0xff)); + x28 = (x26 >> 8); + x29 = (uint8_t)(x28 & UINT8_C(0xff)); + x30 = (x28 >> 8); + x31 = (uint8_t)(x30 & UINT8_C(0xff)); + x32 = (uint8_t)(x30 >> 8); + x33 = (uint8_t)(x2 & UINT8_C(0xff)); + x34 = (x2 >> 8); + x35 = (uint8_t)(x34 & UINT8_C(0xff)); + x36 = (x34 >> 8); + x37 = (uint8_t)(x36 & UINT8_C(0xff)); + x38 = (x36 >> 8); + x39 = (uint8_t)(x38 & UINT8_C(0xff)); + x40 = (x38 >> 8); + x41 = (uint8_t)(x40 & UINT8_C(0xff)); + x42 = (x40 >> 8); + x43 = (uint8_t)(x42 & UINT8_C(0xff)); + x44 = (x42 >> 8); + x45 = (uint8_t)(x44 & UINT8_C(0xff)); + x46 = (uint8_t)(x44 >> 8); + x47 = (uint8_t)(x1 & UINT8_C(0xff)); + x48 = (x1 >> 8); + x49 = (uint8_t)(x48 & UINT8_C(0xff)); + x50 = (x48 >> 8); + x51 = (uint8_t)(x50 & UINT8_C(0xff)); + x52 = (x50 >> 8); + x53 = (uint8_t)(x52 & UINT8_C(0xff)); + x54 = (x52 >> 8); + x55 = (uint8_t)(x54 & UINT8_C(0xff)); + x56 = (x54 >> 8); + x57 = (uint8_t)(x56 & UINT8_C(0xff)); + x58 = (x56 >> 8); + x59 = (uint8_t)(x58 & UINT8_C(0xff)); + x60 = (uint8_t)(x58 >> 8); + out1[0] = x5; + out1[1] = x7; + out1[2] = x9; + out1[3] = x11; + out1[4] = x13; + out1[5] = x15; + out1[6] = x17; + out1[7] = x18; + out1[8] = x19; + out1[9] = x21; + out1[10] = x23; + out1[11] = x25; + out1[12] = x27; + out1[13] = x29; + out1[14] = x31; + out1[15] = x32; + out1[16] = x33; + out1[17] = x35; + out1[18] = x37; + out1[19] = x39; + out1[20] = x41; + out1[21] = x43; + out1[22] = x45; + out1[23] = x46; + out1[24] = x47; + out1[25] = x49; + out1[26] = x51; + out1[27] = x53; + out1[28] = x55; + out1[29] = x57; + out1[30] = x59; + out1[31] = x60; +} + +/* + * The function fiat_25519_scalar_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x1f]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0x1fffffffffffffff]] + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_from_bytes(uint64_t out1[4], const uint8_t arg1[32]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint8_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint8_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint8_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint8_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + x1 = ((uint64_t)(arg1[31]) << 56); + x2 = ((uint64_t)(arg1[30]) << 48); + x3 = ((uint64_t)(arg1[29]) << 40); + x4 = ((uint64_t)(arg1[28]) << 32); + x5 = ((uint64_t)(arg1[27]) << 24); + x6 = ((uint64_t)(arg1[26]) << 16); + x7 = ((uint64_t)(arg1[25]) << 8); + x8 = (arg1[24]); + x9 = ((uint64_t)(arg1[23]) << 56); + x10 = ((uint64_t)(arg1[22]) << 48); + x11 = ((uint64_t)(arg1[21]) << 40); + x12 = ((uint64_t)(arg1[20]) << 32); + x13 = ((uint64_t)(arg1[19]) << 24); + x14 = ((uint64_t)(arg1[18]) << 16); + x15 = ((uint64_t)(arg1[17]) << 8); + x16 = (arg1[16]); + x17 = ((uint64_t)(arg1[15]) << 56); + x18 = ((uint64_t)(arg1[14]) << 48); + x19 = ((uint64_t)(arg1[13]) << 40); + x20 = ((uint64_t)(arg1[12]) << 32); + x21 = ((uint64_t)(arg1[11]) << 24); + x22 = ((uint64_t)(arg1[10]) << 16); + x23 = ((uint64_t)(arg1[9]) << 8); + x24 = (arg1[8]); + x25 = ((uint64_t)(arg1[7]) << 56); + x26 = ((uint64_t)(arg1[6]) << 48); + x27 = ((uint64_t)(arg1[5]) << 40); + x28 = ((uint64_t)(arg1[4]) << 32); + x29 = ((uint64_t)(arg1[3]) << 24); + x30 = ((uint64_t)(arg1[2]) << 16); + x31 = ((uint64_t)(arg1[1]) << 8); + x32 = (arg1[0]); + x33 = (x31 + (uint64_t)x32); + x34 = (x30 + x33); + x35 = (x29 + x34); + x36 = (x28 + x35); + x37 = (x27 + x36); + x38 = (x26 + x37); + x39 = (x25 + x38); + x40 = (x23 + (uint64_t)x24); + x41 = (x22 + x40); + x42 = (x21 + x41); + x43 = (x20 + x42); + x44 = (x19 + x43); + x45 = (x18 + x44); + x46 = (x17 + x45); + x47 = (x15 + (uint64_t)x16); + x48 = (x14 + x47); + x49 = (x13 + x48); + x50 = (x12 + x49); + x51 = (x11 + x50); + x52 = (x10 + x51); + x53 = (x9 + x52); + x54 = (x7 + (uint64_t)x8); + x55 = (x6 + x54); + x56 = (x5 + x55); + x57 = (x4 + x56); + x58 = (x3 + x57); + x59 = (x2 + x58); + x60 = (x1 + x59); + out1[0] = x39; + out1[1] = x46; + out1[2] = x53; + out1[3] = x60; +} + +/* + * The function fiat_25519_scalar_set_one returns the field element one in the Montgomery domain. + * + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_set_one(fiat_25519_scalar_montgomery_domain_field_element out1) { + out1[0] = UINT64_C(0xd6ec31748d98951d); + out1[1] = UINT64_C(0xc6ef5bf4737dcf70); + out1[2] = UINT64_C(0xfffffffffffffffe); + out1[3] = UINT64_C(0xfffffffffffffff); +} + +/* + * The function fiat_25519_scalar_msat returns the saturated representation of the prime modulus. + * + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_msat(uint64_t out1[5]) { + out1[0] = UINT64_C(0x5812631a5cf5d3ed); + out1[1] = UINT64_C(0x14def9dea2f79cd6); + out1[2] = 0x0; + out1[3] = UINT64_C(0x1000000000000000); + out1[4] = 0x0; +} + +/* + * The function fiat_25519_scalar_divstep computes a divstep. + * + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_divstep(uint64_t* out1, uint64_t out2[5], uint64_t out3[5], uint64_t out4[4], uint64_t out5[4], uint64_t arg1, const uint64_t arg2[5], const uint64_t arg3[5], const uint64_t arg4[4], const uint64_t arg5[4]) { + uint64_t x1; + fiat_25519_scalar_uint1 x2; + fiat_25519_scalar_uint1 x3; + uint64_t x4; + fiat_25519_scalar_uint1 x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + fiat_25519_scalar_uint1 x13; + uint64_t x14; + fiat_25519_scalar_uint1 x15; + uint64_t x16; + fiat_25519_scalar_uint1 x17; + uint64_t x18; + fiat_25519_scalar_uint1 x19; + uint64_t x20; + fiat_25519_scalar_uint1 x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + fiat_25519_scalar_uint1 x32; + uint64_t x33; + fiat_25519_scalar_uint1 x34; + uint64_t x35; + fiat_25519_scalar_uint1 x36; + uint64_t x37; + fiat_25519_scalar_uint1 x38; + uint64_t x39; + fiat_25519_scalar_uint1 x40; + uint64_t x41; + fiat_25519_scalar_uint1 x42; + uint64_t x43; + fiat_25519_scalar_uint1 x44; + uint64_t x45; + fiat_25519_scalar_uint1 x46; + uint64_t x47; + fiat_25519_scalar_uint1 x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + fiat_25519_scalar_uint1 x54; + uint64_t x55; + fiat_25519_scalar_uint1 x56; + uint64_t x57; + fiat_25519_scalar_uint1 x58; + uint64_t x59; + fiat_25519_scalar_uint1 x60; + uint64_t x61; + uint64_t x62; + fiat_25519_scalar_uint1 x63; + uint64_t x64; + fiat_25519_scalar_uint1 x65; + uint64_t x66; + fiat_25519_scalar_uint1 x67; + uint64_t x68; + fiat_25519_scalar_uint1 x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + fiat_25519_scalar_uint1 x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + fiat_25519_scalar_uint1 x81; + uint64_t x82; + fiat_25519_scalar_uint1 x83; + uint64_t x84; + fiat_25519_scalar_uint1 x85; + uint64_t x86; + fiat_25519_scalar_uint1 x87; + uint64_t x88; + fiat_25519_scalar_uint1 x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + fiat_25519_scalar_uint1 x95; + uint64_t x96; + fiat_25519_scalar_uint1 x97; + uint64_t x98; + fiat_25519_scalar_uint1 x99; + uint64_t x100; + fiat_25519_scalar_uint1 x101; + uint64_t x102; + fiat_25519_scalar_uint1 x103; + uint64_t x104; + fiat_25519_scalar_uint1 x105; + uint64_t x106; + fiat_25519_scalar_uint1 x107; + uint64_t x108; + fiat_25519_scalar_uint1 x109; + uint64_t x110; + fiat_25519_scalar_uint1 x111; + uint64_t x112; + fiat_25519_scalar_uint1 x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + uint64_t x122; + uint64_t x123; + uint64_t x124; + uint64_t x125; + uint64_t x126; + fiat_25519_scalar_addcarryx_u64(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_25519_scalar_uint1)((fiat_25519_scalar_uint1)(x1 >> 63) & (fiat_25519_scalar_uint1)((arg3[0]) & 0x1)); + fiat_25519_scalar_addcarryx_u64(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_25519_scalar_cmovznz_u64(&x6, x3, arg1, x4); + fiat_25519_scalar_cmovznz_u64(&x7, x3, (arg2[0]), (arg3[0])); + fiat_25519_scalar_cmovznz_u64(&x8, x3, (arg2[1]), (arg3[1])); + fiat_25519_scalar_cmovznz_u64(&x9, x3, (arg2[2]), (arg3[2])); + fiat_25519_scalar_cmovznz_u64(&x10, x3, (arg2[3]), (arg3[3])); + fiat_25519_scalar_cmovznz_u64(&x11, x3, (arg2[4]), (arg3[4])); + fiat_25519_scalar_addcarryx_u64(&x12, &x13, 0x0, 0x1, (~(arg2[0]))); + fiat_25519_scalar_addcarryx_u64(&x14, &x15, x13, 0x0, (~(arg2[1]))); + fiat_25519_scalar_addcarryx_u64(&x16, &x17, x15, 0x0, (~(arg2[2]))); + fiat_25519_scalar_addcarryx_u64(&x18, &x19, x17, 0x0, (~(arg2[3]))); + fiat_25519_scalar_addcarryx_u64(&x20, &x21, x19, 0x0, (~(arg2[4]))); + fiat_25519_scalar_cmovznz_u64(&x22, x3, (arg3[0]), x12); + fiat_25519_scalar_cmovznz_u64(&x23, x3, (arg3[1]), x14); + fiat_25519_scalar_cmovznz_u64(&x24, x3, (arg3[2]), x16); + fiat_25519_scalar_cmovznz_u64(&x25, x3, (arg3[3]), x18); + fiat_25519_scalar_cmovznz_u64(&x26, x3, (arg3[4]), x20); + fiat_25519_scalar_cmovznz_u64(&x27, x3, (arg4[0]), (arg5[0])); + fiat_25519_scalar_cmovznz_u64(&x28, x3, (arg4[1]), (arg5[1])); + fiat_25519_scalar_cmovznz_u64(&x29, x3, (arg4[2]), (arg5[2])); + fiat_25519_scalar_cmovznz_u64(&x30, x3, (arg4[3]), (arg5[3])); + fiat_25519_scalar_addcarryx_u64(&x31, &x32, 0x0, x27, x27); + fiat_25519_scalar_addcarryx_u64(&x33, &x34, x32, x28, x28); + fiat_25519_scalar_addcarryx_u64(&x35, &x36, x34, x29, x29); + fiat_25519_scalar_addcarryx_u64(&x37, &x38, x36, x30, x30); + fiat_25519_scalar_subborrowx_u64(&x39, &x40, 0x0, x31, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_subborrowx_u64(&x41, &x42, x40, x33, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_subborrowx_u64(&x43, &x44, x42, x35, 0x0); + fiat_25519_scalar_subborrowx_u64(&x45, &x46, x44, x37, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_subborrowx_u64(&x47, &x48, x46, x38, 0x0); + x49 = (arg4[3]); + x50 = (arg4[2]); + x51 = (arg4[1]); + x52 = (arg4[0]); + fiat_25519_scalar_subborrowx_u64(&x53, &x54, 0x0, 0x0, x52); + fiat_25519_scalar_subborrowx_u64(&x55, &x56, x54, 0x0, x51); + fiat_25519_scalar_subborrowx_u64(&x57, &x58, x56, 0x0, x50); + fiat_25519_scalar_subborrowx_u64(&x59, &x60, x58, 0x0, x49); + fiat_25519_scalar_cmovznz_u64(&x61, x60, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_25519_scalar_addcarryx_u64(&x62, &x63, 0x0, x53, (x61 & UINT64_C(0x5812631a5cf5d3ed))); + fiat_25519_scalar_addcarryx_u64(&x64, &x65, x63, x55, (x61 & UINT64_C(0x14def9dea2f79cd6))); + fiat_25519_scalar_addcarryx_u64(&x66, &x67, x65, x57, 0x0); + fiat_25519_scalar_addcarryx_u64(&x68, &x69, x67, x59, (x61 & UINT64_C(0x1000000000000000))); + fiat_25519_scalar_cmovznz_u64(&x70, x3, (arg5[0]), x62); + fiat_25519_scalar_cmovznz_u64(&x71, x3, (arg5[1]), x64); + fiat_25519_scalar_cmovznz_u64(&x72, x3, (arg5[2]), x66); + fiat_25519_scalar_cmovznz_u64(&x73, x3, (arg5[3]), x68); + x74 = (fiat_25519_scalar_uint1)(x22 & 0x1); + fiat_25519_scalar_cmovznz_u64(&x75, x74, 0x0, x7); + fiat_25519_scalar_cmovznz_u64(&x76, x74, 0x0, x8); + fiat_25519_scalar_cmovznz_u64(&x77, x74, 0x0, x9); + fiat_25519_scalar_cmovznz_u64(&x78, x74, 0x0, x10); + fiat_25519_scalar_cmovznz_u64(&x79, x74, 0x0, x11); + fiat_25519_scalar_addcarryx_u64(&x80, &x81, 0x0, x22, x75); + fiat_25519_scalar_addcarryx_u64(&x82, &x83, x81, x23, x76); + fiat_25519_scalar_addcarryx_u64(&x84, &x85, x83, x24, x77); + fiat_25519_scalar_addcarryx_u64(&x86, &x87, x85, x25, x78); + fiat_25519_scalar_addcarryx_u64(&x88, &x89, x87, x26, x79); + fiat_25519_scalar_cmovznz_u64(&x90, x74, 0x0, x27); + fiat_25519_scalar_cmovznz_u64(&x91, x74, 0x0, x28); + fiat_25519_scalar_cmovznz_u64(&x92, x74, 0x0, x29); + fiat_25519_scalar_cmovznz_u64(&x93, x74, 0x0, x30); + fiat_25519_scalar_addcarryx_u64(&x94, &x95, 0x0, x70, x90); + fiat_25519_scalar_addcarryx_u64(&x96, &x97, x95, x71, x91); + fiat_25519_scalar_addcarryx_u64(&x98, &x99, x97, x72, x92); + fiat_25519_scalar_addcarryx_u64(&x100, &x101, x99, x73, x93); + fiat_25519_scalar_subborrowx_u64(&x102, &x103, 0x0, x94, UINT64_C(0x5812631a5cf5d3ed)); + fiat_25519_scalar_subborrowx_u64(&x104, &x105, x103, x96, UINT64_C(0x14def9dea2f79cd6)); + fiat_25519_scalar_subborrowx_u64(&x106, &x107, x105, x98, 0x0); + fiat_25519_scalar_subborrowx_u64(&x108, &x109, x107, x100, UINT64_C(0x1000000000000000)); + fiat_25519_scalar_subborrowx_u64(&x110, &x111, x109, x101, 0x0); + fiat_25519_scalar_addcarryx_u64(&x112, &x113, 0x0, x6, 0x1); + x114 = ((x80 >> 1) | ((x82 << 63) & UINT64_C(0xffffffffffffffff))); + x115 = ((x82 >> 1) | ((x84 << 63) & UINT64_C(0xffffffffffffffff))); + x116 = ((x84 >> 1) | ((x86 << 63) & UINT64_C(0xffffffffffffffff))); + x117 = ((x86 >> 1) | ((x88 << 63) & UINT64_C(0xffffffffffffffff))); + x118 = ((x88 & UINT64_C(0x8000000000000000)) | (x88 >> 1)); + fiat_25519_scalar_cmovznz_u64(&x119, x48, x39, x31); + fiat_25519_scalar_cmovznz_u64(&x120, x48, x41, x33); + fiat_25519_scalar_cmovznz_u64(&x121, x48, x43, x35); + fiat_25519_scalar_cmovznz_u64(&x122, x48, x45, x37); + fiat_25519_scalar_cmovznz_u64(&x123, x111, x102, x94); + fiat_25519_scalar_cmovznz_u64(&x124, x111, x104, x96); + fiat_25519_scalar_cmovznz_u64(&x125, x111, x106, x98); + fiat_25519_scalar_cmovznz_u64(&x126, x111, x108, x100); + *out1 = x112; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out3[0] = x114; + out3[1] = x115; + out3[2] = x116; + out3[3] = x117; + out3[4] = x118; + out4[0] = x119; + out4[1] = x120; + out4[2] = x121; + out4[3] = x122; + out5[0] = x123; + out5[1] = x124; + out5[2] = x125; + out5[3] = x126; +} + +/* + * The function fiat_25519_scalar_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if ⌊log2 m⌋ + 1 < 46 then ⌊(49 * (⌊log2 m⌋ + 1) + 80) / 17⌋ else ⌊(49 * (⌊log2 m⌋ + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static FIAT_25519_SCALAR_FIAT_INLINE void fiat_25519_scalar_divstep_precomp(uint64_t out1[4]) { + out1[0] = UINT64_C(0xd70af84436a7cb92); + out1[1] = UINT64_C(0x5f71c978b0b8b159); + out1[2] = UINT64_C(0xe76d816974947f1a); + out1[3] = UINT64_C(0x19a2d36f193e4ff); +} diff --git a/src/util/fd_util_base.h b/src/util/fd_util_base.h index 081a81c8f4..a06c045057 100644 --- a/src/util/fd_util_base.h +++ b/src/util/fd_util_base.h @@ -603,6 +603,29 @@ fd_type_pun_const( void const * p ) { #define FD_FN_UNSANITIZED __attribute__((no_sanitize("address", "undefined"))) +/* FD_FN_SENSITIVE instruments the compiler to sanitize sensitive functions. + https://eprint.iacr.org/2023/1713 (Sec 3.2) + - Clear all registers with __attribute__((zero_call_used_regs("all"))) + - Clear stack with __attribute__((strub)), available in gcc 14+ */ + +#if __has_attribute(strub) +#define FD_FN_SENSITIVE __attribute__((strub)) __attribute__((zero_call_used_regs("all"))) +#elif __has_attribute(zero_call_used_regs) +#define FD_FN_SENSITIVE __attribute__((zero_call_used_regs("all"))) +#else +#define FD_FN_SENSITIVE +#endif + +/* FD_PARAM_UNUSED indicates that it is okay if the function parameter is not + used. */ + +#define FD_PARAM_UNUSED __attribute__((unused)) + +/* FD_TYPE_PACKED indicates that a type is to be packed, reseting its alignment + to 1. */ + +#define FD_TYPE_PACKED __attribute__((packed)) + /* FD_WARN_UNUSED tells the compiler the result (from a function) should be checked. This is useful to force callers to either check the result or deliberately and explicitly ignore it. Good for result codes and @@ -971,6 +994,11 @@ fd_memset( void * d, #endif +/* C23 has memset_explicit, i.e. a memset that can't be removed by the + optimizer. This is our own equivalent. */ + +static void * (* volatile fd_memset_explicit)(void *, int, size_t) = memset; + /* fd_memeq(s0,s1,sz): Compares two blocks of memory. Returns 1 if equal or sz is zero and 0 otherwise. No memory accesses made if sz is zero (pointers may be invalid). On x86, uses repe cmpsb which is diff --git a/src/util/log/fd_log.h b/src/util/log/fd_log.h index 7ff47804d4..5206640463 100644 --- a/src/util/log/fd_log.h +++ b/src/util/log/fd_log.h @@ -262,6 +262,10 @@ #define FD_TEST(c) do { if( FD_UNLIKELY( !(c) ) ) FD_LOG_ERR(( "FAIL: %s", #c )); } while(0) +/* FD_TEST_CUSTOM is like FD_TEST but with a custom error msg err. */ + +#define FD_TEST_CUSTOM(c,err) do { if( FD_UNLIKELY( !(c) ) ) FD_LOG_ERR(( "FAIL: %s", (err) )); } while(0) + /* Macros for doing hexedit / tcpdump-like logging of memory regions. E.g. diff --git a/src/waltz/quic/tests/test_quic_client_flood.c b/src/waltz/quic/tests/test_quic_client_flood.c index 9a7c51250f..5b446b954e 100644 --- a/src/waltz/quic/tests/test_quic_client_flood.c +++ b/src/waltz/quic/tests/test_quic_client_flood.c @@ -147,13 +147,13 @@ run_quic_client( /* Generate a public_key / private_key pair for this message */ ulong private_key[4]; for( ulong i=0UL; i<4UL; i++ ) private_key[i] = fd_rng_ulong( rng ); - fd_ed25519_public_from_private( public_key, private_key, sha ); + fd_ed25519_public_from_private( public_key, (uchar *)private_key, sha ); /* Make a random message */ for( ulong b=0UL; b