diff --git a/src/dghv.rs b/src/dghv.rs index a8f47a1..292b1cd 100644 --- a/src/dghv.rs +++ b/src/dghv.rs @@ -11,14 +11,10 @@ pub fn encrypt_bit(bit: u8, key: &Integer) -> Integer { let q: Integer = Integer::from(rng.next_u64()) % key; // noise - let mut r: Integer; let p_div_4: Integer = key.clone() / 4; - loop { - r = Integer::from(rng.next_u64()); - if r.clone() * 2 < p_div_4 { - break; - } - } + let r = std::iter::repeat_with(|| Integer::from(rng.next_u64())) + .find(|r| r.clone() * 2 < p_div_4) + .unwrap(); // c = b + p*q + 2*r let mut c = Integer::new(); @@ -36,11 +32,8 @@ pub fn generate_secret_key(eta: u32) -> Integer { let mut rng = StdRng::from_os_rng(); let lower = Integer::from(1) << (eta - 1); let upper = Integer::from(1) << eta; - - loop { - let p = Integer::from(rng.next_u64()) % (upper.clone() - lower.clone()) + &lower; - if p.is_odd() { - return p; - } - } + let range: Integer = upper - &lower; + std::iter::repeat_with(|| Integer::from(rng.next_u64()) % &range + &lower) + .find(|p: &Integer| p.is_odd()) + .unwrap() }