#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum ActError {
#[error("token is {actual} bytes, exceeding the {limit}-byte maximum")]
TooLarge {
actual: usize,
limit: usize,
},
#[error("envelope decode failed: {0}")]
EnvelopeDecode(String),
#[error("claims decode failed: {0}")]
ClaimsDecode(String),
#[error("unsupported ACT format version {found}, this build supports {supported}")]
UnsupportedVersion {
found: u64,
supported: u64,
},
#[error("unsupported signature algorithm {0:?}, this build implements Ed25519")]
UnsupportedAlgorithm(String),
#[error("envelope carries no signature")]
MissingSignature,
#[error("signature is {0} bytes, expected exactly 64")]
MalformedSignature(usize),
#[error("trusted key at index {index} is not a valid Ed25519 key: {reason}")]
MalformedTrustedKey {
index: usize,
reason: String,
},
#[error("at least one trusted issuer key is required")]
NoTrustedKeys,
#[error("signature did not validate against any of {tried} trusted keys")]
SignatureInvalid {
tried: usize,
},
#[error("token expired at {expired_at} (now {now})")]
Expired {
expired_at: i64,
now: i64,
},
#[error("token not valid until {valid_from} (now {now})")]
NotYetValid {
valid_from: i64,
now: i64,
},
#[error("issuer mismatch: expected {expected:?}, found {found:?}")]
IssuerMismatch {
expected: String,
found: String,
},
#[error("audience mismatch: expected {expected:?}, found {found:?}")]
AudienceMismatch {
expected: String,
found: Vec<String>,
},
#[error("missing required scope {0:?}")]
MissingScope(String),
#[error("scope {value:?} is malformed: {reason}")]
MalformedScope {
value: String,
reason: &'static str,
},
#[error("claim {0} must not be empty")]
EmptyClaim(&'static str),
#[error("token validity window is empty: nbf {nbf} is not before exp {exp}")]
EmptyValidityWindow {
nbf: i64,
exp: i64,
},
#[error("encode failed: {0}")]
Encode(String),
}
pub type ActResult<T> = Result<T, ActError>;