From 0c7361fb26e452db3766cd038bedd32b86e7a0bd Mon Sep 17 00:00:00 2001 From: Tony Arcieri Date: Tue, 26 Dec 2023 18:38:08 -0700 Subject: [PATCH] Have `(Boxed)MontyParams::modulus` return `&Odd<_>` Notably `Odd` permits a simple reference conversion to `NonZero` which makes it possible to clean up some tests. --- benches/boxed_monty.rs | 8 +++++--- src/modular/boxed_monty_form.rs | 2 +- src/modular/monty_form.rs | 4 ++-- tests/boxed_monty_form.rs | 8 +++++--- tests/monty_form.rs | 5 ++--- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/benches/boxed_monty.rs b/benches/boxed_monty.rs index 45068e5af..d5a07388a 100644 --- a/benches/boxed_monty.rs +++ b/benches/boxed_monty.rs @@ -4,7 +4,7 @@ use criterion::{ }; use crypto_bigint::{ modular::{BoxedMontyForm, BoxedMontyParams}, - BoxedUint, NonZero, Odd, RandomMod, + BoxedUint, Odd, RandomMod, }; use num_bigint::BigUint; use rand_core::OsRng; @@ -22,8 +22,10 @@ fn bench_montgomery_ops(group: &mut BenchmarkGroup<'_, M>) { group.bench_function("invert, 4096-bit", |b| { b.iter_batched( || { - let modulus = NonZero::new(params.modulus().clone()).unwrap(); - BoxedMontyForm::new(BoxedUint::random_mod(&mut OsRng, &modulus), params.clone()) + BoxedMontyForm::new( + BoxedUint::random_mod(&mut OsRng, params.modulus().as_nz_ref()), + params.clone(), + ) }, |x| black_box(x).invert(), BatchSize::SmallInput, diff --git a/src/modular/boxed_monty_form.rs b/src/modular/boxed_monty_form.rs index 44410cd44..047974464 100644 --- a/src/modular/boxed_monty_form.rs +++ b/src/modular/boxed_monty_form.rs @@ -106,7 +106,7 @@ impl BoxedMontyParams { } /// Modulus value. - pub fn modulus(&self) -> &BoxedUint { + pub fn modulus(&self) -> &Odd { &self.modulus } diff --git a/src/modular/monty_form.rs b/src/modular/monty_form.rs index dc928b48d..fc97a80f7 100644 --- a/src/modular/monty_form.rs +++ b/src/modular/monty_form.rs @@ -64,8 +64,8 @@ impl MontyParams { } /// Returns the modulus which was used to initialize these parameters. - pub const fn modulus(&self) -> &Uint { - &self.modulus.0 + pub const fn modulus(&self) -> &Odd> { + &self.modulus } /// Create `MontyParams` corresponding to a `ConstMontyParams`. diff --git a/tests/boxed_monty_form.rs b/tests/boxed_monty_form.rs index ee0beecc8..019db8f6f 100644 --- a/tests/boxed_monty_form.rs +++ b/tests/boxed_monty_form.rs @@ -7,7 +7,7 @@ mod common; use common::to_biguint; use crypto_bigint::{ modular::{BoxedMontyForm, BoxedMontyParams}, - BoxedUint, Integer, Inverter, Limb, NonZero, Odd, PrecomputeInverter, + BoxedUint, Integer, Inverter, Limb, Odd, PrecomputeInverter, }; use num_bigint::BigUint; use num_modular::ModularUnaryOps; @@ -20,7 +20,6 @@ fn retrieve_biguint(monty_form: &BoxedMontyForm) -> BigUint { fn reduce(n: &BoxedUint, p: BoxedMontyParams) -> BoxedMontyForm { let bits_precision = p.modulus().bits_precision(); - let modulus = NonZero::new(p.modulus().clone()).unwrap(); let n = match n.bits_precision().cmp(&bits_precision) { Ordering::Less => n.widen(bits_precision), @@ -28,7 +27,10 @@ fn reduce(n: &BoxedUint, p: BoxedMontyParams) -> BoxedMontyForm { Ordering::Greater => n.shorten(bits_precision), }; - let n_reduced = n.rem_vartime(&modulus).widen(p.bits_precision()); + let n_reduced = n + .rem_vartime(p.modulus().as_nz_ref()) + .widen(p.bits_precision()); + BoxedMontyForm::new(n_reduced, p) } diff --git a/tests/monty_form.rs b/tests/monty_form.rs index 6f3a31e9d..8cc57d709 100644 --- a/tests/monty_form.rs +++ b/tests/monty_form.rs @@ -3,7 +3,7 @@ mod common; use common::to_biguint; -use crypto_bigint::{Integer, Invert, Inverter, NonZero, Odd, PrecomputeInverter, U256}; +use crypto_bigint::{Integer, Invert, Inverter, Odd, PrecomputeInverter, U256}; use num_bigint::BigUint; use num_modular::ModularUnaryOps; use proptest::prelude::*; @@ -16,8 +16,7 @@ fn retrieve_biguint(monty_form: &MontyForm) -> BigUint { } fn reduce(n: &U256, p: MontyParams) -> MontyForm { - let modulus = NonZero::new(p.modulus().clone()).unwrap(); - let n_reduced = n.rem_vartime(&modulus); + let n_reduced = n.rem_vartime(p.modulus().as_nz_ref()); MontyForm::new(&n_reduced, p) }