Skip to content

Commit b273519

Browse files
committed
Merge branch 'master' into dp-rayon-prime-gen
2 parents 0e2e7e6 + 056781d commit b273519

File tree

6 files changed

+36
-34
lines changed

6 files changed

+36
-34
lines changed

Diff for: benches/bench.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use core::num::NonZeroU32;
1+
use core::num::NonZero;
22

33
use criterion::{criterion_group, criterion_main, BatchSize, Criterion};
44
use crypto_bigint::{nlimbs, BoxedUint, Integer, Odd, RandomBits, Uint, U1024, U128, U256};
@@ -26,12 +26,12 @@ fn make_rng() -> ChaCha8Rng {
2626
}
2727

2828
fn random_odd_uint<T: RandomBits + Integer>(rng: &mut impl CryptoRngCore, bit_length: u32) -> Odd<T> {
29-
random_odd_integer::<T>(rng, NonZeroU32::new(bit_length).unwrap())
29+
random_odd_integer::<T>(rng, NonZero::new(bit_length).unwrap())
3030
}
3131

3232
fn make_sieve<const L: usize>(rng: &mut impl CryptoRngCore) -> Sieve<Uint<L>> {
3333
let start = random_odd_uint::<Uint<L>>(rng, Uint::<L>::BITS);
34-
Sieve::new(start.get(), NonZeroU32::new(Uint::<L>::BITS).unwrap(), false)
34+
Sieve::new(start.get(), NonZero::new(Uint::<L>::BITS).unwrap(), false)
3535
}
3636

