1use crate::error::Error;
2use crate::report::Report;
3
4#[cfg(target_arch = "x86_64")]
5fn attest_x86_64(user_data: &[u8]) -> Result<Report, Error> {
6 println!("Simulated attestation operation on x86_64.");
7 Ok(Report {
8 buffer: crate::mock::REPORT.to_vec(),
9 user_data: user_data.to_vec(), })
11}
12
13#[cfg(target_arch = "aarch64")]
14fn attest_aarch64(user_data: &[u8]) -> Result<Report, Error> {
15 println!("Getting an attestation report on aarch64.");
16
17 const LEN: usize = rust_rsi::CHALLENGE_LEN as usize;
18 if user_data.len() > LEN {
19 println!("Length of user_data cannot over CHALLENGE_LEN[{}]", LEN);
20 return Err(Error::InvalidArgument);
21 }
22
23 let mut challenge: [u8; LEN] = [0; LEN];
24 challenge[..user_data.len()].clone_from_slice(&user_data);
25
26 match rust_rsi::attestation_token(&challenge) {
27 Ok(token) => Ok(Report {
28 buffer: token,
29 user_data: Vec::new(), }),
31 Err(error) => {
32 println!("Failed to get an attestation report. {:?}", error);
33 Err(Error::Report)
34 }
35 }
36}
37
38pub fn attest(user_data: &[u8]) -> Result<Report, Error> {
39 cfg_if::cfg_if! {
41 if #[cfg(target_arch="x86_64")] {
42 attest_x86_64(user_data)
43 } else {
44 attest_aarch64(user_data)
45 }
46 }
47}