1use std::string::FromUtf8Error;
2
3use snafu::{Location, Snafu};
4
5#[derive(Debug)]
6#[derive(Snafu)]
7#[snafu(visibility(pub))]
8#[cfg(target_os = "linux")]
9pub enum CryptoError {
10 #[snafu(display("{source}\n@:{location}"))]
11 Utf8 {
12 source: FromUtf8Error,
13 #[snafu(implicit)]
14 location: Location,
15 },
16 #[snafu(display("{source}\n@:{location}"))]
17 GetPass {
18 source: secret_service::Error,
19 #[snafu(implicit)]
20 location: Location,
21 },
22 #[snafu(display("{source}\n@:{location}"))]
23 Unpadding {
24 source: aes::cipher::block_padding::UnpadError,
25 #[snafu(implicit)]
26 location: Location,
27 },
28}
29
30#[derive(Debug)]
31#[derive(Snafu)]
32#[snafu(visibility(pub))]
33#[cfg(target_os = "macos")]
34pub enum CryptoError {
35 #[snafu(display("{source}\n@:{location}"))]
36 Utf8 {
37 source: FromUtf8Error,
38 #[snafu(implicit)]
39 location: Location,
40 },
41 #[snafu(display("{source}\n@:{location}"))]
42 Keyring {
43 source: keyring::Error,
44 #[snafu(implicit)]
45 location: Location,
46 },
47 #[snafu(display("{source}\n@:{location}"))]
48 Unpadding {
49 source: aes::cipher::block_padding::UnpadError,
50 #[snafu(implicit)]
51 location: Location,
52 },
53 #[snafu(display("{source}\n@:{location}"))]
54 Task {
55 source: tokio::task::JoinError,
56 #[snafu(implicit)]
57 location: Location,
58 },
59}
60
61#[derive(Debug)]
62#[derive(Snafu)]
63#[snafu(visibility(pub))]
64#[cfg(target_os = "windows")]
65pub enum CryptoError {
66 #[snafu(display("{source}\n@:{location}"))]
67 Utf8 {
68 source: FromUtf8Error,
69 #[snafu(implicit)]
70 location: Location,
71 },
72 #[snafu(display("{source}, path: {}\n@:{location}",path.display()))]
73 Io {
74 source: std::io::Error,
75 path: std::path::PathBuf,
76 #[snafu(implicit)]
77 location: Location,
78 },
79 #[snafu(display("{source}\n@:{location}"))]
80 Serde {
81 source: serde_json::Error,
82 #[snafu(implicit)]
83 location: Location,
84 },
85 #[snafu(display("{source}\n@:{location}"))]
86 Base64 {
87 source: base64::DecodeError,
88 #[snafu(implicit)]
89 location: Location,
90 },
91 #[snafu(display("{source}\n@:{location}"))]
92 Task {
93 source: tokio::task::JoinError,
94 #[snafu(implicit)]
95 location: Location,
96 },
97 #[snafu(display("{source}\n@:{location}"))]
98 AesGcm {
99 source: aes_gcm::Error,
100 #[snafu(implicit)]
101 location: Location,
102 },
103 #[snafu(display("{source}\n@:{location}"))]
104 CryptUnprotectData {
105 source: windows::core::Error,
106 #[snafu(implicit)]
107 location: Location,
108 },
109 #[snafu(display("CryptUnprotectData returned a null pointer\n@:{location}"))]
110 CryptUnprotectDataNull {
111 #[snafu(implicit)]
112 location: Location,
113 },
114 #[snafu(display("{source}\n@:{location}"))]
115 ChaCha {
116 source: chacha20poly1305::Error,
117 #[snafu(implicit)]
118 location: Location,
119 },
120 #[snafu(display("{render}\n@:{location}"))]
121 Context {
122 render: winnow::error::ContextError,
123 #[snafu(implicit)]
124 location: Location,
125 },
126 #[snafu(display(r#"app_bound_encrypted_key not start with "APPB"\n@:{location}"#))]
127 Appb {
128 #[snafu(implicit)]
129 location: Location,
130 },
131 #[snafu(display("Get process path failed\n@:{location}"))]
132 ProcessPath {
133 #[snafu(implicit)]
134 location: Location,
135 },
136 #[snafu(display("Invalid status from `RtlAdjustPrivilege`\n@:{location}"))]
137 Privilege {
138 #[snafu(implicit)]
139 location: Location,
140 },
141 #[snafu(display("No such Process lsass.exe or winlogon.exe\n@:{location}"))]
142 NotFoundProcess {
143 #[snafu(implicit)]
144 location: Location,
145 },
146}
147
148pub type Result<T> = std::result::Result<T, CryptoError>;