]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigImpl.c
Add suppressif around TCG hash seleciton checkbox in TCG2
[mirror_edk2.git] / SecurityPkg / Tcg / Tcg2Config / Tcg2ConfigImpl.c
index e1835b96136c50f306bdb54476d8929d8e92e660..0d2956074a40554a9125411ea4ab3b068c8d15c6 100644 (file)
@@ -307,33 +307,33 @@ AppendBufferWithTpmAlgHash (
   switch (TpmAlgHash) {\r
   case TPM_ALG_SHA1:\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"SHA1", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"SHA1");\r
     break;\r
   case TPM_ALG_SHA256:\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"SHA256", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"SHA256");\r
     break;\r
   case TPM_ALG_SHA384:\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"SHA384", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"SHA384");\r
     break;\r
   case TPM_ALG_SHA512:\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"SHA512", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"SHA512");\r
     break;\r
   case TPM_ALG_SM3_256:\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"SM3_256", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"SM3_256");\r
     break;\r
   }\r
 }\r
@@ -356,33 +356,65 @@ FillBufferWithBootHashAlg (
   Buffer[0] = 0;\r
   if ((BootHashAlg & EFI_TCG2_BOOT_HASH_ALG_SHA1) != 0) {\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"SHA1", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"SHA1");\r
   }\r
   if ((BootHashAlg & EFI_TCG2_BOOT_HASH_ALG_SHA256) != 0) {\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"SHA256", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"SHA256");\r
   }\r
   if ((BootHashAlg & EFI_TCG2_BOOT_HASH_ALG_SHA384) != 0) {\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"SHA384", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"SHA384");\r
   }\r
   if ((BootHashAlg & EFI_TCG2_BOOT_HASH_ALG_SHA512) != 0) {\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"SHA512", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"SHA512");\r
   }\r
   if ((BootHashAlg & EFI_TCG2_BOOT_HASH_ALG_SM3_256) != 0) {\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"SM3_256", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"SM3_256");\r
+  }\r
+}\r
+\r
+/**\r
+  Set ConfigInfo according to TpmAlgHash.\r
+\r
+  @param[in,out] Tcg2ConfigInfo       TCG2 config info.\r
+  @param[in]     TpmAlgHash           TpmAlgHash.\r
+\r
+**/\r
+VOID\r
+SetConfigInfo (\r
+  IN OUT TCG2_CONFIGURATION_INFO         *Tcg2ConfigInfo,\r
+  IN UINT32                              TpmAlgHash\r
+  )\r
+{\r
+  switch (TpmAlgHash) {\r
+  case TPM_ALG_SHA1:\r
+    Tcg2ConfigInfo->Sha1Supported = TRUE;\r
+    break;\r
+  case TPM_ALG_SHA256:\r
+    Tcg2ConfigInfo->Sha256Supported = TRUE;\r
+    break;\r
+  case TPM_ALG_SHA384:\r
+    Tcg2ConfigInfo->Sha384Supported = TRUE;\r
+    break;\r
+  case TPM_ALG_SHA512:\r
+    Tcg2ConfigInfo->Sha512Supported = TRUE;\r
+    break;\r
+  case TPM_ALG_SM3_256:\r
+    Tcg2ConfigInfo->Sm3Supported = TRUE;\r
+    break;\r
   }\r
 }\r
 \r
@@ -404,21 +436,21 @@ FillBufferWithTCG2EventLogFormat (
   Buffer[0] = 0;\r
   if ((TCG2EventLogFormat & EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2) != 0) {\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"TCG_1_2", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"TCG_1_2");\r
   }\r
   if ((TCG2EventLogFormat & EFI_TCG2_EVENT_LOG_FORMAT_TCG_2) != 0) {\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"TCG_2", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"TCG_2");\r
   }\r
   if ((TCG2EventLogFormat & (~EFI_TCG2_EVENT_LOG_FORMAT_ALL)) != 0) {\r
     if (Buffer[0] != 0) {\r
-      StrnCat (Buffer, L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+      StrCatS (Buffer, BufferSize / sizeof (CHAR16), L", ");\r
     }\r
-    StrnCat (Buffer, L"UNKNOWN", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1);\r
+    StrCatS (Buffer, BufferSize / sizeof (CHAR16), L"UNKNOWN");\r
   }\r
 }\r
 \r
@@ -471,6 +503,7 @@ InstallTcg2ConfigForm (
   UINTN                           Index;\r
   TPML_PCR_SELECTION              Pcrs;\r
   CHAR16                          TempBuffer[1024];\r
+  TCG2_CONFIGURATION_INFO         Tcg2ConfigInfo;\r
 \r
   DriverHandle = NULL;\r
   ConfigAccess = &PrivateData->ConfigAccess;\r
@@ -531,6 +564,7 @@ InstallTcg2ConfigForm (
     break;\r
   }\r
 \r
+  ZeroMem (&Tcg2ConfigInfo, sizeof(Tcg2ConfigInfo));\r
   Status = Tpm2GetCapabilityPcrs (&Pcrs);\r
   if (EFI_ERROR (Status)) {\r
     HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TPM2_ACTIVE_HASH_ALGO_CONTENT), L"[Unknown]", NULL);\r
@@ -547,6 +581,7 @@ InstallTcg2ConfigForm (
     TempBuffer[0] = 0;\r
     for (Index = 0; Index < Pcrs.count; Index++) {\r
       AppendBufferWithTpmAlgHash (TempBuffer, sizeof(TempBuffer), Pcrs.pcrSelections[Index].hash);\r
+      SetConfigInfo (&Tcg2ConfigInfo, Pcrs.pcrSelections[Index].hash);\r
     }\r
     HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TPM2_SUPPORTED_HASH_ALGO_CONTENT), TempBuffer, NULL);\r
   }\r
@@ -569,6 +604,19 @@ InstallTcg2ConfigForm (
   FillBufferWithBootHashAlg (TempBuffer, sizeof(TempBuffer), PrivateData->ProtocolCapability.ActivePcrBanks);\r
   HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TCG2_ACTIVE_PCR_BANKS_CONTENT), TempBuffer, NULL);\r
 \r
+  //\r
+  // Set ConfigInfo, to control the check box.\r
+  //\r
+  Status = gRT->SetVariable (\r
+                  TCG2_STORAGE_INFO_NAME,\r
+                  &gTcg2ConfigFormSetGuid,\r
+                  EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+                  sizeof(Tcg2ConfigInfo),\r
+                  &Tcg2ConfigInfo\r
+                  );\r
+  if (EFI_ERROR (Status)) {\r
+    DEBUG ((EFI_D_ERROR, "Tcg2ConfigDriver: Fail to set TCG2_STORAGE_INFO_NAME\n"));\r
+  }\r
   return EFI_SUCCESS;  \r
 }\r
 \r