Struct sequoia_openpgp::message::Message
source · [−]pub struct Message { /* private fields */ }
Expand description
A message.
An OpenPGP message is a structured sequence of OpenPGP packets. Basically, it’s an optionally encrypted, optionally signed literal data packet. The exact structure is defined in Section 11.3 of RFC 4880.
ASCII Armored Messages are wrapped in -----BEGIN PGP MESSAGE-----
header
and -----END PGP MESSAGE-----
tail lines:
-----BEGIN PGP MESSAGE-----
xA0DAAoW5saJekzviSQByxBiAAAAAADYtdiv2KfZgtipwnUEABYKACcFglwJHYoW
IQRnpIdTo4Cms7fffcXmxol6TO+JJAkQ5saJekzviSQAAIJ6APwK6FxtHXn8txDl
tBFsIXlOSLOs4BvArlZzZSMomIyFLAEAwCLJUChMICDxWXRlHxORqU5x6hlO3DdW
sl/1DAbnRgI=
=AqoO
-----END PGP MESSAGE-----
Examples
Creating a Message encrypted with a password.
use std::io::Write;
use openpgp::serialize::stream::{Message, Encryptor, LiteralWriter};
let mut sink = vec![];
let message = Encryptor::with_passwords(
Message::new(&mut sink), Some("ściśle tajne")).build()?;
let mut w = LiteralWriter::new(message).build()?;
w.write_all(b"Hello world.")?;
w.finalize()?;
Implementations
sourceimpl Message
impl Message
sourcepub fn body(&self) -> Option<&Literal>
pub fn body(&self) -> Option<&Literal>
Returns the body of the message.
Returns None
if no literal data packet is found. This
happens if a SEIP container has not been decrypted.
Examples
use std::io;
use std::io::Read;
use openpgp::Message;
use openpgp::armor::{Reader, ReaderMode};
use openpgp::parse::Parse;
let data = "yxJiAAAAAABIZWxsbyB3b3JsZCE="; // base64 over literal data packet
let mut cursor = io::Cursor::new(&data);
let mut reader = Reader::from_reader(&mut cursor, ReaderMode::VeryTolerant);
let mut buf = Vec::new();
reader.read_to_end(&mut buf)?;
let message = Message::from_bytes(&buf)?;
assert_eq!(message.body().unwrap().body(), b"Hello world!");
Methods from Deref<Target = PacketPile>
sourcepub fn pretty_print(&self)
pub fn pretty_print(&self)
Pretty prints the message to stderr.
This function is primarily intended for debugging purposes.
sourcepub fn path_ref(&self, pathspec: &[usize]) -> Option<&Packet>
pub fn path_ref(&self, pathspec: &[usize]) -> Option<&Packet>
Returns a reference to the packet at the location described by
pathspec
.
pathspec
is a slice of the form [0, 1, 2]
. Each element
is the index of packet in a container. Thus, the previous
path specification means: return the third child of the second
child of the first top-level packet. In other words, the
starred packet in the following tree:
PacketPile
/ | \
0 1 2 ...
/ \
/ \
0 1 ...
/ | \ ...
0 1 2
*
And, [10]
means return the 11th top-level packet.
Note: there is no packet at the root. Thus, the path []
returns None.
Examples
let pile = PacketPile::from(packets);
if let Some(packet) = pile.path_ref(&[0]) {
// There is a packet at this path.
}
if let None = pile.path_ref(&[0, 1, 2]) {
// But none here.
}
sourcepub fn descendants(&self) -> Iter<'_>ⓘNotable traits for Iter<'a>impl<'a> Iterator for Iter<'a> type Item = &'a Packet;
pub fn descendants(&self) -> Iter<'_>ⓘNotable traits for Iter<'a>impl<'a> Iterator for Iter<'a> type Item = &'a Packet;
Returns an iterator over all of the packet’s descendants, in depth-first order.
let mut lit = Literal::new(DataFormat::Text);
lit.set_body(b"test".to_vec());
let pile = PacketPile::from(vec![lit.into()]);
for packet in pile.descendants() {
assert_eq!(packet.tag(), Tag::Literal);
}
sourcepub fn children(
&self
) -> impl Iterator<Item = &Packet> + ExactSizeIterator + Send + Sync
pub fn children(
&self
) -> impl Iterator<Item = &Packet> + ExactSizeIterator + Send + Sync
Returns an iterator over the top-level packets.
let mut lit = Literal::new(DataFormat::Text);
lit.set_body(b"test".to_vec());
let pile = PacketPile::from(vec![lit.into()]);
assert_eq!(pile.children().len(), 1);
Trait Implementations
sourceimpl Deref for Message
impl Deref for Message
type Target = PacketPile
type Target = PacketPile
The resulting type after dereferencing.
sourceimpl From<Message> for PacketPile
impl From<Message> for PacketPile
sourceimpl MarshalInto for Message
impl MarshalInto for Message
sourcefn serialized_len(&self) -> usize
fn serialized_len(&self) -> usize
Computes the maximal length of the serialized representation. Read more
sourcefn serialize_into(&self, buf: &mut [u8]) -> Result<usize>
fn serialize_into(&self, buf: &mut [u8]) -> Result<usize>
Serializes into the given buffer. Read more
sourceimpl<'a> Parse<'a, Message> for Message
impl<'a> Parse<'a, Message> for Message
sourcefn from_reader<R: 'a + Read + Send + Sync>(reader: R) -> Result<Self>
fn from_reader<R: 'a + Read + Send + Sync>(reader: R) -> Result<Self>
Reads a Message
from the specified reader.
See Message::try_from
for more details.
sourcefn from_file<P: AsRef<Path>>(path: P) -> Result<Self>
fn from_file<P: AsRef<Path>>(path: P) -> Result<Self>
Reads a Message
from the specified file.
See Message::try_from
for more details.
sourcefn from_bytes<D: AsRef<[u8]> + ?Sized + Send + Sync>(
data: &'a D
) -> Result<Self>
fn from_bytes<D: AsRef<[u8]> + ?Sized + Send + Sync>(
data: &'a D
) -> Result<Self>
Reads a Message
from buf
.
See Message::try_from
for more details.
sourceimpl SerializeInto for Message
impl SerializeInto for Message
sourcefn serialized_len(&self) -> usize
fn serialized_len(&self) -> usize
Computes the maximal length of the serialized representation. Read more
sourcefn serialize_into(&self, buf: &mut [u8]) -> Result<usize>
fn serialize_into(&self, buf: &mut [u8]) -> Result<usize>
Serializes into the given buffer. Read more
sourceimpl TryFrom<PacketPile> for Message
impl TryFrom<PacketPile> for Message
sourcefn try_from(pile: PacketPile) -> Result<Self>
fn try_from(pile: PacketPile) -> Result<Self>
Converts the PacketPile
to a Message
.
Converting a PacketPile
to a Message
doesn’t change the
packets; it asserts that the packet sequence is an optionally
encrypted, optionally signed, optionally compressed literal
data packet. The exact grammar is defined in Section 11.3 of
RFC 4880.
Caveats: this function assumes that any still encrypted parts or still compressed parts are valid messages.
impl StructuralPartialEq for Message
Auto Trait Implementations
impl RefUnwindSafe for Message
impl Send for Message
impl Sync for Message
impl Unpin for Message
impl UnwindSafe for Message
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more