pub use purecrypto::rng::{OsRng, RngCore};
use purecrypto::hash::{ExtendableOutput, KeccakReader, Shake256, XofReader};
pub struct ShakeRng {
reader: KeccakReader,
}
impl ShakeRng {
pub fn new(seed: &[u8]) -> ShakeRng {
let mut xof = Shake256::new();
xof.update(seed);
ShakeRng {
reader: xof.finalize_xof(),
}
}
}
impl RngCore for ShakeRng {
fn fill_bytes(&mut self, dest: &mut [u8]) {
self.reader.read(dest);
}
}
#[derive(Clone, Copy, Debug)]
pub struct FixedRng(pub u8);
impl RngCore for FixedRng {
fn fill_bytes(&mut self, dest: &mut [u8]) {
dest.fill(self.0);
}
}