mod action_context;
mod dispatch;
pub mod key;
pub mod signature;
pub(crate) mod uxmss;
pub mod signer;
pub mod verifier;
#[cfg(test)]
pub(crate) mod test_fixtures;
#[cfg(test)]
mod vector_conformance;
pub use crate::verifier::{VerifierInterface, VerifyOutcome};
pub use dispatch::prepare_stateless_delegation;
pub use key::{Commitment, Keys};
pub use signer::{sign, ShrincsSigner, ShrincsSignerResult};
pub use verifier::{ShrincsVerifier, ShrincsVerifierExt};
pub use crate::hash::suite::HASH_SUITE_ID;
pub use crate::hash::suite::{HASH_SUITE_KECCAK_256, HASH_SUITE_SHA2_256};
pub use crate::hash::{ADDRESS_TYPE_FORS_TREE, ADDRESS_TYPE_TREE, ADDRESS_TYPE_WOTS_HASH};
pub use crate::profiles::{
FORS_C_MAX_GRIND_COUNTER, FORS_TREE_HEIGHT, HASH_TRUNC_LEN, HYPERTREE_HEIGHT, NUM_FORS_TREES,
NUM_HYPERTREE_LAYERS, NUM_WOTS_CHAINS, PROFILE_ID, PROFILE_NAME, STATELESS_SIGNATURE_LIMIT,
WOTS_CHAIN_LEN,
};
pub use crate::HASH_LEN;
pub use action_context::ActionContext;
pub use key::PublicKey;
pub use signature::{
decode_stateful_envelope, decode_stateless_envelope, encode_stateful_envelope,
encode_stateless_envelope, Signature,
};
pub use uxmss::STATEFUL_PUBLIC_KEY_BYTES;
pub use crate::sphincs_plus_c::Signature as StatelessSignature;
#[allow(unused_imports)] pub(crate) use crate::hash::derive32;
#[allow(unused_imports)] #[cfg(test)]
pub(crate) use dispatch::verify_stateless_unsafe_raw;
#[allow(unused_imports)] pub(crate) use dispatch::{
matches_expected_public_key_commitment, valid_public_key, verify_stateful,
verify_stateful_unsafe_raw, verify_stateless,
};
#[allow(unused_imports)] pub(crate) use key::{decode_stateful_public_key, encode_stateful_public_key};
#[allow(unused_imports)] pub(crate) use signer::public_key_from_components;
#[cfg(test)]
mod profile_tests {
#[test]
fn active_profile_id_matches_keccak_of_profile_name() {
let expected = crate::hash::backend::keccak256(crate::profiles::PROFILE_NAME.as_bytes());
assert_eq!(crate::profiles::PROFILE_ID, expected);
}
#[cfg(any(feature = "profile-128s-q18", feature = "profile-128s-q20"))]
#[test]
fn active_128_profile_uses_raised_fors_grind_budget() {
assert_eq!(crate::profiles::FORS_TREE_HEIGHT, 24);
assert_eq!(crate::profiles::FORS_C_MAX_GRIND_COUNTER, 1 << 28);
}
#[cfg(not(any(feature = "profile-128s-q18", feature = "profile-128s-q20")))]
#[test]
fn active_non_128_profile_keeps_default_fors_grind_budget() {
assert_eq!(crate::profiles::FORS_C_MAX_GRIND_COUNTER, 1 << 24);
}
}