cosmwasm_std/errors/
recover_pubkey_error.rs

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