From 2e1eec5fe4157a391a13554ff7df3075cfe043cc Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Thu, 9 Apr 2020 16:42:59 +0200 Subject: openpgp: Make PacketParserResult a std::result::Result. - This avoids the partial implementation imitating std::option::Option, replacing it with std::result::Result. - As a benefit, std::result::Result is in the prelude, simplifying a lot of parsing loops. --- autocrypt/src/lib.rs | 18 +-- guide/src/chapter_03.md | 2 +- openpgp-ffi/src/parse/mod.rs | 12 +- openpgp/examples/notarize.rs | 6 +- openpgp/examples/statistics.rs | 4 +- openpgp/src/cert/mod.rs | 4 +- openpgp/src/cert/parser/mod.rs | 6 +- openpgp/src/crypto/s2k.rs | 2 +- openpgp/src/packet/key.rs | 2 +- openpgp/src/packet/signature/mod.rs | 4 +- openpgp/src/packet/signature/subpacket.rs | 4 +- openpgp/src/packet_pile.rs | 18 +-- openpgp/src/parse.rs | 185 +++++++++-------------------- openpgp/src/parse/packet_parser_builder.rs | 12 +- openpgp/src/parse/packet_pile_parser.rs | 24 ++-- openpgp/src/parse/stream.rs | 18 +-- openpgp/src/serialize/stream.rs | 10 +- openpgp/tests/for-each-artifact.rs | 2 +- tool/src/commands/decrypt.rs | 5 +- tool/src/commands/dump.rs | 6 +- tool/src/commands/inspect.rs | 6 +- tool/src/commands/mod.rs | 6 +- tool/src/commands/sign.rs | 7 +- 23 files changed, 146 insertions(+), 217 deletions(-) diff --git a/autocrypt/src/lib.rs b/autocrypt/src/lib.rs index ca517cc0..66b7475f 100644 --- a/autocrypt/src/lib.rs +++ b/autocrypt/src/lib.rs @@ -29,7 +29,7 @@ use openpgp::packet::SKESK; use openpgp::cert::prelude::*; use openpgp::parse::{ Parse, - PacketParserResult, PacketParser, + PacketParser, }; use openpgp::serialize::Serialize; use openpgp::serialize::stream::{ @@ -568,7 +568,7 @@ impl AutocryptSetupMessage { // SK-ESK and a SEIP packet, which contains a Literal data // packet. - let pp = if let PacketParserResult::Some(pp) = ppr { + let pp = if let Ok(pp) = ppr { pp } else { return Err( @@ -590,12 +590,12 @@ impl AutocryptSetupMessage { }; let pp = match ppr { - PacketParserResult::EOF(_) => + Err(_) => return Err( Error::MalformedMessage( "Pre-mature EOF after reading SK-ESK packet".into()) .into()), - PacketParserResult::Some(pp) => { + Ok(pp) => { match pp.packet { Packet::SEIP(_) => (), ref p => return Err( @@ -683,7 +683,7 @@ impl<'a> AutocryptSetupMessageParser<'a> { // Recurse into the SEIP packet. let mut ppr = self.pp.recurse()?.1; - if ppr.as_ref().map(|pp| pp.recursion_depth()) != Some(1) { + if ppr.as_ref().ok().map(|pp| pp.recursion_depth()) != Some(1) { return Err( Error::MalformedMessage( "SEIP container empty, but expected a Literal Data packet" @@ -692,7 +692,7 @@ impl<'a> AutocryptSetupMessageParser<'a> { } // Get the literal data packet. - let (prefer_encrypt, cert) = if let PacketParserResult::Some(mut pp) = ppr { + let (prefer_encrypt, cert) = if let Ok(mut pp) = ppr { match pp.packet { Packet::Literal(_) => (), p => return Err(Error::MalformedMessage( @@ -746,7 +746,7 @@ impl<'a> AutocryptSetupMessageParser<'a> { }; // Get the MDC packet. - if let PacketParserResult::Some(pp) = ppr { + if let Ok(pp) = ppr { match pp.packet { Packet::MDC(_) => (), ref p => return @@ -762,7 +762,7 @@ impl<'a> AutocryptSetupMessageParser<'a> { // Make sure we reached the end of the outer message. match ppr { - PacketParserResult::EOF(pp) => { + Err(pp) => { // If we've gotten this far, then the outer message // has the right sequence of packets, but we haven't // carefully checked the nesting. We do that now. @@ -771,7 +771,7 @@ impl<'a> AutocryptSetupMessageParser<'a> { "Invalid OpenPGP Message").into()); } } - PacketParserResult::Some(pp) => + Ok(pp) => return Err(Error::MalformedMessage( format!("Extraneous packet: {}.", pp.packet.tag())) .into()), diff --git a/guide/src/chapter_03.md b/guide/src/chapter_03.md index 19a42147..d661f7b9 100644 --- a/guide/src/chapter_03.md +++ b/guide/src/chapter_03.md @@ -201,7 +201,7 @@ fn main() { let mut buf = vec![0; 1024 * 1024]; let mut ppr = PacketParser::from_bytes(MESSAGE.as_bytes()).unwrap(); - while let PacketParserResult::Some(mut pp) = ppr { + while let Ok(mut pp) = ppr { // Match on the kind of packet here while it is in the parser. if let openpgp::Packet::Literal(_) = pp.packet { // Stream the content of the literal packet. diff --git a/openpgp-ffi/src/parse/mod.rs b/openpgp-ffi/src/parse/mod.rs index d3ed1407..06066a9d 100644 --- a/openpgp-ffi/src/parse/mod.rs +++ b/openpgp-ffi/src/parse/mod.rs @@ -357,8 +357,8 @@ pub extern "C" fn pgp_packet_parser_result_tag<'a> let ppr = ffi_param_ref_mut!(ppr); let tag : u8 = match ppr { - PacketParserResult::Some(ref pp) => pp.packet.tag().into(), - PacketParserResult::EOF(_) => 0, + Ok(ref pp) => pp.packet.tag().into(), + Err(_) => 0, }; tag as c_int @@ -383,8 +383,8 @@ pub extern "C" fn pgp_packet_parser_result_packet_parser<'a> let ppr = ffi_param_move!(ppr); match *ppr { - PacketParserResult::Some(pp) => box_raw!(pp), - PacketParserResult::EOF(_) => { + Ok(pp) => box_raw!(pp), + Err(_) => { // Don't free ppr! forget(ppr); ptr::null_mut() @@ -411,10 +411,10 @@ pub extern "C" fn pgp_packet_parser_result_eof<'a> let ppr = ffi_param_move!(ppr); match *ppr { - PacketParserResult::Some(_) => { + Ok(_) => { forget(ppr); ptr::null_mut() } - PacketParserResult::EOF(eof) => box_raw!(eof), + Err(eof) => box_raw!(eof), } } diff --git a/openpgp/examples/notarize.rs b/openpgp/examples/notarize.rs index f7a9842a..c1ad00be 100644 --- a/openpgp/examples/notarize.rs +++ b/openpgp/examples/notarize.rs @@ -8,7 +8,7 @@ extern crate sequoia_openpgp as openpgp; use crate::openpgp::{ armor, Packet, - parse::{Parse, PacketParserResult}, + parse::Parse, serialize::Marshal, }; use crate::openpgp::serialize::stream::{Message, LiteralWriter, Signer}; @@ -78,7 +78,7 @@ fn main() { = openpgp::parse::PacketParser::from_reader(&mut input) .expect("Failed to build parser"); - while let PacketParserResult::Some(mut pp) = ppr { + while let Ok(mut pp) = ppr { if let Err(err) = pp.possible_message() { panic!("Malformed OpenPGP message: {}", err); } @@ -110,7 +110,7 @@ fn main() { ppr = pp.recurse().expect("Failed to recurse").1; } - if let PacketParserResult::EOF(eof) = ppr { + if let Err(eof) = ppr { if let Err(err) = eof.is_message() { panic!("Malformed OpenPGP message: {}", err) } diff --git a/openpgp/examples/statistics.rs b/openpgp/examples/statistics.rs index 1dfebe38..8f2efe8c 100644 --- a/openpgp/examples/statistics.rs +++ b/openpgp/examples/statistics.rs @@ -14,7 +14,7 @@ use crate::openpgp::{Packet, Fingerprint, KeyID, KeyHandle}; use crate::openpgp::types::*; use crate::openpgp::packet::{user_attribute, header::BodyLength, Tag}; use crate::openpgp::packet::signature::subpacket::SubpacketTag; -use crate::openpgp::parse::{Parse, PacketParserResult, PacketParser}; +use crate::openpgp::parse::{Parse, PacketParser}; use crate::openpgp::serialize::MarshalInto; fn main() { @@ -90,7 +90,7 @@ fn main() { .expect("Failed to create reader"); // Iterate over all packets. - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { // While the packet is in the parser, get some data for later. let size = match pp.header().length() { &BodyLength::Full(n) => Some(n), diff --git a/openpgp/src/cert/mod.rs b/openpgp/src/cert/mod.rs index 861fdd83..e72db089 100644 --- a/openpgp/src/cert/mod.rs +++ b/openpgp/src/cert/mod.rs @@ -312,7 +312,7 @@ use super::*; /// ```rust /// # extern crate sequoia_openpgp as openpgp; /// # use openpgp::Result; -/// # use openpgp::parse::{Parse, PacketParserResult, PacketParser}; +/// # use openpgp::parse::{Parse, PacketParser}; /// use openpgp::cert::prelude::*; /// /// # fn main() { f().unwrap(); } @@ -387,7 +387,7 @@ use super::*; /// # extern crate sequoia_openpgp as openpgp; /// # use std::convert::TryFrom; /// # use openpgp::Result; -/// # use openpgp::parse::{Parse, PacketParserResult, PacketParser}; +/// # use openpgp::parse::{Parse, PacketParser}; /// use openpgp::Cert; /// /// # fn main() { f().unwrap(); } diff --git a/openpgp/src/cert/parser/mod.rs b/openpgp/src/cert/parser/mod.rs index 50cc7e5a..da0194bc 100644 --- a/openpgp/src/cert/parser/mod.rs +++ b/openpgp/src/cert/parser/mod.rs @@ -394,7 +394,7 @@ enum PacketSource<'a, I: Iterator> { /// ```rust /// # extern crate sequoia_openpgp as openpgp; /// # use openpgp::Result; -/// # use openpgp::parse::{Parse, PacketParserResult, PacketParser}; +/// # use openpgp::parse::{Parse, PacketParser}; /// use openpgp::cert::prelude::*; /// /// # fn main() { f().unwrap(); } @@ -441,7 +441,7 @@ impl<'a> From> for CertParser<'a, vec::IntoIter> /// Initializes a `CertParser` from a `PacketParser`. fn from(ppr: PacketParserResult<'a>) -> Self { let mut parser : Self = Default::default(); - if let PacketParserResult::Some(pp) = ppr { + if let Ok(pp) = ppr { parser.source = PacketSource::PacketParser(pp); } parser @@ -731,7 +731,7 @@ impl<'a, I: Iterator> Iterator for CertParser<'a, I> { match pp.next() { Ok((packet, ppr)) => { - if let PacketParserResult::Some(pp) = ppr { + if let Ok(pp) = ppr { self.source = PacketSource::PacketParser(pp); } diff --git a/openpgp/src/crypto/s2k.rs b/openpgp/src/crypto/s2k.rs index 8dff4693..40a26bda 100644 --- a/openpgp/src/crypto/s2k.rs +++ b/openpgp/src/crypto/s2k.rs @@ -416,7 +416,7 @@ mod tests { // Get the next packet. let (_, ppr) = pp.next().unwrap(); - assert!(ppr.is_none()); + assert!(ppr.is_err()); } } diff --git a/openpgp/src/packet/key.rs b/openpgp/src/packet/key.rs index d06ac07e..29409ace 100644 --- a/openpgp/src/packet/key.rs +++ b/openpgp/src/packet/key.rs @@ -29,7 +29,7 @@ //! ```rust //! # extern crate sequoia_openpgp as openpgp; //! # use openpgp::Result; -//! # use openpgp::parse::{Parse, PacketParserResult, PacketParser}; +//! # use openpgp::parse::{Parse, PacketParser}; //! # use openpgp::cert::prelude::*; //! use openpgp::packet::{Key, key}; //! diff --git a/openpgp/src/packet/signature/mod.rs b/openpgp/src/packet/signature/mod.rs index 66c0065a..b294ae5a 100644 --- a/openpgp/src/packet/signature/mod.rs +++ b/openpgp/src/packet/signature/mod.rs @@ -1283,7 +1283,7 @@ mod test { use super::*; use crate::Cert; - use crate::parse::{PacketParserResult, PacketParser}; + use crate::parse::PacketParser; struct Test<'a> { key: &'a str, @@ -1369,7 +1369,7 @@ mod test { let mut good = 0; let mut ppr = PacketParser::from_bytes( crate::tests::message(test.data)).unwrap(); - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { if let Packet::Signature(ref sig) = pp.packet { let result = sig.verify(cert.primary_key().key()) .map(|_| true).unwrap_or(false); diff --git a/openpgp/src/packet/signature/subpacket.rs b/openpgp/src/packet/signature/subpacket.rs index 605d48d2..ac000842 100644 --- a/openpgp/src/packet/signature/subpacket.rs +++ b/openpgp/src/packet/signature/subpacket.rs @@ -34,13 +34,13 @@ //! # extern crate sequoia_openpgp as openpgp; //! # use openpgp::Result; //! # use openpgp::Packet; -//! # use openpgp::parse::{Parse, PacketParserResult, PacketParser}; +//! # use openpgp::parse::{Parse, PacketParser}; //! # //! # f(include_bytes!("../../../tests/data/messages/signed.gpg")); //! # //! # fn f(message_data: &[u8]) -> Result<()> { //! let mut ppr = PacketParser::from_bytes(message_data)?; -//! while let PacketParserResult::Some(mut pp) = ppr { +//! while let Ok(mut pp) = ppr { //! if let Packet::Signature(ref sig) = pp.packet { //! if let Some(fp) = sig.issuer_fingerprint() { //! eprintln!("Signature issued by: {}", fp.to_string()); diff --git a/openpgp/src/packet_pile.rs b/openpgp/src/packet_pile.rs index 250d9f14..d3ced30f 100644 --- a/openpgp/src/packet_pile.rs +++ b/openpgp/src/packet_pile.rs @@ -349,7 +349,7 @@ impl<'a> TryFrom> for PacketPile { // ppo.recursion_depth and leave the rest of the message, but // it is hard to imagine that that is what the caller wants. // Instead of hiding that error, fail fast. - if let PacketParserResult::Some(ref pp) = ppr { + if let Ok(ref pp) = ppr { if pp.recursion_depth() != 0 { return Err(Error::InvalidOperation( format!("Expected top-level packet, \ @@ -363,7 +363,7 @@ impl<'a> TryFrom> for PacketPile { let mut last_position = 0; - if ppr.is_none() { + if ppr.is_err() { // Empty message. return Ok(PacketPile::from(Vec::new())); } @@ -414,7 +414,7 @@ impl<'a> TryFrom> for PacketPile { container.children_mut().unwrap().push(packet); - if ppr.is_none() { + if ppr.is_err() { break 'outer; } @@ -561,7 +561,7 @@ mod test { .try_into().unwrap(); let mut ppr = ppp.recurse().unwrap(); - while ppr.is_some() { + while ppr.is_ok() { ppr = ppp.recurse().unwrap(); } let pile = ppp.finish(); @@ -576,7 +576,7 @@ mod test { .try_into().unwrap(); let mut ppr = ppp.recurse().unwrap(); - while let Some(pp) = ppr.as_mut() { + while let Ok(pp) = ppr.as_mut() { eprintln!("{:?}", pp); ppr = ppp.recurse().unwrap(); } @@ -620,13 +620,13 @@ mod test { let mut count = 0; loop { - if let PacketParserResult::Some(pp2) = ppr { + if let Ok(pp2) = ppr { count += 1; let packet_depth = pp2.recursion_depth(); let pp2 = pp2.recurse().unwrap().1; assert_eq!(packet_depth, count - 1); - if pp2.is_some() { + if pp2.is_ok() { assert_eq!(pp2.as_ref().unwrap().recursion_depth(), count); } ppr = pp2; @@ -664,7 +664,7 @@ mod test { // recurse should now not recurse. Since there is nothing // following the compressed packet, ppr should be EOF. let (packet, ppr) = pp.next().unwrap(); - assert!(ppr.is_none()); + assert!(ppr.is_err()); // Get the rest of the content and put the initial byte that // we stole back. @@ -680,7 +680,7 @@ mod test { // And we're done... let ppr = pp.next().unwrap().1; - assert!(ppr.is_none()); + assert!(ppr.is_err()); } #[test] diff --git a/openpgp/src/parse.rs b/openpgp/src/parse.rs index c8c42a29..fb556ad2 100644 --- a/openpgp/src/parse.rs +++ b/openpgp/src/parse.rs @@ -212,13 +212,13 @@ macro_rules! impl_parse_generic_packet { pp.buffer_unread_content()?; match pp.next()? { - (Packet::$typ(o), PacketParserResult::EOF(_)) + (Packet::$typ(o), Err(_)) => Ok(o), - (p, PacketParserResult::EOF(_)) => + (p, Err(_)) => Err(Error::InvalidOperation( format!("Not a {} packet: {:?}", stringify!($typ), p)).into()), - (_, PacketParserResult::Some(_)) => + (_, Ok(_)) => Err(Error::InvalidOperation( "Excess data after packet".into()).into()), } @@ -1821,7 +1821,7 @@ fn one_pass_sig_test () { let mut one_pass_sigs = 0; let mut sigs = 0; - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { if let Packet::OnePassSig(_) = pp.packet { one_pass_sigs += 1; } else if let Packet::Signature(ref sig) = pp.packet { @@ -2065,14 +2065,14 @@ impl<'a> Parse<'a, key::UnspecifiedKey> for key::UnspecifiedKey { pp.buffer_unread_content()?; match pp.next()? { - (Packet::PublicKey(o), PacketParserResult::EOF(_)) => Ok(o.into()), - (Packet::PublicSubkey(o), PacketParserResult::EOF(_)) => Ok(o.into()), - (Packet::SecretKey(o), PacketParserResult::EOF(_)) => Ok(o.into()), - (Packet::SecretSubkey(o), PacketParserResult::EOF(_)) => Ok(o.into()), - (p, PacketParserResult::EOF(_)) => + (Packet::PublicKey(o), Err(_)) => Ok(o.into()), + (Packet::PublicSubkey(o), Err(_)) => Ok(o.into()), + (Packet::SecretKey(o), Err(_)) => Ok(o.into()), + (Packet::SecretSubkey(o), Err(_)) => Ok(o.into()), + (p, Err(_)) => Err(Error::InvalidOperation( format!("Not a Key packet: {:?}", p)).into()), - (_, PacketParserResult::Some(_)) => + (_, Ok(_)) => Err(Error::InvalidOperation( "Excess data after packet".into()).into()), } @@ -2331,7 +2331,7 @@ fn compressed_data_parser_test () { } // And, we're done... - assert!(ppr.is_none()); + assert!(ppr.is_err()); } } @@ -2673,18 +2673,18 @@ impl<'a> Parse<'a, Packet> for Packet { ?.buffer_unread_content().build()?; let (p, ppr) = match ppr { - PacketParserResult::Some(pp) => { + Ok(pp) => { pp.next()? }, - PacketParserResult::EOF(_) => + Err(_) => return Err(Error::InvalidOperation( "Unexpected EOF".into()).into()), }; match (p, ppr) { - (p, PacketParserResult::EOF(_)) => + (p, Err(_)) => Ok(p), - (_, PacketParserResult::Some(_)) => + (_, Ok(_)) => Err(Error::InvalidOperation( "Excess data after packet".into()).into()), } @@ -2754,12 +2754,12 @@ impl PacketParserState { /// # extern crate sequoia_openpgp as openpgp; /// # use openpgp::Result; /// # use openpgp::Packet; -/// # use openpgp::parse::{Parse, PacketParserResult, PacketParser}; +/// # use openpgp::parse::{Parse, PacketParser}; /// # let _ = f(include_bytes!("../tests/data/keys/public-key.gpg")); /// # /// # fn f(message_data: &[u8]) -> Result<()> { /// let mut ppr = PacketParser::from_bytes(message_data)?; -/// while let PacketParserResult::Some(mut pp) = ppr { +/// while let Ok(mut pp) = ppr { /// // Process the packet. /// /// if let Packet::Literal(_) = pp.packet { @@ -2916,90 +2916,21 @@ impl PacketParserEOF { /// We don't use an `Option`, because when we reach the end of the /// packet sequence, some information about the message needs to /// remain accessible. -#[derive(Debug)] -pub enum PacketParserResult<'a> { - /// A `PacketParser` for the next packet. - Some(PacketParser<'a>), - /// Information about a fully parsed packet sequence. - EOF(PacketParserEOF), -} - -impl<'a> PacketParserResult<'a> { - /// Like `Option::is_none`(). - pub fn is_none(&self) -> bool { - if let PacketParserResult::EOF(_) = self { - true - } else { - false - } - } - - /// An alias for `is_none`(). - pub fn is_eof(&self) -> bool { - Self::is_none(self) - } - - /// Like `Option::is_some`(). - pub fn is_some(&self) -> bool { - ! Self::is_none(self) - } - - /// Like `Option::expect`(). - pub fn expect(self, msg: &str) -> PacketParser<'a> { - if let PacketParserResult::Some(pp) = self { - return pp; - } else { - panic!("{}", msg); - } - } - - /// Like `Option::unwrap`(). - pub fn unwrap(self) -> PacketParser<'a> { - self.expect("called `PacketParserResult::unwrap()` on a \ - `PacketParserResult::PacketParserEOF` value") - } +pub type PacketParserResult<'a> = + std::result::Result, PacketParserEOF>; - /// Like `Option::as_ref`(). - pub fn as_ref(&self) -> Option<&PacketParser<'a>> { - if let PacketParserResult::Some(ref pp) = self { - Some(pp) - } else { - None - } - } - - /// Like `Option::as_mut`(). - pub fn as_mut(&mut self) -> Option<&mut PacketParser<'a>> { - if let PacketParserResult::Some(ref mut pp) = self { - Some(pp) - } else { - None - } - } - - /// Like `Option::take`(). - /// - /// `self` is replaced with a `PacketParserEOF` with default - /// values. - pub fn take(&mut self) -> Self { - mem::replace( - self, - PacketParserResult::EOF( - PacketParserEOF::new( - PacketParserState::new(Default::default())))) - } - - /// Like `Option::map`(). - pub fn map(self, f: F) -> Option - where F: FnOnce(PacketParser<'a>) -> U - { - match self { - PacketParserResult::Some(x) => Some(f(x)), - PacketParserResult::EOF(_) => None, - } - } +/// Like `Option::take`() for PacketParserResult. +/// +/// `self` is replaced with a `PacketParserEOF` with default values. +fn packet_parser_result_take<'a>(ppr: &mut PacketParserResult<'a>) + -> PacketParserResult<'a> { + mem::replace( + ppr, + Err(PacketParserEOF::new( + PacketParserState::new(Default::default())))) } + impl<'a> Parse<'a, PacketParserResult<'a>> for PacketParser<'a> { /// Starts parsing an OpenPGP message stored in a `std::io::Read` object. /// @@ -3533,7 +3464,7 @@ impl <'a> PacketParser<'a> { let mut eof = PacketParserEOF::new(state_); eof.last_path = self.last_path; return Ok((self.packet, - PacketParserResult::EOF(eof))); + Err(eof))); } else { self.state = state_; self.finish()?; @@ -3556,7 +3487,7 @@ impl <'a> PacketParser<'a> { pp.last_path = self.last_path; - return Ok((self.packet, PacketParserResult::Some(pp))); + return Ok((self.packet, Ok(pp))); } } } @@ -3626,7 +3557,7 @@ impl <'a> PacketParser<'a> { pp.last_path = last_path; return Ok((self.packet, - PacketParserResult::Some(pp))); + Ok(pp))); }, ParserResult::EOF(_) => { return Err(Error::MalformedPacket( @@ -3667,13 +3598,13 @@ impl <'a> PacketParser<'a> { /// # extern crate sequoia_openpgp as openpgp; /// # use openpgp::Result; /// # use openpgp::Packet; - /// # use openpgp::parse::{Parse, PacketParserResult, PacketParser}; + /// # use openpgp::parse::{Parse, PacketParser}; /// # use std::string::String; /// # f(include_bytes!("../tests/data/messages/literal-mode-t-partial-body.gpg")); /// # /// # fn f(message_data: &[u8]) -> Result<()> { /// let mut ppr = PacketParser::from_bytes(message_data)?; - /// while let PacketParserResult::Some(mut pp) = ppr { + /// while let Ok(mut pp) = ppr { /// // Process the packet. /// /// if let Packet::Literal(_) = pp.packet { @@ -4019,7 +3950,7 @@ fn packet_parser_reader_interface() { // Make sure we can still get the next packet (which in this case // is just EOF). let (packet, ppr) = pp.recurse().unwrap(); - assert!(ppr.is_none()); + assert!(ppr.is_err()); // Since we read all of the data, we expect content to be None. assert_eq!(packet.unprocessed_body().unwrap().len(), 0); } @@ -4353,11 +4284,11 @@ mod test { ppr = ppr.unwrap().recurse().unwrap().1; } - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { let tag = pp.packet.tag(); for t in keep.iter() { if *t == tag { - return PacketParserResult::Some(pp); + return Ok(pp); } } @@ -4401,7 +4332,7 @@ mod test { let mut ppr = consume_until( ppr, false, &[ Tag::SEIP, Tag::AED ][..], &[ Tag::SKESK, Tag::PKESK ][..] ); - if let PacketParserResult::Some(ref mut pp) = ppr { + if let Ok(ref mut pp) = ppr { let key = crate::fmt::from_hex(test.key_hex, false) .unwrap().into(); @@ -4413,7 +4344,7 @@ mod test { let mut ppr = consume_until( ppr, true, &[ Tag::Literal ][..], &[ Tag::OnePassSig, Tag::CompressedData ][..]); - if let PacketParserResult::Some(ref mut pp) = ppr { + if let Ok(ref mut pp) = ppr { if stream { let mut body = Vec::new(); loop { @@ -4442,20 +4373,20 @@ mod test { let ppr = consume_until( ppr, true, &[ Tag::MDC ][..], &[ Tag::Signature ][..]); - if let PacketParserResult::Some( + if let Ok( PacketParser { packet: Packet::MDC(ref mdc), .. }) = ppr { assert_eq!(mdc.computed_digest(), mdc.digest(), "MDC doesn't match"); } - if ppr.is_none() { + if ppr.is_err() { // AED packets don't have an MDC packet. continue; } let ppr = consume_until( ppr, true, &[][..], &[][..]); - assert!(ppr.is_none()); + assert!(ppr.is_err()); } } @@ -4469,7 +4400,7 @@ mod test { // Make sure we actually decrypted... let mut saw_literal = false; - while let PacketParserResult::Some(mut pp) = ppr { + while let Ok(mut pp) = ppr { assert!(pp.possible_message().is_ok()); match pp.packet { @@ -4488,7 +4419,7 @@ mod test { ppr = pp.recurse().unwrap().1; } assert!(saw_literal); - if let PacketParserResult::EOF(eof) = ppr { + if let Err(eof) = ppr { assert!(eof.is_message().is_ok()); } else { unreachable!(); @@ -4510,11 +4441,11 @@ mod test { .build() .expect(&format!("Error reading {:?}", test)); - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { assert!(pp.possible_keyring().is_ok()); ppr = pp.recurse().unwrap().1; } - if let PacketParserResult::EOF(eof) = ppr { + if let Err(eof) = ppr { assert!(eof.is_keyring().is_ok()); assert!(eof.is_cert().is_err()); } else { @@ -4535,12 +4466,12 @@ mod test { .build() .expect(&format!("Error reading {:?}", test)); - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { assert!(pp.possible_keyring().is_ok()); assert!(pp.possible_cert().is_ok()); ppr = pp.recurse().unwrap().1; } - if let PacketParserResult::EOF(eof) = ppr { + if let Err(eof) = ppr { assert!(eof.is_keyring().is_ok()); assert!(eof.is_cert().is_ok()); } else { @@ -4560,7 +4491,7 @@ mod test { .expect(&format!("Error reading {}", test.filename)[..]); let mut saw_literal = false; - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { assert!(pp.possible_message().is_ok()); match pp.packet { @@ -4574,7 +4505,7 @@ mod test { ppr = pp.recurse().unwrap().1; } assert!(! saw_literal); - if let PacketParserResult::EOF(eof) = ppr { + if let Err(eof) = ppr { eprintln!("eof: {:?}; message: {:?}", eof, eof.is_message()); assert!(eof.is_message().is_ok()); } else { @@ -4599,7 +4530,7 @@ mod test { // We pop from the end. paths.reverse(); - while let PacketParserResult::Some(mut pp) = ppr { + while let Ok(mut pp) = ppr { let path = paths.pop().expect("Message longer than expect"); assert_eq!(path.0, pp.packet.tag()); assert_eq!(path.1, pp.path()); @@ -4626,7 +4557,7 @@ mod test { "Message shorter than expected (expecting: {:?})", paths); - if let PacketParserResult::EOF(eof) = ppr { + if let Err(eof) = ppr { assert_eq!(last_path, eof.last_path()); } else { panic!("Expect an EOF"); @@ -4650,7 +4581,7 @@ mod test { let mut userids = 0; let mut uas = 0; let mut unknown = 0; - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { match pp.packet { Packet::Signature(_) => sigs += 1, Packet::PublicSubkey(_) => subkeys += 1, @@ -4682,7 +4613,7 @@ mod test { let ppr = PacketParserBuilder::from_bytes(msg).unwrap() .dearmor(packet_parser_builder::Dearmor::Disabled) .build(); - assert_match!(Ok(PacketParserResult::Some(ref _pp)) = ppr); + assert_match!(Ok(Ok(ref _pp)) = ppr); // Prepend an invalid byte and make sure we fail. Note: we @@ -4709,14 +4640,14 @@ mod test { let ppr = PacketParserBuilder::from_bytes(msg).unwrap() .dearmor(packet_parser_builder::Dearmor::Disabled) .build(); - assert_match!(Ok(PacketParserResult::Some(ref _pp)) = ppr); + assert_match!(Ok(Ok(ref _pp)) = ppr); // Now truncate the packet. let msg2 = &msg[..msg.len() - 1]; let ppr = PacketParserBuilder::from_bytes(msg2).unwrap() .dearmor(packet_parser_builder::Dearmor::Disabled) .build().unwrap(); - if let PacketParserResult::Some(pp) = ppr { + if let Ok(pp) = ppr { let err = pp.next().err().unwrap(); assert_match!(Some(&Error::MalformedPacket(_)) = err.downcast_ref()); @@ -4736,7 +4667,7 @@ mod test { // Make sure we can read it. let ppr = PacketParserBuilder::from_bytes(&buf).unwrap() .build().unwrap(); - if let PacketParserResult::Some(pp) = ppr { + if let Ok(pp) = ppr { assert_eq!(Packet::UserID("foobar".into()), pp.packet); } else { panic!("failed to parse userid"); @@ -4747,7 +4678,7 @@ mod test { let ppr = PacketParserBuilder::from_bytes(&buf).unwrap() .max_packet_size(5) .build().unwrap(); - if let PacketParserResult::Some(pp) = ppr { + if let Ok(pp) = ppr { if let Packet::Unknown(ref u) = pp.packet { assert_eq!(u.tag(), Tag::UserID); assert_match!(Some(&Error::PacketTooLarge(_, _, _)) diff --git a/openpgp/src/parse/packet_parser_builder.rs b/openpgp/src/parse/packet_parser_builder.rs index f22469bd..93bf20eb 100644 --- a/openpgp/src/parse/packet_parser_builder.rs +++ b/openpgp/src/parse/packet_parser_builder.rs @@ -208,11 +208,11 @@ impl<'a> PacketParserBuilder<'a> { pp.state.message_validator.push(pp.packet.tag(), &[0]); pp.state.keyring_validator.push(pp.packet.tag()); pp.state.cert_validator.push(pp.packet.tag()); - Ok(PacketParserResult::Some(pp)) + Ok(Ok(pp)) }, ParserResult::EOF((_reader, state, _path)) => { // `bio` is empty. We're done. - Ok(PacketParserResult::EOF(PacketParserEOF::new(state))) + Ok(Err(PacketParserEOF::new(state))) } } } @@ -231,12 +231,12 @@ mod tests { let ppr = PacketParserBuilder::from_bytes(msg).unwrap() .dearmor(Dearmor::Disabled) .build(); - assert_match!(Ok(PacketParserResult::Some(ref _pp)) = ppr); + assert_match!(Ok(Ok(ref _pp)) = ppr); let ppr = PacketParserBuilder::from_bytes(msg).unwrap() .dearmor(Dearmor::Auto(Default::default())) .build(); - assert_match!(Ok(PacketParserResult::Some(ref _pp)) = ppr); + assert_match!(Ok(Ok(ref _pp)) = ppr); let ppr = PacketParserBuilder::from_bytes(msg).unwrap() .dearmor(Dearmor::Enabled(Default::default())) @@ -255,11 +255,11 @@ mod tests { let ppr = PacketParserBuilder::from_bytes(msg).unwrap() .dearmor(Dearmor::Auto(Default::default())) .build(); - assert_match!(Ok(PacketParserResult::Some(ref _pp)) = ppr); + assert_match!(Ok(Ok(ref _pp)) = ppr); let ppr = PacketParserBuilder::from_bytes(msg).unwrap() .dearmor(Dearmor::Enabled(Default::default())) .build(); - assert_match!(Ok(PacketParserResult::Some(ref _pp)) = ppr); + assert_match!(Ok(Ok(ref _pp)) = ppr); } } diff --git a/openpgp/src/parse/packet_pile_parser.rs b/openpgp/src/parse/packet_pile_parser.rs index b0a7b97b..170b451b 100644 --- a/openpgp/src/parse/packet_pile_parser.rs +++ b/openpgp/src/parse/packet_pile_parser.rs @@ -45,7 +45,7 @@ use buffered_reader::BufferedReader; /// # fn f(message_data: &[u8]) -> Result<()> { /// let mut ppp = PacketPileParser::from_bytes(message_data)?; /// let mut ppr = ppp.recurse()?; -/// while let Some(pp) = ppr.as_ref() { +/// while let Ok(pp) = ppr.as_ref() { /// eprintln!("{:?}", pp); /// ppr = ppp.recurse()?; /// } @@ -158,8 +158,8 @@ impl<'a> PacketPileParser<'a> { /// it returns the following packet. pub fn recurse(&mut self) -> Result<&mut PacketParserResult<'a>> { if self.returned_first { - match self.ppr.take() { - PacketParserResult::Some(pp) => { + match super::packet_parser_result_take(&mut self.ppr) { + Ok(pp) => { let recursion_depth = pp.recursion_depth(); let (packet, ppr) = pp.recurse()?; self.insert_packet( @@ -167,7 +167,7 @@ impl<'a> PacketPileParser<'a> { recursion_depth as isize); self.ppr = ppr; } - eof @ PacketParserResult::EOF(_) => { + eof @ Err(_) => { self.ppr = eof; } } @@ -188,8 +188,8 @@ impl<'a> PacketPileParser<'a> { /// container; it skips any packets that it may contain. pub fn next(&mut self) -> Result<&mut PacketParserResult<'a>> { if self.returned_first { - match self.ppr.take() { - PacketParserResult::Some(pp) => { + match super::packet_parser_result_take(&mut self.ppr) { + Ok(pp) => { let recursion_depth = pp.recursion_depth(); let (packet, ppr) = pp.next()?; self.insert_packet( @@ -197,7 +197,7 @@ impl<'a> PacketPileParser<'a> { recursion_depth as isize); self.ppr = ppr; }, - eof @ PacketParserResult::EOF(_) => { + eof @ Err(_) => { self.ppr = eof }, } @@ -213,7 +213,7 @@ impl<'a> PacketPileParser<'a> { /// A top-level packet has a recursion depth of 0. Packets in a /// top-level container have a recursion depth of 1. Etc. pub fn recursion_depth(&self) -> Option { - if let PacketParserResult::Some(ref pp) = self.ppr { + if let Ok(ref pp) = self.ppr { Some(pp.recursion_depth() as u8) } else { None @@ -222,7 +222,7 @@ impl<'a> PacketPileParser<'a> { /// Returns whether the message has been completely parsed. pub fn is_done(&self) -> bool { - self.ppr.is_none() + self.ppr.is_err() } /// Finishes parsing the message and returns the assembled @@ -245,7 +245,7 @@ fn test_recurse() -> Result<()> { let mut ppp = PacketPileParser::from_bytes(crate::tests::key("public-key.gpg"))?; let mut ppr = ppp.recurse().unwrap(); - while ppr.is_some() { + while ppr.is_ok() { count += 1; ppr = ppp.recurse().unwrap(); } @@ -259,7 +259,7 @@ fn test_next() -> Result<()> { let mut ppp = PacketPileParser::from_bytes(crate::tests::key("public-key.gpg"))?; let mut ppr = ppp.recurse().unwrap(); - while ppr.is_some() { + while ppr.is_ok() { count += 1; ppr = ppp.next().unwrap(); } @@ -282,7 +282,7 @@ fn message_parser_reader_interface() { crate::tests::message("compressed-data-algo-1.gpg")).unwrap(); let mut count = 0; let mut ppr = ppp.recurse().unwrap(); - while let Some(pp) = ppr.as_mut() { + while let Ok(pp) = ppr.as_mut() { count += 1; if let Packet::Literal(_) = pp.packet { assert_eq!(count, 2); diff --git a/openpgp/src/parse/stream.rs b/openpgp/src/parse/stream.rs index 9ae3a1ea..3e034b27 100644 --- a/openpgp/src/parse/stream.rs +++ b/openpgp/src/parse/stream.rs @@ -1092,7 +1092,7 @@ impl<'a, H: VerificationHelper + DecryptionHelper> Decryptor<'a, H> { let mut skesks: Vec = Vec::new(); let mut saw_content = false; - while let PacketParserResult::Some(mut pp) = ppr { + while let Ok(mut pp) = ppr { v.policy.packet(&pp.packet)?; v.helper.inspect(&pp)?; @@ -1165,7 +1165,7 @@ impl<'a, H: VerificationHelper + DecryptionHelper> Decryptor<'a, H> { v.structure.insert_missing_signature_group(); // Query keys. v.certs = v.helper.get_certs(&issuers)?; - v.oppr = Some(PacketParserResult::Some(pp)); + v.oppr = Some(Ok(pp)); v.finish_maybe()?; return Ok(v); @@ -1270,7 +1270,7 @@ impl<'a, H: VerificationHelper + DecryptionHelper> Decryptor<'a, H> { // // Note: once this call succeeds, you may not call it again. fn finish_maybe(&mut self) -> Result<()> { - if let Some(PacketParserResult::Some(mut pp)) = self.oppr.take() { + if let Some(Ok(mut pp)) = self.oppr.take() { // Check if we hit EOF. let data_len = pp.data(BUFFER_SIZE + 1)?.len(); if data_len <= BUFFER_SIZE { @@ -1279,9 +1279,9 @@ impl<'a, H: VerificationHelper + DecryptionHelper> Decryptor<'a, H> { self.cursor = 0; // Process the rest of the packets. - let mut ppr = PacketParserResult::Some(pp); + let mut ppr = Ok(pp); let mut first = true; - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { // The literal data packet was already inspected. if first { assert_eq!(pp.packet.tag(), packet::Tag::Literal); @@ -1309,7 +1309,7 @@ impl<'a, H: VerificationHelper + DecryptionHelper> Decryptor<'a, H> { self.verify_signatures() } else { - self.oppr = Some(PacketParserResult::Some(pp)); + self.oppr = Some(Ok(pp)); Ok(()) } } else { @@ -1524,18 +1524,18 @@ impl<'a, H: VerificationHelper + DecryptionHelper> Decryptor<'a, H> { } // Read the data from the Literal data packet. - if let Some(PacketParserResult::Some(mut pp)) = self.oppr.take() { + if let Some(Ok(mut pp)) = self.oppr.take() { // Be careful to not read from the reserve. let data_len = pp.data(BUFFER_SIZE + buf.len())?.len(); if data_len <= BUFFER_SIZE { - self.oppr = Some(PacketParserResult::Some(pp)); + self.oppr = Some(Ok(pp)); self.finish_maybe()?; self.read_helper(buf) } else { let n = cmp::min(buf.len(), data_len - BUFFER_SIZE); let buf = &mut buf[..n]; let result = pp.read(buf); - self.oppr = Some(PacketParserResult::Some(pp)); + self.oppr = Some(Ok(pp)); Ok(result?) } } else { diff --git a/openpgp/src/serialize/stream.rs b/openpgp/src/serialize/stream.rs index 856914b3..8b284274 100644 --- a/openpgp/src/serialize/stream.rs +++ b/openpgp/src/serialize/stream.rs @@ -2386,7 +2386,7 @@ impl<'a> writer::Stackable<'a, Cookie> for Encryptor<'a> { mod test { use std::io::Read; use crate::{Packet, PacketPile, packet::CompressedData}; - use crate::parse::{Parse, PacketParserResult, PacketParser}; + use crate::parse::{Parse, PacketParser}; use super::*; use crate::types::DataFormat::Text as T; use crate::policy::Policy; @@ -2419,7 +2419,7 @@ mod test { // Make sure it is the only packet. let (_, ppr) = pp.recurse().unwrap(); - assert!(ppr.is_none()); + assert!(ppr.is_err()); } // Create some crazy nesting structures, serialize the messages, @@ -2594,7 +2594,7 @@ mod test { let mut ppr = PacketParser::from_bytes(&o).unwrap(); let mut good = 0; - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { if let Packet::Signature(ref sig) = pp.packet { let key = keys.get(&sig.issuer_fingerprint().unwrap()) .unwrap(); @@ -2639,7 +2639,7 @@ mod test { for password in &passwords { let mut state = State::Start; let mut ppr = PacketParser::from_bytes(&o).unwrap(); - while let PacketParserResult::Some(mut pp) = ppr { + while let Ok(mut pp) = ppr { state = match state { // Look for the SKESK packet. State::Start => @@ -2916,7 +2916,7 @@ mod test { let mut ppr = PacketParser::from_bytes(&o).unwrap(); let mut good = 0; - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { if let Packet::Signature(ref sig) = pp.packet { assert_eq!(sig.signature_creation_time(), Some(timestamp)); sig.verify(ka.key()).unwrap(); diff --git a/openpgp/tests/for-each-artifact.rs b/openpgp/tests/for-each-artifact.rs index b45364ea..757b1c79 100644 --- a/openpgp/tests/for-each-artifact.rs +++ b/openpgp/tests/for-each-artifact.rs @@ -177,7 +177,7 @@ fn for_all_packets(src: &Path, mut fun: F) -> openpgp::Result<()> return Ok(()); }; - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { match pp.recurse() { Ok((packet, ppr_)) => { ppr = ppr_; diff --git a/tool/src/commands/decrypt.rs b/tool/src/commands/decrypt.rs index ddfa2a5c..b6d27aa2 100644 --- a/tool/src/commands/decrypt.rs +++ b/tool/src/commands/decrypt.rs @@ -15,8 +15,7 @@ use crate::openpgp::packet::prelude::*; use crate::openpgp::parse::{ Parse, PacketParser, - PacketParserResult, -}; + }; use crate::openpgp::parse::stream::{ VerificationHelper, DecryptionHelper, Decryptor, MessageStructure, }; @@ -312,7 +311,7 @@ pub fn decrypt_unwrap(ctx: &Context, policy: &dyn Policy, let mut pkesks: Vec = Vec::new(); let mut skesks: Vec = Vec::new(); - while let PacketParserResult::Some(mut pp) = ppr { + while let Ok(mut pp) = ppr { let sym_algo_hint = if let Packet::AED(ref aed) = pp.packet { Some(aed.symmetric_algo()) } else { diff --git a/tool/src/commands/dump.rs b/tool/src/commands/dump.rs index 53c84fd6..8156f853 100644 --- a/tool/src/commands/dump.rs +++ b/tool/src/commands/dump.rs @@ -10,7 +10,7 @@ use self::openpgp::packet::header::CTB; use self::openpgp::packet::{Header, header::BodyLength, Signature}; use self::openpgp::packet::signature::subpacket::{Subpacket, SubpacketValue}; use self::openpgp::crypto::{SessionKey, S2K}; -use self::openpgp::parse::{map::Map, Parse, PacketParserResult}; +use self::openpgp::parse::{map::Map, Parse}; #[derive(Debug)] pub enum Kind { @@ -65,7 +65,7 @@ pub fn dump(input: &mut dyn io::Read, output: &mut dyn io::Write, let width = width.into().unwrap_or(80); let mut dumper = PacketDumper::new(width, mpis); - while let PacketParserResult::Some(mut pp) = ppr { + while let Ok(mut pp) = ppr { let additional_fields = match pp.packet { Packet::Literal(_) => { let mut prefix = vec![0; 40]; @@ -147,7 +147,7 @@ pub fn dump(input: &mut dyn io::Read, output: &mut dyn io::Write, dumper.flush(output)?; - if let PacketParserResult::EOF(eof) = ppr { + if let Err(eof) = ppr { if eof.is_message().is_ok() { Ok(Kind::Message { encrypted: message_encrypted, diff --git a/tool/src/commands/inspect.rs b/tool/src/commands/inspect.rs index 43e3d262..ff0b2571 100644 --- a/tool/src/commands/inspect.rs +++ b/tool/src/commands/inspect.rs @@ -6,7 +6,7 @@ extern crate sequoia_openpgp as openpgp; use crate::openpgp::{Packet, Result}; use crate::openpgp::cert::prelude::*; use openpgp::packet::key::PublicParts; -use crate::openpgp::parse::{Parse, PacketParserResult}; +use crate::openpgp::parse::Parse; use crate::openpgp::policy::Policy; use super::dump::Convert; @@ -30,7 +30,7 @@ pub fn inspect(m: &clap::ArgMatches, policy: &dyn Policy, output: &mut dyn io::W let mut ppr = openpgp::parse::PacketParser::from_reader(crate::open_or_stdin(input)?)?; - while let PacketParserResult::Some(mut pp) = ppr { + while let Ok(mut pp) = ppr { match pp.packet { Packet::PublicKey(_) | Packet::SecretKey(_) => { if pp.possible_cert().is_err() @@ -73,7 +73,7 @@ pub fn inspect(m: &clap::ArgMatches, policy: &dyn Policy, output: &mut dyn io::W } } - if let PacketParserResult::EOF(eof) = ppr { + if let Err(eof) = ppr { let is_message = eof.is_message(); let is_cert = eof.is_cert(); let is_keyring = eof.is_keyring(); diff --git a/tool/src/commands/mod.rs b/tool/src/commands/mod.rs index fa8ed857..71f7aa85 100644 --- a/tool/src/commands/mod.rs +++ b/tool/src/commands/mod.rs @@ -426,7 +426,7 @@ pub fn split(input: &mut dyn io::Read, prefix: &str) // This encodes our position in the tree. let mut pos = vec![0]; - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { if let Some(ref map) = pp.map() { let filename = format!( "{}{}--{}{:?}", prefix, @@ -445,7 +445,7 @@ pub fn split(input: &mut dyn io::Read, prefix: &str) let old_depth = Some(pp.recursion_depth()); ppr = pp.recurse()?.1; - let new_depth = ppr.as_ref().map(|pp| pp.recursion_depth()); + let new_depth = ppr.as_ref().ok().map(|pp| pp.recursion_depth()); // Update pos. match old_depth.cmp(&new_depth) { @@ -468,7 +468,7 @@ pub fn join(inputs: Option, output: &mut dyn io::Write) /// OUTPUT. fn copy(mut ppr: PacketParserResult, output: &mut dyn io::Write) -> Result<()> { - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { // We (ab)use the mapping feature to create byte-accurate // copies. for field in pp.map().expect("must be mapped").iter() { diff --git a/tool/src/commands/sign.rs b/tool/src/commands/sign.rs index 9a8e6819..3996a3ba 100644 --- a/tool/src/commands/sign.rs +++ b/tool/src/commands/sign.rs @@ -11,7 +11,6 @@ use crate::openpgp::{Packet, Result}; use crate::openpgp::packet::Signature; use crate::openpgp::parse::{ Parse, - PacketParserResult, }; use crate::openpgp::serialize::Serialize; use crate::openpgp::serialize::stream::{ @@ -53,7 +52,7 @@ fn sign_data(policy: &dyn Policy, let mut ppr = openpgp::parse::PacketParser::from_file(output_path.unwrap())?; - while let PacketParserResult::Some(pp) = ppr { + while let Ok(pp) = ppr { let (packet, ppr_tmp) = pp.recurse()?; ppr = ppr_tmp; @@ -198,7 +197,7 @@ fn sign_message_(policy: &dyn Policy, State::AfterFirstSigGroup }; - while let PacketParserResult::Some(mut pp) = ppr { + while let Ok(mut pp) = ppr { if let Err(err) = pp.possible_message() { return Err(err.context("Malformed OpenPGP message").into()); } @@ -330,7 +329,7 @@ fn sign_message_(policy: &dyn Policy, } } - if let PacketParserResult::EOF(eof) = ppr { + if let Err(eof) = ppr { if let Err(err) = eof.is_message() { return Err(err.context("Malformed OpenPGP message").into()); } -- cgit v1.2.3