added tests and utility method for key generation

This commit is contained in:
Robert Kelly
2018-05-11 12:55:05 -04:00
parent 40c50aef50
commit d278b71cb2
3 changed files with 48 additions and 16 deletions

View File

@@ -3,6 +3,7 @@
use generic_array::typenum::{U32, U64};
use generic_array::GenericArray;
use rand::{ChaChaRng, Rng, SeedableRng};
use rayon::prelude::*;
use ring::error::Unspecified;
use ring::rand::SecureRandom;
use ring::signature::Ed25519KeyPair;
@@ -63,6 +64,17 @@ impl GenKeys {
pub fn new_key(&self) -> Vec<u8> {
KeyPair::generate_pkcs8(self).unwrap().to_vec()
}
pub fn gen_n_keys(&self, n_keys: i64, tokens_per_user: i64) -> Vec<(Vec<u8>, i64)> {
let users: Vec<_> = (0..n_keys)
.into_par_iter()
.map(|_| {
let pkcs8 = self.new_key();
(pkcs8, tokens_per_user)
})
.collect();
users
}
}
impl SecureRandom for GenKeys {
@@ -72,3 +84,35 @@ impl SecureRandom for GenKeys {
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::collections::HashSet;
use std::iter::FromIterator;
#[test]
fn test_new_key_is_redundant() {
let seed: &[_] = &[1, 2, 3, 4];
let rnd = GenKeys::new(seed);
let rnd2 = GenKeys::new(seed);
for _ in 0..100 {
assert_eq!(rnd.new_key(), rnd2.new_key());
}
}
#[test]
fn test_gen_n_keys() {
let seed: &[_] = &[1, 2, 3, 4];
let rnd = GenKeys::new(seed);
let rnd2 = GenKeys::new(seed);
let users1 = rnd.gen_n_keys(50, 1);
let users2 = rnd2.gen_n_keys(50, 1);
let users1_set: HashSet<(Vec<u8>, i64)> = HashSet::from_iter(users1.iter().cloned());
let users2_set: HashSet<(Vec<u8>, i64)> = HashSet::from_iter(users2.iter().cloned());
assert_eq!(users1_set, users2_set);
}
}