From 98664e45d3c78795f7632330d46029309f92214e Mon Sep 17 00:00:00 2001
From: OuyangHang33 <hank.ouyang@intel.com>
Date: Mon, 26 Feb 2024 22:59:29 +0800
Subject: [PATCH] Create td-shim-interface crate for publishig

Signed-off-by: OuyangHang33 <hank.ouyang@intel.com>
---
 Cargo.toml                                    |   1 +
 Makefile                                      |   2 +-
 sh_script/fuzzing.sh                          |   2 +-
 sh_script/rudra.sh                            |   2 +-
 td-layout/Cargo.toml                          |   2 +-
 td-payload/Cargo.toml                         |   2 +-
 td-payload/src/acpi.rs                        |   2 +-
 td-payload/src/bin/example/main.rs            |   4 +-
 td-payload/src/hob.rs                         |   2 +-
 td-payload/src/mm/mod.rs                      |   2 +-
 td-shim-interface/Cargo.toml                  |  18 +++
 td-shim-interface/README.md                   |  35 +++++
 {td-shim => td-shim-interface}/src/acpi.rs    |   0
 .../src}/fuzz/Cargo.toml                      |   0
 .../src}/fuzz/fuzz_targets/afl_cfv_parser.rs  |   0
 .../src}/fuzz/fuzz_targets/afl_hob_parser.rs  |   0
 .../fuzz/fuzz_targets/afl_payload_parser.rs   |   0
 .../src}/fuzz/fuzz_targets/cfv_parser.rs      |   0
 .../src}/fuzz/fuzz_targets/fuzzlib.rs         |   2 +-
 .../src}/fuzz/fuzz_targets/hob_parser.rs      |   0
 .../src}/fuzz/fuzz_targets/payload_parser.rs  |   0
 .../src}/fuzz/seeds/cfv_parser/cfv            | Bin
 .../src}/fuzz/seeds/hob_parser/hob_buffer     | Bin
 .../src}/fuzz/seeds/payload_parser/fv_buffer  | Bin
 td-shim-interface/src/lib.rs                  | 134 ++++++++++++++++++
 .../src/metadata.rs                           |   2 +-
 .../src/td_uefi_pi}/fv.rs                     |   0
 .../src/td_uefi_pi}/hob.rs                    |   0
 .../src/td_uefi_pi/mod.rs                     |   1 -
 .../src/td_uefi_pi}/pi/boot_mode.rs           |   0
 .../src/td_uefi_pi}/pi/fv.rs                  |   0
 .../src/td_uefi_pi}/pi/guid.rs                |   0
 .../src/td_uefi_pi}/pi/hob.rs                 |   0
 .../src/td_uefi_pi}/pi/mod.rs                 |   0
 td-shim-tools/Cargo.toml                      |   2 +-
 td-shim-tools/src/bin/td-shim-checker/main.rs |   2 +-
 td-shim-tools/src/bin/td-shim-enroll/main.rs  |   2 +-
 td-shim-tools/src/enroller.rs                 |   4 +-
 td-shim-tools/src/linker.rs                   |   4 +-
 td-shim-tools/src/loader.rs                   |   2 +-
 td-shim-tools/src/metadata.rs                 |   6 +-
 td-shim-tools/src/tee_info_hash.rs            |   2 +-
 td-shim/Cargo.toml                            |   2 +-
 td-shim/src/bin/td-shim/acpi.rs               |   2 +-
 td-shim/src/bin/td-shim/main.rs               |   4 +-
 td-shim/src/bin/td-shim/memory.rs             |   6 +-
 td-shim/src/bin/td-shim/mp.rs                 |   2 +-
 td-shim/src/bin/td-shim/payload_hob.rs        |   4 +-
 td-shim/src/bin/td-shim/shim_info.rs          |   8 +-
 td-shim/src/fv.rs                             |   2 +-
 td-shim/src/lib.rs                            |   4 +-
 td-shim/src/reset_vector.rs                   |   4 +-
 td-shim/src/secure_boot.rs                    |   2 +-
 td-uefi-pi/Cargo.toml                         |  13 --
 tests/test-td-payload/Cargo.toml              |   2 +-
 tests/test-td-payload/src/main.rs             |   2 +-
 tests/test-td-payload/src/testacpi.rs         |   4 +-
 tests/test-td-payload/src/testmemmap.rs       |   2 +-
 tests/test-td-payload/src/testtrustedboot.rs  |   4 +-
 59 files changed, 239 insertions(+), 65 deletions(-)
 create mode 100644 td-shim-interface/Cargo.toml
 create mode 100644 td-shim-interface/README.md
 rename {td-shim => td-shim-interface}/src/acpi.rs (100%)
 rename {td-uefi-pi => td-shim-interface/src}/fuzz/Cargo.toml (100%)
 rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/afl_cfv_parser.rs (100%)
 rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/afl_hob_parser.rs (100%)
 rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/afl_payload_parser.rs (100%)
 rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/cfv_parser.rs (100%)
 rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/fuzzlib.rs (97%)
 rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/hob_parser.rs (100%)
 rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/payload_parser.rs (100%)
 rename {td-uefi-pi => td-shim-interface/src}/fuzz/seeds/cfv_parser/cfv (100%)
 rename {td-uefi-pi => td-shim-interface/src}/fuzz/seeds/hob_parser/hob_buffer (100%)
 rename {td-uefi-pi => td-shim-interface/src}/fuzz/seeds/payload_parser/fv_buffer (100%)
 create mode 100644 td-shim-interface/src/lib.rs
 rename {td-shim => td-shim-interface}/src/metadata.rs (99%)
 rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/fv.rs (100%)
 rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/hob.rs (100%)
 rename td-uefi-pi/src/lib.rs => td-shim-interface/src/td_uefi_pi/mod.rs (99%)
 rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/pi/boot_mode.rs (100%)
 rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/pi/fv.rs (100%)
 rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/pi/guid.rs (100%)
 rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/pi/hob.rs (100%)
 rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/pi/mod.rs (100%)
 delete mode 100644 td-uefi-pi/Cargo.toml

diff --git a/Cargo.toml b/Cargo.toml
index 52622029..31469800 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -19,6 +19,7 @@ members = [
     "tests/test-td-paging",
     "tests/test-td-payload",
     "xtask",
+    "td-shim-interface",
 ]
 
 # the profile used for debug build of `td-shim` and `td-payload`
