#[non_exhaustive]pub struct SdJwtCredentialValidator<V>(/* private fields */)
where
V: JwsVerifier;Expand description
A type validating SdJwts.
Implementations§
Source§impl<V> SdJwtCredentialValidator<V>where
V: JwsVerifier,
impl<V> SdJwtCredentialValidator<V>where
V: JwsVerifier,
Sourcepub fn new<H>(signature_verifier: V, hasher: H) -> SdJwtCredentialValidator<V>where
H: Hasher + 'static,
pub fn new<H>(signature_verifier: V, hasher: H) -> SdJwtCredentialValidator<V>where
H: Hasher + 'static,
Creates a new SdJwtCredentialValidator that delegates cryptographic signature verification to the given
signature_verifier and SD-JWT decoding to the given hasher.
Sourcepub fn validate_credential<DOC, T>(
&self,
sd_jwt: &SdJwt,
trusted_issuers: &[DOC],
options: &JwtCredentialValidationOptions,
) -> Result<Credential<T>, SdJwtCredentialValidatorError>
pub fn validate_credential<DOC, T>( &self, sd_jwt: &SdJwt, trusted_issuers: &[DOC], options: &JwtCredentialValidationOptions, ) -> Result<Credential<T>, SdJwtCredentialValidatorError>
Decodes and validates a Credential issued as an SD-JWT. The credential is constructed by replacing disclosures following the Selective Disclosure for JWTs (SD-JWT) standard.
The following properties are validated according to options:
- the issuer’s signature on the JWS,
- the expiration date,
- the issuance date,
- the semantic structure.
§Warning
- The key binding JWT is not validated. If needed, it must be validated separately using SdJwtCredentialValidator::validate_key_binding_jwt.
- The lack of an error returned from this method is in of itself not enough to conclude that the credential can be trusted. This section contains more information on additional checks that should be carried out before and after calling this method.
§The state of the issuer’s DID Document
The caller must ensure that issuer represents an up-to-date DID Document.
§Properties that are not validated
There are many properties defined in The Verifiable Credentials Data Model that are not validated, such as:
proof, credentialStatus, type, credentialSchema, refreshService and more.
These should be manually checked after validation, according to your requirements.
§Errors
An error is returned whenever a validated condition is not satisfied.
Sourcepub fn validate_credential_v2<DOC, T>(
&self,
sd_jwt: &SdJwt,
trusted_issuers: &[DOC],
options: &JwtCredentialValidationOptions,
) -> Result<Credential<T>, SdJwtCredentialValidatorError>
pub fn validate_credential_v2<DOC, T>( &self, sd_jwt: &SdJwt, trusted_issuers: &[DOC], options: &JwtCredentialValidationOptions, ) -> Result<Credential<T>, SdJwtCredentialValidatorError>
Decodes and validates a CredentialV2 issued as an SD-JWT. The credential is constructed by replacing disclosures following the Selective Disclosure for JWTs (SD-JWT) standard.
The following properties are validated according to options:
- the issuer’s signature on the JWS,
- the expiration date,
- the issuance date,
- the semantic structure.
§Warning
- The key binding JWT is not validated. If needed, it must be validated separately using SdJwtCredentialValidator::validate_key_binding_jwt.
- The lack of an error returned from this method is in of itself not enough to conclude that the credential can be trusted. This section contains more information on additional checks that should be carried out before and after calling this method.
§The state of the issuer’s DID Document
The caller must ensure that issuer represents an up-to-date DID Document.
§Properties that are not validated
There are many properties defined in The Verifiable Credentials Data Model v2
that are not validated, such as:
proof, credentialStatus, type, credentialSchema, refreshService and more.
These should be manually checked after validation, according to your requirements.
§Errors
An error is returned whenever a validated condition is not satisfied.
Sourcepub fn verify_signature<DOC>(
&self,
sd_jwt: &SdJwt,
trusted_issuers: &[DOC],
options: &JwsVerificationOptions,
) -> Result<(), JwtValidationError>where
DOC: AsRef<CoreDocument>,
pub fn verify_signature<DOC>(
&self,
sd_jwt: &SdJwt,
trusted_issuers: &[DOC],
options: &JwsVerificationOptions,
) -> Result<(), JwtValidationError>where
DOC: AsRef<CoreDocument>,
Decode and verify the JWS signature of an SD-JWT using the DID Document of a trusted issuer.
§Warning
The caller must ensure that the DID Documents of the trusted issuers are up-to-date.
§Errors
An error is returned whenever:
- The JWS signature is invalid;
- The issuer’s public key could not be determined or is not found within the trusted issuers’ documents;
Sourcepub fn validate_key_binding_jwt<DOC>(
&self,
sd_jwt: &SdJwt,
holder_document: &DOC,
options: &KeyBindingJwtValidationOptions,
) -> Result<(), KeyBindingJwtError>where
DOC: AsRef<CoreDocument>,
pub fn validate_key_binding_jwt<DOC>(
&self,
sd_jwt: &SdJwt,
holder_document: &DOC,
options: &KeyBindingJwtValidationOptions,
) -> Result<(), KeyBindingJwtError>where
DOC: AsRef<CoreDocument>,
Validates a Key Binding JWT (KB-JWT) according to RFC9901.
The Validation process includes:
- Signature validation using public key materials defined in the
holderdocument. sd_hashclaim value in the KB-JWT claim.- Optional
nonce,aud, and validity period validation.
§Notes
If a KB-JWT is not required by the SD-JWT, this method returns successfully early.
Auto Trait Implementations§
impl<V> Freeze for SdJwtCredentialValidator<V>where
V: Freeze,
impl<V> !RefUnwindSafe for SdJwtCredentialValidator<V>
impl<V> !Send for SdJwtCredentialValidator<V>
impl<V> !Sync for SdJwtCredentialValidator<V>
impl<V> Unpin for SdJwtCredentialValidator<V>where
V: Unpin,
impl<V> !UnwindSafe for SdJwtCredentialValidator<V>
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read more§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§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
§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> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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 more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a Request§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].§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> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§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.