use thiserror::Error;
#[derive(Debug, Error)]
pub enum AuthProtocolError {
#[error(
"unsupported protocol version {received}; this implementation supports version {supported}"
)]
UnsupportedVersion {
received: u8,
supported: u8,
},
#[error("invalid challenge: {reason}")]
InvalidChallenge {
reason: String,
},
#[error("invalid proof: {reason}")]
InvalidProof {
reason: String,
},
#[error("nonce mismatch: challenge carried {expected}, proof echoed {received}")]
NonceMismatch {
expected: String,
received: String,
},
#[error("challenge expired: issued at {issued}, expiry was {expiry}, current time is {now}")]
ChallengeExpired {
issued: String,
expiry: String,
now: String,
},
#[error("replay detected: nonce {nonce_hex} has already been used in a prior handshake")]
ReplayDetected {
nonce_hex: String,
},
#[error("signature verification failed: {reason}")]
SignatureVerificationFailed {
reason: String,
},
#[error("invalid DID document for {did}: {reason}")]
InvalidDidDocument {
did: String,
reason: String,
},
#[error("transport error: {reason}")]
TransportFailed {
reason: String,
},
#[error("timeout waiting for {step} response after {timeout_secs}s")]
Timeout {
step: String,
timeout_secs: u64,
},
#[error("message serialization failed for {message_type}: {reason}")]
SerializationFailed {
message_type: String,
reason: String,
},
#[error("challenge expiry {requested_secs}s exceeds maximum allowed {max_secs}s")]
ExpiryTooLong {
requested_secs: u64,
max_secs: u64,
},
#[error("internal error: {0}")]
Internal(String),
#[error("session not found: {session_id}")]
SessionNotFound {
session_id: String,
},
#[error("session expired: {session_id}")]
SessionExpired {
session_id: String,
},
}