Update dcap demo to support dumping SGX KSS info
Signed-off-by: Zheng, Qi <huaiqing.zq@antgroup.com>
This commit is contained in:
parent
7db9d9b955
commit
a26a7627fe
@ -5,6 +5,46 @@
|
|||||||
#include "sgx_quote_3.h"
|
#include "sgx_quote_3.h"
|
||||||
#include "dcap_quote.h"
|
#include "dcap_quote.h"
|
||||||
|
|
||||||
|
|
||||||
|
void dump_quote_info(sgx_quote3_t *p_quote)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
sgx_report_body_t *p_rep_body;
|
||||||
|
sgx_report_data_t *p_rep_data;
|
||||||
|
sgx_ql_auth_data_t *p_auth_data;
|
||||||
|
sgx_ql_ecdsa_sig_data_t *p_sig_data;
|
||||||
|
sgx_ql_certification_data_t *p_cert_data;
|
||||||
|
uint64_t*pll;
|
||||||
|
|
||||||
|
p_rep_body = (sgx_report_body_t *)(&p_quote->report_body);
|
||||||
|
p_rep_data = (sgx_report_data_t *)(&p_rep_body->report_data);
|
||||||
|
p_sig_data = (sgx_ql_ecdsa_sig_data_t *)p_quote->signature_data;
|
||||||
|
p_auth_data = (sgx_ql_auth_data_t*)p_sig_data->auth_certification_data;
|
||||||
|
p_cert_data = (sgx_ql_certification_data_t *)((uint8_t *)p_auth_data + sizeof(*p_auth_data) + p_auth_data->size);
|
||||||
|
|
||||||
|
printf("cert_key_type = 0x%x\n", p_cert_data->cert_key_type);
|
||||||
|
|
||||||
|
printf("\nSGX ISV Family ID:\n");
|
||||||
|
pll = (uint64_t *)p_rep_body->isv_family_id;
|
||||||
|
printf("\tLow 8 bytes: \t0x%08lx\n", *pll++);
|
||||||
|
printf("\tHigh 8 bytes: \t0x%08lx\n", *pll);
|
||||||
|
|
||||||
|
printf("\nSGX ISV EXT Product ID:\n");
|
||||||
|
pll = (uint64_t *)p_rep_body->isv_ext_prod_id;
|
||||||
|
printf("\tLow 8 bytes: \t0x%08lx\n", *pll++);
|
||||||
|
printf("\tHigh 8 bytes: \t0x%08lx\n", *pll);
|
||||||
|
|
||||||
|
printf("\nSGX CONFIG ID:");
|
||||||
|
for (i = 0; i < SGX_CONFIGID_SIZE; i++) {
|
||||||
|
if (!(i % 16))
|
||||||
|
printf("\n\t");
|
||||||
|
printf("%02x ", p_rep_body->config_id[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n\nSGX CONFIG SVN:\n");
|
||||||
|
printf("\t0x%04x\n", p_rep_body->config_svn);
|
||||||
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
void *handle;
|
void *handle;
|
||||||
uint32_t quote_size, supplemental_size;
|
uint32_t quote_size, supplemental_size;
|
||||||
@ -12,9 +52,6 @@ void main() {
|
|||||||
sgx_quote3_t *p_quote;
|
sgx_quote3_t *p_quote;
|
||||||
sgx_report_body_t *p_rep_body;
|
sgx_report_body_t *p_rep_body;
|
||||||
sgx_report_data_t *p_rep_data;
|
sgx_report_data_t *p_rep_data;
|
||||||
sgx_ql_auth_data_t *p_auth_data;
|
|
||||||
sgx_ql_ecdsa_sig_data_t *p_sig_data;
|
|
||||||
sgx_ql_certification_data_t *p_cert_data;
|
|
||||||
int32_t ret;
|
int32_t ret;
|
||||||
|
|
||||||
handle = dcap_quote_open();
|
handle = dcap_quote_open();
|
||||||
@ -44,16 +81,13 @@ void main() {
|
|||||||
p_quote = (sgx_quote3_t *)p_quote_buffer;
|
p_quote = (sgx_quote3_t *)p_quote_buffer;
|
||||||
p_rep_body = (sgx_report_body_t *)(&p_quote->report_body);
|
p_rep_body = (sgx_report_body_t *)(&p_quote->report_body);
|
||||||
p_rep_data = (sgx_report_data_t *)(&p_rep_body->report_data);
|
p_rep_data = (sgx_report_data_t *)(&p_rep_body->report_data);
|
||||||
p_sig_data = (sgx_ql_ecdsa_sig_data_t *)p_quote->signature_data;
|
|
||||||
p_auth_data = (sgx_ql_auth_data_t*)p_sig_data->auth_certification_data;
|
|
||||||
p_cert_data = (sgx_ql_certification_data_t *)((uint8_t *)p_auth_data + sizeof(*p_auth_data) + p_auth_data->size);
|
|
||||||
|
|
||||||
if (memcmp((void *)p_rep_data, (void *)&report_data, sizeof(sgx_report_data_t)) != 0) {
|
if (memcmp((void *)p_rep_data, (void *)&report_data, sizeof(sgx_report_data_t)) != 0) {
|
||||||
printf("mismathced report data\n");
|
printf("mismathced report data\n");
|
||||||
goto CLEANUP;
|
goto CLEANUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("cert_key_type = 0x%x\n", p_cert_data->cert_key_type);
|
dump_quote_info(p_quote);
|
||||||
|
|
||||||
supplemental_size = dcap_get_supplemental_data_size(handle);
|
supplemental_size = dcap_get_supplemental_data_size(handle);
|
||||||
printf("supplemental_size size = %d\n", supplemental_size);
|
printf("supplemental_size size = %d\n", supplemental_size);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
extern crate dcap_quote;
|
extern crate dcap_quote;
|
||||||
use std::str;
|
use std::str;
|
||||||
|
use std::convert::TryFrom;
|
||||||
use dcap_quote::*;
|
use dcap_quote::*;
|
||||||
use sgx_types::{
|
use sgx_types::{
|
||||||
sgx_report_data_t, sgx_ql_qv_result_t, sgx_report_body_t, sgx_quote3_t
|
sgx_report_data_t, sgx_ql_qv_result_t, sgx_report_body_t, sgx_quote3_t
|
||||||
@ -78,6 +79,44 @@ impl DcapDemo {
|
|||||||
|
|
||||||
Ok( quote_verification_result )
|
Ok( quote_verification_result )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn dcap_dump_quote_info(&mut self) {
|
||||||
|
let report_body_ptr = self.dcap_quote_get_report_body().unwrap();
|
||||||
|
|
||||||
|
// Dump ISV FAMILY ID
|
||||||
|
let family_id = unsafe { (*report_body_ptr).isv_family_id };
|
||||||
|
let (fam_id_l, fam_id_h) = family_id.split_at(8);
|
||||||
|
let fam_id_l = <&[u8; 8]>::try_from(fam_id_l).unwrap();
|
||||||
|
let fam_id_l = u64::from_le_bytes(*fam_id_l);
|
||||||
|
let fam_id_h = <&[u8; 8]>::try_from(fam_id_h).unwrap();
|
||||||
|
let fam_id_h = u64::from_le_bytes(*fam_id_h);
|
||||||
|
println!("\nSGX ISV Family ID:");
|
||||||
|
println!("\t Low 8 bytes: 0x{:016x?}\t", fam_id_l);
|
||||||
|
println!("\t high 8 bytes: 0x{:016x?}\t", fam_id_h);
|
||||||
|
|
||||||
|
// Dump ISV EXT Product ID
|
||||||
|
let prod_id = unsafe { (*report_body_ptr).isv_ext_prod_id };
|
||||||
|
let (prod_id_l, prod_id_h) = prod_id.split_at(8);
|
||||||
|
let prod_id_l = <&[u8; 8]>::try_from(prod_id_l).unwrap();
|
||||||
|
let prod_id_l = u64::from_le_bytes(*prod_id_l);
|
||||||
|
let prod_id_h = <&[u8; 8]>::try_from(prod_id_h).unwrap();
|
||||||
|
let prod_id_h = u64::from_le_bytes(*prod_id_h);
|
||||||
|
println!("\nSGX ISV EXT Product ID:");
|
||||||
|
println!("\t Low 8 bytes: 0x{:016x?}\t", prod_id_l);
|
||||||
|
println!("\t high 8 bytes: 0x{:016x?}\t", prod_id_h);
|
||||||
|
|
||||||
|
// Dump CONFIG ID
|
||||||
|
let conf_id = unsafe { (*report_body_ptr).config_id };
|
||||||
|
println!("\nSGX CONFIG ID:");
|
||||||
|
println!("\t{:02x?}", &conf_id[..16]);
|
||||||
|
println!("\t{:02x?}", &conf_id[16..32]);
|
||||||
|
println!("\t{:02x?}", &conf_id[32..48]);
|
||||||
|
println!("\t{:02x?}", &conf_id[48..]);
|
||||||
|
|
||||||
|
// Dump CONFIG SVN
|
||||||
|
let conf_svn = unsafe { (*report_body_ptr).config_svn };
|
||||||
|
println!("\nSGX CONFIG SVN:\t {:04x?}", conf_svn);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for DcapDemo {
|
impl Drop for DcapDemo {
|
||||||
@ -103,6 +142,8 @@ fn main() {
|
|||||||
println!("Report data from Quote: '{}' doesn't match !!!", string);
|
println!("Report data from Quote: '{}' doesn't match !!!", string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dcap_demo.dcap_dump_quote_info();
|
||||||
|
|
||||||
let result = dcap_demo.dcap_quote_ver().unwrap();
|
let result = dcap_demo.dcap_quote_ver().unwrap();
|
||||||
match result {
|
match result {
|
||||||
sgx_ql_qv_result_t::SGX_QL_QV_RESULT_OK => {
|
sgx_ql_qv_result_t::SGX_QL_QV_RESULT_OK => {
|
||||||
|
Loading…
Reference in New Issue
Block a user