Skip to main content

islet_sdk/
attester.rs

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(), // Hold user_data temporarily
10    })
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(), // Dummy field
30        }),
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    // Encode user_data to challenge claim in the realm token
40    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}