Skip to main content

wae_crypto/
error.rs

1//! 加密错误类型
2
3use std::fmt;
4use wae_types::{WaeError, WaeErrorKind};
5
6/// 加密错误
7#[derive(Debug)]
8pub enum CryptoError {
9    /// Base64 编解码错误
10    Base64Error(base64::DecodeError),
11
12    /// 哈希错误
13    HashError(String),
14
15    /// HMAC 错误
16    HmacError(String),
17
18    /// 密码哈希错误
19    PasswordHashError,
20
21    /// 密码验证错误
22    PasswordVerifyError,
23
24    /// 无效的算法
25    InvalidAlgorithm,
26
27    /// 密钥错误
28    KeyError,
29
30    /// Base32 编解码错误
31    Base32Error(String),
32
33    /// 签名无效
34    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
61/// 加密结果类型
62pub 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}