pub const HRP: &str = "mk";
pub const NUMS_DOMAIN: &[u8] = b"shibbolethnumskey";
pub const MK_REGULAR_CONST: u128 = 0x1062435f91072fa5c;
pub const MK_LONG_CONST: u128 = 0x41890d7e441cbe97273;
pub const MAX_PATH_COMPONENTS: u8 = 10;
pub const SINGLE_STRING_REGULAR_BYTES: usize = 48;
pub const SINGLE_STRING_LONG_BYTES: usize = 56;
pub const CHUNKED_FRAGMENT_REGULAR_BYTES: usize = 45;
pub const CHUNKED_FRAGMENT_LONG_BYTES: usize = 53;
pub const MAX_CHUNKS: u8 = 32;
pub const CROSS_CHUNK_HASH_BYTES: usize = 4;
pub const GENERATOR_FAMILY: &str = "mk-codec 0.2";
pub const XPUB_COMPACT_BYTES: usize = 73;
pub const POLICY_ID_STUB_BYTES: usize = 4;
pub const ORIGIN_FINGERPRINT_BYTES: usize = 4;
#[cfg(test)]
mod tests {
use super::*;
use bitcoin::hashes::{Hash, sha256};
#[test]
fn nums_constants_reproduce_from_domain() {
let digest = sha256::Hash::hash(NUMS_DOMAIN);
let bytes = digest.as_byte_array();
let hi: u128 = u128::from_be_bytes(bytes[0..16].try_into().unwrap());
let derived_regular = hi >> 63;
assert_eq!(
derived_regular, MK_REGULAR_CONST,
"MK_REGULAR_CONST drift from SHA-256(NUMS_DOMAIN) top-65-bits",
);
let derived_long = hi >> 53;
assert_eq!(
derived_long, MK_LONG_CONST,
"MK_LONG_CONST drift from SHA-256(NUMS_DOMAIN) top-75-bits",
);
}
#[test]
fn nums_string_differs_from_md1() {
assert_ne!(
NUMS_DOMAIN, b"shibbolethnums",
"mk1 NUMS string MUST differ from md1's per closure D-10",
);
}
#[test]
fn capacity_constants_match_spec() {
assert_eq!(SINGLE_STRING_REGULAR_BYTES, 48);
assert_eq!(SINGLE_STRING_LONG_BYTES, 56);
assert_eq!(CHUNKED_FRAGMENT_REGULAR_BYTES, 45);
assert_eq!(CHUNKED_FRAGMENT_LONG_BYTES, 53);
assert_eq!(MAX_CHUNKS, 32);
}
#[test]
fn xpub_compact_size_is_73() {
assert_eq!(XPUB_COMPACT_BYTES, 4 + 4 + 32 + 33);
}
#[test]
fn path_cap_is_ten() {
assert_eq!(MAX_PATH_COMPONENTS, 10);
}
}