use crate::agent::collateral; use dcap_qvl::verify; use hex::{decode, encode}; use near_sdk::{env, require}; /// Verifies an agent's SGX/TDX quote and returns extracted codehashes pub fn verify_agent_quote( quote_hex: String, collateral: String, _checksum: String, tcb_info: String, ) -> (String, String) { let collateral = collateral::get_collateral(collateral); let quote = decode(quote_hex).unwrap(); let now = env::block_timestamp() / 1000000000; let result = verify::verify("e, &collateral, now).expect("report is not verified"); let report = result.report.as_td10().unwrap(); let report_data = format!("{}", String::from_utf8_lossy(&report.report_data)); // verify the predecessor matches the report data require!( env::predecessor_account_id() == report_data, format!("predecessor_account_id != report_data: {}", report_data) ); let rtmr3 = encode(report.rt_mr3.to_vec()); collateral::verify_codehash(tcb_info, rtmr3) }