diff --git a/Makefile b/Makefile
index 3f3320f5..6499c964 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,7 @@ else
 	export BUILD_TYPE_FLAG=
 endif
 
-GENERIC_LIB_CRATES = td-layout td-logger td-uefi-pi td-loader cc-measurement
+GENERIC_LIB_CRATES = td-layout td-logger td-shim-interface td-loader cc-measurement
 NIGHTLY_LIB_CRATES = td-exception td-paging tdx-tdcall
 SHIM_CRATES = td-shim td-payload
 TEST_CRATES = test-td-exception test-td-paging
diff --git a/sh_script/fuzzing.sh b/sh_script/fuzzing.sh
index 446e52bc..4af7586a 100644
--- a/sh_script/fuzzing.sh
+++ b/sh_script/fuzzing.sh
@@ -8,7 +8,7 @@ readonly script_name=${0##*/}
 
 fuzz_folder=(
     "td-loader"
-    "td-uefi-pi"
+    "td-shim-interface/src"
     "td-shim"
 )
 
diff --git a/sh_script/rudra.sh b/sh_script/rudra.sh
index b10c8e5a..b88a5dfb 100644
--- a/sh_script/rudra.sh
+++ b/sh_script/rudra.sh
@@ -25,7 +25,7 @@ paths=(
     "td-paging"
     "td-payload"
     "td-shim"
-    "td-uefi-pi"
+    "td-shim-interface/src"
     "td-shim-tools"
     "tdx-tdcall"
 )
diff --git a/td-layout/Cargo.toml b/td-layout/Cargo.toml
index 2e636bdc..1d525b0c 100644
--- a/td-layout/Cargo.toml
+++ b/td-layout/Cargo.toml
@@ -12,7 +12,7 @@ edition = "2018"
 [dependencies]
 scroll = { version = "0.10", default-features = false, features = ["derive"]}
 log = "0.4.13"
-td-uefi-pi =  { path = "../td-uefi-pi" }
+td-shim-interface =  { path = "../td-shim-interface" }
 
 [dev-dependencies]
 memoffset = "0.6"
\ No newline at end of file
diff --git a/td-payload/Cargo.toml b/td-payload/Cargo.toml
index 75a759fe..4604e3ea 100644
--- a/td-payload/Cargo.toml
+++ b/td-payload/Cargo.toml
@@ -23,7 +23,7 @@ serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
 spin = "0.9"
 td-logger =  { path = "../td-logger" }
 td-shim = { path = "../td-shim", default-features = false }
-td-uefi-pi =  { path = "../td-uefi-pi" }
+td-shim-interface =  { path = "../td-shim-interface" }
 td-exception =  { path = "../td-exception" }
 td-paging =  { path = "../td-paging" }
 x86 = "0.47.0"
diff --git a/td-payload/src/acpi.rs b/td-payload/src/acpi.rs
index 6fbbf2f0..bd6fe523 100644
--- a/td-payload/src/acpi.rs
+++ b/td-payload/src/acpi.rs
@@ -6,7 +6,7 @@ use alloc::vec::Vec;
 use scroll::Pread;
 use spin::Once;
 use td_shim::TD_ACPI_TABLE_HOB_GUID;
-use td_uefi_pi::{
+use td_shim_interface::td_uefi_pi::{
     hob as hob_lib,
     pi::hob::{GuidExtension, Header, HOB_TYPE_END_OF_HOB_LIST, HOB_TYPE_GUID_EXTENSION},
 };
diff --git a/td-payload/src/bin/example/main.rs b/td-payload/src/bin/example/main.rs
index 50c19581..36dd2053 100644
--- a/td-payload/src/bin/example/main.rs
+++ b/td-payload/src/bin/example/main.rs
@@ -26,8 +26,8 @@ use td_payload as _;
 use td_payload::println;
 use td_shim::e820::{E820Entry, E820Type};
 use td_shim::{TD_ACPI_TABLE_HOB_GUID, TD_E820_TABLE_HOB_GUID};
-use td_uefi_pi::hob;
-use td_uefi_pi::pi;
+use td_shim_interface::td_uefi_pi::hob;
+use td_shim_interface::td_uefi_pi::pi;
 use zerocopy::FromBytes;
 
 #[macro_use]
diff --git a/td-payload/src/hob.rs b/td-payload/src/hob.rs
index 170792b6..ab0917fc 100644
--- a/td-payload/src/hob.rs
+++ b/td-payload/src/hob.rs
@@ -5,7 +5,7 @@
 use core::mem::size_of;
 use scroll::Pread;
 use spin::Once;
-use td_uefi_pi::{
+use td_shim_interface::td_uefi_pi::{
     hob::check_hob_integrity,
     pi::hob::{HandoffInfoTable, HOB_TYPE_HANDOFF},
 };
diff --git a/td-payload/src/mm/mod.rs b/td-payload/src/mm/mod.rs
index c794a1b4..d2479ae5 100644
--- a/td-payload/src/mm/mod.rs
+++ b/td-payload/src/mm/mod.rs
@@ -11,7 +11,7 @@ use td_shim::{
     e820::{E820Entry, E820Type},
     TD_E820_TABLE_HOB_GUID,
 };
-use td_uefi_pi::{
+use td_shim_interface::td_uefi_pi::{
     hob as hob_lib,
     pi::hob::{GuidExtension, Header, HOB_TYPE_END_OF_HOB_LIST, HOB_TYPE_GUID_EXTENSION},
 };
diff --git a/td-shim-interface/Cargo.toml b/td-shim-interface/Cargo.toml
new file mode 100644
index 00000000..4ed79924
--- /dev/null
+++ b/td-shim-interface/Cargo.toml
@@ -0,0 +1,18 @@
+[package]
+name = "td-shim-interface"
+version = "0.1.0"
+license = "BSD-2-Clause-Patent"
+description = "TD-shim metadata data structures and related functions. UEFI Platform Initializaiton data structures and accessors"
+
+edition = "2018"
+homepage = "https://github.com/confidential-containers/td-shim"
+repository = "https://github.com/confidential-containers/td-shim"
+readme = "README.md"
+keywords = ["td-shim", "TDX", "intel"]
+
+[dependencies]
+r-efi = "3.2.0"
+scroll = { version = "0.10", default-features = false, features = ["derive"] }
+zerocopy = { version = "0.7.31", features = ["derive"] }
+
+log = "0.4.13"
diff --git a/td-shim-interface/README.md b/td-shim-interface/README.md
new file mode 100644
index 00000000..6d72deed
--- /dev/null
+++ b/td-shim-interface/README.md
@@ -0,0 +1,35 @@
+[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fconfidential-containers%2Ftd-shim.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fconfidential-containers%2Ftd-shim?ref=badge_shield)
+# TD-shim-interface - Confidential Containers Shim Firmware Interface
+
+## Documents
+
+* [TD-Shim specification](doc/tdshim_spec.md)
+
+* Introduction [PDF](doc/td-shim-introduction.pdf) and [conference talk](https://fosdem.org/2023/schedule/event/cc_online_rust/)
+
+## Introduction
+
+This td-shim-interface is to support user for creating data structures and functions required for td-shim, such as TdxMetadataDescriptor and TdxMetadataSection. 
+Td-uefi-pi is used for UEFI Platform Initializaiton data structures and accessors.
+
+To import the data structure of metadata, TD HOB and related function, such as:
+```
+use td_shim_interface::{TD_ACPI_TABLE_HOB_GUID, TD_E820_TABLE_HOB_GUID, TD_PAYLOAD_INFO_HOB_GUID}; 
+use td_shim_interface::PayloadInfo; 
+use td_shim_interface::acpi; 
+use td_shim_interface::td_uefi_pi::{hob, pi, pi::guid}
+```
+
+This is a Shim Firmware to support [Intel TDX](https://software.intel.com/content/www/us/en/develop/articles/intel-trust-domain-extensions.html).
+
+The API specification is at [td-shim specification](doc/tdshim_spec.md).
+
+The secure boot specification for td-shim is at [secure boot specification](doc/secure_boot.md)
+
+The design is at [td-shim design](doc/design.md).
+
+The threat model analysis is at [td-shim threat model](doc/threat_model.md).
+
+
+## License
+[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fconfidential-containers%2Ftd-shim.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fconfidential-containers%2Ftd-shim?ref=badge_large)
diff --git a/td-shim/src/acpi.rs b/td-shim-interface/src/acpi.rs
similarity index 100%
rename from td-shim/src/acpi.rs
rename to td-shim-interface/src/acpi.rs
diff --git a/td-uefi-pi/fuzz/Cargo.toml b/td-shim-interface/src/fuzz/Cargo.toml
similarity index 100%
rename from td-uefi-pi/fuzz/Cargo.toml
rename to td-shim-interface/src/fuzz/Cargo.toml
diff --git a/td-uefi-pi/fuzz/fuzz_targets/afl_cfv_parser.rs b/td-shim-interface/src/fuzz/fuzz_targets/afl_cfv_parser.rs
similarity index 100%
rename from td-uefi-pi/fuzz/fuzz_targets/afl_cfv_parser.rs
rename to td-shim-interface/src/fuzz/fuzz_targets/afl_cfv_parser.rs
diff --git a/td-uefi-pi/fuzz/fuzz_targets/afl_hob_parser.rs b/td-shim-interface/src/fuzz/fuzz_targets/afl_hob_parser.rs
similarity index 100%
rename from td-uefi-pi/fuzz/fuzz_targets/afl_hob_parser.rs
rename to td-shim-interface/src/fuzz/fuzz_targets/afl_hob_parser.rs
diff --git a/td-uefi-pi/fuzz/fuzz_targets/afl_payload_parser.rs b/td-shim-interface/src/fuzz/fuzz_targets/afl_payload_parser.rs
similarity index 100%
rename from td-uefi-pi/fuzz/fuzz_targets/afl_payload_parser.rs
rename to td-shim-interface/src/fuzz/fuzz_targets/afl_payload_parser.rs
diff --git a/td-uefi-pi/fuzz/fuzz_targets/cfv_parser.rs b/td-shim-interface/src/fuzz/fuzz_targets/cfv_parser.rs
similarity index 100%
rename from td-uefi-pi/fuzz/fuzz_targets/cfv_parser.rs
rename to td-shim-interface/src/fuzz/fuzz_targets/cfv_parser.rs
diff --git a/td-uefi-pi/fuzz/fuzz_targets/fuzzlib.rs b/td-shim-interface/src/fuzz/fuzz_targets/fuzzlib.rs
similarity index 97%
rename from td-uefi-pi/fuzz/fuzz_targets/fuzzlib.rs
rename to td-shim-interface/src/fuzz/fuzz_targets/fuzzlib.rs
index 7a21fd68..5e455be0 100644
--- a/td-uefi-pi/fuzz/fuzz_targets/fuzzlib.rs
+++ b/td-shim-interface/src/fuzz/fuzz_targets/fuzzlib.rs
@@ -6,7 +6,7 @@
 use core::mem::size_of;
 use r_efi::efi::Guid;
 use std::vec::Vec;
-use td_uefi_pi::{fv, hob, pi};
+use td_shim_interface::td_uefi_pi::{fv, hob, pi};
 
 const EFI_END_OF_HOB_LIST_OFFSET: usize = 48;
 
diff --git a/td-uefi-pi/fuzz/fuzz_targets/hob_parser.rs b/td-shim-interface/src/fuzz/fuzz_targets/hob_parser.rs
similarity index 100%
rename from td-uefi-pi/fuzz/fuzz_targets/hob_parser.rs
rename to td-shim-interface/src/fuzz/fuzz_targets/hob_parser.rs
diff --git a/td-uefi-pi/fuzz/fuzz_targets/payload_parser.rs b/td-shim-interface/src/fuzz/fuzz_targets/payload_parser.rs
similarity index 100%
rename from td-uefi-pi/fuzz/fuzz_targets/payload_parser.rs
rename to td-shim-interface/src/fuzz/fuzz_targets/payload_parser.rs
diff --git a/td-uefi-pi/fuzz/seeds/cfv_parser/cfv b/td-shim-interface/src/fuzz/seeds/cfv_parser/cfv
similarity index 100%
rename from td-uefi-pi/fuzz/seeds/cfv_parser/cfv
rename to td-shim-interface/src/fuzz/seeds/cfv_parser/cfv
diff --git a/td-uefi-pi/fuzz/seeds/hob_parser/hob_buffer b/td-shim-interface/src/fuzz/seeds/hob_parser/hob_buffer
similarity index 100%
rename from td-uefi-pi/fuzz/seeds/hob_parser/hob_buffer
rename to td-shim-interface/src/fuzz/seeds/hob_parser/hob_buffer
diff --git a/td-uefi-pi/fuzz/seeds/payload_parser/fv_buffer b/td-shim-interface/src/fuzz/seeds/payload_parser/fv_buffer
similarity index 100%
rename from td-uefi-pi/fuzz/seeds/payload_parser/fv_buffer
rename to td-shim-interface/src/fuzz/seeds/payload_parser/fv_buffer
diff --git a/td-shim-interface/src/lib.rs b/td-shim-interface/src/lib.rs
new file mode 100644
index 00000000..2e9fc13c
--- /dev/null
+++ b/td-shim-interface/src/lib.rs
@@ -0,0 +1,134 @@
+// Copyright (c) 2022 Alibaba Cloud
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+
+#![no_std]
+
+use scroll::{Pread, Pwrite};
+
+pub mod acpi;
+pub mod metadata;
+pub mod td_uefi_pi;
+
+use td_uefi_pi::pi::{self, guid};
+
+// This GUID is used for ACPI GUID Extension HOB
+// Please refer to:
+// https://github.com/confidential-containers/td-shim/blob/main/doc/tdshim_spec.md#acpi-guid-extension-hob
+pub const TD_ACPI_TABLE_HOB_GUID: guid::Guid = guid::Guid::from_fields(
+    0x6a0c5870,
+    0xd4ed,
+    0x44f4,
+    [0xa1, 0x35, 0xdd, 0x23, 0x8b, 0x6f, 0xc, 0x8d],
+);
+
+// This GUID is used for TD Payload Info GUID Extension HOB
+// Please refer to:
+// https://github.com/confidential-containers/td-shim/blob/main/doc/tdshim_spec.md#td-payload-info-guid-extension-hob
+pub const TD_PAYLOAD_INFO_HOB_GUID: guid::Guid = guid::Guid::from_fields(
+    0xb96fa412,
+    0x461f,
+    0x4be3,
+    [0x8c, 0xd, 0xad, 0x80, 0x5a, 0x49, 0x7a, 0xc0],
+);
+
+// This GUID is used for E820 Memory Map GUID Extension HOB
+// Please refer to:
+// https://github.com/confidential-containers/td-shim/blob/main/doc/tdshim_spec.md#e820-memory-map-guid-extension-hob
+pub const TD_E820_TABLE_HOB_GUID: pi::guid::Guid = pi::guid::Guid::from_fields(
+    0x8f8072ea,
+    0x3486,
+    0x4b47,
+    [0x86, 0xa7, 0x23, 0x53, 0xb8, 0x8a, 0x87, 0x73],
+);
+
+#[repr(u32)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+pub enum TdPayloadInfoHobType {
+    ///  Payload Binary is a PE/COFF or ELF executable image as payload.
+    ///
+    /// Entrypoint can be found by parsing the image header. This type image does not follow
+    /// Linux boot protocol. A payload HOB is used to pass data from TdShim to payload.
+    ExecutablePayload = 0,
+
+    /// Payload Binary is bzImage, follow Linux boot protocol.
+    ///
+    /// The first 512 bytes are boot_param. (zero page). The entrypoint is start address of loaded
+    /// 64bit Linux kernel plus 0x200
+    BzImage,
+
+    /// Payload Binary is VMM loaded vmLinux, follow Linux boot protocol.
+    ///
+    /// The entrypoint is defined at HOB_PAYLOAD_INFO_TABLE.Entrypoint.
+    RawVmLinux,
+
+    /// Unknown Image type
+    UnknownImage = u32::MAX,
+}
+
+impl From<&TdPayloadInfoHobType> for u32 {
+    fn from(v: &TdPayloadInfoHobType) -> Self {
+        *v as u32
+    }
+}
+
+impl From<u32> for TdPayloadInfoHobType {
+    fn from(v: u32) -> Self {
+        match v {
+            0 => TdPayloadInfoHobType::ExecutablePayload,
+            1 => TdPayloadInfoHobType::BzImage,
+            2 => TdPayloadInfoHobType::RawVmLinux,
+            _ => TdPayloadInfoHobType::UnknownImage,
+        }
+    }
+}
+
+#[repr(C)]
+#[derive(Default, Clone, Copy, Pread, Pwrite)]
+pub struct PayloadInfo {
+    pub image_type: u32,
+    pub reserved: u32,
+    pub entry_point: u64,
+}
+
+/// Write three bytes from an integer value into the buffer.
+pub fn write_u24(data: u32, buf: &mut [u8; 3]) {
+    assert!(data <= 0xffffff);
+    buf[0] = (data & 0xFF) as u8;
+    buf[1] = ((data >> 8) & 0xFF) as u8;
+    buf[2] = ((data >> 16) & 0xFF) as u8;
+}
+
+// To protect against speculative attacks, place the LFENCE instruction after the range
+// check and branch, but before any code that consumes the checked value.
+pub fn speculation_barrier() {
+    unsafe { core::arch::asm!("lfence") }
+}
+
+#[cfg(test)]
+mod test {
+    use super::*;
+
+    #[test]
+    fn test_tdpayload_info_hob_type() {
+        assert_eq!(
+            TdPayloadInfoHobType::from(0),
+            TdPayloadInfoHobType::ExecutablePayload
+        );
+        assert_eq!(TdPayloadInfoHobType::from(1), TdPayloadInfoHobType::BzImage);
+        assert_eq!(
+            TdPayloadInfoHobType::from(2),
+            TdPayloadInfoHobType::RawVmLinux
+        );
+        assert_eq!(
+            TdPayloadInfoHobType::from(3),
+            TdPayloadInfoHobType::UnknownImage
+        );
+    }
+
+    #[test]
+    fn test_write_u24() {
+        let mut buf: [u8; 3] = [0; 3];
+        write_u24(0xffffff, &mut buf);
+    }
+}
diff --git a/td-shim/src/metadata.rs b/td-shim-interface/src/metadata.rs
similarity index 99%
rename from td-shim/src/metadata.rs
rename to td-shim-interface/src/metadata.rs
index 7a7fb34a..3b0bbabe 100644
--- a/td-shim/src/metadata.rs
+++ b/td-shim-interface/src/metadata.rs
@@ -4,10 +4,10 @@
 
 extern crate alloc;
 
+use crate::td_uefi_pi::pi::guid::Guid;
 use alloc::string::String;
 use core::{ptr::slice_from_raw_parts, str::FromStr};
 use scroll::{Pread, Pwrite};
-use td_uefi_pi::pi::guid::Guid;
 
 /// TDX Metadata GUID defined in td-shim specification
 pub const TDX_METADATA_GUID_STR: &str = "E9EAF9F3-168E-44D5-A8EB-7F4D8738F6AE";
diff --git a/td-uefi-pi/src/fv.rs b/td-shim-interface/src/td_uefi_pi/fv.rs
similarity index 100%
rename from td-uefi-pi/src/fv.rs
rename to td-shim-interface/src/td_uefi_pi/fv.rs
diff --git a/td-uefi-pi/src/hob.rs b/td-shim-interface/src/td_uefi_pi/hob.rs
similarity index 100%
rename from td-uefi-pi/src/hob.rs
rename to td-shim-interface/src/td_uefi_pi/hob.rs
diff --git a/td-uefi-pi/src/lib.rs b/td-shim-interface/src/td_uefi_pi/mod.rs
similarity index 99%
rename from td-uefi-pi/src/lib.rs
rename to td-shim-interface/src/td_uefi_pi/mod.rs
index 0aef5ef4..30c350ca 100644
--- a/td-uefi-pi/src/lib.rs
+++ b/td-shim-interface/src/td_uefi_pi/mod.rs
@@ -21,7 +21,6 @@
 //!
 //! Constants and data structures defined by [UEFI PI Spec] are hosted by [crate::pi], functions
 //! to access them are hosted by [crate::fv] and [crate::hob].
-#![no_std]
 
 pub mod fv;
 pub mod hob;
diff --git a/td-uefi-pi/src/pi/boot_mode.rs b/td-shim-interface/src/td_uefi_pi/pi/boot_mode.rs
similarity index 100%
rename from td-uefi-pi/src/pi/boot_mode.rs
rename to td-shim-interface/src/td_uefi_pi/pi/boot_mode.rs
diff --git a/td-uefi-pi/src/pi/fv.rs b/td-shim-interface/src/td_uefi_pi/pi/fv.rs
similarity index 100%
rename from td-uefi-pi/src/pi/fv.rs
rename to td-shim-interface/src/td_uefi_pi/pi/fv.rs
diff --git a/td-uefi-pi/src/pi/guid.rs b/td-shim-interface/src/td_uefi_pi/pi/guid.rs
similarity index 100%
rename from td-uefi-pi/src/pi/guid.rs
rename to td-shim-interface/src/td_uefi_pi/pi/guid.rs
diff --git a/td-uefi-pi/src/pi/hob.rs b/td-shim-interface/src/td_uefi_pi/pi/hob.rs
similarity index 100%
rename from td-uefi-pi/src/pi/hob.rs
rename to td-shim-interface/src/td_uefi_pi/pi/hob.rs
diff --git a/td-uefi-pi/src/pi/mod.rs b/td-shim-interface/src/td_uefi_pi/pi/mod.rs
similarity index 100%
rename from td-uefi-pi/src/pi/mod.rs
rename to td-shim-interface/src/td_uefi_pi/pi/mod.rs
diff --git a/td-shim-tools/Cargo.toml b/td-shim-tools/Cargo.toml
index a4e7f572..5a55b177 100644
--- a/td-shim-tools/Cargo.toml
+++ b/td-shim-tools/Cargo.toml
@@ -42,7 +42,7 @@ regex = "1"
 scroll = { version = "0.10", default-features = false, features = ["derive"]}
 td-layout = { path = "../td-layout" }
 td-shim = { path = "../td-shim", default-features = false }
-td-uefi-pi =  { path = "../td-uefi-pi" }
+td-shim-interface =  { path = "../td-shim-interface" }
 cfg-if = "1.0"
 
 anyhow = { version = "1.0.68", optional = true }
diff --git a/td-shim-tools/src/bin/td-shim-checker/main.rs b/td-shim-tools/src/bin/td-shim-checker/main.rs
index 8046171e..13763c78 100644
--- a/td-shim-tools/src/bin/td-shim-checker/main.rs
+++ b/td-shim-tools/src/bin/td-shim-checker/main.rs
@@ -10,7 +10,7 @@ use log::{error, LevelFilter};
 use std::str::FromStr;
 use std::vec::Vec;
 use std::{env, io};
-use td_shim::metadata::{TdxMetadataDescriptor, TdxMetadataSection};
+use td_shim_interface::metadata::{TdxMetadataDescriptor, TdxMetadataSection};
 use td_shim_tools::loader::TdShimLoader;
 
 struct Config {
diff --git a/td-shim-tools/src/bin/td-shim-enroll/main.rs b/td-shim-tools/src/bin/td-shim-enroll/main.rs
index 3b536a69..8f2a5d05 100644
--- a/td-shim-tools/src/bin/td-shim-enroll/main.rs
+++ b/td-shim-tools/src/bin/td-shim-enroll/main.rs
@@ -11,9 +11,9 @@ use std::path::PathBuf;
 use std::str::FromStr;
 use std::vec::Vec;
 use std::{env, io, path::Path};
+use td_shim_interface::td_uefi_pi::pi::guid;
 use td_shim_tools::enroller::{create_key_file, enroll_files, FirmwareRawFile};
 use td_shim_tools::InputData;
-use td_uefi_pi::pi::guid;
 const TDSHIM_SB_NAME: &str = "final.sb.bin";
 
 struct Config {
diff --git a/td-shim-tools/src/enroller.rs b/td-shim-tools/src/enroller.rs
index 50605337..9af2eae7 100644
--- a/td-shim-tools/src/enroller.rs
+++ b/td-shim-tools/src/enroller.rs
@@ -18,7 +18,7 @@ use td_shim::secure_boot::{
     PUBKEY_FILE_STRUCT_VERSION_V1, PUBKEY_HASH_ALGORITHM_SHA384,
 };
 use td_shim::write_u24;
-use td_uefi_pi::pi::fv::{
+use td_shim_interface::td_uefi_pi::pi::fv::{
     FIRMWARE_FILE_SYSTEM3_GUID, FVH_REVISION, FVH_SIGNATURE, FV_FILETYPE_RAW,
 };
 
@@ -298,7 +298,7 @@ mod test {
     use std::str::FromStr;
 
     use super::*;
-    use td_uefi_pi::pi::guid;
+    use td_shim_interface::td_uefi_pi::pi::guid;
 
     fn read_u24(data: &[u8]) -> u32 {
         let mut num = data[0] as u32;
diff --git a/td-shim-tools/src/linker.rs b/td-shim-tools/src/linker.rs
index 357e66e6..0b6a3b49 100644
--- a/td-shim-tools/src/linker.rs
+++ b/td-shim-tools/src/linker.rs
@@ -20,10 +20,10 @@ use td_shim::fv::{
     FvFfsFileHeader, FvFfsSectionHeader, FvHeader, IplFvFfsHeader, IplFvFfsSectionHeader,
     IplFvHeader,
 };
-use td_shim::metadata::{TdxMetadataGuid, TdxMetadataPtr};
 use td_shim::reset_vector::{ResetVectorHeader, ResetVectorParams};
 use td_shim::write_u24;
-use td_uefi_pi::pi::fv::{
+use td_shim_interface::metadata::{TdxMetadataGuid, TdxMetadataPtr};
+use td_shim_interface::td_uefi_pi::pi::fv::{
     FfsFileHeader, FVH_REVISION, FVH_SIGNATURE, FV_FILETYPE_DXE_CORE, FV_FILETYPE_SECURITY_CORE,
     SECTION_PE32,
 };
diff --git a/td-shim-tools/src/loader.rs b/td-shim-tools/src/loader.rs
index dca17dbb..9a63945a 100644
--- a/td-shim-tools/src/loader.rs
+++ b/td-shim-tools/src/loader.rs
@@ -9,7 +9,7 @@ use std::fs;
 use std::io;
 use std::io::Read;
 use std::io::Seek;
-use td_shim::metadata::{
+use td_shim_interface::metadata::{
     self, TdxMetadataDescriptor, TdxMetadataGuid, TdxMetadataSection, TDX_METADATA_DESCRIPTOR_LEN,
     TDX_METADATA_GUID_LEN, TDX_METADATA_OFFSET, TDX_METADATA_SECTION_LEN,
 };
diff --git a/td-shim-tools/src/metadata.rs b/td-shim-tools/src/metadata.rs
index 896960bc..ab1c5ad5 100644
--- a/td-shim-tools/src/metadata.rs
+++ b/td-shim-tools/src/metadata.rs
@@ -7,14 +7,14 @@ use serde::{de, Deserialize};
 use std::{mem::size_of, vec::Vec};
 use td_layout::build_time::*;
 use td_layout::runtime::*;
-use td_shim::metadata::{
+use td_shim_interface::metadata::{
     TdxMetadataDescriptor, TDX_METADATA_GUID, TDX_METADATA_SECTION_TYPE_BFV,
     TDX_METADATA_SECTION_TYPE_CFV, TDX_METADATA_SECTION_TYPE_PAYLOAD,
     TDX_METADATA_SECTION_TYPE_PAYLOAD_PARAM, TDX_METADATA_SECTION_TYPE_PERM_MEM,
     TDX_METADATA_SECTION_TYPE_TD_HOB, TDX_METADATA_SECTION_TYPE_TD_INFO,
     TDX_METADATA_SECTION_TYPE_TEMP_MEM, TDX_METADATA_SIGNATURE, TDX_METADATA_VERSION,
 };
-use td_uefi_pi::pi::guid::Guid;
+use td_shim_interface::td_uefi_pi::pi::guid::Guid;
 
 use crate::linker::PayloadType;
 
@@ -101,7 +101,7 @@ impl MetadataSections {
 }
 
 fn basic_metadata_sections(payload_type: PayloadType) -> MetadataSections {
-    use td_shim::metadata::TDX_METADATA_ATTRIBUTES_EXTENDMR;
+    use td_shim_interface::metadata::TDX_METADATA_ATTRIBUTES_EXTENDMR;
 
     let mut metadata_sections = MetadataSections::new();
 
diff --git a/td-shim-tools/src/tee_info_hash.rs b/td-shim-tools/src/tee_info_hash.rs
index ef4e11d0..3e7dabc5 100644
--- a/td-shim-tools/src/tee_info_hash.rs
+++ b/td-shim-tools/src/tee_info_hash.rs
@@ -14,7 +14,7 @@ use std::io::Read;
 use std::io::Seek;
 use std::io::SeekFrom;
 use std::mem::size_of;
-use td_shim::metadata::*;
+use td_shim_interface::metadata::*;
 use zeroize::Zeroize;
 
 pub const SHA384_DIGEST_SIZE: usize = 0x30;
diff --git a/td-shim/Cargo.toml b/td-shim/Cargo.toml
index 5f3f429d..f31e2b80 100644
--- a/td-shim/Cargo.toml
+++ b/td-shim/Cargo.toml
@@ -23,7 +23,7 @@ lazy_static = { version = "1.4.0", features = ["spin_no_std"] }
 r-efi = "3.2.0"
 scroll = { version = "0.10", default-features = false, features = ["derive"] }
 td-layout = { path = "../td-layout" }
-td-uefi-pi =  { path = "../td-uefi-pi" }
+td-shim-interface =  { path = "../td-shim-interface" }
 cc-measurement = { path = "../cc-measurement" }
 zerocopy = { version = "0.7.31", features = ["derive"] }
 
diff --git a/td-shim/src/bin/td-shim/acpi.rs b/td-shim/src/bin/td-shim/acpi.rs
index 980d5182..cab14141 100644
--- a/td-shim/src/bin/td-shim/acpi.rs
+++ b/td-shim/src/bin/td-shim/acpi.rs
@@ -5,7 +5,7 @@
 extern crate alloc;
 
 use alloc::vec::Vec;
-use td_shim::acpi::{calculate_checksum, Rsdp, Xsdt};
+use td_shim_interface::acpi::{calculate_checksum, Rsdp, Xsdt};
 
 use super::*;
 
diff --git a/td-shim/src/bin/td-shim/main.rs b/td-shim/src/bin/td-shim/main.rs
index 3028f791..43ed88c1 100644
--- a/td-shim/src/bin/td-shim/main.rs
+++ b/td-shim/src/bin/td-shim/main.rs
@@ -30,13 +30,13 @@ use cc_measurement::{log::CcEventLogWriter, EV_EFI_HANDOFF_TABLES2, EV_PLATFORM_
 use td_layout::build_time::{self, *};
 use td_layout::memslice::{self, SliceType};
 use td_layout::RuntimeMemoryLayout;
-use td_shim::acpi::{Ccel, GenericSdtHeader};
 use td_shim::event_log::{log_hob_list, log_payload_binary, log_payload_parameter};
 use td_shim::{
     speculation_barrier, PayloadInfo, TdPayloadInfoHobType, TD_ACPI_TABLE_HOB_GUID,
     TD_PAYLOAD_INFO_HOB_GUID,
 };
-use td_uefi_pi::{fv, hob, pi};
+use td_shim_interface::acpi::{Ccel, GenericSdtHeader};
+use td_shim_interface::td_uefi_pi::{fv, hob, pi};
 
 use crate::ipl::ExecutablePayloadType;
 use crate::shim_info::{BootTimeDynamic, BootTimeStatic};
diff --git a/td-shim/src/bin/td-shim/memory.rs b/td-shim/src/bin/td-shim/memory.rs
index ed454500..2283b86d 100644
--- a/td-shim/src/bin/td-shim/memory.rs
+++ b/td-shim/src/bin/td-shim/memory.rs
@@ -8,8 +8,8 @@ use td_layout::memslice::SliceType;
 use td_layout::{build_time::*, runtime::*, *};
 use td_shim::e820::{E820Entry, E820Type};
 use td_shim::{PayloadInfo, TdPayloadInfoHobType};
-use td_uefi_pi::hob;
-use td_uefi_pi::pi::hob::{
+use td_shim_interface::td_uefi_pi::hob;
+use td_shim_interface::td_uefi_pi::pi::hob::{
     ResourceDescription, RESOURCE_MEMORY_RESERVED, RESOURCE_MEMORY_UNACCEPTED,
     RESOURCE_SYSTEM_MEMORY,
 };
@@ -284,7 +284,7 @@ impl<'a> Memory<'a> {
     #[cfg(feature = "tdx")]
     fn accept_memory_resources(resources: &mut Vec<ResourceDescription>) {
         use td_layout::TD_PAYLOAD_PARTIAL_ACCEPT_MEMORY_SIZE;
-        use td_uefi_pi::pi;
+        use td_shim_interface::td_uefi_pi::pi;
 
         // The physical address must not exceed the shared mask (the last bit of GPAW).
         let (index, max_phys_addr) = resources
diff --git a/td-shim/src/bin/td-shim/mp.rs b/td-shim/src/bin/td-shim/mp.rs
index c7a4fa52..f9465508 100644
--- a/td-shim/src/bin/td-shim/mp.rs
+++ b/td-shim/src/bin/td-shim/mp.rs
@@ -6,7 +6,7 @@ use core::convert::TryInto;
 use core::mem::size_of;
 use zerocopy::{AsBytes, FromBytes, FromZeroes};
 
-use td_shim::acpi::{self, GenericSdtHeader};
+use td_shim_interface::acpi::{self, GenericSdtHeader};
 
 // 255 vCPUs needs 2278 bytes, refer to create_madt().
 const MADT_MAX_SIZE: usize = 0xc00;
diff --git a/td-shim/src/bin/td-shim/payload_hob.rs b/td-shim/src/bin/td-shim/payload_hob.rs
index 24727fd0..7b474490 100644
--- a/td-shim/src/bin/td-shim/payload_hob.rs
+++ b/td-shim/src/bin/td-shim/payload_hob.rs
@@ -11,8 +11,8 @@ use td_layout::build_time::*;
 use td_layout::runtime::*;
 use td_shim::e820::E820Type;
 use td_shim::{TD_ACPI_TABLE_HOB_GUID, TD_E820_TABLE_HOB_GUID};
-use td_uefi_pi::pi::hob::ResourceDescription;
-use td_uefi_pi::{hob, pi, pi::guid};
+use td_shim_interface::td_uefi_pi::pi::hob::ResourceDescription;
+use td_shim_interface::td_uefi_pi::{hob, pi, pi::guid};
 
 #[derive(Debug)]
 pub enum PayloadHobError {
diff --git a/td-shim/src/bin/td-shim/shim_info.rs b/td-shim/src/bin/td-shim/shim_info.rs
index 9f0deffe..30e10686 100644
--- a/td-shim/src/bin/td-shim/shim_info.rs
+++ b/td-shim/src/bin/td-shim/shim_info.rs
@@ -9,14 +9,14 @@ use log::error;
 use scroll::{Pread, Pwrite};
 use td_layout::build_time::{TD_SHIM_FIRMWARE_BASE, TD_SHIM_FIRMWARE_SIZE};
 use td_layout::memslice;
-use td_shim::metadata::*;
 use td_shim::speculation_barrier;
 use td_shim::{
     PayloadInfo, TdPayloadInfoHobType, TD_ACPI_TABLE_HOB_GUID, TD_PAYLOAD_INFO_HOB_GUID,
 };
-use td_uefi_pi::pi::guid::Guid;
-use td_uefi_pi::pi::hob::*;
-use td_uefi_pi::{fv, hob, pi};
+use td_shim_interface::metadata::*;
+use td_shim_interface::td_uefi_pi::pi::guid::Guid;
+use td_shim_interface::td_uefi_pi::pi::hob::*;
+use td_shim_interface::td_uefi_pi::{fv, hob, pi};
 
 pub struct BootTimeStatic {
     sections: Vec<TdxMetadataSection>,
diff --git a/td-shim/src/fv.rs b/td-shim/src/fv.rs
index c0f960e2..dc2767f1 100644
--- a/td-shim/src/fv.rs
+++ b/td-shim/src/fv.rs
@@ -8,7 +8,7 @@ use core::ptr::slice_from_raw_parts;
 
 use r_efi::efi::Guid;
 use scroll::{Pread, Pwrite};
-use td_uefi_pi::pi::fv::{
+use td_shim_interface::td_uefi_pi::pi::fv::{
     Checksum, CommonSectionHeader, FfsFileHeader, FirmwareVolumeExtHeader, FirmwareVolumeHeader,
     FvBlockMap, FIRMWARE_FILE_SYSTEM2_GUID, FVH_SIGNATURE, FV_FILETYPE_FFS_PAD,
 };
diff --git a/td-shim/src/lib.rs b/td-shim/src/lib.rs
index 03acda48..b2a2b141 100644
--- a/td-shim/src/lib.rs
+++ b/td-shim/src/lib.rs
@@ -6,13 +6,11 @@
 
 use scroll::{Pread, Pwrite};
 
-use td_uefi_pi::pi::{self, guid};
+use td_shim_interface::td_uefi_pi::pi::{self, guid};
 
-pub mod acpi;
 pub mod e820;
 pub mod event_log;
 pub mod fv;
-pub mod metadata;
 pub mod reset_vector;
 
 #[cfg(feature = "secure-boot")]
diff --git a/td-shim/src/reset_vector.rs b/td-shim/src/reset_vector.rs
index 4da0e187..328de5bf 100644
--- a/td-shim/src/reset_vector.rs
+++ b/td-shim/src/reset_vector.rs
@@ -8,7 +8,9 @@ use core::ptr::slice_from_raw_parts;
 use r_efi::efi::Guid;
 use scroll::{Pread, Pwrite};
 use td_layout::build_time::TD_SHIM_RESET_VECTOR_SIZE;
-use td_uefi_pi::pi::fv::{CommonSectionHeader, FfsFileHeader, FV_FILETYPE_RAW, SECTION_RAW};
+use td_shim_interface::td_uefi_pi::pi::fv::{
+    CommonSectionHeader, FfsFileHeader, FV_FILETYPE_RAW, SECTION_RAW,
+};
 
 use crate::write_u24;
 
diff --git a/td-shim/src/secure_boot.rs b/td-shim/src/secure_boot.rs
index 0587a73d..50db53e5 100644
--- a/td-shim/src/secure_boot.rs
+++ b/td-shim/src/secure_boot.rs
@@ -21,7 +21,7 @@ use ring::{
     signature::{self, UnparsedPublicKey, VerificationAlgorithm},
 };
 use scroll::{Pread, Pwrite};
-use td_uefi_pi::{fv, pi};
+use td_shim_interface::td_uefi_pi::{fv, pi};
 
 /// GUID for secure boot trust anchor in the Configuration Firmware Volume (CFV).
 pub const CFV_FFS_HEADER_TRUST_ANCHOR_GUID: Guid = Guid::from_fields(
diff --git a/td-uefi-pi/Cargo.toml b/td-uefi-pi/Cargo.toml
deleted file mode 100644
index 0c9c1050..00000000
--- a/td-uefi-pi/Cargo.toml
+++ /dev/null
@@ -1,13 +0,0 @@
-[package]
-name = "td-uefi-pi"
-version = "0.1.0"
-description = "UEFI Platform Initializaiton data structures and accessors"
-repository = "https://github.com/confidential-containers/td-shim"
-homepage = "https://github.com/confidential-containers"
-license = "BSD-2-Clause-Patent"
-edition = "2018"
-
-[dependencies]
-log = "0.4.13"
-r-efi = "3.2.0"
-scroll = { version = "0.10", default-features = false, features = ["derive"] }
diff --git a/tests/test-td-payload/Cargo.toml b/tests/test-td-payload/Cargo.toml
index 31264841..1fa6cda8 100644
--- a/tests/test-td-payload/Cargo.toml
+++ b/tests/test-td-payload/Cargo.toml
@@ -13,7 +13,7 @@ r-efi = "3.2.0"
 linked_list_allocator = "0.10.4"
 log = "0.4.13"
 cc-measurement = { path = "../../cc-measurement" }
-td-uefi-pi =  { path = "../../td-uefi-pi" }
+td-shim-interface =  { path = "../../td-shim-interface" }
 tdx-tdcall = { path = "../../tdx-tdcall" , optional = true }
 td-logger =  { path = "../../td-logger" }
 td-layout = { path = "../../td-layout" }
diff --git a/tests/test-td-payload/src/main.rs b/tests/test-td-payload/src/main.rs
index 10cb1313..e54305c6 100644
--- a/tests/test-td-payload/src/main.rs
+++ b/tests/test-td-payload/src/main.rs
@@ -52,7 +52,7 @@ use td_payload as _;
 use td_payload::print;
 use td_shim::e820::{E820Entry, E820Type};
 use td_shim::{TD_ACPI_TABLE_HOB_GUID, TD_E820_TABLE_HOB_GUID};
-use td_uefi_pi::{fv, hob, pi};
+use td_shim_interface::td_uefi_pi::{fv, hob, pi};
 use zerocopy::FromBytes;
 
 const E820_TABLE_SIZE: usize = 128;
diff --git a/tests/test-td-payload/src/testacpi.rs b/tests/test-td-payload/src/testacpi.rs
index 00b0bfb2..0c688f97 100644
--- a/tests/test-td-payload/src/testacpi.rs
+++ b/tests/test-td-payload/src/testacpi.rs
@@ -12,9 +12,9 @@ use core::ffi::c_void;
 use core::mem::size_of;
 use serde::{Deserialize, Serialize};
 use td_payload::hob::get_hob;
-use td_shim::acpi::GenericSdtHeader;
 use td_shim::TD_ACPI_TABLE_HOB_GUID;
-use td_uefi_pi::hob;
+use td_shim_interface::acpi::GenericSdtHeader;
+use td_shim_interface::td_uefi_pi::hob;
 use zerocopy::{AsBytes, FromBytes};
 
 #[derive(Debug, Serialize, Deserialize)]
diff --git a/tests/test-td-payload/src/testmemmap.rs b/tests/test-td-payload/src/testmemmap.rs
index 3816b484..f7b10a51 100644
--- a/tests/test-td-payload/src/testmemmap.rs
+++ b/tests/test-td-payload/src/testmemmap.rs
@@ -15,7 +15,7 @@ use serde::{Deserialize, Serialize};
 use td_payload::hob::get_hob;
 use td_shim::e820::{self, E820Entry, E820Type};
 use td_shim::TD_E820_TABLE_HOB_GUID;
-use td_uefi_pi::hob;
+use td_shim_interface::td_uefi_pi::hob;
 use zerocopy::{AsBytes, FromBytes};
 
 #[derive(Debug, Serialize, Deserialize)]
diff --git a/tests/test-td-payload/src/testtrustedboot.rs b/tests/test-td-payload/src/testtrustedboot.rs
index 9864eec9..072a6c8f 100644
--- a/tests/test-td-payload/src/testtrustedboot.rs
+++ b/tests/test-td-payload/src/testtrustedboot.rs
@@ -12,10 +12,10 @@ use core::{convert::TryInto, ffi::c_void, mem::size_of};
 use ring::digest;
 use scroll::Pread;
 use td_payload::hob::get_hob;
-use td_shim::acpi::{Ccel, GenericSdtHeader};
 use td_shim::event_log::CCEL_CC_TYPE_TDX;
 use td_shim::TD_ACPI_TABLE_HOB_GUID;
-use td_uefi_pi::hob;
+use td_shim_interface::acpi::{Ccel, GenericSdtHeader};
+use td_shim_interface::td_uefi_pi::hob;
 use tdx_tdcall::tdreport;
 use zerocopy::{AsBytes, FromBytes};