summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openpgp/examples/pad.rs2
-rw-r--r--openpgp/src/serialize/stream.rs4
-rw-r--r--openpgp/src/serialize/stream/padding.rs55
-rw-r--r--openpgp/src/types/compression_level.rs4
-rw-r--r--sop/src/main.rs4
-rw-r--r--sq/src/commands/mod.rs7
6 files changed, 48 insertions, 28 deletions
diff --git a/openpgp/examples/pad.rs b/openpgp/examples/pad.rs
index 48489abd..2dfc23f4 100644
--- a/openpgp/examples/pad.rs
+++ b/openpgp/examples/pad.rs
@@ -69,7 +69,7 @@ fn main() -> openpgp::Result<()> {
let message = Encryptor::for_recipients(message, recipients)
.build().context("Failed to create encryptor")?;
- let message = Padder::new(message, padme)
+ let message = Padder::new(message)
.build().context("Failed to create padder")?;
let mut message = LiteralWriter::new(message).build()
diff --git a/openpgp/src/serialize/stream.rs b/openpgp/src/serialize/stream.rs
index 00adcc32..ed32e4c2 100644
--- a/openpgp/src/serialize/stream.rs
+++ b/openpgp/src/serialize/stream.rs
@@ -87,7 +87,7 @@
//! use openpgp::cert::prelude::*;
//! use openpgp::serialize::stream::{
//! Message, Armorer, Encryptor, Signer, LiteralWriter,
-//! padding::{Padder, padme},
+//! padding::Padder,
//! };
//! # use openpgp::parse::Parse;
//!
@@ -114,7 +114,7 @@
//! let message = Armorer::new(message).build()?;
//! let message = Encryptor::for_recipients(message, recipients).build()?;
//! // Reduce metadata leakage by concealing the message size.
-//! let message = Padder::new(message, padme).build()?;
+//! let message = Padder::new(message).build()?;
//! let message = Signer::new(message, signing_keypair)
//! // Prevent Surreptitious Forwarding.
//! .add_intended_recipient(&recipient)
diff --git a/openpgp/src/serialize/stream/padding.rs b/openpgp/src/serialize/stream/padding.rs
index 350dc418..c3a7a5f5 100644
--- a/openpgp/src/serialize/stream/padding.rs
+++ b/openpgp/src/serialize/stream/padding.rs
@@ -111,7 +111,7 @@ use crate::types::{
/// use std::io::Write;
/// use sequoia_openpgp as openpgp;
/// use openpgp::serialize::stream::{Message, LiteralWriter};
-/// use openpgp::serialize::stream::padding::{Padder, padme};
+/// use openpgp::serialize::stream::padding::Padder;
/// use openpgp::types::CompressionAlgorithm;
/// # use openpgp::Result;
/// # f().unwrap();
@@ -131,7 +131,7 @@ use crate::types::{
/// {
/// let message = Message::new(&mut padded);
/// // XXX: Insert Encryptor here.
-/// let message = Padder::new(message, padme).build()?;
+/// let message = Padder::new(message).build()?;
/// // XXX: Insert Signer here.
/// let mut message = LiteralWriter::new(message).build()?;
/// message.write_all(b"Hello world.")?;
@@ -140,12 +140,12 @@ use crate::types::{
/// assert!(unpadded.len() < padded.len());
/// # Ok(())
/// # }
-pub struct Padder<'a, P: Fn(u64) -> u64 + 'a> {
+pub struct Padder<'a> {
inner: writer::BoxStack<'a, Cookie>,
- policy: P,
+ policy: fn(u64) -> u64,
}
-impl<'a, P: Fn(u64) -> u64 + 'a> Padder<'a, P> {
+impl<'a> Padder<'a> {
/// Creates a new padder with the given policy.
///
/// # Examples
@@ -165,22 +165,45 @@ impl<'a, P: Fn(u64) -> u64 + 'a> Padder<'a, P> {
/// ```
/// # fn main() -> sequoia_openpgp::Result<()> {
/// use sequoia_openpgp as openpgp;
- /// use openpgp::serialize::stream::padding::{Padder, padme};
+ /// use openpgp::serialize::stream::padding::Padder;
///
/// # let message = openpgp::serialize::stream::Message::new(vec![]);
- /// let message = Padder::new(message, padme).build()?;
+ /// let message = Padder::new(message).build()?;
/// // Optionally add a `Signer` here.
/// // Add a `LiteralWriter` here.
/// # let _ = message;
/// # Ok(()) }
/// ```
- pub fn new(inner: Message<'a>, p: P) -> Self {
+ pub fn new(inner: Message<'a>) -> Self {
Self {
inner: writer::BoxStack::from(inner).into(),
- policy: p,
+ policy: padme,
}
}
+ /// Sets padding policy, returning the padder.
+ ///
+ /// # Examples
+ ///
+ /// This example illustrates the use of `Padder` with an explicit policy.
+ ///
+ /// ```
+ /// # fn main() -> sequoia_openpgp::Result<()> {
+ /// use sequoia_openpgp as openpgp;
+ /// use openpgp::serialize::stream::padding::{Padder, padme};
+ ///
+ /// # let message = openpgp::serialize::stream::Message::new(vec![]);
+ /// let message = Padder::new(message).with_policy(padme).build()?;
+ /// // Optionally add a `Signer` here.
+ /// // Add a `LiteralWriter` here.
+ /// # let _ = message;
+ /// # Ok(()) }
+ /// ```
+ pub fn with_policy(mut self, p: fn(u64) -> u64) -> Self {
+ self.policy = p;
+ self
+ }
+
/// Builds the padder, returning the writer stack.
///
/// # Examples
@@ -200,10 +223,10 @@ impl<'a, P: Fn(u64) -> u64 + 'a> Padder<'a, P> {
/// ```
/// # fn main() -> sequoia_openpgp::Result<()> {
/// use sequoia_openpgp as openpgp;
- /// use openpgp::serialize::stream::padding::{Padder, padme};
+ /// use openpgp::serialize::stream::padding::Padder;
///
/// # let message = openpgp::serialize::stream::Message::new(vec![]);
- /// let message = Padder::new(message, padme).build()?;
+ /// let message = Padder::new(message).build()?;
/// // Optionally add a `Signer` here.
/// // Add a `LiteralWriter` here.
/// # let _ = message;
@@ -231,7 +254,7 @@ impl<'a, P: Fn(u64) -> u64 + 'a> Padder<'a, P> {
}
}
-impl<'a, P: Fn(u64) -> u64 + 'a> fmt::Debug for Padder<'a, P> {
+impl<'a> fmt::Debug for Padder<'a> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_struct("Padder")
.field("inner", &self.inner)
@@ -239,7 +262,7 @@ impl<'a, P: Fn(u64) -> u64 + 'a> fmt::Debug for Padder<'a, P> {
}
}
-impl<'a, P: Fn(u64) -> u64 + 'a> io::Write for Padder<'a, P> {
+impl<'a> io::Write for Padder<'a> {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
self.inner.write(buf)
}
@@ -249,7 +272,7 @@ impl<'a, P: Fn(u64) -> u64 + 'a> io::Write for Padder<'a, P> {
}
}
-impl<'a, P: Fn(u64) -> u64 + 'a> writer::Stackable<'a, Cookie> for Padder<'a, P>
+impl<'a> writer::Stackable<'a, Cookie> for Padder<'a>
{
fn into_inner(self: Box<Self>)
-> Result<Option<writer::BoxStack<'a, Cookie>>> {
@@ -436,7 +459,7 @@ mod test {
let mut padded = vec![];
{
let message = Message::new(&mut padded);
- let padder = Padder::new(message, padme).build().unwrap();
+ let padder = Padder::new(message).with_policy(padme).build().unwrap();
let mut w = LiteralWriter::new(padder).build().unwrap();
w.write_all(&msg).unwrap();
w.finalize().unwrap();
@@ -459,7 +482,7 @@ mod test {
let mut padded = vec![];
{
let message = Message::new(&mut padded);
- let padder = Padder::new(message, padme).build().unwrap();
+ let padder = Padder::new(message).build().unwrap();
let mut w = LiteralWriter::new(padder).build().unwrap();
w.write_all(MSG).unwrap();
w.finalize().unwrap();
diff --git a/openpgp/src/types/compression_level.rs b/openpgp/src/types/compression_level.rs
index 59627c48..069d2bd4 100644
--- a/openpgp/src/types/compression_level.rs
+++ b/openpgp/src/types/compression_level.rs
@@ -30,7 +30,7 @@ use crate::{
/// # fn main() -> openpgp::Result<()> {
/// use std::io::Write;
/// use openpgp::serialize::stream::{Message, Compressor, LiteralWriter};
-/// use openpgp::serialize::stream::padding::{Padder, padme};
+/// use openpgp::serialize::stream::padding::Padder;
/// use openpgp::types::{CompressionAlgorithm, CompressionLevel};
///
/// let mut sink = Vec::new();
@@ -41,7 +41,7 @@ use crate::{
/// .level(CompressionLevel::fastest())
/// .build()?;
///
-/// let message = Padder::new(message, padme).build()?;
+/// let message = Padder::new(message).build()?;
///
/// let mut message = LiteralWriter::new(message).build()?;
/// message.write_all(b"Hello world.")?;
diff --git a/sop/src/main.rs b/sop/src/main.rs
index 22dbeec7..503470d8 100644
--- a/sop/src/main.rs
+++ b/sop/src/main.rs
@@ -32,7 +32,7 @@ use openpgp::cert::prelude::*;
use openpgp::serialize::{
Serialize,
stream::*,
- stream::padding::{Padder, padme},
+ stream::padding::Padder,
};
use openpgp::policy::StandardPolicy;
@@ -313,7 +313,7 @@ fn real_main() -> Result<()> {
.context("Failed to create encryptor")?;
// Pad the message.
- let mut message = Padder::new(message, padme).build()?;
+ let mut message = Padder::new(message).build()?;
// Maybe sign the message.
if let Some(s) = signers.pop() {
diff --git a/sq/src/commands/mod.rs b/sq/src/commands/mod.rs
index 8b542c66..f7f47787 100644
--- a/sq/src/commands/mod.rs
+++ b/sq/src/commands/mod.rs
@@ -23,10 +23,7 @@ use crate::openpgp::parse::stream::*;
use crate::openpgp::serialize::stream::{
Message, Signer, LiteralWriter, Encryptor, Recipient,
Compressor,
- padding::{
- Padder,
- padme,
- },
+ padding::Padder,
};
use crate::openpgp::policy::Policy;
use sequoia_store as store;
@@ -130,7 +127,7 @@ pub fn encrypt<'a>(policy: &'a dyn Policy,
match compression {
"none" => (),
- "pad" => sink = Padder::new(sink, padme).build()?,
+ "pad" => sink = Padder::new(sink).build()?,
"zip" => sink =
Compressor::new(sink).algo(CompressionAlgorithm::Zip).build()?,
"zlib" => sink =