Upgrade rand

This commit is contained in:
Greg Fitzgerald 2018-06-11 14:04:51 -06:00
parent 13f59adf61
commit 5435bb734c
4 changed files with 19 additions and 16 deletions

View File

@ -68,5 +68,5 @@ byteorder = "^1.2.1"
libc = "^0.2.1" libc = "^0.2.1"
getopts = "^0.2" getopts = "^0.2"
isatty = "0.1" isatty = "0.1"
rand = "0.4.2" rand = "0.5.1"
pnet = "^0.21.0" pnet = "^0.21.0"

View File

@ -137,7 +137,9 @@ fn main() {
let last_id = client.get_last_id(); let last_id = client.get_last_id();
println!("Got last ID {:?}", last_id); println!("Got last ID {:?}", last_id);
let rnd = GenKeys::new(demo.mint.keypair().public_key_bytes()); let mut seed = [0u8; 32];
seed.copy_from_slice(&demo.mint.keypair().public_key_bytes()[..32]);
let rnd = GenKeys::new(seed);
println!("Creating keypairs..."); println!("Creating keypairs...");
let txs = demo.num_accounts / 2; let txs = demo.num_accounts / 2;

View File

@ -32,7 +32,9 @@ fn main() {
exit(1); exit(1);
}); });
let rnd = GenKeys::new(demo.mint.keypair().public_key_bytes()); let mut seed = [0u8; 32];
seed.copy_from_slice(&demo.mint.keypair().public_key_bytes()[..32]);
let rnd = GenKeys::new(seed);
let num_accounts = demo.num_accounts; let num_accounts = demo.num_accounts;
let tokens_per_user = 1_000; let tokens_per_user = 1_000;

View File

@ -56,9 +56,8 @@ pub struct GenKeys {
} }
impl GenKeys { impl GenKeys {
pub fn new(seed: &[u8]) -> GenKeys { pub fn new(seed: [u8; 32]) -> GenKeys {
let seed32: Vec<_> = seed.iter().map(|&x| x as u32).collect(); let rng = ChaChaRng::from_seed(seed);
let rng = ChaChaRng::from_seed(&seed32);
GenKeys { GenKeys {
generator: RefCell::new(rng), generator: RefCell::new(rng),
} }
@ -68,7 +67,7 @@ impl GenKeys {
KeyPair::generate_pkcs8(self).unwrap().to_vec() KeyPair::generate_pkcs8(self).unwrap().to_vec()
} }
pub fn gen_n_seeds(&self, n: i64) -> Vec<[u8; 16]> { pub fn gen_n_seeds(&self, n: i64) -> Vec<[u8; 32]> {
let mut rng = self.generator.borrow_mut(); let mut rng = self.generator.borrow_mut();
(0..n).map(|_| rng.gen()).collect() (0..n).map(|_| rng.gen()).collect()
} }
@ -77,7 +76,7 @@ impl GenKeys {
self.gen_n_seeds(n) self.gen_n_seeds(n)
.into_par_iter() .into_par_iter()
.map(|seed| { .map(|seed| {
let pkcs8 = GenKeys::new(&seed).new_key(); let pkcs8 = GenKeys::new(seed).new_key();
KeyPair::from_pkcs8(untrusted::Input::from(&pkcs8)).unwrap() KeyPair::from_pkcs8(untrusted::Input::from(&pkcs8)).unwrap()
}) })
.collect() .collect()
@ -87,7 +86,7 @@ impl GenKeys {
impl SecureRandom for GenKeys { impl SecureRandom for GenKeys {
fn fill(&self, dest: &mut [u8]) -> Result<(), Unspecified> { fn fill(&self, dest: &mut [u8]) -> Result<(), Unspecified> {
let mut rng = self.generator.borrow_mut(); let mut rng = self.generator.borrow_mut();
rng.fill_bytes(dest); rng.fill(dest);
Ok(()) Ok(())
} }
} }
@ -99,17 +98,17 @@ mod tests {
#[test] #[test]
fn test_new_key_is_deterministic() { fn test_new_key_is_deterministic() {
let seed = [1, 2, 3, 4]; let seed = [0u8; 32];
let rng0 = GenKeys::new(&seed); let rng0 = GenKeys::new(seed);
let rng1 = GenKeys::new(&seed); let rng1 = GenKeys::new(seed);
for _ in 0..100 { for _ in 0..100 {
assert_eq!(rng0.new_key(), rng1.new_key()); assert_eq!(rng0.new_key(), rng1.new_key());
} }
} }
fn gen_n_pubkeys(seed: &[u8], n: i64) -> HashSet<PublicKey> { fn gen_n_pubkeys(seed: [u8; 32], n: i64) -> HashSet<PublicKey> {
GenKeys::new(&seed) GenKeys::new(seed)
.gen_n_keypairs(n) .gen_n_keypairs(n)
.into_iter() .into_iter()
.map(|x| x.pubkey()) .map(|x| x.pubkey())
@ -118,8 +117,8 @@ mod tests {
#[test] #[test]
fn test_gen_n_pubkeys_deterministic() { fn test_gen_n_pubkeys_deterministic() {
let seed = [1, 2, 3, 4]; let seed = [0u8; 32];
assert_eq!(gen_n_pubkeys(&seed, 50), gen_n_pubkeys(&seed, 50)); assert_eq!(gen_n_pubkeys(seed, 50), gen_n_pubkeys(seed, 50));
} }
} }