Check every crypto export against recorded known answers

kat.txt holds 166 deterministic outputs (hashes, pbkdf2, scrypt, bip39,
sr25519 keys, hard and soft derivation, agreement, VRF outputs, ed25519
and secp256k1 keys and signatures, recovery) and 24 sr25519/VRF
signatures, all produced by the 7.5.20 crate set. A later crate set has
to reproduce the first byte for byte and verify the second.
This commit is contained in:
Satoshi Qazi Muhammed committed 2026-10-12 06:17:29 +04:00
1 parent 72bb42bdb5
commit 39675ddfbf
3 files changed
+414

No files matched your search

+3
View File
@@ -22,3 +22,6 @@ pub mod sr25519;
#[path = "rs/vrf.rs"]
pub mod vrf;
#[path = "rs/kat.rs"]
pub mod kat;
+221
View File
@@ -0,0 +1,221 @@
// Copyright 2019-2025 @pezkuwi/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
//! Known-answer vectors for every exported function.
//!
//! `kat.txt` was produced by an earlier build and is checked in. Any change to
//! the crypto crates must leave every deterministic output byte-equal, and the
//! randomised signatures (sr25519, VRF proofs) recorded there must still
//! verify. Regenerate only on purpose:
//!
//! KAT_WRITE=src/rs/kat.txt cargo test --release kat_ -- --nocapture
#[cfg(test)]
pub mod tests {
use crate::bip39::*;
use crate::ed25519::*;
use crate::hashing::*;
use crate::secp256k1::*;
use crate::sr25519::*;
use crate::vrf::*;
const VECTORS: &str = include_str!("kat.txt");
const PHRASES: [&str; 3] = [
"bottom drive obey lake curtain smoke basket hold race lonely fit walk",
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
"legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title",
];
fn to_hex(data: &[u8]) -> String {
data.iter().map(|b| format!("{:02x}", b)).collect()
}
fn from_hex(s: &str) -> Vec<u8> {
(0..s.len()).step_by(2).map(|i| u8::from_str_radix(&s[i..i + 2], 16).unwrap()).collect()
}
fn pattern(len: usize, mul: usize) -> Vec<u8> {
(0..len).map(|i| ((i * mul + 7) % 251) as u8).collect()
}
fn datas() -> Vec<Vec<u8>> {
vec![vec![], b"abc".to_vec(), pattern(1000, 31)]
}
fn seeds() -> Vec<Vec<u8>> {
vec![vec![0u8; 32], pattern(32, 1), pattern(32, 97), b"12345678901234567890123456789012".to_vec()]
}
fn chain_codes() -> Vec<Vec<u8>> {
// "Alice" as a SCALE-encoded string, zero padded, as util-crypto builds it
let mut alice = vec![0u8; 32];
alice[0] = 5 << 2;
alice[1..6].copy_from_slice(b"Alice");
vec![alice, pattern(32, 13)]
}
fn messages() -> Vec<Vec<u8>> {
vec![vec![], b"this is a message".to_vec(), pattern(300, 7)]
}
/// Every deterministic output, as `name hex` lines.
fn deterministic() -> Vec<(String, Vec<u8>)> {
let mut out: Vec<(String, Vec<u8>)> = Vec::new();
for (d, data) in datas().iter().enumerate() {
for size in [32u32, 64] {
out.push((format!("blake2b/{}/{}", d, size), ext_blake2b(data, &[], size)));
out.push((format!("blake2b-key/{}/{}", d, size), ext_blake2b(data, b"key", size)));
}
out.push((format!("keccak256/{}", d), ext_keccak256(data)));
out.push((format!("keccak512/{}", d), ext_keccak512(data)));
out.push((format!("sha256/{}", d), ext_sha256(data)));
out.push((format!("sha512/{}", d), ext_sha512(data)));
out.push((format!("hmac256/{}", d), ext_hmac_sha256(b"key", data)));
out.push((format!("hmac512/{}", d), ext_hmac_sha512(b"key", data)));
for rounds in [1u32, 2, 4] {
out.push((format!("twox/{}/{}", d, rounds), ext_twox(data, rounds)));
}
for rounds in [1u32, 2048] {
out.push((format!("pbkdf2/{}/{}", d, rounds), ext_pbkdf2(data, b"salt", rounds)));
}
out.push((format!("scrypt/{}", d), ext_scrypt(data, b"salt", 10, 8, 1)));
}
for (p, phrase) in PHRASES.iter().enumerate() {
out.push((format!("bip39-valid/{}", p), vec![ext_bip39_validate(phrase) as u8]));
out.push((format!("bip39-entropy/{}", p), ext_bip39_to_entropy(phrase)));
for (w, password) in ["", "password"].iter().enumerate() {
out.push((format!("bip39-mini/{}/{}", p, w), ext_bip39_to_mini_secret(phrase, password)));
out.push((format!("bip39-seed/{}/{}", p, w), ext_bip39_to_seed(phrase, password)));
}
}
out.push(("bip39-valid/bad-checksum".into(), vec![ext_bip39_validate(&PHRASES[1].replace("about", "abandon")) as u8]));
let pairs: Vec<Vec<u8>> = seeds().iter().map(|s| ext_sr_from_seed(s)).collect();
for (s, pair) in pairs.iter().enumerate() {
out.push((format!("sr-from-seed/{}", s), pair.clone()));
for (c, cc) in chain_codes().iter().enumerate() {
let soft = ext_sr_derive_keypair_soft(pair, cc);
out.push((format!("sr-derive-hard/{}/{}", s, c), ext_sr_derive_keypair_hard(pair, cc)));
// schnorrkel draws the nonce half of a soft-derived secret at random
out.push((format!("sr-derive-soft/{}/{}", s, c), [&soft[..32], &soft[64..]].concat()));
out.push((format!("sr-derive-public-soft/{}/{}", s, c), ext_sr_derive_public_soft(&pair[64..], cc)));
// the public derivation must land on the public half of the soft pair
assert_eq!(ext_sr_derive_public_soft(&pair[64..], cc), soft[64..].to_vec());
}
for (o, other) in pairs.iter().enumerate() {
out.push((format!("sr-agree/{}/{}", s, o), ext_sr_agree(&other[64..], &pair[..64])));
}
for (m, msg) in messages().iter().enumerate() {
// the VRF output (not the proof) is a function of key and input only
out.push((format!("vrf-output/{}/{}", s, m), ext_vrf_sign(&pair[..64], b"ctx", msg, b"extra")[..32].to_vec()));
}
}
for (s, seed) in seeds().iter().enumerate() {
let ed = ext_ed_from_seed(seed);
out.push((format!("ed-from-seed/{}", s), ed.clone()));
for (m, msg) in messages().iter().enumerate() {
out.push((format!("ed-sign/{}/{}", s, m), ext_ed_sign(&ed[32..], &ed[..32], msg)));
}
}
// a zero scalar is not a secp256k1 secret key
for (s, seed) in seeds().iter().enumerate().skip(1) {
let secp = ext_secp_from_seed(seed);
out.push((format!("secp-from-seed/{}", s), secp.clone()));
out.push((format!("secp-expand/{}", s), ext_secp_pub_expand(&secp[32..])));
out.push((format!("secp-compress/{}", s), ext_secp_pub_compress(&ext_secp_pub_expand(&secp[32..]))));
for (m, msg) in messages().iter().enumerate() {
let hash = ext_keccak256(msg);
let sig = ext_secp_sign(&hash, &secp[..32]);
out.push((format!("secp-sign/{}/{}", s, m), sig.clone()));
out.push((format!("secp-recover/{}/{}", s, m), ext_secp_recover(&hash, &sig[..64], sig[64] as i32)));
}
}
out
}
/// Randomised signatures: `kind pubkey msg sig` lines that any later build must verify.
fn randomised() -> Vec<String> {
let mut out = Vec::new();
for seed in seeds().iter() {
let pair = ext_sr_from_seed(seed);
for msg in messages().iter() {
out.push(format!("sr-sig {} {} {}", to_hex(&pair[64..]), to_hex(msg), to_hex(&ext_sr_sign(&pair[64..], &pair[..64], msg))));
out.push(format!("vrf-sig {} {} {}", to_hex(&pair[64..]), to_hex(msg), to_hex(&ext_vrf_sign(&pair[..64], b"ctx", msg, b"extra"))));
}
}
out
}
#[test]
fn kat_vectors() {
if let Ok(path) = std::env::var("KAT_WRITE") {
let mut lines: Vec<String> = deterministic().iter().map(|(n, v)| format!("{} {}", n, to_hex(v))).collect();
lines.extend(randomised());
std::fs::write(&path, lines.join("\n") + "\n").unwrap();
println!("wrote {} vectors to {}", lines.len(), path);
return;
}
let mut expected = std::collections::HashMap::new();
let mut signatures = 0;
for line in VECTORS.lines() {
let parts: Vec<&str> = line.split(' ').collect();
match parts[0] {
"sr-sig" => {
assert!(ext_sr_verify(&from_hex(parts[3]), &from_hex(parts[2]), &from_hex(parts[1])), "{}", line);
signatures += 1;
},
"vrf-sig" => {
assert!(ext_vrf_verify(&from_hex(parts[1]), b"ctx", &from_hex(parts[2]), b"extra", &from_hex(parts[3])), "{}", line);
signatures += 1;
},
name => {
expected.insert(name.to_string(), parts[1].to_string());
},
}
}
let actual = deterministic();
assert_eq!(actual.len(), expected.len(), "vector count");
for (name, value) in actual.iter() {
assert_eq!(&to_hex(value), expected.get(name).expect(name), "{}", name);
}
assert!(signatures > 0);
println!("{} deterministic vectors equal, {} recorded signatures verify", actual.len(), signatures);
}
}
+190
View File
@@ -0,0 +1,190 @@
blake2b/0/32 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8
blake2b-key/0/32 e65edfce5a36261cd824cb0f0da736b1109dcf20d2b831d598f337bb3552a3e4
blake2b/0/64 786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce
blake2b-key/0/64 5b3cfd8f422b490b764b55eceb330b500c79cbefa9a928ad00202b8b3c5dd778a81122570434a2e3b8bfd028d105dfefd0a9576e88ed66de742ca9fbb5f8d2b6
keccak256/0 c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
keccak512/0 0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e
sha256/0 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
sha512/0 cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
hmac256/0 5d5d139563c95b5967b9bd9a8c9b233a9dedb45072794cd232dc1b74832607d0
hmac512/0 84fa5aa0279bbc473267d05a53ea03310a987cecc4c1535ff29b6d76b8f1444a728df3aadb89d4a9a6709e1998f373566e8f824a8ca93b1821f0b69bc2a2f65e
twox/0/1 99e9d85137db46ef
twox/0/2 99e9d85137db46ef4bbea33613baafd5
twox/0/4 99e9d85137db46ef4bbea33613baafd56f963c64b1f3685a4eb4abd67ff6203a
pbkdf2/0/1 00ef42cdbfc98d29db20976608e455567fdddf141f6eb03b5a85addd25974f5d2375bd5082b803e8f4cfa88ae1bd25256fcbddd2318676566ff2797792302aee
pbkdf2/0/2048 35f714d09fc952c6a401e07081ac644e1e090de3c8744c28af0dd19396faee9de002d4eb6dbc1d09f1ffb96652d8a24680349622bed48aba991cd81436b3702a
scrypt/0 8356b146b42af574e460300b44136b284c796d7e73d81b1e5069b265f9da1439b3577a0604829f1223e68820075799a47b37bb86f0ca88aded76c4e97a7e9f1c
blake2b/1/32 bddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068d52319
blake2b-key/1/32 0330531d097355a3f72e80d55c1245ccf79f1704431c6e3887938320442c23c0
blake2b/1/64 ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923
blake2b-key/1/64 5c6a9a4ae911c02fb7e71a991eb9aea371ae993d4842d206e6020d46f5e41358c6d5c277c110ef86c959ed63e6ecaaaceaaff38019a43264ae06acf73b9550b1
keccak256/1 4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45
keccak512/1 18587dc2ea106b9a1563e32b3312421ca164c7f1f07bc922a9c83d77cea3a1e5d0c69910739025372dc14ac9642629379540c17e2a65b19d77aa511a9d00bb96
sha256/1 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
sha512/1 ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
hmac256/1 9c196e32dc0175f86f4b1cb89289d6619de6bee699e4c378e68309ed97a1a6ab
hmac512/1 3926a207c8c42b0c41792cbd3e1a1aaaf5f7a25704f62dfc939c4987dd7ce060009c5bb1c2447355b3216f10b537e9afa7b64a4e5391b0d631172d07939e087a
twox/1/1 990977adf52cbc44
twox/1/2 990977adf52cbc440889329981caa9be
twox/1/4 990977adf52cbc440889329981caa9bef7da5770b2b8a05303b75d95360dd62b
pbkdf2/1/1 ed5eaa90fc29599df803befca3c4305baac330ee54dc648a8850eb233c0edd5c835b721009aefa870e81bbb026fd265fe7316096998299dce1689e8942651223
pbkdf2/1/2048 a81678b52a3db3a13e307c5ec8e2d0c77b4be2fb3eaecde640acd14ca6b7f94da769cbd3391aa9221f8c90221eaa21916e455cd67c1818c4f3023a2e3fb42ede
scrypt/1 057f3a65a87ea4d7358e38387ed115ccd48329f3860aa2a038af4669fabb2a0e3ad24b499cfa1f99eb9b62e180039aa4210e5735793807689642c13a95c2113e
blake2b/2/32 a1442fdad4d4e5214e4086836e6accd66cc62d4cf3445dae60006ba025c070d7
blake2b-key/2/32 7d866f7bcac37163a15a32a822d6ad569c8429a994e12ff94b80780a09bf9718
blake2b/2/64 d9d6d77e0408eef086662db306f66af8852e2c70cebbf2e43ccb33c99499687b7a43897b49716c13096986f090042091052ff2c30a095c246fd4c56f16dd1ee8
blake2b-key/2/64 9d42ae2a54bf6638b443c5f1c9935c74e5f894501cdc46cae9cd0cc19f536c3996d53cd993449519bba88f95c9be66d833c103c5f36e8b6d076886540628eefe
keccak256/2 d9317789b18e31eda7f125c541e8eca191f4b6f429970b2e23def6bebc9000d2
keccak512/2 5345c3dadf2c61016fbb23a14ce532d75dd6ae3d7112ebaec258680acc8f70b7591ed4b66688e5501b7126182be2ef48f560ca451c60451d3d480a7c7edd92f6
sha256/2 008549d94fa71e7a0a483d84380d05a923a4b18e79ba1f8a8ddac923956d32ef
sha512/2 6e980832aa820e5fe6c6ce011c36cd3cbe95596c9069c6067fab48bade8bbeb4e6413acb61bb1286c67c28a07e3f4099f1805a2b199cc0fe51aa5cfb1b66a40e
hmac256/2 df667edcc6df9bb665b74643b50a7a7bddc394e8acc2a0bf16d000330d39db73
hmac512/2 7df02b56487c0448f88d6e44c729dc6ded0b0a3add5e7e97e2b5fb8981416fbaea03e991f3c779cfa790eb69ca6c08f596b7e3b9af36b293fe68fadfd5d3b70c
twox/2/1 8dc5e3cdc100339e
twox/2/2 8dc5e3cdc100339e6e7ef29bc88dfcd7
twox/2/4 8dc5e3cdc100339e6e7ef29bc88dfcd7c877b13a6b38c137d269ec9a21c100ce
pbkdf2/2/1 3f4ed9a95e4b71232c3746d036eb7df2e3e469e2a78f7b4fb593c1a766805dba0bdbbfd349b63438c9dd4c555d36e9d3ce91f3d709d7d7d2d499a2b263da4f63
pbkdf2/2/2048 5275d2231e2fe9ec731f790a679641fec34b2e92806d8aca37b6c87e4b8049579c6e6eae5cf2679280617f2480f81e39f9c4ddf1e4d7292117eaca48af422838
scrypt/2 4ec391c472568d379316c8a14a69128a2aaa27d5d66635e7c682a90af07be9a2ec09d618f6dbf222bbe676883c8b2bf52a3f3600b6bea403ce04f9c123de166d
bip39-valid/0 01
bip39-entropy/0 1a486a5fbe53639984cb64b070755f7b
bip39-mini/0/0 fac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e
bip39-seed/0/0 02d5cd1db85b4d1397d78978062a1160e76e94cc5aaad3089644846865bb18fc
bip39-mini/0/1 7093ab08d7abbb67ff41479a98ef998e4be773901f13668a012f51d207577a88
bip39-seed/0/1 a6a63e14e4aab9ea6d031a84fd49650b337cc06916f8c8e7bb1e6b3a47024867
bip39-valid/1 01
bip39-entropy/1 00000000000000000000000000000000
bip39-mini/1/0 4ed8d4b17698ddeaa1f1559f152f87b5d472f725ca86d341bd0276f1b61197e2
bip39-seed/1/0 5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc1
bip39-mini/1/1 452cf529afdeea38864bda6a771ec77c165498e57c8b53270a918e2a95d6e384
bip39-seed/1/1 319a85221b9c4ce9a2896ed8cb2c0ea205c44c512d9214c9d80e663b8aa97f09
bip39-valid/2 01
bip39-entropy/2 7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
bip39-mini/2/0 f02cdc109954e34cd3f0c60fdb0c97ffb3a934ad1cc9a4df87b8417024b8bdbe
bip39-seed/2/0 761914478ebf6fe16185749372e91549361af22b386de46322cf8b1ba7e92e80
bip39-mini/2/1 91ae31651bbded60d4abbd2aaeada3fc32dc4883aa42bf74aaba714a7cc370b6
bip39-seed/2/1 78eb30f9eb2e381142f81fb2f91af8009a7bae045353c81d41b9965e79753042
bip39-valid/bad-checksum 00
sr-from-seed/0 5046adc1dba838867b2bbbfdd0c3423e58b57970b5267a90f57960924a87f1560a6a85eaa642dac835424b5d7c8d637c00408c7a73da672b7f498521420b6dd3def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627
sr-derive-hard/0/0 5044f1b94dc23e1422b8ff1d16e5c185acd6b1ab0b045edaf52da481e6060f4aeba185d47626304c56ce22f661d7e04bc060bf92367a240487ad3368dfa4f0587eb473cf3ffb7f799a5e7e8a3d864bc9fb558ad77ffd45354f5a64733a8dcc5b
sr-derive-soft/0/0 90a1831445febebaa7ad670736e7e1a7bc7a40c860d11a0d45a834552241e70182cbd8a1cbc65ae31b6606f759c2774846b051c4ec605652d96c39525fbcfd14
sr-derive-public-soft/0/0 82cbd8a1cbc65ae31b6606f759c2774846b051c4ec605652d96c39525fbcfd14
sr-derive-hard/0/1 f028af100e19eb2d977031a7a119d61b3b74d230566da8047b5dfab057d199605ba3dce88aad5127a2d9c2d9e15fffb12cf00a6539b4c5a8ab1f6cf1193028ddeef10a01961b20f466467b28afd462be66cc747df9dd2a5c932eb7a05bc1af41
sr-derive-soft/0/1 d06e1aab2adca5772c61a9b1b290aa850ceda6c68dddb7cea89cccece53eac0cac99e7d9f2b492a0f87a976817f6608b24aaf14206b5e7d5dfd7713a10795620
sr-derive-public-soft/0/1 ac99e7d9f2b492a0f87a976817f6608b24aaf14206b5e7d5dfd7713a10795620
sr-agree/0/0 167b3784188f948efda66d3e08b71354f258db1665b4e63abf903b6319372668
sr-agree/0/1 6cae5cd4b5ed7f11ddb9a0c20d3acbb51c6027ec291fa2f8b9b23e86a4903112
sr-agree/0/2 eec62f77e9c050cc1da6920441ec7fd30fc2471c5633ecc0151265068fa2021d
sr-agree/0/3 dc75f9d7da57ff15e65def295e1a416a53577701b15b3de904c38031297b8d7d
vrf-output/0/0 8034451570f66a23cd631f06a53a32683eb187aa00545bfe9653a255a0e36b49
vrf-output/0/1 301103529195cb77dc71efdcf5247817d40fb3d17c2a66a433a98e8a005e155e
vrf-output/0/2 74bed1f7eede4ac3f11ccd72094732987b897994e31f106dc42844bd1146d112
sr-from-seed/1 10174084cbded240bf5356f2f95f5dde0f8db69ccad7d59e70b871887e597a628b9567dc8368839e2346f9553b4968c6fe856d5a7669f1c54e96f65cfda4b039de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f
sr-derive-hard/1/0 e03363daba6aa72fcf612b75fa6332c0293f23eb7fc3867832f1ff6dc00500525f2be6935ae55cd6ab40e1c4f278972b31e2331cb15193ae01c58b61545077fff0af6c7273314323ecd59b7751f6af00535e91be0c706a55c7e171706ec4d006
sr-derive-soft/1/0 28b95df54828b985d5e0097049bd347fcc711b44fe0850d4db84c14d5ad27d17f66f661828ec788ca585703c0a14cc13a4d385299cfdfb148f4f554a1791f12e
sr-derive-public-soft/1/0 f66f661828ec788ca585703c0a14cc13a4d385299cfdfb148f4f554a1791f12e
sr-derive-hard/1/1 2881967aef71dc5c5385863b7ae78d901f2c48dcc0a6d3a0d1d3aaf62e2e935429943d0a1042cf3392ed094bbedb495c988401d753de3d67f8359513243a0b9d6ec838a4b1373518b303544d098c0636dbabc63703c8bb5b24e5f36ba5cc527c
sr-derive-soft/1/1 087a06cb2153ded6faf219db4aa987b36beeaa1b7fa0602bca6e5eec92b098627454f8850f657d7d6ce095fd95cf960b5a3805746269e7ebb04d346bfb850208
sr-derive-public-soft/1/1 7454f8850f657d7d6ce095fd95cf960b5a3805746269e7ebb04d346bfb850208
sr-agree/1/0 6cae5cd4b5ed7f11ddb9a0c20d3acbb51c6027ec291fa2f8b9b23e86a4903112
sr-agree/1/1 924c672d1fab64258297edf443ca56d08c214cff4a01f42a1386ea5ec7a56133
sr-agree/1/2 2a799825b0bedcacc2b612057beb92d27ce3373fc98e90a6fae94e61ab0a656b
sr-agree/1/3 66d68f1a30ddc58cec6c823c6d9508bb2dd9e48ffc892aee4236d9f1d2646807
vrf-output/1/0 82efcfd875532dd24499defd3ffd0c1d4940111cd5e780b96027c799ef390648
vrf-output/1/1 7c6d026b220fb01a1301bb704d0c30c6e640a69ef52e0d35ef442670e26fc97b
vrf-output/1/2 3084beefb7ac40f766731657c5e776f4a15e20beca9eef8842121e2b3910dd22
sr-from-seed/2 18b5f3e9309e299a29105131170fa7be75d1dd8b3a89074a3ee24e564deb6b5b433878ae7fe6b5e12e48d14574ef972534a02797c5f4a4ae4bde996256f619b16203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d
sr-derive-hard/2/0 407f24ae017ce772e36bf577ab705547658cfed7b34d4afe3734be5476119a69f8fcdaff281ff8c13cc1419d7c841028c1ce21b55f2ba51dc646154356cf6cf894e23f5a2546a3a1a2677ff796b0e0e920da3cecc952ab1a8021519775352d5e
sr-derive-soft/2/0 282441e695a327a73028d4ca68749bfa995887f9fc8b73826efef7cf627ec07542581161e52bd1f724155363bffe777eecc177bf1fdbf26b592708a4db4f902e
sr-derive-public-soft/2/0 42581161e52bd1f724155363bffe777eecc177bf1fdbf26b592708a4db4f902e
sr-derive-hard/2/1 6893644ead32fee42054765cfdfd6782dd05fe71aa42e5f2a0b3a72818e04c5d4dde56050f646d29415387517e9b3408887e86cede78b5ce83e303255f20e994dc824fcc74ce2b393e73f5f18cd2e29dba66d5411da3860399d74f8556eccb71
sr-derive-soft/2/1 5807278a18c2e1a4507293abe3fd236e519375e4e624555e787ea34596917a74362e7c82958a3a5cae8a8cd990164988b51a4cfde7003de403c98602fa878d4f
sr-derive-public-soft/2/1 362e7c82958a3a5cae8a8cd990164988b51a4cfde7003de403c98602fa878d4f
sr-agree/2/0 eec62f77e9c050cc1da6920441ec7fd30fc2471c5633ecc0151265068fa2021d
sr-agree/2/1 2a799825b0bedcacc2b612057beb92d27ce3373fc98e90a6fae94e61ab0a656b
sr-agree/2/2 1a6103aa0dcb2e6bcc500b2a15a4e7523e831e61d85daa30630c25241e74187e
sr-agree/2/3 f4ba4a535cb371f26f1abc39d0b02911f9fc70daee91f7c12fcfa3113adcf033
vrf-output/2/0 60976686251d496cacbb2f4e0659aa4fd056b29fed678528d08f6535b1edf469
vrf-output/2/1 94ba6bcd758ccfae3808ecea73d5c490e9c5c114dfcb5264a5190d808e3d600f
vrf-output/2/2 c467f93dbc5f425b6a506e2749dc8b29851587f7611aaff248ee291c65c48a35
sr-from-seed/3 f0106660c3dda23f16daa9ac5b811b963077f5bc0af89f85804f0de8e424f050f98d66f39442506ff947fd911f18c7a7a5da639a63e8d3b4e233f74143d951c1741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63
sr-derive-hard/3/0 30db0fea8835bd5baf649a7bcefe3896b1155771d3e1a7629137d9c679fe4a43f53fe39df0fbcda94acf7386ebf8311c286559864c03f4379d2d40ffc874a87a0460ff03efdc8f3eeae36ad282d41a8398e20703c5504fbc18ec238df4b9855b
sr-derive-soft/3/0 78e2c707b9a946a6afe82cee0bef0c7db1983f5e050de868337f62eb978e492a68d447f32488ba7a1a65e3a0ffa11e747dae52aea4a18b789980f23477c52356
sr-derive-public-soft/3/0 68d447f32488ba7a1a65e3a0ffa11e747dae52aea4a18b789980f23477c52356
sr-derive-hard/3/1 a8bf865205c69ebcdb1efe9edec3b96ea65dd9a071f01e76c91c2af940645f44e96cf7443b19c1866b66535cbcff7afc4b135971ab2ce3bac1ab5e4e4b0e9640106bf4e2d66af916c7b893c7f377ee7c55bc7b63dbbf86f0b65696fe71afcc26
sr-derive-soft/3/1 00223435066f51ece75129f67ba4ec74bc86dfdc951d43f93164d061d3ba7a53f869cd2226b3e1d4648e90c2ab8ed9db5243e23e9d12a814f060b5c447fda835
sr-derive-public-soft/3/1 f869cd2226b3e1d4648e90c2ab8ed9db5243e23e9d12a814f060b5c447fda835
sr-agree/3/0 dc75f9d7da57ff15e65def295e1a416a53577701b15b3de904c38031297b8d7d
sr-agree/3/1 66d68f1a30ddc58cec6c823c6d9508bb2dd9e48ffc892aee4236d9f1d2646807
sr-agree/3/2 f4ba4a535cb371f26f1abc39d0b02911f9fc70daee91f7c12fcfa3113adcf033
sr-agree/3/3 12769eae8157152c1a69e4459a7fd7b1c4ce55d8a5eb68aaac9324df08c7dd1f
vrf-output/3/0 148beca7e06f7af6b57afaede17362acfc6ffe64a341274428daec2673391023
vrf-output/3/1 de4cb325ffb4c4b4f71c2992dddc16822614ab8095e30c5abe22b125ac480110
vrf-output/3/2 ccda5008c43516b79733d6d8eb3634f0450d1b9ccfca0b205420dd78bcb32d66
ed-from-seed/0 00000000000000000000000000000000000000000000000000000000000000003b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29
ed-sign/0/0 8f895b3cafe2c9506039d0e2a66382568004674fe8d237785092e40d6aaf483e4fc60168705f31f101596138ce21aa357c0d32a064f423dc3ee4aa3abf53f803
ed-sign/0/1 b17a3d196768eb182c746cdc592ecd5ba54b815a300a08efaf08893a0fcaf7bb2c2d0b9e7f108f0e257d79db7a79786445db8631c42ee7693cd75477737f0c00
ed-sign/0/2 8b7e54ff43aa6385f57ded8b5a903549c7c6783d28b3492ed542f29dd8a2ab387542ddc24b770758c5909ec56caa4901ed90013e338d28fe753f2b1f6b601908
ed-from-seed/1 0708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252600d05a1d1ea251396d557afbd4588b3c6d99dbeb972fed10a32562ea26dcdcfa
ed-sign/1/0 26caf293a0b11c2c88f2f9e98efdb42e32374943589bfa449998a1738f93a3d4773ecf386def504ff8f5febd5118a28ae5747ac92c656609d0a3631d5d59a90b
ed-sign/1/1 1317bf325ad62aba070e8fb9cfb3886e31750c6865b78355fcc4d75a6b810041fdcf756d5bc6e144f7f9cad4b893719af6432233acf7c8daf21414ef72b9b703
ed-sign/1/2 fc354b2898a0d700924879de329b5ab6f6fc2d0c3d2579633b7ee8c0e81897e1eee10efd7e7d0b98ce889cdeb266ccaf837d20b4aa82dfa3ed73bc38820b4805
ed-from-seed/2 0768c92f90f157b81e7fe046a70d6ecf3596f75dbe2485e64cad1374d53b9c029ab3e3b7fabda8a899c3a93b711ce3e9c092793491a49ab3f93331db7a1a0f8c
ed-sign/2/0 dacab8d76acb5a01d013adf2ddd496e40219c6bfbd900de355eb15acb4bce2ae0b7430fe49f710415b392d6280f2490ee7a58c775d661796fe79adc1b6dd1e0e
ed-sign/2/1 c590b0f69cd4249904292ccd6730a454dd51bafcafa1844a01c5ea64ac162c17b9bd7041faa0eec85f92674c86cb3cda027634c6c4e17837991135865be03901
ed-sign/2/2 9f115cbe6ff1829400c2ed3cc90a325d0a48cf180fde0cb148064800911d6b81e0a38a62b4c7e12fd630c5588e2fb90814c33e1ca2fade665da245e2251e6200
ed-from-seed/3 31323334353637383930313233343536373839303132333435363738393031322f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee
ed-sign/3/0 9307490e912de0ee8eba762e2dab214b142d9943469db0698274ccb3a091a5df24dc0bed309a808c4cd7ba1addd17a5ede576283566f22915884d3c361db400d
ed-sign/3/1 90588f3f512496f2dd40571d162e8182860081c74e2085316e7c4396918f07da412ee029978e4dd714057fe973bd9e7d645148bf7b66680d67c93227cde95202
ed-sign/3/2 e5d1b0dfa9cf77a5a36e6d67c65ae9241d4fa08dcda94da4d294870bae05561f2a78f7053f5082d2b4a889307eff3dc909e36edfc05656806d4594542e5f9c0f
secp-from-seed/1 0708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526029fc3f04c2c6e14d06fe30048fb902506d674f5f7543dfde498b1d26e1a6c1f55
secp-expand/1 049fc3f04c2c6e14d06fe30048fb902506d674f5f7543dfde498b1d26e1a6c1f55f0ca1d755158126236856b08e5ef1c7f58953fa09c681d33fe63f02e07d0af26
secp-compress/1 029fc3f04c2c6e14d06fe30048fb902506d674f5f7543dfde498b1d26e1a6c1f55
secp-sign/1/0 f835e88462a652882078de1c490788ef2bcf5c3654f46ab2dd57d75732420ffa1e345a225a4f6b4159344e96179390e50ec2deda161f0c21a80aa45880cf5fdc01
secp-recover/1/0 029fc3f04c2c6e14d06fe30048fb902506d674f5f7543dfde498b1d26e1a6c1f55
secp-sign/1/1 20d00d17b9beb4920f1f2b868ff4f97f37d81305bfdd5251c4ad1166f8b1f74303f816436197dc2d0548a188224f20515e19d1214a2eb84acb660fd797925b6800
secp-recover/1/1 029fc3f04c2c6e14d06fe30048fb902506d674f5f7543dfde498b1d26e1a6c1f55
secp-sign/1/2 6b5e6b28801042beb245714ae0e637b6f9eecda27872eedb89662f3a9eb7a7f877323adbd8630226700325f379db189ae11abf7f701e25899f11d9d93203315e01
secp-recover/1/2 029fc3f04c2c6e14d06fe30048fb902506d674f5f7543dfde498b1d26e1a6c1f55
secp-from-seed/2 0768c92f90f157b81e7fe046a70d6ecf3596f75dbe2485e64cad1374d53b9c02027854493edced8484912d36f6b8ac3aaf28fe5b7db24341ff5b489b84679fc535
secp-expand/2 047854493edced8484912d36f6b8ac3aaf28fe5b7db24341ff5b489b84679fc5350d083efb4c1199c119862d8d48741a4e471778b892e929e61d083494790b7f16
secp-compress/2 027854493edced8484912d36f6b8ac3aaf28fe5b7db24341ff5b489b84679fc535
secp-sign/2/0 a4ce55a43e3483b38cb0c3423e16caab5d3c4ef754a22dd57de2488ea06a8d4c3be5ea6c3a17ac80f44bc6fb16d42983fb1903a7c762ba2bd97a771e5258b03101
secp-recover/2/0 027854493edced8484912d36f6b8ac3aaf28fe5b7db24341ff5b489b84679fc535
secp-sign/2/1 6a2fc029d7732e9a4c148f06456493552ae117f2a9bc16362b204a11541cff202b7bb6fa926d3f2060a1d01c43c1ec194deb7dd397161ef16c11a906147c16ee01
secp-recover/2/1 027854493edced8484912d36f6b8ac3aaf28fe5b7db24341ff5b489b84679fc535
secp-sign/2/2 61013addf85a6c17db744c01806151eba601c78f94676116684f8f18503c68822a6bfc7fe4bac84f1327d067d1e412a1c752961f9cd3f172010d9f035e43157f01
secp-recover/2/2 027854493edced8484912d36f6b8ac3aaf28fe5b7db24341ff5b489b84679fc535
secp-from-seed/3 3132333435363738393031323334353637383930313233343536373839303132035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9
secp-expand/3 045676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba995840f3de562156558efbfdac3f16af0065e5f66795f4dd8262a228ef8c6d813
secp-compress/3 035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9
secp-sign/3/0 c4d4c1a10f58684a3e3c7fb67a8548bd590f80af64dfd48bcc6536e2154e4d3e70723a81f9632f374e695cecdb8a0fe0454b1ff286eae33718de64bb5e356ba501
secp-recover/3/0 035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9
secp-sign/3/1 ffe654ea46d9d27cd83ea6910975ed177f02e9a18638faf42dde95d62bd37c387b91c7eba9c5f13f1c57ca1b58eb1af0d5a82838d75b1661c444db6cd367696201
secp-recover/3/1 035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9
secp-sign/3/2 531bb640dae78253cd466cd851e6d7a9b4354b37113916b5c3c3e2574bb3e58e6008c7a5eed95d50619b7b6b2a79218edc23a96379228d6d40be9038701614a700
secp-recover/3/2 035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9
sr-sig def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 489ef0f010a64a29fe278249fdf508a2ce10343c870d355b3924808dd578105ac62a7d03c0bddcc4ce18a37ef11c3f8e9c368359ed5651a6cbc158045e55e38f
vrf-sig def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 8034451570f66a23cd631f06a53a32683eb187aa00545bfe9653a255a0e36b4966c32822d053d2b22d117e93ed487dff3e87fd0f5a24f4b1819689e4ad105805e816caa25dee6b2a5cdfbf0f0a729e4b1eb13ef68fbaaafcddbaf28cb6e13d02
sr-sig def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 746869732069732061206d657373616765 6227fc211d63e52f0c503c9e83b6cb08dc4b425549ff1353a278ec96bf8e092adf00d9abc61bc5813b5c51c0b880962c9dd090432fd6a50d8169bdb449c54f84
vrf-sig def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 746869732069732061206d657373616765 301103529195cb77dc71efdcf5247817d40fb3d17c2a66a433a98e8a005e155ec45289f04e912c7fe023aa8de6bd18ca1c6a4503f4cba42e28b9b347d3d04b0d0467674d5bb81a64e61bb76dc8faf0d329503bee350f9c11eae39b50cfcbb10a
sr-sig def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c 92c5e8af927f2a6f05f4d0c2e98216fec55be4ef04d3056713518bc92d9cb930ebc461d3856268f0f5ce309a0f253d331b04140a8b86f32820d1ff14a9888f8a
vrf-sig def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c 74bed1f7eede4ac3f11ccd72094732987b897994e31f106dc42844bd1146d1120eccdb5e58fbd8670f34994b1799d1abbac05a94c71acbcd9307028647289e0c31099af1dbe439980a9ceb9ec13d0d02697cbfba563e9821d5f92ecd2cf7c007
sr-sig de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f 80ebf0b599bbd01d981b56f80b79ab85a31fc1b055f839d8b10d5bf67d9e3d21316161bf3f1898160960e94d2cd174f4dff9f42b4bc35dc29c7059480b47ab85
vrf-sig de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f 82efcfd875532dd24499defd3ffd0c1d4940111cd5e780b96027c799ef390648d88bfa89260ecd557638dfe76d1c4c94b908c7a31464595e912f889ace79c30f77b14188af3d46dc57efbe09a7852ecfb62bfcdcf119c3657a23fa899a3f4508
sr-sig de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f 746869732069732061206d657373616765 a8f97775d5a0576cf5530a8eb6baa63e2d2ecf610c9db682cb06c52d40931f323e446a5284e9966ccd2643dc6e91341adf6a097733904704feb0c517108ca38a
vrf-sig de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f 746869732069732061206d657373616765 7c6d026b220fb01a1301bb704d0c30c6e640a69ef52e0d35ef442670e26fc97b8a8e371e84fd521267123a09fad8ac4d872dfa422d8aaa3336ac8a181b1c3a0dcf2b60ecdec3ae5ef4d173dd18bc5af5f7d6567f78a709e1294c1f59e2d81f06
sr-sig de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c e82217ad07422ca25fb31f55d4d5cf42bee685805d6df610b80e1a3a8a1db34b3ce20bafeba409f16897796ccf003c49d180b4c0385c268eef708246eead2183
vrf-sig de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c 3084beefb7ac40f766731657c5e776f4a15e20beca9eef8842121e2b3910dd224a56473e60302b2d75debce2ee9c58a96d4aa51a925a5fa9b329a2a017821e00df68f265212c530894ca79f7e34645b2e6231f988556079eaf42c917d9a48309
sr-sig 6203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d 5a26f5322c87182853d2dd53efe8ebf99e5af4f91eec877b70a04480a461c87f4f5dca4524ed4a402f44d3f7df25e9d7b774d3faf72e55aa4b1f21434ed43283
vrf-sig 6203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d 60976686251d496cacbb2f4e0659aa4fd056b29fed678528d08f6535b1edf46917918ece5448de5c785e68fd87c55a51479c8c73b924993beb7ab3e5df0d9c048438dc24fa5e55a5d5da664352200abdabf24c9ff2c48c30ee96ea068a62090b
sr-sig 6203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d 746869732069732061206d657373616765 fca168d5fbd24de746a8355bd7b7ccf63be6004d409f57cbd5cbc4417d7cd62a1744ab46e8727f07d97d4c3d365c45a1fdea956c3ee8cb06ef2c76bd7f1a5185
vrf-sig 6203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d 746869732069732061206d657373616765 94ba6bcd758ccfae3808ecea73d5c490e9c5c114dfcb5264a5190d808e3d600f84f43f5e35779d0b1e7d0a7363bdd956bc2fd307a2848ec453ee1f4c24363a042c1089a2384872bf1bad1150836275e6c46d33d6c0c5212b2db4ca123e14e703
sr-sig 6203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c 8cae0772e5b1a61f20b470b4ad6c1e39ae7a0b6c1df91ec2a2400c266260233211ce9642733d8dcea1c379a7bf7fae26ad61b08010f403293999885c329dbd82
vrf-sig 6203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c c467f93dbc5f425b6a506e2749dc8b29851587f7611aaff248ee291c65c48a350e013366e544e139aaaed170e8e6f0d286e0da524e63113e4833101bf8d2320b34734ec4aaa25bec04efccc58769c7025e6206be845e6d1e31e4d694c4f8b308
sr-sig 741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 06ca2e9488b09c7c04da6aa1c76d21d9a8d46b76e6aa9de90fdd0fce5a631b480e17f117b91a40078b860187c1f73a826a990307e6274964b3c56a48a86d6d83
vrf-sig 741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 148beca7e06f7af6b57afaede17362acfc6ffe64a341274428daec2673391023156cd7ab6b592e06b7db0730a03087daf1db0b2cca53a8003b4320808167ac07832d70afe11d94053a5e4797bdda84e0648d36cea531f6106fe7959a47bcc20d
sr-sig 741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 746869732069732061206d657373616765 04702b7b88ae806032fb95a8d8e9ad49dda9cc0750e75b44ee5693b0869be64108454fc72fc7344aa32663f369c6bc6a916a0b82910ad6c56ef4a15d25ce1b83
vrf-sig 741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 746869732069732061206d657373616765 de4cb325ffb4c4b4f71c2992dddc16822614ab8095e30c5abe22b125ac48011075ac32720223d70f2b89b8fa95f94851dd14f14bf1baca89431895f4cf12fd0ef6176912c3d8a5d526fe33adc0dac19a974d3205eba3f9415e4e2e05d554e807
sr-sig 741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c 3afa41b7c10ae063c807fd2cbe8eaf63a25bd8a3af26a1f6685b0896190f5b481a29aa6ab2a2560ebdb3792739aa609c8cf183a77b3d9c81bc8be8c716916e8c
vrf-sig 741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c ccda5008c43516b79733d6d8eb3634f0450d1b9ccfca0b205420dd78bcb32d665bb235b82980d7913df4bc52d257a08d4b4affc3273e8f10dc9840561a5be7003ba4937bed0d3e124dfe2047f11b91422c7578ac727904f53402bec72d44b00e