summaryrefslogtreecommitdiffstats
path: root/openpgp/benches
diff options
context:
space:
mode:
authorNora Widdecke <nora@sequoia-pgp.org>2021-02-09 19:36:55 +0100
committerNora Widdecke <nora@sequoia-pgp.org>2021-04-13 12:38:16 +0200
commit2418df3723a18e791ebe5efc551e4825be679b76 (patch)
treece956ae242215928f6e0310a90c1f87510903ae0 /openpgp/benches
parentd9c64350e210b3d9fde378029285bbdb6848a475 (diff)
bench: Add sign benchmark.
Diffstat (limited to 'openpgp/benches')
-rw-r--r--openpgp/benches/common/decrypt.rs20
-rw-r--r--openpgp/benches/common/encrypt.rs26
-rw-r--r--openpgp/benches/sign_message.rs43
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);