diff options
author | Nora Widdecke <nora@sequoia-pgp.org> | 2021-02-09 14:58:46 +0100 |
---|---|---|
committer | Nora Widdecke <nora@sequoia-pgp.org> | 2021-04-13 12:38:16 +0200 |
commit | d9c64350e210b3d9fde378029285bbdb6848a475 (patch) | |
tree | 83163f26a42804f995840a4c5d853a2285e2c15e /openpgp/benches/decrypt_verify_message.rs | |
parent | f8bbf6f27f259662bbb9bfca6b399445d44019c0 (diff) |
bench: Add encrypt+sign and decrypt+verify.
Diffstat (limited to 'openpgp/benches/decrypt_verify_message.rs')
-rw-r--r-- | openpgp/benches/decrypt_verify_message.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/openpgp/benches/decrypt_verify_message.rs b/openpgp/benches/decrypt_verify_message.rs new file mode 100644 index 00000000..33f15c3e --- /dev/null +++ b/openpgp/benches/decrypt_verify_message.rs @@ -0,0 +1,51 @@ +use criterion::{ + criterion_group, criterion_main, BenchmarkId, Criterion, Throughput, +}; + +use sequoia_openpgp as openpgp; +use openpgp::cert::Cert; +use openpgp::parse::Parse; + +mod common; +use common::decrypt; +use common::encrypt; + +lazy_static::lazy_static! { + static ref SENDER: Cert = + Cert::from_bytes(&include_bytes!("../tests/data/keys/sender.pgp")[..]) + .unwrap(); + static ref RECIPIENT: Cert = + Cert::from_bytes(&include_bytes!("../tests/data/keys/recipient.pgp")[..]) + .unwrap(); + static ref ZEROS_1_MB: Vec<u8> = vec![0; 1 * 1024 * 1024]; + static ref ZEROS_10_MB: Vec<u8> = vec![0; 10 * 1024 * 1024]; +} + +fn decrypt_and_verify(bytes: &[u8], sender: &Cert, recipient: &Cert) { + let mut sink = Vec::new(); + decrypt::decrypt_and_verify(&mut sink, &bytes, sender, recipient).unwrap(); +} + +fn bench_decrypt_verify(c: &mut Criterion) { + let mut group = c.benchmark_group("decrypt and verify message"); + + // Encrypt a very short, medium and very long message, + // and then benchmark decryption. + let messages = &[b"Hello world.", &ZEROS_1_MB[..], &ZEROS_10_MB[..]]; + + messages.iter().for_each(|m| { + let encrypted = + encrypt::encrypt_to_cert_and_sign(m, &SENDER, &RECIPIENT).unwrap(); + group.throughput(Throughput::Bytes(encrypted.len() as u64)); + group.bench_with_input( + BenchmarkId::new("decrypt and verify", m.len()), + &encrypted, + |b, e| b.iter(|| decrypt_and_verify(&e, &SENDER, &RECIPIENT)), + ); + }); + + group.finish(); +} + +criterion_group!(benches, bench_decrypt_verify); +criterion_main!(benches); |