diff options
author | Nora Widdecke <nora@sequoia-pgp.org> | 2021-02-10 14:49:33 +0100 |
---|---|---|
committer | Nora Widdecke <nora@sequoia-pgp.org> | 2021-04-13 12:38:16 +0200 |
commit | 0055f6ba67161692d2a5d32b8c00c6b32bf0c0f1 (patch) | |
tree | 3cfe5110dd32cc6350c07d2ecb6303cdf8c2e922 | |
parent | a931158a9810d1ab37a48640c38da779eca6113f (diff) |
bench: Restructure.
- Move all benchmarks into a single binary. This prevents dead_code
warnings for common functions not used in a specific benchmark, and
makes adding new benchmarks a little less surprising.
- Cargo would autimatically try to compile all .rs files in /benches
as benchmarks. Prevent this with `autobenches = false`.
-rw-r--r-- | openpgp/Cargo.toml | 31 | ||||
-rw-r--r-- | openpgp/benches/common/decrypt.rs | 20 | ||||
-rw-r--r-- | openpgp/benches/common/encrypt.rs | 75 | ||||
-rw-r--r-- | openpgp/benches/decrypt_message.rs | 4 | ||||
-rw-r--r-- | openpgp/benches/decrypt_verify_message.rs | 4 | ||||
-rw-r--r-- | openpgp/benches/encrypt_message.rs | 8 | ||||
-rw-r--r-- | openpgp/benches/encrypt_sign_message.rs | 8 | ||||
-rw-r--r-- | openpgp/benches/generate_cert.rs | 3 | ||||
-rw-r--r-- | openpgp/benches/mod.rs | 1 | ||||
-rw-r--r-- | openpgp/benches/parse_cert.rs | 4 | ||||
-rw-r--r-- | openpgp/benches/run_benchmarks.rs | 32 | ||||
-rw-r--r-- | openpgp/benches/sign_message.rs | 3 | ||||
-rw-r--r-- | openpgp/benches/verify_message.rs | 8 |
13 files changed, 88 insertions, 113 deletions
diff --git a/openpgp/Cargo.toml b/openpgp/Cargo.toml index 258f5b2e..a520645b 100644 --- a/openpgp/Cargo.toml +++ b/openpgp/Cargo.toml @@ -12,6 +12,7 @@ authors = [ ] build = "build.rs" documentation = "https://docs.rs/sequoia-openpgp" +autobenches = false homepage = "https://sequoia-pgp.org/" repository = "https://gitlab.com/sequoia-pgp/sequoia" readme = "README.md" @@ -86,33 +87,5 @@ name = "pad" required-features = ["compression-deflate"] [[bench]] -name = "generate_cert" -harness = false - -[[bench]] -name = "parse_cert" -harness = false - -[[bench]] -name = "encrypt_message" -harness = false - -[[bench]] -name = "decrypt_message" -harness = false - -[[bench]] -name = "encrypt_sign_message" -harness = false - -[[bench]] -name = "decrypt_verify_message" -harness = false - -[[bench]] -name = "sign_message" -harness = false - -[[bench]] -name = "verify_message" +name = "run_benchmarks" harness = false diff --git a/openpgp/benches/common/decrypt.rs b/openpgp/benches/common/decrypt.rs index 48186ac1..6f73e6d4 100644 --- a/openpgp/benches/common/decrypt.rs +++ b/openpgp/benches/common/decrypt.rs @@ -56,10 +56,7 @@ impl DecryptionHelper for PasswordHelper { } } -// This is marked as dead_code. Seems that using a function only from within -// a benchmark loop hides it from the compiler. -#[allow(dead_code)] -// Decrypts the given message using the given password. +/// Decrypts the given message using the given password. pub fn decrypt_with_password( sink: &mut dyn Write, ciphertext: &[u8], @@ -180,10 +177,7 @@ impl DecryptionHelper for CertHelper<'_> { } } -// This is marked as dead_code. Seems that using a function only from within -// a benchmark loop hides it from the compiler. -#[allow(dead_code)] -// Decrypts the given message using the given password. +/// Decrypts the given message using the given password. pub fn decrypt_with_cert( sink: &mut dyn Write, ciphertext: &[u8], @@ -206,10 +200,7 @@ pub fn decrypt_with_cert( Ok(()) } -// This is marked as dead_code. Seems that using a function only from within -// a benchmark loop hides it from the compiler. -#[allow(dead_code)] -// Decrypts the given message using the given password. +/// Decrypts the given message using the given password. pub fn decrypt_and_verify( sink: &mut dyn Write, ciphertext: &[u8], @@ -233,10 +224,7 @@ pub fn decrypt_and_verify( Ok(()) } -// This is marked as dead_code. Seems that using a function only from within -// a benchmark loop hides it from the compiler. -#[allow(dead_code)] -// Verifies the given message using the given sender's cert. +/// Verifies the given message using the given sender's cert. pub fn verify( sink: &mut dyn Write, ciphertext: &[u8], diff --git a/openpgp/benches/common/encrypt.rs b/openpgp/benches/common/encrypt.rs index 0eb56865..6f24f134 100644 --- a/openpgp/benches/common/encrypt.rs +++ b/openpgp/benches/common/encrypt.rs @@ -7,7 +7,23 @@ use openpgp::serialize::stream::{ use std::io::Write; -// naively encrypt, without caring for revocation or expiration +/// Encrypt with password, using a minimal writer stack. +pub fn encrypt_with_password( + bytes: &[u8], + password: &str, +) -> openpgp::Result<Vec<u8>> { + let mut sink = vec![]; + let message = + Encryptor::with_passwords(Message::new(&mut sink), Some(password)) + .build()?; + let mut w = LiteralWriter::new(message).build()?; + w.write_all(bytes)?; + w.finalize()?; + Ok(sink) +} + +/// Encrypt ignoring revocation or expiration. +/// Uses a minimal writer stack. pub fn encrypt_to_cert( bytes: &[u8], cert: &Cert, @@ -29,12 +45,8 @@ pub fn encrypt_to_cert( Ok(sink) } -// naively encrypt and sign, without caring for revocation or expiration -pub fn encrypt_to_cert_and_sign( - bytes: &[u8], - sender: &Cert, - recipient: &Cert, -) -> openpgp::Result<Vec<u8>> { +/// Sign ignoring revocation or expiration. +pub fn sign(bytes: &[u8], sender: &Cert) -> openpgp::Result<Vec<u8>> { let mut sink = vec![]; let p = &StandardPolicy::new(); @@ -49,28 +61,21 @@ pub fn encrypt_to_cert_and_sign( .clone() .into_keypair()?; - let recipients = recipient - .keys() - .with_policy(p, None) - .supported() - .for_transport_encryption() - .for_storage_encryption(); - let message = Message::new(&mut sink); - let message = Armorer::new(message).build()?; - let message = Encryptor::for_recipients(message, recipients).build()?; - let message = Padder::new(message).build()?; - let message = Signer::new(message, signing_keypair) - //.add_intended_recipient(&recipient) - .build()?; + let message = Signer::new(message, signing_keypair).build()?; let mut w = LiteralWriter::new(message).build()?; w.write_all(bytes)?; w.finalize()?; Ok(sink) } -// naively sign, without caring for revocation or expiration -pub fn sign(bytes: &[u8], sender: &Cert) -> openpgp::Result<Vec<u8>> { +/// Encrypt and sign, ignoring revocation or expiration. +/// Uses a realistic writer stac with padding and armor. +pub fn encrypt_to_cert_and_sign( + bytes: &[u8], + sender: &Cert, + recipient: &Cert, +) -> openpgp::Result<Vec<u8>> { let mut sink = vec![]; let p = &StandardPolicy::new(); @@ -85,24 +90,20 @@ pub fn sign(bytes: &[u8], sender: &Cert) -> openpgp::Result<Vec<u8>> { .clone() .into_keypair()?; + let recipients = recipient + .keys() + .with_policy(p, None) + .supported() + .for_transport_encryption() + .for_storage_encryption(); + let message = Message::new(&mut sink); let message = Armorer::new(message).build()?; + let message = Encryptor::for_recipients(message, recipients).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, -) -> openpgp::Result<Vec<u8>> { - let mut sink = vec![]; - let message = - Encryptor::with_passwords(Message::new(&mut sink), Some(password)) - .build()?; + let message = Signer::new(message, signing_keypair) + //.add_intended_recipient(&recipient) + .build()?; let mut w = LiteralWriter::new(message).build()?; w.write_all(bytes)?; w.finalize()?; diff --git a/openpgp/benches/decrypt_message.rs b/openpgp/benches/decrypt_message.rs index 23987fc3..ad113101 100644 --- a/openpgp/benches/decrypt_message.rs +++ b/openpgp/benches/decrypt_message.rs @@ -6,9 +6,7 @@ use sequoia_openpgp as openpgp; use openpgp::cert::Cert; use openpgp::parse::Parse; -mod common; -use common::decrypt; -use common::encrypt; +use crate::common::{decrypt, encrypt}; static PASSWORD: &'static str = "password"; diff --git a/openpgp/benches/decrypt_verify_message.rs b/openpgp/benches/decrypt_verify_message.rs index 33f15c3e..aa84e819 100644 --- a/openpgp/benches/decrypt_verify_message.rs +++ b/openpgp/benches/decrypt_verify_message.rs @@ -6,9 +6,7 @@ use sequoia_openpgp as openpgp; use openpgp::cert::Cert; use openpgp::parse::Parse; -mod common; -use common::decrypt; -use common::encrypt; +use crate::common::{decrypt, encrypt}; lazy_static::lazy_static! { static ref SENDER: Cert = diff --git a/openpgp/benches/encrypt_message.rs b/openpgp/benches/encrypt_message.rs index d83601ad..5b0a0020 100644 --- a/openpgp/benches/encrypt_message.rs +++ b/openpgp/benches/encrypt_message.rs @@ -1,13 +1,10 @@ -use criterion::{ - criterion_group, criterion_main, BenchmarkId, Criterion, Throughput, -}; +use criterion::{criterion_group, BenchmarkId, Criterion, Throughput}; use sequoia_openpgp as openpgp; use openpgp::cert::Cert; use openpgp::parse::Parse; -mod common; -use common::encrypt; +use crate::common::encrypt; lazy_static::lazy_static! { static ref ZEROS_1_MB: Vec<u8> = vec![0; 1 * 1024 * 1024]; @@ -49,4 +46,3 @@ fn bench_encrypt(c: &mut Criterion) { } criterion_group!(benches, bench_encrypt); -criterion_main!(benches); diff --git a/openpgp/benches/encrypt_sign_message.rs b/openpgp/benches/encrypt_sign_message.rs index 03916f71..5923ff88 100644 --- a/openpgp/benches/encrypt_sign_message.rs +++ b/openpgp/benches/encrypt_sign_message.rs @@ -1,13 +1,10 @@ -use criterion::{ - criterion_group, criterion_main, BenchmarkId, Criterion, Throughput, -}; +use criterion::{criterion_group, BenchmarkId, Criterion, Throughput}; use sequoia_openpgp as openpgp; use openpgp::cert::Cert; use openpgp::parse::Parse; -mod common; -use common::encrypt; +use crate::common::encrypt; lazy_static::lazy_static! { static ref ZEROS_1_MB: Vec<u8> = vec![0; 1 * 1024 * 1024]; @@ -44,4 +41,3 @@ fn bench_encrypt_sign(c: &mut Criterion) { } criterion_group!(benches, bench_encrypt_sign); -criterion_main!(benches); diff --git a/openpgp/benches/generate_cert.rs b/openpgp/benches/generate_cert.rs index 45b707ce..3000e38a 100644 --- a/openpgp/benches/generate_cert.rs +++ b/openpgp/benches/generate_cert.rs @@ -1,4 +1,4 @@ -use criterion::{criterion_group, criterion_main, Criterion}; +use criterion::{criterion_group, Criterion}; use sequoia_openpgp as openpgp; use openpgp::cert::{CertBuilder, CipherSuite}; @@ -35,4 +35,3 @@ fn bench_generate_certs(c: &mut Criterion) { } criterion_group!(benches, bench_generate_certs); -criterion_main!(benches); diff --git a/openpgp/benches/mod.rs b/openpgp/benches/mod.rs new file mode 100644 index 00000000..a5961aa6 --- /dev/null +++ b/openpgp/benches/mod.rs @@ -0,0 +1 @@ +mod common; diff --git a/openpgp/benches/parse_cert.rs b/openpgp/benches/parse_cert.rs index b57b1b01..55c9359e 100644 --- a/openpgp/benches/parse_cert.rs +++ b/openpgp/benches/parse_cert.rs @@ -1,6 +1,5 @@ use criterion::{ - criterion_group, criterion_main, BenchmarkGroup, BenchmarkId, Criterion, - Throughput, + criterion_group, BenchmarkGroup, BenchmarkId, Criterion, Throughput, }; use sequoia_openpgp as openpgp; @@ -103,4 +102,3 @@ fn bench_parse_certs(c: &mut Criterion) { } criterion_group!(benches, bench_parse_certs, bench_parse_certs_generated); -criterion_main!(benches); diff --git a/openpgp/benches/run_benchmarks.rs b/openpgp/benches/run_benchmarks.rs new file mode 100644 index 00000000..fc872af7 --- /dev/null +++ b/openpgp/benches/run_benchmarks.rs @@ -0,0 +1,32 @@ +use criterion::criterion_main; + +mod common; + +mod sign_message; +use sign_message::benches as sign; +mod verify_message; +use verify_message::benches as verify; +mod encrypt_message; +use encrypt_message::benches as encrypt; +mod decrypt_message; +use decrypt_message::benches as decrypt; +mod encrypt_sign_message; +use encrypt_sign_message::benches as encrypt_sign; +mod decrypt_verify_message; +use decrypt_verify_message::benches as decrypt_verify; +mod generate_cert; +use generate_cert::benches as generate_cert; +mod parse_cert; +use parse_cert::benches as parse_cert; + +// Add all benchmark functions here +criterion_main!( + sign, + verify, + encrypt_sign, + decrypt_verify, + encrypt, + decrypt, + generate_cert, + parse_cert +); diff --git a/openpgp/benches/sign_message.rs b/openpgp/benches/sign_message.rs index 2236286b..419be8bb 100644 --- a/openpgp/benches/sign_message.rs +++ b/openpgp/benches/sign_message.rs @@ -6,8 +6,7 @@ use sequoia_openpgp as openpgp; use openpgp::cert::Cert; use openpgp::parse::Parse; -mod common; -use common::encrypt; +use crate::common::encrypt; lazy_static::lazy_static! { static ref ZEROS_1_MB: Vec<u8> = vec![0; 1 * 1024 * 1024]; diff --git a/openpgp/benches/verify_message.rs b/openpgp/benches/verify_message.rs index 1fbf15c2..8dfd3740 100644 --- a/openpgp/benches/verify_message.rs +++ b/openpgp/benches/verify_message.rs @@ -1,13 +1,10 @@ -use criterion::{ - criterion_group, criterion_main, BenchmarkId, Criterion, Throughput, -}; +use criterion::{criterion_group, BenchmarkId, Criterion, Throughput}; use sequoia_openpgp as openpgp; use openpgp::cert::Cert; use openpgp::parse::Parse; -mod common; -use common::{decrypt, encrypt}; +use crate::common::{decrypt, encrypt}; lazy_static::lazy_static! { static ref SENDER: Cert = @@ -45,4 +42,3 @@ fn bench_verify(c: &mut Criterion) { } criterion_group!(benches, bench_verify); -criterion_main!(benches); |