summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2020-09-21 13:19:58 +0200
committerJustus Winter <justus@sequoia-pgp.org>2020-09-21 13:39:09 +0200
commita67908ab81151cfd69f71c20cd2975507e0a3b5a (patch)
treeabe8c5f06e1457d48932eb6932057da81a6f66eb
parent1151aee5b90eefb2525ff363948a332da9443c43 (diff)
openpgp: Refuse to parse ECDH public keys with unknown magic value.
- ECDH public fields have a mechanism for future extensions. Currently, this field has to be set to 1. Enforce this at parse time. - Fixes #561.
-rw-r--r--openpgp/src/parse/mpis.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/openpgp/src/parse/mpis.rs b/openpgp/src/parse/mpis.rs
index 9dd7d31a..b1af3c22 100644
--- a/openpgp/src/parse/mpis.rs
+++ b/openpgp/src/parse/mpis.rs
@@ -118,7 +118,12 @@ impl mpi::PublicKey {
"wrong kdf length".into()).into());
}
- let _reserved = php.parse_u8("kdf_reserved")?;
+ let reserved = php.parse_u8("kdf_reserved")?;
+ if reserved != 1 {
+ return Err(Error::MalformedPacket(
+ format!("Reserved kdf field must be 0x01, \
+ got 0x{:x}", reserved)).into());
+ }
let hash: HashAlgorithm = php.parse_u8("kdf_hash")?.into();
let sym: SymmetricAlgorithm = php.parse_u8("kek_symm")?.into();