use crate::drbg::{DRBG};
use crate::parameters::Parameters;
static PERM_CUSTOMIZATION: [u8; 2] = [0, 1];
pub fn permutation_tau_1(seed: &[u8], params: &Parameters) -> Vec<u32> {
let mut drbg = DRBG::new(seed, Some(&PERM_CUSTOMIZATION));
let mut perm: Vec<u32> = Vec::with_capacity(params.d as usize);
let mut rnd: u16;
for i in 0u32..params.d as u32 {
rnd = drbg.sampler16(params.d as u32);
perm.push(i * params.d as u32 + rnd as u32);
}
perm
}
pub fn permutation_tau_2(seed: &[u8], params: &Parameters) -> Vec<u32> {
let mut drbg = DRBG::new(seed, Some(&PERM_CUSTOMIZATION));
let mut perm: Vec<u32> = Vec::with_capacity(params.d as usize);
let mut rnd: u16;
let mut v = vec![0u8; params.tau2_len as usize];
for _ in 0u32..params.k as u32 {
while {
rnd = drbg.sampler16_2(params.tau2_len);
v[rnd as usize] != 0
} {};
v[rnd as usize] = 1;
perm.push(rnd as u32);
}
perm
}