use crate::prelude::*;
pub type MrEnclave = [u8; 32];
#[zero_copy(unsafe)]
#[repr(packed)]
#[derive(Debug, PartialEq)]
pub struct Quote {
pub enclave_signer: Pubkey,
pub mr_enclave: [u8; 32],
pub verification_status: u8,
pub verification_timestamp: i64,
pub valid_until: i64,
pub quote_registry: [u8; 32],
pub registry_key: [u8; 64],
pub _ebuf: [u8; 256],
}
impl Default for Quote {
fn default() -> Self {
unsafe { std::mem::zeroed() }
}
}
impl Quote {
pub fn reset_verification(&mut self) -> Result<()> {
if self.verification_status != VerificationStatus::VerificationOverride as u8 {
self.verification_status = VerificationStatus::None.into();
}
self.enclave_signer = Pubkey::default();
self.verification_timestamp = 0;
self.valid_until = 0;
Ok(())
}
pub fn is_verified(&self, clock: &Clock) -> bool {
match self.verification_status.into() {
VerificationStatus::VerificationOverride => true,
VerificationStatus::VerificationSuccess => self.valid_until > clock.unix_timestamp,
_ => false,
}
}
}