use chrono::NaiveDate;
pub fn derive_manifest_seed(group_seed: u64, period_start: NaiveDate) -> [u8; 32] {
let mut hasher = blake3::Hasher::new();
hasher.update(b"manifest");
hasher.update(&group_seed.to_le_bytes());
hasher.update(period_start.to_string().as_bytes());
*hasher.finalize().as_bytes()
}
pub fn derive_entity_seed(group_seed: u64, entity_code: &str) -> [u8; 32] {
let mut hasher = blake3::Hasher::new();
hasher.update(b"entity");
hasher.update(&group_seed.to_le_bytes());
hasher.update(entity_code.as_bytes());
*hasher.finalize().as_bytes()
}
pub fn derive_aggregate_seed(group_seed: u64, period_start: NaiveDate) -> [u8; 32] {
let mut hasher = blake3::Hasher::new();
hasher.update(b"aggregate");
hasher.update(&group_seed.to_le_bytes());
hasher.update(period_start.to_string().as_bytes());
*hasher.finalize().as_bytes()
}
pub fn derive_ic_pair_id(group_seed: u64, ic_relationship_id: &str, pair_index: u64) -> [u8; 32] {
let mut hasher = blake3::Hasher::new();
hasher.update(b"ic_pair");
hasher.update(&group_seed.to_le_bytes());
hasher.update(ic_relationship_id.as_bytes());
hasher.update(&pair_index.to_le_bytes());
*hasher.finalize().as_bytes()
}
pub fn chacha_rng_from_seed(seed: &[u8; 32]) -> rand_chacha::ChaCha8Rng {
use rand::SeedableRng;
rand_chacha::ChaCha8Rng::from_seed(*seed)
}