use super::cpu::verify_cpu_features;
use super::{enter_cpu_state, leave_cpu_state};
pub(crate) struct Entry {
secret: bool,
cpu_state: u32,
}
impl Entry {
#[must_use]
pub(crate) fn new_public() -> Self {
verify_cpu_features();
Self {
secret: false,
cpu_state: 0,
}
}
#[must_use]
pub(crate) fn new_secret() -> Self {
verify_cpu_features();
let cpu_state = enter_cpu_state();
Self {
secret: true,
cpu_state,
}
}
}
impl Drop for Entry {
fn drop(&mut self) {
if self.secret {
leave_cpu_state(self.cpu_state);
}
}
}