diff options
-rw-r--r-- | openpgp/examples/pad.rs | 2 | ||||
-rw-r--r-- | openpgp/src/serialize/stream.rs | 4 | ||||
-rw-r--r-- | openpgp/src/serialize/stream/padding.rs | 55 | ||||
-rw-r--r-- | openpgp/src/types/compression_level.rs | 4 | ||||
-rw-r--r-- | sop/src/main.rs | 4 | ||||
-rw-r--r-- | sq/src/commands/mod.rs | 7 |
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 = |