diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2023-03-01 14:29:49 +0100 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2023-03-01 14:36:51 +0100 |
commit | 2b4cfe58604202e0a2515cf7e3de72245d2c6633 (patch) | |
tree | aaa5572464b89b2b47046a408a6c804966cf6a13 /openpgp/src | |
parent | 0111fce2278125bac5c747d485da2177dec5a590 (diff) |
openpgp: Add low-level ElGamal PKESK decryption test.
Diffstat (limited to 'openpgp/src')
-rw-r--r-- | openpgp/src/packet/pkesk.rs | 29 |
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() |