use thiserror::Error;
pub type Result<T> = std::result::Result<T, TeeError>;
#[derive(Debug, Error)]
pub enum TeeError {
#[error("TEE hardware not available: {0}")]
NotAvailable(String),
#[error("Failed to generate attestation: {0}")]
AttestationGenerationFailed(String),
#[error("Attestation verification failed: {0}")]
AttestationVerificationFailed(String),
#[error("Invalid attestation report: {0}")]
InvalidAttestationReport(String),
#[error("Certificate chain validation failed: {0}")]
CertificateValidationFailed(String),
#[error("TCB version outdated: current={current}, required={required}")]
TcbOutdated {
current: String,
required: String,
},
#[error("Enclave operation failed: {0}")]
EnclaveOperationFailed(String),
#[error("Key generation failed: {0}")]
KeyGenerationFailed(String),
#[error("Cryptographic operation failed: {0}")]
CryptoOperationFailed(String),
#[error("Encryption failed: {0}")]
EncryptionError(String),
#[error("Decryption failed: {0}")]
DecryptionError(String),
#[error("Invalid key handle: {0}")]
InvalidKeyHandle(String),
#[error("Provider not found: {0}")]
ProviderNotFound(String),
#[error("Provider registration failed: {0}")]
RegistrationFailed(String),
#[error("Configuration error: {0}")]
ConfigurationError(String),
#[error("I/O error: {0}")]
IoError(#[from] std::io::Error),
#[error("Serialization error: {0}")]
SerializationError(#[from] serde_json::Error),
#[error("Cryptographic error: {0}")]
CryptoError(String),
#[error("Internal error: {0}")]
Internal(String),
}
impl TeeError {
pub fn not_available(msg: impl Into<String>) -> Self {
TeeError::NotAvailable(msg.into())
}
pub fn attestation_failed(msg: impl Into<String>) -> Self {
TeeError::AttestationVerificationFailed(msg.into())
}
pub fn internal(msg: impl Into<String>) -> Self {
TeeError::Internal(msg.into())
}
}