pub struct DefaultVerifier;Expand description
A JwsVerifier over RustCrypto: ed25519-dalek for EdDSA, p256 for ES256, k256 for
ES256K (feature secp256k1) and rsa for RS256 and PS256 (feature rsa).
ES384 is in the JwsAlgorithm vocabulary but not implemented here; verifying it returns
VerificationError::UnsupportedAlgorithm.
Before the signature is checked, the key’s own restrictions are: a key whose alg names
another algorithm, whose use is not sig or whose key_ops lacks verify is rejected.
§ECDSA malleability
When an ECDSA signature (r, s) verifies, so does (r, n - s), where n is the group order.
RFC 7518 §3.4 asks for no canonical s, and ES256 verification accepts both, so anyone
holding an ES256 JWS can produce a second, different compact serialization of it that
verifies just the same. ES256K accepts only the lower s, as k256 and most secp256k1
verifiers do (normalize_ecdsa_signature brings a
signer’s output into that form).
The signature still means the same: the signer did sign those claims. What it rules out is
treating a token’s bytes as unique. An application that keeps a replay cache or deduplicates
tokens identifies a token by its claims (jti, iss, nonce), not by its compact
serialization or a hash of it.
§Examples
use identity_kit::jose::{DefaultVerifier, Jwk, JwsAlgorithm, JwsVerifier};
// RFC 8037 Appendix A.4 and A.5.
let key: Jwk = serde_json::from_str(
r#"{"kty":"OKP","crv":"Ed25519","x":"11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo"}"#,
)?;
let token = "eyJhbGciOiJFZERTQSJ9.RXhhbXBsZSBvZiBFZDI1NTE5IHNpZ25pbmc.\
hgyY0il_MGCjP0JzlnLWG1PPOt7-09PGcvMg3AIbQR6dWbhijcNR4ki4iylGjg5BhVsPt9g7sVvpAr_MuM0KAg";
let jws = identity_kit::jose::CompactJws::decode(token)?;
DefaultVerifier.verify(JwsAlgorithm::EdDSA, jws.signing_input(), jws.signature(), &key)?;Trait Implementations§
Source§impl Clone for DefaultVerifier
impl Clone for DefaultVerifier
impl Copy for DefaultVerifier
Source§impl Debug for DefaultVerifier
impl Debug for DefaultVerifier
Source§impl Default for DefaultVerifier
impl Default for DefaultVerifier
impl Eq for DefaultVerifier
Source§impl JwsVerifier for DefaultVerifier
impl JwsVerifier for DefaultVerifier
Source§impl PartialEq for DefaultVerifier
impl PartialEq for DefaultVerifier
impl StructuralPartialEq for DefaultVerifier
Auto Trait Implementations§
impl Freeze for DefaultVerifier
impl RefUnwindSafe for DefaultVerifier
impl Send for DefaultVerifier
impl Sync for DefaultVerifier
impl Unpin for DefaultVerifier
impl UnsafeUnpin for DefaultVerifier
impl UnwindSafe for DefaultVerifier
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.