3.2.2 Use a hash to point for random points in dfg

This commit is contained in:
Luke Parker
2023-02-23 04:27:31 -05:00
parent 74647b1b52
commit d929a8d96e
3 changed files with 9 additions and 9 deletions

View File

@@ -354,15 +354,12 @@ macro_rules! dalek_group {
type Scalar = Scalar;
fn random(mut rng: impl RngCore) -> Self {
loop {
let mut bytes = field::FieldElement::random(&mut rng).to_repr();
bytes[31] |= u8::try_from(rng.next_u32() % 2).unwrap() << 7;
let opt = Self::from_bytes(&bytes);
if opt.is_some().into() {
let opt = opt.unwrap();
// Ban identity, per the trait specification
if !bool::from(opt.is_identity()) {
return opt;
}
let mut bytes = [0; 64];
rng.fill_bytes(&mut bytes);
let point = $Point($DPoint::hash_from_bytes::<sha2::Sha512>(&bytes));
// Ban identity, per the trait specification
if !bool::from(point.is_identity()) {
return point;
}
}
}