diff options
Diffstat (limited to 'openpgp/benches/encrypt_sign_message.rs')
-rw-r--r-- | openpgp/benches/encrypt_sign_message.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/openpgp/benches/encrypt_sign_message.rs b/openpgp/benches/encrypt_sign_message.rs new file mode 100644 index 00000000..03916f71 --- /dev/null +++ b/openpgp/benches/encrypt_sign_message.rs @@ -0,0 +1,47 @@ +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::encrypt; + +lazy_static::lazy_static! { + static ref ZEROS_1_MB: Vec<u8> = vec![0; 1 * 1024 * 1024]; + static ref ZEROS_10_MB: Vec<u8> = vec![0; 10 * 1024 * 1024]; +} + +pub fn encrypt_to_donald_sign_by_ivanka(bytes: &[u8]) { + let sender = Cert::from_bytes( + &include_bytes!("../tests/data/keys/ivanka-private.gpg")[..], + ) + .unwrap(); + let recipient = Cert::from_bytes( + &include_bytes!("../tests/data/keys/the-donald-private.gpg")[..], + ) + .unwrap(); + encrypt::encrypt_to_cert_and_sign(bytes, &sender, &recipient).unwrap(); +} + +fn bench_encrypt_sign(c: &mut Criterion) { + let mut group = c.benchmark_group("encrypt and sign message"); + + // Encrypt a very short, medium and very long message. + let messages = &[b"Hello world.", &ZEROS_1_MB[..], &ZEROS_10_MB[..]]; + + for message in messages { + group.throughput(Throughput::Bytes(message.len() as u64)); + group.bench_with_input( + BenchmarkId::new("encrypt and sign", message.len()), + &message, + |b, m| b.iter(|| encrypt_to_donald_sign_by_ivanka(&m)), + ); + } + group.finish(); +} + +criterion_group!(benches, bench_encrypt_sign); +criterion_main!(benches); |