use crate::error::Result;
use serde::{Deserialize, Serialize};
pub trait TeeBackend: Send + Sync {
fn is_available() -> bool
where
Self: Sized;
fn initialize_primary_key(&mut self) -> Result<()>;
fn generate_data_key(&mut self) -> Result<WrappedKey>;
fn seal(&mut self, key: &WrappedKey, data: &[u8]) -> Result<Vec<u8>>;
fn unseal(&mut self, key: &WrappedKey, sealed: &[u8]) -> Result<Vec<u8>>;
fn backend_type(&self) -> BackendType;
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WrappedKey {
pub blob: Vec<u8>,
pub backend: BackendType,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum BackendType {
Tpm,
Software,
}