public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH 3/6] uefi-sct/SctPkg: TCG2 Protocol: add GetActivePcrBanks test
  2021-10-20 13:43 [PATCH 0/6] Implementation of TCG2 Protocol test Joseph Hemann
@ 2021-10-20 13:43 ` Joseph Hemann
  0 siblings, 0 replies; 10+ messages in thread
From: Joseph Hemann @ 2021-10-20 13:43 UTC (permalink / raw)
  To: devel
  Cc: nd, Joseph Hemann, G Edhaya Chandran, Barton Gao,
	Carolyn Gjertsen, Samer El-Haj-Mahmoud, Eric Jin, Arvin Chen,
	Supreeth Venkatesh

From: Joseph Hemann <Joseph.hemann@arm.com>

 -add initial TCG2 protocol test for GetActivePcrBanks()
      -checkpoint for NULL pointer passed for buffer
      -checkpoint for test of function with proper input

Cc: G Edhaya Chandran <Edhaya.Chandran@arm.com>
Cc: Barton Gao <gaojie@byosoft.com.cn>
Cc: Carolyn Gjertsen <Carolyn.Gjertsen@amd.com>
Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
Cc: Eric Jin <eric.jin@intel.com>
Cc: Arvin Chen <arvinx.chen@intel.com>
Cc: Supreeth Venkatesh <Supreeth.Venkatesh@amd.com>
Signed-off-by: Joseph Hemann <Joseph.hemann@arm.com>
---
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.c     |   4 +
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.h     |  10 ++
 .../TCG2/BlackBoxTest/TCG2ProtocolBBTest.h    |  23 +++
 .../TCG2ProtocolBBTestConformance.c           | 140 +++++++++++++++++-
 .../BlackBoxTest/TCG2ProtocolBBTestMain.c     |   9 ++
 5 files changed, 185 insertions(+), 1 deletion(-)

diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c
index 206662ee7933..0497f08f74f2 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
@@ -33,3 +33,7 @@ EFI_GUID gTcg2ConformanceTestAssertionGuid001 = EFI_TEST_TCG2CONFORMANCE_ASSERTI
 EFI_GUID gTcg2ConformanceTestAssertionGuid002 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_002_GUID;
 
 EFI_GUID gTcg2ConformanceTestAssertionGuid003 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_003_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid004 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_004_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid005 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_005_GUID;
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h
index b675756b9fb7..f470255ccdcf 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
@@ -41,3 +41,13 @@ extern EFI_GUID gTcg2ConformanceTestAssertionGuid002;
 
 extern EFI_GUID gTcg2ConformanceTestAssertionGuid003;
 
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_004_GUID \
+{ 0x7a1e79a3, 0x4064, 0x4372, {0xbb, 0x64, 0x55, 0xb8, 0xf2, 0xa5, 0xa3, 0x26 }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid004;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_005_GUID \
+{ 0xb0e717c4, 0xb1e2, 0x49f7, {0xb2, 0xd7, 0x60, 0x58, 0x97, 0x7d, 0x09, 0x2c }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid005;
+
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
index 674540182d2d..a6773010b64f 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
@@ -37,6 +37,9 @@ Abstract:
 #define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0101 \
  {0x39ff9c71, 0x4b41, 0x4e5b, {0xae, 0xd7, 0x87, 0xc7, 0x94, 0x18, 0x7d, 0x67} }
 
+#define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0102 \
+ {0x847f1ae0, 0xb429, 0x49f1, {0x9e, 0x0c, 0x8f, 0x43, 0xfb, 0x55, 0x34, 0x54} }
+
 EFI_STATUS
 EFIAPI
 BBTestTCG2ProtocolUnload (
@@ -55,6 +58,18 @@ BBTestGetCapabilityConformanceTestCheckpoint2 (
   IN EFI_TCG2_PROTOCOL                     *TCG2
   );
 
+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,
@@ -63,3 +78,11 @@ BBTestGetCapabilityConformanceTest (
   IN EFI_HANDLE                 SupportHandle
   );
 
+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/TCG2ProtocolBBTestConformance.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
index fec542167171..5277f9433f7e 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
@@ -75,6 +75,54 @@ BBTestGetCapabilityConformanceTest (
   return EFI_SUCCESS;
 }
 
+/**
+ *  @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 = (EFI_TCG2_PROTOCOL*)ClientInterface;
+
+  //
+  // Get the Standard Library Interface
+  //
+  Status = gtBS->HandleProtocol (
+                   SupportHandle,
+                   &gEfiStandardTestLibraryGuid,
+                   (VOID **) &StandardLib
+                   );
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+
+  // Test Using NULL Pointer
+  BBTestGetActivePcrBanksConformanceTestCheckpoint1 (StandardLib, TCG2);
+
+  // Test with correct size field
+ BBTestGetActivePcrBanksConformanceTestCheckpoint2 (StandardLib, TCG2);
+
+  return EFI_SUCCESS;
+}
 
 EFI_STATUS
 BBTestGetCapabilityConformanceTestCheckpoint1 (
@@ -181,7 +229,7 @@ BBTestGetCapabilityConformanceTestCheckpoint2 (
     AssertionType = EFI_TEST_ASSERTION_FAILED;
   }
 
-  EFI_TCG2_EVENT_ALGORITHM_BITMAP HashBitMapAlgos =  EFI_TCG2_BOOT_HASH_ALG_SHA256 | EFI_TCG2_BOOT_HASH_ALG_SHA384 | EFI_TCG2_BOOT_HASH_ALG_SHA512;
+  EFI_TCG2_EVENT_ALGORITHM_BITMAP HashBitMapAlgos =  EFI_TCG2_BOOT_HASH_ALG_SHA1 | EFI_TCG2_BOOT_HASH_ALG_SHA256 | EFI_TCG2_BOOT_HASH_ALG_SHA384 | EFI_TCG2_BOOT_HASH_ALG_SHA512;
 
   if (!(BootServiceCap.HashAlgorithmBitmap & HashBitMapAlgos)) {
     StandardLib->RecordMessage (
@@ -219,3 +267,93 @@ BBTestGetCapabilityConformanceTestCheckpoint2 (
   return EFI_SUCCESS;
 }
 
+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 = NULL;
+  Status = TCG2->GetActivePcrBanks (
+                           TCG2,
+                           ActivePcrBanks);
+
+  // Ensure GetCapablity returns Invalid Parameter when passing in NULL pointer
+  if (EFI_INVALID_PARAMETER == Status) {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid004,
+                 L"TCG2_PROTOCOL.GetActivePcrBanks - GetActivePcrBanks() returns 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;
+  Status = TCG2->GetActivePcrBanks (
+                           TCG2,
+                           &ActivePcrBanks);
+
+  // Ensure GetActivePcrBanks returns EFI_SUCCESS
+  if (Status == EFI_SUCCESS) {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  } else {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetActivePcrBanks Test: GetActivePcrBanks should return EFI_SUCCESS",
+                     ActivePcrBanks
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  EFI_TCG2_EVENT_ALGORITHM_BITMAP BitMapAlgos =  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: GetActiVePcrBanks should have SHA256/384/512 Algorithm in its Bitmap. ActivePcrBanks = %x",
+                     ActivePcrBanks
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid005,
+                 L"TCG2_PROTOCOL.GetActivePcrBanks - GetActivePcrBanks should 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/TCG2ProtocolBBTestMain.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
index 97da8f58e35f..4e7b15937ebb 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
@@ -47,6 +47,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
     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
 };
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH V2 0/6] Implementation of TCG2 Protocol test
@ 2022-01-09 20:58 Joseph Hemann
  2022-01-09 20:58 ` [PATCH 1/6] uefi-sct/SctPkg: TCG2 Protocol: add header with TCG2 protocol definitions Joseph Hemann
                   ` (5 more replies)
  0 siblings, 6 replies; 10+ messages in thread
From: Joseph Hemann @ 2022-01-09 20:58 UTC (permalink / raw)
  To: devel
  Cc: nd, Joseph Hemann, G Edhaya Chandran, Barton Gao,
	Carolyn Gjertsen, Samer El-Haj-Mahmoud, Eric Jin, Arvin Chen,
	Supreeth Venkatesh

This patch series implements a set of SCT tests,
for the TCG2 UEFI protocol as defined in the TCG
EFI Protocol Specification. The series implements
the code for the test, and the infrastructure
needed to run the test from the SCT UI.

Patch 1 adds header file with TCG2 protocol definitions.

Patch 2 implements initial infrastructure for the
TCG2 protocol test including updates to .dsc file,
inf file, GUID source files, update to Category.ini.
It also adds initial TCG2 protocol test for GetCapability().

Patch 3 implements TCG2 protocol test for GetActivePcrBanks().

Patch 4 implements a test for HashLogExtendEvent() by hashing,
and extending data in a test buffer to PCR[16].

Patch 5 implements a test for GetEventLog(), by checking for
the event extended in the test in Patch 4.

Patch 6 tests SubmitCommand(), by submitting a simple command
(GetRandom) to the TPM.

Compared to v1, v2 adds:
-new checks on GetCapability, GetActivePcrBanks test
-Fixes reused Guids in HashLogExtend test
-changes command used in SubmitCommand test from GetRandom To TPM2_Hash

Cc: G Edhaya Chandran <Edhaya.Chandran@arm.com>
Cc: Barton Gao <gaojie@byosoft.com.cn>
Cc: Carolyn Gjertsen <Carolyn.Gjertsen@amd.com>
Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
Cc: Eric Jin <eric.jin@intel.com>
Cc: Arvin Chen <arvinx.chen@intel.com>
Cc: Supreeth Venkatesh <Supreeth.Venkatesh@amd.com>

Joseph Hemann (6):
  uefi-sct/SctPkg: TCG2 Protocol: add header with TCG2 protocol
    definitions
  uefi-sct/SctPkg: TCG2 Protocol: add GetCapability Test
  uefi-sct/SctPkg: TCG2 Protocol: add GetActivePcrBanks  test
  uefi-sct/SctPkg: TCG2 Protocol: add HashLogExtendEvent  test
  uefi-sct/SctPkg: TCG2 Protocol: add GetEventLog test
  uefi-sct/SctPkg: TCG2 Protocol: add SubmitCommand test

 uefi-sct/SctPkg/CommonGenFramework.sh         |    1 +
 uefi-sct/SctPkg/Config/Data/Category.ini      |    7 +
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.c     |   61 +
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.h     |  107 ++
 .../TCG2/BlackBoxTest/TCG2ProtocolBBTest.h    |  208 +++
 .../TCG2/BlackBoxTest/TCG2ProtocolBBTest.inf  |   51 +
 .../TCG2ProtocolBBTestConformance.c           | 1135 +++++++++++++++++
 .../BlackBoxTest/TCG2ProtocolBBTestMain.c     |  129 ++
 uefi-sct/SctPkg/UEFI/Protocol/TCG2.h          |  220 ++++
 uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc             |    1 +
 10 files changed, 1920 insertions(+)
 create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c
 create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h
 create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
 create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.inf
 create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
 create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
 create mode 100644 uefi-sct/SctPkg/UEFI/Protocol/TCG2.h

-- 
2.25.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/6] uefi-sct/SctPkg: TCG2 Protocol: add header with TCG2 protocol definitions
  2022-01-09 20:58 [PATCH V2 0/6] Implementation of TCG2 Protocol test Joseph Hemann
@ 2022-01-09 20:58 ` Joseph Hemann
  2022-01-09 20:58 ` [PATCH 2/6] uefi-sct/SctPkg: TCG2 Protocol: add GetCapability Test Joseph Hemann
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 10+ messages in thread
From: Joseph Hemann @ 2022-01-09 20:58 UTC (permalink / raw)
  To: devel; +Cc: nd, Joseph Hemann

Signed-off-by: Joseph Hemann <Joseph.hemann@arm.com>
---
 uefi-sct/SctPkg/UEFI/Protocol/TCG2.h | 174 +++++++++++++++++++++++++++
 1 file changed, 174 insertions(+)
 create mode 100644 uefi-sct/SctPkg/UEFI/Protocol/TCG2.h

diff --git a/uefi-sct/SctPkg/UEFI/Protocol/TCG2.h b/uefi-sct/SctPkg/UEFI/Protocol/TCG2.h
new file mode 100644
index 00000000..923549e2
--- /dev/null
+++ b/uefi-sct/SctPkg/UEFI/Protocol/TCG2.h
@@ -0,0 +1,174 @@
+/** @file
+
+  Copyright 2006 - 2016 Unified EFI, Inc.<BR>
+  Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2021, Arm Inc. All rights reserved.<BR>
+
+  This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD 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 IMPLIED.
+
+**/
+/*++
+
+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 UINT64 EFI_PHYSICAL_ADDRESS;
+
+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
+);
+
+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;
+
+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
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/6] uefi-sct/SctPkg: TCG2 Protocol: add GetCapability Test
  2022-01-09 20:58 [PATCH V2 0/6] Implementation of TCG2 Protocol test Joseph Hemann
  2022-01-09 20:58 ` [PATCH 1/6] uefi-sct/SctPkg: TCG2 Protocol: add header with TCG2 protocol definitions Joseph Hemann
