1use thiserror::Error;
2
3#[derive(Error, Debug)]
4pub enum PasskeyError {
5 #[error("Database error: {0}")]
6 DatabaseError(String),
7
8 #[error("Invalid challenge")]
9 InvalidChallenge,
10
11 #[error("Registration session expired or invalid")]
12 RegistrationSessionExpired,
13
14 #[error("Login session expired or invalid")]
15 LoginSessionExpired,
16
17 #[error("Origin mismatch: expected {expected}, got {got}")]
18 OriginMismatch { expected: String, got: String },
19
20 #[error("Invalid operation type")]
21 InvalidOperationType,
22
23 #[error("RP ID Hash mismatch")]
24 RpIdHashMismatch,
25
26 #[error("User Present flag not set")]
27 UserPresentFlagNotSet,
28
29 #[error("Invalid signature: {0}")]
30 InvalidSignature(String),
31
32 #[error("Passkey not found")]
33 PasskeyNotFound,
34
35 #[error("User Handle mismatch")]
36 UserHandleMismatch,
37
38 #[error("Signature counter regression")]
39 SignatureCounterRegression,
40
41 #[error("Serialization error: {0}")]
42 SerializationError(#[from] serde_json::Error),
43
44 #[error("Base64 decode error: {0}")]
45 Base64Error(#[from] base64::DecodeError),
46
47 #[error("Internal error: {0}")]
48 InternalError(String),
49}
50
51pub type Result<T> = std::result::Result<T, PasskeyError>;