From nobody Tue May 14 17:30:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+113490+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113490+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=arm.com ARC-Seal: i=1; a=rsa-sha256; t=1704824467; cv=none; d=zohomail.com; s=zohoarc; b=S4hE1c/0RMY+LJMumRuDo5Jwn/BjMz1MqTYWgG9l4JF5qMQsS1es1NIYMP8pVl7S2iU4inVkXmtLtV1ZGi0slOTd2+lwBwP683Ipw8T1gSBX+w9nH0j2uVJH0KhfccQWKs/UYQy4KvTCFHO/MMjSayGVumXdPeb6JQ5LYEk8x1c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1704824467; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=zoXgj2mLlKtLierHUu3909BbGMjAQz21gbQ+wLcc97w=; b=i4RtCRcrwXqseHayQLsjZ4slBnPs+NG+QZfb6U4vaU9hXZTiXnkVyVAdchbDLMV9MXaQxVP+Ohs5hxfATbH2WkdJIYl9pcgcBzwEw37M9TgceVnESDBBfzOjv7G0BTkEizJfnXu12AsE4hshtnTDZZFPfEYqkUS7zqnr9WieFkA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113490+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1704824467805978.2472714681753; Tue, 9 Jan 2024 10:21:07 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=t1o08HHBiA2KoiPoTPxbQP2VrU/tSO2QNbvDL84s9T0=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1704824467; v=1; b=KJ4GWIgFWtEvl+ypr+SZUqfQ2NVNwp9kvAsw4fzvyf7FDk6yAJ+TFEDJssBRb862yRX+iq1C LWDMopm2zbuVPKs9oJQWsTQeEb8bHy78dKNShN4U5wTS4tnIitzQwc8bYxgOUL4+1eb5CmCAvSE abxf8NNRLzu1LOUGgw8MeSd0= X-Received: by 127.0.0.2 with SMTP id 9ZoiYY1788612xwEVAUm83KA; Tue, 09 Jan 2024 10:21:07 -0800 X-Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.24490.1704824465287008567 for ; Tue, 09 Jan 2024 10:21:05 -0800 X-Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 72382FEC; Tue, 9 Jan 2024 10:21:50 -0800 (PST) X-Received: from beelzebub.ast.arm.com (unknown [10.118.29.240]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id C588B3F7F4; Tue, 9 Jan 2024 10:21:04 -0800 (PST) From: "Stuart Yoder" To: devel@edk2.groups.io, Edhaya.Chandran@arm.com, gaojie@byosoft.com.cn Cc: ilias.apalodimas@linaro.org, heinrich.schuchardt@canonical.com, Samer.El-Haj-Mahmoud@arm.com, Jiewen.Yao@intel.com Subject: [edk2-devel] [PATCH v2 1/6] uefi-sct/SctPkg: TCG2 Protocol: add header with TCG2 protocol definitions Date: Tue, 9 Jan 2024 12:20:48 -0600 Message-Id: <20240109182053.2540542-2-stuart.yoder@arm.com> In-Reply-To: <20240109182053.2540542-1-stuart.yoder@arm.com> References: <20240109182053.2540542-1-stuart.yoder@arm.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,stuart.yoder@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: djKoYLKfGwEQIvLHj3sei6Aix1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1704824469250100012 Content-Type: text/plain; charset="utf-8" From: Joseph Hemann Define constants and data structure specified in the TCG EFI Protocol specification. Signed-off-by: Joseph Hemann Signed-off-by: Stuart Yoder --- uefi-sct/SctPkg/UEFI/Protocol/TCG2.h | 177 ++++++++++++++++++++ 1 file changed, 177 insertions(+) diff --git a/uefi-sct/SctPkg/UEFI/Protocol/TCG2.h b/uefi-sct/SctPkg/UEFI/Pr= otocol/TCG2.h new file mode 100644 index 000000000000..e62ecd85cbe9 --- /dev/null +++ b/uefi-sct/SctPkg/UEFI/Protocol/TCG2.h @@ -0,0 +1,177 @@ +/** @file + + Copyright 2006 - 2016 Unified EFI, Inc.
+ Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved.
+ Copyright (c) 2021 - 2023, Arm Inc. All rights reserved.
+ + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BS= D License + which accompanies this distribution. The full text of the license may b= e found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. + +**/ +/*++ + +Module Name: + + TCG2.h + +Abstract: + + EFI TCG Protocol + +--*/ + + +#ifndef __TCG2_PROTOCOL_H__ +#define __TCG2_PROTOCOL_H__ + +// +// Global ID for the TCG2 Protocol +// +#define EFI_TCG2_PROTOCOL_GUID \ + {0x607f766c, 0x7455, 0x42be, {0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72,= 0x0f}} + +// Following defintions come from TCG2 Efi Protocol Spec +#define EFI_TCG2_BOOT_HASH_ALG_SHA1 0x00000001 + +#define EFI_TCG2_BOOT_HASH_ALG_SHA256 0x00000002 + +#define EFI_TCG2_BOOT_HASH_ALG_SHA384 0x00000004 + +#define EFI_TCG2_BOOT_HASH_ALG_SHA512 0x00000008 + +#define EFI_TCG2_BOOT_HASH_ALG_SM3_256 0x00000010 + +#define EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2 0x00000001 + +#define EFI_TCG2_EVENT_LOG_FORMAT_TCG_2 0x00000002 + +typedef struct _EFI_TCG2_PROTOCOL EFI_TCG2_PROTOCOL; + +typedef UINT32 EFI_TCG2_EVENT_LOG_BITMAP; + +typedef UINT32 EFI_TCG2_EVENT_LOG_FORMAT; + +typedef UINT32 EFI_TCG2_EVENT_ALGORITHM_BITMAP; + +typedef UINT32 TCG_PCRINDEX; + +typedef UINT32 TCG_EVENTTYPE; + +// Following struct defintions come from TCG2 Efi Protocol Spec +typedef struct { + UINT8 Major; + UINT8 Minor; +} EFI_TCG2_VERSION; + +typedef struct { + UINT8 Size; + EFI_TCG2_VERSION StructureVersion; + EFI_TCG2_VERSION ProtocolVersion; + EFI_TCG2_EVENT_ALGORITHM_BITMAP HashAlgorithmBitmap; + EFI_TCG2_EVENT_LOG_BITMAP SupportedEventLogs; + BOOLEAN TPMPresentFlag; + UINT16 MaxCommandSize; + UINT16 MaxResponseSize; + UINT32 ManufacturerID; + UINT32 NumberOfPcrBanks; + EFI_TCG2_EVENT_ALGORITHM_BITMAP ActivePcrBanks; +} EFI_TCG2_BOOT_SERVICE_CAPABILITY; + +typedef +EFI_STATUS +(EFIAPI *EFI_TCG2_GET_CAPABILITY) ( + IN EFI_TCG2_PROTOCOL *This, + IN OUT EFI_TCG2_BOOT_SERVICE_CAPABILITY *ProtocolCapability +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCG2_GET_EVENT_LOG) ( + IN EFI_TCG2_PROTOCOL *This, + IN EFI_TCG2_EVENT_LOG_FORMAT EventLogFormat, + OUT EFI_PHYSICAL_ADDRESS *EventLogLocation, + OUT EFI_PHYSICAL_ADDRESS *EventLogLastEntry, + OUT BOOLEAN *EventLogTruncated +); + +// all structs except EFI_TCG2_BOOT_SERVICE_CAPABILITY are packed +#pragma pack(1) + +typedef struct tdEFI_TCG2_EVENT_HEADER { + UINT32 HeaderSize; + UINT16 HeaderVersion; + TCG_PCRINDEX PCRIndex; + TCG_EVENTTYPE EventType; +} EFI_TCG2_EVENT_HEADER; + +typedef struct tdEFI_TCG2_EVENT { + UINT32 Size; + EFI_TCG2_EVENT_HEADER Header; + UINT8 Event[]; +} EFI_TCG2_EVENT; + +#pragma pack() + +typedef +EFI_STATUS +(EFIAPI * EFI_TCG2_HASH_LOG_EXTEND_EVENT) ( + IN EFI_TCG2_PROTOCOL *This, + IN UINT64 Flags, + IN EFI_PHYSICAL_ADDRESS DataToHash, + IN UINT64 DataToHashLen, + IN EFI_TCG2_EVENT *EfiTcgEvent +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCG2_SUBMIT_COMMAND) ( + IN EFI_TCG2_PROTOCOL *This, + IN UINT32 InputParameterBlockSize, + IN UINT8 *InputParameterBlock, + IN UINT32 OutputParameterBlockSize, + IN UINT8 *OutputParameterBlock +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCG2_GET_ACTIVE_PCR_BANKS) ( + IN EFI_TCG2_PROTOCOL *This, + OUT UINT32 *ActivePcrBanks +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCG2_SET_ACTIVE_PCR_BANKS) ( + IN EFI_TCG2_PROTOCOL *This, + IN UINT32 ActivePcrBanks +); + +typedef +EFI_STATUS +(EFIAPI * EFI_TCG2_GET_RESULT_OF_SET_ACTIVE_PCR_BANKS) ( + IN EFI_TCG2_PROTOCOL *This, + OUT UINT32 *OperationPresent, + OUT UINT32 *Response +); + +// +// Interface structure for the TCG2 Protocol +// +struct _EFI_TCG2_PROTOCOL { + EFI_TCG2_GET_CAPABILITY GetCapability; + EFI_TCG2_GET_EVENT_LOG GetEventLog; + EFI_TCG2_HASH_LOG_EXTEND_EVENT HashLogExtendEvent; + EFI_TCG2_SUBMIT_COMMAND SubmitCommand; + EFI_TCG2_GET_ACTIVE_PCR_BANKS GetActivePcrBanks; + EFI_TCG2_SET_ACTIVE_PCR_BANKS SetActivePcrBanks; + EFI_TCG2_GET_RESULT_OF_SET_ACTIVE_PCR_BANKS GetResultOfSetActivePcrBanks; +}; + +extern EFI_GUID gEfiTcg2ProtocolGuid; + +#endif --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#113490): https://edk2.groups.io/g/devel/message/113490 Mute This Topic: https://groups.io/mt/103625305/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 17:30:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+113489+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113489+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=arm.com ARC-Seal: i=1; a=rsa-sha256; t=1704824467; cv=none; d=zohomail.com; s=zohoarc; b=b6rr26o10kadlODZP1gTxD2S2TLVIi6HfxHX0V1lK5mxcu87s4YiUKdIm0/wOJUh9NnLRpU+HaXoI7J3IgE2xhQNQcgiH7L5iq8fGnV+bTOB6xpreILPdZcUNHdKgO3PFZXtugpIl8Vo/Lndc5q0MNQfVre/ejSmBcqEO9Sjp8s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1704824467; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=VknDq38autiFkjpWu6R6rPlEeqvYexpyhRRHuxTWzhw=; b=FBU8P6QFCiHy21oGph56JYp1bbWYJiOTC+IubdmzkgWezTAmEHzQ+Hc8trD+Ygi7TqJ5LbK346jjb16/RXfrG9yLxntdqL7xAzsJU1JsdtZIpUAfZaWRhCqsxEhColQOjOUPfw9VOyP1kE/dz6A1dvmafscijJ1XQeoWlP+sx+Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113489+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 170482446736159.44619082380768; Tue, 9 Jan 2024 10:21:07 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=P9y51gtUNr8uixFw9Kr6Q4UaGIhDuyOr7zjLtZ2LRmk=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1704824467; v=1; b=Gznkf3ilaKVhDcNiLUbRf42T7XnoPmZDpe+HmnCQdg51t38yJ9v7+HYba5h8lLfXJEfSt6Yg /NUUj21bmbvAzYuw77Di2htD+XimR6fp1mlHdSYyz1UPocI0pqINt/gGa0dd9XSN+RalK7Q1MCk 0sf8IG/C4PDmqyw2r4STq7ok= X-Received: by 127.0.0.2 with SMTP id jAqEYY1788612xMMSJLV7KY3; Tue, 09 Jan 2024 10:21:07 -0800 X-Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.24492.1704824465367807103 for ; Tue, 09 Jan 2024 10:21:05 -0800 X-Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8772F14BF; Tue, 9 Jan 2024 10:21:50 -0800 (PST) X-Received: from beelzebub.ast.arm.com (unknown [10.118.29.240]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id DF7F53F5A1; Tue, 9 Jan 2024 10:21:04 -0800 (PST) From: "Stuart Yoder" To: devel@edk2.groups.io, Edhaya.Chandran@arm.com, gaojie@byosoft.com.cn Cc: ilias.apalodimas@linaro.org, heinrich.schuchardt@canonical.com, Samer.El-Haj-Mahmoud@arm.com, Jiewen.Yao@intel.com Subject: [edk2-devel] [PATCH v2 2/6] uefi-sct/SctPkg: TCG2 Protocol: add test infrastructure and GetCapability Test Date: Tue, 9 Jan 2024 12:20:49 -0600 Message-Id: <20240109182053.2540542-3-stuart.yoder@arm.com> In-Reply-To: <20240109182053.2540542-1-stuart.yoder@arm.com> References: <20240109182053.2540542-1-stuart.yoder@arm.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,stuart.yoder@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: 3VuNxwSGsnd7Xijlz88a2I6wx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1704824469326100015 Content-Type: text/plain; charset="utf-8" From: Joseph Hemann -implement initial infrastructure for the TCG2 protocol test including updates to .dsc file, inf file, GUID source files, update to Category.ini. -add test case for GetCapability(), as defined in the TCG EFI Protocol Spec 6.4.4. -add checkpoint for NULL pointer passed for buffer -add checkpoint for validating fields of the struct returned by GetCapabili= ty() Signed-off-by: Joseph Hemann Signed-off-by: Stuart Yoder --- uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc = | 1 + uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTest.inf | 51 +++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h = | 47 +++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTest.h | 77 +++++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c = | 37 ++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTestConformance.c | 361 ++++++++++++++++++++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTestMain.c | 102 ++++++ uefi-sct/SctPkg/CommonGenFramework.sh = | 1 + uefi-sct/SctPkg/Config/Data/Category.ini = | 7 + 9 files changed, 684 insertions(+) diff --git a/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc b/uefi-sct/SctPkg/UEFI/UEFI_= SCT.dsc index 155490fa39d3..96c93e73992c 100644 --- a/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc +++ b/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc @@ -301,6 +301,7 @@ SctPkg/TestCase/UEFI/EFI/Protocol/StorageSecurityComman= d/BlackBoxTest/StorageSec SctPkg/TestCase/UEFI/EFI/Protocol/AdapterInfo/BlackBoxTest/AdapterInfoProt= ocolBBTest.inf SctPkg/TestCase/UEFI/EFI/Protocol/TimeStamp/BlackBoxTest/TimeStampProtocol= BBTest.inf SctPkg/TestCase/UEFI/EFI/Protocol/RandomNumber/BlackBoxTest/RandomNumberBB= Test.inf +SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.inf =20 SctPkg/TestCase/UEFI/EFI/Protocol/Hash2/BlackBoxTest/Hash2BBTest.inf SctPkg/TestCase/UEFI/EFI/Protocol/PKCS7Verify/BlackBoxTest/Pkcs7BBTest.inf diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTest.inf b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/Bla= ckBoxTest/TCG2ProtocolBBTest.inf new file mode 100644 index 000000000000..563d81b7e859 --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTest.inf @@ -0,0 +1,51 @@ +## @file +# +# Copyright 2006 - 2015 Unified EFI, Inc.
+# Copyright (c) 2013, Intel Corporation. All rights reserved.
+# Copyright (c) 2021 - 2023, Arm Inc. All rights reserved.
+# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the B= SD License +# which accompanies this distribution. The full text of the license may = be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IM= PLIED. +# +## +#/*++ +# +# Module Name: +# +# TCG2ProtocolBBTest.inf +# +# Abstract: +# +# Component description file for TCG2 Protocol Black-Box Test. +# +#--*/ + +[defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D TCG2ProtocolBBTest + FILE_GUID =3D BD8CB762-3935-434C-AC3F-462244910A2D + MODULE_TYPE =3D UEFI_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D InitializeBBTestTCG2Protocol + +[sources.common] + Guid.c + TCG2ProtocolBBTestMain.c + TCG2ProtocolBBTestConformance.c + +[Packages] + MdePkg/MdePkg.dec + SctPkg/SctPkg.dec + SctPkg/UEFI/UEFI.dec + +[LibraryClasses] + UefiDriverEntryPoint + SctLib + EfiTestLib + +[Protocols] diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/G= uid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h new file mode 100644 index 000000000000..50b14272939f --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h @@ -0,0 +1,47 @@ +/** @file + + Copyright 2006 - 2016 Unified EFI, Inc.
+ Copyright (c) 2013, Intel Corporation. All rights reserved.
+ Copyright (c) 2021 - 2023, Arm Inc. All rights reserved.
+ + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BS= D License + which accompanies this distribution. The full text of the license may b= e found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. + +**/ +/*++ + +Module Name: + + guid.h + +Abstract: + + GUIDs auto-generated for EFI test assertion. + +--*/ + + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_001_GUID \ +{ 0xca93b02a, 0xe897, 0x4400, {0x81, 0x38, 0xc8, 0xa8, 0xcb, 0x2f, 0xc1, 0= xed }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid001; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_002_GUID \ +{ 0xfdee7001, 0x7e28, 0x4e35, {0x99, 0x66, 0x98, 0x0b, 0xeb, 0xba, 0xf1, 0= x57 }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid002; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_003_GUID \ +{ 0xda8821d9, 0x3d2c, 0x4698, {0x8c, 0xd5, 0x0f, 0x0c, 0x82, 0x94, 0x1d, 0= x0c }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid003; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_004_GUID \ +{ 0x8ddb031b, 0x7448, 0x40ee, {0xb1, 0xa2, 0xe6, 0xf8, 0xe8, 0xc4, 0xe5, 0= x5f }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid004; diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTest.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/Black= BoxTest/TCG2ProtocolBBTest.h new file mode 100644 index 000000000000..a7ce2db322d9 --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTest.h @@ -0,0 +1,77 @@ +/** @file + + Copyright 2006 - 2017 Unified EFI, Inc.
+ Copyright (c) 2013, Intel Corporation. All rights reserved.
+ Copyright (c) 2021 - 2023, Arm Inc. All rights reserved.
+ + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BS= D License + which accompanies this distribution. The full text of the license may b= e found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. + +**/ +/*++ + +Module Name: + TCG2ProtocolBBTest.h + +Abstract: + head file of test driver of EFI TCG2 Protocol Test + +--*/ + +#include "SctLib.h" +#include +#include +#include "Guid.h" + +#define EFI_TCG2_TEST_REVISION 0x00010000 + +//////////////////////////////////////////////////////////////////////////= //// +// +// Entry GUIDs for Function Test +// +#define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0101 \ + {0x39ff9c71, 0x4b41, 0x4e5b, {0xae, 0xd7, 0x87, 0xc7, 0x94, 0x18, 0x7d, 0= x67} } + +EFI_STATUS +EFIAPI +BBTestTCG2ProtocolUnload ( + IN EFI_HANDLE ImageHandle + ); + +EFI_STATUS +BBTestGetCapabilityConformanceTestCheckpoint1 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ); + +EFI_STATUS +BBTestGetCapabilityConformanceTestCheckpoint2 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ); + +EFI_STATUS +BBTestGetCapabilityConformanceTestCheckpoint3 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ); + +EFI_STATUS +BBTestGetCapabilityConformanceTestCheckpoint4 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ); + +EFI_STATUS +BBTestGetCapabilityConformanceTest ( + IN EFI_BB_TEST_PROTOCOL *This, + IN VOID *ClientInterface, + IN EFI_TEST_LEVEL TestLevel, + IN EFI_HANDLE SupportHandle + ); + diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/G= uid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c new file mode 100644 index 000000000000..3e75ffdc0a60 --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c @@ -0,0 +1,37 @@ +/** @file + + Copyright 2006 - 2013 Unified EFI, Inc.
+ Copyright (c) 2013, Intel Corporation. All rights reserved.
+ Copyright (c) 2021 - 2023, Arm Inc. All rights reserved.
+ + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BS= D License + which accompanies this distribution. The full text of the license may b= e found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. + +**/ +/*++ + +Module Name: + + guid.c + +Abstract: + + GUIDs auto-generated for EFI test assertion. + +--*/ + +#include "Efi.h" +#include "Guid.h" + +EFI_GUID gTcg2ConformanceTestAssertionGuid001 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_001_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid002 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_002_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid003 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_003_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid004 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_004_GUID; diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTestConformance.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol= /TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c new file mode 100644 index 000000000000..686cf4baebcd --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestConformance.c @@ -0,0 +1,361 @@ +/** @file + + Copyright 2006 - 2016 Unified EFI, Inc.
+ Copyright (c) 2021 - 2023, Arm Inc. All rights reserved.
+ + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BS= D License + which accompanies this distribution. The full text of the license may b= e found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. + +**/ +/*++ + +Module Name: + + TCG2BBTestConformance.c + +Abstract: + + for EFI Driver TCG2 Protocol's Basic Test + +--*/ + +#include "TCG2ProtocolBBTest.h" + +#define offsetof(st, m) __builtin_offsetof(st, m) + +/** + * @brief Entrypoint for GetCapability() Function Test. + * 4 checkpoints will be tested. + * @param This a pointer of EFI_BB_TEST_PROTOCOL + * @param ClientInterface A pointer to the interface array under test + * @param TestLevel Test "thoroughness" control + * @param SupportHandle A handle containing protocols required + * @return EFI_SUCCESS + * @return EFI_NOT_FOUND + */ + +EFI_STATUS +BBTestGetCapabilityConformanceTest ( + IN EFI_BB_TEST_PROTOCOL *This, + IN VOID *ClientInterface, + IN EFI_TEST_LEVEL TestLevel, + IN EFI_HANDLE SupportHandle + ) +{ + EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; + EFI_STATUS Status; + EFI_TCG2_PROTOCOL *TCG2; + + // + // init + // + TCG2 =3D (EFI_TCG2_PROTOCOL*)ClientInterface; + + // Ensure Protocol not NULL + if (TCG2 =3D=3D NULL) + return EFI_UNSUPPORTED; + + // + // Get the Standard Library Interface + // + Status =3D gtBS->HandleProtocol ( + SupportHandle, + &gEfiStandardTestLibraryGuid, + (VOID **) &StandardLib + ); + if (EFI_ERROR(Status)) { + return Status; + } + + // Test Using NULL BootCapability Pointer + BBTestGetCapabilityConformanceTestCheckpoint1 (StandardLib, TCG2); + + // Test for validating fields of struct returned by GetCapability() + BBTestGetCapabilityConformanceTestCheckpoint2 (StandardLib, TCG2); + + // Test Using Capability struct with struct size less than 1.0 size + BBTestGetCapabilityConformanceTestCheckpoint3 (StandardLib, TCG2); + + // Test Using Capability struct with struct size equal to 1.0 size + BBTestGetCapabilityConformanceTestCheckpoint4 (StandardLib, TCG2); + + return EFI_SUCCESS; +} + + +EFI_STATUS +BBTestGetCapabilityConformanceTestCheckpoint1 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ) +{ + EFI_TEST_ASSERTION AssertionType; + EFI_STATUS Status; + EFI_TCG2_BOOT_SERVICE_CAPABILITY *BootServiceCapPtr =3D NULL; + + Status =3D TCG2->GetCapability ( + TCG2, + BootServiceCapPtr); + + // Ensure GetCapability returns Invalid Parameter when passing in NULL p= ointer + if (EFI_INVALID_PARAMETER =3D=3D Status) { + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + } else { + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid001, + L"TCG2_PROTOCOL.GetCapability - GetCapability() returns E= FI_INVALID_PARAMETER with NULL pointer Capability Struct Passed in", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + return EFI_SUCCESS; +} + + +EFI_STATUS +BBTestGetCapabilityConformanceTestCheckpoint2 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ) +{ + EFI_TEST_ASSERTION AssertionType; + EFI_STATUS Status; + CHAR8 StructureVersionMajor; + CHAR8 StructureVersionMinor; + CHAR8 ProtocolVersionMajor; + CHAR8 ProtocolVersionMinor; + EFI_TCG2_BOOT_SERVICE_CAPABILITY BootServiceCap; + + BootServiceCap.Size =3D sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY); + + Status =3D TCG2->GetCapability ( + TCG2, + &BootServiceCap); + + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + + if (Status !=3D EFI_SUCCESS) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetCapability Test: GetCapability= should return EFI_SUCCESS" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + StructureVersionMajor =3D BootServiceCap.StructureVersion.Major; + StructureVersionMinor =3D BootServiceCap.StructureVersion.Minor; + + // TCG EFI Protocol spec 6.4.4 #4 + if ((StructureVersionMajor !=3D 1) | (StructureVersionMinor !=3D 1)) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetCapability Test: GetCapability= should have StructureVersion 1.1, reported value =3D %d.%d", + StructureVersionMajor, + StructureVersionMinor + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + ProtocolVersionMajor =3D BootServiceCap.ProtocolVersion.Major; + ProtocolVersionMinor =3D BootServiceCap.ProtocolVersion.Minor; + + // TCG EFI Protocol spec 6.4.4 #4 + if ((ProtocolVersionMajor !=3D 1) | (ProtocolVersionMinor !=3D 1)) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetCapability Test: GetCapability= should have ProtocolVersion 1.1, reported value =3D %d.%d", + ProtocolVersionMajor, + ProtocolVersionMinor + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + if (!(BootServiceCap.HashAlgorithmBitmap & EFI_TCG2_BOOT_HASH_ALG_SHA256= )) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetCapability Test: unexpected ha= sh algorithms reported =3D %x", + BootServiceCap.HashAlgorithmBitmap + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + if (!(BootServiceCap.SupportedEventLogs & EFI_TCG2_EVENT_LOG_FORMAT_TCG= _2)) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetCapability Test: GetCapability= must support TCG2 event log format" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + for (int i =3D 0; i < sizeof(BootServiceCap.ActivePcrBanks); i++) { + if (((BootServiceCap.ActivePcrBanks & (1u << i)) !=3D 0) && + ((BootServiceCap.HashAlgorithmBitmap & (1u << i)) =3D=3D 0)) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetCapability Test: ActivePcrBank= s is not a subset of HashAlgorithmBitmap. Reported ActivePcrBanks:0x%x Hash= AlgorithmBitmap=3D0x%x", + BootServiceCap.ActivePcrBanks, + BootServiceCap.HashAlgorithmBitmap + ); + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + } + + if (BootServiceCap.NumberOfPcrBanks < 1 ) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetCapability Test: expect at lea= st 1 PCR bank" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + // Verify that ActivePcrBanks includes SHA256, SHA384, or SHA512 + EFI_TCG2_EVENT_ALGORITHM_BITMAP HashBitMapAlgos =3D EFI_TCG2_BOOT_HASH_= ALG_SHA256 | EFI_TCG2_BOOT_HASH_ALG_SHA384 | EFI_TCG2_BOOT_HASH_ALG_SHA512; + + if (!(BootServiceCap.ActivePcrBanks & HashBitMapAlgos)) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetCapability Test: ActivePcrBank= s doesn't includes SHA256, SHA384, or SHA512", + BootServiceCap.ActivePcrBanks + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid002, + L"TCG2_PROTOCOL.GetCapability - GetCapability() populates= all elements of EFI_TCG_BOOT_SERVICE_CAPABILITY", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + return EFI_SUCCESS; +} + +EFI_STATUS +BBTestGetCapabilityConformanceTestCheckpoint3 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ) +{ + EFI_TEST_ASSERTION AssertionType; + EFI_STATUS Status; + EFI_TCG2_BOOT_SERVICE_CAPABILITY BootServiceCap; + + // set size to be value less than 1.0 or 1.1 struct + BootServiceCap.Size =3D 4; + + Status =3D TCG2->GetCapability ( + TCG2, + &BootServiceCap); + + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + + if (Status !=3D EFI_BUFFER_TOO_SMALL && BootServiceCap.Size !=3D sizeof(= EFI_TCG2_BOOT_SERVICE_CAPABILITY)) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetCapability Test: Did not retur= n Status =3D=3D EFI_BUFFER_TOO_SMALL and Size =3D=3D sizeof(EFI_TCG2_BOOT_S= ERVICE_CAPABILITY)" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid003, + L"TCG2_PROTOCOL.GetCapability() - GetCapability() handlin= g of input struct size less than the size of EFI_TCG2_BOOT_SERVICE_CAPABILI= TY up to and including the ManufacturerID field", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + return EFI_SUCCESS; +} + +EFI_STATUS +BBTestGetCapabilityConformanceTestCheckpoint4 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ) +{ + EFI_TEST_ASSERTION AssertionType; + EFI_STATUS Status; + EFI_TCG2_BOOT_SERVICE_CAPABILITY BootServiceCap; + + // set size of struct to be up to and including the ManufacturerID + // (this acts like a client with a 1.0 version of the struct) + BootServiceCap.Size =3D offsetof(EFI_TCG2_BOOT_SERVICE_CAPABILITY, Numbe= rOfPcrBanks); + + Status =3D TCG2->GetCapability ( + TCG2, + &BootServiceCap); + + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + + if (Status !=3D EFI_SUCCESS) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetCapability Test: 1.0 Compatibi= lity. GetCapability should return EFI_SUCCESS" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + // Verify returned Size equals the size of EFI_TCG2_BOOT_SERVICE_CAPABIL= ITY up to and including the ManufacturerID field. + if (BootServiceCap.Size !=3D offsetof(EFI_TCG2_BOOT_SERVICE_CAPABILITY, = NumberOfPcrBanks)) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetCapability Test: Did not retur= n Size =3D=3D EFI_TCG2_BOOT_SERVICE_CAPABILITY up to and including the Manu= facturerID field" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid004, + L"TCG2_PROTOCOL.GetCapability - GetCapability() backwards= compatibility check for 1.0 version of EFI_TCG_BOOT_SERVICE_CAPABILITY", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + return EFI_SUCCESS; +} + diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTestMain.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/B= lackBoxTest/TCG2ProtocolBBTestMain.c new file mode 100644 index 000000000000..1de87e9d4c66 --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestMain.c @@ -0,0 +1,102 @@ +/** @file + + Copyright 2006 - 2017 Unified EFI, Inc.
+ Copyright (c) 2013, Intel Corporation. All rights reserved.
+ Copyright (c) 2021 - 2023, Arm Inc. All rights reserved.
+ + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BS= D License + which accompanies this distribution. The full text of the license may b= e found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. + +**/ +/*++ + +Module Name: + TCG2ProtocolBBTestMain.c + +Abstract: + for EFI TCG2 Protocol Test + +--*/ + +#include "TCG2ProtocolBBTest.h" + +EFI_BB_TEST_PROTOCOL_FIELD gBBTestProtocolField =3D { + EFI_TCG2_TEST_REVISION, + EFI_TCG2_PROTOCOL_GUID, + L"Testing For EFI TCG2 Protocol", + L"Total # test cases for the EFI TCG2 Protocol" +}; + +EFI_GUID gSupportProtocolGuid1[2] =3D { + EFI_STANDARD_TEST_LIBRARY_GUID, + EFI_NULL_GUID +}; + +EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] =3D { + { + EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0101, + L"GetCapability_Conf", + L"Test the GetCapablity API", + EFI_TEST_LEVEL_DEFAULT, + gSupportProtocolGuid1, + EFI_TEST_CASE_AUTO, + BBTestGetCapabilityConformanceTest + }, + 0 +}; + +EFI_BB_TEST_PROTOCOL *gBBTestProtocolInterface; + +/** + * Creates/installs the BlackBox Interface and eminating Entry Point + * node list. + * @param ImageHandle The test driver image handle + * @param SystemTable Pointer to System Table + * @return EFI_SUCCESS Indicates the interface was installed + * @return EFI_OUT_OF_RESOURCES Indicates space for the new handle could = not be allocated + * @return EFI_INVALID_PARAMETER: One of the parameters has an invalid va= lue. + */ +EFI_STATUS +EFIAPI +InitializeBBTestTCG2Protocol ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EfiInitializeTestLib (ImageHandle, SystemTable); + + // + // initialize test utility lib + // + SctInitializeLib (ImageHandle, SystemTable); + + return EfiInitAndInstallBBTestInterface ( + &ImageHandle, + &gBBTestProtocolField, + gBBTestEntryField, + BBTestTCG2ProtocolUnload, + &gBBTestProtocolInterface + ); +} + +/** + * The driver's Unload function + * @param ImageHandle The test driver image handle + * @return EFI_SUCCESS Indicates the interface was Uninstalled +*/ +EFI_STATUS +EFIAPI +BBTestTCG2ProtocolUnload ( + IN EFI_HANDLE ImageHandle + ) +{ + return EfiUninstallAndFreeBBTestInterface ( + ImageHandle, + gBBTestProtocolInterface + ); +} diff --git a/uefi-sct/SctPkg/CommonGenFramework.sh b/uefi-sct/SctPkg/Common= GenFramework.sh index fb9043b56bca..9c8662d841ae 100755 --- a/uefi-sct/SctPkg/CommonGenFramework.sh +++ b/uefi-sct/SctPkg/CommonGenFramework.sh @@ -210,6 +210,7 @@ then cp $ProcessorType/DiskIo2BBTest.efi $Framework/= Test/ > NUL cp $ProcessorType/TimeStampBBTest.efi $Framework/= Test/ > NUL cp $ProcessorType/RandomNumberBBTest.efi $Framework/= Test/ > NUL + cp $ProcessorType/TCG2ProtocolBBTest.efi $Framework/= Test/ > NUL cp $ProcessorType/Hash2BBTest.efi $Framework/= Test/ > NUL cp $ProcessorType/Pkcs7BBTest.efi $Framework/= Test/ > NUL cp $ProcessorType/ConfigKeywordHandlerBBTest.efi $Framework/= Test/ > NUL diff --git a/uefi-sct/SctPkg/Config/Data/Category.ini b/uefi-sct/SctPkg/Con= fig/Data/Category.ini index b34d35db9ac8..4a53115b4d7d 100644 --- a/uefi-sct/SctPkg/Config/Data/Category.ini +++ b/uefi-sct/SctPkg/Config/Data/Category.ini @@ -1032,3 +1032,10 @@ CategoryGuid =3D CCD15FEC-6F73-4EEC-8395-3E69E4B940= BF InterfaceGuid =3D CCD15FEC-6F73-4EEC-8395-3E69E4B940BF Name =3D RiscvBootProtocolTest Description =3D RISC-V Boot Protocol Test + +[Category Data] +Revision =3D 0x00010000 +CategoryGuid =3D 607f766c-7455-42be-930b-e4d76db2720f +InterfaceGuid =3D 607f766c-7455-42be-930b-e4d76db2720f +Name =3D TCG2ProtocolTest +Description =3D TCG2 Protocol Test --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#113489): https://edk2.groups.io/g/devel/message/113489 Mute This Topic: https://groups.io/mt/103625304/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 17:30:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+113486+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113486+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=arm.com ARC-Seal: i=1; a=rsa-sha256; t=1704824466; cv=none; d=zohomail.com; s=zohoarc; b=PM8ln6NrNtn1T6lgtyfI+NLwKTSruiN18Pcwfj4k8foIi748G6TRuKF5RG1bJwqJcVOs6m0pTedhzOWGas3LW8KfIAvnjiznny1kmajyIKjRgeAwvxCAi3seyC0ztUOG9ouPCJUnVD/LNrgrOxtG6SG7Ddo1kjvN/NvOGWqM+AA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1704824466; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=b0NSVchZyjL9aBG/pFVSfdNwJIDFTjy+DmamXRDdW1c=; b=G078hZtL4bSuLYnfHOg3xvxMmJgLxj5tjxYg4PYHKJmEbL0x9VAf8ydjzJtfB/vCjiRdFIwDK0MRupgD72iOrYePQjXfVcyuGuPrl28jHkU0+NRECb5OIh7YUY2/mHzLqra+egP0OIE3s6CmQsaSshifOI1UN7HjT363FMm6G3s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113486+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 170482446643586.1234511922762; Tue, 9 Jan 2024 10:21:06 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=KVPWor4OK8Zw6WXGNBpsWrvy3pXANV+IlZE46nKDh2g=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1704824466; v=1; b=MuXIudFFZZnStn9Xv1eBNv+CiYqQWyEIR29N4zMSnq7Ct1OE29na36AVKRDtO+mya0qyBQaW +abHdILJZJeTfCjxcHfwQLHckh/OId6s/VuIa1+Ju+lCld500Lj/kolt1MDJqoH+YL2sKZ3Cys6 /lMHN8R97Huw8a0i3pnd11wg= X-Received: by 127.0.0.2 with SMTP id KgaUYY1788612x2F85UQmZSI; Tue, 09 Jan 2024 10:21:06 -0800 X-Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.24491.1704824465335244557 for ; Tue, 09 Jan 2024 10:21:05 -0800 X-Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 98122152B; Tue, 9 Jan 2024 10:21:50 -0800 (PST) X-Received: from beelzebub.ast.arm.com (unknown [10.118.29.240]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 00A403F7F4; Tue, 9 Jan 2024 10:21:04 -0800 (PST) From: "Stuart Yoder" To: devel@edk2.groups.io, Edhaya.Chandran@arm.com, gaojie@byosoft.com.cn Cc: ilias.apalodimas@linaro.org, heinrich.schuchardt@canonical.com, Samer.El-Haj-Mahmoud@arm.com, Jiewen.Yao@intel.com Subject: [edk2-devel] [PATCH v2 3/6] uefi-sct/SctPkg: TCG2 Protocol: add GetActivePcrBanks test Date: Tue, 9 Jan 2024 12:20:50 -0600 Message-Id: <20240109182053.2540542-4-stuart.yoder@arm.com> In-Reply-To: <20240109182053.2540542-1-stuart.yoder@arm.com> References: <20240109182053.2540542-1-stuart.yoder@arm.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,stuart.yoder@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: c4XkSMRiEFa9Xk13iDsZEaHWx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1704824468056100001 Content-Type: text/plain; charset="utf-8" From: Joseph Hemann -add test for GetActivePcrBanks() -checkpoint for NULL pointer passed for buffer -checkpoint for test of function with proper input Signed-off-by: Joseph Hemann Signed-off-by: Stuart Yoder --- uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h = | 11 ++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTest.h | 23 +++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c = | 4 + uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTestConformance.c | 159 ++++++++++++++++++++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTestMain.c | 9 ++ 5 files changed, 206 insertions(+) diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/G= uid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h index 50b14272939f..d6797f5287f4 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h @@ -45,3 +45,14 @@ extern EFI_GUID gTcg2ConformanceTestAssertionGuid003; { 0x8ddb031b, 0x7448, 0x40ee, {0xb1, 0xa2, 0xe6, 0xf8, 0xe8, 0xc4, 0xe5, 0= x5f }} =20 extern EFI_GUID gTcg2ConformanceTestAssertionGuid004; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_005_GUID \ +{ 0x7a1e79a3, 0x4064, 0x4372, {0xbb, 0x64, 0x55, 0xb8, 0xf2, 0xa5, 0xa3, 0= x26 }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid005; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_006_GUID \ +{ 0xb0e717c4, 0xb1e2, 0x49f7, {0xb2, 0xd7, 0x60, 0x58, 0x97, 0x7d, 0x09, 0= x2c }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid006; + diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTest.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/Black= BoxTest/TCG2ProtocolBBTest.h index a7ce2db322d9..80c02d9ed2d2 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTest.h +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTest.h @@ -37,6 +37,9 @@ Abstract: #define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0101 \ {0x39ff9c71, 0x4b41, 0x4e5b, {0xae, 0xd7, 0x87, 0xc7, 0x94, 0x18, 0x7d, 0= x67} } =20 +#define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0102 \ + {0x847f1ae0, 0xb429, 0x49f1, {0x9e, 0x0c, 0x8f, 0x43, 0xfb, 0x55, 0x34, 0= x54} } + EFI_STATUS EFIAPI BBTestTCG2ProtocolUnload ( @@ -67,6 +70,18 @@ BBTestGetCapabilityConformanceTestCheckpoint4 ( IN EFI_TCG2_PROTOCOL *TCG2 ); =20 +EFI_STATUS +BBTestGetActivePcrBanksConformanceTestCheckpoint1 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ); + +EFI_STATUS +BBTestGetActivePcrBanksConformanceTestCheckpoint2 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ); + EFI_STATUS BBTestGetCapabilityConformanceTest ( IN EFI_BB_TEST_PROTOCOL *This, @@ -75,3 +90,11 @@ BBTestGetCapabilityConformanceTest ( IN EFI_HANDLE SupportHandle ); =20 +EFI_STATUS +BBTestGetActivePcrBanksConformanceTest ( + IN EFI_BB_TEST_PROTOCOL *This, + IN VOID *ClientInterface, + IN EFI_TEST_LEVEL TestLevel, + IN EFI_HANDLE SupportHandle + ); + diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/G= uid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c index 3e75ffdc0a60..0dc2cfddfcbf 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c @@ -35,3 +35,7 @@ EFI_GUID gTcg2ConformanceTestAssertionGuid002 =3D EFI_TES= T_TCG2CONFORMANCE_ASSERTI EFI_GUID gTcg2ConformanceTestAssertionGuid003 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_003_GUID; =20 EFI_GUID gTcg2ConformanceTestAssertionGuid004 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_004_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid005 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_005_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid006 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_006_GUID; diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTestConformance.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol= /TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c index 686cf4baebcd..681f57ac224a 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestConformance.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestConformance.c @@ -87,6 +87,58 @@ BBTestGetCapabilityConformanceTest ( return EFI_SUCCESS; } =20 +/** + * @brief Entrypoint for GetActivePcrBanks() Function Test. + * 2 checkpoints will be tested. + * @param This a pointer of EFI_BB_TEST_PROTOCOL + * @param ClientInterface A pointer to the interface array under test + * @param TestLevel Test "thoroughness" control + * @param SupportHandle A handle containing protocols required + * @return EFI_SUCCESS + * @return EFI_NOT_FOUND + */ + +EFI_STATUS +BBTestGetActivePcrBanksConformanceTest ( + IN EFI_BB_TEST_PROTOCOL *This, + IN VOID *ClientInterface, + IN EFI_TEST_LEVEL TestLevel, + IN EFI_HANDLE SupportHandle + ) +{ + EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; + EFI_STATUS Status; + EFI_TCG2_PROTOCOL *TCG2; + + // + // init + // + TCG2 =3D (EFI_TCG2_PROTOCOL*)ClientInterface; + + // Ensure Protocol not NULL + if (TCG2 =3D=3D NULL) + return EFI_UNSUPPORTED; + + // + // Get the Standard Library Interface + // + Status =3D gtBS->HandleProtocol ( + SupportHandle, + &gEfiStandardTestLibraryGuid, + (VOID **) &StandardLib + ); + if (EFI_ERROR(Status)) { + return Status; + } + + // Test with invalid (NULL) bitmap + BBTestGetActivePcrBanksConformanceTestCheckpoint1 (StandardLib, TCG2); + + // Test with valid bitmap + BBTestGetActivePcrBanksConformanceTestCheckpoint2 (StandardLib, TCG2); + + return EFI_SUCCESS; +} =20 EFI_STATUS BBTestGetCapabilityConformanceTestCheckpoint1 ( @@ -359,3 +411,110 @@ BBTestGetCapabilityConformanceTestCheckpoint4 ( return EFI_SUCCESS; } =20 +EFI_STATUS +BBTestGetActivePcrBanksConformanceTestCheckpoint1 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ) +{ + EFI_TEST_ASSERTION AssertionType; + EFI_STATUS Status; + + EFI_TCG2_EVENT_ALGORITHM_BITMAP *ActivePcrBanks =3D NULL; + Status =3D TCG2->GetActivePcrBanks ( + TCG2, + ActivePcrBanks); + + // Ensure GetActivePcrBanks returns Invalid Parameter when passing in NU= LL pointer + if (EFI_INVALID_PARAMETER =3D=3D Status) { + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + } else { + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid005, + L"TCG2_PROTOCOL.GetActivePcrBanks - GetActivePcrBanks() r= eturns EFI_INVALID_PARAMETER with NULL pointer Passed in", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + return EFI_SUCCESS; +} + +EFI_STATUS +BBTestGetActivePcrBanksConformanceTestCheckpoint2 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ) +{ + EFI_TEST_ASSERTION AssertionType; + EFI_STATUS Status; + EFI_TCG2_EVENT_ALGORITHM_BITMAP ActivePcrBanks; + EFI_TCG2_BOOT_SERVICE_CAPABILITY BootServiceCap; + + Status =3D TCG2->GetActivePcrBanks ( + TCG2, + &ActivePcrBanks); + + // Ensure GetActivePcrBanks returns EFI_SUCCESS + if (Status =3D=3D EFI_SUCCESS) { + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + } else { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetActivePcrBanks Test: GetActive= PcrBanks should return EFI_SUCCESS" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + EFI_TCG2_EVENT_ALGORITHM_BITMAP BitMapAlgos =3D EFI_TCG2_BOOT_HASH_ALG_= SHA256 | EFI_TCG2_BOOT_HASH_ALG_SHA384 | EFI_TCG2_BOOT_HASH_ALG_SHA512; + + // Ensure ActivePcrBanks has SHA256/384/512 in its Bitmap + if (!(ActivePcrBanks & BitMapAlgos)) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetActivePcrBanks Test: GetActive= PcrBanks should have SHA256/384/512 Algorithm in its Bitmap. ActivePcrBanks= =3D %x", + ActivePcrBanks + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + BootServiceCap.Size =3D sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY); + + Status =3D TCG2->GetCapability ( + TCG2, + &BootServiceCap); + + // Ensure ActivePcrBanks is the same returned as GetCapability() + if (ActivePcrBanks !=3D BootServiceCap.ActivePcrBanks) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetActivePcrBanks Test:Returned A= ctivePcrBanks should match the one returned by GetCapability()" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid006, + L"TCG2_PROTOCOL.GetActivePcrBanks - GetActivePcrBanks sho= uld return with EFI_SUCCESS and have SHA256/384/512 Algoritms in its Bitmap= ", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + return EFI_SUCCESS; +} diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTestMain.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/B= lackBoxTest/TCG2ProtocolBBTestMain.c index 1de87e9d4c66..7fc202246cd8 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestMain.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestMain.c @@ -47,6 +47,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] =3D { EFI_TEST_CASE_AUTO, BBTestGetCapabilityConformanceTest }, + { + EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0102, + L"GetActivePcrBanks_Conf", + L"Test the GetActivePcrBanks API", + EFI_TEST_LEVEL_DEFAULT, + gSupportProtocolGuid1, + EFI_TEST_CASE_AUTO, + BBTestGetActivePcrBanksConformanceTest + }, 0 }; =20 --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#113486): https://edk2.groups.io/g/devel/message/113486 Mute This Topic: https://groups.io/mt/103625301/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 17:30:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+113488+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113488+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=arm.com ARC-Seal: i=1; a=rsa-sha256; t=1704824466; cv=none; d=zohomail.com; s=zohoarc; b=C71F01Dnjm1j6TtCu0K91M1pAT+I+rj92wrtqYNoFDrhz0YESDTZcd72LKeDYIyq/2MEEMFG8nXt06yYJ/r3xQ53aMwqYRcHA0XEf4N83/3UDRCDDtwXFoVc8czTM/5h28an91kjOuuyDoOF0fDnVLWlZ3P1noYhGqZ65ZzGXKo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1704824466; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=CiczHCqhjLjU3P5/Pg29wxSYgxgosod5f6qQO+UjCPw=; b=Kz1dvidhOyT3bPoqPP+DFl+K3KxUkmKO2YGCL27SE0Saxb7b2RLk3HM6E1VsN9suTXAjuMT/YE/BWb6Rd/cA+VvX1r52/SEET/qXyJR7xlde2reTxajiKg24BI3E+w+puJ5OlGpjdX1iTtYmB/W0yg1e7VbVuT1Ddsjn9gjvtHI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113488+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1704824466906856.789684333347; Tue, 9 Jan 2024 10:21:06 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=QXoU0+RidVSTFR422uwRjKFqQh4x2ucJnn80whEEGx4=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1704824466; v=1; b=LvG4yjNYaMNBHaihTbuPuDZeXzXOUjQoEp5MaAamjTNkbozBj7/ja+q7P8HhFtPDKDl731Nh fkj+ckSLPGOWSwIRZjc+dDrO0guv5Q+fzYagCQeR0u5zgpuO4MQqyvUs3WEmn6jSwyUbqF6+zk6 64uSan4vIKJFuEi7Nj95qOuI= X-Received: by 127.0.0.2 with SMTP id dZi9YY1788612xfpTM6C9R0q; Tue, 09 Jan 2024 10:21:06 -0800 X-Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web10.24571.1704824465406611858 for ; Tue, 09 Jan 2024 10:21:05 -0800 X-Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id AA1FF153B; Tue, 9 Jan 2024 10:21:50 -0800 (PST) X-Received: from beelzebub.ast.arm.com (unknown [10.118.29.240]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 114543F5A1; Tue, 9 Jan 2024 10:21:05 -0800 (PST) From: "Stuart Yoder" To: devel@edk2.groups.io, Edhaya.Chandran@arm.com, gaojie@byosoft.com.cn Cc: ilias.apalodimas@linaro.org, heinrich.schuchardt@canonical.com, Samer.El-Haj-Mahmoud@arm.com, Jiewen.Yao@intel.com Subject: [edk2-devel] [PATCH v2 4/6] uefi-sct/SctPkg: TCG2 Protocol: add HashLogExtendEvent test Date: Tue, 9 Jan 2024 12:20:51 -0600 Message-Id: <20240109182053.2540542-5-stuart.yoder@arm.com> In-Reply-To: <20240109182053.2540542-1-stuart.yoder@arm.com> References: <20240109182053.2540542-1-stuart.yoder@arm.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,stuart.yoder@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: 5aMie0u0xWK5z4eyiWTtioBNx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1704824468062100002 Content-Type: text/plain; charset="utf-8" From: Joseph Hemann -add tests for HashLogExtendEvent() -tests with valid, invalid, and out of range parameters -do extend of data to PCR 16 Signed-off-by: Joseph Hemann Signed-off-by: Stuart Yoder --- uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h = | 29 ++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTest.h | 29 ++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c = | 12 + uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTestConformance.c | 283 ++++++++++++++++++++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTestMain.c | 9 + 5 files changed, 362 insertions(+) diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/G= uid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h index d6797f5287f4..dcfd5919acda 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h @@ -56,3 +56,32 @@ extern EFI_GUID gTcg2ConformanceTestAssertionGuid005; =20 extern EFI_GUID gTcg2ConformanceTestAssertionGuid006; =20 +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_007_GUID \ +{ 0xa8e1b5e6, 0xfc09, 0x461c, {0xb0, 0xe9, 0x2a, 0x49, 0xcd, 0x25, 0xc1, 0= x24 }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid007; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_008_GUID \ +{ 0x26f04a9b, 0x7b7a, 0x4f47, {0xbe, 0xa8, 0xb1, 0xa6, 0x02, 0x65, 0x19, 0= x8a }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid008; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_009_GUID \ +{ 0x4d1d9985, 0x91e2, 0x4948, {0x89, 0x16, 0xbb, 0x98, 0x13, 0x62, 0x39, 0= x1d }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid009; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_010_GUID \ +{ 0xfb59cab7, 0x4f8c, 0x4ded, {0xa4, 0x1c, 0xc8, 0x41, 0x20, 0x1c, 0x37, 0= x22 }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid010; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_011_GUID \ +{ 0x0363d22f, 0xc66a, 0x4872, {0xa5, 0x46, 0x06, 0x7f, 0x6a, 0x0d, 0xdb, 0= xcd }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid011; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_012_GUID \ +{ 0x9cd6d636, 0x603a, 0x4b78, {0x80, 0xa3, 0xa3, 0xb9, 0xcc, 0x6a, 0x0b, 0= x08 }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid012; diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTest.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/Black= BoxTest/TCG2ProtocolBBTest.h index 80c02d9ed2d2..cbbadef4a5c7 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTest.h +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTest.h @@ -40,6 +40,15 @@ Abstract: #define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0102 \ {0x847f1ae0, 0xb429, 0x49f1, {0x9e, 0x0c, 0x8f, 0x43, 0xfb, 0x55, 0x34, 0= x54} } =20 +#define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0103 \ + {0x907a7878, 0xb294, 0xf147, {0xe9, 0x0a, 0x65, 0x43, 0xab, 0x55, 0x76, 0= x46} } + +#define EV_POST_CODE 0x01 + +#define EFI_TCG2_EXTEND_ONLY 0x0000000000000001 + +#define PE_COFF_IMAGE 0x0000000000000010 + EFI_STATUS EFIAPI BBTestTCG2ProtocolUnload ( @@ -82,6 +91,18 @@ BBTestGetActivePcrBanksConformanceTestCheckpoint2 ( IN EFI_TCG2_PROTOCOL *TCG2 ); =20 +EFI_STATUS +BBTestHashLogExtendEventConformanceTestCheckpoint1 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ); + +EFI_STATUS +BBTestHashLogExtendEventConformanceTestCheckpoint2 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ); + EFI_STATUS BBTestGetCapabilityConformanceTest ( IN EFI_BB_TEST_PROTOCOL *This, @@ -98,3 +119,11 @@ BBTestGetActivePcrBanksConformanceTest ( IN EFI_HANDLE SupportHandle ); =20 +EFI_STATUS +BBTestHashLogExtendEventConformanceTest ( + IN EFI_BB_TEST_PROTOCOL *This, + IN VOID *ClientInterface, + IN EFI_TEST_LEVEL TestLevel, + IN EFI_HANDLE SupportHandle + ); + diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/G= uid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c index 0dc2cfddfcbf..ccc20259d128 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c @@ -39,3 +39,15 @@ EFI_GUID gTcg2ConformanceTestAssertionGuid004 =3D EFI_TE= ST_TCG2CONFORMANCE_ASSERTI EFI_GUID gTcg2ConformanceTestAssertionGuid005 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_005_GUID; =20 EFI_GUID gTcg2ConformanceTestAssertionGuid006 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_006_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid007 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_007_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid008 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_008_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid009 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_009_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid010 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_010_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid011 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_011_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid012 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_012_GUID; diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTestConformance.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol= /TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c index 681f57ac224a..2768eef725e8 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestConformance.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestConformance.c @@ -140,6 +140,57 @@ BBTestGetActivePcrBanksConformanceTest ( return EFI_SUCCESS; } =20 +/** + * @brief Entrypoint for HashLogExtendEvent() Function Test. + * 2 checkpoints will be tested. + * @param This a pointer of EFI_BB_TEST_PROTOCOL + * @param ClientInterface A pointer to the interface array under test + * @param TestLevel Test "thoroughness" control + * @param SupportHandle A handle containing protocols required + * @return EFI_SUCCESS + * @return EFI_NOT_FOUND + */ + +EFI_STATUS +BBTestHashLogExtendEventConformanceTest ( + IN EFI_BB_TEST_PROTOCOL *This, + IN VOID *ClientInterface, + IN EFI_TEST_LEVEL TestLevel, + IN EFI_HANDLE SupportHandle + ) +{ + EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; + EFI_STATUS Status; + EFI_TCG2_PROTOCOL *TCG2; + // + // init + // + TCG2 =3D (EFI_TCG2_PROTOCOL*)ClientInterface; + + // Ensure Protocol not NULL + if (TCG2 =3D=3D NULL) + return EFI_UNSUPPORTED; + + // Get the Standard Library Interface + // + Status =3D gtBS->HandleProtocol ( + SupportHandle, + &gEfiStandardTestLibraryGuid, + (VOID **) &StandardLib + ); + if (EFI_ERROR(Status)) { + return Status; + } + + // Test HashLogExtendEvent with invalid arguments + BBTestHashLogExtendEventConformanceTestCheckpoint1 (StandardLib, TCG2); + + // Test HashLogExtendEvent with valid arguments + BBTestHashLogExtendEventConformanceTestCheckpoint2 (StandardLib, TCG2); + + return EFI_SUCCESS; +} + EFI_STATUS BBTestGetCapabilityConformanceTestCheckpoint1 ( IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, @@ -518,3 +569,235 @@ BBTestGetActivePcrBanksConformanceTestCheckpoint2 ( =20 return EFI_SUCCESS; } + +EFI_STATUS +BBTestHashLogExtendEventConformanceTestCheckpoint1 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ) +{ + EFI_TEST_ASSERTION AssertionType; + EFI_STATUS Status; + UINT64 Flags =3D 0; + EFI_PHYSICAL_ADDRESS DataToHash; + UINT64 DataToHashLen; + EFI_TCG2_EVENT *EfiTcgEvent; + const CHAR8 *EventData =3D "TCG2 Protocol Test= "; + const CHAR8 *Str =3D "The quick brown fox jump= s over the lazy dog"; + UINT32 EfiTcgEventSize =3D sizeof(EFI_TCG= 2_EVENT) + SctAsciiStrLen(EventData); + + DataToHash =3D (EFI_PHYSICAL_ADDRESS)Str; + DataToHashLen =3D SctAsciiStrLen(Str); + + Status =3D gtBS->AllocatePool ( + EfiBootServicesData, + EfiTcgEventSize, + (VOID **)&EfiTcgEvent + ); + + EfiTcgEvent->Header.HeaderSize =3D sizeof(EFI_TCG2_EVENT_HEADER); + EfiTcgEvent->Header.HeaderVersion =3D 1; + EfiTcgEvent->Header.EventType =3D EV_POST_CODE; + EfiTcgEvent->Header.PCRIndex =3D 16; + EfiTcgEvent->Size =3D EfiTcgEvent->Header.HeaderSize + SctAsciiStrLen(Ev= entData); + + // Ensure HashLogExtendEvent returns Invalid Parameter when passing in N= ULL DataToHash pointer + // EFI Protocol Spec Section 6.6.5 #1 + Status =3D TCG2->HashLogExtendEvent ( + TCG2, + Flags, + (EFI_PHYSICAL_ADDRESS)NULL, + 0, + EfiTcgEvent); + + if (EFI_INVALID_PARAMETER !=3D Status) { + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid007, + L"TCG2_PROTOCOL.HashLogExtendEvent - Test with NULL DataT= oHash Pointer should return EFI_INVALID_PARAMETER", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // Ensure HashLogExtendEvent returns Invalid Parameter when passing in N= ULL EfiTcgEvent pointer + // EFI Protocol Spec Section 6.6.5 #1 + Status =3D TCG2->HashLogExtendEvent ( + TCG2, + Flags, + DataToHash, + DataToHashLen, + NULL); + + if (EFI_INVALID_PARAMETER !=3D Status) { + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid008, + L"TCG2_PROTOCOL.HashLogExtendEvent - Test with NULL EfiTc= gEvent Pointer should return EFI_INVALID_PARAMETER", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // Ensure HashLogExtendEvent returns Invalid Parameter when passed in Ev= entSize < HeaderSize + sizeof(UINT32) + // EFI Protocol Spec Section 6.6.5 #2 + EfiTcgEvent->Size =3D EfiTcgEvent->Header.HeaderSize + sizeof(UINT32) - = 1; + + Status =3D TCG2->HashLogExtendEvent ( + TCG2, + Flags, + DataToHash, + DataToHashLen, + EfiTcgEvent); + + if (EFI_INVALID_PARAMETER !=3D Status) { + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid009, + L"TCG2_PROTOCOL.HashLogExtendEvent - Test with Event.Size= < Event.Header.HeaderSize + sizeof(UINT32) should return EFI_INVALID_PARAM= ETER", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // Ensure HashLogExtendEvent returns Invalid Parameter when passing in P= CR Index > 23 + // EFI Protocol Spec Section 6.6.5 #3 + EfiTcgEvent->Header.PCRIndex =3D 24; + EfiTcgEvent->Size =3D EfiTcgEvent->Header.HeaderSize + SctAsciiStrLen(Ev= entData); + + Status =3D TCG2->HashLogExtendEvent ( + TCG2, + Flags, + DataToHash, + DataToHashLen, + EfiTcgEvent); + + if (EFI_INVALID_PARAMETER !=3D Status) { + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid010, + L"TCG2_PROTOCOL.HashLogExtendEvent - Test with PCRIndex >= 23 should return EFI_INVALID_PARAMETER", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + return EFI_SUCCESS; +} + +EFI_STATUS +BBTestHashLogExtendEventConformanceTestCheckpoint2 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ) +{ + EFI_TCG2_EVENT *EfiTcgEvent; + EFI_TEST_ASSERTION AssertionType; + EFI_STATUS Status; + UINT64 Flags =3D 0; + EFI_PHYSICAL_ADDRESS DataToHash; + UINT64 DataToHashLen; + const CHAR8 *Str =3D "The quick brown fox jump= s over the lazy dog"; + const CHAR8 *EventData =3D "TCG2 Protocol Test= "; + UINT32 EfiTcgEventSize =3D sizeof(EFI_TCG2_EVENT) + SctAsciiStrLen(Event= Data); + + DataToHash =3D (EFI_PHYSICAL_ADDRESS)Str; + DataToHashLen =3D SctAsciiStrLen(Str); + + Status =3D gtBS->AllocatePool ( + EfiBootServicesData, + EfiTcgEventSize, + (VOID **)&EfiTcgEvent + ); + + EfiTcgEvent->Header.HeaderSize =3D sizeof(EFI_TCG2_EVENT_HEADER); + EfiTcgEvent->Header.HeaderVersion =3D 1; + EfiTcgEvent->Header.EventType =3D EV_POST_CODE; + EfiTcgEvent->Header.PCRIndex =3D 16; + EfiTcgEvent->Size =3D EfiTcgEvent->Header.HeaderSize + SctAsciiStrLen(Ev= entData); + + // Perform HashLogExtendEvent over test buffer to PCR 16 + Status =3D TCG2->HashLogExtendEvent ( + TCG2, + Flags, + DataToHash, + DataToHashLen, + EfiTcgEvent); + + if (Status !=3D EFI_SUCCESS) { + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid011, + L"TCG2_PROTOCOL.HashLogExtendEvent - HashLogExtendEvent()= Test: HashLogExtendEvent should return EFI_SUCCESS", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // Test with valid Parameters but with Flags =3D PE_COFF_IMAGE + // EFI Protocol Spec Section 6.6.5 #4 + Flags =3D PE_COFF_IMAGE; + + Status =3D TCG2->HashLogExtendEvent ( + TCG2, + Flags, + DataToHash, + DataToHashLen, + EfiTcgEvent); + + if (Status !=3D EFI_UNSUPPORTED) { + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid012, + L"TCG2_PROTOCOL.HashLogExtendEvent - HashLogExtendEvent()= Test Handling of PE_COFF_IMAGE flag", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + gtBS->FreePool (EfiTcgEvent); + + return EFI_SUCCESS; +} diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTestMain.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/B= lackBoxTest/TCG2ProtocolBBTestMain.c index 7fc202246cd8..f7b9e487eda2 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestMain.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestMain.c @@ -56,6 +56,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] =3D { EFI_TEST_CASE_AUTO, BBTestGetActivePcrBanksConformanceTest }, + { + EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0103, + L"HashLogExtendEvent_Conf", + L"Test the HashLogExtendEvent API", + EFI_TEST_LEVEL_DEFAULT, + gSupportProtocolGuid1, + EFI_TEST_CASE_AUTO, + BBTestHashLogExtendEventConformanceTest + }, 0 }; =20 --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#113488): https://edk2.groups.io/g/devel/message/113488 Mute This Topic: https://groups.io/mt/103625303/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 17:30:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+113491+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113491+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=arm.com ARC-Seal: i=1; a=rsa-sha256; t=1704824468; cv=none; d=zohomail.com; s=zohoarc; b=gZQmd32zpxWxeDoFYCNLqgJmqYomgOnwL4rsRRw/1YX808FthzK04heN2SCc64jkCDowot0XTEn76BLyDLK3c4cEoxvNdW0K0kwFqM064sMuGItmeZJ+4j9kIhzDkxowSM52prVjXNkpWv75Ze3L+XAi/pEbiLNcJACUZduFjas= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1704824468; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=MU71JLgic9dbj+t0y8QvcaSGMKaPjNr7YD2pj72SkkA=; b=Ls9Ibty7FSQSpRbpxGj8K9CXVn4RFfs0bZwhHYwPMgxpZbH0jB81m90Gx4c5pjutXMh1dbKd1Ckw5Aapm8zcjrhEAedch6PpxwvSQUI/JRmQEmpsO/38NdtOt3qf+e0qUcfGWVQAkoC5MsOO9lhwS0VusBkqOVzTht38EPYQ654= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113491+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1704824468598651.3936249455835; Tue, 9 Jan 2024 10:21:08 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=1jtLo4+ynXfwJzicPceJGO2F+yq3AsjVflebiditDbU=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1704824468; v=1; b=KQseMnLeDRCkWDwaF1Qbah88GsnAX6JZSwxUP3iCDnoCu/2nMbZOzvIpREFEzDr8aZAeEVXD i8+RrfUxG0vwm3ba8eow2hzAp/skMlc+V2U77U185oabT+20T+5lYnQsYHESuI8JNlSSfrrSkf8 vrZ4+KbOI/FBX82xp1y9kYGs= X-Received: by 127.0.0.2 with SMTP id 35ckYY1788612xDXvmLVvSl6; Tue, 09 Jan 2024 10:21:08 -0800 X-Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web10.24572.1704824465874351536 for ; Tue, 09 Jan 2024 10:21:06 -0800 X-Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BBD321570; Tue, 9 Jan 2024 10:21:50 -0800 (PST) X-Received: from beelzebub.ast.arm.com (unknown [10.118.29.240]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 2360D3F7F4; Tue, 9 Jan 2024 10:21:05 -0800 (PST) From: "Stuart Yoder" To: devel@edk2.groups.io, Edhaya.Chandran@arm.com, gaojie@byosoft.com.cn Cc: ilias.apalodimas@linaro.org, heinrich.schuchardt@canonical.com, Samer.El-Haj-Mahmoud@arm.com, Jiewen.Yao@intel.com Subject: [edk2-devel] [PATCH v2 5/6] uefi-sct/SctPkg: TCG2 Protocol: add GetEventLog test Date: Tue, 9 Jan 2024 12:20:52 -0600 Message-Id: <20240109182053.2540542-6-stuart.yoder@arm.com> In-Reply-To: <20240109182053.2540542-1-stuart.yoder@arm.com> References: <20240109182053.2540542-1-stuart.yoder@arm.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,stuart.yoder@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: EwiLlDkcpQwp5rcR4VGEEknTx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1704824469335100017 Content-Type: text/plain; charset="utf-8" From: Joseph Hemann -add test for GetEventLog() -test for valid and invalid event log format -test event log header -verify expected event log entry Signed-off-by: Joseph Hemann Signed-off-by: Stuart Yoder --- uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h = | 20 ++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTest.h | 17 ++ uefi-sct/SctPkg/UEFI/Protocol/TCG2.h = | 46 +++++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c = | 8 + uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTestConformance.c | 207 +++++++++++++++++++- 5 files changed, 297 insertions(+), 1 deletion(-) diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/G= uid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h index dcfd5919acda..746ff83f899c 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h @@ -85,3 +85,23 @@ extern EFI_GUID gTcg2ConformanceTestAssertionGuid011; { 0x9cd6d636, 0x603a, 0x4b78, {0x80, 0xa3, 0xa3, 0xb9, 0xcc, 0x6a, 0x0b, 0= x08 }} =20 extern EFI_GUID gTcg2ConformanceTestAssertionGuid012; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_013_GUID \ +{ 0xfc80408e, 0x9a3c, 0x4054, {0x96, 0xf9, 0x31, 0x23, 0x35, 0xc2, 0x31, 0= x35 }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid013; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_014_GUID \ +{ 0x45fa1a42, 0x912a, 0x5124, {0x84, 0xf4, 0x41, 0x67, 0xab, 0xb5, 0x89, 0= x90 }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid014; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_015_GUID \ +{ 0x1689bc3a, 0x2298, 0xa116, {0x28, 0x4c, 0xc1, 0xdd, 0xaa, 0xd8, 0xef, 0= x51 }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid015; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_016_GUID \ +{ 0x126a789a, 0x1932, 0x3234, {0x21, 0xab, 0x42, 0x64, 0x8a, 0x7b, 0x63, 0= x76 }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid016; diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTest.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/Black= BoxTest/TCG2ProtocolBBTest.h index cbbadef4a5c7..5ce275dc6258 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTest.h +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTest.h @@ -43,8 +43,13 @@ Abstract: #define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0103 \ {0x907a7878, 0xb294, 0xf147, {0xe9, 0x0a, 0x65, 0x43, 0xab, 0x55, 0x76, 0= x46} } =20 +#define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0104 \ + {0x9087ad78, 0x9ad2, 0x4172, {0x9a, 0xbc, 0x98, 0x23, 0x08, 0xf5, 0x6d, 0= x26} } + #define EV_POST_CODE 0x01 =20 +#define EV_NO_ACTION 0x03 + #define EFI_TCG2_EXTEND_ONLY 0x0000000000000001 =20 #define PE_COFF_IMAGE 0x0000000000000010 @@ -103,6 +108,18 @@ BBTestHashLogExtendEventConformanceTestCheckpoint2 ( IN EFI_TCG2_PROTOCOL *TCG2 ); =20 +EFI_STATUS +BBTestGetEventLogConformanceTestCheckpoint1 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ); + +EFI_STATUS +BBTestGetEventLogConformanceTestCheckpoint2 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ); + EFI_STATUS BBTestGetCapabilityConformanceTest ( IN EFI_BB_TEST_PROTOCOL *This, diff --git a/uefi-sct/SctPkg/UEFI/Protocol/TCG2.h b/uefi-sct/SctPkg/UEFI/Pr= otocol/TCG2.h index e62ecd85cbe9..fd31204a9299 100644 --- a/uefi-sct/SctPkg/UEFI/Protocol/TCG2.h +++ b/uefi-sct/SctPkg/UEFI/Protocol/TCG2.h @@ -50,6 +50,8 @@ Abstract: =20 #define EFI_TCG2_EVENT_LOG_FORMAT_TCG_2 0x00000002 =20 +#define HASH_NUMBER 0x04 + typedef struct _EFI_TCG2_PROTOCOL EFI_TCG2_PROTOCOL; =20 typedef UINT32 EFI_TCG2_EVENT_LOG_BITMAP; @@ -115,6 +117,50 @@ typedef struct tdEFI_TCG2_EVENT { UINT8 Event[]; } EFI_TCG2_EVENT; =20 +typedef struct { + UINT16 hashAlg; + UINT8 digest[]; +} TPMT_HA; + +typedef struct tdTPML_DIGEST_VALUES { + UINT32 Count; // number of digests + TPMT_HA Digests[HASH_NUMBER]; // Count digests +} TPML_DIGEST_VALUES; + +// This Declaration is for parsing the eventlog header which is defined to= be 20 bytes in TCG EFI Protocol Spec +typedef UINT8 TCG_DIGEST[20]; + +typedef struct tdTCG_PCR_EVENT2 { + TCG_PCRINDEX PCRIndex; // PCRIndex event extended to + TCG_EVENTTYPE EventType; // Type of event (see [2]) + TPML_DIGEST_VALUES Digests; // List of digests extended to //PCRIndex + UINT32 EventSize; // Size of the event data + UINT8 *Event; // The event data +} TCG_PCR_EVENT2; + +typedef struct tdTCG_PCR_EVENT { + UINT32 PCRIndex; // PCRIndex event extended to + UINT32 EventType; // Type of event (see EFI specs) + TCG_DIGEST Digest; // Value extended into PCRIndex + UINT32 EventSize; // Size of the event data + UINT8 Event[0]; // The event data +} TCG_PCR_EVENT; +// Structure to be added to the Event Log + +typedef struct tdTCG_EfiSpecIdEventAlgorithmSize { + UINT16 algorithmId; + UINT16 digestSize; +} TCG_EfiSpecIdEventAlgorithmSize; + +typedef struct tdTCG_EfiSpecIdEventStruct { + UINT8 signature[16]; + UINT32 platformClass; + UINT8 specVersionMinor; + UINT8 specVersionMajor; + UINT8 specErrata; + UINT8 uintnSize; +} TCG_EfiSpecIDEventStruct; + #pragma pack() =20 typedef diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/G= uid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c index ccc20259d128..8c528aa8ddfc 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c @@ -51,3 +51,11 @@ EFI_GUID gTcg2ConformanceTestAssertionGuid010 =3D EFI_TE= ST_TCG2CONFORMANCE_ASSERTI EFI_GUID gTcg2ConformanceTestAssertionGuid011 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_011_GUID; =20 EFI_GUID gTcg2ConformanceTestAssertionGuid012 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_012_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid013 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_013_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid014 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_014_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid015 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_015_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid016 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_016_GUID; diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTestConformance.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol= /TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c index 2768eef725e8..ebe04d42aff5 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestConformance.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestConformance.c @@ -142,7 +142,7 @@ BBTestGetActivePcrBanksConformanceTest ( =20 /** * @brief Entrypoint for HashLogExtendEvent() Function Test. - * 2 checkpoints will be tested. + * 4 checkpoints will be tested. * @param This a pointer of EFI_BB_TEST_PROTOCOL * @param ClientInterface A pointer to the interface array under test * @param TestLevel Test "thoroughness" control @@ -188,6 +188,12 @@ BBTestHashLogExtendEventConformanceTest ( // Test HashLogExtendEvent with valid arguments BBTestHashLogExtendEventConformanceTestCheckpoint2 (StandardLib, TCG2); =20 + // Test GetEventLog using invalid EventLog Format + BBTestGetEventLogConformanceTestCheckpoint1 (StandardLib, TCG2); + + // Test GetEventLog using valid EventLog Format + BBTestGetEventLogConformanceTestCheckpoint2 (StandardLib, TCG2); + return EFI_SUCCESS; } =20 @@ -801,3 +807,202 @@ BBTestHashLogExtendEventConformanceTestCheckpoint2 ( =20 return EFI_SUCCESS; } + +#define EFI_TCG2_INVALID_EVENT_LOG_FORMAT 0x20 + +EFI_STATUS +BBTestGetEventLogConformanceTestCheckpoint1 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ) +{ + EFI_TEST_ASSERTION AssertionType; + EFI_STATUS Status; + EFI_TCG2_EVENT_LOG_FORMAT EventLogFormat; + EFI_PHYSICAL_ADDRESS EventLogLocation; + EFI_PHYSICAL_ADDRESS EventLogLastEntry; + BOOLEAN EventLogTruncated; + + // Ensure Get EventLog returns Invalid Parameter when passed invalid for= mat + EventLogFormat =3D EFI_TCG2_INVALID_EVENT_LOG_FORMAT; + + Status =3D TCG2->GetEventLog ( + TCG2, + EventLogFormat, + &EventLogLocation, + &EventLogLastEntry, + &EventLogTruncated); + + if (EFI_INVALID_PARAMETER !=3D Status) { + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid013, + L"TCG2_PROTOCOL.GetEventLog - GetEventLog() should return= EFI_INVALID_PARAMETER when passed in invalid EventLog Format", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + return EFI_SUCCESS; +} + +EFI_STATUS +BBTestGetEventLogConformanceTestCheckpoint2 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ) +{ + EFI_TEST_ASSERTION AssertionType; + EFI_STATUS Status; + EFI_TCG2_EVENT_LOG_FORMAT EventLogFormat; + EFI_PHYSICAL_ADDRESS EventLogLocation; + EFI_PHYSICAL_ADDRESS EventLogLastEntry; + BOOLEAN EventLogTruncated; + TCG_PCR_EVENT *EventLogHeader; + TCG_EfiSpecIDEventStruct *EventLogHeaderSpecEvent; + TCG_PCR_EVENT2 *LastEvent; + // signature as defined in the EFI protocol spec: "Spec ID Event03" + UINT8 signature[] =3D {0x53, 0x70, 0x65, 0x63, 0x20, 0x49, 0x44, 0x20, 0= x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x33, 0x00}; + + EventLogFormat =3D EFI_TCG2_EVENT_LOG_FORMAT_TCG_2; + + // Call GetEventLog with valid EventLogFormat + Status =3D TCG2->GetEventLog ( + TCG2, + EventLogFormat, + &EventLogLocation, + &EventLogLastEntry, + &EventLogTruncated); + + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + + // Verify GetEventLog returns EFI_SUCCESS + if (Status !=3D EFI_SUCCESS) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetEventLog Test: GetEventLog sho= uld return EFI_SUCCESS with valid EventLogFormat, Status =3D %r", + Status + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid014, + L"TCG2_PROTOCOL.GetEventLog - GetEventLog() should return= EFI_SUCCESS", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // If GetEventLog doesn't return EFI_SUCCESS abort test + if (Status !=3D EFI_SUCCESS) { + return Status; + } + + EventLogHeader =3D (TCG_PCR_EVENT *) EventLogLocation; + EventLogHeaderSpecEvent =3D (TCG_EfiSpecIDEventStruct *) EventLogHeader-= >Event; + + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + + + // Verify valid eventlog header is returned + // Verify EventLogHeader PCR index =3D=3D 0 + if (EventLogHeader->PCRIndex !=3D 0) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetEventLog Test: EventLogHeader = should have PCR index =3D=3D 0" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + // Verify EventLogHeader event type =3D EV_NO_ACTION + if (EventLogHeader->EventType !=3D EV_NO_ACTION) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetEventLog Test: EventLogHeader = should be EventType =3D=3D EV_NO_ACTION" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + // Verify EventLog Signature + Status =3D SctCompareMem(EventLogHeaderSpecEvent->signature, signature, = sizeof(signature)); + + if (Status !=3D EFI_SUCCESS) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetEventLog Test: EventLogHeader = Signature did not match \'Spec ID Event03\'" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid015, + L"TCG2_PROTOCOL.GetEventLog - GetEventLog() should return= correct EventLogHeader", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // Verify that the event log created by HashLogExtendEvent in the + // BBTestHashLogExtendEventConformanceTestCheckpoint2 function + // is actually in Eventlog + LastEvent =3D (TCG_PCR_EVENT2 *) EventLogLastEntry; + Status =3D EFI_SUCCESS; + + // Verify Last Event PCR =3D 16 + if (LastEvent->PCRIndex !=3D 16) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetEventLog Test: PCR Index of La= st event should be 16" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + // Verify last event type =3D EV_POST_CODE + if (LastEvent->EventType !=3D EV_POST_CODE) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol GetEventLog Test: PCR Index of la= st event should be type EV_POST_CODE" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid016, + L"TCG2_PROTOCOL.GetEventLog - verify that event log has e= xpected entry from previous HashLogExtendEvent", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + return EFI_SUCCESS; +} --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#113491): https://edk2.groups.io/g/devel/message/113491 Mute This Topic: https://groups.io/mt/103625306/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Tue May 14 17:30:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+113492+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113492+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=arm.com ARC-Seal: i=1; a=rsa-sha256; t=1704824468; cv=none; d=zohomail.com; s=zohoarc; b=DRwOXL/gKs1MzE85eB7GyzLcx3I6qfd0y+JqGM+Fia2RS/mXUnRv683I/6ZJGSeBxLDqV5bXAg0/qgeMuZj2eN5q+foxKaW40J7HdUT64KwlVt9uifp7C/fHdzqMtwI8sjcIvgUMNLxUg+aFimYcsjZSdz/hvh7QU1pVR8L4ehs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1704824468; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=IjgFjqTMIiLhEU7cfg9hj2SzcD4wUbWzYoiLO80+ptI=; b=lEnKxSu62xRbXtq0QQQIwzb3DOfIy9JSwII5H7Tw48j7+vW7gV4uXpDYV/99rgnW++7ADelWgMq6TXgJapMYOuBqkzP5J3/OZ0EY4+IZM3trjdadLh6WbzOuBBXtywyOTCxyszVc8fU3zX53vYYRswCZECIEg5zPsYGON9I2LQI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+113492+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1704824468195545.8761811476224; Tue, 9 Jan 2024 10:21:08 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=vawYxIqqK2APAyZAvlTN1X6GELDb1/4Mni0DsKr7POw=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1704824467; v=1; b=gfLB7/N6Bmprol+0+BJO9BsBDbglWMS215hS7UcZzxy9JUga80JALxkmz+AHo911DX8+/5Oj aUzs9tIxIs4AOq6xPG0Y3HdzFzscsuTcy+xxnjozEqJR8dOQwgHzORX3SkMejuzoSEIIvBj1Vv/ u14wxAAH5HqrIpg2m1CTjnx4= X-Received: by 127.0.0.2 with SMTP id FumsYY1788612x3nK4oTbFXE; Tue, 09 Jan 2024 10:21:07 -0800 X-Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web10.24573.1704824465918812898 for ; Tue, 09 Jan 2024 10:21:06 -0800 X-Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id CDB911576; Tue, 9 Jan 2024 10:21:50 -0800 (PST) X-Received: from beelzebub.ast.arm.com (unknown [10.118.29.240]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 352003F5A1; Tue, 9 Jan 2024 10:21:05 -0800 (PST) From: "Stuart Yoder" To: devel@edk2.groups.io, Edhaya.Chandran@arm.com, gaojie@byosoft.com.cn Cc: ilias.apalodimas@linaro.org, heinrich.schuchardt@canonical.com, Samer.El-Haj-Mahmoud@arm.com, Jiewen.Yao@intel.com Subject: [edk2-devel] [PATCH v2 6/6] uefi-sct/SctPkg: TCG2 Protocol: add SubmitCommand test Date: Tue, 9 Jan 2024 12:20:53 -0600 Message-Id: <20240109182053.2540542-7-stuart.yoder@arm.com> In-Reply-To: <20240109182053.2540542-1-stuart.yoder@arm.com> References: <20240109182053.2540542-1-stuart.yoder@arm.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,stuart.yoder@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: Fi8aRZ20WzBP8FZTbH6L9pW9x1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1704824469332100016 Content-Type: text/plain; charset="utf-8" From: Joseph Hemann Add test verifying the functionality of the SubmitCommand function using the TPM command TPM2_HASH_COMMAND. Signed-off-by: Joseph Hemann Signed-off-by: Stuart Yoder --- uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h = | 5 + uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTest.h | 71 ++++++++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c = | 2 + uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTestConformance.c | 173 ++++++++++++++++++++ uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolB= BTestMain.c | 9 + 5 files changed, 260 insertions(+) diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/G= uid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h index 746ff83f899c..044e549ce8f0 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h @@ -105,3 +105,8 @@ extern EFI_GUID gTcg2ConformanceTestAssertionGuid015; { 0x126a789a, 0x1932, 0x3234, {0x21, 0xab, 0x42, 0x64, 0x8a, 0x7b, 0x63, 0= x76 }} =20 extern EFI_GUID gTcg2ConformanceTestAssertionGuid016; + +#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_017_GUID \ +{ 0x3aac8b9a, 0x312a, 0x4dcf, {0x12, 0x76, 0x54, 0x55, 0x32, 0xcd, 0x3a, 0= xea }} + +extern EFI_GUID gTcg2ConformanceTestAssertionGuid017; diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTest.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/Black= BoxTest/TCG2ProtocolBBTest.h index 5ce275dc6258..f8880599f150 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTest.h +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTest.h @@ -54,6 +54,64 @@ Abstract: =20 #define PE_COFF_IMAGE 0x0000000000000010 =20 +// ST_NO_SESSION as defined in Table 19 of TPM Library Part 2: Structures +#define ST_NO_SESSIONS (UINT16) 0x8001 + +// TPM_RC_SUCCESS as defined in Table 16 of TPM Library Spec Part 2: Struc= tures +#define TPM_RC_SUCCESS (UINT32) 0x0000000 + +// TPM_CC_Hash as defined in Table 12 of TPM Library Spec Part 2: Structur= es +#define TPM_CC_Hash (UINT32)(0x0000017D) + +#define TPM_RH_NULL (UINT32) 0x40000007 + +#define TPM_ALG_SHA256 (UINT16) 0x000B + +#define SHA256_LENGTH (UINT16) 0x0020 + +#pragma pack(1) +// TPM2B_MAX_BUFFER as defined in Table 86 of TPM Library Spec Part 2: Str= uctures +// Size of buffer in spec is variable length, but hash test will always us= e a fixed length string +// of length 43 +#define TEST_STRING_LEN 43 +typedef struct { + UINT16 size; + UINT8 buffer[TEST_STRING_LEN]; +} TPM2B_MAX_BUFFER; + +#pragma pack(1) +// TPM2B_DIGEST as defined in Table 73 of TPM Library Spec Part 2: Structu= res +typedef struct { + UINT16 size; + UINT8 digest[32]; // Size of buffer in spec is defined to be variable = length but for this test will always be 32 +} TPM2B_DIGEST; + +typedef struct { + UINT16 tag; + UINT32 hierarchy; + UINT16 digest; // Size of buffer in spec is defined to be var= iable length but for this test will always be UINT16 +} TPMT_TK_HASHCHECK; + +// TPM2_Hash command Structure as defined in Section 15.4 of TPM Spec Part= 3: Commands +typedef struct { + UINT16 Tag; + UINT32 CommandSize; + UINT32 CommandCode; + TPM2B_MAX_BUFFER data; + UINT16 hashAlg; + UINT32 hierarchy; +} TPM2_HASH_COMMAND; + +// TPM2_Hash Response Structure as defined in Section 15.4 of TPM Spec Par= t 3: Commands +typedef struct { + UINT16 Tag; + UINT32 ResponseSize; + UINT32 ResponseCode; + TPM2B_DIGEST data; + TPMT_TK_HASHCHECK validation; +} TPM2_HASH_RESPONSE; +#pragma + EFI_STATUS EFIAPI BBTestTCG2ProtocolUnload ( @@ -120,6 +178,12 @@ BBTestGetEventLogConformanceTestCheckpoint2 ( IN EFI_TCG2_PROTOCOL *TCG2 ); =20 +EFI_STATUS +BBTestSubmitCommandConformanceTestCheckpoint1 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ); + EFI_STATUS BBTestGetCapabilityConformanceTest ( IN EFI_BB_TEST_PROTOCOL *This, @@ -144,3 +208,10 @@ BBTestHashLogExtendEventConformanceTest ( IN EFI_HANDLE SupportHandle ); =20 +EFI_STATUS +BBTestSubmitCommandConformanceTest ( + IN EFI_BB_TEST_PROTOCOL *This, + IN VOID *ClientInterface, + IN EFI_TEST_LEVEL TestLevel, + IN EFI_HANDLE SupportHandle + ); diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/G= uid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c index 8c528aa8ddfc..9aa5315e670e 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c @@ -59,3 +59,5 @@ EFI_GUID gTcg2ConformanceTestAssertionGuid014 =3D EFI_TES= T_TCG2CONFORMANCE_ASSERTI EFI_GUID gTcg2ConformanceTestAssertionGuid015 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_015_GUID; =20 EFI_GUID gTcg2ConformanceTestAssertionGuid016 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_016_GUID; + +EFI_GUID gTcg2ConformanceTestAssertionGuid017 =3D EFI_TEST_TCG2CONFORMANCE= _ASSERTION_017_GUID; diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTestConformance.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol= /TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c index ebe04d42aff5..5abf8e7934cf 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestConformance.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestConformance.c @@ -197,6 +197,56 @@ BBTestHashLogExtendEventConformanceTest ( return EFI_SUCCESS; } =20 +/** + * @brief Entrypoint for SubmitCommand() Function Test. + * 1 checkpoint will be tested. + * @param This a pointer of EFI_BB_TEST_PROTOCOL + * @param ClientInterface A pointer to the interface array under test + * @param TestLevel Test "thoroughness" control + * @param SupportHandle A handle containing protocols required + * @return EFI_SUCCESS + * @return EFI_NOT_FOUND + */ + +EFI_STATUS +BBTestSubmitCommandConformanceTest ( + IN EFI_BB_TEST_PROTOCOL *This, + IN VOID *ClientInterface, + IN EFI_TEST_LEVEL TestLevel, + IN EFI_HANDLE SupportHandle + ) +{ + EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; + EFI_STATUS Status; + EFI_TCG2_PROTOCOL *TCG2; + + // + // init + // + TCG2 =3D (EFI_TCG2_PROTOCOL*)ClientInterface; + + // Ensure Protocol not NULL + if (TCG2 =3D=3D NULL) + return EFI_UNSUPPORTED; + + // + // Get the Standard Library Interface + // + Status =3D gtBS->HandleProtocol ( + SupportHandle, + &gEfiStandardTestLibraryGuid, + (VOID **) &StandardLib + ); + if (EFI_ERROR(Status)) { + return Status; + } + + // Test GetRandom TPM Command + BBTestSubmitCommandConformanceTestCheckpoint1 (StandardLib, TCG2); + + return EFI_SUCCESS; +} + EFI_STATUS BBTestGetCapabilityConformanceTestCheckpoint1 ( IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, @@ -1006,3 +1056,126 @@ BBTestGetEventLogConformanceTestCheckpoint2 ( =20 return EFI_SUCCESS; } + +// Expected SHA256 Hash of the string "The quick brown fox jumps over the= lazy dog" +UINT8 Tpm2HashOut[32] =3D {0xd7,0xa8,0xfb,0xb3,0x07,0xd7,0x80,0x94,0x69,0x= ca,0x9a,0xbc,0xb0,0x08,0x2e,0x4f, \ +0x8d,0x56,0x51,0xe4,0x6d,0x3c,0xdb,0x76,0x2d,0x02,0xd0,0xbf,0x37,0xc9,0xe5= ,0x92}; + +EFI_STATUS +BBTestSubmitCommandConformanceTestCheckpoint1 ( + IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib, + IN EFI_TCG2_PROTOCOL *TCG2 + ) +{ + EFI_TEST_ASSERTION AssertionType; + EFI_STATUS Status; + TPM2_HASH_RESPONSE CommandResponse; + TPM2_HASH_COMMAND CommandInput; + CHAR8 *Str =3D"The quick brown fox jumps over the lazy dog"; + + // Build TPM2 Hash command to hash test string + CommandInput.Tag =3D SctSwapBytes16(ST_NO_SESSIONS); + CommandInput.CommandSize =3D SctSwapBytes32(sizeof(TPM2_HASH_COMMAND)); + CommandInput.CommandCode =3D SctSwapBytes32(TPM_CC_Hash); + CommandInput.data.size =3D SctSwapBytes16(SctAsciiStrLen(Str)); + SctAsciiStrCpy((CHAR8 *)CommandInput.data.buffer, Str); + CommandInput.hashAlg =3D SctSwapBytes16(TPM_ALG_SHA256); + CommandInput.hierarchy =3D SctSwapBytes32(TPM_RH_NULL); + + // allocate buffer for response + SctZeroMem(&CommandResponse, sizeof(TPM2_HASH_RESPONSE)); + + Status =3D TCG2->SubmitCommand ( + TCG2, + sizeof(TPM2_HASH_COMMAND), + (UINT8 *)&CommandInput, + sizeof(TPM2_HASH_RESPONSE), + (UINT8 *)&CommandResponse); + + + AssertionType =3D EFI_TEST_ASSERTION_PASSED; + + // Verify SubmitCommand returns EFI_SUCCESS + if (Status !=3D EFI_SUCCESS) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol SubmitCommand Test: SubmitCommand= should return EFI_SUCCESS, Status =3D %r", + Status + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + // Verify SubmitCommand returns correct Response Tag + if (SctSwapBytes16(CommandResponse.Tag) !=3D ST_NO_SESSIONS) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol SubmitCommand Test: SubmitCommand= should return ST_NO_SESSIONS response Tag" + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + // Verify SubmitCommand returns correct Response Code + if (SctSwapBytes32(CommandResponse.ResponseCode) !=3D TPM_RC_SUCCESS) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol SubmitCommand Test: SubmitCommand= should return Correct ResponseCode, ResponseCode =3D %x", + SctSwapBytes32(CommandResponse.ResponseCode) + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + + // Verify SubmitCommand returns correct Response Size + if (SctSwapBytes32(CommandResponse.ResponseSize) !=3D sizeof(TPM2_HASH_R= ESPONSE)) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol SubmitCommand Test: SubmitCommand= should return Correct ResponseSize, Size =3D %x", + SctSwapBytes32(CommandResponse.ResponseSize) + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + // Check that the size of the buffer returned is size of SHA256 hash + if (SctSwapBytes16(CommandResponse.data.size) !=3D 32) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol SubmitCommand Test: SubmitCommand= should return correct size digest for SHA256, Size =3D %x", + SctSwapBytes16(CommandResponse.data.size) + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + // Ensure Hash returned matches expected response for input + if (0 !=3D SctCompareMem(Tpm2HashOut, CommandResponse.data.digest, SHA25= 6_LENGTH) ) { + StandardLib->RecordMessage ( + StandardLib, + EFI_VERBOSE_LEVEL_DEFAULT, + L"\r\nTCG2 Protocol SubmitCommand Test: SubmitCommand s= hould return expected Hash for data that was hashed." + ); + + AssertionType =3D EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gTcg2ConformanceTestAssertionGuid017, + L"EFI_TCG2_PROTOCOL. SubmitComand() - SubmitCommand() sha= ll populate the response buffer and return with a status of EFI_SUCCESS whe= n valid command parameters are passed in.", + L"%a:%d: Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + return EFI_SUCCESS; +} diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/T= CG2ProtocolBBTestMain.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/B= lackBoxTest/TCG2ProtocolBBTestMain.c index f7b9e487eda2..25c3eab2cccd 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestMain.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2Prot= ocolBBTestMain.c @@ -65,6 +65,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] =3D { EFI_TEST_CASE_AUTO, BBTestHashLogExtendEventConformanceTest }, + { + EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0104, + L"SubmitCommand_Conf", + L"Test the SubmitCommmand API", + EFI_TEST_LEVEL_DEFAULT, + gSupportProtocolGuid1, + EFI_TEST_CASE_AUTO, + BBTestSubmitCommandConformanceTest + }, 0 }; =20 --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#113492): https://edk2.groups.io/g/devel/message/113492 Mute This Topic: https://groups.io/mt/103625307/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-