From 94bfc6f0cba9359c9ddfe560ecaff8f6b1bf1efb Mon Sep 17 00:00:00 2001 From: Ceping Sun Date: Sun, 5 Jan 2025 20:14:35 -0500 Subject: UefiCpuPkg: Add TdxMeasurementLib.h Add below APIs to UefiCpuPkg. - TdxMeasurementMapPcrToMrIndex - TdxMeasurementHashAndExtendToRtmr - TdxMeasurementBuildGuidHob Cc: Ray Ni Cc: Jiaxin Wu Cc: Jiewen Yao Cc: Gerd Hoffmann Signed-off-by: Min Xu Signed-off-by: Ceping Sun --- UefiCpuPkg/Include/Library/TdxMeasurementLib.h | 85 ++++++++++++++++++++++++++ UefiCpuPkg/UefiCpuPkg.dec | 3 + 2 files changed, 88 insertions(+) create mode 100644 UefiCpuPkg/Include/Library/TdxMeasurementLib.h (limited to 'UefiCpuPkg') diff --git a/UefiCpuPkg/Include/Library/TdxMeasurementLib.h b/UefiCpuPkg/Include/Library/TdxMeasurementLib.h new file mode 100644 index 0000000000..f34318a898 --- /dev/null +++ b/UefiCpuPkg/Include/Library/TdxMeasurementLib.h @@ -0,0 +1,85 @@ +/** @file + TdxMeasurementLib header file + Copyright (c) 2025, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef TDX_MEASUREMENT_LIB_H +#define TDX_MEASUREMENT_LIB_H + +#include + +#define CC_MR_INDEX_0_MRTD 0 +#define CC_MR_INDEX_1_RTMR0 1 +#define CC_MR_INDEX_2_RTMR1 2 +#define CC_MR_INDEX_3_RTMR2 3 +#define CC_MR_INDEX_INVALID 4 + +/** + According to UEFI Spec 2.10 Section 38.4.1: + The following table shows the TPM PCR index mapping and CC event log measurement + register index interpretation for Intel TDX, where MRTD means Trust Domain Measurement + Register and RTMR means Runtime Measurement Register + // TPM PCR Index | CC Measurement Register Index | TDX-measurement register + // ------------------------------------------------------------------------ + // 0 | 0 | MRTD + // 1, 7 | 1 | RTMR[0] + // 2~6 | 2 | RTMR[1] + // 8~15 | 3 | RTMR[2] + @param[in] PCRIndex Index of the TPM PCR + @retval UINT32 Index of the CC Event Log Measurement Register Index + @retval CC_MR_INDEX_INVALID Invalid MR Index +**/ +UINT32 +EFIAPI +TdxMeasurementMapPcrToMrIndex ( + IN UINT32 PCRIndex + ); + +/** + * Build GuidHob for Tdx CC measurement event. + * + * @param RtmrIndex RTMR index + * @param EventType Event type + * @param EventData Event data + * @param EventSize Size of event data + * @param HashValue Hash value + * @param HashSize Size of hash + * + * @retval EFI_SUCCESS Successfully build the GuidHobs + * @retval Others Other error as indicated + */ +EFI_STATUS +EFIAPI +TdxMeasurementBuildGuidHob ( + UINT32 RtmrIndex, + UINT32 EventType, + UINT8 *EventData, + UINT32 EventSize, + UINT8 *HashValue, + UINT32 HashSize + ); + +/** + * Calculate the sha384 of input Data and extend it to RTMR register. + * + * @param RtmrIndex Index of the RTMR register + * @param DataToHash Data to be hashed + * @param DataToHashLen Length of the data + * @param Digest Hash value of the input data + * @param DigestLen Length of the hash value + * + * @retval EFI_SUCCESS Successfully hash and extend to RTMR + * @retval Others Other errors as indicated + */ +EFI_STATUS +EFIAPI +TdxMeasurementHashAndExtendToRtmr ( + IN UINT32 RtmrIndex, + IN VOID *DataToHash, + IN UINTN DataToHashLen, + OUT UINT8 *Digest, + IN UINTN DigestLen + ); + +#endif diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec index 5d5342ded6..8ac7747eca 100644 --- a/UefiCpuPkg/UefiCpuPkg.dec +++ b/UefiCpuPkg/UefiCpuPkg.dec @@ -53,6 +53,9 @@ ## @libraryclass Provides function to support CcExit processing. CcExitLib|Include/Library/CcExitLib.h + ## @libraryclass Provides functions for Tdx Measurement processing + TdxMeasurementLib|Include/Library/TdxMeasurementLib.h + ## @libraryclass Provides function to support AmdSvsm processing. AmdSvsmLib|Include/Library/AmdSvsmLib.h -- cgit