Skip to content

Commit 7817743

Browse files
committed
Remove default-rng feature and associated functions
1 parent fdcd037 commit 7817743

File tree

5 files changed

+21
-74
lines changed

5 files changed

+21
-74
lines changed

Diff for: .github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
- name: Install cargo-llvm-cov
4545
uses: taiki-e/install-action@cargo-llvm-cov
4646
- name: Generate code coverage
47-
run: cargo llvm-cov --features default-rng,multicore --workspace --lcov --output-path lcov.info
47+
run: cargo llvm-cov --features multicore --workspace --lcov --output-path lcov.info
4848
- name: Upload coverage to Codecov
4949
uses: codecov/codecov-action@v5
5050
with:

Diff for: Cargo.toml

+1-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ glass_pumpkin = { version = "1", optional = true }
2020
rayon = { version = "1", optional = true }
2121

2222
[dev-dependencies]
23+
rand_core = { version = "0.9.2", default-features = false, features = ["os_rng"] }
2324
# need `crypto-bigint` with `alloc` to test `BoxedUint`
2425
crypto-bigint = { version = "0.7.0-pre.0", default-features = false, features = ["alloc"] }
2526
rand_chacha = "0.9"
@@ -37,8 +38,6 @@ rand_core_06 = { package = "rand_core", version = "0.6.4", default-features = fa
3738
rand_chacha_03 = { package = "rand_chacha", version = "0.3", default-features = false }
3839

3940
[features]
40-
default = ["default-rng"]
41-
default-rng = ["rand_core/os_rng"]
4241
tests-openssl = ["openssl"]
4342
tests-gmp = ["rug/std"]
4443
tests-glass-pumpkin = ["glass_pumpkin"]

Diff for: README.md

-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ Advanced users can use the [`hazmat`][hazmat-lnk] module in the library to build
4545

4646
The following features are available:
4747

48-
- `default-rng`: Use the OS default CSPRNG, `OsRng`. Enabled by default.
4948
- `multicore`: Enables additional parallel prime finding functions. Disabled by default.
5049

5150

Diff for: src/lib.rs

-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,6 @@ pub use presets::{
2828
};
2929
pub use traits::SieveFactory;
3030

31-
#[cfg(feature = "default-rng")]
32-
pub use presets::{generate_prime, generate_safe_prime};
33-
#[cfg(all(feature = "default-rng", feature = "multicore"))]
34-
pub use presets::{par_generate_prime, par_generate_safe_prime};
3531
#[cfg(feature = "multicore")]
3632
pub use presets::{par_generate_prime_with_rng, par_generate_safe_prime_with_rng};
3733

Diff for: src/presets.rs

+19-66
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
use crypto_bigint::{Integer, Odd, RandomBits, RandomMod, Word};
22
use rand_core::CryptoRng;
33

4-
#[cfg(feature = "default-rng")]
5-
use rand_core::{OsRng, TryRngCore};
6-
74
use crate::{
85
generic::sieve_and_find,
96
hazmat::{
@@ -14,52 +11,6 @@ use crate::{
1411
#[cfg(feature = "multicore")]
1512
use crate::generic::par_sieve_and_find;
1613

17-
/// Returns a random prime of size `bit_length` using [`OsRng`] as the RNG.
18-
///
19-
/// See [`is_prime`] for details about the performed checks.
20-
#[cfg(feature = "default-rng")]
21-
pub fn generate_prime<T: Integer + RandomBits + RandomMod>(bit_length: u32) -> T {
22-
generate_prime_with_rng(&mut OsRng.unwrap_err(), bit_length)
23-
}
24-
25-
/// Returns a random prime of size `bit_length` using [`OsRng`] as the RNG.
26-
///
27-
/// See [`is_prime`] for details about the performed checks.
28-
///
29-
/// Uses `threadcount` cores to parallelize the prime search.
30-
///
31-
/// Panics if `bit_length` is less than 2, or greater than the bit size of the target `Uint`.
32-
///
33-
/// Panics if the platform is unable to spawn threads.
34-
#[cfg(all(feature = "default-rng", feature = "multicore"))]
35-
pub fn par_generate_prime<T: Integer + RandomBits + RandomMod>(bit_length: u32, threadcount: usize) -> T {
36-
par_generate_prime_with_rng(&mut OsRng.unwrap_err(), bit_length, threadcount)
37-
}
38-
39-
/// Returns a random safe prime (that is, such that `(n - 1) / 2` is also prime) of size
40-
/// `bit_length` using [`OsRng`] as the RNG.
41-
///
42-
/// See [`is_prime`] for details about the performed checks.
43-
#[cfg(feature = "default-rng")]
44-
pub fn generate_safe_prime<T: Integer + RandomBits + RandomMod>(bit_length: u32) -> T {
45-
generate_safe_prime_with_rng(&mut OsRng.unwrap_err(), bit_length)
46-
}
47-
48-
/// Returns a random safe prime (that is, such that `(n - 1) / 2` is also prime) of size
49-
/// `bit_length` using [`OsRng`] as the RNG.
50-
///
51-
/// See [`is_prime`] for details about the performed checks.
52-
///
53-
/// Uses `threadcount` cores to parallelize the prime search.
54-
///
55-
/// Panics if `bit_length` is less than 3, or greater than the bit size of the target `Uint`.
56-
///
57-
/// Panics if the platform is unable to spawn threads.
58-
#[cfg(all(feature = "default-rng", feature = "multicore"))]
59-
pub fn par_generate_safe_prime<T: Integer + RandomBits + RandomMod>(bit_length: u32, threadcount: usize) -> T {
60-
par_generate_safe_prime_with_rng(&mut OsRng.unwrap_err(), bit_length, threadcount)
61-
}
62-
6314
/// Returns a random prime of size `bit_length` using the provided RNG.
6415
///
6516
/// Panics if `bit_length` is less than 2, or greater than the bit size of the target `Uint`.
@@ -306,8 +257,8 @@ mod tests {
306257
use rand_core::{OsRng, TryRngCore};
307258

308259
use super::{
309-
fips_is_prime_with_rng, fips_is_safe_prime_with_rng, generate_prime, generate_prime_with_rng,
310-
generate_safe_prime, generate_safe_prime_with_rng, is_prime, is_safe_prime,
260+
fips_is_prime_with_rng, fips_is_safe_prime_with_rng, generate_prime_with_rng, generate_safe_prime_with_rng,
261+
is_prime, is_safe_prime,
311262
};
312263
use crate::hazmat::{minimum_mr_iterations, primes, pseudoprimes};
313264

@@ -396,7 +347,7 @@ mod tests {
396347
#[test]
397348
fn prime_generation() {
398349
for bit_length in (28..=128).step_by(10) {
399-
let p: U128 = generate_prime(bit_length);
350+
let p: U128 = generate_prime_with_rng(&mut OsRng.unwrap_mut(), bit_length);
400351
assert!(p.bits_vartime() == bit_length);
401352
assert!(is_prime(&p));
402353
assert!(fips_is_prime(&p));
@@ -406,7 +357,7 @@ mod tests {
406357
#[test]
407358
fn prime_generation_boxed() {
408359
for bit_length in (28..=128).step_by(10) {
409-
let p: BoxedUint = generate_prime(bit_length);
360+
let p: BoxedUint = generate_prime_with_rng(&mut OsRng.unwrap_mut(), bit_length);
410361
assert!(p.bits_vartime() == bit_length);
411362
assert!(p.to_words().len() == nlimbs!(bit_length));
412363
assert!(is_prime(&p));
@@ -417,7 +368,7 @@ mod tests {
417368
#[test]
418369
fn safe_prime_generation() {
419370
for bit_length in (28..=128).step_by(10) {
420-
let p: U128 = generate_safe_prime(bit_length);
371+
let p: U128 = generate_safe_prime_with_rng(&mut OsRng.unwrap_mut(), bit_length);
421372
assert!(p.bits_vartime() == bit_length);
422373
assert!(is_safe_prime(&p));
423374
assert!(fips_is_safe_prime(&p));
@@ -427,7 +378,7 @@ mod tests {
427378
#[test]
428379
fn safe_prime_generation_boxed() {
429380
for bit_length in (28..=189).step_by(10) {
430-
let p: BoxedUint = generate_safe_prime(bit_length);
381+
let p: BoxedUint = generate_safe_prime_with_rng(&mut OsRng.unwrap_mut(), bit_length);
431382
assert!(p.bits_vartime() == bit_length);
432383
assert!(p.to_words().len() == nlimbs!(bit_length));
433384
assert!(is_safe_prime(&p));
@@ -499,7 +450,7 @@ mod tests {
499450
fn corner_cases_generate_prime() {
500451
for bits in 2..5 {
501452
for _ in 0..100 {
502-
let p: U64 = generate_prime(bits);
453+
let p: U64 = generate_prime_with_rng(&mut OsRng.unwrap_mut(), bits);
503454
let p_word = p.as_words()[0];
504455
assert!(is_prime_ref(p_word));
505456
}
@@ -510,7 +461,7 @@ mod tests {
510461
fn corner_cases_generate_safe_prime() {
511462
for bits in 3..5 {
512463
for _ in 0..100 {
513-
let p: U64 = generate_safe_prime(bits);
464+
let p: U64 = generate_safe_prime_with_rng(&mut OsRng.unwrap_mut(), bits);
514465
let p_word = p.as_words()[0];
515466
assert!(is_prime_ref(p_word) && is_prime_ref(p_word / 2));
516467
}
@@ -520,13 +471,15 @@ mod tests {
520471

521472
#[cfg(all(test, feature = "multicore"))]
522473
mod multicore_tests {
523-
use super::{is_prime, par_generate_prime, par_generate_safe_prime};
474+
use rand_core::{OsRng, TryRngCore};
475+
476+
use super::{is_prime, par_generate_prime_with_rng, par_generate_safe_prime_with_rng};
524477
use crypto_bigint::{nlimbs, BoxedUint, U128};
525478

526479
#[test]
527480
fn parallel_prime_generation() {
528481
for bit_length in (28..=128).step_by(10) {
529-
let p: U128 = par_generate_prime(bit_length, 4);
482+
let p: U128 = par_generate_prime_with_rng(&mut OsRng.unwrap_err(), bit_length, 4);
530483
assert!(p.bits_vartime() == bit_length);
531484
assert!(is_prime(&p));
532485
}
@@ -535,7 +488,7 @@ mod multicore_tests {
535488
#[test]
536489
fn parallel_prime_generation_boxed() {
537490
for bit_length in (28..=128).step_by(10) {
538-
let p: BoxedUint = par_generate_prime(bit_length, 2);
491+
let p: BoxedUint = par_generate_prime_with_rng(&mut OsRng.unwrap_err(), bit_length, 2);
539492
assert!(p.bits_vartime() == bit_length);
540493
assert!(p.to_words().len() == nlimbs!(bit_length));
541494
assert!(is_prime(&p));
@@ -545,7 +498,7 @@ mod multicore_tests {
545498
#[test]
546499
fn parallel_safe_prime_generation() {
547500
for bit_length in (28..=128).step_by(10) {
548-
let p: U128 = par_generate_safe_prime(bit_length, 8);
501+
let p: U128 = par_generate_safe_prime_with_rng(&mut OsRng.unwrap_err(), bit_length, 8);
549502
assert!(p.bits_vartime() == bit_length);
550503
assert!(is_prime(&p));
551504
}
@@ -554,7 +507,7 @@ mod multicore_tests {
554507
#[test]
555508
fn parallel_safe_prime_generation_boxed() {
556509
for bit_length in (28..=128).step_by(10) {
557-
let p: BoxedUint = par_generate_safe_prime(bit_length, 4);
510+
let p: BoxedUint = par_generate_safe_prime_with_rng(&mut OsRng.unwrap_err(), bit_length, 4);
558511
assert!(p.bits_vartime() == bit_length);
559512
assert!(p.to_words().len() == nlimbs!(bit_length));
560513
assert!(is_prime(&p));
@@ -572,7 +525,7 @@ mod tests_openssl {
572525
use openssl::bn::{BigNum, BigNumContext};
573526
use rand_core::{OsRng, TryRngCore};
574527

575-
use super::{fips_is_prime_with_rng, generate_prime, is_prime};
528+
use super::{fips_is_prime_with_rng, generate_prime_with_rng, is_prime};
576529
use crate::hazmat::{minimum_mr_iterations, random_odd_integer, SetBits};
577530

578531
fn openssl_is_prime(num: &BigNum, ctx: &mut BigNumContext) -> bool {
@@ -593,7 +546,7 @@ mod tests_openssl {
593546

594547
// Generate primes, let OpenSSL check them
595548
for _ in 0..100 {
596-
let p: U128 = generate_prime(128);
549+
let p: U128 = generate_prime_with_rng(&mut OsRng.unwrap_mut(), 128);
597550
let p_bn = to_openssl(&p);
598551
assert!(openssl_is_prime(&p_bn, &mut ctx), "OpenSSL reports {p} as composite",);
599552
}
@@ -645,7 +598,7 @@ mod tests_gmp {
645598
Integer,
646599
};
647600

648-
use super::{fips_is_prime_with_rng, generate_prime, is_prime};
601+
use super::{fips_is_prime_with_rng, generate_prime_with_rng, is_prime};
649602
use crate::hazmat::{minimum_mr_iterations, random_odd_integer, SetBits};
650603

651604
fn gmp_is_prime(num: &Integer) -> bool {
@@ -664,7 +617,7 @@ mod tests_gmp {
664617
fn gmp_cross_check() {
665618
// Generate primes, let GMP check them
666619
for _ in 0..100 {
667-
let p: U128 = generate_prime(128);
620+
let p: U128 = generate_prime_with_rng(&mut OsRng.unwrap_mut(), 128);
668621
let p_bn = to_gmp(&p);
669622
assert!(gmp_is_prime(&p_bn), "GMP reports {p} as composite");
670623
}

0 commit comments

Comments
 (0)