diff --git a/Cargo.toml b/Cargo.toml index f8911bb..d3d896e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,4 +14,22 @@ num-traits = "=0.2.19" rand = "0.8.5" rand_distr = "0.4.3" ntt = "0.1.9" -ring-lwe = "0.1.5" \ No newline at end of file +ring-lwe = "0.1.5" + +[dev-dependencies] +criterion = "0.5.1" + +[[bench]] +name = "benchmark_keygen" +path = "benches/benchmark_keygen.rs" +harness = false + +[[bench]] +name = "benchmark_encrypt" +path = "benches/benchmark_encrypt.rs" +harness = false + +[[bench]] +name = "benchmark_decrypt" +path = "benches/benchmark_decrypt.rs" +harness = false \ No newline at end of file diff --git a/benches/benchmark_decrypt.rs b/benches/benchmark_decrypt.rs new file mode 100644 index 0000000..efa1d9c --- /dev/null +++ b/benches/benchmark_decrypt.rs @@ -0,0 +1,32 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use module_lwe::decrypt::{decrypt,decrypt_string}; +use module_lwe::keygen::{keygen,keygen_string}; +use module_lwe::encrypt::{encrypt,encrypt_string}; +use module_lwe::utils::Parameters; + +fn bench_decrypt(c: &mut Criterion) { + let params = Parameters::default(); + let (pk, sk) = keygen(¶ms, None); + let m_b = vec![0, 1, 0, 1, 1, 0, 1, 0]; // Example binary message + let (u, v) = encrypt(&pk.0, &pk.1, &m_b, ¶ms, None); + + c.bench_function("decrypt", |b| { + b.iter(|| decrypt(&sk, &u, &v, ¶ms)) + }); +} + +fn bench_decrypt_string(c: &mut Criterion) { + let params = Parameters::default(); + let keypair = keygen_string(¶ms, None); + let sk_string = keypair.get("secret").unwrap(); + let pk_string = keypair.get("public").unwrap(); + let message = String::from("hello"); + let ciphertext_string = encrypt_string(&pk_string, &message, ¶ms, None); + + c.bench_function("decrypt_string", |b| { + b.iter(|| decrypt_string(&sk_string, &ciphertext_string, ¶ms)) + }); +} + +criterion_group!(benches, bench_decrypt, bench_decrypt_string); +criterion_main!(benches); diff --git a/benches/benchmark_encrypt.rs b/benches/benchmark_encrypt.rs new file mode 100644 index 0000000..aa76d42 --- /dev/null +++ b/benches/benchmark_encrypt.rs @@ -0,0 +1,28 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use module_lwe::encrypt::{encrypt,encrypt_string}; +use module_lwe::keygen::{keygen,keygen_string}; +use module_lwe::utils::Parameters; + +fn bench_encrypt(c: &mut Criterion) { + let params = Parameters::default(); + let (pk, _) = keygen(¶ms, None); + let m_b = vec![0, 1, 0, 1, 1, 0, 1, 0]; // Example binary message + + c.bench_function("encrypt", |b| { + b.iter(|| encrypt(&pk.0, &pk.1, &m_b, ¶ms, None)) + }); +} + +fn bench_encrypt_string(c: &mut Criterion) { + let params = Parameters::default(); + let keypair = keygen_string(¶ms, None); + let pk_string = keypair.get("public").unwrap(); + let message = String::from("hello"); + + c.bench_function("encrypt_string", |b| { + b.iter(|| encrypt_string(&pk_string, &message, ¶ms, None)) + }); +} + +criterion_group!(benches, bench_encrypt, bench_encrypt_string); +criterion_main!(benches); \ No newline at end of file diff --git a/benches/benchmark_keygen.rs b/benches/benchmark_keygen.rs new file mode 100644 index 0000000..f529e37 --- /dev/null +++ b/benches/benchmark_keygen.rs @@ -0,0 +1,21 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use module_lwe::keygen::{keygen,keygen_string}; +use module_lwe::utils::Parameters; + +fn bench_keygen(c: &mut Criterion) { + let params = Parameters::default(); + c.bench_function("keygen", |b| { + b.iter(|| keygen(¶ms, None)) + }); +} + +fn bench_keygen_string(c: &mut Criterion) { + let params = Parameters::default(); + + c.bench_function("keygen_string", |b| { + b.iter(|| keygen_string(¶ms, None)) + }); +} + +criterion_group!(benches, bench_keygen, bench_keygen_string); +criterion_main!(benches); \ No newline at end of file