use blake3::Hasher;
pub trait DeterministicNonceProvider: Send + Sync {
fn derive(&self, secret: [u8; 32], ts: u64) -> [u8; 32];
}
#[derive(Debug, Clone, Copy, Default)]
pub struct Blake3NonceProvider;
impl DeterministicNonceProvider for Blake3NonceProvider {
fn derive(&self, secret: [u8; 32], ts: u64) -> [u8; 32] {
let mut hasher = Hasher::new_keyed(&secret);
hasher.update(b"rspow:nonce:v1");
hasher.update(&ts.to_le_bytes());
hasher.finalize().into()
}
}