From 93e2a132b5229fc0414dfca07102513eebbee12a Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Thu, 28 Sep 2017 13:15:29 -0600 Subject: [PATCH] Mask rather than divn, closes #50. --- src/bls12_381/fq.rs | 5 ++++- src/bls12_381/fr.rs | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) 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 }