use zeroize::Zeroize;
#[cfg(feature = "std")]
use rand::RngCore;
#[cfg(feature = "std")]
pub fn generate_seed_32() -> [u8; 32] {
let mut seed = [0u8; 32];
rand::rngs::OsRng.try_fill_bytes(&mut seed).expect("OsRng failed");
seed
}
#[cfg(feature = "std")]
pub fn generate_seed_64() -> [u8; 64] {
let mut seed = [0u8; 64];
rand::rngs::OsRng.try_fill_bytes(&mut seed).expect("OsRng failed");
seed
}
pub fn validate_seed_32(seed: &[u8; 32]) {
if seed.iter().all(|&b| b == 0) {
panic!("Zero seed invalid");
}
}
pub fn validate_seed_64(seed: &[u8; 64]) {
if seed.iter().all(|&b| b == 0) {
panic!("Zero seed invalid");
}
}
#[derive(Zeroize)]
pub struct SecureSeed(pub [u8; 64]); impl Drop for SecureSeed {
fn drop(&mut self) {
self.0.zeroize();
}
}
#[derive(Zeroize)]
pub struct SecureSeed32(pub [u8; 32]);
impl Drop for SecureSeed32 {
fn drop(&mut self) {
self.0.zeroize();
}
}