Skip to content

Commit 9b07a90

Browse files
Merge pull request #26 from lattice-based-cryptography/add_criterion_benchmarking
add three criterion benchmarks for `keygen`, `encrypt`, `decrypt` using the `criterion` crate.
2 parents 81dbadd + 0c9342d commit 9b07a90

File tree

4 files changed

+100
-1
lines changed

4 files changed

+100
-1
lines changed

Cargo.toml

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,22 @@ num-traits = "=0.2.19"
1414
rand = "0.8.5"
1515
rand_distr = "0.4.3"
1616
ntt = "0.1.9"
17-
ring-lwe = "0.1.5"
17+
ring-lwe = "0.1.5"
18+
19+
[dev-dependencies]
20+
criterion = "0.5.1"
21+
22+
[[bench]]
23+
name = "benchmark_keygen"
24+
path = "benches/benchmark_keygen.rs"
25+
harness = false
26+
27+
[[bench]]
28+
name = "benchmark_encrypt"
29+
path = "benches/benchmark_encrypt.rs"
30+
harness = false
31+
32+
[[bench]]
33+
name = "benchmark_decrypt"
34+
path = "benches/benchmark_decrypt.rs"
35+
harness = false

benches/benchmark_decrypt.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
use criterion::{criterion_group, criterion_main, Criterion};
2+
use module_lwe::decrypt::{decrypt,decrypt_string};
3+
use module_lwe::keygen::{keygen,keygen_string};
4+
use module_lwe::encrypt::{encrypt,encrypt_string};
5+
use module_lwe::utils::Parameters;
6+
7+
fn bench_decrypt(c: &mut Criterion) {
8+
let params = Parameters::default();
9+
let (pk, sk) = keygen(&params, None);
10+
let m_b = vec![0, 1, 0, 1, 1, 0, 1, 0]; // Example binary message
11+
let (u, v) = encrypt(&pk.0, &pk.1, &m_b, &params, None);
12+
13+
c.bench_function("decrypt", |b| {
14+
b.iter(|| decrypt(&sk, &u, &v, &params))
15+
});
16+
}
17+
18+
fn bench_decrypt_string(c: &mut Criterion) {
19+
let params = Parameters::default();
20+
let keypair = keygen_string(&params, None);
21+
let sk_string = keypair.get("secret").unwrap();
22+
let pk_string = keypair.get("public").unwrap();
23+
let message = String::from("hello");
24+
let ciphertext_string = encrypt_string(&pk_string, &message, &params, None);
25+
26+
c.bench_function("decrypt_string", |b| {
27+
b.iter(|| decrypt_string(&sk_string, &ciphertext_string, &params))
28+
});
29+
}
30+
31+
criterion_group!(benches, bench_decrypt, bench_decrypt_string);
32+
criterion_main!(benches);

benches/benchmark_encrypt.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
use criterion::{criterion_group, criterion_main, Criterion};
2+
use module_lwe::encrypt::{encrypt,encrypt_string};
3+
use module_lwe::keygen::{keygen,keygen_string};
4+
use module_lwe::utils::Parameters;
5+
6+
fn bench_encrypt(c: &mut Criterion) {
7+
let params = Parameters::default();
8+
let (pk, _) = keygen(&params, None);
9+
let m_b = vec![0, 1, 0, 1, 1, 0, 1, 0]; // Example binary message
10+
11+
c.bench_function("encrypt", |b| {
12+
b.iter(|| encrypt(&pk.0, &pk.1, &m_b, &params, None))
13+
});
14+
}
15+
16+
fn bench_encrypt_string(c: &mut Criterion) {
17+
let params = Parameters::default();
18+
let keypair = keygen_string(&params, None);
19+
let pk_string = keypair.get("public").unwrap();
20+
let message = String::from("hello");
21+
22+
c.bench_function("encrypt_string", |b| {
23+
b.iter(|| encrypt_string(&pk_string, &message, &params, None))
24+
});
25+
}
26+
27+
criterion_group!(benches, bench_encrypt, bench_encrypt_string);
28+
criterion_main!(benches);

benches/benchmark_keygen.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use criterion::{criterion_group, criterion_main, Criterion};
2+
use module_lwe::keygen::{keygen,keygen_string};
3+
use module_lwe::utils::Parameters;
4+
5+
fn bench_keygen(c: &mut Criterion) {
6+
let params = Parameters::default();
7+
c.bench_function("keygen", |b| {
8+
b.iter(|| keygen(&params, None))
9+
});
10+
}
11+
12+
fn bench_keygen_string(c: &mut Criterion) {
13+
let params = Parameters::default();
14+
15+
c.bench_function("keygen_string", |b| {
16+
b.iter(|| keygen_string(&params, None))
17+
});
18+
}
19+
20+
criterion_group!(benches, bench_keygen, bench_keygen_string);
21+
criterion_main!(benches);

0 commit comments

Comments
 (0)