pub struct VerifierLookup<'a> {
index: CertLookup<'a>,
}Expand description
An abstraction over a set of OpenpgpCert, to facilitate signature verification.
It can efficiently look up component keys that are appropriate for attempting validation of specific signatures.
Fields§
§index: CertLookup<'a>Implementations§
Source§impl<'a> VerifierLookup<'a>
impl<'a> VerifierLookup<'a>
Sourceconst CERTIFICATION_SIGNATURE_TYPES: &'static [SignatureType]
const CERTIFICATION_SIGNATURE_TYPES: &'static [SignatureType]
The signature types that we consider meaningful for certifications on identities.
Note that the set excludes SignatureType::CertPersona which is specified to not carry any
meaningful information.
Sourcepub fn new(certs: &'a [OpenpgpCert]) -> Self
pub fn new(certs: &'a [OpenpgpCert]) -> Self
Creates a new VerifierLookup from a list of OpenpgpCerts.
Sourcepub(crate) fn get_matching_verifiers(
&self,
signature: &OpenpgpSignature,
) -> Vec<(SignatureVerifier, &'a OpenpgpCert)>
pub(crate) fn get_matching_verifiers( &self, signature: &OpenpgpSignature, ) -> Vec<(SignatureVerifier, &'a OpenpgpCert)>
Returns a list of [SignatureVerifier] and OpenpgpCert tuples, that are reasonable
candidates for attempting to verify an OpenpgpSignature.
Looks up all component keys that match the IssuerFingerprint and/or Issuer subpackets in
signature, and returns them as [SignatureVerifier] objects.
For informational purposes, each [SignatureVerifier] is accompanied by a reference to the
OpenpgpCert that contains it.
Callers of this function will usually want to validate signature with the returned
[SignatureVerifier]s.
Sourcefn candidate_certs(&self, signature: &Signature) -> Vec<&'a OpenpgpCert>
fn candidate_certs(&self, signature: &Signature) -> Vec<&'a OpenpgpCert>
Returns a list of OpenpgpCerts that match either the
IssuerFingerprint or IssuerKeyId subpackets in a [Signature].
All component keys of each OpenpgpCert are considered when matching against the
IssuerFingerprint and IssuerKeyId subpackets of the signature. The returned
OpenpgpCerts are deduplicated by their primary [Fingerprint].
§Note
The lookup does not enforce any semantics constraints. It does not guarantee validity of certificates or component keys for any particular purpose. Semantics checks must be performed separately, after this lookup.
Sourcefn matches_issuer(
signature: &OpenpgpSignature,
verifier: &SignatureVerifier,
) -> bool
fn matches_issuer( signature: &OpenpgpSignature, verifier: &SignatureVerifier, ) -> bool
Checks if a [SignatureVerifier] matches any IssuerFingerprint or Issuer subpacket in
an OpenpgpSignature.
Sourcepub fn valid_userid_certifications(
&self,
signatures: &[&'a Signature],
target: &OpenpgpCert,
target_user: &UserId,
reference_time: SystemTime,
) -> Vec<(&'a OpenpgpCert, Vec<&'a Signature>)>
pub fn valid_userid_certifications( &self, signatures: &[&'a Signature], target: &OpenpgpCert, target_user: &UserId, reference_time: SystemTime, ) -> Vec<(&'a OpenpgpCert, Vec<&'a Signature>)>
Returns pairs of OpenpgpCert and [Signature]s for third-party UserId certifications.
Filters signatures (a slice of third-party certifications over target and
target_user) by policy, as well as temporal and cryptographic validity (at
reference_time).
The validated signatures are grouped by signer certificate.
§Notes
- A certifying signature must pass [
rpgpie]’s policy checks (i.e. cryptographic mechanisms that are considered weak at signature creation time are rejected). - If a certifying signature has a “signature expiration time” that is after the reference time, that certifying signature is ignored (except for certification revocation signatures, which may not expire).
- The certifying signature may be younger than the data signature that is authenticated.
- The certifying certificate may be younger than the data signature that is authenticated.
Sourcefn lookup_third_party_certifier(
&self,
sig: &Signature,
target: &OpenpgpCert,
target_user: &UserId,
) -> Option<&'a OpenpgpCert>
fn lookup_third_party_certifier( &self, sig: &Signature, target: &OpenpgpCert, target_user: &UserId, ) -> Option<&'a OpenpgpCert>
Returns a matching OpenpgpCert for a third-party certification over a [UserId].
The considered certificate must be cryptographically valid and must have issued sig as a
(third-party) certification over target and target_user.
If a signer is found, a reference to it is returned, otherwise None.
Trait Implementations§
Source§impl<'a> Debug for VerifierLookup<'a>
impl<'a> Debug for VerifierLookup<'a>
Source§impl<'a> FromIterator<&'a OpenpgpCert> for VerifierLookup<'a>
impl<'a> FromIterator<&'a OpenpgpCert> for VerifierLookup<'a>
Source§fn from_iter<T: IntoIterator<Item = &'a OpenpgpCert>>(iter: T) -> Self
fn from_iter<T: IntoIterator<Item = &'a OpenpgpCert>>(iter: T) -> Self
Auto Trait Implementations§
impl<'a> Freeze for VerifierLookup<'a>
impl<'a> RefUnwindSafe for VerifierLookup<'a>
impl<'a> Send for VerifierLookup<'a>
impl<'a> Sync for VerifierLookup<'a>
impl<'a> Unpin for VerifierLookup<'a>
impl<'a> UnwindSafe for VerifierLookup<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.