@ 2022-01-09 20:58 ` Joseph Hemann
  2022-02-01 18:32   ` [edk2-devel] " Stuart Yoder
  2022-01-09 20:58 ` [PATCH 3/6] uefi-sct/SctPkg: TCG2 Protocol: add GetActivePcrBanks test Joseph Hemann
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 10+ messages in thread
From: Joseph Hemann @ 2022-01-09 20:58 UTC (permalink / raw)
  To: devel; +Cc: nd, 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 initial TCG2 protocol test for GetCapability(), as
defined in the TCG EFI Protocol Spec 6.4.4.
  -checkpoint for NULL pointer passed for buffer
  -checkpoint for validating fields of the struct returned by GetCapabilty()

V2:
-adds checkpoint for verifying GetCapablity() when size < Capablity Struct
-adds check to ensure ActivePcrBanks is subset of HashAlgorithmBitmap
-adds checks for returned status by function

Signed-off-by: Joseph Hemann <Joseph.hemann@arm.com>
Change-Id: Iaeefecb1a468264daf57c3a0476035d8cac4f05d
---
 uefi-sct/SctPkg/CommonGenFramework.sh         |   1 +
 uefi-sct/SctPkg/Config/Data/Category.ini      |   7 +
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.c     |  35 ++
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.h     |  43 +++
 .../TCG2/BlackBoxTest/TCG2ProtocolBBTest.h    |  71 ++++
 .../TCG2/BlackBoxTest/TCG2ProtocolBBTest.inf  |  51 +++
 .../TCG2ProtocolBBTestConformance.c           | 321 ++++++++++++++++++
 .../BlackBoxTest/TCG2ProtocolBBTestMain.c     | 102 ++++++
 uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc             |   1 +
 9 files changed, 632 insertions(+)
 create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c
 create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h
 create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
 create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.inf
 create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
 create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c

diff --git a/uefi-sct/SctPkg/CommonGenFramework.sh b/uefi-sct/SctPkg/CommonGenFramework.sh
index 779a6a44..997d8ba1 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/Config/Data/Category.ini
index af27e362..c239fe4b 100644
--- a/uefi-sct/SctPkg/Config/Data/Category.ini
+++ b/uefi-sct/SctPkg/Config/Data/Category.ini
@@ -1026,3 +1026,10 @@ InterfaceGuid = 8D59D32B-C655-4AE9-9B15-F25904992A43
 Name          = IHV\ConsoleSupportTest\AbsolutePointerProtocolTest
 Description   = Absolute Pointer Protocol Test on IHV Drivers
 
+[Category Data]
+Revision      = 0x00010000
+CategoryGuid  = 607f766c-7455-42be-930b-e4d76db2720f
+InterfaceGuid = 607f766c-7455-42be-930b-e4d76db2720f
+Name          = TCG2ProtocolTest
+Description   =
+
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c
new file mode 100644
index 00000000..206662ee
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c
@@ -0,0 +1,35 @@
+/** @file
+
+  Copyright 2006 - 2013 Unified EFI, Inc.<BR>
+  Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2021, Arm Inc. All rights reserved.<BR>
+
+  This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD 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 IMPLIED.
+
+**/
+/*++
+
+Module Name:
+
+  guid.c
+
+Abstract:
+
+  GUIDs auto-generated for EFI test assertion.
+
+--*/
+
+#include "Efi.h"
+#include "Guid.h"
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid001 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_001_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid002 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_002_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid003 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_003_GUID;
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h
new file mode 100644
index 00000000..b675756b
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h
@@ -0,0 +1,43 @@
+/** @file
+
+  Copyright 2006 - 2016 Unified EFI, Inc.<BR>
+  Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2021, Arm Inc. All rights reserved.<BR>
+
+  This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD 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 IMPLIED.
+
+**/
+/*++
+
+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, 0xed }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid001;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_002_GUID \
+{ 0xda8821d9, 0x3d2c, 0x4698, {0x8c, 0xd5, 0x0f, 0x0c, 0x82, 0x94, 0x1d, 0x0c }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid002;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_003_GUID \
+{ 0xfdee7001, 0x7e28, 0x4e35, {0x99, 0x66, 0x98, 0x0b, 0xeb, 0xba, 0xf1, 0x57 }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid003;
+
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
new file mode 100644
index 00000000..aecc5e1d
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
@@ -0,0 +1,71 @@
+/** @file
+
+  Copyright 2006 - 2017 Unified EFI, Inc.<BR>
+  Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2021, Arm Inc. All rights reserved.<BR>
+
+  This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD 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 IMPLIED.
+
+**/
+/*++
+
+Module Name:
+    TCG2ProtocolBBTest.h
+
+Abstract:
+    head file of test driver of EFI TCG2 Protocol Test
+
+--*/
+
+#include "SctLib.h"
+#include <Library/EfiTestLib.h>
+#include <UEFI/Protocol/TCG2.h>
+#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, 0x67} }
+
+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
+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/TCG2ProtocolBBTest.inf b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.inf
new file mode 100644
index 00000000..f41d84b3
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.inf
@@ -0,0 +1,51 @@
+## @file
+#
+#  Copyright 2006 - 2015 Unified EFI, Inc.<BR>
+#  Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2021, Arm Inc. All rights reserved.<BR>
+#
+#  This program and the accompanying materials
+#  are licensed and made available under the terms and conditions of the BSD 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 IMPLIED.
+#
+##
+#/*++
+#
+# Module Name:
+#
+#   TCG2ProtocolBBTest.inf
+#
+# Abstract:
+#
+#   Component description file for TCG2 Protocol Black-Box Test.
+#
+#--*/
+
+[defines]
+  INF_VERSION          = 0x00010005
+  BASE_NAME            = TCG2ProtocolBBTest
+  FILE_GUID            = BD8CB762-3935-434C-AC3F-462244910A2D
+  MODULE_TYPE          = UEFI_DRIVER
+  VERSION_STRING       = 1.0
+  ENTRY_POINT          = 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/TCG2ProtocolBBTestConformance.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
new file mode 100644
index 00000000..a74b29b7
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
@@ -0,0 +1,321 @@
+/** @file
+
+  Copyright 2006 - 2016 Unified EFI, Inc.<BR>
+  Copyright (c) 2021, Arm Inc. All rights reserved.<BR>
+
+  This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD 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 IMPLIED.
+
+**/
+/*++
+
+Module Name:
+
+    TCG2BBTestConformance.c
+
+Abstract:
+
+    for EFI Driver TCG2 Protocol's Basic Test
+
+--*/
+
+#include "TCG2ProtocolBBTest.h"
+
+/**
+ *  @brief Entrypoint for GetCapability() Function Test.
+ *         3 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 = (EFI_TCG2_PROTOCOL*)ClientInterface;
+
+  // Ensure Protocol not NULL
+  if (TCG2 == NULL)
+    return EFI_UNSUPPORTED;
+
+  //
+  // Get the Standard Library Interface
+  //
+  Status = gtBS->HandleProtocol (
+                   SupportHandle,
+                   &gEfiStandardTestLibraryGuid,
+                   (VOID **) &StandardLib
+                   );
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+
+  // Test Using NULL BootCapablity Pointer
+  BBTestGetCapabilityConformanceTestCheckpoint1 (StandardLib, TCG2);
+
+  // Test Using Capability struct with struct size less than full size
+  BBTestGetCapabilityConformanceTestCheckpoint2 (StandardLib, TCG2);
+
+  // Test for validating fields of struct returned by GetCapability()
+  BBTestGetCapabilityConformanceTestCheckpoint3 (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 = NULL;
+
+  Status = TCG2->GetCapability (
+                           TCG2,
+                           BootServiceCapPtr);
+
+  // Ensure GetCapablity returns Invalid Parameter when passing in NULL pointer
+  if (EFI_INVALID_PARAMETER == Status) {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid001,
+                 L"TCG2_PROTOCOL.GetCapability - GetCapability() returns EFI_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;
+  char StructureVersionMajor;
+  char StructureVersionMinor;
+  char ProtocolVersionMajor;
+  char ProtocolVersionMinor;
+
+  EFI_TCG2_BOOT_SERVICE_CAPABILITY      BootServiceCap;
+  BootServiceCap.Size = sizeof(UINT8) + (sizeof(EFI_TCG2_VERSION) * 2);
+
+  Status = TCG2->GetCapability (
+                           TCG2,
+                           &BootServiceCap);
+
+  AssertionType = EFI_TEST_ASSERTION_PASSED;
+
+  // If the input ProtocolCapability.Size < sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY) the function should return EFI_BUFFER_TOO_SMALL
+  if (Status != EFI_BUFFER_TOO_SMALL) {
+     StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetCapablity Test: Did not return Status == EFI_BUFFER_TOO_SMALL with input ProtocolCapability.Size < sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY)"
+                     );
+
+     AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  StructureVersionMajor = BootServiceCap.StructureVersion.Major;
+  StructureVersionMinor = BootServiceCap.StructureVersion.Minor;
+
+  // If the input ProtocolCapability.Size < sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY) the function will initialize the fields included in ProtocolCapability.Size.
+  if ((StructureVersionMajor != 1) | (StructureVersionMinor != 1)) {
+     StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetCapablity Test: Unexpected struct version numbers returned"
+                     );
+
+     AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  ProtocolVersionMajor = BootServiceCap.ProtocolVersion.Major;
+  ProtocolVersionMinor = BootServiceCap.ProtocolVersion.Minor;
+
+  if ((ProtocolVersionMajor != 1) | (ProtocolVersionMinor != 1)) {
+     StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetCapablity Test: Unexpected protocol version numbers returned."
+                     );
+
+     AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid002,
+                 L"TCG2_PROTOCOL.GetCapability() - GetCapability() shall populate the included structure elements and return with a Status of EFI_BUFFER_TOO_SMALL when structure size is set to less than the size 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;
+  char StructureVersionMajor;
+  char StructureVersionMinor;
+  char ProtocolVersionMajor;
+  char ProtocolVersionMinor;
+  EFI_TCG2_BOOT_SERVICE_CAPABILITY      BootServiceCap;
+
+  BootServiceCap.Size = sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY);
+
+  Status = TCG2->GetCapability (
+                           TCG2,
+                           &BootServiceCap);
+
+  AssertionType = EFI_TEST_ASSERTION_PASSED;
+
+  if (Status != EFI_SUCCESS) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetCapablity Test: GetCapabilty should return EFI_SUCCESS"
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  StructureVersionMajor = BootServiceCap.StructureVersion.Major;
+  StructureVersionMinor = BootServiceCap.StructureVersion.Minor;
+
+  // TCG EFI Protocol spec 6.4.4 #4
+  if ((StructureVersionMajor != 1) | (StructureVersionMinor != 1)) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetCapablity Test: GetCapabilty should have StructureVersion 1.1"
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  ProtocolVersionMajor = BootServiceCap.ProtocolVersion.Major;
+  ProtocolVersionMinor = BootServiceCap.ProtocolVersion.Minor;
+
+  // TCG EFI Protocol spec 6.4.4 #4
+  if ((ProtocolVersionMajor != 1) | (ProtocolVersionMinor != 1)) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetCapablity Test: protocol version must be 1.1"
+                     );
+
+    AssertionType = 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 GetCapablity Test: GetCapabilty must support TCG2 event log format"
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  if (BootServiceCap.NumberOfPcrBanks < 1 ) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetCapablity Test: expect at least 1 PCR bank"
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  if (!(BootServiceCap.HashAlgorithmBitmap & EFI_TCG2_BOOT_HASH_ALG_SHA256)) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetCapablity Test: unexpected hash algorithms reported = %x",
+                     BootServiceCap.HashAlgorithmBitmap
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  if (!(~BootServiceCap.ActivePcrBanks & BootServiceCap.HashAlgorithmBitmap) == 0) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetCapablity Test: ActivePcrBanks is not a subset of HashAlgorithmBitmap"
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  if (!(BootServiceCap.ActivePcrBanks & EFI_TCG2_BOOT_HASH_ALG_SHA256)) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetCapablity Test: unexpected active PCR banks reported = %x",
+                     BootServiceCap.ActivePcrBanks
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid003,
+                 L"TCG2_PROTOCOL.GetCapability - GetCapability() shall populate all structure elements and return with a Status of EFI_SUCCESS when the structure size includes all of the EFI_TCG_BOOT_SERVICE_CAPABILITY structure",
+                 L"%a:%d: Status - %r",
+                 __FILE__,
+                 (UINTN)__LINE__,
+                 Status
+                 );
+
+  return EFI_SUCCESS;
+}
+
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
new file mode 100644
index 00000000..97da8f58
--- /dev/null
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
@@ -0,0 +1,102 @@
+/** @file
+
+  Copyright 2006 - 2017 Unified EFI, Inc.<BR>
+  Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2021, Arm Inc. All rights reserved.<BR>
+
+  This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD 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 IMPLIED.
+
+**/
+/*++
+
+Module Name:
+    TCG2ProtocolBBTestMain.c
+
+Abstract:
+    for EFI TCG2 Protocol Test
+
+--*/
+
+#include "TCG2ProtocolBBTest.h"
+
+EFI_BB_TEST_PROTOCOL_FIELD gBBTestProtocolField = {
+  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] = {
+  EFI_STANDARD_TEST_LIBRARY_GUID,
+  EFI_NULL_GUID
+};
+
+EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
+  {
+    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 value.
+ */
+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/UEFI/UEFI_SCT.dsc b/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc
index 5b3e5307..3d3e9704 100644
--- a/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc
+++ b/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc
@@ -288,6 +288,7 @@ SctPkg/TestCase/UEFI/EFI/Protocol/StorageSecurityCommand/BlackBoxTest/StorageSec
 SctPkg/TestCase/UEFI/EFI/Protocol/AdapterInfo/BlackBoxTest/AdapterInfoProtocolBBTest.inf
 SctPkg/TestCase/UEFI/EFI/Protocol/TimeStamp/BlackBoxTest/TimeStampProtocolBBTest.inf
 SctPkg/TestCase/UEFI/EFI/Protocol/RandomNumber/BlackBoxTest/RandomNumberBBTest.inf
+SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.inf
 
 SctPkg/TestCase/UEFI/EFI/Protocol/Hash2/BlackBoxTest/Hash2BBTest.inf
 SctPkg/TestCase/UEFI/EFI/Protocol/PKCS7Verify/BlackBoxTest/Pkcs7BBTest.inf
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/6] uefi-sct/SctPkg: TCG2 Protocol: add GetActivePcrBanks test
  2022-01-09 20:58 [PATCH V2 0/6] Implementation of TCG2 Protocol test Joseph Hemann
  2022-01-09 20:58 ` [PATCH 1/6] uefi-sct/SctPkg: TCG2 Protocol: add header with TCG2 protocol definitions Joseph Hemann
  2022-01-09 20:58 ` [PATCH 2/6] uefi-sct/SctPkg: TCG2 Protocol: add GetCapability Test Joseph Hemann
@ 2022-01-09 20:58 ` Joseph Hemann
  2022-01-09 20:58 ` [PATCH 4/6] uefi-sct/SctPkg: TCG2 Protocol: add HashLogExtendEvent test Joseph Hemann
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 10+ messages in thread
From: Joseph Hemann @ 2022-01-09 20:58 UTC (permalink / raw)
  To: devel; +Cc: nd, Joseph Hemann

 -add initial TCG2 protocol test for GetActivePcrBanks()
      -checkpoint for NULL pointer passed for buffer
      -checkpoint for test of function with proper input

V2:
-add check to verify ActivePcrBanks returned by GetCapability matches that returned by
GetActivePcrBanks()

Signed-off-by: Joseph Hemann <Joseph.hemann@arm.com>
Change-Id: I626bc21fb3e96692f3c63043651a8e1027c6f611
---
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.c     |   4 +
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.h     |  10 ++
 .../TCG2/BlackBoxTest/TCG2ProtocolBBTest.h    |  23 +++
 .../TCG2ProtocolBBTestConformance.c           | 159 ++++++++++++++++++
 .../BlackBoxTest/TCG2ProtocolBBTestMain.c     |   9 +
 5 files changed, 205 insertions(+)

diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c
index 206662ee..0497f08f 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
@@ -33,3 +33,7 @@ EFI_GUID gTcg2ConformanceTestAssertionGuid001 = EFI_TEST_TCG2CONFORMANCE_ASSERTI
 EFI_GUID gTcg2ConformanceTestAssertionGuid002 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_002_GUID;
 
 EFI_GUID gTcg2ConformanceTestAssertionGuid003 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_003_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid004 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_004_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid005 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_005_GUID;
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h
index b675756b..f470255c 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
@@ -41,3 +41,13 @@ extern EFI_GUID gTcg2ConformanceTestAssertionGuid002;
 
 extern EFI_GUID gTcg2ConformanceTestAssertionGuid003;
 
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_004_GUID \
+{ 0x7a1e79a3, 0x4064, 0x4372, {0xbb, 0x64, 0x55, 0xb8, 0xf2, 0xa5, 0xa3, 0x26 }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid004;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_005_GUID \
+{ 0xb0e717c4, 0xb1e2, 0x49f7, {0xb2, 0xd7, 0x60, 0x58, 0x97, 0x7d, 0x09, 0x2c }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid005;
+
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
index aecc5e1d..ed65bc97 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
@@ -37,6 +37,9 @@ Abstract:
 #define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0101 \
  {0x39ff9c71, 0x4b41, 0x4e5b, {0xae, 0xd7, 0x87, 0xc7, 0x94, 0x18, 0x7d, 0x67} }
 
+#define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0102 \
+ {0x847f1ae0, 0xb429, 0x49f1, {0x9e, 0x0c, 0x8f, 0x43, 0xfb, 0x55, 0x34, 0x54} }
+
 EFI_STATUS
 EFIAPI
 BBTestTCG2ProtocolUnload (
@@ -61,6 +64,18 @@ BBTestGetCapabilityConformanceTestCheckpoint3 (
   IN EFI_TCG2_PROTOCOL                     *TCG2
   );
 
+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,
@@ -69,3 +84,11 @@ BBTestGetCapabilityConformanceTest (
   IN EFI_HANDLE                 SupportHandle
   );
 
+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/TCG2ProtocolBBTestConformance.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
index a74b29b7..c7b326cd 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
@@ -82,6 +82,58 @@ BBTestGetCapabilityConformanceTest (
   return EFI_SUCCESS;
 }
 
+/**
+ *  @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 = (EFI_TCG2_PROTOCOL*)ClientInterface;
+
+  // Ensure Protocol not NULL
+  if (TCG2 == NULL)
+    return EFI_UNSUPPORTED;
+
+  //
+  // Get the Standard Library Interface
+  //
+  Status = gtBS->HandleProtocol (
+                   SupportHandle,
+                   &gEfiStandardTestLibraryGuid,
+                   (VOID **) &StandardLib
+                   );
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+
+  // Test Using NULL Pointer
+  BBTestGetActivePcrBanksConformanceTestCheckpoint1 (StandardLib, TCG2);
+
+  // Test with correct size field
+ BBTestGetActivePcrBanksConformanceTestCheckpoint2 (StandardLib, TCG2);
+
+  return EFI_SUCCESS;
+}
 
 EFI_STATUS
 BBTestGetCapabilityConformanceTestCheckpoint1 (
@@ -319,3 +371,110 @@ BBTestGetCapabilityConformanceTestCheckpoint3 (
   return EFI_SUCCESS;
 }
 
+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 = NULL;
+  Status = TCG2->GetActivePcrBanks (
+                           TCG2,
+                           ActivePcrBanks);
+
+  // Ensure GetCapablity returns Invalid Parameter when passing in NULL pointer
+  if (EFI_INVALID_PARAMETER == Status) {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid004,
+                 L"TCG2_PROTOCOL.GetActivePcrBanks - GetActivePcrBanks() returns 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 = TCG2->GetActivePcrBanks (
+                           TCG2,
+                           &ActivePcrBanks);
+
+  // Ensure GetActivePcrBanks returns EFI_SUCCESS
+  if (Status == EFI_SUCCESS) {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  } else {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetActivePcrBanks Test: GetActivePcrBanks should return EFI_SUCCESS"
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  EFI_TCG2_EVENT_ALGORITHM_BITMAP BitMapAlgos =  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: GetActivePcrBanks should have SHA256/384/512 Algorithm in its Bitmap. ActivePcrBanks = %x",
+                     ActivePcrBanks
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  BootServiceCap.Size = sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY);
+
+  Status = TCG2->GetCapability (
+                           TCG2,
+                           &BootServiceCap);
+
+  // Ensure ActivePcrBanks is the same returned as GetCapability()
+  if (ActivePcrBanks != BootServiceCap.ActivePcrBanks) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetActivePcrBanks Test:Returned ActivePcrBanks should match the one returned by GetCapabilty()"
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid005,
+                 L"TCG2_PROTOCOL.GetActivePcrBanks - GetActivePcrBanks should 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/TCG2ProtocolBBTestMain.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
index 97da8f58..4e7b1593 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
@@ -47,6 +47,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
     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
 };
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/6] uefi-sct/SctPkg: TCG2 Protocol: add HashLogExtendEvent test
  2022-01-09 20:58 [PATCH V2 0/6] Implementation of TCG2 Protocol test Joseph Hemann
                   ` (2 preceding siblings ...)
  2022-01-09 20:58 ` [PATCH 3/6] uefi-sct/SctPkg: TCG2 Protocol: add GetActivePcrBanks test Joseph Hemann
@ 2022-01-09 20:58 ` Joseph Hemann
  2022-01-09 20:58 ` [PATCH 5/6] uefi-sct/SctPkg: TCG2 Protocol: add GetEventLog test Joseph Hemann
  2022-01-09 20:58 ` [PATCH 6/6] uefi-sct/SctPkg: TCG2 Protocol: add SubmitCommand test Joseph Hemann
  5 siblings, 0 replies; 10+ messages in thread
