use anyhow::Result;
use serde::{Deserialize, Serialize};
use {
crate::constants::*,
crate::qe_identity::QeTcbLevel,
crate::quote::{EnclaveReport, Header, Report},
crate::tcb_info::{TcbLevel, TcbStatus},
alloc::string::String,
alloc::vec::Vec,
};
#[cfg(feature = "borsh_schema")]
use borsh::BorshSchema;
#[cfg(feature = "borsh")]
use borsh::{BorshDeserialize, BorshSerialize};
mod simple;
pub use simple::{QuotePolicy, QuotePolicyConfig};
pub trait Policy {
fn validate(&self, data: &QuoteClaims) -> Result<()>;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "borsh", derive(BorshSerialize, BorshDeserialize))]
#[cfg_attr(feature = "borsh_schema", derive(BorshSchema))]
#[cfg_attr(feature = "borsh", borsh(use_discriminant = true))]
pub enum PckCertFlag {
False = 0,
True = 1,
Undefined = 2,
}
impl From<Option<bool>> for PckCertFlag {
fn from(v: Option<bool>) -> Self {
match v {
Some(true) => PckCertFlag::True,
Some(false) => PckCertFlag::False,
None => PckCertFlag::Undefined,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct QuoteClaims {
pub claims_version: u16,
pub header: Header,
pub tee_type: u32,
pub tcb: TcbVerdict,
pub platform: PlatformInfo,
pub qe: QeInfo,
pub earliest_issue_date: u64,
pub latest_issue_date: u64,
pub earliest_expiration_date: u64,
pub qe_iden_earliest_issue_date: u64,
pub qe_iden_latest_issue_date: u64,
pub qe_iden_earliest_expiration_date: u64,
pub report: Report,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TcbVerdict {
pub status: TcbStatus,
pub advisory_ids: Vec<String>,
pub eval_data_number: u32,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PlatformInfo {
pub tcb_level: TcbLevel,
pub tcb_date_tag: u64,
pub pck: PckIdentity,
pub root_key_id: Vec<u8>,
pub pck_crl_num: u32,
pub root_ca_crl_num: u32,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct QeInfo {
pub tcb_level: QeTcbLevel,
pub report: EnclaveReport,
pub tcb_eval_data_number: u32,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PckIdentity {
pub ppid: Vec<u8>,
pub cpu_svn: CpuSvn,
pub pce_svn: Svn,
pub pce_id: Vec<u8>,
pub fmspc: Fmspc,
pub sgx_type: u8,
pub platform_instance_id: Option<[u8; 16]>,
pub dynamic_platform: PckCertFlag,
pub cached_keys: PckCertFlag,
pub smt_enabled: PckCertFlag,
pub platform_provider_id: Option<String>,
}