summaryrefslogtreecommitdiffstats
path: root/openpgp/src/parse
diff options
context:
space:
mode:
Diffstat (limited to 'openpgp/src/parse')
-rw-r--r--openpgp/src/parse/stream.rs74
1 files changed, 70 insertions, 4 deletions
diff --git a/openpgp/src/parse/stream.rs b/openpgp/src/parse/stream.rs
index a0bbe8ca..65394f93 100644
--- a/openpgp/src/parse/stream.rs
+++ b/openpgp/src/parse/stream.rs
@@ -120,6 +120,7 @@ use crate::{
key,
OnePassSig,
PKESK,
+ SEIP,
SKESK,
},
KeyHandle,
@@ -2430,10 +2431,10 @@ impl<'a, H: VerificationHelper + DecryptionHelper> Decryptor<'a, H> {
}
}
- let sym_algo_hint = if let Packet::AED(ref aed) = pp.packet {
- Some(aed.symmetric_algo())
- } else {
- None
+ let sym_algo_hint = match &pp.packet {
+ Packet::SEIP(SEIP::V2(seip)) => Some(seip.symmetric_algo()),
+ Packet::AED(aed) => Some(aed.symmetric_algo()),
+ _ => None,
};
match pp.packet {
@@ -4170,6 +4171,71 @@ xHUDBRY0WIQ+50WENDPP";
.with_policy(&p, crate::frozen_time(), helper)?;
assert!(v.message_processed());
assert_eq!(v.helper_ref().good, 2);
+
+ Ok(())
+ }
+
+ /// This sample packet is from RFC9760.
+ #[test]
+ fn v6skesk_v2seip_aes128_ocb() -> Result<()> {
+ sample_skesk6_packet(
+ SymmetricAlgorithm::AES128,
+ AEADAlgorithm::OCB,
+ "password",
+ "crypto-refresh/v6skesk-aes128-ocb.pgp",
+ b"Hello, world!")
+ }
+
+ /// This sample packet is from RFC9760.
+ #[test]
+ fn v6skesk_v2seip_aes128_eax() -> Result<()> {
+ sample_skesk6_packet(
+ SymmetricAlgorithm::AES128,
+ AEADAlgorithm::EAX,
+ "password",
+ "crypto-refresh/v6skesk-aes128-eax.pgp",
+ b"Hello, world!")
+ }
+
+ /// This sample packet is from RFCXXX.
+ #[test]
+ fn v6skesk_v2seip_aes128_gcm() -> Result<()> {
+ sample_skesk6_packet(
+ SymmetricAlgorithm::AES128,
+ AEADAlgorithm::GCM,
+ "password",
+ "crypto-refresh/v6skesk-aes128-gcm.pgp",
+ b"Hello, world!")
+ }
+
+ fn sample_skesk6_packet(cipher: SymmetricAlgorithm,
+ aead: AEADAlgorithm,
+ password: &str,
+ name: &str,
+ plaintext: &[u8])
+ -> Result<()> {
+ if ! (aead.is_supported()
+ && aead.supports_symmetric_algo(&cipher))
+ {
+ eprintln!("Skipping test vector {:?}...", name);
+ return Ok(());
+ }
+
+ eprintln!("Test vector {:?}...", name);
+
+ let p = &P::new();
+ let password: Password = String::from(password).into();
+
+ let h = VHelper::for_decryption(0, 0, 0, 0, vec![], vec![],
+ vec![password]);
+ let mut d = DecryptorBuilder::from_bytes(crate::tests::file(name))?
+ .with_policy(p, None, h)?;
+ assert!(d.message_processed());
+
+ let mut content = Vec::new();
+ d.read_to_end(&mut content).unwrap();
+ assert_eq!(&content, plaintext);
+
Ok(())
}
}