Skip to content

Commit

Permalink
Benchmark the CCTV RSA vector (#66)
Browse files Browse the repository at this point in the history
  • Loading branch information
dvdplm authored Jan 20, 2025
1 parent e256297 commit 5b40e39
Show file tree
Hide file tree
Showing 3 changed files with 759 additions and 0 deletions.
4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,7 @@ rustdoc-args = ["--cfg", "docsrs"]
[[bench]]
name = "bench"
harness = false

[[bench]]
name = "cctv"
harness = false
47 changes: 47 additions & 0 deletions benches/cctv.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
use std::io::BufRead;

use criterion::{black_box, criterion_group, criterion_main, Criterion};
use crypto_bigint::U1024;
use rand_chacha::ChaCha8Rng;

use crypto_primes::is_prime_with_rng;
use rand_core::SeedableRng;

/// CCTV stands for Community Cryptography Test Vectors[1]. This benchmark uses the
/// "rsa.bench.2048.txt" test vector, which is a file of 708 1024-bit long candidates for prime
/// testing. The series of candidates in the test vecotr is an average representative sequence of
/// candidates that can be tested across different implementations. There are two primes in the
/// file, the first at line 354 and the other on the last line. Unless there's a bug, the second
/// half of the vector is not traversed in this benchmark.
///
/// [1]: https://github.com/C2SP/CCTV
fn bench_cctv(c: &mut Criterion) {
let mut group = c.benchmark_group("CCTV RSA 1024-bit candidates");
group.sample_size(10);
let mut rng = ChaCha8Rng::from_seed([123; 32]);
let candidates: Vec<U1024> = std::fs::read("./benches/rsa.bench.2048.txt")
.expect("file present")
.lines()
.map(|candidate_hex| U1024::from_be_hex(&candidate_hex.unwrap()))
.collect();

assert!(
is_prime_with_rng(&mut rng, &candidates[353]),
"Line 354 is a prime. This is a bug."
);
assert!(
is_prime_with_rng(&mut rng, &candidates[707]),
"Line 708 is a prime. This is a bug."
);

group.bench_function("all", |b| {
b.iter(|| {
for candidate in &candidates {
black_box(is_prime_with_rng(&mut rng, candidate));
}
});
});
}

criterion_group!(benches, bench_cctv,);
criterion_main!(benches);
Loading

0 comments on commit 5b40e39

Please sign in to comment.