1#[allow(unused)]
2pub use anyhow::{anyhow, bail, ensure, Error};
3
4#[derive(Debug, thiserror::Error)]
5pub enum JWTError {
6 #[error("Internal error: [{0}]")]
7 InternalError(String),
8 #[error("JWT compact encoding error")]
9 CompactEncodingError,
10 #[error("CWT decoding error")]
11 CWTDecodingError,
12 #[error("JWT header too large")]
13 HeaderTooLarge,
14 #[error("JWT algorithm mismatch")]
15 AlgorithmMismatch,
16 #[error("JWT key identifier mismatch")]
17 KeyIdentifierMismatch,
18 #[error("Missing JWT key identifier")]
19 MissingJWTKeyIdentifier,
20 #[error("Authentication tag didn't verify")]
21 InvalidAuthenticationTag,
22 #[error("Signature tag didn't verify")]
23 InvalidSignature,
24 #[error("Old token reused")]
25 OldTokenReused,
26 #[error("Clock drift detected")]
27 ClockDrift,
28 #[error("Token is too old")]
29 TokenIsTooOld,
30 #[error("Token not valid yet")]
31 TokenNotValidYet,
32 #[error("Token has expired")]
33 TokenHasExpired,
34 #[error("Required key identifier missing")]
35 RequiredKeyIdMissing,
36 #[error("Required key identifier mismatch")]
37 RequiredKeyIdMismatch,
38 #[error("Required nonce missing")]
39 RequiredNonceMissing,
40 #[error("Required nonce mismatch")]
41 RequiredNonceMismatch,
42 #[error("Required issuer mismatch")]
43 RequiredIssuerMismatch,
44 #[error("Required issuer missing")]
45 RequiredIssuerMissing,
46 #[error("Required subject mismatch")]
47 RequiredSubjectMismatch,
48 #[error("Required subject missing")]
49 RequiredSubjectMissing,
50 #[error("Required audience missing")]
51 RequiredAudienceMissing,
52 #[error("Required audience mismatch")]
53 RequiredAudienceMismatch,
54 #[error("Unsupported RSA modulus")]
55 UnsupportedRSAModulus,
56 #[error("Invalid public key")]
57 InvalidPublicKey,
58 #[error("Invalid key pair")]
59 InvalidKeyPair,
60 #[error("At most one audience can be represented as a string instead of a set")]
61 TooManyAudiences,
62 #[error("Too many issuers to be represented as a string")]
63 TooManyIssuers,
64 #[error("Invalid certificate thumbprint")]
65 InvalidCertThumprint,
66 #[error("Not a JWT token")]
67 NotJWT,
68 #[error("Required signature type mismatch")]
69 RequiredSignatureTypeMismatch,
70 #[error("Required content type mismatch")]
71 RequiredContentTypeMismatch,
72 #[error("Token is too long")]
73 TokenTooLong,
74 #[error("Missing salt")]
75 MissingSalt,
76 #[error("Duplicate claim key in CWT: {0}")]
77 DuplicateCWTClaimKey(String),
78}
79
80impl From<&str> for JWTError {
81 fn from(e: &str) -> JWTError {
82 JWTError::InternalError(e.into())
83 }
84}