Skip to content

Commit 134d528

Browse files
committed
Roll back MillerRabin taking the argument by value
1 parent 761af2d commit 134d528

File tree

3 files changed

+15
-15
lines changed

3 files changed

+15
-15
lines changed

benches/bench.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,14 @@ fn bench_miller_rabin(c: &mut Criterion) {
9494
group.bench_function("(U128) creation", |b| {
9595
b.iter_batched(
9696
|| random_odd_uint::<U128>(&mut OsRng, 128),
97-
MillerRabin::new,
97+
|n| MillerRabin::new(&n),
9898
BatchSize::SmallInput,
9999
)
100100
});
101101

102102
group.bench_function("(U128) random base test (pre-sieved)", |b| {
103103
b.iter_batched(
104-
|| MillerRabin::new(make_presieved_num::<{ nlimbs!(128) }>(&mut OsRng)),
104+
|| MillerRabin::new(&make_presieved_num::<{ nlimbs!(128) }>(&mut OsRng)),
105105
|mr| mr.test_random_base(&mut OsRng),
106106
BatchSize::SmallInput,
107107
)
@@ -110,14 +110,14 @@ fn bench_miller_rabin(c: &mut Criterion) {
110110
group.bench_function("(U1024) creation", |b| {
111111
b.iter_batched(
112112
|| random_odd_uint::<U1024>(&mut OsRng, 1024),
113-
MillerRabin::new,
113+
|n| MillerRabin::new(&n),
114114
BatchSize::SmallInput,
115115
)
116116
});
117117

118118
group.bench_function("(U1024) random base test (pre-sieved)", |b| {
119119
b.iter_batched(
120-
|| MillerRabin::new(make_presieved_num::<{ nlimbs!(1024) }>(&mut OsRng)),
120+
|| MillerRabin::new(&make_presieved_num::<{ nlimbs!(1024) }>(&mut OsRng)),
121121
|mr| mr.test_random_base(&mut OsRng),
122122
BatchSize::SmallInput,
123123
)

src/hazmat/miller_rabin.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ pub struct MillerRabin<T: Integer> {
2626

2727
impl<T: Integer + RandomMod> MillerRabin<T> {
2828
/// Initializes a Miller-Rabin test for `candidate`.
29-
pub fn new(candidate: Odd<T>) -> Self {
29+
pub fn new(candidate: &Odd<T>) -> Self {
3030
let params = <T as Integer>::Monty::new_params_vartime(candidate.clone());
3131
let one = <T as Integer>::Monty::one(params.clone());
3232
let minus_one = -one.clone();
@@ -131,7 +131,7 @@ mod tests {
131131

132132
#[test]
133133
fn miller_rabin_derived_traits() {
134-
let mr = MillerRabin::new(Odd::new(U64::ONE).unwrap());
134+
let mr = MillerRabin::new(&Odd::new(U64::ONE).unwrap());
135135
assert!(format!("{mr:?}").starts_with("MillerRabin"));
136136
assert_eq!(mr.clone(), mr);
137137
}
@@ -141,7 +141,7 @@ mod tests {
141141
expected = "No suitable random base possible when `candidate == 3`; use the base 2 test."
142142
)]
143143
fn random_base_range_check() {
144-
let mr = MillerRabin::new(Odd::new(U64::from(3u32)).unwrap());
144+
let mr = MillerRabin::new(&Odd::new(U64::from(3u32)).unwrap());
145145
mr.test_random_base(&mut OsRng);
146146
}
147147

@@ -173,7 +173,7 @@ mod tests {
173173
// with about 1/4 probability. So we're expecting less than
174174
// 35 out of 100 false positives, seems to work.
175175

176-
let mr = MillerRabin::new(Odd::new(U64::from(*num)).unwrap());
176+
let mr = MillerRabin::new(&Odd::new(U64::from(*num)).unwrap());
177177
assert_eq!(
178178
mr.test_base_two().is_probably_prime(),
179179
actual_expected_result
@@ -191,7 +191,7 @@ mod tests {
191191
let mut rng = ChaCha8Rng::from_seed(*b"01234567890123456789012345678901");
192192
let start = random_odd_integer::<U1024>(&mut rng, NonZeroU32::new(1024).unwrap());
193193
for num in Sieve::new(start.as_ref(), NonZeroU32::new(1024).unwrap(), false).take(10) {
194-
let mr = MillerRabin::new(Odd::new(num).unwrap());
194+
let mr = MillerRabin::new(&Odd::new(num).unwrap());
195195

196196
// Trivial tests, must always be true.
197197
assert!(mr.test(&1u32.into()).is_probably_prime());
@@ -206,7 +206,7 @@ mod tests {
206206
// Mersenne prime 2^127-1
207207
let num = Odd::new(U128::from_be_hex("7fffffffffffffffffffffffffffffff")).unwrap();
208208

209-
let mr = MillerRabin::new(num);
209+
let mr = MillerRabin::new(&num);
210210
assert!(mr.test_base_two().is_probably_prime());
211211
for _ in 0..10 {
212212
assert!(mr.test_random_base(&mut rng).is_probably_prime());
@@ -218,7 +218,7 @@ mod tests {
218218
let mut rng = ChaCha8Rng::from_seed(*b"01234567890123456789012345678901");
219219

220220
for num in pseudoprimes::STRONG_FIBONACCI.iter() {
221-
let mr = MillerRabin::new(Odd::new(*num).unwrap());
221+
let mr = MillerRabin::new(&Odd::new(*num).unwrap());
222222
assert!(!mr.test_base_two().is_probably_prime());
223223
for _ in 0..1000 {
224224
assert!(!mr.test_random_base(&mut rng).is_probably_prime());
@@ -246,7 +246,7 @@ mod tests {
246246

247247
#[test]
248248
fn large_carmichael_number() {
249-
let mr = MillerRabin::new(Odd::new(pseudoprimes::LARGE_CARMICHAEL_NUMBER).unwrap());
249+
let mr = MillerRabin::new(&Odd::new(pseudoprimes::LARGE_CARMICHAEL_NUMBER).unwrap());
250250

251251
// It is known to pass MR tests for all prime bases <307
252252
assert!(mr.test_base_two().is_probably_prime());
@@ -259,7 +259,7 @@ mod tests {
259259
fn test_large_primes<const L: usize>(nums: &[Uint<L>]) {
260260
let mut rng = ChaCha8Rng::from_seed(*b"01234567890123456789012345678901");
261261
for num in nums {
262-
let mr = MillerRabin::new(Odd::new(*num).unwrap());
262+
let mr = MillerRabin::new(&Odd::new(*num).unwrap());
263263
assert!(mr.test_base_two().is_probably_prime());
264264
for _ in 0..10 {
265265
assert!(mr.test_random_base(&mut rng).is_probably_prime());
@@ -286,7 +286,7 @@ mod tests {
286286

287287
let spsp = is_spsp(num);
288288

289-
let mr = MillerRabin::new(Odd::new(U64::from(num)).unwrap());
289+
let mr = MillerRabin::new(&Odd::new(U64::from(num)).unwrap());
290290
let res = mr.test_base_two().is_probably_prime();
291291
let expected = spsp || res_ref;
292292
assert_eq!(

src/presets.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ pub fn is_safe_prime_with_rng<T: Integer + RandomMod>(
162162

163163
/// Checks for primality assuming that `num` is odd.
164164
fn _is_prime_with_rng<T: Integer + RandomMod>(rng: &mut impl CryptoRngCore, num: &Odd<T>) -> bool {
165-
let mr = MillerRabin::new(num.clone());
165+
let mr = MillerRabin::new(num);
166166

167167
if !mr.test_base_two().is_probably_prime() {
168168
return false;

0 commit comments

Comments
 (0)