summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNora Widdecke <nora@sequoia-pgp.org>2021-02-10 14:49:33 +0100
committerNora Widdecke <nora@sequoia-pgp.org>2021-04-13 12:38:16 +0200
commit0055f6ba67161692d2a5d32b8c00c6b32bf0c0f1 (patch)
tree3cfe5110dd32cc6350c07d2ecb6303cdf8c2e922
parenta931158a9810d1ab37a48640c38da779eca6113f (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.toml31
-rw-r--r--openpgp/benches/common/decrypt.rs20
-rw-r--r--openpgp/benches/common/encrypt.rs75
-rw-r--r--openpgp/benches/decrypt_message.rs4
-rw-r--r--openpgp/benches/decrypt_verify_message.rs4
-rw-r--r--openpgp/benches/encrypt_message.rs8
-rw-r--r--openpgp/benches/encrypt_sign_message.rs8
-rw-r--r--openpgp/benches/generate_cert.rs3
-rw-r--r--openpgp/benches/mod.rs1
-rw-r--r--openpgp/benches/parse_cert.rs4
-rw-r--r--openpgp/benches/run_benchmarks.rs32
-rw-r--r--openpgp/benches/sign_message.rs3
-rw-r--r--openpgp/benches/verify_message.rs8
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);