Skip to content

Commit 61fcd64

Browse files
committed
Use verbs instead of nouns for prime-generation functions
1 parent 65ed5d4 commit 61fcd64

File tree

5 files changed

+59
-40
lines changed

5 files changed

+59
-40
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212
- `MillerRabin::new()` and `test_random_base()` will panic if the input is invalid. ([#22])
1313
- `MillerRabin::check()` renamed to `test()`. ([#22])
1414
- Prime-generating function take `Option<usize>` instead of `usize`, where `None` means the full size of the `Uint`. ([#19])
15+
- Renamed `prime()` to `generate_prime()`, `safe_prime()` to `generate_safe_prime()`, `prime_with_rng()` to `generate_prime_with_rng()`, `safe_prime_with_rng()` to `generate_safe_prime_with_rng()`. ([#24])
1516

1617

1718
### Added
@@ -29,6 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2930
[#19]: https://github.com/nucypher/rust-umbral/pull/19
3031
[#20]: https://github.com/nucypher/rust-umbral/pull/20
3132
[#22]: https://github.com/nucypher/rust-umbral/pull/22
33+
[#24]: https://github.com/nucypher/rust-umbral/pull/24
3234

3335

3436
## [0.2.0] - 2023-03-06

benches/bench.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ use rug::{integer::Order, Integer};
1010
use openssl::bn::BigNum;
1111

1212
use crypto_primes::{
13+
generate_prime_with_rng, generate_safe_prime_with_rng,
1314
hazmat::{
1415
lucas_test, random_odd_uint, AStarBase, BruteForceBase, LucasCheck, MillerRabin,
1516
SelfridgeBase, Sieve,
1617
},
17-
is_prime_with_rng, is_safe_prime_with_rng, prime_with_rng, safe_prime_with_rng,
18+
is_prime_with_rng, is_safe_prime_with_rng,
1819
};
1920

2021
fn make_rng() -> ChaCha8Rng {
@@ -207,23 +208,23 @@ fn bench_presets(c: &mut Criterion) {
207208

208209
let mut rng = make_rng();
209210
group.bench_function("(U128) Random prime", |b| {
210-
b.iter(|| prime_with_rng::<{ nlimbs!(128) }>(&mut rng, None))
211+
b.iter(|| generate_prime_with_rng::<{ nlimbs!(128) }>(&mut rng, None))
211212
});
212213

213214
let mut rng = make_rng();
214215
group.bench_function("(U1024) Random prime", |b| {
215-
b.iter(|| prime_with_rng::<{ nlimbs!(1024) }>(&mut rng, None))
216+
b.iter(|| generate_prime_with_rng::<{ nlimbs!(1024) }>(&mut rng, None))
216217
});
217218

218219
let mut rng = make_rng();
219220
group.bench_function("(U128) Random safe prime", |b| {
220-
b.iter(|| safe_prime_with_rng::<{ nlimbs!(128) }>(&mut rng, None))
221+
b.iter(|| generate_safe_prime_with_rng::<{ nlimbs!(128) }>(&mut rng, None))
221222
});
222223

223224
group.sample_size(20);
224225
let mut rng = make_rng();
225226
group.bench_function("(U1024) Random safe prime", |b| {
226-
b.iter(|| safe_prime_with_rng::<{ nlimbs!(1024) }>(&mut rng, None))
227+
b.iter(|| generate_safe_prime_with_rng::<{ nlimbs!(1024) }>(&mut rng, None))
227228
});
228229

229230
group.finish();
@@ -233,19 +234,19 @@ fn bench_presets(c: &mut Criterion) {
233234

234235
let mut rng = make_rng();
235236
group.bench_function("(U128) Random safe prime", |b| {
236-
b.iter(|| safe_prime_with_rng::<{ nlimbs!(128) }>(&mut rng, None))
237+
b.iter(|| generate_safe_prime_with_rng::<{ nlimbs!(128) }>(&mut rng, None))
237238
});
238239

239240
// The performance should scale with the prime size, not with the Uint size.
240241
// So we should strive for this test's result to be as close as possible
241242
// to that of the previous one and as far away as possible from the next one.
242243
group.bench_function("(U256) Random 128 bit safe prime", |b| {
243-
b.iter(|| safe_prime_with_rng::<{ nlimbs!(256) }>(&mut rng, Some(128)))
244+
b.iter(|| generate_safe_prime_with_rng::<{ nlimbs!(256) }>(&mut rng, Some(128)))
244245
});
245246

246247
// The upper bound for the previous test.
247248
group.bench_function("(U256) Random 256 bit safe prime", |b| {
248-
b.iter(|| safe_prime_with_rng::<{ nlimbs!(256) }>(&mut rng, None))
249+
b.iter(|| generate_safe_prime_with_rng::<{ nlimbs!(256) }>(&mut rng, None))
249250
});
250251

251252
group.finish();

src/lib.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@ pub mod hazmat;
1919
mod presets;
2020
mod traits;
2121

22-
pub use presets::{is_prime_with_rng, is_safe_prime_with_rng, prime_with_rng, safe_prime_with_rng};
22+
pub use presets::{
23+
generate_prime_with_rng, generate_safe_prime_with_rng, is_prime_with_rng,
24+
is_safe_prime_with_rng,
25+
};
2326
pub use traits::RandomPrimeWithRng;
2427

2528
#[cfg(feature = "default-rng")]
26-
pub use presets::{is_prime, is_safe_prime, prime, safe_prime};
29+
pub use presets::{generate_prime, generate_safe_prime, is_prime, is_safe_prime};

src/presets.rs

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ use crate::hazmat::{
1313
///
1414
/// See [`is_prime_with_rng`] for details about the performed checks.
1515
#[cfg(feature = "default-rng")]
16-
pub fn prime<const L: usize>(bit_length: Option<usize>) -> Uint<L> {
17-
prime_with_rng(&mut OsRng, bit_length)
16+
pub fn generate_prime<const L: usize>(bit_length: Option<usize>) -> Uint<L> {
17+
generate_prime_with_rng(&mut OsRng, bit_length)
1818
}
1919

2020
/// Returns a random safe prime (that is, such that `(n - 1) / 2` is also prime)
@@ -23,8 +23,8 @@ pub fn prime<const L: usize>(bit_length: Option<usize>) -> Uint<L> {
2323
///
2424
/// See [`is_prime_with_rng`] for details about the performed checks.
2525
#[cfg(feature = "default-rng")]
26-
pub fn safe_prime<const L: usize>(bit_length: Option<usize>) -> Uint<L> {
27-
safe_prime_with_rng(&mut OsRng, bit_length)
26+
pub fn generate_safe_prime<const L: usize>(bit_length: Option<usize>) -> Uint<L> {
27+
generate_safe_prime_with_rng(&mut OsRng, bit_length)
2828
}
2929

3030
/// Checks probabilistically if the given number is prime using [`OsRng`] as the RNG.
@@ -51,7 +51,7 @@ pub fn is_safe_prime<const L: usize>(num: &Uint<L>) -> bool {
5151
/// Panics if `bit_length` is less than 2, or greater than the bit size of the target `Uint`.
5252
///
5353
/// See [`is_prime_with_rng`] for details about the performed checks.
54-
pub fn prime_with_rng<const L: usize>(
54+
pub fn generate_prime_with_rng<const L: usize>(
5555
rng: &mut impl CryptoRngCore,
5656
bit_length: Option<usize>,
5757
) -> Uint<L> {
@@ -77,7 +77,7 @@ pub fn prime_with_rng<const L: usize>(
7777
/// Panics if `bit_length` is less than 3, or is greater than the bit size of the target `Uint`.
7878
///
7979
/// See [`is_prime_with_rng`] for details about the performed checks.
80-
pub fn safe_prime_with_rng<const L: usize>(
80+
pub fn generate_safe_prime_with_rng<const L: usize>(
8181
rng: &mut impl CryptoRngCore,
8282
bit_length: Option<usize>,
8383
) -> Uint<L> {
@@ -178,7 +178,10 @@ mod tests {
178178
use num_prime::nt_funcs::is_prime64;
179179
use rand_core::OsRng;
180180

181-
use super::{is_prime, is_safe_prime, prime, prime_with_rng, safe_prime, safe_prime_with_rng};
181+
use super::{
182+
generate_prime, generate_prime_with_rng, generate_safe_prime, generate_safe_prime_with_rng,
183+
is_prime, is_safe_prime,
184+
};
182185
use crate::hazmat::{primes, pseudoprimes};
183186

184187
fn test_large_primes<const L: usize>(nums: &[Uint<L>]) {
@@ -247,18 +250,18 @@ mod tests {
247250
}
248251

249252
#[test]
250-
fn generate_prime() {
253+
fn prime_generation() {
251254
for bit_length in (28..=128).step_by(10) {
252-
let p: U128 = prime(Some(bit_length));
255+
let p: U128 = generate_prime(Some(bit_length));
253256
assert!(p.bits_vartime() == bit_length);
254257
assert!(is_prime(&p));
255258
}
256259
}
257260

258261
#[test]
259-
fn generate_safe_prime() {
262+
fn safe_prime_generation() {
260263
for bit_length in (28..=128).step_by(10) {
261-
let p: U128 = safe_prime(Some(bit_length));
264+
let p: U128 = generate_safe_prime(Some(bit_length));
262265
assert!(p.bits_vartime() == bit_length);
263266
assert!(is_safe_prime(&p));
264267
}
@@ -291,25 +294,25 @@ mod tests {
291294
#[test]
292295
#[should_panic(expected = "`bit_length` must be 2 or greater")]
293296
fn generate_prime_too_few_bits() {
294-
let _p: U64 = prime_with_rng(&mut OsRng, Some(1));
297+
let _p: U64 = generate_prime_with_rng(&mut OsRng, Some(1));
295298
}
296299

297300
#[test]
298301
#[should_panic(expected = "`bit_length` must be 3 or greater")]
299302
fn generate_safe_prime_too_few_bits() {
300-
let _p: U64 = safe_prime_with_rng(&mut OsRng, Some(2));
303+
let _p: U64 = generate_safe_prime_with_rng(&mut OsRng, Some(2));
301304
}
302305

303306
#[test]
304307
#[should_panic(expected = "The requested bit length (65) is larger than the chosen Uint size")]
305308
fn generate_prime_too_many_bits() {
306-
let _p: U64 = prime_with_rng(&mut OsRng, Some(65));
309+
let _p: U64 = generate_prime_with_rng(&mut OsRng, Some(65));
307310
}
308311

309312
#[test]
310313
#[should_panic(expected = "The requested bit length (65) is larger than the chosen Uint size")]
311314
fn generate_safe_prime_too_many_bits() {
312-
let _p: U64 = safe_prime_with_rng(&mut OsRng, Some(65));
315+
let _p: U64 = generate_safe_prime_with_rng(&mut OsRng, Some(65));
313316
}
314317

315318
fn is_prime_ref(num: Word) -> bool {
@@ -320,7 +323,7 @@ mod tests {
320323
fn corner_cases_generate_prime() {
321324
for bits in 2usize..5 {
322325
for _ in 0..100 {
323-
let p: U64 = prime(Some(bits));
326+
let p: U64 = generate_prime(Some(bits));
324327
let p_word = p.as_words()[0];
325328
assert!(is_prime_ref(p_word));
326329
}
@@ -331,7 +334,7 @@ mod tests {
331334
fn corner_cases_generate_safe_prime() {
332335
for bits in 3usize..5 {
333336
for _ in 0..100 {
334-
let p: U64 = safe_prime(Some(bits));
337+
let p: U64 = generate_safe_prime(Some(bits));
335338
let p_word = p.as_words()[0];
336339
assert!(is_prime_ref(p_word) && is_prime_ref(p_word / 2));
337340
}
@@ -348,7 +351,7 @@ mod tests_openssl {
348351
use openssl::bn::{BigNum, BigNumContext};
349352
use rand_core::OsRng;
350353

351-
use super::{is_prime, prime};
354+
use super::{generate_prime, is_prime};
352355
use crate::hazmat::random_odd_uint;
353356

354357
fn openssl_is_prime(num: &BigNum, ctx: &mut BigNumContext) -> bool {
@@ -369,7 +372,7 @@ mod tests_openssl {
369372

370373
// Generate primes, let OpenSSL check them
371374
for _ in 0..100 {
372-
let p: U128 = prime(Some(128));
375+
let p: U128 = generate_prime(Some(128));
373376
let p_bn = to_openssl(&p);
374377
assert!(
375378
openssl_is_prime(&p_bn, &mut ctx),
@@ -409,7 +412,7 @@ mod tests_gmp {
409412
Integer,
410413
};
411414

412-
use super::{is_prime, prime};
415+
use super::{generate_prime, is_prime};
413416
use crate::hazmat::random_odd_uint;
414417

415418
fn gmp_is_prime(num: &Integer) -> bool {
@@ -428,7 +431,7 @@ mod tests_gmp {
428431
fn gmp_cross_check() {
429432
// Generate primes, let GMP check them
430433
for _ in 0..100 {
431-
let p: U128 = prime(Some(128));
434+
let p: U128 = generate_prime(Some(128));
432435
let p_bn = to_gmp(&p);
433436
assert!(gmp_is_prime(&p_bn), "GMP reports {p} as composite");
434437
}

src/traits.rs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
use crypto_bigint::Uint;
22
use rand_core::CryptoRngCore;
33

4-
use crate::{is_prime_with_rng, is_safe_prime_with_rng, prime_with_rng, safe_prime_with_rng};
4+
use crate::{
5+
generate_prime_with_rng, generate_safe_prime_with_rng, is_prime_with_rng,
6+
is_safe_prime_with_rng,
7+
};
58

69
/// Provides a generic way to access methods for random prime number generation
710
/// and primality checking, wrapping the standalone functions ([`is_prime_with_rng`] etc).
@@ -12,7 +15,7 @@ pub trait RandomPrimeWithRng {
1215
/// Panics if `bit_length` is less than 2, or greater than the bit size of the target `Uint`.
1316
///
1417
/// See [`is_prime_with_rng`] for details about the performed checks.
15-
fn prime_with_rng(rng: &mut impl CryptoRngCore, bit_length: Option<usize>) -> Self;
18+
fn generate_prime_with_rng(rng: &mut impl CryptoRngCore, bit_length: Option<usize>) -> Self;
1619

1720
/// Returns a random safe prime (that is, such that `(n - 1) / 2` is also prime)
1821
/// of size `bit_length` using the provided RNG.
@@ -21,7 +24,10 @@ pub trait RandomPrimeWithRng {
2124
/// Panics if `bit_length` is less than 3, or greater than the bit size of the target `Uint`.
2225
///
2326
/// See [`is_prime_with_rng`] for details about the performed checks.
24-
fn safe_prime_with_rng(rng: &mut impl CryptoRngCore, bit_length: Option<usize>) -> Self;
27+
fn generate_safe_prime_with_rng(
28+
rng: &mut impl CryptoRngCore,
29+
bit_length: Option<usize>,
30+
) -> Self;
2531

2632
/// Checks probabilistically if the given number is prime using the provided RNG.
2733
///
@@ -35,11 +41,14 @@ pub trait RandomPrimeWithRng {
3541
}
3642

3743
impl<const L: usize> RandomPrimeWithRng for Uint<L> {
38-
fn prime_with_rng(rng: &mut impl CryptoRngCore, bit_length: Option<usize>) -> Self {
39-
prime_with_rng(rng, bit_length)
44+
fn generate_prime_with_rng(rng: &mut impl CryptoRngCore, bit_length: Option<usize>) -> Self {
45+
generate_prime_with_rng(rng, bit_length)
4046
}
41-
fn safe_prime_with_rng(rng: &mut impl CryptoRngCore, bit_length: Option<usize>) -> Self {
42-
safe_prime_with_rng(rng, bit_length)
47+
fn generate_safe_prime_with_rng(
48+
rng: &mut impl CryptoRngCore,
49+
bit_length: Option<usize>,
50+
) -> Self {
51+
generate_safe_prime_with_rng(rng, bit_length)
4352
}
4453
fn is_prime_with_rng(&self, rng: &mut impl CryptoRngCore) -> bool {
4554
is_prime_with_rng(rng, self)
@@ -64,7 +73,8 @@ mod tests {
6473
assert!(!U64::from(13u32).is_safe_prime_with_rng(&mut OsRng));
6574
assert!(U64::from(11u32).is_safe_prime_with_rng(&mut OsRng));
6675

67-
assert!(U64::prime_with_rng(&mut OsRng, Some(10)).is_prime_with_rng(&mut OsRng));
68-
assert!(U64::safe_prime_with_rng(&mut OsRng, Some(10)).is_safe_prime_with_rng(&mut OsRng));
76+
assert!(U64::generate_prime_with_rng(&mut OsRng, Some(10)).is_prime_with_rng(&mut OsRng));
77+
assert!(U64::generate_safe_prime_with_rng(&mut OsRng, Some(10))
78+
.is_safe_prime_with_rng(&mut OsRng));
6979
}
7080
}

0 commit comments

Comments
 (0)