diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2020-04-03 18:22:55 +0200 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2020-04-03 18:32:03 +0200 |
commit | a9ca727cab50c0c91098a7ef8aea79f5f62a1f5c (patch) | |
tree | e7122be749e5b3b26ee96969f4f9e8347fe6532b /openpgp | |
parent | 6494b37775ada713e8ff139ee40c5accdfcaf16a (diff) |
openpgp: Unawkwardify the streaming encryptor.
Diffstat (limited to 'openpgp')
-rw-r--r-- | openpgp/examples/encrypt-for.rs | 10 | ||||
-rw-r--r-- | openpgp/examples/generate-encrypt-decrypt.rs | 10 | ||||
-rw-r--r-- | openpgp/examples/pad.rs | 10 | ||||
-rw-r--r-- | openpgp/src/serialize/stream.rs | 40 |
4 files changed, 30 insertions, 40 deletions
diff --git a/openpgp/examples/encrypt-for.rs b/openpgp/examples/encrypt-for.rs index ef6486eb..d8c3affd 100644 --- a/openpgp/examples/encrypt-for.rs +++ b/openpgp/examples/encrypt-for.rs @@ -38,7 +38,7 @@ fn main() { }).collect(); // Build a vector of recipients to hand to Encryptor. - let mut recipients = + let recipients = certs.iter() .flat_map(|cert| { cert.keys() @@ -57,12 +57,8 @@ fn main() { let message = Message::new(&mut sink); // We want to encrypt a literal data packet. - let mut encryptor = Encryptor::for_recipient( - message, recipients.pop().expect("No encryption key found")); - for r in recipients { - encryptor = encryptor.add_recipient(r) - } - let encryptor = encryptor.build().expect("Failed to create encryptor"); + let encryptor = Encryptor::for_recipients(message, recipients) + .build().expect("Failed to create encryptor"); let mut literal_writer = LiteralWriter::new(encryptor).build() .expect("Failed to create literal writer"); diff --git a/openpgp/examples/generate-encrypt-decrypt.rs b/openpgp/examples/generate-encrypt-decrypt.rs index 4b0d3ff2..a5a49f0b 100644 --- a/openpgp/examples/generate-encrypt-decrypt.rs +++ b/openpgp/examples/generate-encrypt-decrypt.rs @@ -48,7 +48,7 @@ fn encrypt(p: &dyn Policy, sink: &mut dyn Write, plaintext: &str, -> openpgp::Result<()> { // Build a vector of recipients to hand to Encryptor. - let mut recipients = + let recipients = recipient.keys().with_policy(p, None).alive().revoked(false) .for_transport_encryption() .map(|ka| ka.key().into()) @@ -58,12 +58,8 @@ fn encrypt(p: &dyn Policy, sink: &mut dyn Write, plaintext: &str, let message = Message::new(sink); // We want to encrypt a literal data packet. - let mut encryptor = Encryptor::for_recipient( - message, recipients.pop().expect("No encryption key found")); - for r in recipients { - encryptor = encryptor.add_recipient(r) - } - let encryptor = encryptor.build().expect("Failed to create encryptor"); + let encryptor = Encryptor::for_recipients(message, recipients) + .build()?; // Emit a literal data packet. let mut literal_writer = LiteralWriter::new(encryptor).build()?; diff --git a/openpgp/examples/pad.rs b/openpgp/examples/pad.rs index 4a762b58..8e5915a8 100644 --- a/openpgp/examples/pad.rs +++ b/openpgp/examples/pad.rs @@ -38,7 +38,7 @@ fn main() { }).collect(); // Build a vector of recipients to hand to Encryptor. - let mut recipients = certs + let recipients = certs .iter() .flat_map(|cert| { cert.keys() @@ -57,12 +57,8 @@ fn main() { let message = Message::new(&mut sink); // We want to encrypt a literal data packet. - let mut encryptor = Encryptor::for_recipient( - message, recipients.pop().expect("No encryption key found")); - for r in recipients { - encryptor = encryptor.add_recipient(r) - } - let encryptor = encryptor.build().expect("Failed to create encryptor"); + let encryptor = Encryptor::for_recipients(message, recipients) + .build().expect("Failed to create encryptor"); let padder = Padder::new(encryptor, padme) .expect("Failed to create padder"); diff --git a/openpgp/src/serialize/stream.rs b/openpgp/src/serialize/stream.rs index 37cd17df..3b8a1a86 100644 --- a/openpgp/src/serialize/stream.rs +++ b/openpgp/src/serialize/stream.rs @@ -1024,17 +1024,17 @@ impl<'a> Encryptor<'a> { /// ).unwrap(); /// /// // Build a vector of recipients to hand to Encryptor. - /// let recipient = + /// let recipients = /// cert.keys().with_policy(p, None).alive().revoked(false) /// // Or `for_storage_encryption()`, for data at rest. /// .for_transport_encryption() /// .map(|ka| ka.key().into()) - /// .nth(0).unwrap(); + /// .collect(); /// /// let mut o = vec![]; /// let message = Message::new(&mut o); /// let encryptor = - /// Encryptor::for_recipient(message, recipient) + /// Encryptor::for_recipients(message, recipients) /// .build().expect("Failed to create encryptor"); /// let mut w = LiteralWriter::new(encryptor).build()?; /// w.write_all(b"Hello world.")?; @@ -1042,11 +1042,11 @@ impl<'a> Encryptor<'a> { /// # Ok(()) /// # } /// ``` - pub fn for_recipient(inner: Message<'a, Cookie>, - recipient: Recipient<'a>) -> Self { + pub fn for_recipients(inner: Message<'a, Cookie>, + recipients: Vec<Recipient<'a>>) -> Self { Self { inner: Some(inner.into()), - recipients: vec![recipient], + recipients, passwords: Vec::new(), sym_algo: Default::default(), aead_algo: Default::default(), @@ -1083,7 +1083,8 @@ impl<'a> Encryptor<'a> { /// let mut o = vec![]; /// let message = Message::new(&mut o); /// let encryptor = - /// Encryptor::with_password(message, "совершенно секретно".into()) + /// Encryptor::with_passwords(message, + /// vec!["совершенно секретно".into()]) /// .build().expect("Failed to create encryptor"); /// let mut w = LiteralWriter::new(encryptor).build()?; /// w.write_all(b"Hello world.")?; @@ -1091,12 +1092,12 @@ impl<'a> Encryptor<'a> { /// # Ok(()) /// # } /// ``` - pub fn with_password(inner: Message<'a, Cookie>, - password: Password) -> Self { + pub fn with_passwords(inner: Message<'a, Cookie>, + passwords: Vec<Password>) -> Self { Self { inner: Some(inner.into()), recipients: Vec::new(), - passwords: vec![password], + passwords, sym_algo: Default::default(), aead_algo: Default::default(), hash: HashAlgorithm::SHA1.context().unwrap(), @@ -1137,8 +1138,10 @@ impl<'a> Encryptor<'a> { /// Finalizes the encryptor, returning the writer stack. pub fn build(mut self) -> Result<Message<'a, Cookie>> { - assert!(self.recipients.len() + self.passwords.len() > 0, - "The constructors add at least one recipient or password"); + if self.recipients.len() + self.passwords.len() == 0 { + return Err(Error::InvalidOperation( + "Neither recipients nor passwords given".into()).into()); + } struct AEADParameters { algo: AEADAlgorithm, @@ -1557,16 +1560,15 @@ mod test { #[test] fn encryptor() { - let passwords: [Password; 2] = ["streng geheim".into(), - "top secret".into()]; + let passwords = vec!["streng geheim".into(), + "top secret".into()]; let message = b"Hello world."; // Write a simple encrypted message... let mut o = vec![]; { let m = Message::new(&mut o); - let encryptor = Encryptor::with_password(m, passwords[0].clone()) - .add_password(passwords[1].clone()) + let encryptor = Encryptor::with_passwords(m, passwords.clone()) .build().unwrap(); let mut literal = LiteralWriter::new(encryptor).build() .unwrap(); @@ -1747,11 +1749,11 @@ mod test { let mut msg = vec![]; { let m = Message::new(&mut msg); - let recipient = tsk + let recipients = tsk .keys().with_policy(p, None) .for_storage_encryption().for_transport_encryption() - .nth(0).unwrap().key().into(); - let encryptor = Encryptor::for_recipient(m, recipient) + .map(|ka| ka.key().into()).collect(); + let encryptor = Encryptor::for_recipients(m, recipients) .aead_algo(AEADAlgorithm::EAX) .build().unwrap(); let mut literal = LiteralWriter::new(encryptor).build() |