summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/guide-exploring-openpgp.rs1
-rw-r--r--examples/guide-the-keystore.rs1
-rw-r--r--ffi/src/openpgp.rs7
-rw-r--r--guide/src/chapter_02.md3
-rw-r--r--net/src/async.rs1
-rw-r--r--net/tests/hkp.rs1
-rw-r--r--openpgp/examples/decrypt-with.rs11
-rw-r--r--openpgp/examples/encrypt-for.rs1
-rw-r--r--openpgp/examples/notarize.rs2
-rw-r--r--openpgp/examples/sign-detached.rs1
-rw-r--r--openpgp/examples/sign.rs1
-rw-r--r--openpgp/examples/statistics.rs2
-rw-r--r--openpgp/src/armor.rs1
-rw-r--r--openpgp/src/autocrypt.rs1
-rw-r--r--openpgp/src/crypto/hash.rs1
-rw-r--r--openpgp/src/crypto/mpis.rs7
-rw-r--r--openpgp/src/crypto/s2k.rs4
-rw-r--r--openpgp/src/lib.rs2
-rw-r--r--openpgp/src/message/mod.rs58
-rw-r--r--openpgp/src/packet/key.rs1
-rw-r--r--openpgp/src/packet/mod.rs2
-rw-r--r--openpgp/src/packet/pkesk.rs1
-rw-r--r--openpgp/src/packet/signature/mod.rs1
-rw-r--r--openpgp/src/packet/signature/subpacket.rs4
-rw-r--r--openpgp/src/packet/skesk.rs1
-rw-r--r--openpgp/src/packet_pile.rs81
-rw-r--r--openpgp/src/parse/key.rs2
-rw-r--r--openpgp/src/parse/map.rs2
-rw-r--r--openpgp/src/parse/mpis.rs5
-rw-r--r--openpgp/src/parse/packet_parser_builder.rs41
-rw-r--r--openpgp/src/parse/packet_pile_parser.rs49
-rw-r--r--openpgp/src/parse/parse.rs434
-rw-r--r--openpgp/src/parse/stream.rs1
-rw-r--r--openpgp/src/serialize/mod.rs1
-rw-r--r--openpgp/src/serialize/stream.rs5
-rw-r--r--openpgp/src/tpk/mod.rs53
-rw-r--r--openpgp/src/tsk.rs22
-rw-r--r--sqv/src/sqv.rs2
-rw-r--r--store/src/backend/mod.rs1
-rw-r--r--store/src/lib.rs11
-rw-r--r--tool/src/commands/dump.rs2
-rw-r--r--tool/src/commands/mod.rs5
-rw-r--r--tool/src/sq.rs1
-rw-r--r--tool/tests/sq-sign.rs1
44 files changed, 623 insertions, 212 deletions
diff --git a/examples/guide-exploring-openpgp.rs b/examples/guide-exploring-openpgp.rs
index 88d4559d..66b95588 100644
--- a/examples/guide-exploring-openpgp.rs
+++ b/examples/guide-exploring-openpgp.rs
@@ -2,6 +2,7 @@
#[macro_use] // For armored!
extern crate sequoia_openpgp as openpgp;
+use openpgp::parse::Parse;
fn main() {
let mut reader = armored!(
diff --git a/examples/guide-the-keystore.rs b/examples/guide-the-keystore.rs
index 8ede6ac9..dac57c85 100644
--- a/examples/guide-the-keystore.rs
+++ b/examples/guide-the-keystore.rs
@@ -4,6 +4,7 @@
extern crate sequoia_openpgp as openpgp;
extern crate sequoia;
use sequoia::{core, store};
+use openpgp::parse::Parse;
fn main() {
let mut reader = armored!(
diff --git a/ffi/src/openpgp.rs b/ffi/src/openpgp.rs
index ef796144..3db1aa70 100644
--- a/ffi/src/openpgp.rs
+++ b/ffi/src/openpgp.rs
@@ -38,7 +38,12 @@ use self::openpgp::tpk::{
KeyIter
};
use self::openpgp::packet;
-use self::openpgp::parse::{PacketParserResult, PacketParser, PacketParserEOF};
+use self::openpgp::parse::{
+ Parse,
+ PacketParserResult,
+ PacketParser,
+ PacketParserEOF,
+};
use self::openpgp::parse::stream::{
DecryptionHelper,
Decryptor,
diff --git a/guide/src/chapter_02.md b/guide/src/chapter_02.md
index f39cecd1..80d5cc1c 100644
--- a/guide/src/chapter_02.md
+++ b/guide/src/chapter_02.md
@@ -17,6 +17,7 @@ success, we can use or examine the resulting [`TPK`]:
```rust
extern crate sequoia_openpgp as openpgp;
+use openpgp::parse::Parse;
const KEY: &str =
"-----BEGIN PGP PUBLIC KEY BLOCK-----
@@ -71,6 +72,7 @@ structure using this grammar:
```rust
extern crate sequoia_openpgp as openpgp;
+use openpgp::parse::Parse;
const MESSAGE: &str =
"-----BEGIN PGP MESSAGE-----
@@ -105,6 +107,7 @@ turned into a vector of [`Packet`]s:
```rust
extern crate sequoia_openpgp as openpgp;
+use openpgp::parse::Parse;
const MESSAGE: &str =
"-----BEGIN PGP MESSAGE-----
diff --git a/net/src/async.rs b/net/src/async.rs
index 9cd298b6..df82a7aa 100644
--- a/net/src/async.rs
+++ b/net/src/async.rs
@@ -18,6 +18,7 @@ use url::Url;
use openpgp::TPK;
use openpgp::{KeyID, armor, serialize::Serialize};
+use openpgp::parse::Parse;
use sequoia_core::{Context, NetworkPolicy};
use super::{Error, Result};
diff --git a/net/tests/hkp.rs b/net/tests/hkp.rs
index fc960eed..cf8e27b8 100644
--- a/net/tests/hkp.rs
+++ b/net/tests/hkp.rs
@@ -25,6 +25,7 @@ extern crate sequoia_net;
use openpgp::armor::Reader;
use openpgp::TPK;
use openpgp::{Fingerprint, KeyID};
+use openpgp::parse::Parse;
use sequoia_core::{Context, NetworkPolicy};
use sequoia_net::KeyServer;
diff --git a/openpgp/examples/decrypt-with.rs b/openpgp/examples/decrypt-with.rs
index bd8a2b13..c273a202 100644
--- a/openpgp/examples/decrypt-with.rs
+++ b/openpgp/examples/decrypt-with.rs
@@ -9,8 +9,15 @@ extern crate failure;
extern crate sequoia_openpgp as openpgp;
use openpgp::packet::key::SecretKey;
-use openpgp::parse::stream::{
- Decryptor, DecryptionHelper, Secret, VerificationHelper, VerificationResult,
+use openpgp::parse::{
+ Parse,
+ stream::{
+ DecryptionHelper,
+ Decryptor,
+ Secret,
+ VerificationHelper,
+ VerificationResult,
+ },
};
pub fn main() {
diff --git a/openpgp/examples/encrypt-for.rs b/openpgp/examples/encrypt-for.rs
index 18abdb79..51f5a981 100644
--- a/openpgp/examples/encrypt-for.rs
+++ b/openpgp/examples/encrypt-for.rs
@@ -7,6 +7,7 @@ use std::io;
extern crate sequoia_openpgp as openpgp;
use openpgp::armor;
use openpgp::constants::DataFormat;
+use openpgp::parse::Parse;
use openpgp::serialize::stream::{
Message, LiteralWriter, Encryptor, EncryptionMode,
};
diff --git a/openpgp/examples/notarize.rs b/openpgp/examples/notarize.rs
index 3138f478..49cb2069 100644
--- a/openpgp/examples/notarize.rs
+++ b/openpgp/examples/notarize.rs
@@ -9,7 +9,7 @@ use openpgp::{
armor,
Packet,
constants::DataFormat,
- parse::PacketParserResult,
+ parse::{Parse, PacketParserResult},
serialize::Serialize,
};
use openpgp::serialize::stream::{Message, LiteralWriter, Signer};
diff --git a/openpgp/examples/sign-detached.rs b/openpgp/examples/sign-detached.rs
index 5eda3ba5..46c0df1d 100644
--- a/openpgp/examples/sign-detached.rs
+++ b/openpgp/examples/sign-detached.rs
@@ -5,6 +5,7 @@ use std::io;
extern crate sequoia_openpgp as openpgp;
use openpgp::armor;
+use openpgp::parse::Parse;
use openpgp::serialize::stream::{Message, Signer};
fn main() {
diff --git a/openpgp/examples/sign.rs b/openpgp/examples/sign.rs
index 83e47c07..961c9597 100644
--- a/openpgp/examples/sign.rs
+++ b/openpgp/examples/sign.rs
@@ -6,6 +6,7 @@ use std::io;
extern crate sequoia_openpgp as openpgp;
use openpgp::armor;
use openpgp::constants::DataFormat;
+use openpgp::parse::Parse;
use openpgp::serialize::stream::{Message, LiteralWriter, Signer};
fn main() {
diff --git a/openpgp/examples/statistics.rs b/openpgp/examples/statistics.rs
index ae650aed..0087a05f 100644
--- a/openpgp/examples/statistics.rs
+++ b/openpgp/examples/statistics.rs
@@ -11,7 +11,7 @@ extern crate sequoia_openpgp as openpgp;
use openpgp::Packet;
use openpgp::constants::SignatureType;
use openpgp::packet::{BodyLength, Tag};
-use openpgp::parse::{PacketParserResult, PacketParser};
+use openpgp::parse::{Parse, PacketParserResult, PacketParser};
fn main() {
let args: Vec<String> = env::args().collect();
diff --git a/openpgp/src/armor.rs b/openpgp/src/armor.rs
index 772f3dcd..0120822c 100644
--- a/openpgp/src/armor.rs
+++ b/openpgp/src/armor.rs
@@ -388,6 +388,7 @@ impl<'a> Reader<'a> {
/// # extern crate sequoia_openpgp as openpgp;
/// # use openpgp::{Result, Message};
/// # use openpgp::armor::Reader;
+ /// # use openpgp::parse::Parse;
/// # use std::io;
/// # fn main() { f().unwrap(); }
/// # fn f() -> Result<()> {
diff --git a/openpgp/src/autocrypt.rs b/openpgp/src/autocrypt.rs
index c5617f83..8367d62a 100644
--- a/openpgp/src/autocrypt.rs
+++ b/openpgp/src/autocrypt.rs
@@ -28,6 +28,7 @@ use packet::SKESK;
use TPK;
use TSK;
use parse::{
+ Parse,
PacketParserResult, PacketParser,
};
use serialize::Serialize;
diff --git a/openpgp/src/crypto/hash.rs b/openpgp/src/crypto/hash.rs
index da0dd4b8..d0494853 100644
--- a/openpgp/src/crypto/hash.rs
+++ b/openpgp/src/crypto/hash.rs
@@ -347,6 +347,7 @@ impl Signature {
mod test {
use super::*;
use TPK;
+ use parse::Parse;
macro_rules! bytes {
( $x:expr ) => { include_bytes!(concat!("../../tests/data/keys/", $x)) };
diff --git a/openpgp/src/crypto/mpis.rs b/openpgp/src/crypto/mpis.rs
index 4a69b99f..c7552aac 100644
--- a/openpgp/src/crypto/mpis.rs
+++ b/openpgp/src/crypto/mpis.rs
@@ -707,15 +707,14 @@ impl Arbitrary for Signature {
#[cfg(test)]
mod tests {
use super::*;
+ use parse::Parse;
+ use serialize::Serialize;
quickcheck! {
fn mpi_roundtrip(mpi: MPI) -> bool {
- use std::io::Cursor;
- use serialize::Serialize;
-
let mut buf = Vec::new();
mpi.serialize(&mut buf).unwrap();
- MPI::parse_naked(Cursor::new(buf)).unwrap() == mpi
+ MPI::from_bytes(&buf).unwrap() == mpi
}
}
diff --git a/openpgp/src/crypto/s2k.rs b/openpgp/src/crypto/s2k.rs
index 1c2a5cf2..98aacf69 100644
--- a/openpgp/src/crypto/s2k.rs
+++ b/openpgp/src/crypto/s2k.rs
@@ -262,7 +262,7 @@ mod tests {
use conversions::to_hex;
use SymmetricAlgorithm;
use Packet;
- use parse::PacketParser;
+ use parse::{Parse, PacketParser};
use serialize::Serialize;
use std::path::PathBuf;
@@ -413,7 +413,7 @@ mod tests {
assert_eq!(buf.len(), l);
let mut r = Cursor::new(buf.into_boxed_slice());
- let s = S2K::parse_naked(&mut r).unwrap();
+ let s = S2K::from_reader(&mut r).unwrap();
eprintln!("out {:?}", s);
s2k == s
diff --git a/openpgp/src/lib.rs b/openpgp/src/lib.rs
index 1137a72d..a81ec457 100644
--- a/openpgp/src/lib.rs
+++ b/openpgp/src/lib.rs
@@ -374,7 +374,7 @@ pub struct PacketPile {
/// ```rust
/// # extern crate sequoia_openpgp as openpgp;
/// # use openpgp::Result;
-/// # use openpgp::parse::{PacketParserResult, PacketParser};
+/// # use openpgp::parse::{Parse, PacketParserResult, PacketParser};
/// use openpgp::TPK;
///
/// # fn main() { f().unwrap(); }
diff --git a/openpgp/src/message/mod.rs b/openpgp/src/message/mod.rs
index b1019183..957dcbde 100644
--- a/openpgp/src/message/mod.rs
+++ b/openpgp/src/message/mod.rs
@@ -22,8 +22,8 @@ use Packet;
use PacketPile;
use Message;
use packet::Literal;
-
use packet::Tag;
+use parse::Parse;
mod lexer;
mod grammar;
@@ -289,6 +289,35 @@ impl fmt::Debug for Message {
}
}
+impl<'a> Parse<'a, Message> for Message {
+ /// Reads a `Message` from the specified reader.
+ ///
+ /// See [`Message::from_packet_pile`] for more details.
+ ///
+ /// [`Message::from_packet_pile`]: #method.from_packet_pile
+ fn from_reader<R: 'a + io::Read>(reader: R) -> Result<Self> {
+ Self::from_packet_pile(PacketPile::from_reader(reader)?)
+ }
+
+ /// Reads a `Message` from the specified file.
+ ///
+ /// See [`Message::from_packet_pile`] for more details.
+ ///
+ /// [`Message::from_packet_pile`]: #method.from_packet_pile
+ fn from_file<P: AsRef<Path>>(path: P) -> Result<Self> {
+ Self::from_packet_pile(PacketPile::from_file(path)?)
+ }
+
+ /// Reads a `Message` from `buf`.
+ ///
+ /// See [`Message::from_packet_pile`] for more details.
+ ///
+ /// [`Message::from_packet_pile`]: #method.from_packet_pile
+ fn from_bytes(buf: &'a [u8]) -> Result<Self> {
+ Self::from_packet_pile(PacketPile::from_bytes(buf)?)
+ }
+}
+
impl Message {
/// Converts the `PacketPile` to a `Message`.
///
@@ -342,33 +371,6 @@ impl Message {
Self::from_packet_pile(PacketPile::from_packets(packets))
}
- /// Reads a `Message` from the specified reader.
- ///
- /// See [`Message::from_packet_pile`] for more details.
- ///
- /// [`Message::from_packet_pile`]: #method.from_packet_pile
- pub fn from_reader<R: io::Read>(reader: R) -> Result<Self> {
- Self::from_packet_pile(PacketPile::from_reader(reader)?)
- }
-
- /// Reads a `Message` from the specified file.
- ///
- /// See [`Message::from_packet_pile`] for more details.
- ///
- /// [`Message::from_packet_pile`]: #method.from_packet_pile
- pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self> {
- Self::from_packet_pile(PacketPile::from_file(path)?)
- }
-
- /// Reads a `Message` from `buf`.
- ///
- /// See [`Message::from_packet_pile`] for more details.
- ///
- /// [`Message::from_packet_pile`]: #method.from_packet_pile
- pub fn from_bytes(buf: &[u8]) -> Result<Self> {
- Self::from_packet_pile(PacketPile::from_bytes(buf)?)
- }
-
/// Converts the `Message` to a `PacketPile`.
pub fn to_packet_pile(self) -> PacketPile {
self.pile
diff --git a/openpgp/src/packet/key.rs b/openpgp/src/packet/key.rs
index 6265f9cb..98b064d0 100644
--- a/openpgp/src/packet/key.rs
+++ b/openpgp/src/packet/key.rs
@@ -326,6 +326,7 @@ mod tests {
use super::*;
use PacketPile;
use serialize::SerializeKey;
+ use parse::Parse;
fn path_to(artifact: &str) -> PathBuf {
[env!("CARGO_MANIFEST_DIR"), "tests", "data", "keys", artifact]
diff --git a/openpgp/src/packet/mod.rs b/openpgp/src/packet/mod.rs
index 03708c7d..2491ffdd 100644
--- a/openpgp/src/packet/mod.rs
+++ b/openpgp/src/packet/mod.rs
@@ -552,7 +552,7 @@ impl<'a> Iterator for PacketPathIter<'a> {
#[test]
fn packet_path_iter() {
use std::path::PathBuf;
-
+ use parse::Parse;
use PacketPile;
fn path_to(artifact: &str) -> PathBuf {
diff --git a/openpgp/src/packet/pkesk.rs b/openpgp/src/packet/pkesk.rs
index 7c9847d8..41f1a544 100644
--- a/openpgp/src/packet/pkesk.rs
+++ b/openpgp/src/packet/pkesk.rs
@@ -227,6 +227,7 @@ mod tests {
use packet::key::SecretKey;
use Packet;
use std::path::PathBuf;
+ use parse::Parse;
fn path_to_key(artifact: &str) -> PathBuf {
[env!("CARGO_MANIFEST_DIR"), "tests", "data", "keys", artifact]
diff --git a/openpgp/src/packet/signature/mod.rs b/openpgp/src/packet/signature/mod.rs
index 98a9f615..1ce65cdb 100644
--- a/openpgp/src/packet/signature/mod.rs
+++ b/openpgp/src/packet/signature/mod.rs
@@ -879,6 +879,7 @@ impl From<Signature> for Packet {
mod test {
use super::*;
use TPK;
+ use parse::Parse;
#[cfg(feature = "compression-deflate")]
#[test]
diff --git a/openpgp/src/packet/signature/subpacket.rs b/openpgp/src/packet/signature/subpacket.rs
index f88f3862..daaa0861 100644
--- a/openpgp/src/packet/signature/subpacket.rs
+++ b/openpgp/src/packet/signature/subpacket.rs
@@ -34,7 +34,7 @@
//! # extern crate sequoia_openpgp as openpgp;
//! # use openpgp::Result;
//! # use openpgp::Packet;
-//! # use openpgp::parse::{PacketParserResult, PacketParser};
+//! # use openpgp::parse::{Parse, PacketParserResult, PacketParser};
//! #
//! # f(include_bytes!("../../../tests/data/messages/signed.gpg"));
//! #
@@ -2472,6 +2472,7 @@ fn accessors() {
#[test]
fn subpacket_test_1 () {
use PacketPile;
+ use parse::Parse;
let path = path_to("signed.gpg");
let pile = PacketPile::from_file(&path).unwrap();
@@ -2525,6 +2526,7 @@ fn subpacket_test_1 () {
#[test]
fn subpacket_test_2() {
use conversions::Time;
+ use parse::Parse;
use PacketPile;
// Test # Subpacket
diff --git a/openpgp/src/packet/skesk.rs b/openpgp/src/packet/skesk.rs
index e307b823..3c40abc7 100644
--- a/openpgp/src/packet/skesk.rs
+++ b/openpgp/src/packet/skesk.rs
@@ -383,6 +383,7 @@ impl From<SKESK5> for Packet {
mod test {
use super::*;
use PacketPile;
+ use parse::Parse;
use serialize::Serialize;
#[test]
diff --git a/openpgp/src/packet_pile.rs b/openpgp/src/packet_pile.rs
index 7352ed38..8d5ef64e 100644
--- a/openpgp/src/packet_pile.rs
+++ b/openpgp/src/packet_pile.rs
@@ -16,6 +16,7 @@ use packet::{Container, PacketIter};
use PacketPile;
use parse::PacketParserResult;
use parse::PacketParserBuilder;
+use parse::Parse;
use parse::Cookie;
#[cfg(test)]
@@ -41,6 +42,45 @@ impl fmt::Debug for PacketPile {
}
}
+impl<'a> Parse<'a, PacketPile> for PacketPile {
+ /// Deserializes the OpenPGP message stored in a `std::io::Read`
+ /// object.
+ ///
+ /// Although this method is easier to use to parse a sequence of
+ /// OpenPGP packets than a [`PacketParser`] or a
+ /// [`PacketPileParser`], this interface buffers the whole message
+ /// in memory. Thus, the caller must be certain that the
+ /// *deserialized* message is not too large.
+ ///
+ /// Note: this interface *does* buffer the contents of packets.