1use thiserror::Error;
4
5pub type Result<T> = std::result::Result<T, ShieldError>;
7
8#[derive(Error, Debug)]
10pub enum ShieldError {
11 #[error("ciphertext too short: expected at least {expected} bytes, got {actual}")]
13 CiphertextTooShort { expected: usize, actual: usize },
14
15 #[error("authentication failed: MAC verification failed")]
17 AuthenticationFailed,
18
19 #[error("key derivation failed: {0}")]
21 KeyDerivationFailed(String),
22
23 #[error("invalid key length: expected {expected} bytes, got {actual}")]
25 InvalidKeyLength { expected: usize, actual: usize },
26
27 #[error("random generation failed")]
29 RandomFailed,
30
31 #[error("stream cipher error: {0}")]
33 StreamError(String),
34
35 #[error("ratchet error: {0}")]
37 RatchetError(String),
38
39 #[error("invalid format")]
41 InvalidFormat,
42
43 #[error("invalid share count: need at least 2 shares")]
45 InvalidShareCount,
46
47 #[error("key version {0} already exists")]
49 VersionExists(u32),
50
51 #[error("new version must be greater than current")]
53 InvalidVersion,
54
55 #[error("unknown key version: {0}")]
57 UnknownVersion(u32),
58
59 #[error("Lamport key already used - generate new key pair")]
61 LamportKeyUsed,
62
63 #[error("user {0} already exists")]
65 UserExists(String),
66
67 #[error("member not found in group")]
69 MemberNotFound,
70
71 #[error("channel error: {0}")]
73 ChannelError(String),
74
75 #[error("connection closed")]
77 ConnectionClosed,
78
79 #[error("hardware fingerprint unavailable (VM or restricted access)")]
81 FingerprintUnavailable,
82}