[][src]Struct sequoia_openpgp::TPK

pub struct TPK { /* fields omitted */ }

A transferable public key (TPK).

A TPK (see RFC 4880, section 11.1) can be used to verify signatures and encrypt data. It can be stored in a keystore and uploaded to keyservers.

TPKs are always canonicalized in the sense that only elements (user id, user attribute, subkey) with at least one valid self-signature are preserved. Also, invalid self-signatures are dropped. The self-signatures are sorted so that the newest self-signature comes first. User IDs are sorted so that the first UserID is the primary User ID. Third-party certifications are not validated, as the keys are not available; they are simply passed through as is.

Example

use openpgp::TPK;

match TPK::from_packet_parser(ppr) {
    Ok(tpk) => {
        println!("Key: {}", tpk.primary());
        for binding in tpk.userids() {
            println!("User ID: {}", binding.userid());
        }
    }
    Err(err) => {
        eprintln!("Error parsing TPK: {}", err);
    }
}

Methods

impl TPK[src]

pub fn primary(&self) -> &Key[src]

Returns a reference to the primary key.

pub fn primary_key_signature_full(
    &self
) -> Option<(Option<&UserIDBinding>, &Signature)>
[src]

Returns the primary key's current self-signature and, if it belong to a user id, a reference to the UserIDBinding.

Normally, the primary key's current self-signature is the primary user id's newest, non-revoked self-signature. However, if all user ids are revoked and there is a direct signature, that is returned. If there is no direct signature, then we return the newest self-signature on the most recently revoked user id (i.e., the binding signature that was last valid). If there are no user ids at all and no direct signatures, then we return None.

pub fn primary_key_signature(&self) -> Option<&Signature>[src]

Returns the primary key's current self-signature.

This function is identical to TPK::primary_key_signature_full(), but it doesn't return the UserIDBinding.

pub fn revoked(&self) -> RevocationStatus[src]

Returns the TPK's revocation status.

Note: this only returns whether the TPK is revoked. If you want to know whether a subkey, user id, etc., is revoked, then you need to query them separately.

pub fn revoke(
    &self,
    code: ReasonForRevocation,
    reason: &[u8]
) -> Result<Signature>
[src]

Returns a revocation certificate for the TPK.

pub fn revoke_in_place(
    self,
    code: ReasonForRevocation,
    reason: &[u8]
) -> Result<TPK>
[src]

Revokes the TPK.

pub fn expired(&self) -> bool[src]

Returns whether or not the TPK has expired.

pub fn expired_at(&self, tm: Tm) -> bool[src]

Returns whether or not the key is expired at the given time.

pub fn set_expiry(self, expiration: Option<Duration>) -> Result<TPK>[src]

Sets the key to expire in delta.

Note: the time is relative to the key's creation time, not the current time!

pub fn set_expiry_in_seconds(self, expiration: u32) -> Result<TPK>[src]

Sets the key to expire in delta seconds.

Note: the time is relative to the key's creation time, not the current time!

Important traits for UserIDBindingIter<'a>
pub fn userids(&self) -> UserIDBindingIter[src]

Returns an iterator over the TPK's valid UserIDBindings.

The primary user id is returned first. A valid UserIDBinding has at least one good self-signature.

Important traits for UserAttributeBindingIter<'a>
pub fn user_attributes(&self) -> UserAttributeBindingIter[src]

Returns an iterator over the TPK's valid UserAttributeBindings.

A valid UserIDAttributeBinding has at least one good self-signature.

Important traits for SubkeyBindingIter<'a>
pub fn subkeys(&self) -> SubkeyBindingIter[src]

Returns an iterator over the TPK's valid subkeys.

A valid SubkeyBinding has at least one good self-signature.

Important traits for KeyIter<'a>
pub fn keys(&self) -> KeyIter[src]

Returns an iterator over all of the TPK's valid keys.

That is, this returns an iterator over the primary key and any subkeys, along with the corresponding signatures.

Note: since a primary key is different from a binding, the iterator is over Keys and not SubkeyBindings. Furthermore, the primary key has no binding signature. Here, the signature carrying the primary key's key flags is returned. There are corner cases where no such signature exists (e.g. partial TPKs), therefore this iterator may return None for the primary key's signature.

A valid Key has at least one good self-signature.

pub fn from_packet_parser(ppr: PacketParserResult) -> Result<Self>[src]

Returns the first TPK found in the packet stream.

pub fn from_reader<R: Read>(reader: R) -> Result<Self>[src]

Returns the first TPK encountered in the reader.

pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self>[src]

Returns the first TPK encountered in the file.

pub fn from_packet_pile(p: PacketPile) -> Result<Self>[src]

Returns the first TPK found in the PacketPile.

pub fn from_bytes(buf: &[u8]) -> Result<Self>[src]

Returns the first TPK found in buf.

buf must be an OpenPGP-encoded message.

pub fn fingerprint(&self) -> Fingerprint[src]

Returns the TPK's fingerprint.

pub fn to_packets(self) -> Vec<Packet>[src]

Converts the TPK into a sequence of packets.

This method discards an invalid components and bad signatures.

pub fn to_packet_pile(self) -> PacketPile[src]

Converts the TPK into a PacketPile.

This method discards an invalid components and bad signatures.

pub fn merge(self, other: TPK) -> Result<Self>[src]

Merges other into self.

If other is a different key, then nothing is merged into self, but self is still canonicalized.

pub fn merge_packets(self, packets: &[Packet]) -> Result<Self>[src]

Adds packets to the TPK.

This recanonicalizes the TPK. If the packets are invalid, they are dropped.

pub fn into_tsk(self) -> TSK[src]

Cast the public key into a secret key that allows using the secret parts of the containing keys.

pub fn filter_into_tsk<F: Fn(&Packet) -> bool>(self, f: F) -> Result<TSK>[src]

Cast the public key into a secret key that allows using the secret parts of the containing keys. Only packets for which filter returns true are included in the TSK.

pub fn is_tsk(&self) -> bool[src]

Returns whether at least one of the keys includes a secret part.

Trait Implementations

impl Serialize for TPK[src]

fn serialize<W: Write>(&self, o: &mut W) -> Result<()>[src]

Serializes the TPK.

fn to_vec(&self) -> Result<Vec<u8>>[src]

Serializes the packet to a vector.

impl PartialEq<TPK> for TPK[src]

impl Clone for TPK[src]

fn clone_from(&mut self, source: &Self)
1.0.0
[src]

Performs copy-assignment from source. Read more

impl Display for TPK[src]

impl Debug for TPK[src]

Auto Trait Implementations

impl Send for TPK

impl !Sync for TPK

Blanket Implementations

impl<T> From for T[src]

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.