MCPcopy Create free account
hub / github.com/Dstack-TEE/dstack / get_quote_via_vsock

Function get_quote_via_vsock

tdx-attest/src/linux.rs:500–533  ·  view source on GitHub ↗
(report_data: &TdxReportData)

Source from the content-addressed store, hash-verified

498// ============================================================================
499
500fn get_quote_via_vsock(report_data: &TdxReportData) -> Result<Vec<u8>> {
501 use std::io::{Read as _, Write as _};
502
503 let vsock_port = read_vsock_port()?;
504 if vsock_port == 0 {
505 return Err(TdxAttestError::NotSupported(format!(
506 "no vsock port configured in {TDX_ATTEST_CONFIG_PATH}"
507 )));
508 }
509
510 let report = get_report(report_data)?;
511 let request = build_qgs_get_quote_request(&report.0);
512
513 let mut stream = vsock::VsockStream::connect_with_cid_port(vsock::VMADDR_CID_HOST, vsock_port)?;
514
515 let len_header = (request.len() as u32).to_be_bytes();
516 stream.write_all(&len_header)?;
517 stream.write_all(&request)?;
518
519 let mut len_buf = [0u8; QGS_MSG_LEN_PREFIX_SIZE];
520 stream.read_exact(&mut len_buf)?;
521 let msg_len = u32::from_be_bytes(len_buf) as usize;
522
523 if msg_len > QGS_REQ_BUF_SIZE {
524 return Err(TdxAttestError::QuoteFailure(format!(
525 "response too large: {msg_len}"
526 )));
527 }
528
529 let mut response = vec![0u8; msg_len];
530 stream.read_exact(&mut response)?;
531
532 parse_qgs_get_quote_response(&response)
533}
534
535fn read_vsock_port() -> Result<u32> {
536 let content = match fs::read_to_string(TDX_ATTEST_CONFIG_PATH) {

Callers 1

get_quoteFunction · 0.85

Calls 5

read_vsock_portFunction · 0.85
get_reportFunction · 0.70
lenMethod · 0.45

Tested by

no test coverage detected