mirror of
https://github.com/matter-labs/teepot.git
synced 2025-07-21 07:03:56 +02:00
chore(deps): prepare release 0.6.0
- vendor unpublished tdx-attest-rs and tdx-attest-sys crates to be able to publish to crates.io - Updated package versions in `Cargo.toml` and `Cargo.lock` to 0.6.0. Signed-off-by: Harald Hoyer <harald@matterlabs.dev>
This commit is contained in:
parent
8d965aa388
commit
b4e0014e4e
22 changed files with 1772 additions and 189 deletions
293
crates/teepot-tdx-attest-rs/Cargo.lock
generated
Normal file
293
crates/teepot-tdx-attest-rs/Cargo.lock
generated
Normal file
|
@ -0,0 +1,293 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bindgen"
|
||||
version = "0.70.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cexpr",
|
||||
"clang-sys",
|
||||
"itertools",
|
||||
"log",
|
||||
"prettyplease",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"regex",
|
||||
"rustc-hash",
|
||||
"shlex",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
|
||||
|
||||
[[package]]
|
||||
name = "cexpr"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
|
||||
dependencies = [
|
||||
"nom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
|
||||
|
||||
[[package]]
|
||||
name = "clang-sys"
|
||||
version = "1.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
|
||||
dependencies = [
|
||||
"glob",
|
||||
"libc",
|
||||
"libloading",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
|
||||
|
||||
[[package]]
|
||||
name = "glob"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
|
||||
|
||||
[[package]]
|
||||
name = "itertools"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
|
||||
dependencies = [
|
||||
"either",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.174"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
|
||||
|
||||
[[package]]
|
||||
name = "libloading"
|
||||
version = "0.8.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.7.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
|
||||
|
||||
[[package]]
|
||||
name = "minimal-lexical"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "7.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
"minimal-lexical",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "prettyplease"
|
||||
version = "0.2.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.95"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.40"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-automata",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-automata"
|
||||
version = "0.4.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.8.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
||||
|
||||
[[package]]
|
||||
name = "rustc-hash"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
||||
|
||||
[[package]]
|
||||
name = "shlex"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.104"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "teepot-tdx-attest-rs"
|
||||
version = "0.1.2"
|
||||
dependencies = [
|
||||
"teepot-tdx-attest-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "teepot-tdx-attest-sys"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.53.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm",
|
||||
"windows_aarch64_msvc",
|
||||
"windows_i686_gnu",
|
||||
"windows_i686_gnullvm",
|
||||
"windows_i686_msvc",
|
||||
"windows_x86_64_gnu",
|
||||
"windows_x86_64_gnullvm",
|
||||
"windows_x86_64_msvc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.53.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.53.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.53.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnullvm"
|
||||
version = "0.53.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.53.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.53.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.53.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.53.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
|
15
crates/teepot-tdx-attest-rs/Cargo.toml
Normal file
15
crates/teepot-tdx-attest-rs/Cargo.toml
Normal file
|
@ -0,0 +1,15 @@
|
|||
# Fork of the original crate: https://github.com/intel/SGXDataCenterAttestationPrimitives
|
||||
|
||||
[package]
|
||||
name = "teepot-tdx-attest-rs"
|
||||
version = "0.1.2"
|
||||
edition = "2021"
|
||||
license = "BSD-3-Clause"
|
||||
repository = "https://github.com/matter-labs/teepot"
|
||||
homepage = "https://github.com/matter-labs/teepot"
|
||||
description = "Fork of tdx-attest-rs"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
tdx-attest-sys = { version = "0.1.0", path = "../teepot-tdx-attest-sys", package = "teepot-tdx-attest-sys" }
|
38
crates/teepot-tdx-attest-rs/License.txt
Normal file
38
crates/teepot-tdx-attest-rs/License.txt
Normal file
|
@ -0,0 +1,38 @@
|
|||
BSD License
|
||||
|
||||
Copyright (C) 2011-2021 Intel Corporation. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Intel Corporation nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
==============================================================
|
||||
|
||||
pce.signed.dll, qve.signed.dll,id_enclave.signed.dll and qe3.signed.dll,
|
||||
libsgx_pce.signed.so, libsgx_qve.signed.so, libsgx_id_enclave.signed.so,
|
||||
libsgx_qe3.signed.so and libsgx_tdqe.signed.so are licensed under
|
||||
3-Clause BSD License.
|
||||
|
302
crates/teepot-tdx-attest-rs/src/lib.rs
Normal file
302
crates/teepot-tdx-attest-rs/src/lib.rs
Normal file
|
@ -0,0 +1,302 @@
|
|||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
/*
|
||||
* Copyright (C) 2011-2022 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
//! This is the Intel TDX attestation library for Rust.
|
||||
#![allow(non_camel_case_types)]
|
||||
|
||||
use std::{mem, option::Option};
|
||||
pub use tdx_attest_sys::{
|
||||
tdx_attest_error_t, tdx_report_data_t, tdx_report_t, tdx_rtmr_event_t, tdx_uuid_t,
|
||||
};
|
||||
|
||||
/// Request a Quote of the calling TD.
|
||||
///
|
||||
/// # Param
|
||||
/// - **tdx_report_data**\
|
||||
/// A set of data that the caller/TD wants to cryptographically bind to the Quote, typically a hash. May be all zeros for the Report data.
|
||||
/// - **att_key_id_list**\
|
||||
/// List (array) of the attestation key IDs supported by the Quote verifier.
|
||||
/// - **att_key_id**\
|
||||
/// The selected attestation key ID when the function returns.
|
||||
/// - **flags**\
|
||||
/// Reserved, must be zero.
|
||||
///
|
||||
/// # Return
|
||||
/// - ***TDX_ATTEST_SUCCESS***\
|
||||
/// Successfully generated the Quote.\
|
||||
/// - ***TDX_ATTEST_ERROR_UNSUPPORTED_ATT_KEY_ID***\
|
||||
/// The platform Quoting infrastructure does not support any of the keys.\
|
||||
/// - ***TDX_ATT_ERROR_INVALID_PARAMETER***\
|
||||
/// The parameter is incorrect.\
|
||||
/// - ***TDX_ATTEST_ERROR_DEVICE_FAILURE***\
|
||||
/// Failed to acess tdx attest device.\
|
||||
/// - ***TDX_ATTEST_ERROR_VSOCK_FAILURE***\
|
||||
/// vsock related failure.\
|
||||
/// - ***TDX_ATTEST_ERROR_OUT_OF_MEMORY***\
|
||||
/// Heap memory allocation error in library or enclave.\
|
||||
/// - ***TDX_ATT_ERROR_UNEXPECTED***\
|
||||
/// An unexpected internal error occurred.\
|
||||
///
|
||||
/// # Examples
|
||||
/// ```
|
||||
/// use tdx_attest_rs::*;
|
||||
///
|
||||
/// let tdx_report_data = tdx_report_data_t{
|
||||
/// d: [0; 64usize],
|
||||
/// };
|
||||
/// let att_key_id_list = [tdx_uuid_t{
|
||||
/// d: [0; 16usize],
|
||||
/// }; 2usize];
|
||||
/// let list_size = 1024;
|
||||
/// let mut att_key_id = tdx_uuid_t{
|
||||
/// d: [0; 16usize],
|
||||
/// };
|
||||
/// let result = tdx_att_get_quote(Some(&tdx_report_data), Some(&att_key_id_list), Some(&mut att_key_id), 0);
|
||||
/// ```
|
||||
pub fn tdx_att_get_quote(
|
||||
tdx_report_data: Option<&tdx_report_data_t>,
|
||||
att_key_id_list: Option<&[tdx_uuid_t]>,
|
||||
att_key_id: Option<&mut tdx_uuid_t>,
|
||||
flags: u32,
|
||||
) -> (tdx_attest_error_t, Option<Vec<u8>>) {
|
||||
let p_tdx_report_data = match tdx_report_data {
|
||||
Some(p) => p as *const tdx_report_data_t,
|
||||
None => &tdx_report_data_t { d: [0; 64usize] },
|
||||
};
|
||||
let (p_att_key_id_list, att_key_id_list_size) = match att_key_id_list {
|
||||
Some(p) => (p.as_ptr() as *const tdx_uuid_t, p.len() as u32),
|
||||
None => (std::ptr::null(), 0u32),
|
||||
};
|
||||
let p_att_key_id = match att_key_id {
|
||||
Some(p) => p as *mut tdx_uuid_t,
|
||||
None => std::ptr::null_mut(),
|
||||
};
|
||||
let mut buf = std::ptr::null_mut();
|
||||
let mut buf_len = 0;
|
||||
unsafe {
|
||||
let result = tdx_attest_sys::tdx_att_get_quote(
|
||||
p_tdx_report_data,
|
||||
p_att_key_id_list,
|
||||
att_key_id_list_size,
|
||||
p_att_key_id,
|
||||
&mut buf,
|
||||
&mut buf_len,
|
||||
flags,
|
||||
);
|
||||
match result {
|
||||
tdx_attest_error_t::TDX_ATTEST_SUCCESS => {
|
||||
assert!(!buf.is_null());
|
||||
assert!(buf_len > 0);
|
||||
let quote = std::slice::from_raw_parts(buf, buf_len as usize).to_vec();
|
||||
tdx_attest_sys::tdx_att_free_quote(buf);
|
||||
return (result, Some(quote));
|
||||
}
|
||||
_ => return (result, None),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Request a TDX Report of the calling TD.
|
||||
///
|
||||
/// # Param
|
||||
/// - **tdx_report_data**\
|
||||
/// A set of data that the caller/TD wants to cryptographically bind to the Quote, typically a hash. May be all zeros for the Report data.
|
||||
/// - **tdx_report**\
|
||||
/// the generated TDX Report.
|
||||
///
|
||||
/// # Return
|
||||
/// - ***TDX_ATTEST_SUCCESS***\
|
||||
/// Successfully generate report.\
|
||||
/// - ***TDX_ATTEST_ERROR_INVALID_PARAMETER***\
|
||||
/// The parameter is incorrect.
|
||||
/// - ***TDX_ATTEST_ERROR_DEVICE_FAILURE***\
|
||||
/// Failed to acess tdx attest device.\
|
||||
/// - ***TDX_ATTEST_ERROR_REPORT_FAILURE***\
|
||||
/// Failed to get the TD Report.\
|
||||
/// - ***TDX_ATT_ERROR_UNEXPECTED***\
|
||||
/// An unexpected internal error occurred.\
|
||||
///
|
||||
/// # Examples
|
||||
/// ```
|
||||
/// use tdx_attest_rs::*;
|
||||
///
|
||||
/// let tdx_report_data = tdx_report_data_t{
|
||||
/// d: [0; 64usize],
|
||||
/// };
|
||||
/// let mut tdx_report =tdx_report_t{
|
||||
/// d: [0; 1024usize],
|
||||
/// };
|
||||
/// let result = tdx_att_get_report(Some(&tdx_report_data), &mut tdx_report);
|
||||
/// ```
|
||||
pub fn tdx_att_get_report(
|
||||
tdx_report_data: Option<&tdx_report_data_t>,
|
||||
tdx_report: &mut tdx_report_t,
|
||||
) -> tdx_attest_error_t {
|
||||
let p_tdx_report_data = match tdx_report_data {
|
||||
Some(p) => p as *const tdx_report_data_t,
|
||||
None => &tdx_report_data_t { d: [0; 64usize] },
|
||||
};
|
||||
unsafe { tdx_attest_sys::tdx_att_get_report(p_tdx_report_data, tdx_report) }
|
||||
}
|
||||
|
||||
/// Extend one of the TDX runtime measurement registers (RTMRs).
|
||||
///
|
||||
/// # Param
|
||||
/// - **rtmr_event**\
|
||||
/// A set of data that contains the index of the RTMR to extend, the data with which to extend it and a description of the data.
|
||||
///
|
||||
/// # Return
|
||||
/// - ***TDX_ATTEST_SUCCESS***\
|
||||
/// Successfully extended the RTMR.\
|
||||
/// - ***TDX_ATTEST_ERROR_INVALID_PARAMETER***\
|
||||
/// The parameter is incorrect.
|
||||
/// - ***TDX_ATTEST_ERROR_DEVICE_FAILURE***\
|
||||
/// Failed to acess tdx attest device.\
|
||||
/// - ***TDX_ATTEST_ERROR_INVALID_RTMR_INDEX***\
|
||||
/// Only supported RTMR index is 2 and 3.\
|
||||
/// - ***TDX_ATTEST_ERROR_EXTEND_FAILURE***\
|
||||
/// Failed to extend data.\
|
||||
/// - ***TDX_ATTEST_ERROR_NOT_SUPPORTED***\
|
||||
/// rtmr_event.event_data_size != 0.\
|
||||
/// - ***TDX_ATT_ERROR_UNEXPECTED***\
|
||||
/// An unexpected internal error occurred.\
|
||||
///
|
||||
/// # Examples
|
||||
/// ```
|
||||
/// use tdx_attest_rs::*;
|
||||
///
|
||||
/// let rtmr_event = [0u8; 68usize];
|
||||
/// let result = tdx_att_extend(&rtmr_event);
|
||||
/// ```
|
||||
|
||||
pub fn tdx_att_extend(rtmr_event: &[u8]) -> tdx_attest_error_t {
|
||||
if rtmr_event.len() < mem::size_of::<tdx_rtmr_event_t>() {
|
||||
return tdx_attest_error_t::TDX_ATTEST_ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
unsafe {
|
||||
let s: tdx_rtmr_event_t = std::ptr::read(rtmr_event.as_ptr() as *const _);
|
||||
if rtmr_event.len() - mem::size_of::<tdx_rtmr_event_t>() != s.event_data_size as usize {
|
||||
return tdx_attest_error_t::TDX_ATTEST_ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
tdx_attest_sys::tdx_att_extend(rtmr_event.as_ptr() as *const tdx_rtmr_event_t)
|
||||
}
|
||||
}
|
||||
|
||||
/// Retrieve the list of attestation key IDs supported by the platform.
|
||||
///
|
||||
/// # Param
|
||||
///
|
||||
/// # Return
|
||||
/// - ***TDX_ATTEST_SUCCESS***\
|
||||
/// Successfully populated the att_key_id_list.\
|
||||
/// - ***TDX_ATT_ERROR_UNEXPECTED***\
|
||||
/// An unexpected internal error occurred.\
|
||||
///
|
||||
/// # Examples
|
||||
/// ```
|
||||
/// use tdx_attest_rs::*;
|
||||
/// let (result, att_key_id_list) = tdx_att_get_supported_att_key_ids();
|
||||
/// ```
|
||||
pub fn tdx_att_get_supported_att_key_ids() -> (tdx_attest_error_t, Option<Vec<tdx_uuid_t>>) {
|
||||
let mut list_count = 0;
|
||||
unsafe {
|
||||
let result = tdx_attest_sys::tdx_att_get_supported_att_key_ids(
|
||||
std::ptr::null_mut() as *mut tdx_uuid_t,
|
||||
&mut list_count,
|
||||
);
|
||||
match result {
|
||||
tdx_attest_error_t::TDX_ATTEST_SUCCESS => {
|
||||
let mut att_key_id_list = vec![tdx_uuid_t { d: [0; 16usize] }; list_count as usize];
|
||||
let result = tdx_attest_sys::tdx_att_get_supported_att_key_ids(
|
||||
att_key_id_list.as_mut_ptr(),
|
||||
&mut list_count,
|
||||
);
|
||||
match result {
|
||||
tdx_attest_error_t::TDX_ATTEST_SUCCESS => {
|
||||
return (result, Some(att_key_id_list))
|
||||
}
|
||||
_ => return (result, None),
|
||||
}
|
||||
}
|
||||
_ => return (result, None),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_tdx_att_get_report() {
|
||||
let tdx_report_data = tdx_report_data_t { d: [0; 64usize] };
|
||||
let mut tdx_report = tdx_report_t { d: [0; 1024usize] };
|
||||
let result = tdx_att_get_report(Some(&tdx_report_data), &mut tdx_report);
|
||||
assert_eq!(result, tdx_attest_error_t::TDX_ATTEST_ERROR_DEVICE_FAILURE);
|
||||
let result = tdx_att_get_report(None, &mut tdx_report);
|
||||
assert_eq!(result, tdx_attest_error_t::TDX_ATTEST_ERROR_DEVICE_FAILURE);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_tdx_att_get_quote() {
|
||||
let tdx_report_data = tdx_report_data_t { d: [0; 64usize] };
|
||||
let mut att_key_id = tdx_uuid_t { d: [0; 16usize] };
|
||||
let (result, quote) =
|
||||
tdx_att_get_quote(Some(&tdx_report_data), None, Some(&mut att_key_id), 0);
|
||||
println!("att_key_id {:?}", att_key_id.d);
|
||||
match quote {
|
||||
q => println!("quote {:?}", q),
|
||||
}
|
||||
assert_eq!(result, tdx_attest_error_t::TDX_ATTEST_ERROR_DEVICE_FAILURE);
|
||||
let (result, _quote) = tdx_att_get_quote(None, None, None, 0);
|
||||
assert_eq!(result, tdx_attest_error_t::TDX_ATTEST_ERROR_DEVICE_FAILURE);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_tdx_att_extend() {
|
||||
let mut rtmr_event = [0u8; mem::size_of::<tdx_rtmr_event_t>()];
|
||||
rtmr_event[0] = 1;
|
||||
let result = tdx_att_extend(&rtmr_event);
|
||||
assert_eq!(result, tdx_attest_error_t::TDX_ATTEST_ERROR_DEVICE_FAILURE);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_tdx_att_get_supported_att_key_ids() {
|
||||
let (result, att_key_ids) = tdx_att_get_supported_att_key_ids();
|
||||
let ids = att_key_ids.unwrap();
|
||||
println!("att_key_id size {:?}", ids.len());
|
||||
for id in ids {
|
||||
println!("att_key_id {:?}", id.d);
|
||||
}
|
||||
assert_eq!(result, tdx_attest_error_t::TDX_ATTEST_SUCCESS);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue