1use std::fmt;
4use wae_types::{WaeError, WaeErrorKind};
5
6#[derive(Debug)]
8pub enum CryptoError {
9 Base64Error(base64::DecodeError),
11
12 HashError(String),
14
15 HmacError(String),
17
18 PasswordHashError,
20
21 PasswordVerifyError,
23
24 InvalidAlgorithm,
26
27 KeyError,
29
30 Base32Error(String),
32
33 InvalidSignature,
35}
36
37impl fmt::Display for CryptoError {
38 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
39 match self {
40 CryptoError::Base64Error(e) => write!(f, "base64 error: {e}"),
41 CryptoError::HashError(e) => write!(f, "hash error: {e}"),
42 CryptoError::HmacError(e) => write!(f, "hmac error: {e}"),
43 CryptoError::PasswordHashError => write!(f, "password hash error"),
44 CryptoError::PasswordVerifyError => write!(f, "password verify error"),
45 CryptoError::InvalidAlgorithm => write!(f, "invalid algorithm"),
46 CryptoError::KeyError => write!(f, "key error"),
47 CryptoError::Base32Error(e) => write!(f, "base32 error: {e}"),
48 CryptoError::InvalidSignature => write!(f, "invalid signature"),
49 }
50 }
51}
52
53impl std::error::Error for CryptoError {}
54
55impl From<base64::DecodeError> for CryptoError {
56 fn from(err: base64::DecodeError) -> Self {
57 CryptoError::Base64Error(err)
58 }
59}
60
61pub type CryptoResult<T> = Result<T, CryptoError>;
63
64impl From<CryptoError> for WaeError {
65 fn from(err: CryptoError) -> Self {
66 match err {
67 CryptoError::Base64Error(_) => WaeError::invalid_token("invalid base64"),
68 CryptoError::HashError(reason) => WaeError::new(WaeErrorKind::HmacError { reason }),
69 CryptoError::HmacError(reason) => WaeError::new(WaeErrorKind::HmacError { reason }),
70 CryptoError::PasswordHashError => {
71 WaeError::new(WaeErrorKind::HmacError { reason: "password hash failed".to_string() })
72 }
73 CryptoError::PasswordVerifyError => {
74 WaeError::new(WaeErrorKind::HmacError { reason: "password verify failed".to_string() })
75 }
76 CryptoError::InvalidAlgorithm => WaeError::new(WaeErrorKind::InvalidAlgorithm),
77 CryptoError::KeyError => WaeError::new(WaeErrorKind::KeyError),
78 CryptoError::Base32Error(reason) => WaeError::new(WaeErrorKind::Base32Error { reason }),
79 CryptoError::InvalidSignature => WaeError::invalid_signature(),
80 }
81 }
82}