pub struct CertificateTrustPolicy { /* private fields */ }
Expand description
A CertificateTrustPolicy
is configured with information about trust
anchors, privately-accepted end-entity certificates, and allowed EKUs. It
can be used to evaluate a signing certificate against those policies.
Implementations§
Source§impl CertificateTrustPolicy
impl CertificateTrustPolicy
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new certificate acceptance policy with no preconfigured trust roots.
Use default()
if you want a typical built-in configuration.
Sourcepub fn check_certificate_trust(
&self,
chain_der: &[Vec<u8>],
end_entity_cert_der: &[u8],
signing_time_epoch: Option<i64>,
) -> Result<(), CertificateTrustError>
pub fn check_certificate_trust( &self, chain_der: &[Vec<u8>], end_entity_cert_der: &[u8], signing_time_epoch: Option<i64>, ) -> Result<(), CertificateTrustError>
Evaluate a certificate against the trust policy described by this struct.
Returns Ok(())
if the certificate appears on the end-entity
certificate list or has a valid chain to one of the trust anchors that
was provided and that it has a valid extended key usage (EKU).
If signing_time_epoch
is provided, evaluates the signing time (which
must be in Unix seconds since the epoch) against the certificate’s
period of validity.
Sourcepub async fn check_certificate_trust_async(
&self,
chain_der: &[Vec<u8>],
end_entity_cert_der: &[u8],
signing_time_epoch: Option<i64>,
) -> Result<(), CertificateTrustError>
pub async fn check_certificate_trust_async( &self, chain_der: &[Vec<u8>], end_entity_cert_der: &[u8], signing_time_epoch: Option<i64>, ) -> Result<(), CertificateTrustError>
Evaluate a certificate against the trust policy described by this struct.
Returns Ok(())
if the certificate appears on the end-entity
certificate list or has a valid chain to one of the trust anchors that
was provided and that it has a valid extended key usage (EKU).
If signing_time_epoch
is provided, evaluates the signing time (which
must be in Unix seconds since the epoch) against the certificate’s
period of validity.
Sourcepub fn add_trust_anchors(
&mut self,
trust_anchor_pems: &[u8],
) -> Result<(), InvalidCertificateError>
pub fn add_trust_anchors( &mut self, trust_anchor_pems: &[u8], ) -> Result<(), InvalidCertificateError>
Add trust anchors (root X.509 certificates) that shall be accepted when verifying COSE signatures.
From §14.4.1, C2PA Signers, of the C2PA Technical Specification:
A validator shall maintain the following lists for C2PA signers:
- The list of X.509 certificate trust anchors provided by the C2PA (i.e., the C2PA Trust List).
- A list of additional X.509 certificate trust anchors.
A list of accepted Extended Key Usage (EKU) values.(not relevant for this API)NOTE: Some of these lists can be empty.
In addition to the list of trust anchors provided in the C2PA Trust List, a validator should allow a user to configure additional trust anchor stores, and should provide default options or offer lists maintained by external parties that the user may opt into to populate the validator’s trust anchor store for C2PA signers.
This function reads zero or more X.509 root certificates in PEM format and configures the trust handler to accept certificates that chain up to these trust anchors.
Sourcepub fn add_end_entity_credentials(
&mut self,
end_entity_cert_pems: &[u8],
) -> Result<(), InvalidCertificateError>
pub fn add_end_entity_credentials( &mut self, end_entity_cert_pems: &[u8], ) -> Result<(), InvalidCertificateError>
Add individual end-entity credentials that shall be accepted when verifying COSE signatures.
From §14.4.3, Private Credential Storage, of the C2PA Technical Specification:
A validator may also allow the user to create and maintain a private credential store of signing credentials. This store is intended as an “address book” of credentials they have chosen to trust based on an out-of-band relationship. If present, the private credential store shall only apply to validating signed C2PA manifests, and shall not apply to validating time-stamps. If present, the private credential store shall only allow trust in signer certificates directly; entries in the private credential store cannot issue credentials and shall not be included as trust anchors during validation.
This function reads zero or more X.509 end-entity certificates in PEM format and configures the trust handler to accept those specific certificates, regardless of how they may or may not chain up to other trust anchors.
As an optimization, this function also accepts standalone lines (outside of the X.509 PEM blocks). Each such line must contain a Base-64 encoded SHA_256 hash value over the value of a PEM certificate.
Lines that match neither format (PEM or hash) are ignored.
Sourcepub fn add_valid_ekus(&mut self, eku_oids: &[u8])
pub fn add_valid_ekus(&mut self, eku_oids: &[u8])
Add extended key usage (EKU) values that shall be accepted when verifying COSE signatures.
From §14.4.1, C2PA Signers, of the C2PA Technical Specification:
A validator shall maintain the following lists for C2PA signers:
The list of X.509 certificate trust anchors provided by the C2PA (i.e., the C2PA Trust List).(not relevant for this API)A list of additional X.509 certificate trust anchors.(not relevant for this API)- A list of accepted Extended Key Usage (EKU) values.
NOTE: Some of these lists can be empty.
This function reads zero or more EKU object identifiers (OIDs) in dotted-decimal notation (one per line) and configures the trust handler to accept certificates that are issued with one of those EKUs.
IMPORTANT: The trust configuration will always accept the default set of OIDs descfibed in the C2PA Technical Specification.
This function will quietly ignore any invalid input, such as a non-UTF8 input or lines within the input such as comments or blank lines that can not be parsed as OIDs.
Trait Implementations§
Source§impl Debug for CertificateTrustPolicy
impl Debug for CertificateTrustPolicy
Auto Trait Implementations§
impl Freeze for CertificateTrustPolicy
impl RefUnwindSafe for CertificateTrustPolicy
impl Send for CertificateTrustPolicy
impl Sync for CertificateTrustPolicy
impl Unpin for CertificateTrustPolicy
impl UnwindSafe for CertificateTrustPolicy
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§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 moreSource§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 moreSource§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
Source§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
Source§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.Source§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.Source§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.Source§impl<T> Tap for T
impl<T> Tap for T
Source§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.