summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2021-03-17 12:03:27 +0100
committerJustus Winter <justus@sequoia-pgp.org>2021-03-17 12:03:27 +0100
commiteba2a103b82e9402f8a0049ae4df9245bfd3bcbd (patch)
tree8dd45d447f4f408b5e51eb2c36c591ccdc1a1148
parentdd69bc83dd3660b8c59407ee902f523afff06916 (diff)
openpgp: Ignore marker packets when verifying detached sigs.
- Fixes #686.
-rw-r--r--openpgp/src/parse/stream.rs30
1 files changed, 24 insertions, 6 deletions
diff --git a/openpgp/src/parse/stream.rs b/openpgp/src/parse/stream.rs
index e0b853b6..19598f5b 100644
--- a/openpgp/src/parse/stream.rs
+++ b/openpgp/src/parse/stream.rs
@@ -2338,7 +2338,9 @@ impl<'a, H: VerificationHelper + DecryptionHelper> Decryptor<'a, H> {
// signatures here, which on their own are not a valid
// message.
if v.mode == Mode::VerifyDetached {
- if pp.packet.tag() != packet::Tag::Signature {
+ if pp.packet.tag() != packet::Tag::Signature
+ && pp.packet.tag() != packet::Tag::Marker
+ {
return Err(Error::MalformedMessage(
format!("Expected signature, got {}", pp.packet.tag()))
.into());
@@ -3231,7 +3233,7 @@ mod test {
}
#[test]
- fn detached_verifier() {
+ fn detached_verifier() -> Result<()> {
lazy_static::lazy_static! {
static ref ZEROS: Vec<u8> = vec![0; 100 * 1024 * 1024];
}
@@ -3239,20 +3241,35 @@ mod test {
let p = P::new();
struct Test<'a> {
- sig: &'a [u8],
+ sig: Vec<u8>,
content: &'a [u8],
reference: time::SystemTime,
};
let tests = [
Test {
sig: crate::tests::message(
- "a-cypherpunks-manifesto.txt.ed25519.sig"),
+ "a-cypherpunks-manifesto.txt.ed25519.sig").to_vec(),
+ content: crate::tests::manifesto(),
+ reference: crate::frozen_time(),
+ },
+ // The same, but with a marker packet.
+ Test {
+ sig: {
+ let sig = crate::PacketPile::from_bytes(
+ crate::tests::message(
+ "a-cypherpunks-manifesto.txt.ed25519.sig"))?;
+ let mut buf = Vec::new();
+ Packet::Marker(Default::default()).serialize(&mut buf)?;
+ sig.serialize(&mut buf)?;
+ buf
+ },
content: crate::tests::manifesto(),
reference: crate::frozen_time(),
},
Test {
sig: crate::tests::message(
- "emmelie-dorothea-dina-samantha-awina-detached-signature-of-100MB-of-zeros.sig"),
+ "emmelie-dorothea-dina-samantha-awina-detached-signature-of-100MB-of-zeros.sig")
+ .to_vec(),
content: &ZEROS[..],
reference:
crate::types::Timestamp::try_from(1572602018).unwrap().into(),
@@ -3266,7 +3283,7 @@ mod test {
.collect::<Vec<_>>();
for test in tests.iter() {
- let sig = test.sig;
+ let sig = &test.sig;
let content = test.content;
let reference = test.reference;
@@ -3279,6 +3296,7 @@ mod test {
assert_eq!(h.good, 1);
assert_eq!(h.bad, 0);
}
+ Ok(())
}
#[test]