From 533d5860bdc5cac780d2a4a8f4dada05fc987fd5 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Wed, 10 Jul 2019 19:40:20 -0400 Subject: [PATCH] Migrate bellman to rand 0.5 --- Cargo.toml | 5 ++++- src/domain.rs | 20 ++++++++++---------- src/groth16/generator.rs | 18 +++++++++--------- src/groth16/mod.rs | 6 +++--- src/groth16/prover.rs | 8 ++++---- src/groth16/tests/dummy_engine.rs | 22 +++++++++------------- src/lib.rs | 5 ++++- src/multiexp.rs | 6 +++--- tests/mimc.rs | 10 +++++----- 9 files changed, 51 insertions(+), 49 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 20602c235..72a803489 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ repository = "https://github.com/ebfull/bellman" version = "0.1.0" [dependencies] -rand = "0.4" +rand_core = "0.3" bit-vec = "0.4.4" ff = { path = "../ff" } futures = "0.1" @@ -20,6 +20,9 @@ crossbeam = { version = "0.3", optional = true } pairing = { path = "../pairing", optional = true } byteorder = "1" +[dev-dependencies] +rand = "0.5" + [features] groth16 = ["pairing"] multicore = ["futures-cpupool", "crossbeam", "num_cpus"] diff --git a/src/domain.rs b/src/domain.rs index 4606ce5a2..5d7d50009 100644 --- a/src/domain.rs +++ b/src/domain.rs @@ -375,16 +375,16 @@ fn parallel_fft>( #[test] fn polynomial_arith() { use pairing::bls12_381::Bls12; - use rand::{self, Rand}; + use rand_core::RngCore; - fn test_mul(rng: &mut R) + fn test_mul(rng: &mut R) { let worker = Worker::new(); for coeffs_a in 0..70 { for coeffs_b in 0..70 { - let mut a: Vec<_> = (0..coeffs_a).map(|_| Scalar::(E::Fr::rand(rng))).collect(); - let mut b: Vec<_> = (0..coeffs_b).map(|_| Scalar::(E::Fr::rand(rng))).collect(); + let mut a: Vec<_> = (0..coeffs_a).map(|_| Scalar::(E::Fr::random(rng))).collect(); + let mut b: Vec<_> = (0..coeffs_b).map(|_| Scalar::(E::Fr::random(rng))).collect(); // naive evaluation let mut naive = vec![Scalar(E::Fr::zero()); coeffs_a + coeffs_b]; @@ -423,9 +423,9 @@ fn polynomial_arith() { #[test] fn fft_composition() { use pairing::bls12_381::Bls12; - use rand; + use rand_core::RngCore; - fn test_comp(rng: &mut R) + fn test_comp(rng: &mut R) { let worker = Worker::new(); @@ -434,7 +434,7 @@ fn fft_composition() { let mut v = vec![]; for _ in 0..coeffs { - v.push(Scalar::(rng.gen())); + v.push(Scalar::(E::Fr::random(rng))); } let mut domain = EvaluationDomain::from_coeffs(v.clone()).unwrap(); @@ -462,10 +462,10 @@ fn fft_composition() { #[test] fn parallel_fft_consistency() { use pairing::bls12_381::Bls12; - use rand::{self, Rand}; + use rand_core::RngCore; use std::cmp::min; - fn test_consistency(rng: &mut R) + fn test_consistency(rng: &mut R) { let worker = Worker::new(); @@ -473,7 +473,7 @@ fn parallel_fft_consistency() { for log_d in 0..10 { let d = 1 << log_d; - let v1 = (0..d).map(|_| Scalar::(E::Fr::rand(rng))).collect::>(); + let v1 = (0..d).map(|_| Scalar::(E::Fr::random(rng))).collect::>(); let mut v1 = EvaluationDomain::from_coeffs(v1).unwrap(); let mut v2 = EvaluationDomain::from_coeffs(v1.coeffs.clone()).unwrap(); diff --git a/src/groth16/generator.rs b/src/groth16/generator.rs index 50d5bd763..3e15b2bc1 100644 --- a/src/groth16/generator.rs +++ b/src/groth16/generator.rs @@ -1,4 +1,4 @@ -use rand::Rng; +use rand_core::RngCore; use std::sync::Arc; @@ -35,15 +35,15 @@ pub fn generate_random_parameters( circuit: C, rng: &mut R ) -> Result, SynthesisError> - where E: Engine, C: Circuit, R: Rng + where E: Engine, C: Circuit, R: RngCore { - let g1 = rng.gen(); - let g2 = rng.gen(); - let alpha = rng.gen(); - let beta = rng.gen(); - let gamma = rng.gen(); - let delta = rng.gen(); - let tau = rng.gen(); + let g1 = E::G1::random(rng); + let g2 = E::G2::random(rng); + let alpha = E::Fr::random(rng); + let beta = E::Fr::random(rng); + let gamma = E::Fr::random(rng); + let delta = E::Fr::random(rng); + let tau = E::Fr::random(rng); generate_parameters::( circuit, diff --git a/src/groth16/mod.rs b/src/groth16/mod.rs index e613d6646..767150cba 100644 --- a/src/groth16/mod.rs +++ b/src/groth16/mod.rs @@ -487,7 +487,7 @@ mod test_with_bls12_381 { use {Circuit, SynthesisError, ConstraintSystem}; use ff::Field; - use rand::{Rand, thread_rng}; + use rand::{thread_rng}; use pairing::bls12_381::{Bls12, Fr}; #[test] @@ -547,8 +547,8 @@ mod test_with_bls12_381 { let pvk = prepare_verifying_key::(¶ms.vk); for _ in 0..100 { - let a = Fr::rand(rng); - let b = Fr::rand(rng); + let a = Fr::random(rng); + let b = Fr::random(rng); let mut c = a; c.mul_assign(&b); diff --git a/src/groth16/prover.rs b/src/groth16/prover.rs index c674622cf..ceb3dce7f 100644 --- a/src/groth16/prover.rs +++ b/src/groth16/prover.rs @@ -1,4 +1,4 @@ -use rand::Rng; +use rand_core::RngCore; use std::sync::Arc; @@ -189,10 +189,10 @@ pub fn create_random_proof>( params: P, rng: &mut R ) -> Result, SynthesisError> - where E: Engine, C: Circuit, R: Rng + where E: Engine, C: Circuit, R: RngCore { - let r = rng.gen(); - let s = rng.gen(); + let r = E::Fr::random(rng); + let s = E::Fr::random(rng); create_proof::(circuit, params, r, s) } diff --git a/src/groth16/tests/dummy_engine.rs b/src/groth16/tests/dummy_engine.rs index d5f37a971..654b8148a 100644 --- a/src/groth16/tests/dummy_engine.rs +++ b/src/groth16/tests/dummy_engine.rs @@ -6,7 +6,7 @@ use pairing::{Engine, PairingCurveAffine}; use std::cmp::Ordering; use std::fmt; -use rand::{Rand, Rng}; +use rand_core::RngCore; use std::num::Wrapping; const MODULUS_R: Wrapping = Wrapping(64513); @@ -20,13 +20,11 @@ impl fmt::Display for Fr { } } -impl Rand for Fr { - fn rand(rng: &mut R) -> Self { - Fr(Wrapping(rng.gen()) % MODULUS_R) - } -} - impl Field for Fr { + fn random(rng: &mut R) -> Self { + Fr(Wrapping(rng.next_u32()) % MODULUS_R) + } + fn zero() -> Self { Fr(Wrapping(0)) } @@ -145,12 +143,6 @@ impl PartialOrd for FrRepr { } } -impl Rand for FrRepr { - fn rand(rng: &mut R) -> Self { - FrRepr([rng.gen()]) - } -} - impl fmt::Display for FrRepr { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { write!(f, "{}", (self.0)[0]) @@ -300,6 +292,10 @@ impl CurveProjective for Fr { type Scalar = Fr; type Engine = DummyEngine; + fn random(rng: &mut R) -> Self { + ::random(rng) + } + fn zero() -> Self { ::zero() } diff --git a/src/lib.rs b/src/lib.rs index d22d90f3a..bf9a4e14e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,7 @@ extern crate ff; extern crate group; #[cfg(feature = "pairing")] extern crate pairing; -extern crate rand; +extern crate rand_core; extern crate futures; extern crate bit_vec; @@ -15,6 +15,9 @@ extern crate futures_cpupool; #[cfg(feature = "multicore")] extern crate num_cpus; +#[cfg(test)] +extern crate rand; + pub mod multicore; mod multiexp; pub mod domain; diff --git a/src/multiexp.rs b/src/multiexp.rs index d24572bf6..c6553971b 100644 --- a/src/multiexp.rs +++ b/src/multiexp.rs @@ -274,14 +274,14 @@ fn test_with_bls12() { acc } - use rand::{self, Rand}; + use rand; use pairing::{bls12_381::Bls12, Engine}; const SAMPLES: usize = 1 << 14; let rng = &mut rand::thread_rng(); - let v = Arc::new((0..SAMPLES).map(|_| ::Fr::rand(rng).into_repr()).collect::>()); - let g = Arc::new((0..SAMPLES).map(|_| ::G1::rand(rng).into_affine()).collect::>()); + let v = Arc::new((0..SAMPLES).map(|_| ::Fr::random(rng).into_repr()).collect::>()); + let g = Arc::new((0..SAMPLES).map(|_| ::G1::random(rng).into_affine()).collect::>()); let naive = naive_multiexp(g.clone(), v.clone()); diff --git a/tests/mimc.rs b/tests/mimc.rs index 1d554a57d..d08940f75 100644 --- a/tests/mimc.rs +++ b/tests/mimc.rs @@ -4,13 +4,13 @@ extern crate pairing; extern crate rand; // For randomness (during paramgen and proof generation) -use rand::{thread_rng, Rng}; +use rand::thread_rng; // For benchmarking use std::time::{Duration, Instant}; // Bring in some tools for using pairing-friendly curves -use ff::Field; +use ff::{Field, ScalarEngine}; use pairing::Engine; // We're going to use the BLS12-381 pairing-friendly elliptic curve. @@ -172,7 +172,7 @@ fn test_mimc() { let rng = &mut thread_rng(); // Generate the MiMC round constants - let constants = (0..MIMC_ROUNDS).map(|_| rng.gen()).collect::>(); + let constants = (0..MIMC_ROUNDS).map(|_| ::Fr::random(rng)).collect::>(); println!("Creating parameters..."); @@ -203,8 +203,8 @@ fn test_mimc() { for _ in 0..SAMPLES { // Generate a random preimage and compute the image - let xl = rng.gen(); - let xr = rng.gen(); + let xl = ::Fr::random(rng); + let xr = ::Fr::random(rng); let image = mimc::(xl, xr, &constants); proof_vec.truncate(0);