secret_cosmwasm_std/errors/
recover_pubkey_error.rs

1#[cfg(not(target_arch = "wasm32"))]
2use secret_cosmwasm_crypto::CryptoError;
3#[cfg(feature = "backtraces")]
4use std::backtrace::Backtrace;
5use std::fmt::Debug;
6use thiserror::Error;
7
8#[derive(Error, Debug)]
9pub enum RecoverPubkeyError {
10    #[error("Invalid hash format")]
11    InvalidHashFormat,
12    #[error("Invalid signature format")]
13    InvalidSignatureFormat,
14    #[error("Invalid recovery parameter. Supported values: 0 and 1.")]
15    InvalidRecoveryParam,
16    #[error("Unknown error: {error_code}")]
17    UnknownErr {
18        error_code: u32,
19        #[cfg(feature = "backtraces")]
20        backtrace: Backtrace,
21    },
22}
23
24impl RecoverPubkeyError {
25    pub fn unknown_err(error_code: u32) -> Self {
26        RecoverPubkeyError::UnknownErr {
27            error_code,
28            #[cfg(feature = "backtraces")]
29            backtrace: Backtrace::capture(),
30        }
31    }
32}
33
34impl PartialEq<RecoverPubkeyError> for RecoverPubkeyError {
35    fn eq(&self, rhs: &RecoverPubkeyError) -> bool {
36        match self {
37            RecoverPubkeyError::InvalidHashFormat => {
38                matches!(rhs, RecoverPubkeyError::InvalidHashFormat)
39            }
40            RecoverPubkeyError::InvalidSignatureFormat => {
41                matches!(rhs, RecoverPubkeyError::InvalidSignatureFormat)
42            }
43            RecoverPubkeyError::InvalidRecoveryParam => {
44                matches!(rhs, RecoverPubkeyError::InvalidRecoveryParam)
45            }
46            RecoverPubkeyError::UnknownErr { error_code, .. } => {
47                if let RecoverPubkeyError::UnknownErr {
48                    error_code: rhs_error_code,
49                    ..
50                } = rhs
51                {
52                    error_code == rhs_error_code
53                } else {
54                    false
55                }
56            }
57        }
58    }
59}
60
61#[cfg(not(target_arch = "wasm32"))]
62impl From<CryptoError> for RecoverPubkeyError {
63    fn from(original: CryptoError) -> Self {
64        match original {
65            CryptoError::InvalidHashFormat { .. } => RecoverPubkeyError::InvalidHashFormat,
66            CryptoError::InvalidPubkeyFormat { .. } => panic!("Conversion not supported"),
67            CryptoError::InvalidSignatureFormat { .. } => {
68                RecoverPubkeyError::InvalidSignatureFormat
69            }
70            CryptoError::GenericErr { .. } => RecoverPubkeyError::unknown_err(original.code()),
71            CryptoError::InvalidRecoveryParam { .. } => RecoverPubkeyError::InvalidRecoveryParam,
72            CryptoError::BatchErr { .. } => panic!("Conversion not supported"),
73            CryptoError::InvalidPrivateKeyFormat { .. } => {
74                // should never get here
75                RecoverPubkeyError::UnknownErr {
76                    error_code: 0,
77                    #[cfg(feature = "backtraces")]
78                    backtrace: Backtrace::capture(),
79                }
80            }
81        }
82    }
83}