diff options
Diffstat (limited to 'openpgp/src')
-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 |
3 files changed, 43 insertions, 20 deletions
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.")?; |