#[cfg(not(feature = "std"))]
use alloc::string::{String, ToString};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum Error {
#[cfg(any(feature = "std", feature = "kernel-verify"))]
#[error("ELF plain 构造失败: {0}")]
Plain(#[from] crate::plain::PlainError),
#[cfg(any(feature = "std", feature = "kernel-verify"))]
#[error("{0}")]
ResourceLimit(#[from] crate::limits::LimitsError),
#[error("CMS 签名: {0}")]
CmsSign(String),
#[error("CMS 验签: {0}")]
CmsVerify(String),
#[error("私钥 PEM 解析失败: {0}")]
KeyParse(String),
#[error("DER 编解码失败: {0}")]
RasnEncode(String),
#[error("DER 解码失败: {0}")]
RasnDecode(String),
#[error("SM2 错误: {0}")]
Sm2(String),
#[error("ELF 写出: {0}")]
ElfWrite(String),
#[cfg(feature = "std")]
#[error("IO: {0}")]
Io(#[from] std::io::Error),
}
impl From<rasn::error::EncodeError> for Error {
fn from(e: rasn::error::EncodeError) -> Self {
Error::RasnEncode(e.to_string())
}
}
impl From<rasn::error::DecodeError> for Error {
fn from(e: rasn::error::DecodeError) -> Self {
Error::RasnDecode(e.to_string())
}
}
impl From<mbedtls::Error> for Error {
fn from(e: mbedtls::Error) -> Self {
Error::Sm2(e.to_string())
}
}