From 3c12877f87c09219416b032de6a3135e4fb0fa80 Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Thu, 29 Apr 2021 09:55:11 -0600 Subject: [PATCH] Use a deterministic PRNG seeded from arb data for proptests. --- src/builder.rs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 422db07c..b9ed0df9 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -459,7 +459,7 @@ impl Bundle { /// Generators for property testing. #[cfg(any(test, feature = "test-dependencies"))] pub mod testing { - use rand::rngs::OsRng; + use rand::{rngs::StdRng, CryptoRng, SeedableRng}; use std::convert::TryFrom; use std::fmt::Debug; @@ -494,16 +494,18 @@ pub mod testing { /// from these inputs, but using a `ValueBalance` implementation that /// is defined by the end user. #[derive(Debug)] - struct ArbitraryBundleInputs { + struct ArbitraryBundleInputs { + rng: R, + rng_7: R7, sk: SpendingKey, anchor: Anchor, notes: Vec, recipient_amounts: Vec<(Address, NoteValue)>, } - impl ArbitraryBundleInputs { + impl ArbitraryBundleInputs { /// Create a bundle from the set of arbitrary bundle inputs. - fn into_bundle>(self) -> Bundle { + fn into_bundle>(mut self) -> Bundle { let fvk = FullViewingKey::from(&self.sk); let ovk = OutgoingViewingKey::from(&fvk); let flags = Flags::from_parts(true, true); @@ -519,13 +521,12 @@ pub mod testing { .unwrap(); } - let mut rng = OsRng; let pk = ProvingKey::build(); builder - .build(&mut rng, &pk) + .build(&mut self.rng, &pk) .unwrap() - .prepare(rand_7::rngs::OsRng, [0; 32]) - .sign(rand_7::rngs::OsRng, &SpendAuthorizingKey::from(&self.sk)) + .prepare(&mut self.rng_7, [0; 32]) + .sign(&mut self.rng_7, &SpendAuthorizingKey::from(&self.sk)) .finalize() .unwrap() } @@ -543,8 +544,11 @@ pub mod testing { ), 1..30 ), - ) -> ArbitraryBundleInputs { + rng_seed in prop::array::uniform32(prop::num::u8::ANY) + ) -> ArbitraryBundleInputs { ArbitraryBundleInputs { + rng: StdRng::from_seed(rng_seed), + rng_7: ::from_seed(rng_seed), sk: sk.clone(), anchor, notes,