|
@ -2,7 +2,7 @@ use std::cell::RefCell; |
|
|
|
|
|
|
|
|
use itertools::izip;
|
|
|
use itertools::izip;
|
|
|
use num_traits::{PrimInt, Zero};
|
|
|
use num_traits::{PrimInt, Zero};
|
|
|
use rand::{distributions::Uniform, thread_rng, CryptoRng, Rng, RngCore, SeedableRng};
|
|
|
|
|
|
|
|
|
use rand::{distributions::Uniform, Rng, RngCore, SeedableRng};
|
|
|
use rand_chacha::ChaCha8Rng;
|
|
|
use rand_chacha::ChaCha8Rng;
|
|
|
use rand_distr::{uniform::SampleUniform, Distribution};
|
|
|
use rand_distr::{uniform::SampleUniform, Distribution};
|
|
|
|
|
|
|
|
@ -17,11 +17,6 @@ pub trait NewWithSeed { |
|
|
fn new_with_seed(seed: Self::Seed) -> Self;
|
|
|
fn new_with_seed(seed: Self::Seed) -> Self;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
pub trait RandomElement<T> {
|
|
|
|
|
|
/// Sample Random element of type T
|
|
|
|
|
|
fn random(&mut self) -> T;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pub trait RandomElementInModulus<T, M> {
|
|
|
pub trait RandomElementInModulus<T, M> {
|
|
|
/// Sample Random element of type T in range [0, modulus)
|
|
|
/// Sample Random element of type T in range [0, modulus)
|
|
|
fn random(&mut self, modulus: &M) -> T;
|
|
|
fn random(&mut self, modulus: &M) -> T;
|
|
@ -153,15 +148,6 @@ where |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl<T> RandomElement<T> for DefaultSecureRng
|
|
|
|
|
|
where
|
|
|
|
|
|
T: PrimInt + SampleUniform,
|
|
|
|
|
|
{
|
|
|
|
|
|
fn random(&mut self) -> T {
|
|
|
|
|
|
Uniform::new_inclusive(T::zero(), T::max_value()).sample(&mut self.rng)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl<T> RandomElementInModulus<T, T> for DefaultSecureRng
|
|
|
impl<T> RandomElementInModulus<T, T> for DefaultSecureRng
|
|
|
where
|
|
|
where
|
|
|
T: Zero + SampleUniform,
|
|
|
T: Zero + SampleUniform,
|
|
|