diff --git a/src/bls12_381/fq.rs b/src/bls12_381/fq.rs index 8440b1d..569b57a 100644 --- a/src/bls12_381/fq.rs +++ b/src/bls12_381/fq.rs @@ -415,7 +415,10 @@ impl ::rand::Rand for Fq { fn rand(rng: &mut R) -> Self { loop { let mut tmp = Fq(FqRepr::rand(rng)); - tmp.0.divn(REPR_SHAVE_BITS); + + // Mask away the unused bits at the beginning. + tmp.0.as_mut()[5] &= 0xffffffffffffffff >> REPR_SHAVE_BITS; + if tmp.is_valid() { return tmp } diff --git a/src/bls12_381/fr.rs b/src/bls12_381/fr.rs index 0571563..d10ba93 100644 --- a/src/bls12_381/fr.rs +++ b/src/bls12_381/fr.rs @@ -237,7 +237,10 @@ impl ::rand::Rand for Fr { fn rand(rng: &mut R) -> Self { loop { let mut tmp = Fr(FrRepr::rand(rng)); - tmp.0.divn(REPR_SHAVE_BITS); + + // Mask away the unused bits at the beginning. + tmp.0.as_mut()[3] &= 0xffffffffffffffff >> REPR_SHAVE_BITS; + if tmp.is_valid() { return tmp }