cosmwasm_std/errors/
recover_pubkey_error.rs1use 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}