use thiserror::Error;
#[derive(Error, Debug, Clone)]
pub enum CryptoError {
#[error("Unknown algorithm identifier: {0}")]
UnknownAlgorithm(String),
#[error("Invalid hash format: {0}")]
InvalidHashFormat(String),
#[error("Invalid signature format: {0}")]
InvalidSignatureFormat(String),
#[error("Signature verification failed")]
SignatureVerificationFailed,
#[error("Invalid public key: {0}")]
InvalidPublicKey(String),
#[error("Invalid secret key: {0}")]
InvalidSecretKey(String),
#[error("No secret key available for signing (verification-only instance)")]
MissingSecretKey,
#[error("Base64 decode error: {0}")]
Base64DecodeError(String),
#[error("Invalid data length: expected {expected}, got {actual}")]
InvalidDataLength { expected: usize, actual: usize },
#[error("Serialization error: {0}")]
SerializationError(String),
#[error("Hash computation failed: {0}")]
HashError(String),
#[error("Signing failed: {0}")]
SigningError(String),
#[error("Unsupported algorithm: {0}")]
UnsupportedAlgorithm(String),
#[error("Invalid PKCS#8 DER format: {0}")]
InvalidDerFormat(String),
}