meta_secret_core/errors/
mod.rs

1use crate::shared_secret::data_block::common::DataBlockParserError;
2use shamirsecretsharing::SSSError;
3use std::io;
4use std::string::FromUtf8Error;
5use crate::models::{Base64EncodedText, CommunicationChannel};
6
7#[derive(thiserror::Error, Debug)]
8pub enum CoreError {
9    #[error(transparent)]
10    InvalidBase64Content {
11        #[from]
12        source: base64::DecodeError,
13    },
14
15    #[error(transparent)]
16    SignatureError {
17        #[from]
18        source: ed25519_dalek::SignatureError,
19    },
20
21    #[error(transparent)]
22    InvalidArraySize {
23        #[from]
24        source: std::array::TryFromSliceError,
25    },
26
27    #[error(transparent)]
28    StringConversionError {
29        #[from]
30        source: FromUtf8Error,
31    },
32
33    #[error(transparent)]
34    Utf8ConversionError {
35        #[from]
36        source: std::str::Utf8Error,
37    },
38
39    #[error(transparent)]
40    EncryptionError {
41        #[from]
42        source: crypto_box::aead::Error,
43    },
44
45    #[error("The key manager: {key_manager_pk:?} is not a component of the secure communication channel: {channel:?}")]
46    ThirdPartyEncryptionError {
47        key_manager_pk: Base64EncodedText,
48        channel: CommunicationChannel,
49    },
50
51    #[error(transparent)]
52    JsonParseError {
53        #[from]
54        source: serde_json::Error,
55    },
56
57    #[error(transparent)]
58    RecoveryError {
59        #[from]
60        source: RecoveryError,
61    },
62
63    #[error(transparent)]
64    DataBlockParserError {
65        #[from]
66        source: DataBlockParserError,
67    },
68
69    #[error(transparent)]
70    ShamirError {
71        #[from]
72        source: SSSError,
73    },
74
75    #[error(transparent)]
76    SplitOperationError {
77        #[from]
78        source: SplitError,
79    },
80
81    #[error(transparent)]
82    SharesLoaderError {
83        #[from]
84        source: SharesLoaderError,
85    },
86}
87
88#[derive(Debug, thiserror::Error)]
89pub enum RecoveryError {
90    #[error("Empty input")]
91    EmptyInput(String),
92    #[error("Invalid share")]
93    InvalidShare(String),
94
95    #[error(transparent)]
96    ShamirCombineSharesError {
97        #[from]
98        source: SSSError,
99    },
100    #[error(transparent)]
101    DeserializationError {
102        #[from]
103        source: FromUtf8Error,
104    },
105}
106
107#[derive(Debug, thiserror::Error)]
108pub enum SplitError {
109    #[error("Secrets directory can't be created")]
110    SecretsDirectoryError {
111        #[from]
112        source: io::Error,
113    },
114    #[error("User secret share: invalid format (can't be serialized into json)")]
115    UserShareJsonSerializationError {
116        #[from]
117        source: serde_json::Error,
118    },
119}
120
121#[derive(Debug, thiserror::Error)]
122pub enum SharesLoaderError {
123    #[error(transparent)]
124    FileSystemError(#[from] io::Error),
125    #[error(transparent)]
126    DeserializationError(#[from] serde_json::error::Error),
127}