3737
fn make_presieved_num<const L: usize>(rng: &mut impl CryptoRngCore) -> Odd<Uint<L>> {
@@ -49,7 +49,7 @@ fn bench_sieve(c: &mut Criterion) {
4949
group.bench_function("(U128) creation", |b| {
5050
b.iter_batched(
5151
|| random_odd_uint::<U128>(&mut OsRng, 128),
52-
|start| Sieve::new(start.get(), NonZeroU32::new(128).unwrap(), false),
52+
|start| Sieve::new(start.get(), NonZero::new(128).unwrap(), false),
5353
BatchSize::SmallInput,
5454
)
5555
});
@@ -70,7 +70,7 @@ fn bench_sieve(c: &mut Criterion) {
7070
group.bench_function("(U1024) creation", |b| {
7171
b.iter_batched(
7272
|| random_odd_uint::<U1024>(&mut OsRng, 1024),
73-
|start| Sieve::new(start.get(), NonZeroU32::new(1024).unwrap(), false),
73+
|start| Sieve::new(start.get(), NonZero::new(1024).unwrap(), false),
7474
BatchSize::SmallInput,
7575
)
7676
});
@@ -418,8 +418,8 @@ fn bench_glass_pumpkin(c: &mut Criterion) {
418418
// Mimics the sequence of checks `glass-pumpkin` does to find a prime.
419419
fn prime_like_gp(bit_length: u32, rng: &mut impl CryptoRngCore) -> BoxedUint {
420420
loop {
421-
let start = random_odd_integer::<BoxedUint>(rng, NonZeroU32::new(bit_length).unwrap()).get();
422-
let sieve = Sieve::new(start, NonZeroU32::new(bit_length).unwrap(), false);
421+
let start = random_odd_integer::<BoxedUint>(rng, NonZero::new(bit_length).unwrap()).get();
422+
let sieve = Sieve::new(start, NonZero::new(bit_length).unwrap(), false);
423423
for num in sieve {
424424
let odd_num = Odd::new(num.clone()).unwrap();
425425

@@ -442,8 +442,8 @@ fn bench_glass_pumpkin(c: &mut Criterion) {
442442
// Mimics the sequence of checks `glass-pumpkin` does to find a safe prime.
443443
fn safe_prime_like_gp(bit_length: u32, rng: &mut impl CryptoRngCore) -> BoxedUint {
444444
loop {
445-
let start = random_odd_integer::<BoxedUint>(rng, NonZeroU32::new(bit_length).unwrap()).get();
446-
let sieve = Sieve::new(start, NonZeroU32::new(bit_length).unwrap(), true);
445+
let start = random_odd_integer::<BoxedUint>(rng, NonZero::new(bit_length).unwrap()).get();
446+
let sieve = Sieve::new(start, NonZero::new(bit_length).unwrap(), true);
447447
for num in sieve {
448448
let odd_num = Odd::new(num.clone()).unwrap();
449449

Diff for: src/hazmat/gcd.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use crypto_bigint::{Integer, Limb, NonZero, Word};
1+
use core::num::NonZero;
2+
use crypto_bigint::{Integer, Limb, NonZero as CTNonZero, Word};
23

34
/// Calculates the greatest common divisor of `n` and `m`.
45
/// By definition, `gcd(0, m) == m`.
@@ -14,7 +15,7 @@ pub(crate) fn gcd_vartime<T: Integer>(n: &T, m: NonZero<Word>) -> Word {
1415
// Normalize input: the resulting (a, b) are both small, a >= b, and b != 0.
1516
let (a, b): (Word, Word) = if n.bits() > Word::BITS {
1617
// `m` is non-zero, so we can unwrap.
17-
let r = n.rem_limb(NonZero::new(Limb::from(m)).expect("divisor should be non-zero here"));
18+
let r = n.rem_limb(CTNonZero::new(Limb::from(m)).expect("divisor should be non-zero here"));
1819
(m, r.0)
1920
} else {
2021
// In this branch `n` is `Word::BITS` bits or shorter,
@@ -74,7 +75,8 @@ fn binary_gcd(mut n: Word, mut m: Word) -> Word {
7475

7576
#[cfg(test)]
7677
mod tests {
77-
use crypto_bigint::{NonZero, Word, U128};
78+
use core::num::NonZero;
79+
use crypto_bigint::{Word, U128};
7880
use num_bigint::BigUint;
7981
use num_integer::Integer;
8082
use proptest::prelude::*;

Diff for: src/hazmat/jacobi.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Jacobi symbol calculation.
22
3-
use crypto_bigint::{Integer, Limb, NonZero, Odd, Word};
3+
use crypto_bigint::{Integer, Limb, NonZero as CTNonZero, Odd, Word};
44

55
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
66
pub(crate) enum JacobiSymbol {
@@ -99,7 +99,7 @@ pub(crate) fn jacobi_symbol_vartime<T: Integer>(abs_a: Word, a_is_negative: bool
9999
let (result, a_long, p) = swap_long(result, a, p_long);
100100
// Can unwrap here, since `p` is swapped with `a`,
101101
// and `a` would be odd after `reduce_numerator()`.
102-
let a = a_long.rem_limb(NonZero::new(Limb::from(p)).expect("divisor should be non-zero here"));
102+
let a = a_long.rem_limb(CTNonZero::new(Limb::from(p)).expect("divisor should be non-zero here"));
103103
(result, a.0, p)
104104
};
105105

Diff for: src/hazmat/lucas.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//! Lucas primality test.
2-
use crypto_bigint::{Integer, Limb, Monty, NonZero, Odd, Square, Word};
2+
use core::num::NonZero;
3+
use crypto_bigint::{Integer, Limb, Monty, Odd, Square, Word};
34

45
use super::{
56
gcd::gcd_vartime,

Diff for: src/hazmat/miller_rabin.rs

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Miller-Rabin primality test.
22
3-
use crypto_bigint::{Integer, Limb, Monty, NonZero, Odd, PowBoundedExp, RandomMod, Square};
3+
use crypto_bigint::{Integer, Limb, Monty, NonZero as CTNonZero, Odd, PowBoundedExp, RandomMod, Square};
44
use rand_core::CryptoRngCore;
55

66
use super::Primality;
@@ -115,7 +115,7 @@ impl<T: Integer + RandomMod> MillerRabin<T> {
115115

116116
let range = self.candidate.wrapping_sub(&T::from(4u32));
117117
// Can unwrap here since `candidate` is odd, and `candidate >= 4` (as checked above)
118-
let range_nonzero = NonZero::new(range).expect("the range should be non-zero by construction");
118+
let range_nonzero = CTNonZero::new(range).expect("the range should be non-zero by construction");
119119
// This should not overflow as long as `random_mod()` behaves according to the contract
120120
// (that is, returns a number within the given range).
121121
let random = T::random_mod(rng, &range_nonzero)
@@ -136,9 +136,8 @@ impl<T: Integer + RandomMod> MillerRabin<T> {
136136

137137
#[cfg(test)]
138138
mod tests {
139-
140139
use alloc::format;
141-
use core::num::NonZeroU32;
140+
use core::num::NonZero;
142141

143142
use crypto_bigint::{Integer, Odd, RandomMod, Uint, U1024, U128, U1536, U64};
144143
use rand_chacha::ChaCha8Rng;
@@ -197,8 +196,8 @@ mod tests {
197196
#[test]
198197
fn trivial() {
199198
let mut rng = ChaCha8Rng::from_seed(*b"01234567890123456789012345678901");
200-
let start = random_odd_integer::<U1024>(&mut rng, NonZeroU32::new(1024).unwrap());
201-
for num in Sieve::new(start.get(), NonZeroU32::new(1024).unwrap(), false).take(10) {
199+
let start = random_odd_integer::<U1024>(&mut rng, NonZero::new(1024).unwrap());
200+
for num in Sieve::new(start.get(), NonZero::new(1024).unwrap(), false).take(10) {
202201
let mr = MillerRabin::new(Odd::new(num).unwrap());
203202

204203
// Trivial tests, must always be true.

Diff for: src/hazmat/sieve.rs

+13-13
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ mod tests {
249249

250250
use alloc::format;
251251
use alloc::vec::Vec;
252-
use core::num::NonZeroU32;
252+
use core::num::NonZero;
253253

254254
use crypto_bigint::U64;
255255
use num_prime::nt_funcs::factorize64;
@@ -264,8 +264,8 @@ mod tests {
264264
let max_prime = SMALL_PRIMES[SMALL_PRIMES.len() - 1];
265265

266266
let mut rng = ChaCha8Rng::from_seed(*b"01234567890123456789012345678901");
267-
let start = random_odd_integer::<U64>(&mut rng, NonZeroU32::new(32).unwrap()).get();
268-
for num in Sieve::new(start, NonZeroU32::new(32).unwrap(), false).take(100) {
267+
let start = random_odd_integer::<U64>(&mut rng, NonZero::new(32).unwrap()).get();
268+
for num in Sieve::new(start, NonZero::new(32).unwrap(), false).take(100) {
269269
let num_u64 = u64::from(num);
270270
assert!(num_u64.leading_zeros() == 32);
271271

@@ -280,9 +280,9 @@ mod tests {
280280
let max_prime = SMALL_PRIMES[SMALL_PRIMES.len() - 1];
281281

282282
let mut rng = ChaCha8Rng::from_seed(*b"01234567890123456789012345678901");
283-
let start = random_odd_integer::<crypto_bigint::BoxedUint>(&mut rng, NonZeroU32::new(32).unwrap()).get();
283+
let start = random_odd_integer::<crypto_bigint::BoxedUint>(&mut rng, NonZero::new(32).unwrap()).get();
284284

285-
for num in Sieve::new(start, NonZeroU32::new(32).unwrap(), false).take(100) {
285+
for num in Sieve::new(start, NonZero::new(32).unwrap(), false).take(100) {
286286
// For 32-bit targets
287287
#[allow(clippy::useless_conversion)]
288288
let num_u64: u64 = num.as_words()[0].into();
@@ -296,7 +296,7 @@ mod tests {
296296
}
297297

298298
fn check_sieve(start: u32, bit_length: u32, safe_prime: bool, reference: &[u32]) {
299-
let test = Sieve::new(U64::from(start), NonZeroU32::new(bit_length).unwrap(), safe_prime).collect::<Vec<_>>();
299+
let test = Sieve::new(U64::from(start), NonZero::new(bit_length).unwrap(), safe_prime).collect::<Vec<_>>();
300300
assert_eq!(test.len(), reference.len());
301301
for (x, y) in test.iter().zip(reference.iter()) {
302302
assert_eq!(x, &U64::from(*y));
@@ -351,42 +351,42 @@ mod tests {
351351
#[test]
352352
#[should_panic(expected = "The requested bit length (65) is larger than the precision of `start`")]
353353
fn sieve_too_many_bits() {
354-
let _sieve = Sieve::new(U64::ONE, NonZeroU32::new(65).unwrap(), false);
354+
let _sieve = Sieve::new(U64::ONE, NonZero::new(65).unwrap(), false);
355355
}
356356

357357
#[test]
358358
fn random_below_max_length() {
359359
for _ in 0..10 {
360-
let r = random_odd_integer::<U64>(&mut OsRng, NonZeroU32::new(50).unwrap()).get();
360+
let r = random_odd_integer::<U64>(&mut OsRng, NonZero::new(50).unwrap()).get();
361361
assert_eq!(r.bits(), 50);
362362
}
363363
}
364364

365365
#[test]
366366
#[should_panic(expected = "try_random_bits() failed: BitLengthTooLarge { bit_length: 65, bits_precision: 64 }")]
367367
fn random_odd_uint_too_many_bits() {
368-
let _p = random_odd_integer::<U64>(&mut OsRng, NonZeroU32::new(65).unwrap());
368+
let _p = random_odd_integer::<U64>(&mut OsRng, NonZero::new(65).unwrap());
369369
}
370370

371371
#[test]
372372
fn sieve_derived_traits() {
373-
let s = Sieve::new(U64::ONE, NonZeroU32::new(10).unwrap(), false);
373+
let s = Sieve::new(U64::ONE, NonZero::new(10).unwrap(), false);
374374
// Debug
375375
assert!(format!("{s:?}").starts_with("Sieve"));
376376
// Clone
377377
assert_eq!(s.clone(), s);
378378

379379
// PartialEq
380-
let s2 = Sieve::new(U64::ONE, NonZeroU32::new(10).unwrap(), false);
380+
let s2 = Sieve::new(U64::ONE, NonZero::new(10).unwrap(), false);
381381
assert_eq!(s, s2);
382-
let s3 = Sieve::new(U64::ONE, NonZeroU32::new(12).unwrap(), false);
382+
let s3 = Sieve::new(U64::ONE, NonZero::new(12).unwrap(), false);
383383
assert_ne!(s, s3);
384384
}
385385

386386
#[test]
387387
fn sieve_with_max_start() {
388388
let start = U64::MAX;
389-
let mut sieve = Sieve::new(start, NonZeroU32::new(U64::BITS).unwrap(), false);
389+
let mut sieve = Sieve::new(start, NonZero::new(U64::BITS).unwrap(), false);
390390
assert!(sieve.next().is_none());
391391
}
392392
}

0 commit comments

Comments
 (0)