diff options
Diffstat (limited to 'openpgp/benches/common/encrypt.rs')
-rw-r--r-- | openpgp/benches/common/encrypt.rs | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/openpgp/benches/common/encrypt.rs b/openpgp/benches/common/encrypt.rs index 0b5c94d7..edd898b5 100644 --- a/openpgp/benches/common/encrypt.rs +++ b/openpgp/benches/common/encrypt.rs @@ -1,7 +1,9 @@ use sequoia_openpgp as openpgp; use openpgp::cert::Cert; use openpgp::policy::StandardPolicy; -use openpgp::serialize::stream::{Encryptor, LiteralWriter, Message}; +use openpgp::serialize::stream::{ + padding::Padder, Armorer, Encryptor, LiteralWriter, Message, Signer, +}; use std::io::Write; @@ -27,6 +29,46 @@ 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>> { + let mut sink = vec![]; + + let p = &StandardPolicy::new(); + let signing_keypair = sender + .keys() + .with_policy(p, None) + .secret() + .for_signing() + .nth(0) + .unwrap() + .key() + .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 mut w = LiteralWriter::new(message).build()?; + w.write_all(bytes)?; + w.finalize()?; + Ok(sink) +} + pub fn encrypt_with_password( bytes: &[u8], password: &str, |