diff options
author | Nora Widdecke <nora@sequoia-pgp.org> | 2021-02-09 19:36:55 +0100 |
---|---|---|
committer | Nora Widdecke <nora@sequoia-pgp.org> | 2021-04-13 12:38:16 +0200 |
commit | 2418df3723a18e791ebe5efc551e4825be679b76 (patch) | |
tree | ce956ae242215928f6e0310a90c1f87510903ae0 /openpgp/benches | |
parent | d9c64350e210b3d9fde378029285bbdb6848a475 (diff) |
bench: Add sign benchmark.
Diffstat (limited to 'openpgp/benches')
-rw-r--r-- | openpgp/benches/common/decrypt.rs | 20 | ||||
-rw-r--r-- | openpgp/benches/common/encrypt.rs | 26 | ||||
-rw-r--r-- | openpgp/benches/sign_message.rs | 43 |
3 files changed, 79 insertions, 10 deletions
diff --git a/openpgp/benches/common/decrypt.rs b/openpgp/benches/common/decrypt.rs index fa507aa7..536581af 100644 --- a/openpgp/benches/common/decrypt.rs +++ b/openpgp/benches/common/decrypt.rs @@ -5,7 +5,7 @@ use openpgp::packet::prelude::*; use openpgp::packet::{PKESK, SKESK}; use openpgp::parse::stream::{ DecryptionHelper, DecryptorBuilder, MessageLayer, MessageStructure, - VerificationHelper, VerificationError + VerificationError, VerificationHelper, }; use openpgp::parse::Parse; use openpgp::policy::StandardPolicy; @@ -141,15 +141,15 @@ impl DecryptionHelper for CertHelper<'_> { { let p = &StandardPolicy::new(); - let cand_secret_keys: Vec<Key<key::SecretParts, key::UnspecifiedRole>> = self - .recipient - .keys() - .with_policy(p, None) - .for_transport_encryption() - .for_storage_encryption() - .secret() - .map(|amalgamation| amalgamation.key().clone().into()) - .collect(); + let cand_secret_keys: Vec<Key<key::SecretParts, key::UnspecifiedRole>> = + self.recipient + .keys() + .with_policy(p, None) + .for_transport_encryption() + .for_storage_encryption() + .secret() + .map(|amalgamation| amalgamation.key().clone().into()) + .collect(); // check that pkesk has right recipient // if yes, use decrypt function diff --git a/openpgp/benches/common/encrypt.rs b/openpgp/benches/common/encrypt.rs index edd898b5..0eb56865 100644 --- a/openpgp/benches/common/encrypt.rs +++ b/openpgp/benches/common/encrypt.rs @@ -69,6 +69,32 @@ pub fn encrypt_to_cert_and_sign( Ok(sink) } +// naively sign, without caring for revocation or expiration +pub fn sign(bytes: &[u8], sender: &Cert) -> openpgp::Result<Vec<u8>> { + let mut sink = vec![]; + + let p = &StandardPolicy::new(); + let signing_keypair = sender + .keys() + .with_policy(p, None) + .secret() + .for_signing() + .nth(0) + .unwrap() + .key() + .clone() + .into_keypair()?; + + let message = Message::new(&mut sink); + let message = Armorer::new(message).build()?; + let message = Padder::new(message).build()?; + let message = Signer::new(message, signing_keypair).build()?; + let mut w = LiteralWriter::new(message).build()?; + w.write_all(bytes)?; + w.finalize()?; + Ok(sink) +} + pub fn encrypt_with_password( bytes: &[u8], password: &str, diff --git a/openpgp/benches/sign_message.rs b/openpgp/benches/sign_message.rs new file mode 100644 index 00000000..2236286b --- /dev/null +++ b/openpgp/benches/sign_message.rs @@ -0,0 +1,43 @@ +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 sign_by_testy(bytes: &[u8]) { + let testy = Cert::from_bytes( + &include_bytes!("../tests/data/keys/testy-new-private.pgp")[..], + ) + .unwrap(); + encrypt::sign(bytes, &testy).unwrap(); +} + +fn bench_sign(c: &mut Criterion) { + let mut group = c.benchmark_group("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("cert", message.len()), + &message, + |b, m| b.iter(|| sign_by_testy(&m)), + ); + } + group.finish(); +} + +criterion_group!(benches, bench_sign); +criterion_main!(benches); |