summaryrefslogtreecommitdiffstats
path: root/openpgp/src/packet/pkesk.rs
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2023-03-01 14:29:49 +0100
committerJustus Winter <justus@sequoia-pgp.org>2023-03-01 14:36:51 +0100
commit2b4cfe58604202e0a2515cf7e3de72245d2c6633 (patch)
treeaaa5572464b89b2b47046a408a6c804966cf6a13 /openpgp/src/packet/pkesk.rs
parent0111fce2278125bac5c747d485da2177dec5a590 (diff)
openpgp: Add low-level ElGamal PKESK decryption test.
Diffstat (limited to 'openpgp/src/packet/pkesk.rs')
-rw-r--r--openpgp/src/packet/pkesk.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/openpgp/src/packet/pkesk.rs b/openpgp/src/packet/pkesk.rs
index b6baa0a2..d6bb8d72 100644
--- a/openpgp/src/packet/pkesk.rs
+++ b/openpgp/src/packet/pkesk.rs
@@ -350,6 +350,35 @@ mod tests {
}
#[test]
+ fn decrypt_elgamal() -> Result<()> {
+ if ! (PublicKeyAlgorithm::DSA.is_supported()
+ && PublicKeyAlgorithm::ElGamalEncrypt.is_supported()) {
+ eprintln!("Skipping test, algorithm is not supported.");
+ return Ok(());
+ }
+
+ let cert = Cert::from_bytes(
+ crate::tests::key("dsa2048-elgamal3072-private.pgp"))?;
+ let pile = PacketPile::from_bytes(
+ crate::tests::message("encrypted-to-dsa2048-elgamal3072.pgp"))?;
+ let mut keypair =
+ cert.subkeys().next().unwrap()
+ .key().clone().parts_into_secret()?.into_keypair()?;
+
+ let pkesk: &PKESK =
+ pile.descendants().next().unwrap().downcast_ref().unwrap();
+
+ let plain = pkesk.decrypt(&mut keypair, None).unwrap();
+ let plain_ =
+ pkesk.decrypt(&mut keypair, Some(SymmetricAlgorithm::AES256))
+ .unwrap();
+ assert_eq!(plain, plain_);
+
+ eprintln!("plain: {:?}", plain);
+ Ok(())
+ }
+
+ #[test]
fn decrypt_ecdh_nistp521() {
if ! (PublicKeyAlgorithm::ECDSA.is_supported()
&& PublicKeyAlgorithm::ECDH.is_supported()