110 lines
2.2 KiB
Rust
110 lines
2.2 KiB
Rust
use std::boxed::Box;
|
|
use libc::{c_void};
|
|
|
|
use sgx_types::{
|
|
sgx_report_data_t, sgx_ql_qv_result_t
|
|
};
|
|
|
|
mod dcap_quote;
|
|
pub use crate::dcap_quote::*;
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn dcap_quote_open() -> *mut c_void {
|
|
Box::into_raw(Box::new(DcapQuote::new())) as *mut c_void
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn dcap_get_quote_size(handle: *mut c_void) -> u32 {
|
|
if handle.is_null() {
|
|
return 0
|
|
}
|
|
|
|
let dcap = unsafe {
|
|
&mut *(handle as *mut DcapQuote)
|
|
};
|
|
|
|
dcap.get_quote_size()
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn dcap_generate_quote(
|
|
handle: *mut c_void,
|
|
quote_buf: *mut u8,
|
|
report_data: *const sgx_report_data_t) -> i32
|
|
{
|
|
if handle.is_null() {
|
|
return -1
|
|
}
|
|
|
|
let dcap = unsafe {
|
|
&mut *(handle as *mut DcapQuote)
|
|
};
|
|
|
|
dcap.generate_quote(quote_buf, report_data).unwrap();
|
|
|
|
0
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn dcap_get_supplemental_data_size(handle: *mut c_void) -> u32 {
|
|
if handle.is_null() {
|
|
return 0
|
|
}
|
|
|
|
let dcap = unsafe {
|
|
&mut *(handle as *mut DcapQuote)
|
|
};
|
|
|
|
dcap.get_supplemental_data_size()
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn dcap_verify_quote(
|
|
handle: *mut c_void,
|
|
quote_buf: *const u8,
|
|
quote_size: u32,
|
|
collateral_expiration_status: *mut u32,
|
|
quote_verification_result: *mut sgx_ql_qv_result_t,
|
|
supplemental_data_size: u32,
|
|
supplemental_data: *mut u8) -> i32
|
|
{
|
|
if handle.is_null() {
|
|
return -1
|
|
}
|
|
|
|
let dcap = unsafe {
|
|
&mut *(handle as *mut DcapQuote)
|
|
};
|
|
|
|
let mut verify_arg = IoctlVerDCAPQuoteArg {
|
|
quote_buf: quote_buf,
|
|
quote_size: quote_size,
|
|
collateral_expiration_status: collateral_expiration_status,
|
|
quote_verification_result: quote_verification_result,
|
|
supplemental_data_size: supplemental_data_size,
|
|
supplemental_data: supplemental_data,
|
|
};
|
|
|
|
dcap.verify_quote(&mut verify_arg).unwrap();
|
|
|
|
0
|
|
}
|
|
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn dcap_quote_close(handle: *mut c_void) {
|
|
if handle.is_null() {
|
|
return
|
|
}
|
|
|
|
let dcap = unsafe {
|
|
&mut *(handle as *mut DcapQuote)
|
|
};
|
|
|
|
dcap.close();
|
|
|
|
unsafe {
|
|
Box::from_raw(handle);
|
|
}
|
|
}
|