117 lines
2.4 KiB
Rust
117 lines
2.4 KiB
Rust
mod occlum_dcap;
|
|
mod prelude;
|
|
|
|
pub use crate::occlum_dcap::*;
|
|
pub use crate::prelude::*;
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn dcap_quote_open() -> *mut c_void {
|
|
if let Ok(fd) = DcapQuote::new() {
|
|
Box::into_raw(Box::new(fd)) as *mut c_void
|
|
} else {
|
|
std::ptr::null_mut::<u8>() 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().unwrap_or(0)
|
|
}
|
|
|
|
#[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_or(-1)
|
|
}
|
|
|
|
#[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().unwrap_or(0)
|
|
}
|
|
|
|
#[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_size,
|
|
collateral_expiration_status,
|
|
quote_verification_result,
|
|
supplemental_data_size,
|
|
supplemental_data,
|
|
};
|
|
|
|
dcap.verify_quote(&mut verify_arg).unwrap_or(-1)
|
|
}
|
|
|
|
/*
|
|
#[no_mangle]
|
|
pub extern "C" fn dcap_generate_key(
|
|
handle: *mut c_void,
|
|
key: *mut sgx_key_128bit_t,
|
|
key_request: *const sgx_key_request_t,
|
|
) -> i32 {
|
|
if handle.is_null() {
|
|
return -1;
|
|
}
|
|
|
|
let dcap = unsafe { &mut *(handle as *mut DcapQuote) };
|
|
|
|
let mut key_arg = IoctlGetKeyArg {
|
|
key_request,
|
|
key
|
|
};
|
|
|
|
dcap.generate_key(&mut key_arg).unwrap_or(-1)
|
|
}
|
|
*/
|
|
|
|
#[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);
|
|
}
|
|
}
|