use thiserror::Error;
#[derive(Debug, Error)]
pub enum SignerError {
#[error("Failed to lock memory: {0}")]
MemoryLockFailed(String),
#[error("Key derivation failed: {0}")]
KeyDerivationFailed(String),
#[error("Decryption failed - invalid passphrase or corrupted container")]
DecryptionFailed,
#[error("Encryption failed: {0}")]
EncryptionFailed(String),
#[error("Invalid key format: expected 32 or 64 bytes, got {0}")]
InvalidKeyFormat(usize),
#[error("Invalid key length: expected {expected}, got {got}")]
InvalidKeyLength { expected: usize, got: usize },
#[error("Signing failed: {0}")]
SigningFailed(String),
#[error("Invalid transaction format: {0}")]
InvalidTransaction(String),
#[error("Serialization error: {0}")]
SerializationError(String),
#[error("Base58 decoding error: {0}")]
Base58Error(String),
#[error("Base64 decoding error: {0}")]
Base64Error(String),
#[error("Invalid container format: {0}")]
ContainerError(String),
#[error("I/O error: {0}")]
IoError(String),
}
impl From<std::io::Error> for SignerError {
fn from(e: std::io::Error) -> Self {
SignerError::IoError(e.to_string())
}
}
impl From<base64::DecodeError> for SignerError {
fn from(e: base64::DecodeError) -> Self {
SignerError::Base64Error(e.to_string())
}
}
impl From<bs58::decode::Error> for SignerError {
fn from(e: bs58::decode::Error) -> Self {
SignerError::Base58Error(e.to_string())
}
}
impl From<serde_json::Error> for SignerError {
fn from(e: serde_json::Error) -> Self {
SignerError::SerializationError(e.to_string())
}
}