Get a TDX report for the given report data.
(report_data: &TdxReportData)
| 189 | |
| 190 | /// Get a TDX report for the given report data. |
| 191 | pub fn get_report(report_data: &TdxReportData) -> Result<TdxReport> { |
| 192 | let file = OpenOptions::new() |
| 193 | .read(true) |
| 194 | .write(true) |
| 195 | .open(TDX_GUEST_DEVICE) |
| 196 | .map_err(|e| TdxAttestError::DeviceFailure(format!("open {TDX_GUEST_DEVICE}: {e}")))?; |
| 197 | |
| 198 | let mut req = TdxReportReq { |
| 199 | reportdata: *report_data, |
| 200 | tdreport: [0u8; TDX_REPORT_SIZE], |
| 201 | }; |
| 202 | |
| 203 | let ret = unsafe { libc::ioctl(file.as_raw_fd(), tdx_cmd_get_report0(), &mut req) }; |
| 204 | if ret != 0 { |
| 205 | let err = std::io::Error::last_os_error(); |
| 206 | return Err(TdxAttestError::ReportFailure(format!("ioctl: {err}"))); |
| 207 | } |
| 208 | |
| 209 | Ok(TdxReport(req.tdreport)) |
| 210 | } |
| 211 | |
| 212 | /// Extend a TDX RTMR (Runtime Measurement Register). |
| 213 | /// |