From: Joseph Hemann @ 2022-01-09 20:58 UTC (permalink / raw)
  To: devel; +Cc: nd, Joseph Hemann

-add initial TCG2 protocol test for HashLogExtendEvent()
  -checkpoint for test of function with invalid parameters
  -checkpoint for test of function with valid parameters

V2:
-fix issue with reused Assertion Guid

Signed-off-by: Joseph Hemann <Joseph.hemann@arm.com>
Change-Id: I126f2c6316f8469455f8e2a19ca7e945e9d5d6ae
---
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.c     |  12 +
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.h     |  29 ++
 .../TCG2/BlackBoxTest/TCG2ProtocolBBTest.h    |  29 ++
 .../TCG2ProtocolBBTestConformance.c           | 281 ++++++++++++++++++
 .../BlackBoxTest/TCG2ProtocolBBTestMain.c     |   9 +
 5 files changed, 360 insertions(+)

diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c
index 0497f08f..ed013744 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
@@ -37,3 +37,15 @@ EFI_GUID gTcg2ConformanceTestAssertionGuid003 = EFI_TEST_TCG2CONFORMANCE_ASSERTI
 EFI_GUID gTcg2ConformanceTestAssertionGuid004 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_004_GUID;
 
 EFI_GUID gTcg2ConformanceTestAssertionGuid005 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_005_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid006 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_006_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid007 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_007_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid008 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_008_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid009 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_009_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid010 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_010_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid011 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_011_GUID;
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h
index f470255c..45c2b2b2 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
@@ -51,3 +51,32 @@ extern EFI_GUID gTcg2ConformanceTestAssertionGuid004;
 
 extern EFI_GUID gTcg2ConformanceTestAssertionGuid005;
 
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_006_GUID \
+{ 0xa8e1b5e6, 0xfc09, 0x461c, {0xb0, 0xe9, 0x2a, 0x49, 0xcd, 0x25, 0xc1, 0x24 }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid006;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_007_GUID \
+{ 0x26f04a9b, 0x7b7a, 0x4f47, {0xbe, 0xa8, 0xb1, 0xa6, 0x02, 0x65, 0x19, 0x8a }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid007;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_008_GUID \
+{ 0x4d1d9985, 0x91e2, 0x4948, {0x89, 0x16, 0xbb, 0x98, 0x13, 0x62, 0x39, 0x1d }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid008;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_009_GUID \
+{ 0xfb59cab7, 0x4f8c, 0x4ded, {0xa4, 0x1c, 0xc8, 0x41, 0x20, 0x1c, 0x37, 0x22 }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid009;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_010_GUID \
+{ 0x0363d22f, 0xc66a, 0x4872, {0xa5, 0x46, 0x06, 0x7f, 0x6a, 0x0d, 0xdb, 0xcd }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid010;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_011_GUID \
+{ 0x9cd6d636, 0x603a, 0x4b78, {0x80, 0xa3, 0xa3, 0xb9, 0xcc, 0x6a, 0x0b, 0x08 }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid011;
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
index ed65bc97..1b56852e 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
@@ -40,6 +40,15 @@ Abstract:
 #define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0102 \
  {0x847f1ae0, 0xb429, 0x49f1, {0x9e, 0x0c, 0x8f, 0x43, 0xfb, 0x55, 0x34, 0x54} }
 
+#define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0103 \
+ {0x907a7878, 0xb294, 0xf147, {0xe9, 0x0a, 0x65, 0x43, 0xab, 0x55, 0x76, 0x46} }
+
+#define EV_POST_CODE 0x01
+
+#define EFI_TCG2_EXTEND_ONLY 0x0000000000000001
+
+#define PE_COFF_IMAGE 0x0000000000000010
+
 EFI_STATUS
 EFIAPI
 BBTestTCG2ProtocolUnload (
@@ -76,6 +85,18 @@ BBTestGetActivePcrBanksConformanceTestCheckpoint2 (
   IN EFI_TCG2_PROTOCOL                     *TCG2
   );
 
+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,
@@ -92,3 +113,11 @@ BBTestGetActivePcrBanksConformanceTest (
   IN EFI_HANDLE                 SupportHandle
   );
 
+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/TCG2ProtocolBBTestConformance.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
index c7b326cd..874e4eb8 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
@@ -135,6 +135,57 @@ BBTestGetActivePcrBanksConformanceTest (
   return EFI_SUCCESS;
 }
 
+/**
+ *  @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 = (EFI_TCG2_PROTOCOL*)ClientInterface;
+
+  // Ensure Protocol not NULL
+  if (TCG2 == NULL)
+    return EFI_UNSUPPORTED;
+
+  // Get the Standard Library Interface
+  //
+  Status = gtBS->HandleProtocol (
+                   SupportHandle,
+                   &gEfiStandardTestLibraryGuid,
+                   (VOID **) &StandardLib
+                   );
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+
+  //Test Using NULL Pointer
+  BBTestHashLogExtendEventConformanceTestCheckpoint1 (StandardLib, TCG2);
+
+  //Test with correct size field
+  BBTestHashLogExtendEventConformanceTestCheckpoint2 (StandardLib, TCG2);
+
+  return EFI_SUCCESS;
+}
+
 EFI_STATUS
 BBTestGetCapabilityConformanceTestCheckpoint1 (
   IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
@@ -478,3 +529,233 @@ BBTestGetActivePcrBanksConformanceTestCheckpoint2 (
 
   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 = 0;
+  EFI_PHYSICAL_ADDRESS                  DataToHash;
+  UINT64                                DataToHashLen;
+  EFI_TCG2_EVENT                        *EfiTcgEvent;
+  const CHAR16                          *EventData = L"TCG2 Protocol Test";
+  const CHAR16                          *Str = L"The quick brown fox jumps over the lazy dog";
+  UINT32                                EfiTcgEventSize = sizeof(EFI_TCG2_EVENT) + SctStrSize(EventData);
+
+  DataToHash =  Str;
+  DataToHashLen = SctStrLen(Str);
+
+  Status = gtBS->AllocatePool (
+                   EfiBootServicesData,
+                   EfiTcgEventSize,
+                   (VOID **)&EfiTcgEvent
+                   );
+
+  EfiTcgEvent->Header.HeaderSize = sizeof(EFI_TCG2_EVENT_HEADER);
+  EfiTcgEvent->Header.EventType = EV_POST_CODE;
+  EfiTcgEvent->Header.PCRIndex = 16;
+  EfiTcgEvent->Size = EfiTcgEvent->Header.HeaderSize + SctStrSize(EventData);
+
+  // Ensure HashLogExtendEvent returns Invalid Parameter when passing in NULL DataToHash pointer
+  // EFI Protocol Spec Section 6.6.5 #1
+  Status = TCG2->HashLogExtendEvent (
+                           TCG2,
+                           Flags,
+                           NULL,
+                           0,
+                           EfiTcgEvent);
+
+  if (EFI_INVALID_PARAMETER != Status) {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid006,
+                 L"TCG2_PROTOCOL.HashLogExtendEvent - Test with NULL DataToHash Pointer should return EFI_INVALID_PARAMETER",
+                 L"%a:%d: Status - %r",
+                 __FILE__,
+                 (UINTN)__LINE__,
+                 Status
+                 );
+
+  // Ensure HashLogExtendEvent returns Invalid Parameter when passing in NULL EfiTcgEvent pointer
+  // EFI Protocol Spec Section 6.6.5 #1
+  Status = TCG2->HashLogExtendEvent (
+                           TCG2,
+                           Flags,
+                           DataToHash,
+                           DataToHashLen,
+                           NULL);
+
+  if (EFI_INVALID_PARAMETER != Status) {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+   } else {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+   }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid007,
+                 L"TCG2_PROTOCOL.HashLogExtendEvent - Test with NULL EfiTcgEvent Pointer should return EFI_INVALID_PARAMETER",
+                 L"%a:%d: Status - %r",
+                 __FILE__,
+                 (UINTN)__LINE__,
+                 Status
+                 );
+
+  // Ensure HashLogExtendEvent returns Invalid Parameter when passed in EventSize < HeaderSize + sizeof(UINT32)
+  // EFI Protocol Spec Section 6.6.5 #2
+  EfiTcgEvent->Size = EfiTcgEvent->Header.HeaderSize + sizeof(UINT32) - 1;
+
+  Status = TCG2->HashLogExtendEvent (
+                           TCG2,
+                           Flags,
+                           DataToHash,
+                           DataToHashLen,
+                           EfiTcgEvent);
+
+  if (EFI_INVALID_PARAMETER != Status) {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid008,
+                 L"TCG2_PROTOCOL.HashLogExtendEvent - Test with Event.Size < Event.Header.HeaderSize + sizeof(UINT32) should return EFI_INVALID_PARAMETER",
+                 L"%a:%d: Status - %r",
+                 __FILE__,
+                 (UINTN)__LINE__,
+                 Status
+                 );
+
+  // Ensure HashLogExtendEvent returns Invalid Parameter when passing in PCR Index > 23
+  // EFI Protocol Spec Section 6.6.5 #3
+  EfiTcgEvent->Header.PCRIndex = 24;
+  EfiTcgEvent->Size = EfiTcgEvent->Header.HeaderSize + SctStrSize(EventData);
+
+  Status = TCG2->HashLogExtendEvent (
+                           TCG2,
+                           Flags,
+                           DataToHash,
+                           DataToHashLen,
+                           EfiTcgEvent);
+
+  if (EFI_INVALID_PARAMETER != Status) {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid009,
+                 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 = 0;
+  EFI_PHYSICAL_ADDRESS                  DataToHash;
+  UINT64                                DataToHashLen;
+  const CHAR16 *Str = L"The quick brown fox jumps over the lazy dog";
+  const CHAR16 *EventData = L"TCG2 Protocol Test";
+  UINT32 EfiTcgEventSize = sizeof(EFI_TCG2_EVENT) + SctStrSize(EventData);
+
+  DataToHash = Str;
+  DataToHashLen = SctStrLen(Str);
+
+  Status = gtBS->AllocatePool (
+                   EfiBootServicesData,
+                   EfiTcgEventSize,
+                   (VOID **)&EfiTcgEvent
+                   );
+
+  EfiTcgEvent->Header.HeaderSize = sizeof(EFI_TCG2_EVENT_HEADER);
+  EfiTcgEvent->Header.EventType = EV_POST_CODE;
+  EfiTcgEvent->Header.PCRIndex = 16;
+  EfiTcgEvent->Size = EfiTcgEvent->Header.HeaderSize + SctStrSize(EventData);
+
+  // Perform HashLogExtendEvent over test buffer to PCR 16
+  Status = TCG2->HashLogExtendEvent (
+                           TCG2,
+                           Flags,
+                           DataToHash,
+                           DataToHashLen,
+                           EfiTcgEvent);
+
+  if (Status != EFI_SUCCESS) {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid010,
+                 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 = PE_COFF_IMAGE
+  // EFI Protocol Spec Section 6.6.5 #4
+  Flags = PE_COFF_IMAGE;
+
+  Status = TCG2->HashLogExtendEvent (
+                           TCG2,
+                           Flags,
+                           DataToHash,
+                           DataToHashLen,
+                           EfiTcgEvent);
+
+  if (Status != EFI_UNSUPPORTED) {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid011,
+                 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/TCG2ProtocolBBTestMain.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
index 4e7b1593..892fce26 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
@@ -56,6 +56,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
     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
 };
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5/6] uefi-sct/SctPkg: TCG2 Protocol: add GetEventLog test
  2022-01-09 20:58 [PATCH V2 0/6] Implementation of TCG2 Protocol test Joseph Hemann
                   ` (3 preceding siblings ...)
  2022-01-09 20:58 ` [PATCH 4/6] uefi-sct/SctPkg: TCG2 Protocol: add HashLogExtendEvent test Joseph Hemann
@ 2022-01-09 20:58 ` Joseph Hemann
  2022-01-09 20:58 ` [PATCH 6/6] uefi-sct/SctPkg: TCG2 Protocol: add SubmitCommand test Joseph Hemann
  5 siblings, 0 replies; 10+ messages in thread
From: Joseph Hemann @ 2022-01-09 20:58 UTC (permalink / raw)
  To: devel; +Cc: nd, Joseph Hemann

-add initial TCG2 protocol test for GetEventLog()
  -checkpoint for test function with invalid eventlog format
  -checkpoint for test function with valid eventlog format

V2:
-Change checkpoint names from HashLogExtendEvent to GetEventLog

Signed-off-by: Joseph Hemann <Joseph.hemann@arm.com>
Change-Id: I5ca3a46b3d36e8f11848a788f6cfdcabeb5b04c8
---
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.c     |   8 +
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.h     |  20 ++
 .../TCG2/BlackBoxTest/TCG2ProtocolBBTest.h    |  15 ++
 .../TCG2ProtocolBBTestConformance.c           | 204 +++++++++++++++++-
 uefi-sct/SctPkg/UEFI/Protocol/TCG2.h          |  46 ++++
 5 files changed, 292 insertions(+), 1 deletion(-)

diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c
index ed013744..b5a4e5c7 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
@@ -49,3 +49,11 @@ EFI_GUID gTcg2ConformanceTestAssertionGuid009 = EFI_TEST_TCG2CONFORMANCE_ASSERTI
 EFI_GUID gTcg2ConformanceTestAssertionGuid010 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_010_GUID;
 
 EFI_GUID gTcg2ConformanceTestAssertionGuid011 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_011_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid012 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_012_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid013 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_013_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid014 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_014_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid015 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_015_GUID;
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h
index 45c2b2b2..d3a18aee 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
@@ -80,3 +80,23 @@ extern EFI_GUID gTcg2ConformanceTestAssertionGuid010;
 { 0x9cd6d636, 0x603a, 0x4b78, {0x80, 0xa3, 0xa3, 0xb9, 0xcc, 0x6a, 0x0b, 0x08 }}
 
 extern EFI_GUID gTcg2ConformanceTestAssertionGuid011;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_012_GUID \
+{ 0x0a938567, 0xb234, 0xad21, {0x2a, 0xa6, 0x11, 0x65, 0xaa, 0xde, 0x12, 0xc2 }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid012;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_013_GUID \
+{ 0x45fa1a42, 0x912a, 0x5124, {0x84, 0xf4, 0x41, 0x67, 0xab, 0xb5, 0x89, 0x90 }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid013;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_014_GUID \
+{ 0xfc80408e, 0x9a3c, 0x4054, {0x96, 0xf9, 0x31, 0x23, 0x35, 0xc2, 0x31, 0x35 }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid014;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_015_GUID \
+{ 0xa76d2903, 0xbbcc, 0x8a72, {0x90, 0x23, 0xd3, 0xaa, 0xba, 0xb1, 0x52, 0x13 }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid015;
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
index 1b56852e..d9c23094 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
@@ -45,6 +45,8 @@ Abstract:
 
 #define EV_POST_CODE 0x01
 
+#define EV_NO_ACTION 0x03
+
 #define EFI_TCG2_EXTEND_ONLY 0x0000000000000001
 
 #define PE_COFF_IMAGE 0x0000000000000010
@@ -97,6 +99,19 @@ BBTestHashLogExtendEventConformanceTestCheckpoint2 (
   IN EFI_TCG2_PROTOCOL                     *TCG2
   );
 
+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/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
index 874e4eb8..a7bec793 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
@@ -137,7 +137,7 @@ BBTestGetActivePcrBanksConformanceTest (
 
 /**
  *  @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
@@ -183,6 +183,12 @@ BBTestHashLogExtendEventConformanceTest (
   //Test with correct size field
   BBTestHashLogExtendEventConformanceTestCheckpoint2 (StandardLib, TCG2);
 
+  // Test GetEventLog using invalid EventLog Format
+  BBTestGetEventLogConformanceTestCheckpoint1 (StandardLib, TCG2);
+
+  // Test GetEventLog using valid EventLog Format
+  BBTestGetEventLogConformanceTestCheckpoint2 (StandardLib, TCG2);
+
   return EFI_SUCCESS;
 }
 
@@ -759,3 +765,199 @@ BBTestHashLogExtendEventConformanceTestCheckpoint2 (
 
   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 format
+  EventLogFormat = EFI_TCG2_INVALID_EVENT_LOG_FORMAT;
+
+  Status = TCG2->GetEventLog (
+                           TCG2,
+                           EventLogFormat,
+                           EventLogLocation,
+                           EventLogLastEntry,
+                           EventLogTruncated);
+
+  if (EFI_INVALID_PARAMETER != Status) {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid012,
+                 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;
+  UINT8 *data = "Spec ID Event03\0\0";
+
+  EventLogFormat = EFI_TCG2_EVENT_LOG_FORMAT_TCG_2;
+
+  // Call GetEventLog with valid EventLogFormat
+  Status = TCG2->GetEventLog (
+                           TCG2,
+                           EventLogFormat,
+                           &EventLogLocation,
+                           &EventLogLastEntry,
+                           &EventLogTruncated);
+
+  AssertionType = EFI_TEST_ASSERTION_PASSED;
+
+  // Verify GetEventLog returns EFI_SUCCESS
+  if (Status != EFI_SUCCESS) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetEventLog Test: GetEventLog should return EFI_SUCCESS with valid EventLogFormat, Status = %r",
+                     Status
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid013,
+                 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 != EFI_SUCCESS) {
+    return Status;
+  }
+
+  EventLogHeader = (TCG_PCR_EVENT *) EventLogLocation;
+  EventLogHeaderSpecEvent = (TCG_EfiSpecIDEventStruct *) EventLogHeader->Event;
+
+  AssertionType = EFI_TEST_ASSERTION_PASSED;
+
+
+  // Verify valid eventlog header is returned
+  // Verify EventLogHeader PCR index == 0
+  if (EventLogHeader->PCRIndex != 0) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetEventLog Test: EventLogHeader should have PCR index == 0"
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  // Verify EventLogHeader event type = EV_NO_ACTION
+  if (EventLogHeader->EventType != EV_NO_ACTION) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetEventLog Test: EventLogHeader should be EventType == EV_NO_ACTION"
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  // Verify EventLog Signature
+  Status = SctStrCmp(EventLogHeaderSpecEvent->signature, data);
+
+  if (Status != EFI_SUCCESS) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetEventLog Test: EventLogHeader Signature did not match \'Spec ID Event03\'"
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid014,
+                 L"TCG2_PROTOCOL.GetEventLog - GetEventLog() should return correct EventLogHeader",
+                 L"%a:%d: Status - %r",
+                 __FILE__,
+                 (UINTN)__LINE__,
+                 Status
+                 );
+
+
+  // Verify Event recorded in checkpoint2 was recorded in Eventlog
+  LastEvent = (TCG_PCR_EVENT2 *) EventLogLastEntry;
+
+  // Verify Last Event PCR = 16
+  if (LastEvent->PCRIndex != 16) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetEventLog Test: PCR Index of Last event should be 16"
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  // Verify last event type = EV_POST_CODE
+  if (LastEvent->EventType != EV_POST_CODE) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol GetEventLog Test: PCR Index of last event should be type EV_POST_CODE"
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid015,
+                 L"TCG2_PROTOCOL.GetEventLog - GetEventLog() should record Event from Checkpoint2 as last EventLogEntry",
+                 L"%a:%d: Status - %r",
+                 __FILE__,
+                 (UINTN)__LINE__,
+                 Status
+                 );
+
+  return EFI_SUCCESS;
+}
diff --git a/uefi-sct/SctPkg/UEFI/Protocol/TCG2.h b/uefi-sct/SctPkg/UEFI/Protocol/TCG2.h
index 923549e2..ac66fa0e 100644
--- a/uefi-sct/SctPkg/UEFI/Protocol/TCG2.h
+++ b/uefi-sct/SctPkg/UEFI/Protocol/TCG2.h
@@ -50,6 +50,8 @@ Abstract:
 
 #define EFI_TCG2_EVENT_LOG_FORMAT_TCG_2 0x00000002
 
+#define HASH_NUMBER 0x04
+
 typedef struct _EFI_TCG2_PROTOCOL EFI_TCG2_PROTOCOL;
 
 typedef UINT64 EFI_PHYSICAL_ADDRESS;
@@ -114,6 +116,50 @@ typedef struct tdEFI_TCG2_EVENT {
   UINT8 Event[];
 } EFI_TCG2_EVENT;
 
+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;
+
 typedef
 EFI_STATUS
 (EFIAPI * EFI_TCG2_HASH_LOG_EXTEND_EVENT) (
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 6/6] uefi-sct/SctPkg: TCG2 Protocol: add SubmitCommand test
  2022-01-09 20:58 [PATCH V2 0/6] Implementation of TCG2 Protocol test Joseph Hemann
                   ` (4 preceding siblings ...)
  2022-01-09 20:58 ` [PATCH 5/6] uefi-sct/SctPkg: TCG2 Protocol: add GetEventLog test Joseph Hemann
@ 2022-01-09 20:58 ` Joseph Hemann
  5 siblings, 0 replies; 10+ messages in thread
From: Joseph Hemann @ 2022-01-09 20:58 UTC (permalink / raw)
  To: devel; +Cc: nd, Joseph Hemann

    -add initial TCG2 protocol test for SubmitCommand()
      -checkpoint for test function with TPM2_Hash Command
V2:
-Change command submitted from GetRandom to TPM2_HASH
-combined to 2 assertions into 1

Signed-off-by: Joseph Hemann <Joseph.hemann@arm.com>
Change-Id: Ibab68cae1d49953d1076c5628ea80319ba7ca831
---
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.c     |   2 +
 .../EFI/Protocol/TCG2/BlackBoxTest/Guid.h     |   5 +
 .../TCG2/BlackBoxTest/TCG2ProtocolBBTest.h    |  70 +++++++
 .../TCG2ProtocolBBTestConformance.c           | 172 ++++++++++++++++++
 .../BlackBoxTest/TCG2ProtocolBBTestMain.c     |   9 +
 5 files changed, 258 insertions(+)

diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.c
index b5a4e5c7..87541743 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
@@ -57,3 +57,5 @@ EFI_GUID gTcg2ConformanceTestAssertionGuid013 = EFI_TEST_TCG2CONFORMANCE_ASSERTI
 EFI_GUID gTcg2ConformanceTestAssertionGuid014 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_014_GUID;
 
 EFI_GUID gTcg2ConformanceTestAssertionGuid015 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_015_GUID;
+
+EFI_GUID gTcg2ConformanceTestAssertionGuid016 = EFI_TEST_TCG2CONFORMANCE_ASSERTION_016_GUID;
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/Guid.h
index d3a18aee..507cecc6 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
@@ -100,3 +100,8 @@ extern EFI_GUID gTcg2ConformanceTestAssertionGuid014;
 { 0xa76d2903, 0xbbcc, 0x8a72, {0x90, 0x23, 0xd3, 0xaa, 0xba, 0xb1, 0x52, 0x13 }}
 
 extern EFI_GUID gTcg2ConformanceTestAssertionGuid015;
+
+#define EFI_TEST_TCG2CONFORMANCE_ASSERTION_016_GUID \
+{ 0x1689bc3a, 0x2298, 0xa116, {0x28, 0x4c, 0xc1, 0xdd, 0xaa, 0xd8, 0xef, 0x51 }}
+
+extern EFI_GUID gTcg2ConformanceTestAssertionGuid016;
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
index d9c23094..c8684f79 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTest.h
@@ -43,6 +43,9 @@ Abstract:
 #define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0103 \
  {0x907a7878, 0xb294, 0xf147, {0xe9, 0x0a, 0x65, 0x43, 0xab, 0x55, 0x76, 0x46} }
 
+#define EFI_TCG2_PROTOCOL_TEST_ENTRY_GUID0104 \
+ {0x9087ad78, 0x9ad2, 0x4172, {0x9a, 0xbc, 0x98, 0x23, 0x08, 0xf5, 0x6d, 0x26} }
+
 #define EV_POST_CODE 0x01
 
 #define EV_NO_ACTION 0x03
@@ -51,6 +54,61 @@ Abstract:
 
 #define PE_COFF_IMAGE 0x0000000000000010
 
+// ST_NO_SESSION as definied in Table 19 of TPM Library Part 2: Structures
+#define ST_NO_SESSIONS (UINT16) 0x8001
+
+// TPM_RC_SUCCESS as definied in Table 16 of TPM Library Spec Part 2: Structures
+#define TPM_RC_SUCCESS (UINT32) 0x0000000
+
+// TPM_CC_Hash as definied in Table 12 of TPM Library Spec Part 2: Structures
+#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 definied in Table 86 of TPM Library Spec Part 2: Structures
+typedef struct {
+  UINT16 size;
+  UINT8  digest[5];  // Size of buffer in spec is defined to be variable length but for this test will always be 5
+} TPM2B_MAX_BUFFER;
+
+#pragma pack(1)
+// TPM2B_DIGEST as definied in Table 73 of TPM Library Spec Part 2: Structures
+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 variable length but for this test will always be UINT16
+} TPMT_TK_HASHCHECK;
+
+// TPM2_Hash command Structure as defined in Sectin 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 Sectin 15.4 of TPM Spec Part 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 (
@@ -111,6 +169,11 @@ BBTestGetEventLogConformanceTestCheckpoint2 (
   IN EFI_TCG2_PROTOCOL                     *TCG2
   );
 
+EFI_STATUS
+BBTestSubmitCommandConformanceTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
+  IN EFI_TCG2_PROTOCOL                     *TCG2
+  );
 
 EFI_STATUS
 BBTestGetCapabilityConformanceTest (
@@ -136,3 +199,10 @@ BBTestHashLogExtendEventConformanceTest (
   IN EFI_HANDLE                 SupportHandle
   );
 
+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/TCG2ProtocolBBTestConformance.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
index a7bec793..c77828df 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestConformance.c
@@ -192,6 +192,56 @@ BBTestHashLogExtendEventConformanceTest (
   return EFI_SUCCESS;
 }
 
+/**
+ *  @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 = (EFI_TCG2_PROTOCOL*)ClientInterface;
+
+  // Ensure Protocol not NULL
+  if (TCG2 == NULL)
+    return EFI_UNSUPPORTED;
+
+  //
+  // Get the Standard Library Interface
+  //
+  Status = 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,
@@ -961,3 +1011,125 @@ BBTestGetEventLogConformanceTestCheckpoint2 (
 
   return EFI_SUCCESS;
 }
+
+//  Expected SHA256 Hash for input "hello"
+UINT8 Tpm2HashOut[32] = {0x2c,0xf2,0x4d,0xba,0x5f,0xb0,0xa3,0x0e,0x26,0xe8,0x3b,0x2a,0xc5,0xb9,0xe2,0x9e,\
+0x1b,0x16,0x1e,0x5c,0x1f,0xa7,0x42,0x5e,0x73,0x04,0x33,0x62,0x93,0x8b,0x98,0x24};
+
+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;
+  char *Str ="hello";
+
+  // Build TPM2 Hash commmand to hash string "hello"
+  CommandInput.Tag = SctSwapBytes16(ST_NO_SESSIONS);
+  CommandInput.CommandSize = SctSwapBytes32(sizeof(TPM2_HASH_COMMAND));
+  CommandInput.CommandCode = SctSwapBytes32(TPM_CC_Hash);
+  CommandInput.data.size = SctSwapBytes16(SctAsciiStrLen(Str));
+  SctAsciiStrCpy(CommandInput.data.digest, Str);
+  CommandInput.hashAlg = SctSwapBytes16(TPM_ALG_SHA256);
+  CommandInput.hierarchy = SctSwapBytes32(TPM_RH_NULL);
+
+  // allocate buffer for response
+  SctZeroMem(&CommandResponse, sizeof(TPM2_HASH_RESPONSE));
+
+  Status = TCG2->SubmitCommand (
+                           TCG2,
+                           sizeof(TPM2_HASH_COMMAND),
+                           &CommandInput,
+                           sizeof(TPM2_HASH_RESPONSE),
+                           &CommandResponse);
+
+
+  AssertionType = EFI_TEST_ASSERTION_PASSED;
+
+  // Verify SubmitCommand returns EFI_SUCCESS
+  if (Status != EFI_SUCCESS) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol SubmitCommand Test: SubmitCommand should return EFI_SUCCESS, Status = %r",
+                     Status
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  // Verify SubmitCommand returns correct Response Tag
+  if (SctSwapBytes16(CommandResponse.Tag) != 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 = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  // Verify SubmitCommand returns correct Response Code
+  if (SctSwapBytes32(CommandResponse.ResponseCode) != TPM_RC_SUCCESS) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol SubmitCommand Test: SubmitCommand should return Correct ResponseCode, ResponseCode = %x",
+                     SctSwapBytes32(CommandResponse.ResponseCode)
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+
+  // Verify SubmitCommand returns correct Response Size
+  if (SctSwapBytes32(CommandResponse.ResponseSize) != sizeof(TPM2_HASH_RESPONSE)) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol SubmitCommand Test: SubmitCommand should return Correct ResponseSize, Size = %x",
+                     SctSwapBytes32(CommandResponse.ResponseSize)
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  // Check that the size of the buffer returned is size of SHA256 hash
+  if (SctSwapBytes16(CommandResponse.data.size) != 32) {
+    StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nTCG2 Protocol SubmitCommand Test: SubmitCommand should return correct size digest for SHA256, Size = %x",
+                     SctSwapBytes16(CommandResponse.data.size)
+                     );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  // Ensure Hash returned matches expected response for input
+  if (0 != SctCompareMem(Tpm2HashOut, CommandResponse.data.digest, SHA256_LENGTH) ) {
+    StandardLib->RecordMessage (
+                   StandardLib,
+                   EFI_VERBOSE_LEVEL_DEFAULT,\r                    L"\r\nTCG2 Protocol SubmitCommand Test: SubmitCommand should return expected Hash for data that was hashed."
+                   );
+
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  StandardLib->RecordAssertion (
+                 StandardLib,
+                 AssertionType,
+                 gTcg2ConformanceTestAssertionGuid016,
+                 L"EFI_TCG2_PROTOCOL. SubmitComand() - SubmitCommand() shall populate the response buffer and return with a status of EFI_SUCCESS when 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/TCG2ProtocolBBTestMain.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
index 892fce26..48a8a450 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/TCG2/BlackBoxTest/TCG2ProtocolBBTestMain.c
@@ -65,6 +65,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
     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
 };
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [edk2-devel] [PATCH 2/6] uefi-sct/SctPkg: TCG2 Protocol: add GetCapability Test
  2022-01-09 20:58 ` [PATCH 2/6] uefi-sct/SctPkg: TCG2 Protocol: add GetCapability Test Joseph Hemann
@ 2022-02-01 18:32   ` Stuart Yoder
  2022-02-07 17:59     ` Joseph Hemann
  0 siblings, 1 reply; 10+ messages in thread
From: Stuart Yoder @ 2022-02-01 18:32 UTC (permalink / raw)
  To: devel, joseph.hemann
  Cc: G Edhaya Chandran, Barton Gao, Carolyn Gjertsen,
	Samer El-Haj-Mahmoud, Eric Jin, Arvin Chen, Supreeth Venkatesh,
	Heinrich Schuchardt

See inline comments...

> +EFI_STATUS
> +BBTestGetCapabilityConformanceTestCheckpoint2 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
> +  IN EFI_TCG2_PROTOCOL                     *TCG2
> +  )
> +{
> +  EFI_TEST_ASSERTION                    AssertionType;
> +  EFI_STATUS                            Status;
> +  char StructureVersionMajor;
> +  char StructureVersionMinor;
> +  char ProtocolVersionMajor;
> +  char ProtocolVersionMinor;
> +
> +  EFI_TCG2_BOOT_SERVICE_CAPABILITY      BootServiceCap;
> +  BootServiceCap.Size = sizeof(UINT8) + (sizeof(EFI_TCG2_VERSION) * 2);
> +
> +  Status = TCG2->GetCapability (
> +                           TCG2,
> +                           &BootServiceCap);
> +
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +
> +  // If the input ProtocolCapability.Size < sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY) the function should return EFI_BUFFER_TOO_SMALL
> +  if (Status != EFI_BUFFER_TOO_SMALL) {
> +     StandardLib->RecordMessage (
> 
> +                     StandardLib,
> 
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> 
> +                     L"\r\nTCG2 Protocol GetCapablity Test: Did not return Status == EFI_BUFFER_TOO_SMALL with input ProtocolCapability.Size < sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY)"
> +                     );
> +
> +     AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  }
> +
> +  StructureVersionMajor = BootServiceCap.StructureVersion.Major;
> +  StructureVersionMinor = BootServiceCap.StructureVersion.Minor;
> +
> +  // If the input ProtocolCapability.Size < sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY) the function will initialize the fields included in ProtocolCapability.Size.
> +  if ((StructureVersionMajor != 1) | (StructureVersionMinor != 1)) {
> +     StandardLib->RecordMessage (
> 
> +                     StandardLib,
> 
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> 
> +                     L"\r\nTCG2 Protocol GetCapablity Test: Unexpected struct version numbers returned"
> +                     );
> +
> +     AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  }
> +
> +  ProtocolVersionMajor = BootServiceCap.ProtocolVersion.Major;
> +  ProtocolVersionMinor = BootServiceCap.ProtocolVersion.Minor;
> +
> +  if ((ProtocolVersionMajor != 1) | (ProtocolVersionMinor != 1)) {
> +     StandardLib->RecordMessage (
> 
> +                     StandardLib,
> 
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> 
> +                     L"\r\nTCG2 Protocol GetCapablity Test: Unexpected protocol version numbers returned."
> +                     );
> +
> +     AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  }
> +
> +  StandardLib->RecordAssertion (
> +                 StandardLib,
> +                 AssertionType,
> +                 gTcg2ConformanceTestAssertionGuid002,
> +                 L"TCG2_PROTOCOL.GetCapability() - GetCapability() shall populate the included structure elements and return with a Status of EFI_BUFFER_TOO_SMALL when structure size is set to less than the size of EFI_TCG_BOOT_SERVICE_CAPABILITY.",
> +                 L"%a:%d: Status - %r",
> +                 __FILE__,
> +                 (UINTN)__LINE__,
> +                 Status
> +                 );

In the SCT spec draft there is a test:

   f. Verify returned Size equal to size of the
   EFI_TCG2_BOOT_SERVICE_CAPABILITY up to and including the vendor ID
   field.

...but I don't see that test covered in the code.

> +  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;
> +  char StructureVersionMajor;
> +  char StructureVersionMinor;
> +  char ProtocolVersionMajor;
> +  char ProtocolVersionMinor;
> +  EFI_TCG2_BOOT_SERVICE_CAPABILITY      BootServiceCap;
> +
> +  BootServiceCap.Size = sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY);

BootServiceCap.Size is not used in this test, so should be able to 
delete the above line.

> +  Status = TCG2->GetCapability (
> +                           TCG2,
> +                           &BootServiceCap);
> +
> +  AssertionType = EFI_TEST_ASSERTION_PASSED;
> +
> +  if (Status != EFI_SUCCESS) {
> +    StandardLib->RecordMessage (
> 
> +                     StandardLib,
> 
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> 
> +                     L"\r\nTCG2 Protocol GetCapablity Test: GetCapabilty should return EFI_SUCCESS"
> +                     );
> +
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  }
> +
> +  StructureVersionMajor = BootServiceCap.StructureVersion.Major;
> +  StructureVersionMinor = BootServiceCap.StructureVersion.Minor;
> +
> +  // TCG EFI Protocol spec 6.4.4 #4
> +  if ((StructureVersionMajor != 1) | (StructureVersionMinor != 1)) {
> +    StandardLib->RecordMessage (
> 
> +                     StandardLib,
> 
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> 
> +                     L"\r\nTCG2 Protocol GetCapablity Test: GetCapabilty should have StructureVersion 1.1"
> +                     );
> +
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  }
> +
> +  ProtocolVersionMajor = BootServiceCap.ProtocolVersion.Major;
> +  ProtocolVersionMinor = BootServiceCap.ProtocolVersion.Minor;
> +
> +  // TCG EFI Protocol spec 6.4.4 #4
> +  if ((ProtocolVersionMajor != 1) | (ProtocolVersionMinor != 1)) {
> +    StandardLib->RecordMessage (
> 
> +                     StandardLib,
> 
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> 
> +                     L"\r\nTCG2 Protocol GetCapablity Test: protocol version must be 1.1"
> +                     );
> +
> +    AssertionType = 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 GetCapablity Test: GetCapabilty must support TCG2 event log format"
> +                     );
> +
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  }
> +
> +  if (BootServiceCap.NumberOfPcrBanks < 1 ) {
> +    StandardLib->RecordMessage (
> 
> +                     StandardLib,
> 
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> 
> +                     L"\r\nTCG2 Protocol GetCapablity Test: expect at least 1 PCR bank"
> +                     );
> +
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  }
> +
> +  if (!(BootServiceCap.HashAlgorithmBitmap & EFI_TCG2_BOOT_HASH_ALG_SHA256)) {
> +    StandardLib->RecordMessage (
> 
> +                     StandardLib,
> 
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> 
> +                     L"\r\nTCG2 Protocol GetCapablity Test: unexpected hash algorithms reported = %x",
> +                     BootServiceCap.HashAlgorithmBitmap
> +                     );
> +
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  }
> +
> +  if (!(~BootServiceCap.ActivePcrBanks & BootServiceCap.HashAlgorithmBitmap) == 0) {

The above test doesn't look correct to me.  Need to sanity check that.

> +    StandardLib->RecordMessage (
> 
> +                     StandardLib,
> 
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> 
> +                     L"\r\nTCG2 Protocol GetCapablity Test: ActivePcrBanks is not a subset of HashAlgorithmBitmap"
> +                     );
> +
> +    AssertionType = EFI_TEST_ASSERTION_FAILED;
> +  }
> +
> +  if (!(BootServiceCap.ActivePcrBanks & EFI_TCG2_BOOT_HASH_ALG_SHA256)) {

In the SCT spec the test says to verify that ActivePcrBanks includes 
SHA256, SHA384, or SHA512.  As written the test would fail if active pcr 
banks was SHA384.

Thanks,
Stuart

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [edk2-devel] [PATCH 2/6] uefi-sct/SctPkg: TCG2 Protocol: add GetCapability Test
  2022-02-01 18:32   ` [edk2-devel] " Stuart Yoder
@ 2022-02-07 17:59     ` Joseph Hemann
  0 siblings, 0 replies; 10+ messages in thread
From: Joseph Hemann @ 2022-02-07 17:59 UTC (permalink / raw)
  To: Stuart Yoder, devel@edk2.groups.io
  Cc: G Edhaya Chandran, Barton Gao, Carolyn Gjertsen,
	Samer El-Haj-Mahmoud, Eric Jin, Arvin Chen, Supreeth Venkatesh,
	Heinrich Schuchardt

See inline comments..

On 2/1/22, 12:33 PM, "Stuart Yoder" <stuart.yoder@arm.com> wrote:

    See inline comments...

    > +EFI_STATUS
    > +BBTestGetCapabilityConformanceTestCheckpoint2 (
    > +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
    > +  IN EFI_TCG2_PROTOCOL                     *TCG2
    > +  )
    > +{
    > +  EFI_TEST_ASSERTION                    AssertionType;
    > +  EFI_STATUS                            Status;
    > +  char StructureVersionMajor;
    > +  char StructureVersionMinor;
    > +  char ProtocolVersionMajor;
    > +  char ProtocolVersionMinor;
    > +
    > +  EFI_TCG2_BOOT_SERVICE_CAPABILITY      BootServiceCap;
    > +  BootServiceCap.Size = sizeof(UINT8) + (sizeof(EFI_TCG2_VERSION) * 2);
    > +
    > +  Status = TCG2->GetCapability (
    > +                           TCG2,
    > +                           &BootServiceCap);
    > +
    > +  AssertionType = EFI_TEST_ASSERTION_PASSED;
    > +
    > +  // If the input ProtocolCapability.Size < sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY) the function should return EFI_BUFFER_TOO_SMALL
    > +  if (Status != EFI_BUFFER_TOO_SMALL) {
    > +     StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: Did not return Status == EFI_BUFFER_TOO_SMALL with input ProtocolCapability.Size < sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY)"
    > +                     );
    > +
    > +     AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  StructureVersionMajor = BootServiceCap.StructureVersion.Major;
    > +  StructureVersionMinor = BootServiceCap.StructureVersion.Minor;
    > +
    > +  // If the input ProtocolCapability.Size < sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY) the function will initialize the fields included in ProtocolCapability.Size.
    > +  if ((StructureVersionMajor != 1) | (StructureVersionMinor != 1)) {
    > +     StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: Unexpected struct version numbers returned"
    > +                     );
    > +
    > +     AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  ProtocolVersionMajor = BootServiceCap.ProtocolVersion.Major;
    > +  ProtocolVersionMinor = BootServiceCap.ProtocolVersion.Minor;
    > +
    > +  if ((ProtocolVersionMajor != 1) | (ProtocolVersionMinor != 1)) {
    > +     StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: Unexpected protocol version numbers returned."
    > +                     );
    > +
    > +     AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  StandardLib->RecordAssertion (
    > +                 StandardLib,
    > +                 AssertionType,
    > +                 gTcg2ConformanceTestAssertionGuid002,
    > +                 L"TCG2_PROTOCOL.GetCapability() - GetCapability() shall populate the included structure elements and return with a Status of EFI_BUFFER_TOO_SMALL when structure size is set to less than the size of EFI_TCG_BOOT_SERVICE_CAPABILITY.",
    > +                 L"%a:%d: Status - %r",
    > +                 __FILE__,
    > +                 (UINTN)__LINE__,
    > +                 Status
    > +                 );

>   In the SCT spec draft there is a test:
>    f. Verify returned Size equal to size of the
>     EFI_TCG2_BOOT_SERVICE_CAPABILITY up to and including the vendor ID
>      field.

> ...but I don't see that test covered in the code.

I will add this check to the next round of edits I send out.

    > +  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;
    > +  char StructureVersionMajor;
    > +  char StructureVersionMinor;
    > +  char ProtocolVersionMajor;
    > +  char ProtocolVersionMinor;
    > +  EFI_TCG2_BOOT_SERVICE_CAPABILITY      BootServiceCap;
    > +
    > +  BootServiceCap.Size = sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY);

  >  BootServiceCap.Size is not used in this test, so should be able to
    delete the above line.

   BootServiceCap.Size needs to be set so that GetCapability knows how much of the struct to fill out. Even though it is not checked it still needs to be set before calling  GetCapabilty.

    > +  Status = TCG2->GetCapability (
    > +                           TCG2,
    > +                           &BootServiceCap);
    > +
    > +  AssertionType = EFI_TEST_ASSERTION_PASSED;
    > +
    > +  if (Status != EFI_SUCCESS) {
    > +    StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: GetCapabilty should return EFI_SUCCESS"
    > +                     );
    > +
    > +    AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  StructureVersionMajor = BootServiceCap.StructureVersion.Major;
    > +  StructureVersionMinor = BootServiceCap.StructureVersion.Minor;
    > +
    > +  // TCG EFI Protocol spec 6.4.4 #4
    > +  if ((StructureVersionMajor != 1) | (StructureVersionMinor != 1)) {
    > +    StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: GetCapabilty should have StructureVersion 1.1"
    > +                     );
    > +
    > +    AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  ProtocolVersionMajor = BootServiceCap.ProtocolVersion.Major;
    > +  ProtocolVersionMinor = BootServiceCap.ProtocolVersion.Minor;
    > +
    > +  // TCG EFI Protocol spec 6.4.4 #4
    > +  if ((ProtocolVersionMajor != 1) | (ProtocolVersionMinor != 1)) {
    > +    StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: protocol version must be 1.1"
    > +                     );
    > +
    > +    AssertionType = 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 GetCapablity Test: GetCapabilty must support TCG2 event log format"
    > +                     );
    > +
    > +    AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  if (BootServiceCap.NumberOfPcrBanks < 1 ) {
    > +    StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: expect at least 1 PCR bank"
    > +                     );
    > +
    > +    AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  if (!(BootServiceCap.HashAlgorithmBitmap & EFI_TCG2_BOOT_HASH_ALG_SHA256)) {
    > +    StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: unexpected hash algorithms reported = %x",
    > +                     BootServiceCap.HashAlgorithmBitmap
    > +                     );
    > +
    > +    AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  if (!(~BootServiceCap.ActivePcrBanks & BootServiceCap.HashAlgorithmBitmap) == 0) {

   > The above test doesn't look correct to me.  Need to sanity check that.

   After looking at it further I agree. The check should look something like ((BootServiceCap.ActivePcrBanks & ~BootServiceCap.HashAlgorithmBitmap) != 0)

    > +    StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: ActivePcrBanks is not a subset of HashAlgorithmBitmap"
    > +                     );
    > +
    > +    AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  if (!(BootServiceCap.ActivePcrBanks & EFI_TCG2_BOOT_HASH_ALG_SHA256)) {

   > In the SCT spec the test says to verify that ActivePcrBanks includes
    >SHA256, SHA384, or SHA512.  As written the test would fail if active pcr
    >banks was SHA384.

   I have decided to change the spec to only check for SHA_256 in this case. 384 and 512 should only be implemented if 256 is implemented but we wont check for that.

    Thanks,
    Joseph

On 2/1/22, 12:33 PM, "Stuart Yoder" <stuart.yoder@arm.com> wrote:

    See inline comments...

    > +EFI_STATUS
    > +BBTestGetCapabilityConformanceTestCheckpoint2 (
    > +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib,
    > +  IN EFI_TCG2_PROTOCOL                     *TCG2
    > +  )
    > +{
    > +  EFI_TEST_ASSERTION                    AssertionType;
    > +  EFI_STATUS                            Status;
    > +  char StructureVersionMajor;
    > +  char StructureVersionMinor;
    > +  char ProtocolVersionMajor;
    > +  char ProtocolVersionMinor;
    > +
    > +  EFI_TCG2_BOOT_SERVICE_CAPABILITY      BootServiceCap;
    > +  BootServiceCap.Size = sizeof(UINT8) + (sizeof(EFI_TCG2_VERSION) * 2);
    > +
    > +  Status = TCG2->GetCapability (
    > +                           TCG2,
    > +                           &BootServiceCap);
    > +
    > +  AssertionType = EFI_TEST_ASSERTION_PASSED;
    > +
    > +  // If the input ProtocolCapability.Size < sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY) the function should return EFI_BUFFER_TOO_SMALL
    > +  if (Status != EFI_BUFFER_TOO_SMALL) {
    > +     StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: Did not return Status == EFI_BUFFER_TOO_SMALL with input ProtocolCapability.Size < sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY)"
    > +                     );
    > +
    > +     AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  StructureVersionMajor = BootServiceCap.StructureVersion.Major;
    > +  StructureVersionMinor = BootServiceCap.StructureVersion.Minor;
    > +
    > +  // If the input ProtocolCapability.Size < sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY) the function will initialize the fields included in ProtocolCapability.Size.
    > +  if ((StructureVersionMajor != 1) | (StructureVersionMinor != 1)) {
    > +     StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: Unexpected struct version numbers returned"
    > +                     );
    > +
    > +     AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  ProtocolVersionMajor = BootServiceCap.ProtocolVersion.Major;
    > +  ProtocolVersionMinor = BootServiceCap.ProtocolVersion.Minor;
    > +
    > +  if ((ProtocolVersionMajor != 1) | (ProtocolVersionMinor != 1)) {
    > +     StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: Unexpected protocol version numbers returned."
    > +                     );
    > +
    > +     AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  StandardLib->RecordAssertion (
    > +                 StandardLib,
    > +                 AssertionType,
    > +                 gTcg2ConformanceTestAssertionGuid002,
    > +                 L"TCG2_PROTOCOL.GetCapability() - GetCapability() shall populate the included structure elements and return with a Status of EFI_BUFFER_TOO_SMALL when structure size is set to less than the size of EFI_TCG_BOOT_SERVICE_CAPABILITY.",
    > +                 L"%a:%d: Status - %r",
    > +                 __FILE__,
    > +                 (UINTN)__LINE__,
    > +                 Status
    > +                 );

    In the SCT spec draft there is a test:

       f. Verify returned Size equal to size of the
       EFI_TCG2_BOOT_SERVICE_CAPABILITY up to and including the vendor ID
       field.

    ...but I don't see that test covered in the code.

    > +  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;
    > +  char StructureVersionMajor;
    > +  char StructureVersionMinor;
    > +  char ProtocolVersionMajor;
    > +  char ProtocolVersionMinor;
    > +  EFI_TCG2_BOOT_SERVICE_CAPABILITY      BootServiceCap;
    > +
    > +  BootServiceCap.Size = sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY);

    BootServiceCap.Size is not used in this test, so should be able to
    delete the above line.

    > +  Status = TCG2->GetCapability (
    > +                           TCG2,
    > +                           &BootServiceCap);
    > +
    > +  AssertionType = EFI_TEST_ASSERTION_PASSED;
    > +
    > +  if (Status != EFI_SUCCESS) {
    > +    StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: GetCapabilty should return EFI_SUCCESS"
    > +                     );
    > +
    > +    AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  StructureVersionMajor = BootServiceCap.StructureVersion.Major;
    > +  StructureVersionMinor = BootServiceCap.StructureVersion.Minor;
    > +
    > +  // TCG EFI Protocol spec 6.4.4 #4
    > +  if ((StructureVersionMajor != 1) | (StructureVersionMinor != 1)) {
    > +    StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: GetCapabilty should have StructureVersion 1.1"
    > +                     );
    > +
    > +    AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  ProtocolVersionMajor = BootServiceCap.ProtocolVersion.Major;
    > +  ProtocolVersionMinor = BootServiceCap.ProtocolVersion.Minor;
    > +
    > +  // TCG EFI Protocol spec 6.4.4 #4
    > +  if ((ProtocolVersionMajor != 1) | (ProtocolVersionMinor != 1)) {
    > +    StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: protocol version must be 1.1"
    > +                     );
    > +
    > +    AssertionType = 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 GetCapablity Test: GetCapabilty must support TCG2 event log format"
    > +                     );
    > +
    > +    AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  if (BootServiceCap.NumberOfPcrBanks < 1 ) {
    > +    StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: expect at least 1 PCR bank"
    > +                     );
    > +
    > +    AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  if (!(BootServiceCap.HashAlgorithmBitmap & EFI_TCG2_BOOT_HASH_ALG_SHA256)) {
    > +    StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: unexpected hash algorithms reported = %x",
    > +                     BootServiceCap.HashAlgorithmBitmap
    > +                     );
    > +
    > +    AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  if (!(~BootServiceCap.ActivePcrBanks & BootServiceCap.HashAlgorithmBitmap) == 0) {

    The above test doesn't look correct to me.  Need to sanity check that.

    > +    StandardLib->RecordMessage (
    >
    > +                     StandardLib,
    >
    > +                     EFI_VERBOSE_LEVEL_DEFAULT,
    >
    > +                     L"\r\nTCG2 Protocol GetCapablity Test: ActivePcrBanks is not a subset of HashAlgorithmBitmap"
    > +                     );
    > +
    > +    AssertionType = EFI_TEST_ASSERTION_FAILED;
    > +  }
    > +
    > +  if (!(BootServiceCap.ActivePcrBanks & EFI_TCG2_BOOT_HASH_ALG_SHA256)) {

    In the SCT spec the test says to verify that ActivePcrBanks includes
    SHA256, SHA384, or SHA512.  As written the test would fail if active pcr
    banks was SHA384.

    Thanks,
    Stuart

IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-02-07 17:59 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-09 20:58 [PATCH V2 0/6] Implementation of TCG2 Protocol test Joseph Hemann
2022-01-09 20:58 ` [PATCH 1/6] uefi-sct/SctPkg: TCG2 Protocol: add header with TCG2 protocol definitions Joseph Hemann
2022-01-09 20:58 ` [PATCH 2/6] uefi-sct/SctPkg: TCG2 Protocol: add GetCapability Test Joseph Hemann
2022-02-01 18:32   ` [edk2-devel] " Stuart Yoder
2022-02-07 17:59     ` Joseph Hemann
2022-01-09 20:58 ` [PATCH 3/6] uefi-sct/SctPkg: TCG2 Protocol: add GetActivePcrBanks test Joseph Hemann
2022-01-09 20:58 ` [PATCH 4/6] uefi-sct/SctPkg: TCG2 Protocol: add HashLogExtendEvent test Joseph Hemann
2022-01-09 20:58 ` [PATCH 5/6] uefi-sct/SctPkg: TCG2 Protocol: add GetEventLog test Joseph Hemann
2022-01-09 20:58 ` [PATCH 6/6] uefi-sct/SctPkg: TCG2 Protocol: add SubmitCommand test Joseph Hemann
  -- strict thread matches above, loose matches on Subject: below --
2021-10-20 13:43 [PATCH 0/6] Implementation of TCG2 Protocol test Joseph Hemann
2021-10-20 13:43 ` [PATCH 3/6] uefi-sct/SctPkg: TCG2 Protocol: add GetActivePcrBanks test Joseph Hemann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox