public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH v3 0/3] Add Unit Tests for BaseCryptLib to CryptoPkg
@ 2020-07-14 18:23 matthewfcarlson
  2020-07-14 18:23 ` [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib matthewfcarlson
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: matthewfcarlson @ 2020-07-14 18:23 UTC (permalink / raw)
  To: devel

From: Matthew Carlson <macarl@microsoft.com>

This turns on Host Based Unit Tests for CryptoPkg, adds the unit test itself, and 
adds a POSIX BaseTimerLib for unit tests.

Matthew Carlson (3):
  UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib
  CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)
  AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg

 CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c                                |   93 ++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/AuthenticodeTests.c                               | 1002 ++++++++++++++++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c                           |   66 ++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipherTests.c                                |  293 ++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c                                         |  106 +++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c                                       |  197 ++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c                                       |  184 ++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncryptTests.c                                |  308 ++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2Tests.c                                |   71 ++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTests.c                                   |  524 ++++++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c                                       |   51 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tests.c                                   |  415 ++++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c                                        |  310 ++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c                                         |  335 +++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMain.c                                    |   81 ++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMainBCOP.c                                |   58 ++
 UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c                           |  132 +++
 .azurepipelines/templates/pr-gate-build-job.yml                                                |    2 +-
 CryptoPkg/CryptoPkg.ci.yaml                                                                    |    4 +
 CryptoPkg/CryptoPkg.dsc                                                                        |   26 +
 CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf                                    |   90 ++
 CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc                                              |   35 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatures.h                          |  789 +++++++++++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h                                |  121 +++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf                          |   46 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf                     |   49 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInstructions.txt        |   92 ++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.cmd                  |   11 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWithEKUs.cmd             |   76 ++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIssuingCA.ini          |   45 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSigner.ini         |   25 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid1.ini     |   24 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini |   27 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNoEKUsInSigner.ini     |   16 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPolicyCA.ini           |   28 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRoot.ini               |   28 +
 UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf                     |   33 +
 UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni                     |   14 +
 UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc                                     |    1 +
 UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc                                          |    1 +
 40 files changed, 5808 insertions(+), 1 deletion(-)
 create mode 100644 CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/AuthenticodeTests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipherTests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncryptTests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2Tests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMain.c
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMainBCOP.c
 create mode 100644 UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c
 create mode 100644 CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf
 create mode 100644 CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatures.h
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInstructions.txt
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.cmd
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWithEKUs.cmd
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIssuingCA.ini
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSigner.ini
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid1.ini
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNoEKUsInSigner.ini
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPolicyCA.ini
 create mode 100644 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRoot.ini
 create mode 100644 UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf
 create mode 100644 UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni

-- 
2.27.0.windows.1


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

* [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib
  2020-07-14 18:23 [PATCH v3 0/3] Add Unit Tests for BaseCryptLib to CryptoPkg matthewfcarlson
@ 2020-07-14 18:23 ` matthewfcarlson
  2020-07-15  2:38   ` Michael D Kinney
  2020-07-14 18:23 ` [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) matthewfcarlson
  2020-07-14 18:23 ` [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg matthewfcarlson
  2 siblings, 1 reply; 10+ messages in thread
From: matthewfcarlson @ 2020-07-14 18:23 UTC (permalink / raw)
  To: devel; +Cc: Michael D Kinney, Sean Brogan, Bret Barkelew

From: Matthew Carlson <macarl@microsoft.com>

This adds a host based BaseTimerLib that won't assert.

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Sean Brogan <sean.brogan@microsoft.com>
Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
Signed-off-by: Matthew Carlson <matthewfcarlson@gmail.com>
---
 UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c       | 132 ++++++++++++++++++++
 UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf |  33 +++++
 UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni |  14 +++
 UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc                 |   1 +
 UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc                      |   1 +
 5 files changed, 181 insertions(+)

diff --git a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c
new file mode 100644
index 000000000000..3c1394e3b21b
--- /dev/null
+++ b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/TimerLibPosix.c
@@ -0,0 +1,132 @@
+/** @file
+  A semi-functional instance of the Timer Library.
+
+  Copyright (c) Microsoft Corporation.
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Base.h>
+#include <Library/TimerLib.h>
+#include <Library/DebugLib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+/**
+  Stalls the CPU for at least the given number of microseconds.
+
+  @param  MicroSeconds  The minimum number of microseconds to delay.
+  @return The value of MicroSeconds inputted.
+
+**/
+UINTN
+EFIAPI
+MicroSecondDelay (
+  IN      UINTN                     MicroSeconds
+  )
+{
+  // Since this is a host based test, we don't actually want to stall
+  return MicroSeconds;
+}
+
+/**
+  Stalls the CPU for at least the given number of nanoseconds.
+
+  @param  NanoSeconds The minimum number of nanoseconds to delay.
+  @return The value of NanoSeconds inputted.
+
+**/
+UINTN
+EFIAPI
+NanoSecondDelay (
+  IN      UINTN                     NanoSeconds
+  )
+{
+  // Since this is a host based test, we don't actually want to stall
+  return NanoSeconds;
+}
+
+/**
+  Retrieves the current value of a 64-bit free running performance counter.
+
+  The counter can either count up by 1 or count down by 1. If the physical
+  performance counter counts by a larger increment, then the counter values
+  must be translated. The properties of the counter can be retrieved from
+  GetPerformanceCounterProperties().
+
+  @return The current value of the free running performance counter.
+
+**/
+UINT64
+EFIAPI
+GetPerformanceCounter (
+  VOID
+  )
+{
+  struct timespec ts;
+  timespec_get(&ts, TIME_UTC);
+  // Return the current number of nanoseconds on the clock
+  return ts.tv_nsec;
+}
+
+/**
+  Retrieves the 64-bit frequency in Hz and the range of performance counter
+  values.
+
+  If StartValue is not NULL, then the value that the performance counter starts
+  with immediately after is it rolls over is returned in StartValue. If
+  EndValue is not NULL, then the value that the performance counter end with
+  immediately before it rolls over is returned in EndValue. The 64-bit
+  frequency of the performance counter in Hz is always returned. If StartValue
+  is less than EndValue, then the performance counter counts up. If StartValue
+  is greater than EndValue, then the performance counter counts down. For
+  example, a 64-bit free running counter that counts up would have a StartValue
+  of 0 and an EndValue of 0xFFFFFFFFFFFFFFFF. A 24-bit free running counter
+  that counts down would have a StartValue of 0xFFFFFF and an EndValue of 0.
+
+  @param  StartValue  The value the performance counter starts with when it
+                      rolls over.
+  @param  EndValue    The value that the performance counter ends with before
+                      it rolls over.
+
+  @return The frequency in Hz.
+
+**/
+UINT64
+EFIAPI
+GetPerformanceCounterProperties (
+  OUT      UINT64                    *StartValue,  OPTIONAL
+  OUT      UINT64                    *EndValue     OPTIONAL
+  )
+{
+  if ( EndValue != NULL ) {
+    *EndValue = MAX_UINT64;
+  }
+  if ( StartValue != NULL ) {
+    *StartValue = 0;
+  }
+  // Return the number of nanoseconds in a second
+  return 1000000000;
+}
+
+/**
+  Converts elapsed ticks of performance counter to time in nanoseconds.
+
+  This function converts the elapsed ticks of running performance counter to
+  time value in unit of nanoseconds.
+
+  @param  Ticks     The number of elapsed ticks of running performance counter.
+
+  @return The elapsed time in nanoseconds.
+
+**/
+UINT64
+EFIAPI
+GetTimeInNanoSecond (
+  IN      UINT64                     Ticks
+  )
+{
+  return Ticks;
+}
diff --git a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf
new file mode 100644
index 000000000000..797f04bb125b
--- /dev/null
+++ b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf
@@ -0,0 +1,33 @@
+## @file
+#  An instance of Timer Library for posix compliant hosts.
+#
+#  A semi-functional instance of the Timer Library that can be used for
+#  host based testing as a functional timer library instance.
+#
+#  Copyright (c) Microsoft Corporation.
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = BaseTimerLibPosix
+  MODULE_UNI_FILE                = BaseTimerLibPosix.uni
+  FILE_GUID                      = a2a413b8-43c3-40cc-a298-be7a214d3564
+  MODULE_TYPE                    = BASE
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = TimerLib|HOST_APPLICATION
+#
+#  VALID_ARCHITECTURES           = HOST
+#
+
+[Sources]
+  TimerLibPosix.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  DebugLib
diff --git a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni
new file mode 100644
index 000000000000..a6859a0fc88a
--- /dev/null
+++ b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.uni
@@ -0,0 +1,14 @@
+// @file
+// An instance of Timer Library for posix compliant hosts.
+//
+// A semi-functional instance of the Timer Library that can be used
+// for host based unit tests on posix compliant machines.
+//
+// Copyright (c) Microsoft Corporation.
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+
+#string STR_MODULE_ABSTRACT             #language en-US "Host instance of Timer Library"
+
+#string STR_MODULE_DESCRIPTION          #language en-US "An instance of the Timer Library that can be used for host based unit tests."
diff --git a/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc b/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc
index 701e7299d767..f82b3b7a323e 100644
--- a/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc
+++ b/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.dsc
@@ -30,4 +30,5 @@
   UnitTestFrameworkPkg/Library/CmockaLib/CmockaLib.inf
   UnitTestFrameworkPkg/Library/Posix/DebugLibPosix/DebugLibPosix.inf
   UnitTestFrameworkPkg/Library/Posix/MemoryAllocationLibPosix/MemoryAllocationLibPosix.inf
+  UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf
   UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLibCmocka.inf
diff --git a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc
index e954968efc52..76f0a719ded3 100644
--- a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc
+++ b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc
@@ -13,6 +13,7 @@
   UnitTestLib|UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLibCmocka.inf
   DebugLib|UnitTestFrameworkPkg/Library/Posix/DebugLibPosix/DebugLibPosix.inf
   MemoryAllocationLib|UnitTestFrameworkPkg/Library/Posix/MemoryAllocationLibPosix/MemoryAllocationLibPosix.inf
+  TimerLib|UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/BaseTimerLibPosix.inf
 
 [BuildOptions]
   GCC:*_*_*_CC_FLAGS = -fno-pie
-- 
2.27.0.windows.1


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

* [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)
  2020-07-14 18:23 [PATCH v3 0/3] Add Unit Tests for BaseCryptLib to CryptoPkg matthewfcarlson
  2020-07-14 18:23 ` [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib matthewfcarlson
@ 2020-07-14 18:23 ` matthewfcarlson
  2020-07-15  2:52   ` [edk2-devel] " Michael D Kinney
  2020-07-14 18:23 ` [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg matthewfcarlson
  2 siblings, 1 reply; 10+ messages in thread
From: matthewfcarlson @ 2020-07-14 18:23 UTC (permalink / raw)
  To: devel; +Cc: Jian J Wang, Xiaoyu Lu

From: Matthew Carlson <macarl@microsoft.com>

This adds a new INF for BaseCryptLib suitable for
host based environments. It adds a host based unit test for
BaseCryptLib that can also be built as a shell based Unit Test.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Xiaoyu Lu <xiaoyux.lu@intel.com>
Signed-off-by: Matthew Carlson <matthewfcarlson@gmail.com>
---
 CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c                                |   93 ++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/AuthenticodeTests.c                               | 1002 ++++++++++++++++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c                           |   66 ++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipherTests.c                                |  293 ++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c                                         |  106 +++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c                                       |  197 ++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c                                       |  184 ++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncryptTests.c                                |  308 ++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2Tests.c                                |   71 ++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTests.c                                   |  524 ++++++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c                                       |   51 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tests.c                                   |  415 ++++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c                                        |  310 ++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c                                         |  335 +++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMain.c                                    |   81 ++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMainBCOP.c                                |   58 ++
 CryptoPkg/CryptoPkg.ci.yaml                                                                    |    4 +
 CryptoPkg/CryptoPkg.dsc                                                                        |   26 +
 CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf                                    |   90 ++
 CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc                                              |   35 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatures.h                          |  789 +++++++++++++++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h                                |  121 +++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf                          |   46 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf                     |   49 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInstructions.txt        |   92 ++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.cmd                  |   11 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWithEKUs.cmd             |   76 ++
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIssuingCA.ini          |   45 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSigner.ini         |   25 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid1.ini     |   24 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini |   27 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNoEKUsInSigner.ini     |   16 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPolicyCA.ini           |   28 +
 CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRoot.ini               |   28 +
 34 files changed, 5626 insertions(+)

diff --git a/CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c b/CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c
new file mode 100644
index 000000000000..a9c288e8f2be
--- /dev/null
+++ b/CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c
@@ -0,0 +1,93 @@
+/** @file
+  C Run-Time Libraries (CRT) Wrapper Implementation for OpenSSL-based
+  Cryptographic Library.
+
+Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) Microsoft Corporation
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <stdio.h>
+
+#include <Base.h>
+#include <Library/DebugLib.h>
+
+/* Convert character to lowercase */
+int tolower (int c)
+{
+  if (('A' <= (c)) && ((c) <= 'Z')) {
+    return (c - ('A' - 'a'));
+  }
+  return (c);
+}
+
+/* Compare first n bytes of string s1 with string s2, ignoring case */
+int strncasecmp (const char *s1, const char *s2, size_t n)
+{
+  int Val;
+
+  ASSERT(s1 != NULL);
+  ASSERT(s2 != NULL);
+
+  if (n != 0) {
+    do {
+      Val = tolower(*s1) - tolower(*s2);
+      if (Val != 0) {
+        return Val;
+      }
+      ++s1;
+      ++s2;
+      if (*s1 == '\0') {
+        break;
+      }
+    } while (--n != 0);
+  }
+  return 0;
+}
+
+/* Read formatted data from a string */
+int sscanf (const char *buffer, const char *format, ...)
+{
+  //
+  // Null sscanf() function implementation to satisfy the linker, since
+  // no direct functionality logic dependency in present UEFI cases.
+  //
+  return 0;
+}
+
+//
+//  -- Dummy OpenSSL Support Routines --
+//
+
+int BIO_printf (void *bio, const char *format, ...)
+{
+  return 0;
+}
+
+int BIO_snprintf(char *buf, size_t n, const char *format, ...)
+{
+  return 0;
+}
+
+uid_t getuid (void)
+{
+  return 0;
+}
+
+uid_t geteuid (void)
+{
+  return 0;
+}
+
+gid_t getgid (void)
+{
+  return 0;
+}
+
+gid_t getegid (void)
+{
+  return 0;
+}
+
+int errno = 0;
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/AuthenticodeTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/AuthenticodeTests.c
new file mode 100644
index 000000000000..8935f289d87a
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/AuthenticodeTests.c
@@ -0,0 +1,1002 @@
+/** @file
+  Sample Implementation for Microsoft Authenticode Verification.
+
+Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "TestBaseCryptLib.h"
+
+//
+// Sample PE/COFF Image Hash Value (Digested by SHA-1).
+// This value should be calculated following MSFT's Authenticode Specification
+//
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 PeSha1Hash[] = {
+  0x44, 0xFD, 0x4F, 0xA9, 0x17, 0xEE, 0xAC, 0xCF, 0x1F, 0x0B, 0xE3, 0xA1, 0x4D, 0x5B, 0xA6, 0x61,
+  0x82, 0x97, 0xC4, 0xB6
+  };
+
+//
+// Sample PE/COFF Image Hash Value (Digested by SHA-256).
+//
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 PeSha256Hash[] = {
+  0x61, 0x82, 0xB7, 0xF8, 0x8C, 0xFF, 0xC2, 0xEB, 0x79, 0x6E, 0x9D, 0xA9, 0xDD, 0x39, 0x52, 0xDD,
+  0x36, 0xDD, 0xF1, 0x43, 0x27, 0x58, 0x8C, 0xA7, 0xCC, 0xAE, 0xDE, 0xDD, 0x3C, 0x02, 0x12, 0x49
+  };
+
+//
+// Sample Authenticode Data with SHA-1 hash algorithm.
+// This data should be retrieved from signed PE/COFF image according to SECURITY
+// directory in PE/COFF Header.
+//
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 AuthenticodeWithSha1[] = {
+  0x30, 0x82, 0x1C, 0x43, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x02, 0xA0,
+  0x82, 0x1C, 0x34, 0x30, 0x82, 0x1C, 0x30, 0x02, 0x01, 0x01, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x05,
+  0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x30, 0x68, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01,
+  0x82, 0x37, 0x02, 0x01, 0x04, 0xA0, 0x5A, 0x30, 0x58, 0x30, 0x33, 0x06, 0x0A, 0x2B, 0x06, 0x01,
+  0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0F, 0x30, 0x25, 0x03, 0x01, 0x00, 0xA0, 0x20, 0xA2, 0x1E,
+  0x80, 0x1C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x4F, 0x00, 0x62, 0x00, 0x73, 0x00, 0x6F,
+  0x00, 0x6C, 0x00, 0x65, 0x00, 0x74, 0x00, 0x65, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x30, 0x21,
+  0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14, 0x44, 0xFD, 0x4F,
+  0xA9, 0x17, 0xEE, 0xAC, 0xCF, 0x1F, 0x0B, 0xE3, 0xA1, 0x4D, 0x5B, 0xA6, 0x61, 0x82, 0x97, 0xC4,
+  0xB6, 0xA0, 0x82, 0x17, 0x18, 0x30, 0x82, 0x04, 0xCA, 0x30, 0x82, 0x03, 0xB2, 0xA0, 0x03, 0x02,
+  0x01, 0x02, 0x02, 0x0A, 0x61, 0x03, 0xDC, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30, 0x0D,
+  0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x77, 0x31,
+  0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11,
+  0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F,
+  0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D,
+  0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69,
+  0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74,
+  0x69, 0x6F, 0x6E, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x18, 0x4D, 0x69,
+  0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, 0x53, 0x74, 0x61,
+  0x6D, 0x70, 0x20, 0x50, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x38, 0x30, 0x37, 0x32, 0x35,
+  0x31, 0x39, 0x31, 0x32, 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x31, 0x31, 0x30, 0x37, 0x32, 0x35, 0x31,
+  0x39, 0x32, 0x32, 0x35, 0x30, 0x5A, 0x30, 0x81, 0xB3, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55,
+  0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13,
+  0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06,
+  0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30,
+  0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66,
+  0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x0D, 0x30,
+  0x0B, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x04, 0x4D, 0x4F, 0x50, 0x52, 0x31, 0x27, 0x30, 0x25,
+  0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x1E, 0x6E, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x44,
+  0x53, 0x45, 0x20, 0x45, 0x53, 0x4E, 0x3A, 0x31, 0x35, 0x39, 0x43, 0x2D, 0x41, 0x33, 0x46, 0x37,
+  0x2D, 0x32, 0x35, 0x37, 0x30, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1C,
+  0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, 0x53,
+  0x74, 0x61, 0x6D, 0x70, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x30, 0x82, 0x01, 0x22,
+  0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03,
+  0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC0, 0xED, 0x81,
+  0x14, 0xA1, 0x5E, 0x77, 0xC0, 0x5B, 0xF4, 0x76, 0x89, 0x62, 0xFA, 0xAD, 0x7C, 0x68, 0x14, 0xB4,
+  0xF7, 0xBD, 0x35, 0xD8, 0x13, 0x79, 0x5A, 0x17, 0xCA, 0xD9, 0x6C, 0x51, 0x45, 0x62, 0x26, 0x7A,
+  0x2F, 0x1F, 0xD8, 0xEA, 0xC1, 0x6E, 0x01, 0x17, 0xF9, 0xC3, 0xA6, 0x1F, 0x67, 0xDB, 0x51, 0xB0,
+  0x2C, 0xDE, 0x8A, 0x17, 0xED, 0xFF, 0x20, 0xAD, 0x34, 0xEA, 0x98, 0xFB, 0xA5, 0xD6, 0x2A, 0xD2,
+  0xF1, 0x44, 0x27, 0x07, 0x5A, 0x2D, 0x3A, 0x93, 0xFF, 0x56, 0x53, 0xB0, 0xC8, 0xF5, 0xF3, 0x03,
+  0xF2, 0x49, 0xCC, 0x16, 0xD0, 0xF5, 0x00, 0x4C, 0x58, 0xF8, 0x9B, 0xF5, 0x07, 0x25, 0xB1, 0x66,
+  0x17, 0xC0, 0xBD, 0xC8, 0xD2, 0x52, 0x85, 0x8D, 0xC2, 0x2B, 0x38, 0xB2, 0xC3, 0x36, 0xBE, 0xF9,
+  0x87, 0xDA, 0xF4, 0x8E, 0x5D, 0x43, 0xD7, 0x06, 0xBF, 0x99, 0x05, 0x9F, 0xA4, 0xCE, 0xFE, 0xAB,
+  0x8D, 0x61, 0x63, 0xE7, 0x39, 0xC5, 0xF3, 0x18, 0xF6, 0xD8, 0xFC, 0x31, 0x36, 0x69, 0x72, 0x5A,
+  0xA2, 0x1A, 0x4C, 0x3E, 0xEA, 0x87, 0x25, 0x42, 0x9D, 0xD1, 0x3E, 0xF1, 0x97, 0xD2, 0x18, 0x32,
+  0x93, 0x70, 0x55, 0x53, 0x81, 0x1E, 0xE3, 0x3B, 0x0D, 0xE8, 0xBE, 0x82, 0x78, 0x6D, 0xE6, 0xFA,
+  0xCD, 0x98, 0xA4, 0x6F, 0xDB, 0xEE, 0x66, 0xF4, 0x95, 0xC8, 0xCD, 0x35, 0xC9, 0x9E, 0xBB, 0x36,
+  0x0D, 0x83, 0x96, 0x94, 0x26, 0xA7, 0x90, 0xE0, 0xA9, 0x34, 0x3B, 0xD5, 0xC0, 0x9E, 0x3E, 0xF0,
+  0xD4, 0x47, 0x8D, 0x86, 0x0C, 0x82, 0xA4, 0x58, 0x30, 0x3A, 0x1C, 0x76, 0xE3, 0xAD, 0x95, 0x66,
+  0xB4, 0xB7, 0xFD, 0x09, 0x8A, 0x05, 0x60, 0x0F, 0xA3, 0x0F, 0xE2, 0x93, 0x96, 0x58, 0x22, 0x9C,
+  0x9D, 0x2B, 0xDB, 0xA2, 0x94, 0x18, 0x90, 0x95, 0x02, 0xBD, 0x06, 0x40, 0x95, 0x02, 0x03, 0x01,
+  0x00, 0x01, 0xA3, 0x82, 0x01, 0x19, 0x30, 0x82, 0x01, 0x15, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D,
+  0x0E, 0x04, 0x16, 0x04, 0x14, 0xD2, 0xED, 0x0D, 0x1E, 0x24, 0xBB, 0x37, 0xA9, 0xD8, 0x20, 0x6A,
+  0x4D, 0x1D, 0xD2, 0x16, 0xD5, 0x2E, 0xBE, 0x9E, 0xEB, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23,
+  0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x23, 0x34, 0xF8, 0xD9, 0x52, 0x46, 0x70, 0x0A, 0xED, 0x40,
+  0xFB, 0x76, 0xFB, 0xB3, 0x2B, 0xB0, 0xC3, 0x35, 0xB3, 0x0F, 0x30, 0x54, 0x06, 0x03, 0x55, 0x1D,
+  0x1F, 0x04, 0x4D, 0x30, 0x4B, 0x30, 0x49, 0xA0, 0x47, 0xA0, 0x45, 0x86, 0x43, 0x68, 0x74, 0x74,
+  0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66,
+  0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72,
+  0x6F, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74,
+  0x54, 0x69, 0x6D, 0x65, 0x53, 0x74, 0x61, 0x6D, 0x70, 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x6C,
+  0x30, 0x58, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x4C, 0x30, 0x4A,
+  0x30, 0x48, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x3C, 0x68, 0x74,
+  0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
+  0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x65, 0x72, 0x74, 0x73,
+  0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x74,
+  0x61, 0x6D, 0x70, 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x74, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1D,
+  0x25, 0x04, 0x0C, 0x30, 0x0A, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30,
+  0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x06, 0xC0, 0x30,
+  0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82,
+  0x01, 0x01, 0x00, 0x9C, 0x0A, 0x55, 0xC8, 0xCC, 0x44, 0x13, 0x34, 0x0C, 0xD8, 0x63, 0x27, 0x76,
+  0x7D, 0x3E, 0xFA, 0x38, 0x32, 0x83, 0x53, 0x9D, 0xF2, 0x08, 0xF9, 0x32, 0xF5, 0xC5, 0x6E, 0x70,
+  0xA1, 0xC9, 0xB1, 0x63, 0x6B, 0x19, 0x9D, 0x09, 0x67, 0xD9, 0x9D, 0xEB, 0x8A, 0x6A, 0xDB, 0x60,
+  0x66, 0xE9, 0xE9, 0x52, 0x26, 0xF3, 0x3B, 0xC6, 0x6A, 0xD3, 0xC2, 0x52, 0xBE, 0xA8, 0xB9, 0xEB,
+  0x6A, 0xAA, 0x78, 0x8C, 0xC9, 0x16, 0x7D, 0x90, 0x95, 0xA0, 0xCC, 0x21, 0xB3, 0x9E, 0x81, 0xBD,
+  0xCD, 0xC1, 0x8B, 0x29, 0xBD, 0x62, 0x25, 0xEF, 0x09, 0x57, 0xE7, 0x86, 0x4E, 0x2A, 0xEC, 0x80,
+  0xCA, 0xBB, 0xFC, 0x21, 0x16, 0xC4, 0x3F, 0x4E, 0x52, 0x19, 0xE6, 0x0E, 0xB1, 0xD8, 0xC1, 0xC2,
+  0x79, 0x90, 0x64, 0xB4, 0x50, 0x73, 0x10, 0x35, 0x5E, 0x5D, 0x11, 0xC1, 0xB8, 0xBA, 0xAA, 0xCF,
+  0x52, 0xF6, 0x80, 0x91, 0x00, 0xE6, 0xEF, 0x51, 0x43, 0x46, 0xE9, 0xD0, 0xE8, 0x94, 0xF6, 0x2C,
+  0x24, 0x0D, 0x8A, 0xC6, 0xB2, 0x31, 0x8A, 0xA3, 0x7E, 0x36, 0x6C, 0xA4, 0x05, 0x4C, 0x67, 0x07,
+  0x2A, 0xBB, 0xBB, 0x10, 0xA5, 0xA5, 0x30, 0x1A, 0x72, 0xD0, 0x06, 0x20, 0x3B, 0x24, 0x93, 0x5B,
+  0x15, 0xD9, 0x39, 0x93, 0xD3, 0x73, 0x2D, 0x1A, 0xC4, 0xD4, 0x6C, 0x1E, 0xA1, 0x08, 0xEC, 0xF6,
+  0x31, 0xB8, 0x6B, 0x4B, 0xEC, 0xEE, 0x5C, 0x33, 0x02, 0x14, 0x32, 0x8C, 0x7C, 0x11, 0x20, 0x2F,
+  0x20, 0x03, 0x7F, 0xF9, 0x0C, 0x9D, 0xB8, 0xD3, 0x9E, 0x5F, 0xD6, 0x08, 0xFC, 0x81, 0xA0, 0x99,
+  0xB8, 0xBB, 0x55, 0x6E, 0xCD, 0x42, 0x4B, 0x3A, 0x4D, 0x8C, 0x14, 0x2B, 0xCA, 0xC8, 0x12, 0xD3,
+  0x62, 0x6E, 0xEA, 0x0D, 0x0A, 0x9D, 0x09, 0xA3, 0x66, 0xD9, 0x79, 0x4F, 0x8E, 0x1A, 0xA2, 0xFF,
+  0xCC, 0x98, 0x04, 0x30, 0x82, 0x05, 0x96, 0x30, 0x82, 0x04, 0x7E, 0xA0, 0x03, 0x02, 0x01, 0x02,
+  0x02, 0x0A, 0x61, 0x01, 0xC6, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x30, 0x0D, 0x06, 0x09,
+  0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81, 0x81, 0x31, 0x0B,
+  0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06,
+  0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E,
+  0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F,
+  0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63,
+  0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69,
+  0x6F, 0x6E, 0x31, 0x2B, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x4D, 0x69, 0x63,
+  0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x20, 0x56,
+  0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x50, 0x43, 0x41, 0x30,
+  0x1E, 0x17, 0x0D, 0x30, 0x38, 0x31, 0x30, 0x32, 0x32, 0x32, 0x30, 0x33, 0x39, 0x32, 0x32, 0x5A,
+  0x17, 0x0D, 0x31, 0x30, 0x30, 0x31, 0x32, 0x32, 0x32, 0x30, 0x34, 0x39, 0x32, 0x32, 0x5A, 0x30,
+  0x7F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13,
+  0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67,
+  0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65,
+  0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15,
+  0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72,
+  0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x0D, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x04,
+  0x4D, 0x4F, 0x50, 0x52, 0x31, 0x1A, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x11, 0x4D,
+  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73,
+  0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01,
+  0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01,
+  0x00, 0xDC, 0x3A, 0xD3, 0x44, 0xF4, 0x6E, 0x20, 0x9F, 0xDD, 0xA4, 0x0E, 0x82, 0x4E, 0xC7, 0x86,
+  0x5E, 0x63, 0xCC, 0xCA, 0xE5, 0x42, 0x53, 0x4B, 0x85, 0xFA, 0x5D, 0x71, 0x6C, 0xCF, 0x76, 0x0C,
+  0x18, 0x8B, 0xA6, 0x0D, 0xF5, 0x4A, 0xF7, 0xFE, 0x17, 0xF2, 0x90, 0xCC, 0x62, 0xC7, 0x24, 0xAD,
+  0x9B, 0x9A, 0xE1, 0x45, 0x3B, 0x61, 0xD8, 0x0D, 0x05, 0x69, 0xC7, 0xCD, 0x88, 0x2A, 0xB8, 0xB9,
+  0x18, 0x1E, 0x60, 0x10, 0x5F, 0x88, 0xC6, 0xD2, 0x82, 0x4E, 0x6D, 0x49, 0xC5, 0xBE, 0x5C, 0x12,
+  0x86, 0x48, 0x85, 0x89, 0x91, 0x81, 0xCD, 0x1B, 0xAD, 0x1F, 0xB7, 0x2D, 0x67, 0x79, 0xF1, 0x7B,
+  0x9F, 0x25, 0x87, 0x14, 0x76, 0x5F, 0xE3, 0x0E, 0x64, 0xA1, 0x72, 0x61, 0x25, 0xE5, 0x75, 0x69,
+  0xC5, 0x14, 0xF1, 0x5F, 0x07, 0x56, 0xA4, 0x0D, 0x70, 0x06, 0x23, 0xA7, 0x6C, 0xDD, 0x82, 0xAE,
+  0xD9, 0x9B, 0x47, 0xA4, 0xA5, 0x6C, 0x08, 0xB0, 0x58, 0xF1, 0x53, 0x6A, 0x4F, 0xDA, 0x85, 0x61,
+  0xCB, 0x02, 0x7B, 0x49, 0xAF, 0x1F, 0xBB, 0xE0, 0xD7, 0xB9, 0x5E, 0xDB, 0x73, 0x89, 0x76, 0xC1,
+  0x3A, 0xBB, 0x0D, 0xF5, 0x97, 0xF0, 0x88, 0x5D, 0x69, 0x77, 0x80, 0xCF, 0xF1, 0x7E, 0x03, 0x9F,
+  0x73, 0x6D, 0xDE, 0x05, 0xB8, 0x2F, 0x77, 0xB5, 0x54, 0x55, 0x45, 0xD0, 0xD2, 0x38, 0xBD, 0x96,
+  0xE3, 0xF7, 0xEA, 0x40, 0xE5, 0xAC, 0x19, 0xFC, 0x71, 0xCB, 0x28, 0x27, 0xAA, 0x71, 0xA1, 0x72,
+  0xB5, 0x12, 0x27, 0xC1, 0x51, 0xF6, 0x36, 0xC5, 0xC0, 0xC7, 0x7B, 0x3A, 0x3A, 0x93, 0x37, 0x04,
+  0xCC, 0xEE, 0x0B, 0x69, 0x78, 0x64, 0x75, 0x41, 0xB6, 0x78, 0x22, 0x0F, 0x77, 0x84, 0xF7, 0x4B,
+  0x8D, 0x46, 0x65, 0x92, 0x5B, 0x4D, 0x56, 0x6B, 0x75, 0x04, 0x46, 0x3F, 0x0B, 0x1B, 0xB4, 0x19,
+  0xBF, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x02, 0x0F, 0x30, 0x82, 0x02, 0x0B, 0x30, 0x1F,
+  0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x18, 0x30, 0x16, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05,
+  0x07, 0x03, 0x03, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x0A, 0x03, 0x06, 0x30,
+  0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xA1, 0xE6, 0xC3, 0x65, 0xD0, 0xE6,
+  0xE8, 0x28, 0x62, 0xC2, 0xF3, 0xC2, 0x23, 0xA6, 0x1C, 0x49, 0x82, 0x0B, 0xD5, 0x53, 0x30, 0x0E,
+  0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x1F,
+  0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x90, 0x8B, 0x11,
+  0xA5, 0x70, 0xED, 0xE0, 0xF9, 0xA9, 0xC0, 0xAC, 0x08, 0xC7, 0xB5, 0xF4, 0x82, 0xB1, 0x3C, 0xC5,
+  0x4A, 0x30, 0x7B, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x74, 0x30, 0x72, 0x30, 0x70, 0xA0, 0x6E,
+  0xA0, 0x6C, 0x86, 0x34, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D,
+  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69,
+  0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x57, 0x69,
+  0x6E, 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x6C, 0x86, 0x34, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F,
+  0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63,
+  0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64, 0x75,
+  0x63, 0x74, 0x73, 0x2F, 0x57, 0x69, 0x6E, 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x52,
+  0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x46, 0x30, 0x44, 0x30, 0x42,
+  0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x36, 0x68, 0x74, 0x74, 0x70,
+  0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74,
+  0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x65, 0x72, 0x74, 0x73, 0x2F, 0x4D,
+  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x57, 0x69, 0x6E, 0x50, 0x43, 0x41, 0x2E, 0x63,
+  0x72, 0x74, 0x30, 0x81, 0xC6, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, 0x81, 0xBE, 0x30, 0x81, 0xBB,
+  0x30, 0x81, 0xB8, 0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x2F, 0x30, 0x81,
+  0xAA, 0x30, 0x40, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x34, 0x68,
+  0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F,
+  0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x73, 0x73, 0x6C,
+  0x2F, 0x63, 0x70, 0x73, 0x2F, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x50, 0x43, 0x41, 0x2E,
+  0x68, 0x74, 0x6D, 0x30, 0x66, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30,
+  0x5A, 0x1E, 0x58, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00,
+  0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0xA9, 0x00, 0x20, 0x00, 0x31, 0x00, 0x39, 0x00,
+  0x39, 0x00, 0x39, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x35, 0x00, 0x20, 0x00,
+  0x4D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x66, 0x00,
+  0x74, 0x00, 0x20, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00,
+  0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x2E, 0x30, 0x0D, 0x06, 0x09, 0x2A,
+  0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x73,
+  0x5F, 0xCA, 0x80, 0x1C, 0x60, 0x46, 0x6F, 0xB9, 0x34, 0x9D, 0x88, 0xE3, 0xBE, 0x22, 0x8C, 0xFA,
+  0xE6, 0x58, 0x9A, 0xAB, 0x7B, 0x1A, 0x97, 0xFD, 0xED, 0x2E, 0x39, 0xCC, 0x59, 0x5B, 0x1D, 0x7A,
+  0x06, 0x8A, 0xBB, 0x43, 0x93, 0x7B, 0x1E, 0xA1, 0x88, 0x53, 0xDF, 0x44, 0xF8, 0x53, 0xA9, 0xEA,
+  0xF6, 0x67, 0x1B, 0x3A, 0x78, 0x84, 0x11, 0x6A, 0x6F, 0x29, 0x47, 0x90, 0x0A, 0x0C, 0x7B, 0x22,
+  0x77, 0x4E, 0x6F, 0xB8, 0x64, 0x29, 0xDF, 0x06, 0xC7, 0xC8, 0x73, 0x84, 0xD6, 0x66, 0xA0, 0xCA,
+  0xD9, 0x5A, 0x26, 0x82, 0x57, 0xF9, 0xE3, 0x4F, 0x39, 0xAF, 0x2E, 0x8E, 0xB1, 0x06, 0x5B, 0x72,
+  0xF2, 0x37, 0x32, 0xAE, 0x4E, 0xCE, 0x3C, 0x7D, 0xB0, 0x12, 0x2B, 0x9E, 0xA5, 0x75, 0xE3, 0x43,
+  0xA6, 0x12, 0x8B, 0x06, 0x14, 0x98, 0x77, 0xE3, 0x58, 0x32, 0x25, 0x60, 0x07, 0x8C, 0x59, 0x71,
+  0xA7, 0x71, 0x41, 0xB3, 0x06, 0x8D, 0x5C, 0xEF, 0x9C, 0x7F, 0x5A, 0x22, 0x6D, 0xB7, 0xD3, 0xD9,
+  0xF5, 0xA6, 0x1B, 0x52, 0xDE, 0xF5, 0x7E, 0x76, 0x7C, 0xFE, 0xF4, 0xC8, 0x23, 0x1A, 0x4B, 0x25,
+  0xEB, 0xE4, 0xEE, 0xAF, 0x10, 0x0B, 0x55, 0xC3, 0xD8, 0xC1, 0x17, 0x85, 0x61, 0x6F, 0xD3, 0x3F,
+  0xB6, 0xE9, 0xEC, 0x84, 0xA5, 0xEE, 0x6D, 0xB2, 0xFF, 0xE8, 0x6C, 0x95, 0xAB, 0x2B, 0x5E, 0xC8,
+  0x85, 0xC3, 0x11, 0x60, 0xAC, 0xFA, 0x02, 0x05, 0xF1, 0x7B, 0xDA, 0xC3, 0x69, 0x49, 0x96, 0xA5,
+  0x70, 0xF9, 0x65, 0x66, 0x46, 0x10, 0x8D, 0x34, 0xE9, 0x21, 0x94, 0x3C, 0x0F, 0x71, 0x4A, 0x1C,
+  0xEA, 0x1F, 0xF7, 0x23, 0xA6, 0x87, 0x60, 0x34, 0xE9, 0x14, 0xE1, 0xDE, 0x03, 0x59, 0xB4, 0x02,
+  0x1D, 0x3A, 0xAF, 0xE3, 0x55, 0x05, 0xF5, 0xED, 0xC1, 0xF4, 0xE4, 0x5D, 0x0E, 0xD3, 0x97, 0x30,
+  0x82, 0x06, 0x07, 0x30, 0x82, 0x03, 0xEF, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0A, 0x61, 0x16,
+  0x68, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
+  0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x5F, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09,
+  0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19,
+  0x30, 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09,
+  0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55,
+  0x04, 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F,
+  0x6F, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41,
+  0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x37, 0x30, 0x34,
+  0x30, 0x33, 0x31, 0x32, 0x35, 0x33, 0x30, 0x39, 0x5A, 0x17, 0x0D, 0x32, 0x31, 0x30, 0x34, 0x30,
+  0x33, 0x31, 0x33, 0x30, 0x33, 0x30, 0x39, 0x5A, 0x30, 0x77, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03,
+  0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08,
+  0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E,
+  0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E,
+  0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
+  0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x21,
+  0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x18, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
+  0x66, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, 0x53, 0x74, 0x61, 0x6D, 0x70, 0x20, 0x50, 0x43,
+  0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
+  0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01,
+  0x01, 0x00, 0x9F, 0xA1, 0x6C, 0xB1, 0xDF, 0xDB, 0x48, 0x92, 0x2A, 0x7C, 0x6B, 0x2E, 0x19, 0xE1,
+  0xBD, 0xE2, 0xE3, 0xC5, 0x99, 0x51, 0x23, 0x50, 0xAD, 0xCE, 0xDD, 0x18, 0x4E, 0x24, 0x0F, 0xEE,
+  0xD1, 0xA7, 0xD1, 0x4C, 0xAD, 0x74, 0x30, 0x20, 0x11, 0xEB, 0x07, 0xD5, 0x54, 0x95, 0x15, 0x49,
+  0x94, 0x1B, 0x42, 0x92, 0xAE, 0x98, 0x5C, 0x30, 0x26, 0xDA, 0x00, 0x6B, 0xE8, 0x7B, 0xBD, 0xEC,
+  0x89, 0x07, 0x0F, 0xF7, 0x0E, 0x04, 0x98, 0xF0, 0x89, 0xCC, 0x1F, 0xCB, 0x33, 0x24, 0x87, 0x9D,
+  0xF2, 0xF4, 0x67, 0x1C, 0x2C, 0xFC, 0x7B, 0xE7, 0x88, 0x1D, 0xEA, 0xE7, 0x4E, 0xA3, 0xA1, 0xC1,
+  0x23, 0x53, 0xCA, 0x8D, 0xFA, 0x45, 0xCF, 0x09, 0xD0, 0x5E, 0xAF, 0xD0, 0xB0, 0x42, 0x04, 0xA2,
+  0xF9, 0xA6, 0x6C, 0x93, 0x67, 0xD7, 0x28, 0xDC, 0x46, 0x53, 0xB0, 0x86, 0xD0, 0xE5, 0x28, 0x46,
+  0x2E, 0x27, 0xAC, 0x86, 0x4F, 0x55, 0x52, 0x0C, 0xE4, 0x03, 0x2C, 0xFB, 0x6A, 0x90, 0x90, 0x30,
+  0x6E, 0x87, 0xF3, 0x59, 0x30, 0x9D, 0xFA, 0x7E, 0xD6, 0x97, 0xB3, 0xE8, 0x21, 0x97, 0x7E, 0xF8,
+  0xD2, 0x13, 0xF3, 0x08, 0xB7, 0x53, 0x6D, 0x52, 0xB4, 0x45, 0x90, 0x9F, 0x48, 0x00, 0x4A, 0x47,
+  0x66, 0x11, 0x27, 0x29, 0x66, 0xA8, 0x97, 0xE4, 0xD3, 0x06, 0x81, 0x4A, 0xA2, 0xF9, 0x84, 0xA7,
+  0x11, 0x47, 0x14, 0x09, 0x82, 0x9F, 0x84, 0xED, 0x55, 0x78, 0xFE, 0x01, 0x9A, 0x1D, 0x50, 0x08,
+  0x85, 0x00, 0x10, 0x30, 0x46, 0xED, 0xB7, 0xDE, 0x23, 0x46, 0xBB, 0xC4, 0x2D, 0x54, 0x9F, 0xAF,
+  0x1E, 0x78, 0x41, 0x31, 0x77, 0xCC, 0x9B, 0xDF, 0x3B, 0x83, 0x93, 0xA1, 0x61, 0x02, 0xB5, 0x1D,
+  0x0D, 0xB1, 0xFC, 0xF7, 0x9B, 0xB2, 0x01, 0xCE, 0x22, 0x4B, 0x54, 0xFF, 0xF9, 0x05, 0xC3, 0xC2,
+  0x20, 0x0B, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x01, 0xAB, 0x30, 0x82, 0x01, 0xA7, 0x30,
+  0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF,
+  0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x23, 0x34, 0xF8, 0xD9, 0x52,
+  0x46, 0x70, 0x0A, 0xED, 0x40, 0xFB, 0x76, 0xFB, 0xB3, 0x2B, 0xB0, 0xC3, 0x35, 0xB3, 0x0F, 0x30,
+  0x0B, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x10, 0x06, 0x09,
+  0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x81,
+  0x98, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x81, 0x90, 0x30, 0x81, 0x8D, 0x80, 0x14, 0x0E, 0xAC,
+  0x82, 0x60, 0x40, 0x56, 0x27, 0x97, 0xE5, 0x25, 0x13, 0xFC, 0x2A, 0xE1, 0x0A, 0x53, 0x95, 0x59,
+  0xE4, 0xA4, 0xA1, 0x63, 0xA4, 0x61, 0x30, 0x5F, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92,
+  0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30,
+  0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D,
+  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04,
+  0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F,
+  0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75,
+  0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x82, 0x10, 0x79, 0xAD, 0x16, 0xA1, 0x4A, 0xA0, 0xA5,
+  0xAD, 0x4C, 0x73, 0x58, 0xF4, 0x07, 0x13, 0x2E, 0x65, 0x30, 0x50, 0x06, 0x03, 0x55, 0x1D, 0x1F,
+  0x04, 0x49, 0x30, 0x47, 0x30, 0x45, 0xA0, 0x43, 0xA0, 0x41, 0x86, 0x3F, 0x68, 0x74, 0x74, 0x70,
+  0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74,
+  0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F,
+  0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x72,
+  0x6F, 0x6F, 0x74, 0x63, 0x65, 0x72, 0x74, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x54, 0x06, 0x08, 0x2B,
+  0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x48, 0x30, 0x46, 0x30, 0x44, 0x06, 0x08, 0x2B,
+  0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x38, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F,
+  0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F,
+  0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x65, 0x72, 0x74, 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72,
+  0x6F, 0x73, 0x6F, 0x66, 0x74, 0x52, 0x6F, 0x6F, 0x74, 0x43, 0x65, 0x72, 0x74, 0x2E, 0x63, 0x72,
+  0x74, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x0C, 0x30, 0x0A, 0x06, 0x08, 0x2B, 0x06,
+  0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
+  0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x10, 0x97, 0x8A, 0xC3, 0x5C, 0x03,
+  0x44, 0x36, 0xDD, 0xE9, 0xB4, 0xAD, 0x77, 0xDB, 0xCE, 0x79, 0x51, 0x4D, 0x01, 0xB1, 0x2E, 0x74,
+  0x71, 0x5B, 0x6D, 0x0C, 0x13, 0xAB, 0xCE, 0xBE, 0x7B, 0x8F, 0xB8, 0x2E, 0xD4, 0x12, 0xA2, 0x8C,
+  0x6D, 0x62, 0xB8, 0x57, 0x02, 0xCB, 0x4E, 0x20, 0x13, 0x50, 0x99, 0xDD, 0x7A, 0x40, 0xE2, 0x57,
+  0xBB, 0xAF, 0x58, 0x9A, 0x1C, 0xE1, 0x1D, 0x01, 0x86, 0xAC, 0xBB, 0x78, 0xF2, 0x8B, 0xD0, 0xEC,
+  0x3B, 0x01, 0xEE, 0xE2, 0xBE, 0x8F, 0x0A, 0x05, 0xC8, 0x8D, 0x48, 0xE2, 0xF0, 0x53, 0x15, 0xDD,
+  0x4F, 0xAB, 0x92, 0xE4, 0xE7, 0x8D, 0x6A, 0xD5, 0x80, 0xC1, 0xE6, 0x94, 0xF2, 0x06, 0x2F, 0x85,
+  0x03, 0xE9, 0x91, 0x2A, 0x24, 0x22, 0x70, 0xFB, 0xF6, 0xFC, 0xE4, 0x78, 0x99, 0x2E, 0x0D, 0xF7,
+  0x07, 0xE2, 0x70, 0xBC, 0x18, 0x4E, 0x9D, 0x8E, 0x6B, 0x0A, 0x72, 0x95, 0xB8, 0xA1, 0x39, 0x9C,
+  0x67, 0x2D, 0xC5, 0x51, 0x0E, 0xEA, 0x62, 0x5C, 0x3F, 0x16, 0x98, 0x8B, 0x20, 0x3F, 0xE2, 0x07,
+  0x1A, 0x32, 0xF9, 0xCC, 0x31, 0x4A, 0x76, 0x31, 0x3D, 0x2B, 0x72, 0x0B, 0xC8, 0xEA, 0x70, 0x3D,
+  0xFF, 0x85, 0x0A, 0x13, 0xDF, 0xC2, 0x0A, 0x61, 0x8E, 0xF0, 0xD7, 0xB8, 0x17, 0xEB, 0x4E, 0x8B,
+  0x7F, 0xC5, 0x35, 0x2B, 0x5E, 0xA3, 0xBF, 0xEB, 0xBC, 0x7D, 0x0B, 0x42, 0x7B, 0xD4, 0x53, 0x72,
+  0x21, 0xEE, 0x30, 0xCA, 0xBB, 0x78, 0x65, 0x5C, 0x5B, 0x01, 0x17, 0x0A, 0x14, 0x0E, 0xD2, 0xDA,
+  0x14, 0x98, 0xF5, 0x3C, 0xB9, 0x66, 0x58, 0xB3, 0x2D, 0x2F, 0xE7, 0xF9, 0x85, 0x86, 0xCC, 0x51,
+  0x56, 0xE8, 0x9D, 0x70, 0x94, 0x6C, 0xAC, 0x39, 0x4C, 0xD4, 0xF6, 0x79, 0xBF, 0xAA, 0x18, 0x7A,
+  0x62, 0x29, 0xEF, 0xA2, 0x9B, 0x29, 0x34, 0x06, 0x77, 0x1A, 0x62, 0xC9, 0x3D, 0x1E, 0x6D, 0x1F,
+  0x82, 0xF0, 0x0B, 0xC7, 0x2C, 0xBB, 0xCF, 0x43, 0xB3, 0xE5, 0xF9, 0xEC, 0x7D, 0xB5, 0xE3, 0xA4,
+  0xA8, 0x74, 0x35, 0xB8, 0x4E, 0xC5, 0x71, 0x23, 0x12, 0x26, 0x76, 0x0B, 0x3C, 0x52, 0x8C, 0x71,
+  0x5A, 0x46, 0x43, 0x14, 0xBC, 0xB3, 0xB3, 0xB0, 0x4D, 0x67, 0xC8, 0x9F, 0x42, 0xFF, 0x80, 0x79,
+  0x21, 0x80, 0x9E, 0x15, 0x30, 0x66, 0xE8, 0x42, 0x12, 0x5E, 0x1A, 0xC8, 0x9E, 0x22, 0x21, 0xD0,
+  0x43, 0xE9, 0x2B, 0xE9, 0xBB, 0xF4, 0x48, 0xCC, 0x2C, 0xD4, 0xD8, 0x32, 0x80, 0x4C, 0x26, 0x2A,
+  0x48, 0x24, 0x5F, 0x5A, 0xEA, 0x56, 0xEF, 0xA6, 0xDE, 0x99, 0x9D, 0xCA, 0x3A, 0x6F, 0xBD, 0x81,
+  0x27, 0x74, 0x06, 0x11, 0xEE, 0x76, 0x21, 0xBF, 0x9B, 0x82, 0xC1, 0x27, 0x54, 0xB6, 0xB1, 0x6A,
+  0x3D, 0x89, 0xA1, 0x76, 0x61, 0xB4, 0x6E, 0xA1, 0x13, 0xA6, 0xBF, 0xAA, 0x47, 0xF0, 0x12, 0x6F,
+  0xFD, 0x8A, 0x32, 0x6C, 0xB2, 0xFE, 0xDF, 0x51, 0xC8, 0x8C, 0x23, 0xC9, 0x66, 0xBD, 0x9D, 0x1D,
+  0x87, 0x12, 0x64, 0x02, 0x3D, 0x2D, 0xAF, 0x59, 0x8F, 0xB8, 0xE4, 0x21, 0xE5, 0xB5, 0xB0, 0xCA,
+  0x63, 0xB4, 0x78, 0x54, 0x05, 0xD4, 0x41, 0x2E, 0x50, 0xAC, 0x94, 0xB0, 0xA5, 0x78, 0xAB, 0xB3,
+  0xA0, 0x96, 0x75, 0x1A, 0xD9, 0x92, 0x87, 0x13, 0x75, 0x22, 0x2F, 0x32, 0xA8, 0x08, 0x6E, 0xA0,
+  0x5B, 0x8C, 0x25, 0xBF, 0xA0, 0xEF, 0x84, 0xCA, 0x21, 0xD6, 0xEB, 0x1E, 0x4F, 0xC9, 0x9A, 0xEE,
+  0x49, 0xE0, 0xF7, 0x01, 0x65, 0x6F, 0x89, 0x0B, 0x7D, 0xC8, 0x69, 0xC8, 0xE6, 0x6E, 0xEA, 0xA7,
+  0x97, 0xCE, 0x31, 0x29, 0xFF, 0x0E, 0xC5, 0x5B, 0x5C, 0xD8, 0x4D, 0x1B, 0xA1, 0xD8, 0xFA, 0x2F,
+  0x9E, 0x3F, 0x2E, 0x55, 0x16, 0x6B, 0xC9, 0x13, 0xA3, 0xFD, 0x30, 0x82, 0x06, 0xA1, 0x30, 0x82,
+  0x04, 0x89, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0A, 0x61, 0x07, 0x02, 0xDC, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x0B, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05,
+  0x05, 0x00, 0x30, 0x5F, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2,
+  0x2C, 0x64, 0x01, 0x19, 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, 0x17, 0x06, 0x0A, 0x09,
+  0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, 0x69, 0x63, 0x72, 0x6F,
+  0x73, 0x6F, 0x66, 0x74, 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x4D,
+  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, 0x65,
+  0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72,
+  0x69, 0x74, 0x79, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x35, 0x30, 0x39, 0x31, 0x35, 0x32, 0x31, 0x35,
+  0x35, 0x34, 0x31, 0x5A, 0x17, 0x0D, 0x31, 0x36, 0x30, 0x33, 0x31, 0x35, 0x32, 0x32, 0x30, 0x35,
+  0x34, 0x31, 0x5A, 0x30, 0x81, 0x81, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
+  0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61,
+  0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04,
+  0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03,
+  0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43,
+  0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x2B, 0x30, 0x29, 0x06, 0x03,
+  0x55, 0x04, 0x03, 0x13, 0x22, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x57,
+  0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x20, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
+  0x69, 0x6F, 0x6E, 0x20, 0x50, 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A,
+  0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30,
+  0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC5, 0xAC, 0x93, 0x4E, 0xE6, 0x4A, 0x11, 0x9E,
+  0x37, 0xD0, 0x35, 0xD2, 0xB0, 0x06, 0x5C, 0x83, 0x14, 0xA5, 0x61, 0x92, 0xFC, 0xFE, 0xB3, 0x89,
+  0xC1, 0xE6, 0xCD, 0xC8, 0x1F, 0x31, 0x84, 0x09, 0x91, 0x34, 0x46, 0x92, 0x2C, 0xB8, 0xEE, 0x2C,
+  0xC5, 0x20, 0x73, 0xC4, 0xE8, 0x1A, 0xD8, 0x8D, 0xCE, 0x7A, 0x68, 0xB5, 0x66, 0x78, 0x8B, 0xE5,
+  0x60, 0x15, 0xA2, 0xF6, 0x29, 0x5A, 0x1D, 0x5E, 0x5D, 0xFC, 0x62, 0xD3, 0xC1, 0x5C, 0x29, 0x89,
+  0xFB, 0x33, 0xF8, 0x16, 0x95, 0x36, 0xDD, 0xB1, 0x46, 0x74, 0x69, 0x72, 0x53, 0xD5, 0xAA, 0xE8,
+  0x8A, 0x99, 0x1A, 0xD8, 0xF7, 0x67, 0x09, 0xD9, 0x09, 0x20, 0x22, 0x38, 0x7A, 0xD6, 0x03, 0x23,
+  0xD7, 0x89, 0x9F, 0x1C, 0x01, 0xB7, 0x51, 0xDF, 0x98, 0x66, 0x2A, 0x02, 0x8B, 0x06, 0xEC, 0xE4,
+  0x29, 0xEF, 0x5B, 0x42, 0x17, 0x15, 0x97, 0x51, 0x8D, 0x7D, 0x25, 0x0A, 0xAF, 0x25, 0xE8, 0xDE,
+  0xDC, 0x9B, 0x67, 0x16, 0x0A, 0x56, 0x73, 0x9D, 0xB3, 0x1D, 0x85, 0x83, 0x0B, 0x7E, 0x33, 0x2B,
+  0x62, 0x33, 0xCE, 0x1C, 0x20, 0x81, 0x4B, 0x5E, 0xD3, 0xC6, 0x49, 0xB8, 0xF6, 0x2E, 0xD3, 0x4E,
+  0xB0, 0x71, 0x44, 0x46, 0x64, 0x3E, 0xDE, 0x43, 0x66, 0x04, 0xB9, 0xCC, 0x83, 0x48, 0x3A, 0xC5,
+  0x36, 0x7A, 0x04, 0x48, 0x0B, 0x89, 0x02, 0x3D, 0x63, 0xA2, 0x01, 0x76, 0x29, 0x97, 0x75, 0xE9,
+  0x01, 0xE6, 0x00, 0x97, 0x09, 0x92, 0xF8, 0xE2, 0x27, 0xF0, 0x29, 0x67, 0x43, 0x77, 0xC3, 0x50,
+  0x96, 0x53, 0x31, 0xE1, 0xB6, 0x71, 0x8B, 0xEC, 0x77, 0xC7, 0x7C, 0x31, 0x48, 0xD5, 0xB8, 0x25,
+  0x22, 0x8C, 0x00, 0xF7, 0x28, 0x38, 0x7A, 0xBD, 0x7C, 0xC7, 0x3F, 0xCD, 0x40, 0x26, 0x77, 0xDD,
+  0x00, 0x00, 0x11, 0x9A, 0x95, 0xBE, 0x1F, 0xDB, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x02,
+  0x3A, 0x30, 0x82, 0x02, 0x36, 0x30, 0x10, 0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
+  0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16,
+  0x04, 0x14, 0x90, 0x8B, 0x11, 0xA5, 0x70, 0xED, 0xE0, 0xF9, 0xA9, 0xC0, 0xAC, 0x08, 0xC7, 0xB5,
+  0xF4, 0x82, 0xB1, 0x3C, 0xC5, 0x4A, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03,
+  0x02, 0x01, 0xC6, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30,
+  0x03, 0x01, 0x01, 0xFF, 0x30, 0x81, 0x98, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x81, 0x90, 0x30,
+  0x81, 0x8D, 0x80, 0x14, 0x0E, 0xAC, 0x82, 0x60, 0x40, 0x56, 0x27, 0x97, 0xE5, 0x25, 0x13, 0xFC,
+  0x2A, 0xE1, 0x0A, 0x53, 0x95, 0x59, 0xE4, 0xA4, 0xA1, 0x63, 0xA4, 0x61, 0x30, 0x5F, 0x31, 0x13,
+  0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x03,
+  0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C,
+  0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x31, 0x2D,
+  0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
+  0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
+  0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x82, 0x10, 0x79,
+  0xAD, 0x16, 0xA1, 0x4A, 0xA0, 0xA5, 0xAD, 0x4C, 0x73, 0x58, 0xF4, 0x07, 0x13, 0x2E, 0x65, 0x30,
+  0x50, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x49, 0x30, 0x47, 0x30, 0x45, 0xA0, 0x43, 0xA0, 0x41,
+  0x86, 0x3F, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D, 0x69, 0x63,
+  0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63,
+  0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x6D, 0x69, 0x63, 0x72,
+  0x6F, 0x73, 0x6F, 0x66, 0x74, 0x72, 0x6F, 0x6F, 0x74, 0x63, 0x65, 0x72, 0x74, 0x2E, 0x63, 0x72,
+  0x6C, 0x30, 0x54, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x48, 0x30,
+  0x46, 0x30, 0x44, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x38, 0x68,
+  0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73,
+  0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x65, 0x72, 0x74,
+  0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x52, 0x6F, 0x6F, 0x74, 0x43,
+  0x65, 0x72, 0x74, 0x2E, 0x63, 0x72, 0x74, 0x30, 0x81, 0x80, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04,
+  0x79, 0x30, 0x77, 0x30, 0x75, 0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x2F,
+  0x30, 0x68, 0x30, 0x66, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 0x5A,
+  0x1E, 0x58, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67,
+  0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0xA9, 0x00, 0x20, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39,
+  0x00, 0x39, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x35, 0x00, 0x20, 0x00, 0x4D,
+  0x00, 0x69, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x74,
+  0x00, 0x20, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x61,
+  0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x2E, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D,
+  0x25, 0x04, 0x18, 0x30, 0x16, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x03, 0x06,
+  0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x0A, 0x03, 0x06, 0x30, 0x0D, 0x06, 0x09, 0x2A,
+  0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x25,
+  0x31, 0xA1, 0x58, 0xEA, 0x52, 0xE5, 0xE1, 0x17, 0x0C, 0xE6, 0xF1, 0x3F, 0x78, 0xA3, 0x3F, 0x72,
+  0xAF, 0xA7, 0x57, 0x10, 0x53, 0x89, 0x10, 0x5E, 0x32, 0x9C, 0xB6, 0x70, 0xC3, 0x15, 0x2B, 0x4D,
+  0x15, 0x30, 0x34, 0xE8, 0xC0, 0x6A, 0xE4, 0x1C, 0xD3, 0x2E, 0x20, 0x65, 0x48, 0xD7, 0x1B, 0x98,
+  0x62, 0x21, 0xBA, 0x45, 0x9F, 0x4A, 0xEC, 0xDB, 0x2F, 0x09, 0x19, 0x51, 0xE5, 0xED, 0x32, 0x19,
+  0x51, 0x2F, 0xE1, 0xDD, 0xFB, 0xC6, 0x52, 0xFD, 0xEB, 0xC6, 0x82, 0x25, 0x42, 0x03, 0x09, 0xA6,
+  0x38, 0xB6, 0x36, 0x1F, 0xCC, 0xC9, 0x80, 0xBB, 0x5A, 0x69, 0x18, 0x31, 0xC3, 0xB3, 0xA0, 0xB3,
+  0x67, 0x47, 0xBE, 0x9D, 0xC7, 0xE2, 0x3F, 0x96, 0xB3, 0x88, 0xF8, 0x19, 0xBE, 0x39, 0xB9, 0xE9,
+  0x95, 0xCE, 0xFC, 0x7C, 0xAF, 0xA8, 0xCD, 0xD0, 0x41, 0x90, 0xE0, 0xD5, 0xB3, 0x1C, 0x2F, 0x68,
+  0xBB, 0xDB, 0x0F, 0x6C, 0x6A, 0xDD, 0xF2, 0xAF, 0xDE, 0xF2, 0xB5, 0xDE, 0x0D, 0xB6, 0xA6, 0x5A,
+  0xF0, 0x86, 0x0A, 0xB9, 0x6D, 0x99, 0x4B, 0x3F, 0x7B, 0x2D, 0x01, 0x84, 0x6C, 0x8F, 0x87, 0xDC,
+  0x7F, 0x8F, 0xAB, 0x14, 0x88, 0xD0, 0x06, 0x91, 0x34, 0xBE, 0x1B, 0x82, 0x22, 0xA4, 0xBC, 0x55,
+  0x8A, 0xAD, 0x9B, 0xFC, 0x73, 0x14, 0x10, 0xC4, 0xC9, 0x19, 0x1E, 0x07, 0x7D, 0x9B, 0x0E, 0xC0,
+  0x95, 0x26, 0x5D, 0xC6, 0x1F, 0xAC, 0xB4, 0xF2, 0x7E, 0xBA, 0x25, 0x70, 0x4A, 0x7B, 0xD7, 0x8E,
+  0xD1, 0x9D, 0xA0, 0x13, 0x49, 0x7A, 0xB0, 0x02, 0x52, 0x52, 0x24, 0xF4, 0xAF, 0xDD, 0x40, 0x2D,
+  0xE5, 0x3E, 0x32, 0x58, 0xB3, 0x4A, 0x6A, 0xDD, 0x11, 0x59, 0xAA, 0x2D, 0xBC, 0xA4, 0xA0, 0x73,
+  0x38, 0xF9, 0x40, 0x77, 0x6B, 0x34, 0x19, 0x57, 0xCD, 0x38, 0x68, 0x27, 0x82, 0xF8, 0xD1, 0x6F,
+  0xEB, 0x23, 0xC0, 0x3F, 0x52, 0xF3, 0x4E, 0xD5, 0x02, 0x3E, 0x6A, 0x9A, 0x2B, 0xC1, 0xF5, 0x31,
+  0x71, 0xDB, 0x41, 0x4D, 0x3B, 0xDE, 0xEF, 0xAD, 0xAF, 0x1F, 0x88, 0x65, 0x43, 0x1B, 0x51, 0xB7,
+  0x9A, 0x75, 0xCA, 0x8E, 0x69, 0x49, 0x10, 0x8F, 0x78, 0x8A, 0x74, 0x45, 0xB9, 0x09, 0x8E, 0x73,
+  0x77, 0x07, 0x32, 0x4A, 0x4B, 0xD7, 0x68, 0x2B, 0x98, 0xC5, 0xBA, 0x54, 0xEA, 0x3F, 0xCB, 0xA2,
+  0x00, 0x8C, 0xBB, 0xD8, 0x10, 0x58, 0xF2, 0xDB, 0xDC, 0x9B, 0xCD, 0xD8, 0xEA, 0x48, 0x43, 0xE2,
+  0x4A, 0x7E, 0x65, 0xB2, 0xDC, 0xF5, 0x2D, 0x4E, 0x25, 0x67, 0xA8, 0xE0, 0xB5, 0xBA, 0xA7, 0xDD,
+  0x7E, 0x5E, 0xC1, 0x4C, 0x02, 0x74, 0xC9, 0xB3, 0x6E, 0xE3, 0xF8, 0xF0, 0x0B, 0xED, 0xFC, 0xB9,
+  0x29, 0xC5, 0x5B, 0xC9, 0x36, 0x51, 0x90, 0xDB, 0x78, 0x7D, 0xB9, 0x32, 0x0F, 0x5E, 0x76, 0xD2,
+  0x15, 0x5C, 0x3B, 0x37, 0x21, 0xC6, 0xDB, 0xC9, 0x19, 0x6E, 0xED, 0x74, 0x2A, 0x5C, 0x2C, 0x0B,
+  0x51, 0x49, 0x45, 0x53, 0xB0, 0xB2, 0xB3, 0x23, 0xD4, 0xA1, 0xB0, 0x5F, 0x0D, 0x19, 0xCD, 0x14,
+  0xA7, 0xE3, 0x3C, 0x9B, 0x97, 0x72, 0x94, 0x14, 0xDF, 0xFF, 0xC1, 0x90, 0x1B, 0xA5, 0xDF, 0xF5,
+  0xA9, 0xF3, 0x1B, 0x17, 0xDA, 0xB5, 0xFC, 0x44, 0xE0, 0xE8, 0xE2, 0x3C, 0xA2, 0x7A, 0xBB, 0xBB,
+  0x65, 0xE6, 0x4D, 0xB1, 0xB5, 0x15, 0xA1, 0xD9, 0x67, 0x3B, 0xB0, 0x0C, 0x7D, 0x3B, 0xE9, 0xEE,
+  0x51, 0x2A, 0x47, 0xF5, 0x15, 0x0F, 0x8C, 0xAD, 0x5D, 0x2E, 0x35, 0xDF, 0xF4, 0xA4, 0x2E, 0xF6,
+  0x13, 0x37, 0x5A, 0x2B, 0xE8, 0x55, 0x9A, 0x49, 0x2C, 0x97, 0xCE, 0x9D, 0x01, 0x9E, 0x97, 0x46,
+  0x5C, 0xD9, 0x2D, 0xBC, 0x24, 0x5A, 0x95, 0x59, 0x6F, 0x4D, 0xCA, 0x9D, 0xD6, 0x57, 0x26, 0x31,
+  0x82, 0x04, 0x96, 0x30, 0x82, 0x04, 0x92, 0x02, 0x01, 0x01, 0x30, 0x81, 0x90, 0x30, 0x81, 0x81,
+  0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30,
+  0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74,
+  0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64,
+  0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D,
+  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61,
+  0x74, 0x69, 0x6F, 0x6E, 0x31, 0x2B, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x4D,
+  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73,
+  0x20, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x50, 0x43,
+  0x41, 0x02, 0x0A, 0x61, 0x01, 0xC6, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x30, 0x09, 0x06,
+  0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0xA0, 0x81, 0xBA, 0x30, 0x19, 0x06, 0x09, 0x2A,
+  0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x03, 0x31, 0x0C, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04,
+  0x01, 0x82, 0x37, 0x02, 0x01, 0x04, 0x30, 0x1C, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82,
+  0x37, 0x02, 0x01, 0x0B, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82,
+  0x37, 0x02, 0x01, 0x15, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09,
+  0x04, 0x31, 0x16, 0x04, 0x14, 0xC5, 0xC5, 0xC1, 0xC3, 0x46, 0xC4, 0x12, 0xB9, 0x38, 0xED, 0xE5,
+  0x7E, 0x66, 0x78, 0x4E, 0x8F, 0x55, 0x10, 0x7D, 0xAC, 0x30, 0x5A, 0x06, 0x0A, 0x2B, 0x06, 0x01,
+  0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0C, 0x31, 0x4C, 0x30, 0x4A, 0xA0, 0x24, 0x80, 0x22, 0x00,
+  0x4D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x6F, 0x00, 0x66, 0x00,
+  0x74, 0x00, 0x20, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00,
+  0x73, 0xA1, 0x22, 0x80, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E,
+  0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x77, 0x69,
+  0x6E, 0x64, 0x6F, 0x77, 0x73, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
+  0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0xC0, 0x53, 0x19, 0xE7, 0x27, 0xE6, 0xD6, 0xD7,
+  0xA8, 0xAE, 0xA0, 0xE6, 0x4C, 0xEF, 0x9A, 0xBC, 0x1D, 0x19, 0xD4, 0xC5, 0x7F, 0x7C, 0x71, 0xFF,
+  0x14, 0x7C, 0xAD, 0x7A, 0x8F, 0x2D, 0x0F, 0x40, 0x38, 0x9B, 0x83, 0x09, 0xEE, 0xF5, 0x34, 0x92,
+  0xB4, 0x85, 0x34, 0x7C, 0xBA, 0x9B, 0x58, 0x5D, 0xA6, 0x15, 0xDE, 0x99, 0xBF, 0x25, 0x89, 0xDB,
+  0xC0, 0x3A, 0x98, 0x21, 0x1C, 0x25, 0x09, 0xBD, 0x41, 0xAA, 0x0F, 0x90, 0x6C, 0x62, 0xE9, 0xBD,
+  0x1D, 0xDD, 0x7C, 0xA4, 0x1F, 0x19, 0x3F, 0xC8, 0x11, 0xF5, 0x1C, 0x9E, 0xEA, 0x2E, 0x1A, 0xCE,
+  0x5A, 0x61, 0x8A, 0x77, 0xFA, 0x65, 0x1F, 0x03, 0xB4, 0x45, 0x02, 0x0F, 0xB4, 0x0E, 0xB9, 0x44,
+  0xF6, 0x75, 0xF6, 0x67, 0x91, 0xAD, 0xFA, 0xF9, 0xC3, 0xFA, 0x63, 0x91, 0x58, 0xFE, 0x40, 0xDF,
+  0x92, 0x6B, 0x59, 0x42, 0x44, 0x66, 0xD2, 0x88, 0x49, 0x59, 0x29, 0x1D, 0x6A, 0xF9, 0x93, 0x9B,
+  0xD5, 0x38, 0x84, 0x96, 0xD7, 0xAF, 0xBA, 0xEC, 0x29, 0x8D, 0x06, 0x8C, 0x8B, 0xF4, 0xA1, 0x56,
+  0x0F, 0x78, 0x3F, 0x35, 0xCB, 0x12, 0x8A, 0x85, 0xD5, 0x7C, 0xFC, 0x63, 0xDD, 0x72, 0xA1, 0x13,
+  0xD3, 0x25, 0x4A, 0x59, 0x21, 0xD0, 0xC6, 0x47, 0x9F, 0x22, 0xF7, 0xF8, 0x32, 0xA2, 0x05, 0x2B,
+  0x53, 0xC5, 0x96, 0x98, 0x0D, 0x39, 0x02, 0xAD, 0x85, 0xF7, 0x18, 0x73, 0x34, 0x12, 0x7F, 0x5A,
+  0xCB, 0xE1, 0xA2, 0xFB, 0x4E, 0x25, 0x81, 0xF0, 0x9F, 0x7A, 0x79, 0xDB, 0x4F, 0x4B, 0x66, 0x44,
+  0x30, 0x8E, 0x0D, 0x57, 0x23, 0xD3, 0x7F, 0x60, 0x87, 0xDE, 0xD0, 0x4C, 0x90, 0x90, 0x84, 0x64,
+  0x70, 0xE8, 0x15, 0x65, 0xCA, 0x18, 0xF8, 0x9A, 0xB6, 0x0C, 0x24, 0xF5, 0xDF, 0xC3, 0x47, 0xE2,
+  0x7C, 0xAD, 0x91, 0x70, 0x6D, 0xF8, 0x43, 0xE9, 0xA1, 0x82, 0x02, 0x1D, 0x30, 0x82, 0x02, 0x19,
+  0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x06, 0x31, 0x82, 0x02, 0x0A, 0x30,
+  0x82, 0x02, 0x06, 0x02, 0x01, 0x01, 0x30, 0x81, 0x85, 0x30, 0x77, 0x31, 0x0B, 0x30, 0x09, 0x06,
+  0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
+  0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30,
+  0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31,
+  0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73,
+  0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31,
+  0x21, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x18, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73,
+  0x6F, 0x66, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, 0x53, 0x74, 0x61, 0x6D, 0x70, 0x20, 0x50,
+  0x43, 0x41, 0x02, 0x0A, 0x61, 0x03, 0xDC, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30, 0x07,
+  0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0xA0, 0x5D, 0x30, 0x18, 0x06, 0x09, 0x2A, 0x86, 0x48,
+  0x86, 0xF7, 0x0D, 0x01, 0x09, 0x03, 0x31, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
+  0x01, 0x07, 0x01, 0x30, 0x1C, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x05,
+  0x31, 0x0F, 0x17, 0x0D, 0x30, 0x39, 0x30, 0x34, 0x32, 0x32, 0x30, 0x35, 0x35, 0x34, 0x33, 0x34,
+  0x5A, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x04, 0x31, 0x16,
+  0x04, 0x14, 0x74, 0xD7, 0x54, 0xA0, 0xC0, 0x9E, 0x62, 0xF0, 0xDD, 0x92, 0xDC, 0xD6, 0x96, 0x34,
+  0xA1, 0x0B, 0xF0, 0xD5, 0xB5, 0x3A, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
+  0x01, 0x01, 0x05, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0x8D, 0x16, 0xB5, 0xC8, 0x3D, 0xBC, 0x8A,
+  0xB5, 0xC3, 0x23, 0xF3, 0x33, 0xB0, 0xFA, 0x75, 0xAD, 0xAC, 0x53, 0x0D, 0x5C, 0xF4, 0xD9, 0xBE,
+  0x63, 0xEB, 0x0D, 0x6F, 0x69, 0x63, 0x91, 0xF8, 0x8E, 0x67, 0x03, 0xE1, 0xC6, 0x2E, 0xCD, 0x9C,
+  0xEB, 0xDD, 0x9C, 0xCA, 0x65, 0x4A, 0xBB, 0xF2, 0xF4, 0x1C, 0x85, 0x44, 0xD6, 0x58, 0x70, 0x2E,
+  0x3B, 0xFE, 0x97, 0xD0, 0xEC, 0x72, 0x77, 0x20, 0xA8, 0x20, 0xAC, 0xF0, 0xED, 0x86, 0xC4, 0xFF,
+  0x3A, 0x3D, 0x40, 0xD9, 0xF6, 0xD5, 0x99, 0xBE, 0xCC, 0xD2, 0xD8, 0xBA, 0x71, 0x51, 0x60, 0xAA,
+  0x72, 0x36, 0x13, 0x8B, 0x0A, 0xA9, 0xD6, 0xF5, 0x36, 0xE0, 0x44, 0x6B, 0xC1, 0x44, 0x42, 0x43,
+  0x56, 0x1A, 0xD6, 0xF1, 0x5A, 0x98, 0xCC, 0xBA, 0xA9, 0x4C, 0xCF, 0xC9, 0x86, 0xC3, 0x5B, 0x1C,
+  0xDF, 0x75, 0x22, 0x54, 0x6A, 0xF0, 0x18, 0x34, 0x0B, 0x29, 0xB0, 0x26, 0x07, 0x59, 0xB6, 0x52,
+  0x7B, 0x69, 0x74, 0x11, 0x1B, 0xB8, 0x29, 0x19, 0x36, 0x0E, 0xB7, 0x65, 0xCB, 0x87, 0x09, 0x9E,
+  0x03, 0x28, 0x6C, 0xDB, 0xA7, 0xFB, 0xDF, 0xC7, 0xF7, 0xCE, 0x0D, 0xC2, 0xBA, 0xEA, 0x3C, 0xE8,
+  0x43, 0x1E, 0x7F, 0xF2, 0x64, 0xDA, 0x87, 0x89, 0xC0, 0xCD, 0x67, 0xE4, 0x84, 0x9B, 0xA7, 0x77,
+  0xFA, 0x6C, 0x69, 0x19, 0x5B, 0xD1, 0xF7, 0xD9, 0x07, 0x91, 0x50, 0xDD, 0x98, 0x26, 0x10, 0xE3,
+  0x2E, 0x39, 0x62, 0xF0, 0x56, 0xE9, 0xD9, 0x5C, 0x85, 0x67, 0x9B, 0x2F, 0xDE, 0xD1, 0x00, 0x45,
+  0x0E, 0x99, 0x1F, 0xDF, 0x7E, 0xC9, 0x10, 0x56, 0xC7, 0x00, 0x6D, 0x5F, 0x23, 0x57, 0x12, 0x84,
+  0xCD, 0xAC, 0x82, 0xAE, 0x39, 0x52, 0xA5, 0x19, 0x23, 0xA3, 0x6B, 0xE7, 0x49, 0x8F, 0x86, 0x74,
+  0x46, 0x41, 0x2A, 0x0F, 0x3D, 0x29, 0xB7, 0xAE, 0x8C, 0x00
+  };
+
+//
+// Sample Authenticode Data with SHA-256 hash algorithm.
+// This data should be retrieved from signed PE/COFF image according to SECURITY
+// directory in PE/COFF Header.
+//
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 AuthenticodeWithSha256[] = {
+  0x30, 0x82, 0x0e, 0xd1, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0,
+  0x82, 0x0e, 0xc2, 0x30, 0x82, 0x0e, 0xbe, 0x02, 0x01, 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09,
+  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x5c, 0x06, 0x0a, 0x2b,
+  0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, 0xa0, 0x4e, 0x30, 0x4c, 0x30, 0x17, 0x06,
+  0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0f, 0x30, 0x09, 0x03, 0x01, 0x00,
+  0xa0, 0x04, 0xa2, 0x02, 0x80, 0x00, 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
+  0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20, 0x61, 0x82, 0xb7, 0xf8, 0x8c, 0xff, 0xc2,
+  0xeb, 0x79, 0x6e, 0x9d, 0xa9, 0xdd, 0x39, 0x52, 0xdd, 0x36, 0xdd, 0xf1, 0x43, 0x27, 0x58, 0x8c,
+  0xa7, 0xcc, 0xae, 0xde, 0xdd, 0x3c, 0x02, 0x12, 0x49, 0xa0, 0x82, 0x0c, 0x0a, 0x30, 0x82, 0x05,
+  0xe5, 0x30, 0x82, 0x03, 0xcd, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x61, 0x03, 0x5f, 0x09,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
+  0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x90, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
+  0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a,
+  0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03,
+  0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c,
+  0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
+  0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x3a, 0x30, 0x38,
+  0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x31, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
+  0x20, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65,
+  0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72,
+  0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, 0x30, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x36,
+  0x32, 0x31, 0x32, 0x32, 0x35, 0x35, 0x30, 0x31, 0x5a, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x36, 0x32,
+  0x31, 0x32, 0x33, 0x30, 0x35, 0x30, 0x31, 0x5a, 0x30, 0x81, 0x81, 0x31, 0x13, 0x30, 0x11, 0x06,
+  0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x03, 0x63, 0x6f, 0x6d,
+  0x31, 0x19, 0x30, 0x17, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19,
+  0x16, 0x09, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x31, 0x14, 0x30, 0x12, 0x06,
+  0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x04, 0x63, 0x6f, 0x72,
+  0x70, 0x31, 0x17, 0x30, 0x15, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01,
+  0x19, 0x16, 0x07, 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03,
+  0x55, 0x04, 0x03, 0x13, 0x17, 0x4d, 0x53, 0x49, 0x54, 0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x43,
+  0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x41, 0x20, 0x33, 0x30, 0x82, 0x01, 0x22,
+  0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03,
+  0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0x9b, 0x71, 0xdd,
+  0x0d, 0x32, 0x2d, 0x08, 0xe8, 0x2d, 0x01, 0x90, 0x9c, 0xdf, 0x9f, 0x32, 0x58, 0x8b, 0x47, 0xd0,
+  0xfe, 0x9a, 0x6b, 0x40, 0x5e, 0x76, 0xa2, 0x10, 0x00, 0x0e, 0xd2, 0x8f, 0xce, 0xa1, 0x5f, 0x42,
+  0xa7, 0x0b, 0x5e, 0x83, 0xc2, 0xe9, 0x06, 0xa6, 0x0a, 0xb4, 0x3d, 0x30, 0x50, 0xdb, 0x35, 0x43,
+  0x2c, 0xd3, 0xc3, 0xc6, 0x3c, 0xc9, 0xb5, 0x88, 0xfc, 0x0b, 0xe6, 0xa3, 0x71, 0x47, 0xce, 0xfd,
+  0x88, 0x62, 0xa4, 0x25, 0xe2, 0x4e, 0x1b, 0x79, 0x3d, 0xe3, 0xbf, 0x8b, 0x84, 0x2d, 0x64, 0x25,
+  0xa5, 0xfa, 0x8e, 0x30, 0xae, 0xe3, 0x34, 0x7d, 0x27, 0xf3, 0x5e, 0xf4, 0x05, 0x60, 0xc6, 0x0f,
+  0x1a, 0x1b, 0x9e, 0xaf, 0x21, 0x37, 0xa9, 0xd9, 0xb6, 0xb7, 0x6a, 0x54, 0x4b, 0x5e, 0xa0, 0x75,
+  0xb5, 0x9a, 0xc4, 0xb6, 0xbe, 0x28, 0xe3, 0x3b, 0xf7, 0x5a, 0x08, 0x77, 0xd9, 0x39, 0x4a, 0x2a,
+  0x7a, 0xf8, 0xf4, 0xfe, 0xe8, 0x12, 0x54, 0x41, 0x11, 0x55, 0xc8, 0xc7, 0x98, 0x3e, 0x64, 0xa5,
+  0xbb, 0xda, 0x6b, 0xa4, 0xaa, 0x29, 0x8c, 0x9f, 0x27, 0x55, 0x25, 0xe7, 0xfd, 0x31, 0x70, 0x60,
+  0x1d, 0xd3, 0xc4, 0xf2, 0xb9, 0xef, 0x92, 0x4a, 0x9f, 0xc8, 0x4c, 0x93, 0xe7, 0x19, 0xa8, 0x4e,
+  0xbc, 0xe3, 0x62, 0xf4, 0xe0, 0x6e, 0xec, 0x45, 0x6e, 0x61, 0x4e, 0xad, 0x58, 0xe0, 0xf0, 0xea,
+  0xf7, 0x74, 0x2c, 0xdf, 0x1b, 0xf6, 0x43, 0x3c, 0x84, 0xc2, 0x8c, 0x0b, 0xb4, 0xbd, 0x4a, 0x57,
+  0xa6, 0x0c, 0x4e, 0x9e, 0x73, 0x43, 0x5f, 0x2d, 0xaf, 0x22, 0xf4, 0xa6, 0xfd, 0x5a, 0x87, 0xb9,
+  0xbe, 0x6f, 0x9e, 0x1d, 0x99, 0xc8, 0xdf, 0x95, 0xc2, 0x02, 0xad, 0x7d, 0x4a, 0xf3, 0xba, 0x5d,
+  0xe8, 0x7b, 0x6e, 0x57, 0xe5, 0x3a, 0x02, 0xf8, 0xd3, 0x01, 0x15, 0xae, 0x4f, 0x02, 0x03, 0x01,
+  0x00, 0x01, 0xa3, 0x82, 0x01, 0x4c, 0x30, 0x82, 0x01, 0x48, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06,
+  0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x1d, 0x06, 0x03,
+  0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x4e, 0xfe, 0x61, 0x39, 0x6f, 0xca, 0xc5, 0x64, 0xe0,
+  0x20, 0xb6, 0xda, 0xc1, 0xb9, 0x52, 0x0e, 0xca, 0xdf, 0x8e, 0xfe, 0x30, 0x19, 0x06, 0x09, 0x2b,
+  0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75,
+  0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03,
+  0x02, 0x01, 0x86, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x08, 0x30,
+  0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x00, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18,
+  0x30, 0x16, 0x80, 0x14, 0xa3, 0x01, 0x04, 0x7e, 0x30, 0x88, 0x33, 0xeb, 0xb9, 0x31, 0x9c, 0xca,
+  0xeb, 0x85, 0x76, 0x67, 0xfc, 0x65, 0xb4, 0xd1, 0x30, 0x59, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04,
+  0x52, 0x30, 0x50, 0x30, 0x4e, 0xa0, 0x4c, 0xa0, 0x4a, 0x86, 0x48, 0x68, 0x74, 0x74, 0x70, 0x3a,
+  0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e,
+  0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+  0x75, 0x63, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x54, 0x65, 0x73, 0x52, 0x6f, 0x6f, 0x43, 0x65,
+  0x72, 0x41, 0x75, 0x74, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x30, 0x36, 0x2d, 0x31, 0x37, 0x2e,
+  0x63, 0x72, 0x6c, 0x30, 0x5d, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04,
+  0x51, 0x30, 0x4f, 0x30, 0x4d, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86,
+  0x41, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72,
+  0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x65,
+  0x72, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x54, 0x65, 0x73, 0x52, 0x6f, 0x6f, 0x43, 0x65, 0x72,
+  0x41, 0x75, 0x74, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x30, 0x36, 0x2d, 0x31, 0x37, 0x2e, 0x63,
+  0x72, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05,
+  0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x91, 0x2d, 0x11, 0x36, 0xd1, 0x2c, 0x5e, 0x21, 0x77, 0x62,
+  0x1a, 0xa1, 0xcf, 0x9a, 0x7e, 0x62, 0x2d, 0xc9, 0x90, 0xb9, 0x0e, 0x3d, 0x71, 0x0d, 0xa0, 0x4a,
+  0x48, 0xad, 0xe1, 0xd6, 0xb0, 0x73, 0x4a, 0x51, 0x4b, 0x4c, 0xb2, 0x6b, 0x88, 0x0a, 0x5a, 0xb7,
+  0xe9, 0x55, 0x67, 0x43, 0x8b, 0xf1, 0x9d, 0xcc, 0x52, 0x03, 0xaf, 0xac, 0x85, 0xe9, 0xd3, 0x75,
+  0xce, 0xe5, 0x6f, 0x8b, 0x3c, 0x80, 0x81, 0xab, 0xd1, 0xd1, 0x73, 0x0d, 0x6b, 0xb0, 0x51, 0xb8,
+  0xa2, 0x5e, 0x0c, 0x09, 0xe5, 0xa6, 0xbc, 0x54, 0x49, 0xe5, 0x54, 0x38, 0x5a, 0xb7, 0x43, 0xd2,
+  0x75, 0x34, 0x52, 0xdd, 0x35, 0x79, 0x95, 0x98, 0xd5, 0x3c, 0xc6, 0xda, 0x46, 0xb2, 0xd8, 0xa0,
+  0xa7, 0xcc, 0x30, 0x31, 0x0f, 0x4b, 0xeb, 0xb7, 0x02, 0xab, 0x2b, 0x38, 0xd2, 0xb7, 0x27, 0xc2,
+  0xc7, 0x0d, 0x62, 0xa4, 0xc0, 0x48, 0xf4, 0x1a, 0x48, 0x79, 0x7d, 0xe1, 0x31, 0xa4, 0x5d, 0x19,
+  0xd0, 0x18, 0x17, 0x00, 0xca, 0xe3, 0x5d, 0x0b, 0xc1, 0x85, 0x7f, 0xf1, 0xbe, 0xd3, 0xcb, 0x97,
+  0xf4, 0x1b, 0x62, 0x0f, 0xd7, 0x14, 0x38, 0x8d, 0xb2, 0x2e, 0x98, 0xd4, 0x41, 0x6a, 0xb0, 0xb5,
+  0x84, 0xee, 0xd8, 0x2c, 0x2d, 0x13, 0xfc, 0x50, 0x1d, 0x9a, 0x6f, 0x31, 0x87, 0x1c, 0xe0, 0xd0,
+  0xd0, 0xd3, 0x24, 0x52, 0xdf, 0x12, 0x8d, 0xfb, 0xf7, 0x7f, 0x33, 0x04, 0x17, 0x7a, 0x8b, 0xe3,
+  0xbd, 0x7c, 0x1e, 0xa2, 0x2a, 0x91, 0x76, 0xd9, 0xfc, 0x43, 0x17, 0xa7, 0x0a, 0xa1, 0xd9, 0xc6,
+  0x3c, 0x3a, 0x42, 0xed, 0xb7, 0x12, 0xcd, 0x9e, 0xdd, 0xfe, 0x91, 0x9d, 0x98, 0xb5, 0x35, 0xe8,
+  0x94, 0xdd, 0x9a, 0xce, 0xd4, 0xf4, 0xac, 0xca, 0xa6, 0xcd, 0x59, 0x3d, 0xde, 0x44, 0xbf, 0x0e,
+  0x82, 0xe5, 0xdf, 0x5c, 0xe3, 0x49, 0xcb, 0x01, 0xa0, 0x7f, 0x7b, 0xe2, 0x25, 0x21, 0xab, 0x95,
+  0x50, 0x1e, 0x9f, 0xea, 0x77, 0x56, 0x47, 0x74, 0x73, 0xf2, 0x25, 0x1b, 0x0e, 0x36, 0xb9, 0xa2,
+  0x57, 0xbf, 0x2c, 0x57, 0xbc, 0xe4, 0xfb, 0x88, 0xb1, 0x83, 0x56, 0xd8, 0x3c, 0xe0, 0x7c, 0xfd,
+  0x11, 0x9f, 0xde, 0xe1, 0xb7, 0xd4, 0xc6, 0x23, 0xaf, 0xae, 0xc7, 0x5e, 0x4f, 0xc5, 0x23, 0x74,
+  0x98, 0x38, 0x74, 0x9d, 0x0d, 0x0d, 0x6d, 0xf4, 0xde, 0x28, 0x44, 0x41, 0xd8, 0x22, 0x68, 0xe7,
+  0x57, 0xa7, 0x66, 0x74, 0xb5, 0xc3, 0x31, 0x24, 0xe2, 0x7c, 0xd5, 0x52, 0x5d, 0x8a, 0xd2, 0x4e,
+  0x14, 0xbb, 0x08, 0xd3, 0x1a, 0x31, 0x12, 0x04, 0x58, 0x9b, 0x3a, 0x99, 0x78, 0x93, 0x51, 0x3f,
+  0x0b, 0x85, 0xce, 0xde, 0x09, 0x58, 0xf9, 0x96, 0x1b, 0x91, 0x11, 0xa0, 0x68, 0x53, 0x33, 0xcb,
+  0xbe, 0x08, 0x89, 0xcc, 0x95, 0x55, 0xae, 0x06, 0x78, 0x27, 0x99, 0xa2, 0x56, 0xef, 0xae, 0x95,
+  0x0a, 0x7f, 0x0d, 0xeb, 0x43, 0x0c, 0xc6, 0x9e, 0x3f, 0x80, 0xbb, 0xc4, 0x74, 0x03, 0x9d, 0xb8,
+  0x1a, 0xaa, 0xbc, 0xcb, 0x1e, 0x03, 0xfb, 0xd8, 0x49, 0x89, 0x9d, 0x20, 0xaa, 0x25, 0x4b, 0x47,
+  0x67, 0xf4, 0xa7, 0x0d, 0x8d, 0x76, 0x30, 0xc6, 0x48, 0xce, 0xdd, 0x8d, 0xfa, 0xbe, 0xda, 0xb4,
+  0xeb, 0x3d, 0xd8, 0x0c, 0x3b, 0x15, 0x9a, 0xd1, 0x83, 0x85, 0xe5, 0xe3, 0x92, 0xaa, 0x3b, 0xad,
+  0x34, 0x0c, 0x39, 0xf1, 0x7f, 0x75, 0xae, 0xe8, 0x70, 0xb0, 0xfd, 0xf2, 0x8e, 0x29, 0xda, 0xdc,
+  0x09, 0x4f, 0x8a, 0x7b, 0x63, 0xbe, 0x1e, 0x8a, 0xc3, 0x58, 0xd1, 0x03, 0xbe, 0x37, 0xe9, 0xed,
+  0x32, 0x26, 0xa8, 0x0c, 0xfe, 0xed, 0x12, 0xa7, 0x63, 0x04, 0xb3, 0x92, 0x97, 0xd9, 0x46, 0xa3,
+  0x33, 0x33, 0x9c, 0x5b, 0xbc, 0x54, 0x30, 0x82, 0x06, 0x1d, 0x30, 0x82, 0x05, 0x05, 0xa0, 0x03,
+  0x02, 0x01, 0x02, 0x02, 0x0a, 0x4e, 0x30, 0xa5, 0xbb, 0x00, 0x00, 0x00, 0x12, 0x7b, 0xf2, 0x30,
+  0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81,
+  0x81, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01,
+  0x19, 0x16, 0x03, 0x63, 0x6f, 0x6d, 0x31, 0x19, 0x30, 0x17, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89,
+  0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66,
+  0x74, 0x31, 0x14, 0x30, 0x12, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01,
+  0x19, 0x16, 0x04, 0x63, 0x6f, 0x72, 0x70, 0x31, 0x17, 0x30, 0x15, 0x06, 0x0a, 0x09, 0x92, 0x26,
+  0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x07, 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64,
+  0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x17, 0x4d, 0x53, 0x49, 0x54, 0x20,
+  0x54, 0x65, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x41,
+  0x20, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x30, 0x34, 0x32, 0x31, 0x30, 0x33, 0x33, 0x33,
+  0x34, 0x39, 0x5a, 0x17, 0x0d, 0x31, 0x33, 0x30, 0x34, 0x32, 0x30, 0x30, 0x33, 0x33, 0x33, 0x34,
+  0x39, 0x5a, 0x30, 0x70, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55,
+  0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68,
+  0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13,
+  0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04,
+  0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72,
+  0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04,
+  0x03, 0x13, 0x11, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6e,
+  0x64, 0x6f, 0x77, 0x73, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
+  0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a,
+  0x02, 0x82, 0x01, 0x01, 0x00, 0xca, 0x9f, 0xcb, 0x8c, 0x5e, 0x61, 0x19, 0xb5, 0x37, 0x72, 0xd1,
+  0xe2, 0x88, 0x1f, 0x37, 0x56, 0xce, 0xa8, 0x88, 0x05, 0x3e, 0xe8, 0xa6, 0x8d, 0xfd, 0x0b, 0x30,
+  0x63, 0x54, 0x89, 0x1d, 0xda, 0x11, 0x70, 0x5a, 0x06, 0x00, 0x86, 0xd7, 0x7f, 0xe6, 0x21, 0x70,
+  0x41, 0x81, 0x26, 0x4b, 0x6e, 0xc7, 0x02, 0xe2, 0xbf, 0x61, 0x45, 0x04, 0x2f, 0x45, 0xbc, 0xd2,
+  0x0d, 0xf6, 0xac, 0xda, 0x91, 0x6d, 0xc6, 0x60, 0xad, 0xb3, 0x0b, 0x32, 0xe5, 0x13, 0x95, 0x96,
+  0x02, 0x4e, 0x10, 0xad, 0x2e, 0x6c, 0xb0, 0xc7, 0x65, 0x6d, 0xea, 0x89, 0x91, 0x67, 0x73, 0x5d,
+  0x05, 0x12, 0x9f, 0x95, 0x74, 0x6a, 0x6d, 0xb0, 0x6a, 0xd8, 0x94, 0x9b, 0xb0, 0x70, 0x79, 0xb0,
+  0x85, 0x42, 0xe7, 0xd7, 0x19, 0xc4, 0x33, 0xfd, 0xac, 0xbe, 0x2b, 0xd5, 0x7e, 0x5a, 0xa9, 0xc7,
+  0xa7, 0x68, 0x53, 0xed, 0xaa, 0x51, 0x2a, 0x6b, 0xac, 0x5a, 0xd7, 0x6e, 0xcf, 0x68, 0x60, 0x90,
+  0xc7, 0xda, 0xd1, 0xe7, 0xf2, 0x53, 0x4a, 0x01, 0xaf, 0xe8, 0xb1, 0x29, 0x91, 0xab, 0x4c, 0x58,
+  0x64, 0xe6, 0xb6, 0xcc, 0xdc, 0x0f, 0x43, 0xf2, 0x87, 0x15, 0xf8, 0x73, 0x06, 0xb8, 0x1f, 0xaa,
+  0xf2, 0x66, 0x49, 0x82, 0xca, 0xf0, 0xdd, 0x4c, 0x7c, 0xd5, 0xe7, 0x59, 0xb7, 0xc6, 0xd3, 0x81,
+  0x29, 0x5c, 0xce, 0xe4, 0xfd, 0xf7, 0xeb, 0x58, 0x6b, 0x50, 0x79, 0x72, 0x83, 0x4d, 0x59, 0xec,
+  0xd1, 0xd2, 0xfc, 0x3a, 0x10, 0xc5, 0x7a, 0xba, 0x90, 0xea, 0xfd, 0x54, 0xc7, 0xc8, 0x58, 0x2d,
+  0x84, 0xe5, 0x5b, 0x51, 0x98, 0x2c, 0x36, 0x7c, 0x42, 0x2b, 0xb1, 0x62, 0x4b, 0x0f, 0xf9, 0x72,
+  0xd3, 0x3f, 0x99, 0xc8, 0xb4, 0x02, 0x17, 0x39, 0xe5, 0x0b, 0xf2, 0x5d, 0x2d, 0x7f, 0x23, 0x41,
+  0xcd, 0x58, 0x3a, 0x25, 0x75, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x02, 0xa5, 0x30, 0x82,
+  0x02, 0xa1, 0x30, 0x3d, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x07, 0x04,
+  0x30, 0x30, 0x2e, 0x06, 0x26, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x08, 0x83, 0xcf,
+  0x89, 0x4d, 0xad, 0xf2, 0x02, 0x85, 0xa1, 0x9f, 0x0c, 0x82, 0xfa, 0xca, 0x7d, 0x81, 0xe1, 0xfb,
+  0x74, 0x81, 0x4f, 0x84, 0x9a, 0xf1, 0x69, 0x85, 0xa1, 0xad, 0x1d, 0x02, 0x01, 0x64, 0x02, 0x01,
+  0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x29,
+  0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x0a, 0x04, 0x1c, 0x30, 0x1a, 0x30,
+  0x0c, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x0a, 0x03, 0x06, 0x30, 0x0a, 0x06,
+  0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x03, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x25,
+  0x04, 0x18, 0x30, 0x16, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x0a, 0x03, 0x06,
+  0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x03, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d,
+  0x0e, 0x04, 0x16, 0x04, 0x14, 0xc9, 0x5a, 0xb3, 0x11, 0x02, 0x66, 0x71, 0x8c, 0x5b, 0x06, 0x80,
+  0x8a, 0x6d, 0x4f, 0x5b, 0xf2, 0xb5, 0x67, 0x45, 0xb5, 0x30, 0x30, 0x06, 0x03, 0x55, 0x1d, 0x11,
+  0x04, 0x29, 0x30, 0x27, 0xa0, 0x25, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14,
+  0x02, 0x03, 0xa0, 0x17, 0x0c, 0x15, 0x77, 0x69, 0x6e, 0x63, 0x62, 0x6c, 0x64, 0x40, 0x6d, 0x69,
+  0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x1f, 0x06, 0x03, 0x55,
+  0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x4e, 0xfe, 0x61, 0x39, 0x6f, 0xca, 0xc5, 0x64,
+  0xe0, 0x20, 0xb6, 0xda, 0xc1, 0xb9, 0x52, 0x0e, 0xca, 0xdf, 0x8e, 0xfe, 0x30, 0x81, 0xe8, 0x06,
+  0x03, 0x55, 0x1d, 0x1f, 0x04, 0x81, 0xe0, 0x30, 0x81, 0xdd, 0x30, 0x81, 0xda, 0xa0, 0x81, 0xd7,
+  0xa0, 0x81, 0xd4, 0x86, 0x36, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x6f, 0x72, 0x70,
+  0x70, 0x6b, 0x69, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x4d, 0x53, 0x49, 0x54, 0x25, 0x32, 0x30, 0x54,
+  0x65, 0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32,
+  0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e, 0x63, 0x72, 0x6c, 0x86, 0x4d, 0x68, 0x74, 0x74,
+  0x70, 0x3a, 0x2f, 0x2f, 0x6d, 0x73, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73,
+  0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x6d, 0x73, 0x63, 0x6f,
+  0x72, 0x70, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x4d, 0x53, 0x49, 0x54, 0x25, 0x32, 0x30, 0x54, 0x65,
+  0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32, 0x30,
+  0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e, 0x63, 0x72, 0x6c, 0x86, 0x4b, 0x68, 0x74, 0x74, 0x70,
+  0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
+  0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x6d, 0x73, 0x63, 0x6f, 0x72, 0x70, 0x2f,
+  0x63, 0x72, 0x6c, 0x2f, 0x4d, 0x53, 0x49, 0x54, 0x25, 0x32, 0x30, 0x54, 0x65, 0x73, 0x74, 0x25,
+  0x32, 0x30, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25,
+  0x32, 0x30, 0x33, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x81, 0xa9, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05,
+  0x05, 0x07, 0x01, 0x01, 0x04, 0x81, 0x9c, 0x30, 0x81, 0x99, 0x30, 0x42, 0x06, 0x08, 0x2b, 0x06,
+  0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x36, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63,
+  0x6f, 0x72, 0x70, 0x70, 0x6b, 0x69, 0x2f, 0x61, 0x69, 0x61, 0x2f, 0x4d, 0x53, 0x49, 0x54, 0x25,
+  0x32, 0x30, 0x54, 0x65, 0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67,
+  0x6e, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e, 0x63, 0x72, 0x74, 0x30, 0x53,
+  0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x47, 0x68, 0x74, 0x74, 0x70,
+  0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
+  0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x6d, 0x73, 0x63, 0x6f, 0x72, 0x70, 0x2f,
+  0x4d, 0x53, 0x49, 0x54, 0x25, 0x32, 0x30, 0x54, 0x65, 0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f,
+  0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e,
+  0x63, 0x72, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b,
+  0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x97, 0x6d, 0x52, 0x46, 0x65, 0x08, 0x60, 0x01, 0x12,
+  0x7a, 0x26, 0xaa, 0xd9, 0xc3, 0x15, 0xec, 0xc6, 0xae, 0x0b, 0x75, 0xe4, 0xd5, 0xe0, 0x31, 0xf6,
+  0xda, 0xc0, 0xb1, 0x1b, 0x7b, 0x8a, 0x07, 0xda, 0x2f, 0x82, 0x4a, 0x21, 0x89, 0xe6, 0x61, 0x97,
+  0xe4, 0x3a, 0x38, 0xd8, 0x0a, 0x26, 0x4e, 0x83, 0x54, 0xbf, 0x32, 0xe3, 0x64, 0x36, 0x61, 0x40,
+  0x75, 0x55, 0xf1, 0xaa, 0x34, 0xb2, 0xd3, 0x45, 0x8d, 0x79, 0x9a, 0x93, 0x0b, 0x9f, 0x5a, 0xb3,
+  0x5b, 0xcf, 0x0d, 0x28, 0x00, 0x46, 0x68, 0xe7, 0x36, 0xc9, 0xe6, 0xd2, 0x03, 0x2d, 0x1c, 0x2b,
+  0x24, 0x79, 0x32, 0xfb, 0xd8, 0x43, 0xb4, 0x0e, 0xd0, 0x37, 0x3b, 0x5e, 0x15, 0xbf, 0x8a, 0x00,
+  0x56, 0x00, 0x95, 0x00, 0xd4, 0x71, 0x09, 0xe1, 0x84, 0xfa, 0x6e, 0xc5, 0x75, 0x2f, 0xe1, 0x83,
+  0x7b, 0x66, 0xe2, 0x22, 0x75, 0x23, 0x6a, 0xf3, 0x83, 0xfc, 0x94, 0xf8, 0x51, 0x6d, 0x40, 0x6d,
+  0x20, 0x7e, 0xb0, 0xe9, 0xac, 0xa8, 0x28, 0x04, 0xa0, 0x1a, 0x3c, 0x88, 0x7e, 0x7e, 0x3b, 0x96,
+  0xe9, 0xd0, 0x4b, 0xfa, 0xfa, 0x34, 0x4a, 0x4f, 0xe7, 0xe8, 0x76, 0x16, 0x20, 0xc0, 0x10, 0xca,
+  0x1f, 0x7a, 0xde, 0x54, 0xfd, 0xb7, 0xf0, 0xea, 0x8f, 0xe2, 0xcb, 0xa5, 0x1c, 0x58, 0x18, 0x57,
+  0x6c, 0x7d, 0x06, 0xde, 0x8c, 0xbd, 0x45, 0xd7, 0x28, 0x86, 0x13, 0x42, 0xaa, 0x4a, 0x9a, 0x50,
+  0xc5, 0x76, 0x7f, 0x63, 0x99, 0xd0, 0x90, 0x92, 0xd6, 0xc9, 0x21, 0xf2, 0xb8, 0x66, 0x9c, 0x96,
+  0x53, 0xd2, 0xe5, 0xc4, 0xdd, 0x3a, 0x7c, 0x06, 0xae, 0xb1, 0x7a, 0xb4, 0x36, 0x04, 0x9d, 0xe6,
+  0x2a, 0xe4, 0x6a, 0x56, 0xd0, 0x9a, 0x98, 0xa2, 0xbf, 0x6f, 0x43, 0xf2, 0xb0, 0x5b, 0xfd, 0xd9,
+  0xfa, 0x08, 0x17, 0xc8, 0x3c, 0x61, 0xf1, 0x31, 0x82, 0x02, 0x3a, 0x30, 0x82, 0x02, 0x36, 0x02,
+  0x01, 0x01, 0x30, 0x81, 0x90, 0x30, 0x81, 0x81, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0a, 0x09, 0x92,
+  0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x03, 0x63, 0x6f, 0x6d, 0x31, 0x19, 0x30,
+  0x17, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6d,
+  0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x31, 0x14, 0x30, 0x12, 0x06, 0x0a, 0x09, 0x92,
+  0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x04, 0x63, 0x6f, 0x72, 0x70, 0x31, 0x17,
+  0x30, 0x15, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x07,
+  0x72, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03,
+  0x13, 0x17, 0x4d, 0x53, 0x49, 0x54, 0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x64, 0x65,
+  0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x41, 0x20, 0x33, 0x02, 0x0a, 0x4e, 0x30, 0xa5, 0xbb, 0x00,
+  0x00, 0x00, 0x12, 0x7b, 0xf2, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
+  0x02, 0x01, 0x05, 0x00, 0xa0, 0x7c, 0x30, 0x10, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82,
+  0x37, 0x02, 0x01, 0x0c, 0x31, 0x02, 0x30, 0x00, 0x30, 0x19, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
+  0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0c, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
+  0x02, 0x01, 0x04, 0x30, 0x1c, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01,
+  0x0b, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01,
+  0x15, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22,
+  0x04, 0x20, 0x25, 0x60, 0x6e, 0xc8, 0x66, 0x72, 0x73, 0xb0, 0x71, 0x7b, 0x82, 0x09, 0x8c, 0x27,
+  0xe8, 0xb1, 0x4a, 0x36, 0x1c, 0x81, 0x36, 0xb4, 0x1b, 0x44, 0xdf, 0x09, 0x82, 0x8b, 0xf9, 0xb6,
+  0x1c, 0x65, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05,
+  0x00, 0x04, 0x82, 0x01, 0x00, 0x01, 0xb7, 0x8e, 0x46, 0x9b, 0xb4, 0x18, 0xcd, 0xf6, 0x39, 0x8f,
+  0x82, 0x79, 0xbc, 0x96, 0x55, 0x7e, 0xd7, 0x84, 0x8f, 0x18, 0x37, 0x48, 0x4e, 0x8f, 0x25, 0x6f,
+  0x1a, 0x6c, 0x60, 0xe9, 0xc1, 0x5f, 0x65, 0xec, 0xb0, 0x4b, 0x35, 0x98, 0x8a, 0x31, 0x6b, 0xfd,
+  0xa9, 0xd2, 0x28, 0xa7, 0x00, 0xd0, 0x5c, 0x97, 0x2e, 0x3d, 0x19, 0x96, 0x75, 0xc2, 0x9a, 0xa7,
+  0x4e, 0x2d, 0x3c, 0x6a, 0xd7, 0xd1, 0x81, 0x96, 0x2e, 0x06, 0x54, 0x82, 0xe9, 0x87, 0xa2, 0x53,
+  0x63, 0x6a, 0xda, 0x72, 0xa3, 0x41, 0x4f, 0x14, 0xc5, 0x3d, 0x41, 0x7d, 0xbb, 0xd7, 0x29, 0x11,
+  0x96, 0x14, 0x60, 0x5f, 0xb9, 0xd3, 0x47, 0xb6, 0x23, 0x97, 0x64, 0xf6, 0xe1, 0xac, 0x6c, 0x4d,
+  0xa9, 0x58, 0xc2, 0x35, 0xbf, 0x02, 0xee, 0x29, 0xd4, 0x52, 0x80, 0x25, 0xa1, 0x7e, 0xbe, 0x21,
+  0xcd, 0x04, 0x3c, 0x4d, 0x7d, 0xdb, 0x9b, 0x13, 0x71, 0x35, 0x13, 0x8d, 0x16, 0x0a, 0x40, 0x7b,
+  0x63, 0x45, 0x00, 0x11, 0xc5, 0x3e, 0xc8, 0x21, 0x37, 0xc9, 0xbc, 0xd2, 0x0f, 0x82, 0x21, 0xf9,
+  0x2f, 0xde, 0xb3, 0x1c, 0x9b, 0x67, 0xb6, 0x5a, 0xb8, 0x74, 0xa0, 0x30, 0xd8, 0x86, 0x1f, 0xd9,
+  0x08, 0x45, 0xf9, 0x6b, 0xe8, 0x57, 0xda, 0xb7, 0x14, 0xf7, 0x63, 0x97, 0xfd, 0x87, 0x61, 0x1e,
+  0x95, 0x6f, 0xba, 0x53, 0x40, 0x5e, 0x9f, 0x49, 0xf6, 0xe7, 0x3c, 0x59, 0xd9, 0x78, 0x08, 0x4c,
+  0xa6, 0x4a, 0xa2, 0x05, 0x42, 0xa7, 0x77, 0xbc, 0x44, 0x7b, 0xed, 0xdb, 0x77, 0x63, 0x4c, 0x63,
+  0x22, 0xb6, 0x17, 0x3f, 0x4f, 0x33, 0xed, 0xa6, 0xd9, 0x0f, 0x74, 0xfa, 0x97, 0x8d, 0x98, 0x55,
+  0x42, 0x14, 0x76, 0xd4, 0x89, 0x07, 0xf2, 0x30, 0x5a, 0x27, 0x96, 0x1b, 0x92, 0x70, 0x5a, 0x83,
+  0x89, 0x0f, 0xdb, 0x47, 0x7a, 0x00, 0x00, 0x00, 0x0a
+  };
+
+//
+// Sample root certificate for code signing.
+// A trusted certificate with self-signing, will be used to construct the certificate chains for
+// authority checking.
+//
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TestRootCert1[] = {
+  0x30, 0x82, 0x05, 0x99, 0x30, 0x82, 0x03, 0x81, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x79,
+  0xAD, 0x16, 0xA1, 0x4A, 0xA0, 0xA5, 0xAD, 0x4C, 0x73, 0x58, 0xF4, 0x07, 0x13, 0x2E, 0x65, 0x30,
+  0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x5F,
+  0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19,
+  0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93,
+  0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74,
+  0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F,
+  0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66,
+  0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x30,
+  0x1E, 0x17, 0x0D, 0x30, 0x31, 0x30, 0x35, 0x30, 0x39, 0x32, 0x33, 0x31, 0x39, 0x32, 0x32, 0x5A,
+  0x17, 0x0D, 0x32, 0x31, 0x30, 0x35, 0x30, 0x39, 0x32, 0x33, 0x32, 0x38, 0x31, 0x33, 0x5A, 0x30,
+  0x5F, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01,
+  0x19, 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89,
+  0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66,
+  0x74, 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72,
+  0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69,
+  0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79,
+  0x30, 0x82, 0x02, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01,
+  0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0F, 0x00, 0x30, 0x82, 0x02, 0x0A, 0x02, 0x82, 0x02, 0x01,
+  0x00, 0xF3, 0x5D, 0xFA, 0x80, 0x67, 0xD4, 0x5A, 0xA7, 0xA9, 0x0C, 0x2C, 0x90, 0x20, 0xD0, 0x35,
+  0x08, 0x3C, 0x75, 0x84, 0xCD, 0xB7, 0x07, 0x89, 0x9C, 0x89, 0xDA, 0xDE, 0xCE, 0xC3, 0x60, 0xFA,
+  0x91, 0x68, 0x5A, 0x9E, 0x94, 0x71, 0x29, 0x18, 0x76, 0x7C, 0xC2, 0xE0, 0xC8, 0x25, 0x76, 0x94,
+  0x0E, 0x58, 0xFA, 0x04, 0x34, 0x36, 0xE6, 0xDF, 0xAF, 0xF7, 0x80, 0xBA, 0xE9, 0x58, 0x0B, 0x2B,
+  0x93, 0xE5, 0x9D, 0x05, 0xE3, 0x77, 0x22, 0x91, 0xF7, 0x34, 0x64, 0x3C, 0x22, 0x91, 0x1D, 0x5E,
+  0xE1, 0x09, 0x90, 0xBC, 0x14, 0xFE, 0xFC, 0x75, 0x58, 0x19, 0xE1, 0x79, 0xB7, 0x07, 0x92, 0xA3,
+  0xAE, 0x88, 0x59, 0x08, 0xD8, 0x9F, 0x07, 0xCA, 0x03, 0x58, 0xFC, 0x68, 0x29, 0x6D, 0x32, 0xD7,
+  0xD2, 0xA8, 0xCB, 0x4B, 0xFC, 0xE1, 0x0B, 0x48, 0x32, 0x4F, 0xE6, 0xEB, 0xB8, 0xAD, 0x4F, 0xE4,
+  0x5C, 0x6F, 0x13, 0x94, 0x99, 0xDB, 0x95, 0xD5, 0x75, 0xDB, 0xA8, 0x1A, 0xB7, 0x94, 0x91, 0xB4,
+  0x77, 0x5B, 0xF5, 0x48, 0x0C, 0x8F, 0x6A, 0x79, 0x7D, 0x14, 0x70, 0x04, 0x7D, 0x6D, 0xAF, 0x90,
+  0xF5, 0xDA, 0x70, 0xD8, 0x47, 0xB7, 0xBF, 0x9B, 0x2F, 0x6C, 0xE7, 0x05, 0xB7, 0xE1, 0x11, 0x60,
+  0xAC, 0x79, 0x91, 0x14, 0x7C, 0xC5, 0xD6, 0xA6, 0xE4, 0xE1, 0x7E, 0xD5, 0xC3, 0x7E, 0xE5, 0x92,
+  0xD2, 0x3C, 0x00, 0xB5, 0x36, 0x82, 0xDE, 0x79, 0xE1, 0x6D, 0xF3, 0xB5, 0x6E, 0xF8, 0x9F, 0x33,
+  0xC9, 0xCB, 0x52, 0x7D, 0x73, 0x98, 0x36, 0xDB, 0x8B, 0xA1, 0x6B, 0xA2, 0x95, 0x97, 0x9B, 0xA3,
+  0xDE, 0xC2, 0x4D, 0x26, 0xFF, 0x06, 0x96, 0x67, 0x25, 0x06, 0xC8, 0xE7, 0xAC, 0xE4, 0xEE, 0x12,
+  0x33, 0x95, 0x31, 0x99, 0xC8, 0x35, 0x08, 0x4E, 0x34, 0xCA, 0x79, 0x53, 0xD5, 0xB5, 0xBE, 0x63,
+  0x32, 0x59, 0x40, 0x36, 0xC0, 0xA5, 0x4E, 0x04, 0x4D, 0x3D, 0xDB, 0x5B, 0x07, 0x33, 0xE4, 0x58,
+  0xBF, 0xEF, 0x3F, 0x53, 0x64, 0xD8, 0x42, 0x59, 0x35, 0x57, 0xFD, 0x0F, 0x45, 0x7C, 0x24, 0x04,
+  0x4D, 0x9E, 0xD6, 0x38, 0x74, 0x11, 0x97, 0x22, 0x90, 0xCE, 0x68, 0x44, 0x74, 0x92, 0x6F, 0xD5,
+  0x4B, 0x6F, 0xB0, 0x86, 0xE3, 0xC7, 0x36, 0x42, 0xA0, 0xD0, 0xFC, 0xC1, 0xC0, 0x5A, 0xF9, 0xA3,
+  0x61, 0xB9, 0x30, 0x47, 0x71, 0x96, 0x0A, 0x16, 0xB0, 0x91, 0xC0, 0x42, 0x95, 0xEF, 0x10, 0x7F,
+  0x28, 0x6A, 0xE3, 0x2A, 0x1F, 0xB1, 0xE4, 0xCD, 0x03, 0x3F, 0x77, 0x71, 0x04, 0xC7, 0x20, 0xFC,
+  0x49, 0x0F, 0x1D, 0x45, 0x88, 0xA4, 0xD7, 0xCB, 0x7E, 0x88, 0xAD, 0x8E, 0x2D, 0xEC, 0x45, 0xDB,
+  0xC4, 0x51, 0x04, 0xC9, 0x2A, 0xFC, 0xEC, 0x86, 0x9E, 0x9A, 0x11, 0x97, 0x5B, 0xDE, 0xCE, 0x53,
+  0x88, 0xE6, 0xE2, 0xB7, 0xFD, 0xAC, 0x95, 0xC2, 0x28, 0x40, 0xDB, 0xEF, 0x04, 0x90, 0xDF, 0x81,
+  0x33, 0x39, 0xD9, 0xB2, 0x45, 0xA5, 0x23, 0x87, 0x06, 0xA5, 0x55, 0x89, 0x31, 0xBB, 0x06, 0x2D,
+  0x60, 0x0E, 0x41, 0x18, 0x7D, 0x1F, 0x2E, 0xB5, 0x97, 0xCB, 0x11, 0xEB, 0x15, 0xD5, 0x24, 0xA5,
+  0x94, 0xEF, 0x15, 0x14, 0x89, 0xFD, 0x4B, 0x73, 0xFA, 0x32, 0x5B, 0xFC, 0xD1, 0x33, 0x00, 0xF9,
+  0x59, 0x62, 0x70, 0x07, 0x32, 0xEA, 0x2E, 0xAB, 0x40, 0x2D, 0x7B, 0xCA, 0xDD, 0x21, 0x67, 0x1B,
+  0x30, 0x99, 0x8F, 0x16, 0xAA, 0x23, 0xA8, 0x41, 0xD1, 0xB0, 0x6E, 0x11, 0x9B, 0x36, 0xC4, 0xDE,
+  0x40, 0x74, 0x9C, 0xE1, 0x58, 0x65, 0xC1, 0x60, 0x1E, 0x7A, 0x5B, 0x38, 0xC8, 0x8F, 0xBB, 0x04,
+  0x26, 0x7C, 0xD4, 0x16, 0x40, 0xE5, 0xB6, 0x6B, 0x6C, 0xAA, 0x86, 0xFD, 0x00, 0xBF, 0xCE, 0xC1,
+  0x35, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x51, 0x30, 0x4F, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x1D,
+  0x0F, 0x04, 0x04, 0x03, 0x02, 0x01, 0xC6, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01,
+  0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04,
+  0x16, 0x04, 0x14, 0x0E, 0xAC, 0x82, 0x60, 0x40, 0x56, 0x27, 0x97, 0xE5, 0x25, 0x13, 0xFC, 0x2A,
+  0xE1, 0x0A, 0x53, 0x95, 0x59, 0xE4, 0xA4, 0x30, 0x10, 0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01,
+  0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48,
+  0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0xC5, 0x11, 0x4D,
+  0x03, 0x3A, 0x60, 0xDD, 0x5D, 0x52, 0x11, 0x77, 0x8F, 0xB2, 0xBB, 0x36, 0xC8, 0xB2, 0x05, 0xBF,
+  0xB4, 0xB7, 0xA8, 0xD8, 0x20, 0x9D, 0x5C, 0x13, 0x03, 0xB6, 0x1C, 0x22, 0xFA, 0x06, 0x13, 0x35,
+  0xB6, 0xC8, 0x63, 0xD4, 0x9A, 0x47, 0x6F, 0x26, 0x57, 0xD2, 0x55, 0xF1, 0x04, 0xB1, 0x26, 0x5F,
+  0xD6, 0xA9, 0x50, 0x68, 0xA0, 0xBC, 0xD2, 0xB8, 0x6E, 0xCC, 0xC3, 0xE9, 0xAC, 0xDF, 0x19, 0xCD,
+  0x78, 0xAC, 0x59, 0x74, 0xAC, 0x66, 0x34, 0x36, 0xC4, 0x1B, 0x3E, 0x6C, 0x38, 0x4C, 0x33, 0x0E,
+  0x30, 0x12, 0x0D, 0xA3, 0x26, 0xFE, 0x51, 0x53, 0x00, 0xFF, 0xAF, 0x5A, 0x4E, 0x84, 0x0D, 0x0F,
+  0x1F, 0xE4, 0x6D, 0x05, 0x2E, 0x4E, 0x85, 0x4B, 0x8D, 0x6C, 0x33, 0x6F, 0x54, 0xD2, 0x64, 0xAB,
+  0xBF, 0x50, 0xAF, 0x7D, 0x7A, 0x39, 0xA0, 0x37, 0xED, 0x63, 0x03, 0x0F, 0xFC, 0x13, 0x06, 0xCE,
+  0x16, 0x36, 0xD4, 0x54, 0x3B, 0x95, 0x1B, 0x51, 0x62, 0x3A, 0xE5, 0x4D, 0x17, 0xD4, 0x05, 0x39,
+  0x92, 0x9A, 0x27, 0xA8, 0x5B, 0xAA, 0xBD, 0xEC, 0xBB, 0xBE, 0xE3, 0x20, 0x89, 0x60, 0x71, 0x6C,
+  0x56, 0xB3, 0xA5, 0x13, 0xD0, 0x6D, 0x0E, 0x23, 0x7E, 0x95, 0x03, 0xED, 0x68, 0x3D, 0xF2, 0xD8,
+  0x63, 0xB8, 0x6B, 0x4D, 0xB6, 0xE8, 0x30, 0xB5, 0xE1, 0xCA, 0x94, 0x4B, 0xF7, 0xA2, 0xAA, 0x5D,
+  0x99, 0x30, 0xB2, 0x3D, 0xA7, 0xC2, 0x51, 0x6C, 0x28, 0x20, 0x01, 0x24, 0x27, 0x2B, 0x4B, 0x00,
+  0xB7, 0x9D, 0x11, 0x6B, 0x70, 0xBE, 0xB2, 0x10, 0x82, 0xBC, 0x0C, 0x9B, 0x68, 0xD0, 0x8D, 0x3B,
+  0x24, 0x87, 0xAA, 0x99, 0x28, 0x72, 0x9D, 0x33, 0x5F, 0x59, 0x90, 0xBD, 0xF5, 0xDE, 0x93, 0x9E,
+  0x3A, 0x62, 0x5A, 0x34, 0x39, 0xE2, 0x88, 0x55, 0x1D, 0xB9, 0x06, 0xB0, 0xC1, 0x89, 0x6B, 0x2D,
+  0xD7, 0x69, 0xC3, 0x19, 0x12, 0x36, 0x84, 0xD0, 0xC9, 0xA0, 0xDA, 0xFF, 0x2F, 0x69, 0x78, 0xB2,
+  0xE5, 0x7A, 0xDA, 0xEB, 0xD7, 0x0C, 0xC0, 0xF7, 0xBD, 0x63, 0x17, 0xB8, 0x39, 0x13, 0x38, 0xA2,
+  0x36, 0x5B, 0x7B, 0xF2, 0x85, 0x56, 0x6A, 0x1D, 0x64, 0x62, 0xC1, 0x38, 0xE2, 0xAA, 0xBF, 0x51,
+  0x66, 0xA2, 0x94, 0xF5, 0x12, 0x9C, 0x66, 0x22, 0x10, 0x6B, 0xF2, 0xB7, 0x30, 0x92, 0x2D, 0xF2,
+  0x29, 0xF0, 0x3D, 0x3B, 0x14, 0x43, 0x68, 0xA2, 0xF1, 0x9C, 0x29, 0x37, 0xCB, 0xCE, 0x38, 0x20,
+  0x25, 0x6D, 0x7C, 0x67, 0xF3, 0x7E, 0x24, 0x12, 0x24, 0x03, 0x08, 0x81, 0x47, 0xEC, 0xA5, 0x9E,
+  0x97, 0xF5, 0x18, 0xD7, 0xCF, 0xBB, 0xD5, 0xEF, 0x76, 0x96, 0xEF, 0xFD, 0xCE, 0xDB, 0x56, 0x9D,
+  0x95, 0xA0, 0x42, 0xF9, 0x97, 0x58, 0xE1, 0xD7, 0x31, 0x22, 0xD3, 0x5F, 0x59, 0xE6, 0x3E, 0x6E,
+  0x22, 0x00, 0xEA, 0x43, 0x84, 0xB6, 0x25, 0xDB, 0xD9, 0xF3, 0x08, 0x56, 0x68, 0xC0, 0x64, 0x6B,
+  0x1D, 0x7C, 0xEC, 0xB6, 0x93, 0xA2, 0x62, 0x57, 0x6E, 0x2E, 0xD8, 0xE7, 0x58, 0x8F, 0xC4, 0x31,
+  0x49, 0x26, 0xDD, 0xDE, 0x29, 0x35, 0x87, 0xF5, 0x30, 0x71, 0x70, 0x5B, 0x14, 0x3C, 0x69, 0xBD,
+  0x89, 0x12, 0x7D, 0xEB, 0x2E, 0xA3, 0xFE, 0xD8, 0x7F, 0x9E, 0x82, 0x5A, 0x52, 0x0A, 0x2B, 0xC1,
+  0x43, 0x2B, 0xD9, 0x30, 0x88, 0x9F, 0xC8, 0x10, 0xFB, 0x89, 0x8D, 0xE6, 0xA1, 0x85, 0x75, 0x33,
+  0x7E, 0x6C, 0x9E, 0xDB, 0x73, 0x13, 0x64, 0x62, 0x69, 0xA5, 0x2F, 0x7D, 0xCA, 0x96, 0x6D, 0x9F,
+  0xF8, 0x04, 0x4D, 0x30, 0x92, 0x3D, 0x6E, 0x21, 0x14, 0x21, 0xC9, 0x3D, 0xE0, 0xC3, 0xFD, 0x8A,
+  0x6B, 0x9D, 0x4A, 0xFD, 0xD1, 0xA1, 0x9D, 0x99, 0x43, 0x77, 0x3F, 0xB0, 0xDA
+};
+
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TestRootCert2[] = {
+  0x30, 0x82, 0x05, 0xfd, 0x30, 0x82, 0x03, 0xe5, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x74,
+  0x45, 0xc8, 0x78, 0x4e, 0x0c, 0xc9, 0x96, 0x4a, 0xb4, 0x2f, 0xbc, 0xda, 0x29, 0xe1, 0xbc, 0x30,
+  0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81,
+  0x90, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13,
+  0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67,
+  0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65,
+  0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15,
+  0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72,
+  0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x3a, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x31,
+  0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e,
+  0x67, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
+  0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31,
+  0x30, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x36, 0x31, 0x37, 0x32, 0x30, 0x35, 0x38, 0x30,
+  0x32, 0x5a, 0x17, 0x0d, 0x33, 0x35, 0x30, 0x36, 0x31, 0x37, 0x32, 0x31, 0x30, 0x34, 0x31, 0x31,
+  0x5a, 0x30, 0x81, 0x90, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55,
+  0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68,
+  0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13,
+  0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04,
+  0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72,
+  0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x3a, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04,
+  0x03, 0x13, 0x31, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x54, 0x65, 0x73,
+  0x74, 0x69, 0x6e, 0x67, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66,
+  0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20,
+  0x32, 0x30, 0x31, 0x30, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
+  0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a,
+  0x02, 0x82, 0x02, 0x01, 0x00, 0x95, 0xe3, 0xa8, 0xc1, 0xb9, 0x9c, 0x26, 0x54, 0xb0, 0x99, 0xef,
+  0x26, 0x1f, 0xac, 0x1e, 0xc7, 0x30, 0x80, 0xbb, 0xf5, 0x3f, 0xf2, 0xe4, 0xbb, 0xf8, 0xfe, 0x06,
+  0x6a, 0x0a, 0xa6, 0x88, 0xbc, 0xb4, 0x8c, 0x45, 0xe0, 0x70, 0x55, 0x19, 0x88, 0xb4, 0x05, 0xcb,
+  0xb5, 0xc1, 0xa1, 0xfa, 0xd4, 0x7c, 0xc2, 0x42, 0x53, 0x07, 0x9c, 0x54, 0x56, 0xa8, 0x97, 0xe0,
+  0x94, 0x69, 0xbe, 0x13, 0x24, 0xef, 0xe5, 0x8a, 0x29, 0x9c, 0xa6, 0xd0, 0x2b, 0x2f, 0x8a, 0xa6,
+  0xe8, 0x79, 0x44, 0x2e, 0x8b, 0xea, 0xc9, 0xbe, 0xb8, 0x54, 0x86, 0x53, 0xbe, 0x07, 0x24, 0x34,
+  0x54, 0x15, 0x22, 0x20, 0x01, 0x7b, 0x8a, 0x46, 0xfb, 0xd2, 0x91, 0x07, 0x95, 0x09, 0xb0, 0x56,
+  0x11, 0xcc, 0x76, 0xb2, 0xd0, 0x1f, 0x44, 0x79, 0x52, 0x34, 0x28, 0xec, 0x4f, 0x49, 0xc2, 0xcb,
+  0x61, 0xd3, 0x86, 0xdc, 0xe4, 0xa3, 0x7e, 0x55, 0x9e, 0x9f, 0xee, 0x10, 0x6f, 0xcf, 0xe1, 0x3d,
+  0xf8, 0xb7, 0x84, 0x79, 0xa2, 0x3b, 0x8d, 0x1c, 0xb0, 0x81, 0x7c, 0xe4, 0x44, 0x07, 0xe4, 0xce,
+  0x46, 0xb0, 0x98, 0x83, 0x8d, 0x87, 0x8f, 0xe5, 0xf5, 0xae, 0x40, 0x7a, 0xf1, 0xed, 0x3d, 0x9b,
+  0x9a, 0x7c, 0x4a, 0xd1, 0xb9, 0xc3, 0x94, 0x05, 0x7b, 0xdc, 0xda, 0xb8, 0xce, 0xdc, 0x1e, 0x6c,
+  0xcf, 0xd9, 0x9e, 0x37, 0xef, 0xc3, 0x5a, 0x36, 0x7b, 0x90, 0x86, 0x45, 0xdc, 0xf6, 0x2e, 0xca,
+  0xdd, 0xee, 0xde, 0x27, 0xd9, 0x74, 0x9a, 0x69, 0xf5, 0xd9, 0x5d, 0x09, 0x2d, 0x45, 0x41, 0xcc,
+  0xb7, 0xc2, 0x82, 0xd4, 0x2a, 0x8c, 0x16, 0x25, 0x92, 0x97, 0x3d, 0x94, 0x4e, 0x89, 0x33, 0x7e,
+  0x5b, 0x03, 0x54, 0xcd, 0xb0, 0x83, 0xa0, 0x8e, 0x41, 0xb7, 0x87, 0x8d, 0xd9, 0x05, 0x63, 0x52,
+  0xf6, 0xee, 0xe6, 0x4e, 0x13, 0x9d, 0x54, 0xcd, 0x49, 0xfe, 0xe3, 0x8b, 0x3b, 0x50, 0x9b, 0x48,
+  0xbb, 0xb2, 0xe5, 0x92, 0xd4, 0xab, 0xa0, 0xc5, 0x10, 0xaf, 0x3e, 0xb1, 0x45, 0x21, 0x34, 0x90,
+  0xdc, 0xad, 0xb9, 0xf7, 0xfe, 0x21, 0xae, 0xee, 0x50, 0x58, 0x7a, 0x3a, 0xe5, 0xaa, 0xd8, 0xe3,
+  0x82, 0xd6, 0xcf, 0x6d, 0x4d, 0xc9, 0x15, 0xac, 0x9c, 0x31, 0x17, 0xa5, 0x16, 0xa7, 0x42, 0xf6,
+  0xda, 0x12, 0x78, 0xa7, 0x66, 0x90, 0xec, 0xfc, 0xcd, 0x01, 0x63, 0xff, 0xf0, 0x0e, 0xba, 0xe1,
+  0xcd, 0xf0, 0xdb, 0x6b, 0x9a, 0x0f, 0xf6, 0x0f, 0x04, 0x01, 0x09, 0xbc, 0x9f, 0xce, 0xb7, 0x6c,
+  0x51, 0x70, 0x57, 0x08, 0x1b, 0xff, 0x79, 0x9a, 0x52, 0x5d, 0xba, 0xac, 0x14, 0xe5, 0x3b, 0x67,
+  0xcf, 0x2c, 0x52, 0xde, 0x27, 0x9a, 0x34, 0x03, 0x6e, 0x25, 0x48, 0xb0, 0x19, 0x74, 0xfc, 0x4d,
+  0x98, 0xc2, 0x4b, 0x8c, 0x92, 0xe1, 0x88, 0xae, 0x48, 0x2a, 0xab, 0xab, 0xcd, 0x14, 0x4d, 0xb6,
+  0x61, 0x0e, 0xa1, 0x09, 0x8f, 0x2c, 0xdb, 0x45, 0xaf, 0x7d, 0x3b, 0x81, 0x56, 0x08, 0xc9, 0x3b,
+  0x41, 0xb7, 0x64, 0x9f, 0x5d, 0x2e, 0x12, 0x7f, 0xb9, 0x69, 0x29, 0x1f, 0x52, 0x45, 0x4a, 0x23,
+  0xc6, 0xaf, 0xb6, 0xb2, 0x38, 0x72, 0x9d, 0x08, 0x33, 0xff, 0xd0, 0xcf, 0x89, 0xb6, 0xea, 0x6e,
+  0x85, 0x44, 0x94, 0x3e, 0x91, 0x59, 0xeb, 0xef, 0x9e, 0xbd, 0x9b, 0x9c, 0x1a, 0x47, 0x03, 0x4e,
+  0xa2, 0x17, 0x96, 0xfa, 0x62, 0x0b, 0xe8, 0x53, 0xb6, 0x4e, 0xe3, 0xe8, 0x2a, 0x73, 0x59, 0xe2,
+  0x13, 0xb8, 0xf8, 0x5a, 0x7e, 0xc6, 0xe2, 0x0a, 0xdd, 0x4a, 0x43, 0xcc, 0xc3, 0x77, 0x3b, 0x7a,
+  0x31, 0x04, 0x0a, 0xc1, 0x84, 0x96, 0x3a, 0x63, 0x6e, 0x1a, 0x3e, 0x0a, 0x0c, 0x25, 0xb8, 0x7e,
+  0xb5, 0x52, 0x0c, 0xb9, 0xab, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x51, 0x30, 0x4f, 0x30, 0x0b,
+  0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55,
+  0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03,
+  0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa3, 0x01, 0x04, 0x7e, 0x30, 0x88, 0x33, 0xeb, 0xb9,
+  0x31, 0x9c, 0xca, 0xeb, 0x85, 0x76, 0x67, 0xfc, 0x65, 0xb4, 0xd1, 0x30, 0x10, 0x06, 0x09, 0x2b,
+  0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06,
+  0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01,
+  0x00, 0x49, 0x8b, 0xc1, 0xfc, 0x4f, 0xe8, 0xe4, 0x2d, 0x67, 0x92, 0x9a, 0x76, 0x05, 0xba, 0xd1,
+  0xbc, 0x98, 0xe4, 0x2b, 0xba, 0x1f, 0x66, 0x5f, 0x66, 0x23, 0xcf, 0x1c, 0x27, 0xeb, 0xb4, 0xaa,
+  0xdd, 0xa0, 0x17, 0x20, 0x55, 0x72, 0x33, 0xb1, 0x76, 0xde, 0xc9, 0x6d, 0x0d, 0x3c, 0x2d, 0x0a,
+  0x08, 0x24, 0x2d, 0xec, 0x38, 0x96, 0x7a, 0x83, 0xf1, 0x27, 0x50, 0x3c, 0x86, 0x09, 0xdd, 0x0d,
+  0x41, 0xce, 0xaa, 0x5e, 0xf3, 0x8f, 0x7a, 0x3e, 0x3e, 0xf1, 0xf0, 0xba, 0x8b, 0x72, 0xdd, 0x36,
+  0xa1, 0x69, 0x05, 0x5b, 0x7c, 0xec, 0xe7, 0x70, 0x63, 0x8d, 0x1d, 0x6e, 0xc0, 0xfd, 0x3a, 0x03,
+  0xf1, 0x10, 0x3e, 0x90, 0xd7, 0x7b, 0x7a, 0xdc, 0xea, 0x60, 0xec, 0x2f, 0x53, 0xfd, 0x19, 0x1d,
+  0x3a, 0xa1, 0x74, 0x08, 0xc2, 0x7b, 0x3c, 0xe0, 0x50, 0xac, 0x21, 0xd7, 0xb6, 0xdd, 0xdd, 0x3c,
+  0x44, 0x1b, 0xf7, 0xf3, 0x44, 0x3e, 0x6c, 0x96, 0xe0, 0xc0, 0x9f, 0xe6, 0xef, 0xdd, 0xdd, 0xb1,
+  0xa6, 0x68, 0x61, 0x6c, 0x5e, 0x9e, 0xf9, 0xff, 0x9a, 0x06, 0xa4, 0x6a, 0xcd, 0x9e, 0x75, 0x43,
+  0x89, 0x9b, 0xcb, 0x85, 0xf6, 0xdc, 0x0c, 0x46, 0x4a, 0x8c, 0x9b, 0xac, 0x11, 0xa6, 0x63, 0x45,
+  0xfb, 0xfc, 0xde, 0x20, 0xee, 0xce, 0x67, 0x9f, 0x3d, 0xd0, 0x93, 0xdb, 0x39, 0xfb, 0xea, 0x5e,
+  0x4b, 0xfc, 0xd6, 0x20, 0xf1, 0x95, 0x36, 0x08, 0x8c, 0xb2, 0xb3, 0xa1, 0x97, 0x1b, 0x41, 0x19,
+  0xb0, 0xac, 0xfe, 0xe2, 0xd5, 0xab, 0x7d, 0xd9, 0x26, 0xd4, 0xdc, 0xbd, 0x1f, 0x38, 0xc0, 0xe3,
+  0x86, 0xdf, 0x24, 0xe7, 0xf5, 0x3e, 0x09, 0xca, 0x4d, 0xa1, 0xba, 0x16, 0xc3, 0x4a, 0xb1, 0xfc,
+  0x72, 0x98, 0xcf, 0x0e, 0x92, 0xfa, 0x57, 0x45, 0xe9, 0x48, 0x4d, 0xc6, 0xa2, 0x7c, 0x3b, 0x72,
+  0x63, 0xac, 0x4e, 0xf4, 0x74, 0xe9, 0x2b, 0x57, 0xac, 0xab, 0x32, 0x88, 0x0b, 0xa9, 0x10, 0x67,
+  0x53, 0x7e, 0xd2, 0x62, 0xd2, 0xfa, 0x68, 0xe8, 0x9d, 0x5b, 0xae, 0xcd, 0xe0, 0xe5, 0xe2, 0x06,
+  0x96, 0x0c, 0x34, 0x32, 0xf6, 0xbc, 0x25, 0xad, 0x98, 0xf3, 0x32, 0x60, 0xbe, 0x14, 0xd3, 0x78,
+  0xd1, 0x10, 0x6f, 0xff, 0x32, 0xe3, 0x9e, 0x3d, 0x88, 0xda, 0xb3, 0x32, 0x0a, 0xcf, 0x20, 0x65,
+  0x47, 0x78, 0xaa, 0xa5, 0x4b, 0x87, 0x6a, 0x83, 0xdc, 0x1a, 0x5a, 0x2a, 0xdf, 0x70, 0x61, 0xaf,
+  0x35, 0x32, 0xe0, 0x59, 0xa1, 0x9f, 0x0b, 0x14, 0x7a, 0xaa, 0xab, 0x42, 0x0b, 0x6b, 0xff, 0xfb,
+  0x34, 0xcb, 0x9d, 0x96, 0xd7, 0x26, 0x2a, 0x13, 0x3b, 0xe3, 0xdf, 0x11, 0xe6, 0x86, 0x7d, 0x0d,
+  0x09, 0x11, 0x93, 0x4b, 0xa4, 0xf6, 0xd2, 0x07, 0xc2, 0xcd, 0xc8, 0xbe, 0xf5, 0x67, 0xf7, 0xae,
+  0x05, 0xce, 0x16, 0xfe, 0x90, 0xc9, 0x4a, 0x98, 0x1b, 0x24, 0x69, 0x78, 0x90, 0xf9, 0x34, 0x8e,
+  0x37, 0xe8, 0x6e, 0x1d, 0xdc, 0xcf, 0x4f, 0xe7, 0xd2, 0x64, 0x40, 0x1d, 0xc4, 0x30, 0xba, 0xd5,
+  0x08, 0x88, 0x67, 0x4b, 0x0f, 0xb8, 0xe5, 0x59, 0xe9, 0x18, 0xd8, 0x0c, 0x60, 0x68, 0xae, 0x7f,
+  0xea, 0x91, 0x55, 0xbe, 0xeb, 0xf1, 0xa7, 0x8e, 0xd8, 0x5d, 0x50, 0x3e, 0xbf, 0xd5, 0x69, 0x57,
+  0x95, 0x8f, 0xa7, 0xff, 0xe4, 0x09, 0x3f, 0x08, 0x80, 0x97, 0x32, 0x42, 0xb8, 0x82, 0x43, 0x82,
+  0x6f, 0x8b, 0x0b, 0x93, 0xda, 0x19, 0xbf, 0x63, 0x4e, 0x5f, 0x9f, 0xed, 0x2c, 0x22, 0xb6, 0x20,
+  0x5f, 0x70, 0x44, 0xfa, 0x89, 0x59, 0x93, 0xb0, 0x7b, 0x12, 0x0f, 0x5e, 0x62, 0x62, 0x51, 0x11,
+  0xbd, 0xba, 0x5a, 0xd0, 0xce, 0xa1, 0xb6, 0xef, 0x80, 0x20, 0xe6, 0x73, 0x4b, 0x11, 0x06, 0x56,
+  0xe2, 0x0a
+  };
+
+//
+// OID ASN.1 Value for Hash Algorithms
+//
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 HashOidValue[] = {
+  0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x05,         // OBJ_md5
+  0x2B, 0x0E, 0x03, 0x02, 0x1A,                           // OBJ_sha1
+  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04,   // OBJ_sha224
+  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01,   // OBJ_sha256
+  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02,   // OBJ_sha384
+  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03,   // OBJ_sha512
+  };
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyAuthenticodeVerify (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  BOOLEAN  Status;
+
+  //
+  // Sample Code: Demonstrate how to check the Hash algorithm in PE/COFF Authenticode.
+  //    According to PKCS#7 Definition:
+  //        SignedData ::= SEQUENCE {
+  //            version Version,
+  //            digestAlgorithms DigestAlgorithmIdentifiers,
+  //            contentInfo ContentInfo,
+  //            .... }
+  //    The DigestAlgorithmIdentifiers can be used to determine the hash algorithm in PE/COFF hashing
+  //    This field has the fixed offset (+32) in final Authenticode ASN.1 data.
+  //
+  if (CompareMem (AuthenticodeWithSha1 + 32, &HashOidValue[8], 5) == 0) {
+    //
+    // Verify Authenticode signature.
+    // The PeHash value should be calculated following MSFT's Authenticode Specification.
+    //
+    Status = AuthenticodeVerify (
+               AuthenticodeWithSha1,
+               sizeof (AuthenticodeWithSha1),
+               TestRootCert1,
+               sizeof (TestRootCert1),
+               PeSha1Hash,
+               SHA1_DIGEST_SIZE
+               );
+    UT_ASSERT_TRUE (Status);
+  }
+
+  if (CompareMem (AuthenticodeWithSha256 + 32, &HashOidValue[22], 9) == 0) {
+    Status = AuthenticodeVerify (
+               AuthenticodeWithSha256,
+               sizeof (AuthenticodeWithSha256),
+               TestRootCert2,
+               sizeof (TestRootCert2),
+               PeSha256Hash,
+               SHA256_DIGEST_SIZE
+               );
+    UT_ASSERT_TRUE (Status);
+  }
+
+  return UNIT_TEST_PASSED;
+}
+
+TEST_DESC mAuthenticodeTest[] = {
+    //
+    // -----Description--------------------------------------Class----------------------Function-----------------Pre---Post--Context
+    //
+    {"TestVerifyAuthenticodeVerify()",        "CryptoPkg.BaseCryptLib.Authenticode",   TestVerifyAuthenticodeVerify,        NULL, NULL, NULL},
+};
+
+UINTN mAuthenticodeTestNum = ARRAY_SIZE(mAuthenticodeTest);
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c
new file mode 100644
index 000000000000..b7fcea3ff7e4
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c
@@ -0,0 +1,66 @@
+/** @file
+  This is defines the tests that will run on BaseCryptLib
+
+  Copyright (c) Microsoft Corporation.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+#include "TestBaseCryptLib.h"
+
+SUITE_DESC  mSuiteDesc[] = {
+    //
+    // Title--------------------------Package-------------------Sup--Tdn----TestNum------------TestDesc
+    //
+    {"EKU verify tests",            "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs7EkuTestNum,       mPkcs7EkuTest},
+    {"HASH verify tests",           "CryptoPkg.BaseCryptLib", NULL, NULL, &mHashTestNum,           mHashTest},
+    {"HMAC verify tests",           "CryptoPkg.BaseCryptLib", NULL, NULL, &mHmacTestNum,           mHmacTest},
+    {"BlockCipher verify tests",    "CryptoPkg.BaseCryptLib", NULL, NULL, &mBlockCipherTestNum,    mBlockCipherTest},
+    {"RSA verify tests",            "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaTestNum,            mRsaTest},
+    {"RSACert verify tests",        "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaCertTestNum,        mRsaCertTest},
+    {"PKCS7 verify tests",          "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs7TestNum,          mPkcs7Test},
+    {"PKCS5 verify tests",          "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs5TestNum,          mPkcs5Test},
+    {"Authenticode verify tests",   "CryptoPkg.BaseCryptLib", NULL, NULL, &mAuthenticodeTestNum,   mAuthenticodeTest},
+    {"ImageTimestamp verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mImageTimestampTestNum, mImageTimestampTest},
+    {"DH verify tests",             "CryptoPkg.BaseCryptLib", NULL, NULL, &mDhTestNum,             mDhTest},
+    {"PRNG verify tests",           "CryptoPkg.BaseCryptLib", NULL, NULL, &mPrngTestNum,           mPrngTest},
+    {"OAEP encrypt verify tests",   "CryptoPkg.BaseCryptLib", NULL, NULL, &mOaepTestNum,           mOaepTest},
+};
+
+EFI_STATUS
+EFIAPI
+CreateUnitTest (
+    IN     CHAR8*                     UnitTestName,
+    IN     CHAR8*                     UnitTestVersion,
+    IN OUT UNIT_TEST_FRAMEWORK_HANDLE* Framework
+) {
+    EFI_STATUS                  Status;
+    UINTN                       SuiteIndex;
+    UINTN                       TestIndex;
+
+    if ( Framework == NULL || UnitTestVersion == NULL || UnitTestName == NULL) {
+        return EFI_INVALID_PARAMETER;
+    }
+    Status = EFI_SUCCESS;
+    //
+    // Start setting up the test framework for running the tests.
+    //
+    Status = InitUnitTestFramework (Framework, UnitTestName, gEfiCallerBaseName, UnitTestVersion);
+    if (EFI_ERROR (Status)) {
+        DEBUG((DEBUG_ERROR, "Failed in InitUnitTestFramework. Status = %r\n", Status));
+        goto EXIT;
+    }
+
+    for (SuiteIndex = 0; SuiteIndex < ARRAY_SIZE(mSuiteDesc); SuiteIndex++) {
+        UNIT_TEST_SUITE_HANDLE Suite = NULL;
+        Status = CreateUnitTestSuite (&Suite, *Framework, mSuiteDesc[SuiteIndex].Title, mSuiteDesc[SuiteIndex].Package, mSuiteDesc[SuiteIndex].Sup, mSuiteDesc[SuiteIndex].Tdn);
+        if (EFI_ERROR (Status)) {
+            Status = EFI_OUT_OF_RESOURCES;
+            goto EXIT;
+        }
+        for (TestIndex = 0; TestIndex < *mSuiteDesc[SuiteIndex].TestNum; TestIndex++) {
+            AddTestCase (Suite, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->Description, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->ClassName, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->Func, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->PreReq, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->CleanUp, (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)->Context);
+        }
+    }
+    EXIT:
+    return Status;
+}
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipherTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipherTests.c
new file mode 100644
index 000000000000..b3493073965f
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipherTests.c
@@ -0,0 +1,293 @@
+/** @file
+  Application for Block Cipher Primitives Validation.
+
+Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "TestBaseCryptLib.h"
+
+//
+// TDES test vectors are extracted from OpenSSL 0.9.8l, crypto\des\destest.c
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcbData[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcbKey[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcbCipher[] = {
+  0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7,
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcb2Cipher[] = {
+  0x92, 0x95, 0xB5, 0x9B, 0xB3, 0x84, 0x73, 0x6E,
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesCbcData[] = {
+  0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
+  0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
+  0x68, 0x65, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesCbcKey[] = {
+  0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
+  0xf1, 0xe0, 0xd3, 0xc2, 0xb5, 0xa4, 0x97, 0x86,
+  0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TdesCbcIvec[] = {
+  0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesCbc3Cipher[] = {
+  0x3F, 0xE3, 0x01, 0xC9, 0x62, 0xAC, 0x01, 0xD0,
+  0x22, 0x13, 0x76, 0x3C, 0x1C, 0xBD, 0x4C, 0xDC,
+  0x79, 0x96, 0x57, 0xC0, 0x64, 0xEC, 0xF5, 0xD4
+  };
+
+//
+// AES test vectors are from NIST KAT of AES
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128EcbData[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128EcbKey[] = {
+  0x10, 0xa5, 0x88, 0x69, 0xd7, 0x4b, 0xe5, 0xa3, 0x74, 0xcf, 0x86, 0x7c, 0xfb, 0x47, 0x38, 0x59
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128EcbCipher[] = {
+  0x6d, 0x25, 0x1e, 0x69, 0x44, 0xb0, 0x51, 0xe0, 0x4e, 0xaa, 0x6f, 0xb4, 0xdb, 0xf7, 0x84, 0x65
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes192EcbData[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes192EcbKey[] = {
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes192EcbCipher[] = {
+  0xdd, 0x8a, 0x49, 0x35, 0x14, 0x23, 0x1c, 0xbf, 0x56, 0xec, 0xce, 0xe4, 0xc4, 0x08, 0x89, 0xfb
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes256EcbData[] = {
+  0x01, 0x47, 0x30, 0xf8, 0x0a, 0xc6, 0x25, 0xfe, 0x84, 0xf0, 0x26, 0xc6, 0x0b, 0xfd, 0x54, 0x7d
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes256EcbKey[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes256EcbCipher[] = {
+  0x5c, 0x9d, 0x84, 0x4e, 0xd4, 0x6f, 0x98, 0x85, 0x08, 0x5e, 0x5d, 0x6a, 0x4f, 0x94, 0xc7, 0xd7
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128CbcData[] = {
+  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128CbcKey[] = {
+  0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128CbcIvec[] = {
+  0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Aes128CbcCipher[] = {
+  0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a, 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a,
+  0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9, 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1
+  };
+
+//
+// ARC4 Test Vector defined in "Appendix A.1 Test Vectors from [CRYPTLIB]" of
+// IETF Draft draft-kaukonen-cipher-arcfour-03 ("A Stream Cipher Encryption Algorithm 'Arcfour'").
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Data[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Key[] = {
+  0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Cipher[] = {
+  0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79
+  };
+
+
+typedef
+UINTN
+(EFIAPI *EFI_BLOCK_CIPHER_GET_CONTEXT_SIZE) (
+  VOID
+  );
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_BLOCK_CIPHER_INIT) (
+  OUT  VOID         *BlockCipherContext,
+  IN   CONST UINT8  *Key,
+  IN   UINTN        KeyLength
+  );
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT) (
+  IN   VOID         *BlockCipherContext,
+  IN   CONST UINT8  *Input,
+  IN   UINTN        InputSize,
+  OUT  UINT8        *Output
+  );
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_BLOCK_CIPHER_CBC_ENCRYPT_DECRYPT) (
+  IN   VOID         *BlockCipherContext,
+  IN   CONST UINT8  *Input,
+  IN   UINTN        InputSize,
+  IN   CONST UINT8  *Ivec,
+  OUT  UINT8        *Output
+  );
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_BLOCK_CIPHER_RESET) (
+  IN OUT  VOID  *BlockCipherContext
+  );
+
+typedef struct {
+  EFI_BLOCK_CIPHER_GET_CONTEXT_SIZE      GetContextSize;
+  EFI_BLOCK_CIPHER_INIT                  Init;
+  EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT   EcbEncrypt;
+  EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT   EcbDecrypt;
+  EFI_BLOCK_CIPHER_CBC_ENCRYPT_DECRYPT   CbcEncrypt;
+  EFI_BLOCK_CIPHER_CBC_ENCRYPT_DECRYPT   CbcDecrypt;
+  EFI_BLOCK_CIPHER_RESET                 Reset;
+  CONST UINT8                            *Key;
+  UINTN                                  KeySize;
+  CONST UINT8                            *Ivec;
+  CONST UINT8                            *Data;
+  UINTN                                  DataSize;
+  CONST UINT8                            *Cipher;
+  UINTN                                  CipherSize;
+  VOID                                   *Ctx;
+} BLOCK_CIPHER_TEST_CONTEXT;
+
+// These are commented out as they are deprecated, but are left in should they be used again
+//BLOCK_CIPHER_TEST_CONTEXT mTdesEcbTestCtx   = {TdesGetContextSize, TdesInit, TdesEcbEncrypt, TdesEcbDecrypt, NULL,           NULL,           NULL,      TdesEcbKey,   64,              NULL,          TdesEcbData,   8,                     TdesEcbCipher,   8};
+//BLOCK_CIPHER_TEST_CONTEXT mTdesCbcTestCtx   = {TdesGetContextSize, TdesInit, NULL,           NULL,           TdesCbcEncrypt, TdesCbcDecrypt, NULL,      TdesCbcKey,   192,             TdesCbcIvec,   TdesCbcData,   sizeof(TdesCbcData),   TdesCbc3Cipher,  sizeof(TdesCbc3Cipher)};
+//BLOCK_CIPHER_TEST_CONTEXT mAes128EcbTestCtx = {AesGetContextSize,  AesInit,  AesEcbEncrypt,  AesEcbDecrypt,  NULL,           NULL,           NULL,      Aes128EcbKey, 128,             NULL,          Aes128EcbData, sizeof(Aes128EcbData), Aes128EcbCipher, sizeof(Aes128EcbCipher)};
+//BLOCK_CIPHER_TEST_CONTEXT mAes192EcbTestCtx = {AesGetContextSize,  AesInit,  AesEcbEncrypt,  AesEcbDecrypt,  NULL,           NULL,           NULL,      Aes192EcbKey, 192,             NULL,          Aes192EcbData, sizeof(Aes192EcbData), Aes192EcbCipher, sizeof(Aes192EcbCipher)};
+//BLOCK_CIPHER_TEST_CONTEXT mAes256EcbTestCtx = {AesGetContextSize,  AesInit,  AesEcbEncrypt,  AesEcbDecrypt,  NULL,           NULL,           NULL,      Aes256EcbKey, 256,             NULL,          Aes256EcbData, sizeof(Aes256EcbData), Aes256EcbCipher, sizeof(Aes256EcbCipher)};
+//BLOCK_CIPHER_TEST_CONTEXT mArc4TestCtx      = {Arc4GetContextSize, Arc4Init, Arc4Encrypt,    (EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT), Arc4Decrypt,    NULL,           NULL,           Arc4Reset, Arc4Key,      sizeof(Arc4Key), NULL,          Arc4Data,      sizeof(Arc4Data),      Arc4Cipher,      sizeof(Arc4Cipher)};
+BLOCK_CIPHER_TEST_CONTEXT mAes128CbcTestCtx = {AesGetContextSize,  AesInit,  NULL,           NULL,           AesCbcEncrypt,  AesCbcDecrypt,  NULL,      Aes128CbcKey, 128,             Aes128CbcIvec, Aes128CbcData, sizeof(Aes128CbcData), Aes128CbcCipher, sizeof(Aes128CbcCipher)};
+
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyBLockCiperPreReq (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  BLOCK_CIPHER_TEST_CONTEXT *TestContext;
+  UINTN             CtxSize;
+
+  TestContext = Context;
+  CtxSize = TestContext->GetContextSize ();
+  TestContext->Ctx = AllocatePool (CtxSize);
+  if (TestContext->Ctx == NULL) {
+    return UNIT_TEST_ERROR_TEST_FAILED;
+  }
+
+  return UNIT_TEST_PASSED;
+}
+
+VOID
+EFIAPI
+TestVerifyBLockCiperCleanUp (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  BLOCK_CIPHER_TEST_CONTEXT *TestContext;
+
+  TestContext = Context;
+  if (TestContext->Ctx != NULL) {
+    FreePool (TestContext->Ctx);
+  }
+}
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyBLockCiper (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  UINT8    Encrypt[256];
+  UINT8    Decrypt[256];
+  BOOLEAN  Status;
+  BLOCK_CIPHER_TEST_CONTEXT *TestContext;
+
+  TestContext = Context;
+
+  ZeroMem (Encrypt, sizeof (Encrypt));
+  ZeroMem (Decrypt, sizeof (Decrypt));
+
+  Status = TestContext->Init (TestContext->Ctx, TestContext->Key, TestContext->KeySize);
+  UT_ASSERT_TRUE (Status);
+
+  if (TestContext->Ivec == NULL) {
+    Status = TestContext->EcbEncrypt (TestContext->Ctx, TestContext->Data, TestContext->DataSize, Encrypt);
+    UT_ASSERT_TRUE (Status);
+
+    if (TestContext->Reset != NULL) {
+      Status = TestContext->Reset (TestContext->Ctx);
+      UT_ASSERT_TRUE (Status);
+    }
+
+    Status = TestContext->EcbDecrypt (TestContext->Ctx, Encrypt, TestContext->DataSize, Decrypt);
+    UT_ASSERT_TRUE (Status);
+
+  } else {
+    Status = TestContext->CbcEncrypt (TestContext->Ctx, TestContext->Data, TestContext->DataSize, TestContext->Ivec, Encrypt);
+    UT_ASSERT_TRUE (Status);
+
+    if (TestContext->Reset != NULL) {
+      Status = TestContext->Reset (TestContext->Ctx);
+      UT_ASSERT_TRUE (Status);
+    }
+
+    Status = TestContext->CbcDecrypt (TestContext->Ctx, Encrypt, TestContext->DataSize, TestContext->Ivec, Decrypt);
+    UT_ASSERT_TRUE (Status);
+  }
+
+  UT_ASSERT_MEM_EQUAL (Encrypt, TestContext->Cipher, TestContext->CipherSize);
+  UT_ASSERT_MEM_EQUAL (Decrypt, TestContext->Data,   TestContext->DataSize);
+
+  return UNIT_TEST_PASSED;
+}
+
+TEST_DESC mBlockCipherTest[] = {
+    //
+    // -----Description-------------------------Class-------------------------Function---------------Pre---------------------------Post------------------Context
+    //
+    {"TestVerifyAes128Cbc()",  "CryptoPkg.BaseCryptLib.BlockCipher",   TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mAes128CbcTestCtx},
+    // These are commented out as these functions have been deprecated, but they have been left in for future reference
+    //{"TestVerifyTdesEcb()",    "CryptoPkg.BaseCryptLib.BlockCipher",   TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mTdesEcbTestCtx},
+    //{"TestVerifyTdesCbc()",    "CryptoPkg.BaseCryptLib.BlockCipher",   TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mTdesCbcTestCtx},
+    //{"TestVerifyAes128Ecb()",  "CryptoPkg.BaseCryptLib.BlockCipher",   TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mAes128EcbTestCtx},
+    //{"TestVerifyAes192Ecb()",  "CryptoPkg.BaseCryptLib.BlockCipher",   TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mAes192EcbTestCtx},
+    //{"TestVerifyAes256Ecb()",  "CryptoPkg.BaseCryptLib.BlockCipher",   TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mAes256EcbTestCtx},
+    //{"TestVerifyArc4()",       "CryptoPkg.BaseCryptLib.BlockCipher",   TestVerifyBLockCiper, TestVerifyBLockCiperPreReq, TestVerifyBLockCiperCleanUp, &mArc4TestCtx},
+};
+
+UINTN mBlockCipherTestNum = ARRAY_SIZE(mBlockCipherTest);
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c
new file mode 100644
index 000000000000..422b990f2c2d
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c
@@ -0,0 +1,106 @@
+/** @file
+  Application for Diffie-Hellman Primitives Validation.
+
+Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "TestBaseCryptLib.h"
+
+VOID    *mDh1;
+VOID    *mDh2;
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyDhPreReq (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  mDh1 = DhNew ();
+  if (mDh1 == NULL) {
+    return UNIT_TEST_ERROR_TEST_FAILED;
+  }
+
+  mDh2 = DhNew ();
+  if (mDh2 == NULL) {
+    return UNIT_TEST_ERROR_TEST_FAILED;
+  }
+
+  return UNIT_TEST_PASSED;
+}
+
+VOID
+EFIAPI
+TestVerifyDhCleanUp (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  if (mDh1 != NULL) {
+    DhFree (mDh1);
+    mDh1 = NULL;
+  }
+  if (mDh2 != NULL) {
+    DhFree (mDh2);
+    mDh2 = NULL;
+  }
+}
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyDhGenerateKey (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  UINT8   Prime[64];
+  UINT8   PublicKey1[64];
+  UINTN   PublicKey1Length;
+  UINT8   PublicKey2[64];
+  UINTN   PublicKey2Length;
+  UINT8   Key1[64];
+  UINTN   Key1Length;
+  UINT8   Key2[64];
+  UINTN   Key2Length;
+  BOOLEAN Status;
+
+  //
+  // Initialize Key Length
+  //
+  PublicKey1Length = sizeof (PublicKey1);
+  PublicKey2Length = sizeof (PublicKey2);
+  Key1Length       = sizeof (Key1);
+  Key2Length       = sizeof (Key2);
+
+  Status = DhGenerateParameter (mDh1, 2, 64, Prime);
+  UT_ASSERT_TRUE (Status);
+
+  Status = DhSetParameter (mDh2, 2, 64, Prime);
+  UT_ASSERT_TRUE (Status);
+
+  Status = DhGenerateKey (mDh1, PublicKey1, &PublicKey1Length);
+  UT_ASSERT_TRUE (Status);
+
+  Status = DhGenerateKey (mDh2, PublicKey2, &PublicKey2Length);
+  UT_ASSERT_TRUE (Status);
+
+  Status = DhComputeKey (mDh1, PublicKey2, PublicKey2Length, Key1, &Key1Length);
+  UT_ASSERT_TRUE (Status);
+
+  Status = DhComputeKey (mDh2, PublicKey1, PublicKey1Length, Key2, &Key2Length);
+  UT_ASSERT_TRUE (Status);
+
+  UT_ASSERT_EQUAL (Key1Length, Key2Length);
+
+  UT_ASSERT_MEM_EQUAL (Key1, Key2, Key1Length);
+
+  return UNIT_TEST_PASSED;
+}
+
+TEST_DESC mDhTest[] = {
+    //
+    // -----Description--------------------------------Class---------------------Function----------------Pre-----------------Post------------Context
+    //
+    {"TestVerifyDhGenerateKey()",        "CryptoPkg.BaseCryptLib.Dh",   TestVerifyDhGenerateKey,  TestVerifyDhPreReq, TestVerifyDhCleanUp, NULL},
+};
+
+UINTN mDhTestNum = ARRAY_SIZE(mDhTest);
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c
new file mode 100644
index 000000000000..bc47c5736246
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c
@@ -0,0 +1,197 @@
+/** @file
+  Application for Hash Primitives Validation.
+
+Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "TestBaseCryptLib.h"
+
+//
+// Max Known Digest Size is SHA512 Output (64 bytes) by far
+//
+#define MAX_DIGEST_SIZE    64
+
+//
+// Message string for digest validation
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *HashData = "abc";
+
+//
+// Result for MD5("abc"). (From "A.5 Test suite" of IETF RFC1321)
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Md5Digest[MD5_DIGEST_SIZE] = {
+  0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, 0xd6, 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72
+
+  };
+
+//
+// Result for SHA-1("abc"). (From "A.1 SHA-1 Example" of NIST FIPS 180-2)
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha1Digest[SHA1_DIGEST_SIZE] = {
+  0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c,
+  0x9c, 0xd0, 0xd8, 0x9d
+  };
+
+//
+// Result for SHA-256("abc"). (From "B.1 SHA-256 Example" of NIST FIPS 180-2)
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha256Digest[SHA256_DIGEST_SIZE] = {
+  0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
+  0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
+  };
+
+//
+// Result for SHA-384("abc"). (From "D.1 SHA-384 Example" of NIST FIPS 180-2)
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha384Digest[SHA384_DIGEST_SIZE] = {
+  0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
+  0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
+  0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7
+  };
+
+//
+// Result for SHA-512("abc"). (From "C.1 SHA-512 Example" of NIST FIPS 180-2)
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha512Digest[SHA512_DIGEST_SIZE] = {
+  0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
+  0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
+  0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
+  0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f
+  };
+
+typedef
+UINTN
+(EFIAPI *EFI_HASH_GET_CONTEXT_SIZE) (
+  VOID
+  );
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_HASH_INIT) (
+  OUT  VOID  *HashContext
+  );
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_HASH_UPDATE) (
+  IN OUT  VOID        *HashContext,
+  IN      CONST VOID  *Data,
+  IN      UINTN       DataSize
+  );
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_HASH_FINAL) (
+  IN OUT  VOID   *HashContext,
+  OUT     UINT8  *HashValue
+  );
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_HASH_ALL) (
+  IN   CONST VOID  *Data,
+  IN   UINTN       DataSize,
+  OUT  UINT8       *HashValue
+  );
+
+typedef struct {
+  UINT32                     DigestSize;
+  EFI_HASH_GET_CONTEXT_SIZE  GetContextSize;
+  EFI_HASH_INIT              HashInit;
+  EFI_HASH_UPDATE            HashUpdate;
+  EFI_HASH_FINAL             HashFinal;
+  EFI_HASH_ALL               HashAll;
+  CONST UINT8                *Digest;
+  VOID                       *HashCtx;
+} HASH_TEST_CONTEXT;
+
+HASH_TEST_CONTEXT       mMd5TestCtx    = {MD5_DIGEST_SIZE,    Md5GetContextSize,    Md5Init,    Md5Update,    Md5Final,    Md5HashAll,    Md5Digest};
+HASH_TEST_CONTEXT       mSha1TestCtx   = {SHA1_DIGEST_SIZE,   Sha1GetContextSize,   Sha1Init,   Sha1Update,   Sha1Final,   Sha1HashAll,   Sha1Digest};
+HASH_TEST_CONTEXT       mSha256TestCtx = {SHA256_DIGEST_SIZE, Sha256GetContextSize, Sha256Init, Sha256Update, Sha256Final, Sha256HashAll, Sha256Digest};
+HASH_TEST_CONTEXT       mSha384TestCtx = {SHA384_DIGEST_SIZE, Sha384GetContextSize, Sha384Init, Sha384Update, Sha384Final, Sha384HashAll, Sha384Digest};
+HASH_TEST_CONTEXT       mSha512TestCtx = {SHA512_DIGEST_SIZE, Sha512GetContextSize, Sha512Init, Sha512Update, Sha512Final, Sha512HashAll, Sha512Digest};
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyHashPreReq (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  HASH_TEST_CONTEXT *HashTestContext;
+  UINTN             CtxSize;
+
+  HashTestContext = Context;
+  CtxSize = HashTestContext->GetContextSize ();
+  HashTestContext->HashCtx = AllocatePool (CtxSize);
+  if (HashTestContext->HashCtx == NULL) {
+    return UNIT_TEST_ERROR_TEST_FAILED;
+  }
+
+  return UNIT_TEST_PASSED;
+}
+
+VOID
+EFIAPI
+TestVerifyHashCleanUp (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  HASH_TEST_CONTEXT *HashTestContext;
+
+  HashTestContext = Context;
+  if (HashTestContext->HashCtx != NULL) {
+    FreePool (HashTestContext->HashCtx);
+  }
+}
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyHash (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  UINTN    DataSize;
+  UINT8    Digest[MAX_DIGEST_SIZE];
+  BOOLEAN  Status;
+  HASH_TEST_CONTEXT *HashTestContext;
+
+  HashTestContext = Context;
+
+  DataSize = AsciiStrLen (HashData);
+
+  ZeroMem (Digest, MAX_DIGEST_SIZE);
+
+  Status  = HashTestContext->HashInit (HashTestContext->HashCtx);
+  UT_ASSERT_TRUE (Status);
+
+  Status  = HashTestContext->HashUpdate (HashTestContext->HashCtx, HashData, DataSize);
+  UT_ASSERT_TRUE (Status);
+
+  Status  = HashTestContext->HashFinal (HashTestContext->HashCtx, Digest);
+  UT_ASSERT_TRUE (Status);
+
+  UT_ASSERT_MEM_EQUAL (Digest, HashTestContext->Digest, HashTestContext->DigestSize);
+
+  ZeroMem (Digest, MAX_DIGEST_SIZE);
+  Status  = HashTestContext->HashAll (HashData, DataSize, Digest);
+  UT_ASSERT_TRUE (Status);
+
+  UT_ASSERT_MEM_EQUAL (Digest, HashTestContext->Digest, HashTestContext->DigestSize);
+
+  return UNIT_TEST_PASSED;
+}
+
+TEST_DESC mHashTest[] = {
+    //
+    // -----Description----------------Class---------------------Function---------------Pre------------------Post------------Context
+    //
+    {"TestVerifyMd5()",    "CryptoPkg.BaseCryptLib.Hash",   TestVerifyHash, TestVerifyHashPreReq, TestVerifyHashCleanUp, &mMd5TestCtx},
+    {"TestVerifySha1()",   "CryptoPkg.BaseCryptLib.Hash",   TestVerifyHash, TestVerifyHashPreReq, TestVerifyHashCleanUp, &mSha1TestCtx},
+    {"TestVerifySha256()", "CryptoPkg.BaseCryptLib.Hash",   TestVerifyHash, TestVerifyHashPreReq, TestVerifyHashCleanUp, &mSha256TestCtx},
+    {"TestVerifySha384()", "CryptoPkg.BaseCryptLib.Hash",   TestVerifyHash, TestVerifyHashPreReq, TestVerifyHashCleanUp, &mSha384TestCtx},
+    {"TestVerifySha512()", "CryptoPkg.BaseCryptLib.Hash",   TestVerifyHash, TestVerifyHashPreReq, TestVerifyHashCleanUp, &mSha512TestCtx},
+};
+
+UINTN mHashTestNum = ARRAY_SIZE(mHashTest);
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c
new file mode 100644
index 000000000000..2e0cdd7c4570
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c
@@ -0,0 +1,184 @@
+/** @file
+  Application for HMAC Primitives Validation.
+
+Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "TestBaseCryptLib.h"
+
+//
+// Max Known Digest Size is SHA512 Output (64 bytes) by far
+//
+#define MAX_DIGEST_SIZE    64
+
+//
+// Data string for HMAC validation
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *HmacData = "Hi There";
+
+//
+// Key value for HMAC-MD5 validation. (From "2. Test Cases for HMAC-MD5" of IETF RFC2202)
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacMd5Key[16] = {
+  0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b
+  };
+
+//
+// Result for HMAC-MD5("Hi There"). (From "2. Test Cases for HMAC-MD5" of IETF RFC2202)
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacMd5Digest[] = {
+  0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, 0x13, 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d
+  };
+
+//
+// Key value for HMAC-SHA-1 validation. (From "3. Test Cases for HMAC-SHA-1" of IETF RFC2202)
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha1Key[20] = {
+  0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+  0x0b, 0x0b, 0x0b, 0x0b
+  };
+
+//
+// Result for HMAC-SHA-1 ("Hi There"). (From "3. Test Cases for HMAC-SHA-1" of IETF RFC2202)
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha1Digest[] = {
+  0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e,
+  0xf1, 0x46, 0xbe, 0x00
+  };
+
+//
+// Key value for HMAC-SHA-256 validation. (From "4. Test Vectors" of IETF RFC4231)
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha256Key[20] = {
+  0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+  0x0b, 0x0b, 0x0b, 0x0b
+  };
+
+//
+// Result for HMAC-SHA-256 ("Hi There"). (From "4. Test Vectors" of IETF RFC4231)
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha256Digest[] = {
+  0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b,
+  0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7
+  };
+
+typedef
+VOID*
+(EFIAPI *EFI_HMAC_NEW) (
+  VOID
+  );
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_HMAC_INIT) (
+  IN OUT  VOID        *HashContext,
+  IN   CONST UINT8    *Key,
+  IN   UINTN           KeySize
+  );
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_HMAC_UPDATE) (
+  IN OUT  VOID        *HashContext,
+  IN      CONST VOID  *Data,
+  IN      UINTN       DataSize
+  );
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_HMAC_FINAL) (
+  IN OUT  VOID   *HashContext,
+  OUT     UINT8  *HashValue
+  );
+
+typedef struct {
+  UINT32                     DigestSize;
+  EFI_HMAC_NEW               HmacNew;
+  EFI_HMAC_INIT              HmacInit;
+  EFI_HMAC_UPDATE            HmacUpdate;
+  EFI_HMAC_FINAL             HmacFinal;
+  CONST UINT8                *Key;
+  UINTN                      KeySize;
+  CONST UINT8                *Digest;
+  VOID                       *HmacCtx;
+} HMAC_TEST_CONTEXT;
+
+// These functions have been deprecated but they've been left commented out for future reference
+//HMAC_TEST_CONTEXT       mHmacMd5TestCtx    = {MD5_DIGEST_SIZE,    HmacMd5New,    HmacMd5SetKey,    HmacMd5Update,    HmacMd5Final,    HmacMd5Key,    sizeof(HmacMd5Key),    HmacMd5Digest};
+//HMAC_TEST_CONTEXT       mHmacSha1TestCtx   = {SHA1_DIGEST_SIZE,   HmacSha1New,   HmacSha1SetKey,   HmacSha1Update,   HmacSha1Final,   HmacSha1Key,   sizeof(HmacSha1Key),   HmacSha1Digest};
+HMAC_TEST_CONTEXT       mHmacSha256TestCtx = {SHA256_DIGEST_SIZE, HmacSha256New, HmacSha256SetKey, HmacSha256Update, HmacSha256Final, HmacSha256Key, sizeof(HmacSha256Key), HmacSha256Digest};
+
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyHmacPreReq (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  HMAC_TEST_CONTEXT *HmacTestContext;
+
+  HmacTestContext = Context;
+  HmacTestContext->HmacCtx = HmacTestContext->HmacNew();
+  if (HmacTestContext->HmacCtx == NULL) {
+    return UNIT_TEST_ERROR_TEST_FAILED;
+  }
+
+  return UNIT_TEST_PASSED;
+}
+
+VOID
+EFIAPI
+TestVerifyHmacCleanUp (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  HMAC_TEST_CONTEXT *HmacTestContext;
+
+  HmacTestContext = Context;
+  if (HmacTestContext->HmacCtx != NULL) {
+    FreePool (HmacTestContext->HmacCtx);
+  }
+}
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyHmac (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  UINT8    Digest[MAX_DIGEST_SIZE];
+  BOOLEAN  Status;
+  HMAC_TEST_CONTEXT *HmacTestContext;
+
+  HmacTestContext = Context;
+
+  ZeroMem (Digest, MAX_DIGEST_SIZE);
+
+  Status  = HmacTestContext->HmacInit (HmacTestContext->HmacCtx, HmacTestContext->Key, HmacTestContext->KeySize);
+  UT_ASSERT_TRUE (Status);
+
+  Status  = HmacTestContext->HmacUpdate (HmacTestContext->HmacCtx, HmacData, 8);
+  UT_ASSERT_TRUE (Status);
+
+  Status  = HmacTestContext->HmacFinal (HmacTestContext->HmacCtx, Digest);
+  UT_ASSERT_TRUE (Status);
+
+  UT_ASSERT_MEM_EQUAL (Digest, HmacTestContext->Digest, HmacTestContext->DigestSize);
+
+  return UNIT_TEST_PASSED;
+}
+
+TEST_DESC mHmacTest[] = {
+    //
+    // -----Description---------------------Class---------------------Function---------------Pre------------------Post------------Context
+    //
+    {"TestVerifyHmacSha256()", "CryptoPkg.BaseCryptLib.Hmac",   TestVerifyHmac, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacSha256TestCtx},
+    // These functions have been deprecated but they've been left commented out for future reference
+    //{"TestVerifyHmacMd5()",    "CryptoPkg.BaseCryptLib.Hmac",   TestVerifyHmac, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacMd5TestCtx},
+    //{"TestVerifyHmacSha1()",   "CryptoPkg.BaseCryptLib.Hmac",   TestVerifyHmac, TestVerifyHmacPreReq, TestVerifyHmacCleanUp, &mHmacSha1TestCtx},
+
+};
+
+UINTN mHmacTestNum = ARRAY_SIZE(mHmacTest);
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncryptTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncryptTests.c
new file mode 100644
index 000000000000..404020f96726
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncryptTests.c
@@ -0,0 +1,308 @@
+/** @file
+  This is a unit test for RSA OAEP encrypt.
+
+  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "TestBaseCryptLib.h"
+
+CONST  UINT8  RandSeed[] = "This is the random seed for PRNG verification.";
+
+//
+// Self signed X509 certificate
+// CN = ca.self
+// O = Intel
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 SelfTestCert[] = {
+  0x30, 0x82, 0x03, 0x90, 0x30, 0x82, 0x02, 0x78, 0x02, 0x09, 0x00, 0xE4, 0xDF, 0x47, 0x80, 0xEF,
+  0x4B, 0x3C, 0x6D, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B,
+  0x05, 0x00, 0x30, 0x81, 0x89, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
+  0x43, 0x4E, 0x31, 0x11, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x08, 0x53, 0x68, 0x61,
+  0x6E, 0x67, 0x48, 0x61, 0x69, 0x31, 0x11, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0C, 0x08,
+  0x53, 0x68, 0x61, 0x6E, 0x67, 0x48, 0x61, 0x69, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x04,
+  0x0A, 0x0C, 0x05, 0x49, 0x6E, 0x74, 0x65, 0x6C, 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04,
+  0x0B, 0x0C, 0x03, 0x46, 0x49, 0x45, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
+  0x07, 0x63, 0x61, 0x2E, 0x73, 0x65, 0x6C, 0x66, 0x31, 0x24, 0x30, 0x22, 0x06, 0x09, 0x2A, 0x86,
+  0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x01, 0x16, 0x15, 0x7A, 0x68, 0x69, 0x63, 0x68, 0x61, 0x6F,
+  0x2E, 0x67, 0x61, 0x6F, 0x40, 0x69, 0x6E, 0x74, 0x65, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x30, 0x1E,
+  0x17, 0x0D, 0x31, 0x39, 0x30, 0x33, 0x32, 0x37, 0x30, 0x35, 0x35, 0x37, 0x30, 0x39, 0x5A, 0x17,
+  0x0D, 0x32, 0x30, 0x30, 0x33, 0x32, 0x36, 0x30, 0x35, 0x35, 0x37, 0x30, 0x39, 0x5A, 0x30, 0x81,
+  0x89, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x11,
+  0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x08, 0x53, 0x68, 0x61, 0x6E, 0x67, 0x48, 0x61,
+  0x69, 0x31, 0x11, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0C, 0x08, 0x53, 0x68, 0x61, 0x6E,
+  0x67, 0x48, 0x61, 0x69, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x05, 0x49,
+  0x6E, 0x74, 0x65, 0x6C, 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x0C, 0x03, 0x46,
+  0x49, 0x45, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x07, 0x63, 0x61, 0x2E,
+  0x73, 0x65, 0x6C, 0x66, 0x31, 0x24, 0x30, 0x22, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
+  0x01, 0x09, 0x01, 0x16, 0x15, 0x7A, 0x68, 0x69, 0x63, 0x68, 0x61, 0x6F, 0x2E, 0x67, 0x61, 0x6F,
+  0x40, 0x69, 0x6E, 0x74, 0x65, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D,
+  0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01,
+  0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xBC, 0xE4, 0x67, 0xDC, 0xC7,
+  0xEA, 0x6F, 0x8A, 0xA7, 0xCC, 0xB2, 0x54, 0x47, 0x48, 0x6A, 0xE2, 0x39, 0xFF, 0xC2, 0x48, 0x58,
+  0x34, 0x07, 0x03, 0x6D, 0x39, 0xB3, 0x67, 0x46, 0x4C, 0xBC, 0xA0, 0xFA, 0x4E, 0x64, 0x23, 0x56,
+  0x47, 0x7B, 0xC9, 0x1A, 0x2A, 0x55, 0x42, 0x54, 0x10, 0x18, 0x30, 0x92, 0x60, 0x30, 0x5B, 0x9E,
+  0xC0, 0x65, 0xD2, 0xD4, 0x05, 0x4A, 0xA6, 0x10, 0x66, 0x04, 0xA9, 0x54, 0x4E, 0xEE, 0x49, 0x39,
+  0x43, 0x65, 0x1E, 0x2E, 0x28, 0xDE, 0x79, 0x24, 0xA9, 0x7E, 0xD8, 0x5B, 0xBC, 0x2F, 0x46, 0x6A,
+  0xB7, 0xB6, 0x0D, 0x17, 0x88, 0x37, 0x52, 0x5C, 0xFE, 0x93, 0xC0, 0xE2, 0xFD, 0x6A, 0x08, 0x1B,
+  0xFB, 0xD1, 0x87, 0xBD, 0xBD, 0x58, 0x57, 0x2C, 0x06, 0x5D, 0xD2, 0x7D, 0x52, 0xE2, 0x49, 0x8E,
+  0xDC, 0xE5, 0x26, 0xBD, 0x92, 0x60, 0xB0, 0x3F, 0x58, 0x5E, 0x52, 0xD7, 0x91, 0xDA, 0x93, 0x62,
+  0x8D, 0x71, 0x80, 0x53, 0xBA, 0x15, 0xC4, 0x1F, 0xF3, 0xBD, 0xE0, 0xC5, 0xA4, 0xB8, 0xD3, 0x64,
+  0x12, 0x14, 0x1B, 0x11, 0x6B, 0x7B, 0xC2, 0x92, 0xC7, 0xE2, 0x94, 0x0B, 0xB8, 0x67, 0x38, 0x48,
+  0x63, 0x11, 0x74, 0x25, 0x7C, 0x37, 0xC3, 0xB2, 0xAE, 0xD9, 0xA7, 0x17, 0x9C, 0x4B, 0x9D, 0x6C,
+  0x27, 0xB0, 0x87, 0x16, 0x6B, 0xF2, 0x96, 0xE5, 0x1D, 0x37, 0x27, 0xDE, 0xF2, 0x98, 0xB7, 0x81,
+  0x08, 0xD9, 0x7A, 0xBA, 0x84, 0x14, 0x61, 0x60, 0x48, 0xCE, 0xCE, 0x51, 0x73, 0xF4, 0xDB, 0xF1,
+  0x5F, 0x7A, 0x17, 0x71, 0x4F, 0xC1, 0x0B, 0xCE, 0xC7, 0x31, 0xC1, 0x4E, 0xA3, 0xEE, 0x6F, 0x72,
+  0x97, 0x90, 0xFB, 0x8B, 0x54, 0x9F, 0x82, 0x5B, 0x48, 0x5A, 0xF1, 0xAD, 0x8B, 0x3A, 0xCD, 0xCA,
+  0xB2, 0x8B, 0x7A, 0x53, 0xD4, 0xF7, 0x71, 0x16, 0x75, 0xA7, 0x35, 0x02, 0x03, 0x01, 0x00, 0x01,
+  0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03,
+  0x82, 0x01, 0x01, 0x00, 0x78, 0x64, 0xCD, 0x6F, 0xC0, 0xF9, 0xE7, 0xAB, 0x19, 0x0B, 0xA4, 0x92,
+  0x88, 0xD7, 0xE3, 0xC4, 0x9C, 0xCF, 0xF2, 0x49, 0xFC, 0xCE, 0x8C, 0xEC, 0x33, 0x3F, 0x24, 0x6F,
+  0xF7, 0xBC, 0x7C, 0x28, 0xEF, 0xAE, 0xAB, 0x7B, 0xAF, 0x84, 0xE3, 0x4E, 0x38, 0xAB, 0x66, 0x20,
+  0x7C, 0xB9, 0xE0, 0x37, 0xFD, 0x84, 0x28, 0x3C, 0xEE, 0x35, 0xC4, 0x75, 0x04, 0x43, 0xCA, 0x4F,
+  0x36, 0x60, 0xC4, 0x06, 0x16, 0x54, 0x3C, 0xF9, 0x47, 0x78, 0xBD, 0xE9, 0x7F, 0xF1, 0xE3, 0x0B,
+  0xC7, 0x7E, 0x30, 0xA4, 0xCB, 0x3A, 0xC7, 0xCD, 0x50, 0x9A, 0x6C, 0xC1, 0xE3, 0xF8, 0xF8, 0x16,
+  0xAA, 0x67, 0x7F, 0x92, 0xEE, 0x1D, 0x47, 0xF2, 0x96, 0xDF, 0xD7, 0x43, 0x64, 0x78, 0xA7, 0xD9,
+  0xF6, 0xA1, 0xD9, 0xEB, 0x5B, 0x2E, 0xC6, 0x9E, 0xEA, 0xD5, 0x04, 0x52, 0xA4, 0x73, 0x97, 0xC8,
+  0xB3, 0xFD, 0xE1, 0x7E, 0xB1, 0xA4, 0x3F, 0xF4, 0x56, 0x66, 0x8E, 0x6B, 0xBC, 0xD8, 0xF0, 0x7C,
+  0xBF, 0x58, 0xA4, 0xE0, 0x45, 0xDC, 0x2B, 0x0B, 0x2C, 0x40, 0x52, 0x4D, 0x4B, 0xA9, 0x8A, 0x77,
+  0x87, 0x31, 0xF8, 0x45, 0xD9, 0x60, 0xBB, 0xAD, 0x28, 0x29, 0x14, 0x0D, 0x0D, 0x8F, 0x0F, 0x34,
+  0x76, 0x88, 0xF3, 0x5A, 0x65, 0x00, 0x54, 0x22, 0x35, 0xBF, 0x3A, 0x2B, 0xE9, 0xB0, 0x24, 0xE5,
+  0xBE, 0xDF, 0x08, 0xA0, 0x02, 0xB2, 0x81, 0x01, 0xE8, 0x14, 0xBE, 0x6E, 0x7E, 0xBD, 0x60, 0x0C,
+  0x4A, 0xD8, 0x57, 0xA4, 0x50, 0xD3, 0xD0, 0x59, 0xCE, 0x57, 0x27, 0xE9, 0xA6, 0x16, 0x15, 0x5F,
+  0xF2, 0x6C, 0xCC, 0x57, 0x36, 0x20, 0x06, 0xE6, 0xA7, 0x24, 0x22, 0xB0, 0xB1, 0xC4, 0xBC, 0x2C,
+  0x5C, 0xCE, 0x92, 0x11, 0xFF, 0x6F, 0x8C, 0x14, 0x7E, 0xC4, 0x10, 0x02, 0xF6, 0x69, 0x86, 0x6D,
+  0x5B, 0x64, 0x81, 0x13,
+  };
+
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 PrivateKey[] = {
+  0x30, 0x82, 0x04, 0xA4, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 0xBC, 0xE4, 0x67, 0xDC,
+  0xC7, 0xEA, 0x6F, 0x8A, 0xA7, 0xCC, 0xB2, 0x54, 0x47, 0x48, 0x6A, 0xE2, 0x39, 0xFF, 0xC2, 0x48,
+  0x58, 0x34, 0x07, 0x03, 0x6D, 0x39, 0xB3, 0x67, 0x46, 0x4C, 0xBC, 0xA0, 0xFA, 0x4E, 0x64, 0x23,
+  0x56, 0x47, 0x7B, 0xC9, 0x1A, 0x2A, 0x55, 0x42, 0x54, 0x10, 0x18, 0x30, 0x92, 0x60, 0x30, 0x5B,
+  0x9E, 0xC0, 0x65, 0xD2, 0xD4, 0x05, 0x4A, 0xA6, 0x10, 0x66, 0x04, 0xA9, 0x54, 0x4E, 0xEE, 0x49,
+  0x39, 0x43, 0x65, 0x1E, 0x2E, 0x28, 0xDE, 0x79, 0x24, 0xA9, 0x7E, 0xD8, 0x5B, 0xBC, 0x2F, 0x46,
+  0x6A, 0xB7, 0xB6, 0x0D, 0x17, 0x88, 0x37, 0x52, 0x5C, 0xFE, 0x93, 0xC0, 0xE2, 0xFD, 0x6A, 0x08,
+  0x1B, 0xFB, 0xD1, 0x87, 0xBD, 0xBD, 0x58, 0x57, 0x2C, 0x06, 0x5D, 0xD2, 0x7D, 0x52, 0xE2, 0x49,
+  0x8E, 0xDC, 0xE5, 0x26, 0xBD, 0x92, 0x60, 0xB0, 0x3F, 0x58, 0x5E, 0x52, 0xD7, 0x91, 0xDA, 0x93,
+  0x62, 0x8D, 0x71, 0x80, 0x53, 0xBA, 0x15, 0xC4, 0x1F, 0xF3, 0xBD, 0xE0, 0xC5, 0xA4, 0xB8, 0xD3,
+  0x64, 0x12, 0x14, 0x1B, 0x11, 0x6B, 0x7B, 0xC2, 0x92, 0xC7, 0xE2, 0x94, 0x0B, 0xB8, 0x67, 0x38,
+  0x48, 0x63, 0x11, 0x74, 0x25, 0x7C, 0x37, 0xC3, 0xB2, 0xAE, 0xD9, 0xA7, 0x17, 0x9C, 0x4B, 0x9D,
+  0x6C, 0x27, 0xB0, 0x87, 0x16, 0x6B, 0xF2, 0x96, 0xE5, 0x1D, 0x37, 0x27, 0xDE, 0xF2, 0x98, 0xB7,
+  0x81, 0x08, 0xD9, 0x7A, 0xBA, 0x84, 0x14, 0x61, 0x60, 0x48, 0xCE, 0xCE, 0x51, 0x73, 0xF4, 0xDB,
+  0xF1, 0x5F, 0x7A, 0x17, 0x71, 0x4F, 0xC1, 0x0B, 0xCE, 0xC7, 0x31, 0xC1, 0x4E, 0xA3, 0xEE, 0x6F,
+  0x72, 0x97, 0x90, 0xFB, 0x8B, 0x54, 0x9F, 0x82, 0x5B, 0x48, 0x5A, 0xF1, 0xAD, 0x8B, 0x3A, 0xCD,
+  0xCA, 0xB2, 0x8B, 0x7A, 0x53, 0xD4, 0xF7, 0x71, 0x16, 0x75, 0xA7, 0x35, 0x02, 0x03, 0x01, 0x00,
+  0x01, 0x02, 0x82, 0x01, 0x00, 0x13, 0xF7, 0xD1, 0x42, 0xF5, 0x9F, 0x42, 0xCB, 0x55, 0x91, 0xBE,
+  0x08, 0x4A, 0xC0, 0xCD, 0x0B, 0xBD, 0x35, 0xDC, 0x43, 0xE9, 0x8F, 0x16, 0x6E, 0xB6, 0x4D, 0x33,
+  0x39, 0xE7, 0xA4, 0x95, 0x0C, 0x2F, 0x69, 0xBA, 0x0C, 0x42, 0x42, 0xAC, 0x43, 0x46, 0x10, 0xD3,
+  0x92, 0x7F, 0x70, 0x74, 0x1E, 0x2E, 0x5B, 0x1C, 0xC1, 0x92, 0xB6, 0xA4, 0x0C, 0xF5, 0x7C, 0xD9,
+  0xB7, 0x54, 0x64, 0x74, 0x79, 0xB1, 0xFF, 0xE6, 0x10, 0xB7, 0x8C, 0xF8, 0x53, 0x88, 0x6D, 0xA9,
+  0x97, 0x04, 0xD9, 0x26, 0x1F, 0x99, 0x12, 0xFB, 0xAC, 0x65, 0xFB, 0xA5, 0xB3, 0x1C, 0x99, 0xB9,
+  0xBF, 0x6B, 0x35, 0x3E, 0x49, 0x55, 0xB5, 0x94, 0x4F, 0xE7, 0x25, 0x67, 0xB1, 0x01, 0xCD, 0xD2,
+  0x58, 0xE4, 0xBE, 0x87, 0x8C, 0x88, 0xD3, 0x0A, 0x38, 0xDC, 0x71, 0x5D, 0x88, 0x0A, 0xE2, 0x3E,
+  0x76, 0x63, 0x3B, 0xE4, 0x3C, 0x8F, 0x2F, 0x29, 0x1D, 0xD1, 0x66, 0x8D, 0xC0, 0x4A, 0x68, 0x15,
+  0x90, 0x4C, 0x95, 0x61, 0xF4, 0xFD, 0xE8, 0xFA, 0x9C, 0x6C, 0x00, 0x22, 0x23, 0xD5, 0x17, 0x6E,
+  0xEE, 0xA8, 0xD8, 0x70, 0xC5, 0x74, 0xEA, 0x09, 0x13, 0x7F, 0x0C, 0x37, 0x4D, 0x50, 0xCD, 0xE9,
+  0x16, 0xC2, 0xD5, 0xDE, 0x5E, 0xC3, 0xFC, 0x46, 0x08, 0xF1, 0x99, 0xC0, 0xB4, 0x28, 0xFD, 0x2B,
+  0x29, 0xEF, 0x76, 0xD7, 0x04, 0x4F, 0x02, 0x54, 0x16, 0x54, 0x55, 0x20, 0xEC, 0xBC, 0xBF, 0x85,
+  0x5F, 0x12, 0xCC, 0xFC, 0x0D, 0xF2, 0xEF, 0xFC, 0x4D, 0x3E, 0xA2, 0x5E, 0x97, 0xFE, 0x35, 0x10,
+  0x0F, 0x53, 0x1F, 0x80, 0xD5, 0xC0, 0xB4, 0xE9, 0xE9, 0x31, 0x4C, 0x89, 0x14, 0x72, 0x39, 0x65,
+  0x89, 0xEF, 0x7A, 0x51, 0x4A, 0xB9, 0xA9, 0xCC, 0x1B, 0x52, 0xB0, 0x02, 0x52, 0x65, 0x2F, 0x0B,
+  0x89, 0x41, 0x70, 0x1E, 0x01, 0x02, 0x81, 0x81, 0x00, 0xDB, 0xE8, 0x21, 0x9E, 0xDB, 0x58, 0x42,
+  0x0B, 0x02, 0x35, 0x87, 0xDF, 0x35, 0xF4, 0xC1, 0xEE, 0xD5, 0x72, 0x2C, 0xDC, 0x4D, 0xC7, 0xDA,
+  0x6D, 0x18, 0x0F, 0x68, 0x6F, 0xE7, 0xB0, 0x6C, 0xA0, 0xB2, 0x9E, 0xB8, 0x5E, 0x4A, 0x86, 0x81,
+  0x97, 0xBD, 0x78, 0xFC, 0x06, 0xD5, 0xBE, 0x98, 0x42, 0x38, 0x78, 0x78, 0x16, 0xAE, 0x39, 0x56,
+  0xFB, 0x67, 0x6B, 0xED, 0x7F, 0xB3, 0xC3, 0x7D, 0x95, 0x86, 0x05, 0x0C, 0xF1, 0x4C, 0xC2, 0x67,
+  0x94, 0x93, 0x1B, 0xB7, 0x91, 0x0A, 0x80, 0xE2, 0x85, 0xA7, 0x75, 0x20, 0x61, 0xCD, 0x40, 0x5B,
+  0x39, 0x13, 0x32, 0xF7, 0xB8, 0xD7, 0x0C, 0x39, 0x4C, 0x82, 0x4B, 0xA3, 0x9F, 0x5E, 0xB1, 0xB0,
+  0x38, 0x81, 0x8B, 0x1E, 0xBD, 0x2B, 0xC2, 0x9F, 0x3A, 0x68, 0x72, 0xC2, 0x90, 0xCB, 0xA2, 0xE2,
+  0xAC, 0x86, 0xFF, 0xC8, 0xD7, 0xB8, 0x97, 0x0E, 0x69, 0x02, 0x81, 0x81, 0x00, 0xDB, 0xE5, 0x21,
+  0x1F, 0x4C, 0x83, 0xD9, 0x7A, 0x56, 0x87, 0x82, 0xF1, 0x40, 0x1A, 0xD3, 0x5B, 0xC5, 0xB4, 0x4D,
+  0x18, 0x8A, 0xE3, 0x6B, 0xC9, 0x7E, 0x8F, 0x5D, 0x00, 0x33, 0x66, 0xEB, 0xAE, 0x8E, 0x54, 0x49,
+  0xD7, 0xEA, 0xF3, 0xF9, 0xED, 0xD7, 0xEE, 0x2C, 0xC8, 0xD6, 0x8F, 0x40, 0x0A, 0x53, 0xCB, 0x5D,
+  0x16, 0xB7, 0xEB, 0x4E, 0xFB, 0x11, 0x18, 0x1B, 0x4B, 0x6B, 0x43, 0x04, 0xD6, 0x1D, 0x8F, 0x6D,
+  0x4D, 0x48, 0x8B, 0x6C, 0x82, 0x52, 0xB4, 0x8D, 0x58, 0x9B, 0x19, 0x8D, 0xE0, 0x0D, 0xFD, 0x15,
+  0x9D, 0x35, 0xDF, 0x5E, 0xED, 0xDB, 0x8F, 0x8C, 0x44, 0x11, 0xC9, 0x9A, 0xD9, 0x3F, 0xD4, 0xA5,
+  0xEE, 0x68, 0x3B, 0x38, 0xD1, 0x66, 0xB0, 0x62, 0x7E, 0xA5, 0x04, 0xD1, 0x67, 0xA4, 0x1D, 0x93,
+  0xD6, 0x2A, 0xFB, 0xF6, 0xC1, 0xB2, 0xC4, 0x02, 0x8A, 0xB2, 0xA8, 0xD0, 0xED, 0x02, 0x81, 0x81,
+  0x00, 0xD1, 0x1D, 0x98, 0x43, 0x09, 0x10, 0x8F, 0x95, 0x0A, 0x5F, 0xBF, 0x3A, 0x1A, 0x84, 0x0A,
+  0x9B, 0x44, 0x6C, 0x53, 0x8E, 0x97, 0x84, 0x72, 0x08, 0x85, 0xF5, 0xB8, 0xF9, 0x99, 0x58, 0x22,
+  0xA4, 0x59, 0xD7, 0x27, 0x39, 0xBB, 0x22, 0xD7, 0x3F, 0x65, 0x95, 0x14, 0x0C, 0xA7, 0xDB, 0x9B,
+  0xCC, 0x75, 0x08, 0xD2, 0x21, 0xB7, 0x41, 0x9D, 0x9E, 0x6A, 0x85, 0xAE, 0x8E, 0x5E, 0x72, 0x8B,
+  0x0C, 0xD2, 0x2A, 0x21, 0x59, 0xA1, 0x05, 0xC9, 0x1B, 0xF7, 0x1C, 0x47, 0x5E, 0x6C, 0x9F, 0x8D,
+  0x49, 0x4D, 0xA9, 0xCA, 0xC6, 0x56, 0x39, 0x59, 0xC6, 0x17, 0xA4, 0xC2, 0xFF, 0x09, 0xB8, 0x7D,
+  0x10, 0x6D, 0x62, 0xE2, 0x50, 0x9D, 0xEA, 0xD8, 0xC9, 0x93, 0x1E, 0xA9, 0x77, 0x78, 0x92, 0x95,
+  0x7A, 0x24, 0x72, 0xE4, 0xE4, 0x6E, 0x51, 0x11, 0xBE, 0xC0, 0x8D, 0xA1, 0xFE, 0xC9, 0x71, 0x13,
+  0xE9, 0x02, 0x81, 0x80, 0x38, 0xE5, 0x3F, 0x3D, 0xB6, 0xF1, 0x82, 0x8A, 0xD9, 0xEA, 0xB4, 0x21,
+  0xB1, 0xE1, 0x7F, 0x00, 0x86, 0xD6, 0x11, 0x00, 0xA1, 0xA7, 0x18, 0x53, 0x89, 0x50, 0x94, 0xD2,
+  0xA1, 0x7A, 0x26, 0xCF, 0x02, 0x7A, 0xA2, 0xA4, 0xA0, 0x61, 0x42, 0x30, 0x9D, 0x27, 0x3E, 0x25,
+  0x35, 0x06, 0xD9, 0x9E, 0x12, 0x72, 0x53, 0x02, 0xB6, 0xD1, 0xC6, 0x9C, 0xC5, 0x9E, 0x84, 0x29,
+  0x6E, 0x76, 0x67, 0xC0, 0xF2, 0xE3, 0x12, 0x77, 0xE5, 0xA6, 0x55, 0x8C, 0x1E, 0xD4, 0x22, 0xA2,
+  0x63, 0x77, 0x28, 0x33, 0x69, 0xCB, 0x2B, 0x15, 0x83, 0x43, 0xE9, 0x6F, 0x07, 0xD9, 0x4B, 0x84,
+  0xAD, 0x49, 0x89, 0xAC, 0x5E, 0x8C, 0xA9, 0xE6, 0x56, 0xC7, 0xC3, 0xFA, 0xC2, 0x64, 0x2F, 0x07,
+  0xEF, 0xB0, 0xA0, 0x71, 0xFD, 0x8F, 0xBD, 0x99, 0xB3, 0x83, 0x80, 0x24, 0x3C, 0x19, 0xE5, 0x42,
+  0x77, 0xD9, 0xA0, 0x3D, 0x02, 0x81, 0x81, 0x00, 0xB7, 0x35, 0xE9, 0x66, 0x4A, 0xCD, 0x5F, 0x5C,
+  0x44, 0x9A, 0x7F, 0x23, 0xAE, 0xC2, 0x7F, 0xF0, 0x8D, 0xE4, 0xDB, 0xCD, 0x1A, 0x8A, 0x40, 0xD7,
+  0x0A, 0xC4, 0x3E, 0xC5, 0x03, 0xFB, 0x47, 0xAB, 0x72, 0xDF, 0xD7, 0x68, 0x27, 0x6E, 0x86, 0x94,
+  0x2A, 0x2A, 0xDA, 0x25, 0x9E, 0xF6, 0x5E, 0xE0, 0x6D, 0x7C, 0x7D, 0xFE, 0x72, 0xDD, 0xC7, 0xBC,
+  0x74, 0xC7, 0xAD, 0xEA, 0x44, 0xBE, 0x5C, 0x8A, 0x03, 0xCD, 0x35, 0x74, 0x6F, 0x4E, 0x92, 0x31,
+  0xBE, 0x57, 0x9A, 0x02, 0x0C, 0xFC, 0xD1, 0xD5, 0xE7, 0x3E, 0x53, 0x0C, 0x47, 0x12, 0x39, 0x45,
+  0x6E, 0x35, 0x24, 0xA6, 0xDA, 0x42, 0x63, 0xC6, 0xBF, 0xCA, 0xE8, 0x32, 0xFD, 0x61, 0xC0, 0x80,
+  0x39, 0xD2, 0xB7, 0x0D, 0xF3, 0xA2, 0xF3, 0xE4, 0x49, 0x26, 0x89, 0xD0, 0xA0, 0x24, 0xC8, 0x27,
+  0x86, 0x10, 0x09, 0x88, 0x6C, 0x35, 0x60, 0xF2,
+  };
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyOaepEncrypt (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  BOOLEAN             Status;
+  UINT8               File[4];
+  UINT8               *OutBuffer;
+  UINTN               OutBufferSize;
+  UINT8               *OutBuffer2;
+  UINTN               OutBuffer2Size;
+
+  // Create a file and add content '123' in it
+  File[0] = '1';
+  File[1] = '2';
+  File[2] = '3';
+  File[3] = 0;
+
+  OutBuffer = NULL;
+  OutBufferSize = 0;
+  OutBuffer2 = NULL;
+  OutBuffer2Size = 0;
+
+  Status = Pkcs1v2Encrypt (
+            SelfTestCert,
+            (UINTN)sizeof (SelfTestCert),
+            File,
+            (UINTN)sizeof (File),
+            NULL,
+            0,
+            &OutBuffer,
+            (UINTN *)&OutBufferSize
+            );
+  UT_ASSERT_TRUE (Status);
+
+  Status = Pkcs1v2Encrypt (
+            SelfTestCert,
+            (UINTN)sizeof (SelfTestCert),
+            File,
+            (UINTN)4,
+            NULL,
+            0,
+            &OutBuffer2,
+            (UINTN *)&OutBuffer2Size
+            );
+  UT_ASSERT_TRUE (Status);
+
+  // TRUE - the two OutBuffers are indentical. That means the Oaep encrypt result is incorrect.
+  Status = (CompareMem (OutBuffer, OutBuffer2, OutBufferSize >= OutBuffer2Size ? OutBufferSize : OutBuffer2Size) == 0);
+  UT_ASSERT_FALSE (Status);
+
+  if (OutBuffer) {
+    FreePool (OutBuffer);
+    OutBuffer = NULL;
+    OutBufferSize = 0;
+  }
+
+  if (OutBuffer2) {
+    FreePool (OutBuffer2);
+    OutBuffer2 = NULL;
+    OutBuffer2Size = 0;
+  }
+
+  Status = Pkcs1v2Encrypt (
+              SelfTestCert,
+              (UINTN)sizeof (SelfTestCert),
+              File,
+              (UINTN)4,
+              RandSeed,
+              (UINTN)sizeof (RandSeed),
+              &OutBuffer,
+              (UINTN *)&OutBufferSize
+              );
+  UT_ASSERT_TRUE (Status);
+
+  Status = Pkcs1v2Encrypt (
+              SelfTestCert,
+              (UINTN)sizeof (SelfTestCert),
+              File,
+              (UINTN)4,
+              RandSeed,
+              (UINTN)sizeof (RandSeed),
+              &OutBuffer2,
+              (UINTN *)&OutBuffer2Size
+              );
+  UT_ASSERT_TRUE (Status);
+
+  // TRUE - the two OutBuffers are indentical. That means the Oaep encrypt result is incorrect.
+  Status = (CompareMem (OutBuffer, OutBuffer2, OutBufferSize >= OutBuffer2Size ? OutBufferSize : OutBuffer2Size) == 0);
+  UT_ASSERT_FALSE (Status);
+
+  if (OutBuffer) {
+    FreePool (OutBuffer);
+    OutBuffer = NULL;
+    OutBufferSize = 0;
+  }
+
+  if (OutBuffer2) {
+    FreePool (OutBuffer2);
+    OutBuffer2 = NULL;
+    OutBuffer2Size = 0;
+  }
+
+  Status = Pkcs1v2Encrypt (
+              NULL,
+              (UINTN)sizeof (SelfTestCert),
+              File,
+              (UINTN)4,
+              NULL,
+              0,
+              &OutBuffer,
+              (UINTN *)&OutBufferSize
+              );
+  UT_ASSERT_FALSE (Status);
+
+  Status = Pkcs1v2Encrypt (
+              SelfTestCert,
+              (UINTN)sizeof (SelfTestCert),
+              File,
+              (UINTN)4,
+              NULL,
+              0,
+              (UINT8 **)NULL,
+              (UINTN *)&OutBufferSize
+              );
+  UT_ASSERT_FALSE (Status);
+
+  Status = Pkcs1v2Encrypt (
+              SelfTestCert,
+              (UINTN)sizeof (SelfTestCert),
+              File,
+              (UINTN)4,
+              NULL,
+              0,
+              &OutBuffer,
+              (UINTN *)NULL
+              );
+  UT_ASSERT_FALSE (Status);
+
+  return UNIT_TEST_PASSED;
+}
+
+TEST_DESC mOaepTest[] = {
+    //
+    // -----Description--------------------------------------Class----------------------Function-----------------Pre---Post--Context
+    //
+    {"TestVerifyOaepEncrypt()", "CryptoPkg.BaseCryptLib.Pkcs1v2Encrypt", TestVerifyOaepEncrypt, NULL, NULL, NULL},
+};
+
+UINTN mOaepTestNum = ARRAY_SIZE(mOaepTest);
+
+
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2Tests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2Tests.c
new file mode 100644
index 000000000000..b64248aa5619
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2Tests.c
@@ -0,0 +1,71 @@
+/** @file
+  Application for PKCS#5 PBKDF2 Function Validation.
+
+Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "TestBaseCryptLib.h"
+
+//
+// PBKDF2 HMAC-SHA1 Test Vector from RFC6070
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8  *Password = "password";  // Input Password
+GLOBAL_REMOVE_IF_UNREFERENCED UINTN        PassLen   = 8;           // Length of Input Password
+GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8  *Salt     = "salt";      // Input Salt
+GLOBAL_REMOVE_IF_UNREFERENCED UINTN        SaltLen   = 4;           // Length of Input Salt
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINTN  Count     = 2;           // InterationCount
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINTN  KeyLen    = 20;          // Length of derived key
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8  DerivedKey[]  = {        // Expected output key
+  0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0,
+  0xd8, 0xde, 0x89, 0x57
+  };
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyPkcs5Pbkdf2 (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  BOOLEAN  Status;
+  UINT8    *OutKey;
+
+  OutKey = AllocatePool (KeyLen);
+
+  //
+  // Verify PKCS#5 PBKDF2 Key Derivation Function
+  //
+  Status = Pkcs5HashPassword (
+             PassLen,
+             Password,
+             SaltLen,
+             (CONST UINT8 *)Salt,
+             Count,
+             SHA1_DIGEST_SIZE,
+             KeyLen,
+             OutKey
+             );
+  UT_ASSERT_TRUE (Status);
+
+  //
+  // Check the output key with the expected key result
+  //
+  UT_ASSERT_MEM_EQUAL (OutKey, DerivedKey, KeyLen);
+
+  //
+  // Release Resources
+  //
+  FreePool (OutKey);
+
+  return EFI_SUCCESS;
+}
+
+TEST_DESC mPkcs5Test[] = {
+    //
+    // -----Description------------------------------Class----------------------Function-----------------Pre---Post--Context
+    //
+    {"TestVerifyPkcs5Pbkdf2()",        "CryptoPkg.BaseCryptLib.Pkcs5",   TestVerifyPkcs5Pbkdf2,        NULL, NULL, NULL},
+};
+
+UINTN mPkcs5TestNum = ARRAY_SIZE(mPkcs5Test);
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTests.c
new file mode 100644
index 000000000000..b5ae4f6a89e0
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTests.c
@@ -0,0 +1,524 @@
+/** @file -- Pkcs7EkuVerify.c
+ * Copyright (c) Microsoft Corporation.
+ * SPDX-License-Identifier: BSD-2-Clause-Patent
+
+  This is an test code which verifies specified
+  Enhanced Key Usages (EKU)'s are present in the leaf signer
+  of a PKCS7 formatted signature.
+
+
+  A typical signing certificate chain looks like this: (Could be RSA or ECC).
+
+      ------------------------------------------
+     |                                          | // Root of trust. ECDSA P521 curve
+     |          TestEKUParsingRoot              | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
+     |                                          | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
+      ------------------------------------------
+                        ^
+                        |
+      ------------------------------------------
+     |                                          | // Policy CA.  Issues subordinate CAs. ECC P384 curve.
+     |       TestEKUParsingPolicyCA             | // SHA 256 Key Usage:
+     |                                          | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
+      ------------------------------------------
+                        ^
+                        |
+      ------------------------------------------
+     |                                          | // Issues end-entity (leaf) signers. ECC P256 curve.
+     |        TestEKUParsingIssuingCA           | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
+     |                                          | // Enhanced Key Usage:
+      ------------------------------------------  // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
+                        ^
+                        |
+         --------------------------------------
+        /     TestEKUParsingLeafSigner &&     /   // Leaf signer,  ECC P256 curve.
+       /    TestEKUParsingLeafSignerPid12345 /    // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
+      /                                     /     // Enhanced Key usages:
+      --------------------------------------      // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
+                                                  // 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID.
+
+
+
+
+
+**/
+
+#include "TestBaseCryptLib.h"
+
+#include "Pkcs7EkuTestSignatures.h"
+
+EFI_STATUS
+EFIAPI
+VerifyEKUsInPkcs7Signature (
+  IN CONST UINT8  *Pkcs7Signature,
+  IN CONST UINT32  SignatureSize,
+  IN CONST CHAR8  *RequiredEKUs[],
+  IN CONST UINT32  RequiredEKUsSize,
+  IN BOOLEAN       RequireAllPresent
+  );
+
+///================================================================================================
+///================================================================================================
+///
+/// TEST CASES
+///
+///================================================================================================
+///================================================================================================
+
+CONST CHAR8 FIRMWARE_SIGNER_EKU[] = "1.3.6.1.4.1.311.76.9.21.1";
+
+
+/**
+  TestVerifyEKUsInSignature()
+
+  Verify that "1.3.6.1.4.1.311.76.9.21.1" (Firmware signature) is in the
+  leaf signer certificate.
+
+
+  @param[in]  Framework - Unit-test framework handle.
+  @param[in]  Context   - Optional context pointer for this test.
+
+  @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
+  @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
+**/
+static
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyEKUsInSignature (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  EFI_STATUS       Status     = EFI_SUCCESS;
+
+  CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU };
+
+  Status = VerifyEKUsInPkcs7Signature(ProductionECCSignature,
+                                      ARRAY_SIZE(ProductionECCSignature),
+                                      (CONST CHAR8**)RequiredEKUs,
+                                      ARRAY_SIZE(RequiredEKUs),
+                                      TRUE);
+  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
+
+  return UNIT_TEST_PASSED;
+}// TestVerifyEKUsInSignature()
+
+
+/**
+  TestVerifyEKUsWith3CertsInSignature()
+
+  This PKCS7 signature has 3 certificates in it. (Policy CA, Issuing CA
+  and leaf signer). It has one firmware signing EKU in it.
+  "1.3.6.1.4.1.311.76.9.21.1"
+
+  @param[in]  Framework - Unit-test framework handle.
+  @param[in]  Context   - Optional context pointer for this test.
+
+  @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
+  @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
+**/
+static
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyEKUsWith3CertsInSignature (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  EFI_STATUS       Status     = EFI_SUCCESS;
+
+  CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU };
+
+  Status = VerifyEKUsInPkcs7Signature(TestSignEKUsWith3CertsInSignature,
+                                      ARRAY_SIZE(TestSignEKUsWith3CertsInSignature),
+                                      (CONST CHAR8**)RequiredEKUs,
+                                      ARRAY_SIZE(RequiredEKUs),
+                                      TRUE);
+  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
+
+  return UNIT_TEST_PASSED;
+}// TestVerifyEKUsWith3CertsInSignature()
+
+/**
+  TestVerifyEKUsWith2CertsInSignature()
+
+  This PKCS7 signature has 2 certificates in it. (Issuing CA and leaf signer).
+  It has one firmware signing EKU in it. "1.3.6.1.4.1.311.76.9.21.1"
+
+  @param[in]  Framework - Unit-test framework handle.
+  @param[in]  Context   - Optional context pointer for this test.
+
+  @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
+  @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
+**/
+static
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyEKUsWith2CertsInSignature (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  EFI_STATUS       Status     = EFI_SUCCESS;
+
+  CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU };
+
+  Status = VerifyEKUsInPkcs7Signature(TestSignEKUsWith2CertsInSignature,
+                                      ARRAY_SIZE(TestSignEKUsWith2CertsInSignature),
+                                      (CONST CHAR8**)RequiredEKUs,
+                                      ARRAY_SIZE(RequiredEKUs),
+                                      TRUE);
+  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
+
+  return UNIT_TEST_PASSED;
+}// TestVerifyEKUsWith2CertsInSignature()
+
+
+/**
+  TestVerifyEKUsWith1CertInSignature()
+
+  This PKCS7 signature only has the leaf signer in it.
+  It has one firmware signing EKU in it. "1.3.6.1.4.1.311.76.9.21.1"
+
+  @param[in]  Framework - Unit-test framework handle.
+  @param[in]  Context   - Optional context pointer for this test.
+
+  @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
+  @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
+**/
+static
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyEKUsWith1CertInSignature (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  EFI_STATUS       Status     = EFI_SUCCESS;
+
+  CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU };
+
+  Status = VerifyEKUsInPkcs7Signature(TestSignEKUsWith1CertInSignature,
+                                      ARRAY_SIZE(TestSignEKUsWith1CertInSignature),
+                                      (CONST CHAR8**)RequiredEKUs,
+                                      ARRAY_SIZE(RequiredEKUs),
+                                      TRUE);
+  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
+
+  return UNIT_TEST_PASSED;
+}// TestVerifyEKUsWith1CertInSignature()
+
+
+/**
+  TestVerifyEKUsWithMultipleEKUsInCert()
+
+
+  This signature has two EKU's in it:
+  "1.3.6.1.4.1.311.76.9.21.1"
+  "1.3.6.1.4.1.311.76.9.21.2"
+  We verify that both EKU's were present in the leaf signer.
+
+  @param[in]  Framework - Unit-test framework handle.
+  @param[in]  Context   - Optional context pointer for this test.
+
+  @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
+  @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
+**/
+static
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyEKUsWithMultipleEKUsInCert (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  EFI_STATUS       Status     = EFI_SUCCESS;
+
+  CONST CHAR8* RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1",
+                                  "1.3.6.1.4.1.311.76.9.21.1.2" };
+
+  Status = VerifyEKUsInPkcs7Signature(TestSignedWithMultipleEKUsInCert,
+                                      ARRAY_SIZE(TestSignedWithMultipleEKUsInCert),
+                                      (CONST CHAR8**)RequiredEKUs,
+                                      ARRAY_SIZE(RequiredEKUs),
+                                      TRUE);
+  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
+
+  return UNIT_TEST_PASSED;
+}// TestVerifyEKUsWithMultipleEKUsInCert()
+
+
+/**
+  TestEkusNotPresentInSignature()
+
+  This test verifies that if we send an EKU that is not in the signature,
+  that we get back an error.
+
+  @param[in]  Framework - Unit-test framework handle.
+  @param[in]  Context   - Optional context pointer for this test.
+
+  @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
+  @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
+**/
+static
+UNIT_TEST_STATUS
+EFIAPI
+TestEkusNotPresentInSignature (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  EFI_STATUS       Status = EFI_SUCCESS;
+
+  //
+  // This EKU is not in the signature.
+  //
+  CONST CHAR8* RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.3" };
+
+  Status = VerifyEKUsInPkcs7Signature(TestSignedWithMultipleEKUsInCert,
+                                      ARRAY_SIZE(TestSignedWithMultipleEKUsInCert),
+                                      (CONST CHAR8**)RequiredEKUs,
+                                      ARRAY_SIZE(RequiredEKUs),
+                                      TRUE);
+  UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS);
+
+  return UNIT_TEST_PASSED;
+}// TestEkusNotPresentInSignature()
+
+/**
+  TestEkusNotPresentInSignature()
+
+  This test signature has two EKU's in it:  (Product ID is 10001)
+  "1.3.6.1.4.1.311.76.9.21.1"
+  "1.3.6.1.4.1.311.76.9.21.1.10001"
+
+  @param[in]  Framework - Unit-test framework handle.
+  @param[in]  Context   - Optional context pointer for this test.
+
+  @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
+  @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
+**/
+
+static
+UNIT_TEST_STATUS
+EFIAPI
+TestProductId10001PresentInSignature(
+  IN UNIT_TEST_CONTEXT           Context
+)
+{
+  EFI_STATUS       Status = EFI_SUCCESS;
+
+  //
+  // These EKU's are present in the leaf signer certificate.
+  //
+  CONST CHAR8* RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1",
+                                  "1.3.6.1.4.1.311.76.9.21.1.10001" };
+
+  Status = VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001,
+                                      ARRAY_SIZE(TestSignedWithProductId10001),
+                                      (CONST CHAR8**)RequiredEKUs,
+                                      ARRAY_SIZE(RequiredEKUs),
+                                      TRUE);
+  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
+
+  return UNIT_TEST_PASSED;
+}// TestProductId10001PresentInSignature()
+
+
+/**
+  TestOnlyOneEkuInListRequired()
+
+  This test will check the BOOLEAN RequireAllPresent parameter in the
+  call to VerifyEKUsInPkcs7Signature() behaves properly.  The signature
+  has two EKU's in it:
+
+  "1.3.6.1.4.1.311.76.9.21.1"
+  "1.3.6.1.4.1.311.76.9.21.1.10001"
+
+  but we only pass in one of them, and set RequireAllPresent to FALSE.
+
+  @param[in]  Framework - Unit-test framework handle.
+  @param[in]  Context   - Optional context pointer for this test.
+
+  @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
+  @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
+**/
+
+static
+UNIT_TEST_STATUS
+EFIAPI
+TestOnlyOneEkuInListRequired(
+  IN UNIT_TEST_CONTEXT           Context
+)
+{
+  EFI_STATUS       Status = EFI_SUCCESS;
+
+  //
+  // This will test the flag that specifies it is OK to succeed if
+  // any one of the EKU's passed in is found.
+  //
+  CONST CHAR8* RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1.10001" };
+
+  Status = VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001,
+                                      ARRAY_SIZE(TestSignedWithProductId10001),
+                                      (CONST CHAR8**)RequiredEKUs,
+                                      ARRAY_SIZE(RequiredEKUs),
+                                      FALSE);
+  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
+
+  return UNIT_TEST_PASSED;
+}// TestOnlyOneEkuInListRequired()
+
+/**
+  TestNoEKUsInSignature()
+
+  This test uses a signature that was signed with a certificate that does
+  not contain any EKUs.
+
+
+  @param[in]  Framework - Unit-test framework handle.
+  @param[in]  Context   - Optional context pointer for this test.
+
+  @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
+  @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
+**/
+
+static
+UNIT_TEST_STATUS
+EFIAPI
+TestNoEKUsInSignature(
+  IN UNIT_TEST_CONTEXT           Context
+)
+{
+  EFI_STATUS       Status     = EFI_SUCCESS;
+
+  //
+  // This EKU is not in the certificate, so it should fail.
+  //
+  CONST CHAR8* RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1" };
+
+  Status = VerifyEKUsInPkcs7Signature(TestSignatureWithNoEKUsPresent,
+                                      ARRAY_SIZE(TestSignatureWithNoEKUsPresent),
+                                      (CONST CHAR8**)RequiredEKUs,
+                                      ARRAY_SIZE(RequiredEKUs),
+                                      TRUE);
+  UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS);
+
+  return UNIT_TEST_PASSED;
+}// TestNoEKUsInSignature()
+
+
+/**
+  TestInvalidParameters()
+
+  Passes the API invalid parameters, and ensures that it does not succeed.
+
+  @param[in]  Framework - Unit-test framework handle.
+  @param[in]  Context   - Optional context pointer for this test.
+
+  @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
+  @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
+**/
+static
+UNIT_TEST_STATUS
+EFIAPI
+TestInvalidParameters(
+  IN UNIT_TEST_CONTEXT           Context
+)
+{
+  EFI_STATUS       Status     = EFI_SUCCESS;
+
+  CONST CHAR8* RequiredEKUs[] = { "1.3.6.1.4.1.311.76.9.21.1" };
+
+  //
+  // Check bad signature.
+  //
+  Status = VerifyEKUsInPkcs7Signature(NULL,
+                                      0,
+                                      (CONST CHAR8**)RequiredEKUs,
+                                      ARRAY_SIZE(RequiredEKUs),
+                                      TRUE);
+  UT_ASSERT_STATUS_EQUAL (Status, EFI_INVALID_PARAMETER);
+
+  //
+  // Check invalid EKU's
+  //
+  Status = VerifyEKUsInPkcs7Signature(TestSignatureWithNoEKUsPresent,
+                                      ARRAY_SIZE(TestSignatureWithNoEKUsPresent),
+                                      (CONST CHAR8**)NULL,
+                                      0,
+                                      TRUE);
+  UT_ASSERT_STATUS_EQUAL (Status, EFI_INVALID_PARAMETER);
+
+  return UNIT_TEST_PASSED;
+}// TestInvalidParameters()
+
+
+/**
+  TestEKUSubStringFails()
+
+  Pass the API a sub set and super set of an EKU and ensure that they
+  don't pass.
+
+  @param[in]  Framework - Unit-test framework handle.
+  @param[in]  Context   - Optional context pointer for this test.
+
+  @retval UNIT_TEST_PASSED            - The required EKUs were found in the signature.
+  @retval UNIT_TEST_ERROR_TEST_FAILED - Something failed, check the debug output.
+**/
+static
+UNIT_TEST_STATUS
+EFIAPI
+TestEKUSubsetSupersetFails(
+  IN UNIT_TEST_CONTEXT           Context
+)
+{
+  EFI_STATUS       Status     = EFI_SUCCESS;
+
+  //
+  // This signature has an EKU of:
+  // "1.3.6.1.4.1.311.76.9.21.1.10001"
+  // so ensure that
+  // "1.3.6.1.4.1.311.76.9.21"
+  // does not pass.
+  //
+  CONST CHAR8* RequiredEKUs1[] = { "1.3.6.1.4.1.311.76.9.21" };
+
+  Status = VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001,
+                                      ARRAY_SIZE(TestSignedWithProductId10001),
+                                      (CONST CHAR8**)RequiredEKUs1,
+                                      ARRAY_SIZE(RequiredEKUs1),
+                                      TRUE);
+  UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS);
+
+  //
+  // This signature has an EKU of:
+  // "1.3.6.1.4.1.311.76.9.21.1.10001"
+  // so ensure that a super set
+  // "1.3.6.1.4.1.311.76.9.21.1.10001.1"
+  // does not pass.
+  //
+  CONST CHAR8* RequiredEKUs2[] = { "1.3.6.1.4.1.311.76.9.21.1.10001.1" };
+
+  Status = VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001,
+                                      ARRAY_SIZE(TestSignedWithProductId10001),
+                                      (CONST CHAR8**)RequiredEKUs2,
+                                      ARRAY_SIZE(RequiredEKUs2),
+                                      TRUE);
+  UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS);
+
+  return UNIT_TEST_PASSED;
+}// TestEKUSubsetSupersetFails()
+
+TEST_DESC mPkcs7EkuTest[] = {
+    //
+    // -----Description--------------------------------Class----------------------------Function------------------------------Pre---Post--Context
+    //
+    {"TestVerifyEKUsInSignature()",            "CryptoPkg.BaseCryptLib.Eku",   TestVerifyEKUsInSignature,            NULL, NULL, NULL},
+    {"TestVerifyEKUsWith3CertsInSignature()",  "CryptoPkg.BaseCryptLib.Eku",   TestVerifyEKUsWith3CertsInSignature,  NULL, NULL, NULL},
+    {"TestVerifyEKUsWith2CertsInSignature()",  "CryptoPkg.BaseCryptLib.Eku",   TestVerifyEKUsWith2CertsInSignature,  NULL, NULL, NULL},
+    {"TestVerifyEKUsWith1CertInSignature()",   "CryptoPkg.BaseCryptLib.Eku",   TestVerifyEKUsWith1CertInSignature,   NULL, NULL, NULL},
+    {"TestVerifyEKUsWithMultipleEKUsInCert()", "CryptoPkg.BaseCryptLib.Eku",   TestVerifyEKUsWithMultipleEKUsInCert, NULL, NULL, NULL},
+    {"TestEkusNotPresentInSignature()",        "CryptoPkg.BaseCryptLib.Eku",   TestEkusNotPresentInSignature,        NULL, NULL, NULL},
+    {"TestProductId10001PresentInSignature()", "CryptoPkg.BaseCryptLib.Eku",   TestProductId10001PresentInSignature, NULL, NULL, NULL},
+    {"TestOnlyOneEkuInListRequired()",         "CryptoPkg.BaseCryptLib.Eku",   TestOnlyOneEkuInListRequired,         NULL, NULL, NULL},
+    {"TestNoEKUsInSignature()",                "CryptoPkg.BaseCryptLib.Eku",   TestNoEKUsInSignature,                NULL, NULL, NULL},
+    {"TestInvalidParameters()",                "CryptoPkg.BaseCryptLib.Eku",   TestInvalidParameters,                NULL, NULL, NULL},
+    {"TestEKUSubsetSupersetFails()",           "CryptoPkg.BaseCryptLib.Eku",   TestEKUSubsetSupersetFails,           NULL, NULL, NULL},
+};
+
+UINTN mPkcs7EkuTestNum = ARRAY_SIZE(mPkcs7EkuTest);
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c
new file mode 100644
index 000000000000..cc6b2ca46ba1
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c
@@ -0,0 +1,51 @@
+/** @file
+  Application for Pseudorandom Number Generator Validation.
+
+Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "TestBaseCryptLib.h"
+
+#define  RANDOM_NUMBER_SIZE  256
+
+CONST  UINT8  SeedString[] = "This is the random seed for PRNG verification.";
+
+UINT8  PreviousRandomBuffer[RANDOM_NUMBER_SIZE] = { 0x0 };
+
+UINT8  RandomBuffer[RANDOM_NUMBER_SIZE] = { 0x0 };
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyPrngGeneration (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  UINTN    Index;
+  BOOLEAN  Status;
+
+  Status = RandomSeed (SeedString, sizeof (SeedString));
+  UT_ASSERT_TRUE (Status);
+
+  for (Index = 0; Index < 10; Index ++) {
+    Status = RandomBytes (RandomBuffer, RANDOM_NUMBER_SIZE);
+    UT_ASSERT_TRUE (Status);
+
+    Status = (CompareMem (PreviousRandomBuffer, RandomBuffer, RANDOM_NUMBER_SIZE) == 0);
+    UT_ASSERT_FALSE (Status);
+
+    CopyMem (PreviousRandomBuffer, RandomBuffer, RANDOM_NUMBER_SIZE);
+  }
+
+  return UNIT_TEST_PASSED;
+}
+
+TEST_DESC mPrngTest[] = {
+    //
+    // -----Description--------------------------------Class--------------------Function----------------Pre---Post--Context
+    //
+    {"TestVerifyPrngGeneration()",       "CryptoPkg.BaseCryptLib.Prng",   TestVerifyPrngGeneration,   NULL, NULL, NULL},
+};
+
+UINTN mPrngTestNum = ARRAY_SIZE(mPrngTest);
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tests.c
new file mode 100644
index 000000000000..85a3d6a5a13b
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tests.c
@@ -0,0 +1,415 @@
+/** @file
+  Application for RSA Key Retrieving (from PEM and X509) & Signature Validation.
+
+  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) Microsoft Corporation.
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "TestBaseCryptLib.h"
+
+
+//
+// Password-protected PEM Key data for RSA Private Key Retrieving (encryption key is "client").
+// (Generated by OpenSSL utility).
+// $ openssl genrsa -aes256 -out TestKeyPem -passout pass:client 1024
+// password should match PemPass in this file
+// $ xxd --include TestKeyPem
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestKeyPem[] = {
+   0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x52,
+  0x53, 0x41, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x4b,
+  0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x50, 0x72, 0x6f, 0x63,
+  0x2d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x34, 0x2c, 0x45, 0x4e, 0x43,
+  0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x0a, 0x44, 0x45, 0x4b, 0x2d, 0x49,
+  0x6e, 0x66, 0x6f, 0x3a, 0x20, 0x41, 0x45, 0x53, 0x2d, 0x32, 0x35, 0x36,
+  0x2d, 0x43, 0x42, 0x43, 0x2c, 0x34, 0x42, 0x44, 0x31, 0x30, 0x45, 0x39,
+  0x35, 0x42, 0x38, 0x33, 0x39, 0x42, 0x30, 0x44, 0x33, 0x35, 0x36, 0x31,
+  0x38, 0x41, 0x44, 0x36, 0x45, 0x46, 0x44, 0x36, 0x34, 0x32, 0x34, 0x44,
+  0x36, 0x0a, 0x0a, 0x42, 0x50, 0x39, 0x49, 0x32, 0x42, 0x30, 0x6c, 0x50,
+  0x7a, 0x4c, 0x50, 0x50, 0x38, 0x2f, 0x4b, 0x71, 0x35, 0x34, 0x2f, 0x56,
+  0x68, 0x75, 0x4b, 0x35, 0x5a, 0x63, 0x72, 0x32, 0x55, 0x6c, 0x32, 0x75,
+  0x43, 0x57, 0x4a, 0x62, 0x59, 0x33, 0x50, 0x77, 0x39, 0x6e, 0x4c, 0x6d,
+  0x45, 0x41, 0x6a, 0x47, 0x74, 0x4a, 0x68, 0x57, 0x46, 0x66, 0x50, 0x47,
+  0x38, 0x62, 0x6d, 0x41, 0x6f, 0x73, 0x56, 0x0a, 0x47, 0x76, 0x42, 0x30,
+  0x6d, 0x2b, 0x7a, 0x5a, 0x43, 0x2b, 0x30, 0x6c, 0x57, 0x6c, 0x72, 0x59,
+  0x7a, 0x51, 0x4b, 0x6a, 0x57, 0x79, 0x44, 0x6e, 0x4d, 0x58, 0x72, 0x33,
+  0x51, 0x39, 0x69, 0x57, 0x32, 0x4b, 0x33, 0x68, 0x4d, 0x6b, 0x71, 0x51,
+  0x4c, 0x31, 0x68, 0x65, 0x71, 0x52, 0x66, 0x66, 0x74, 0x47, 0x57, 0x51,
+  0x5a, 0x36, 0x78, 0x4e, 0x6a, 0x72, 0x30, 0x7a, 0x6f, 0x51, 0x59, 0x73,
+  0x0a, 0x34, 0x76, 0x69, 0x55, 0x46, 0x72, 0x7a, 0x2b, 0x52, 0x76, 0x4b,
+  0x43, 0x2f, 0x33, 0x69, 0x71, 0x57, 0x59, 0x78, 0x55, 0x35, 0x4c, 0x6a,
+  0x45, 0x74, 0x63, 0x5a, 0x4f, 0x2b, 0x53, 0x6d, 0x39, 0x42, 0x4c, 0x62,
+  0x66, 0x58, 0x49, 0x71, 0x56, 0x72, 0x53, 0x6a, 0x54, 0x79, 0x58, 0x49,
+  0x39, 0x70, 0x76, 0x78, 0x6f, 0x67, 0x50, 0x39, 0x38, 0x6b, 0x2b, 0x6c,
+  0x41, 0x66, 0x37, 0x47, 0x36, 0x0a, 0x75, 0x39, 0x2b, 0x30, 0x31, 0x4d,
+  0x47, 0x5a, 0x69, 0x36, 0x6b, 0x53, 0x73, 0x67, 0x48, 0x57, 0x7a, 0x43,
+  0x41, 0x49, 0x51, 0x75, 0x38, 0x72, 0x6a, 0x4d, 0x34, 0x65, 0x74, 0x64,
+  0x50, 0x62, 0x4a, 0x49, 0x77, 0x34, 0x65, 0x47, 0x6f, 0x32, 0x45, 0x49,
+  0x44, 0x45, 0x54, 0x61, 0x52, 0x70, 0x73, 0x76, 0x47, 0x6a, 0x54, 0x6f,
+  0x30, 0x51, 0x56, 0x69, 0x79, 0x79, 0x4a, 0x4f, 0x48, 0x32, 0x0a, 0x61,
+  0x32, 0x71, 0x69, 0x2f, 0x47, 0x7a, 0x2f, 0x64, 0x48, 0x61, 0x62, 0x68,
+  0x4d, 0x4e, 0x35, 0x4e, 0x53, 0x58, 0x56, 0x4d, 0x31, 0x54, 0x2f, 0x6d,
+  0x69, 0x6f, 0x74, 0x68, 0x78, 0x59, 0x72, 0x2f, 0x4a, 0x69, 0x37, 0x6d,
+  0x4e, 0x45, 0x75, 0x4a, 0x57, 0x38, 0x74, 0x6d, 0x75, 0x55, 0x4b, 0x58,
+  0x33, 0x66, 0x63, 0x39, 0x42, 0x39, 0x32, 0x51, 0x6e, 0x54, 0x68, 0x43,
+  0x69, 0x49, 0x2f, 0x0a, 0x79, 0x4f, 0x31, 0x32, 0x4c, 0x46, 0x58, 0x38,
+  0x74, 0x4b, 0x4a, 0x37, 0x4b, 0x7a, 0x6f, 0x6b, 0x36, 0x44, 0x74, 0x6d,
+  0x35, 0x73, 0x41, 0x74, 0x2b, 0x65, 0x4b, 0x76, 0x6f, 0x61, 0x47, 0x62,
+  0x75, 0x4a, 0x78, 0x62, 0x52, 0x63, 0x36, 0x63, 0x4d, 0x58, 0x57, 0x46,
+  0x36, 0x4d, 0x72, 0x4d, 0x30, 0x53, 0x78, 0x65, 0x4e, 0x6b, 0x5a, 0x77,
+  0x5a, 0x36, 0x6c, 0x62, 0x4d, 0x39, 0x63, 0x55, 0x0a, 0x6c, 0x75, 0x34,
+  0x4c, 0x56, 0x64, 0x34, 0x73, 0x56, 0x4c, 0x61, 0x76, 0x68, 0x75, 0x32,
+  0x58, 0x48, 0x48, 0x53, 0x56, 0x30, 0x32, 0x32, 0x6d, 0x51, 0x72, 0x73,
+  0x32, 0x69, 0x68, 0x74, 0x58, 0x44, 0x2b, 0x6c, 0x4d, 0x63, 0x2f, 0x35,
+  0x62, 0x54, 0x41, 0x55, 0x6b, 0x4b, 0x4f, 0x42, 0x73, 0x43, 0x69, 0x4f,
+  0x4b, 0x42, 0x56, 0x2b, 0x66, 0x70, 0x49, 0x62, 0x2b, 0x6d, 0x44, 0x33,
+  0x58, 0x0a, 0x39, 0x37, 0x66, 0x36, 0x54, 0x66, 0x68, 0x37, 0x4f, 0x4f,
+  0x6a, 0x74, 0x44, 0x79, 0x31, 0x6f, 0x52, 0x36, 0x70, 0x68, 0x48, 0x47,
+  0x6e, 0x73, 0x43, 0x78, 0x72, 0x53, 0x72, 0x64, 0x48, 0x73, 0x2f, 0x34,
+  0x33, 0x72, 0x61, 0x65, 0x42, 0x78, 0x59, 0x45, 0x41, 0x42, 0x4e, 0x59,
+  0x68, 0x54, 0x47, 0x57, 0x49, 0x4d, 0x4a, 0x6b, 0x50, 0x63, 0x54, 0x53,
+  0x73, 0x76, 0x77, 0x46, 0x37, 0x6d, 0x0a, 0x33, 0x6c, 0x38, 0x6b, 0x44,
+  0x50, 0x48, 0x43, 0x4e, 0x68, 0x6e, 0x6e, 0x42, 0x69, 0x7a, 0x36, 0x2f,
+  0x43, 0x38, 0x56, 0x31, 0x37, 0x78, 0x57, 0x34, 0x50, 0x2b, 0x79, 0x71,
+  0x4a, 0x78, 0x58, 0x63, 0x49, 0x53, 0x72, 0x7a, 0x57, 0x53, 0x55, 0x72,
+  0x34, 0x74, 0x71, 0x6b, 0x55, 0x58, 0x43, 0x57, 0x4c, 0x43, 0x66, 0x76,
+  0x57, 0x7a, 0x4e, 0x65, 0x5a, 0x34, 0x4f, 0x34, 0x34, 0x54, 0x65, 0x0a,
+  0x74, 0x31, 0x59, 0x65, 0x36, 0x77, 0x2b, 0x71, 0x4f, 0x55, 0x38, 0x50,
+  0x42, 0x68, 0x72, 0x65, 0x4d, 0x38, 0x75, 0x32, 0x32, 0x42, 0x4f, 0x31,
+  0x65, 0x2b, 0x44, 0x7a, 0x63, 0x74, 0x6c, 0x67, 0x43, 0x43, 0x6c, 0x38,
+  0x79, 0x69, 0x37, 0x6f, 0x43, 0x56, 0x74, 0x66, 0x75, 0x59, 0x2f, 0x4c,
+  0x72, 0x42, 0x61, 0x31, 0x74, 0x69, 0x43, 0x41, 0x37, 0x6c, 0x34, 0x75,
+  0x58, 0x6b, 0x73, 0x4c, 0x0a, 0x2b, 0x31, 0x51, 0x79, 0x69, 0x4b, 0x31,
+  0x6e, 0x43, 0x4f, 0x76, 0x74, 0x30, 0x46, 0x7a, 0x71, 0x62, 0x71, 0x78,
+  0x54, 0x37, 0x53, 0x35, 0x4c, 0x56, 0x33, 0x5a, 0x33, 0x74, 0x34, 0x4a,
+  0x46, 0x4f, 0x50, 0x62, 0x67, 0x63, 0x7a, 0x4e, 0x6b, 0x58, 0x55, 0x2b,
+  0x4f, 0x74, 0x50, 0x6b, 0x6e, 0x45, 0x45, 0x76, 0x67, 0x57, 0x64, 0x76,
+  0x31, 0x4f, 0x30, 0x6d, 0x52, 0x4a, 0x50, 0x31, 0x4e, 0x0a, 0x71, 0x43,
+  0x32, 0x33, 0x4a, 0x6a, 0x36, 0x38, 0x4c, 0x30, 0x46, 0x63, 0x46, 0x4c,
+  0x56, 0x56, 0x59, 0x76, 0x61, 0x44, 0x53, 0x76, 0x54, 0x45, 0x64, 0x50,
+  0x54, 0x34, 0x62, 0x2f, 0x7a, 0x66, 0x64, 0x36, 0x51, 0x52, 0x6b, 0x38,
+  0x70, 0x4d, 0x36, 0x77, 0x66, 0x61, 0x32, 0x50, 0x63, 0x75, 0x57, 0x65,
+  0x79, 0x38, 0x48, 0x38, 0x76, 0x4e, 0x4b, 0x67, 0x2f, 0x65, 0x76, 0x34,
+  0x77, 0x37, 0x0a, 0x6b, 0x6f, 0x6f, 0x4e, 0x59, 0x64, 0x77, 0x59, 0x69,
+  0x6c, 0x37, 0x41, 0x50, 0x76, 0x42, 0x50, 0x4d, 0x63, 0x6c, 0x51, 0x76,
+  0x63, 0x64, 0x71, 0x7a, 0x52, 0x7a, 0x4a, 0x6e, 0x4a, 0x74, 0x37, 0x70,
+  0x35, 0x7a, 0x69, 0x2b, 0x2b, 0x4c, 0x43, 0x59, 0x55, 0x4d, 0x3d, 0x0a,
+  0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x52, 0x53, 0x41,
+  0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x4b, 0x45, 0x59,
+  0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a
+ };
+
+//
+// Password for private key retrieving from encrypted PEM ("TestKeyPem").
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *PemPass = "client";
+
+//
+// Test CA X509 Certificate for X509 Verification Routine (Generated by OpenSSL utility).
+// $ openssl req -x509 -days 10000 -key TestKeyPem -out TestCACert -outform DER -subj "/C=US/ST=WA/L=Seattle/O=Tianocore/OU=EDK2/CN=UEFI"
+// use password from PemPass variable in this file
+// $ xxd --include TestCACert
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestCACert[] = {
+  0x30, 0x82, 0x02, 0x98, 0x30, 0x82, 0x02, 0x01, 0xa0, 0x03, 0x02, 0x01,
+  0x02, 0x02, 0x14, 0x39, 0xde, 0x9e, 0xce, 0x3a, 0x36, 0x11, 0x38, 0x6f,
+  0x64, 0xb4, 0x69, 0xa7, 0x93, 0xdd, 0xff, 0xbd, 0x3e, 0x75, 0x6a, 0x30,
+  0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b,
+  0x05, 0x00, 0x30, 0x5e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
+  0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
+  0x04, 0x08, 0x0c, 0x02, 0x57, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03,
+  0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65,
+  0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x54,
+  0x69, 0x61, 0x6e, 0x6f, 0x63, 0x6f, 0x72, 0x65, 0x31, 0x0d, 0x30, 0x0b,
+  0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x04, 0x45, 0x44, 0x4b, 0x32, 0x31,
+  0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x04, 0x55, 0x45,
+  0x46, 0x49, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x36, 0x32, 0x39,
+  0x32, 0x32, 0x34, 0x37, 0x33, 0x36, 0x5a, 0x17, 0x0d, 0x34, 0x37, 0x31,
+  0x31, 0x31, 0x35, 0x32, 0x32, 0x34, 0x37, 0x33, 0x36, 0x5a, 0x30, 0x5e,
+  0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55,
+  0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x02,
+  0x57, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c,
+  0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x31, 0x12, 0x30, 0x10,
+  0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x54, 0x69, 0x61, 0x6e, 0x6f,
+  0x63, 0x6f, 0x72, 0x65, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04,
+  0x0b, 0x0c, 0x04, 0x45, 0x44, 0x4b, 0x32, 0x31, 0x0d, 0x30, 0x0b, 0x06,
+  0x03, 0x55, 0x04, 0x03, 0x0c, 0x04, 0x55, 0x45, 0x46, 0x49, 0x30, 0x81,
+  0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
+  0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02,
+  0x81, 0x81, 0x00, 0x9f, 0xef, 0x1b, 0x46, 0x45, 0x55, 0x33, 0x4b, 0xee,
+  0x95, 0x14, 0xd3, 0x5a, 0x3e, 0xd9, 0x29, 0xfb, 0xd9, 0x29, 0x4e, 0x8b,
+  0xf1, 0xf5, 0x68, 0x7c, 0x58, 0x86, 0x0c, 0xda, 0xd7, 0xe0, 0xd2, 0x9a,
+  0xe8, 0x37, 0x16, 0x4d, 0x54, 0x92, 0x18, 0x20, 0x4c, 0x09, 0xa1, 0xcf,
+  0xe1, 0xaa, 0x7a, 0x5a, 0x64, 0x7e, 0x5c, 0xeb, 0x4e, 0x15, 0x8e, 0x40,
+  0xd1, 0xcb, 0x7d, 0x01, 0x71, 0x15, 0x11, 0xd2, 0xc7, 0xdb, 0x6b, 0x00,
+  0xdc, 0x02, 0xcb, 0x5a, 0x6d, 0x2b, 0x2a, 0x75, 0xb6, 0x3f, 0xec, 0xc1,
+  0x9d, 0xbf, 0xda, 0xe5, 0x3a, 0x77, 0x4b, 0x21, 0x1c, 0x99, 0x42, 0x84,
+  0x5e, 0x27, 0x53, 0x9b, 0xe6, 0xc1, 0xa1, 0x95, 0x58, 0xba, 0xbe, 0x62,
+  0x58, 0xd5, 0x09, 0xa8, 0xe6, 0xb6, 0x1b, 0xb1, 0x18, 0x28, 0x13, 0xc7,
+  0x89, 0x1c, 0x68, 0xce, 0x15, 0xaf, 0x2e, 0x68, 0xac, 0x1c, 0xf7, 0x02,
+  0x03, 0x01, 0x00, 0x01, 0xa3, 0x53, 0x30, 0x51, 0x30, 0x1d, 0x06, 0x03,
+  0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x50, 0xe5, 0x05, 0xa3, 0x6e,
+  0x8f, 0x00, 0xf7, 0x93, 0x30, 0xe5, 0x25, 0x20, 0xdc, 0x8a, 0xc3, 0xad,
+  0x14, 0x6d, 0x90, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18,
+  0x30, 0x16, 0x80, 0x14, 0x50, 0xe5, 0x05, 0xa3, 0x6e, 0x8f, 0x00, 0xf7,
+  0x93, 0x30, 0xe5, 0x25, 0x20, 0xdc, 0x8a, 0xc3, 0xad, 0x14, 0x6d, 0x90,
+  0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05,
+  0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48,
+  0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00,
+  0x8e, 0xe4, 0x27, 0x42, 0x16, 0x6e, 0xbd, 0x28, 0x47, 0x09, 0x99, 0xc1,
+  0x55, 0x02, 0x82, 0x1a, 0xe1, 0xd0, 0xf3, 0xef, 0x4d, 0xaf, 0x30, 0x9a,
+  0x29, 0x4b, 0x74, 0x03, 0x6a, 0x95, 0x28, 0xf1, 0xbe, 0x62, 0x68, 0x9f,
+  0x82, 0x59, 0x7a, 0x49, 0x91, 0xb6, 0xaf, 0x6b, 0x23, 0x30, 0xb4, 0xf4,
+  0xdd, 0xfa, 0x30, 0x3f, 0xb6, 0xed, 0x74, 0x3f, 0x91, 0xe8, 0xd7, 0x84,
+  0x1a, 0xf3, 0xc6, 0x3d, 0xd8, 0x59, 0x8d, 0x68, 0x6e, 0xb3, 0x66, 0x9e,
+  0xe8, 0xeb, 0x1a, 0x8b, 0x1e, 0x92, 0x71, 0x73, 0x8c, 0x4f, 0x63, 0xce,
+  0x71, 0x7b, 0x97, 0x3b, 0x59, 0xd2, 0x9b, 0xe4, 0xd0, 0xef, 0x31, 0x9f,
+  0x0d, 0x61, 0x27, 0x97, 0x9d, 0xe8, 0xe0, 0xcd, 0x8d, 0xc1, 0x4d, 0xad,
+  0xf7, 0x3a, 0x8d, 0xb8, 0x86, 0x8c, 0x23, 0x1d, 0x4c, 0x02, 0x5c, 0x53,
+  0x46, 0x84, 0xb2, 0x97, 0x0c, 0xd3, 0x35, 0x6b
+};
+
+//
+// X509 Cert Data for RSA Public Key Retrieving and X509 Verification (Generated by OpenSSL utility).
+// $ openssl req -new -key TestKeyPem -out TestCertCsr -subj "/C=US/ST=WA/L=Seattle/O=Tianocore/OU=EDK2CHILD/CN=UEFI"
+// $ openssl x509 -days 10000 -CA TestCACert.pem -CAkey TestKeyPem -req -out TestCert -set_serial 3432 --outform DER -in TestCertCsr
+// password should be in the PemPass variable
+// $ xxd --include TestCert
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestCert[] = {
+  0x30, 0x82, 0x02, 0x31, 0x30, 0x82, 0x01, 0x9a, 0x02, 0x02, 0x0d, 0x68,
+  0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
+  0x0b, 0x05, 0x00, 0x30, 0x5e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
+  0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
+  0x55, 0x04, 0x08, 0x0c, 0x02, 0x57, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06,
+  0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c,
+  0x65, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09,
+  0x54, 0x69, 0x61, 0x6e, 0x6f, 0x63, 0x6f, 0x72, 0x65, 0x31, 0x0d, 0x30,
+  0x0b, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x04, 0x45, 0x44, 0x4b, 0x32,
+  0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x04, 0x55,
+  0x45, 0x46, 0x49, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x36, 0x32,
+  0x39, 0x32, 0x33, 0x31, 0x35, 0x33, 0x36, 0x5a, 0x17, 0x0d, 0x34, 0x37,
+  0x31, 0x31, 0x31, 0x35, 0x32, 0x33, 0x31, 0x35, 0x33, 0x36, 0x5a, 0x30,
+  0x63, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
+  0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c,
+  0x02, 0x57, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07,
+  0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x31, 0x12, 0x30,
+  0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x54, 0x69, 0x61, 0x6e,
+  0x6f, 0x63, 0x6f, 0x72, 0x65, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55,
+  0x04, 0x0b, 0x0c, 0x09, 0x45, 0x44, 0x4b, 0x32, 0x43, 0x48, 0x49, 0x4c,
+  0x44, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x04,
+  0x55, 0x45, 0x46, 0x49, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a,
+  0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81,
+  0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0x9f, 0xef, 0x1b,
+  0x46, 0x45, 0x55, 0x33, 0x4b, 0xee, 0x95, 0x14, 0xd3, 0x5a, 0x3e, 0xd9,
+  0x29, 0xfb, 0xd9, 0x29, 0x4e, 0x8b, 0xf1, 0xf5, 0x68, 0x7c, 0x58, 0x86,
+  0x0c, 0xda, 0xd7, 0xe0, 0xd2, 0x9a, 0xe8, 0x37, 0x16, 0x4d, 0x54, 0x92,
+  0x18, 0x20, 0x4c, 0x09, 0xa1, 0xcf, 0xe1, 0xaa, 0x7a, 0x5a, 0x64, 0x7e,
+  0x5c, 0xeb, 0x4e, 0x15, 0x8e, 0x40, 0xd1, 0xcb, 0x7d, 0x01, 0x71, 0x15,
+  0x11, 0xd2, 0xc7, 0xdb, 0x6b, 0x00, 0xdc, 0x02, 0xcb, 0x5a, 0x6d, 0x2b,
+  0x2a, 0x75, 0xb6, 0x3f, 0xec, 0xc1, 0x9d, 0xbf, 0xda, 0xe5, 0x3a, 0x77,
+  0x4b, 0x21, 0x1c, 0x99, 0x42, 0x84, 0x5e, 0x27, 0x53, 0x9b, 0xe6, 0xc1,
+  0xa1, 0x95, 0x58, 0xba, 0xbe, 0x62, 0x58, 0xd5, 0x09, 0xa8, 0xe6, 0xb6,
+  0x1b, 0xb1, 0x18, 0x28, 0x13, 0xc7, 0x89, 0x1c, 0x68, 0xce, 0x15, 0xaf,
+  0x2e, 0x68, 0xac, 0x1c, 0xf7, 0x02, 0x03, 0x01, 0x00, 0x01, 0x30, 0x0d,
+  0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05,
+  0x00, 0x03, 0x81, 0x81, 0x00, 0x0d, 0xa4, 0x18, 0xa2, 0xb6, 0x09, 0xe1,
+  0x77, 0x22, 0x97, 0x46, 0x29, 0x1b, 0xd8, 0x67, 0x0a, 0xc0, 0x91, 0x36,
+  0x53, 0xe1, 0x4c, 0x73, 0x1b, 0xc1, 0x90, 0x6d, 0x98, 0x46, 0x7e, 0x65,
+  0x71, 0x1c, 0xf0, 0x62, 0x9f, 0x9e, 0x62, 0x0b, 0x8b, 0x73, 0x35, 0x4c,
+  0x2d, 0xc3, 0x5d, 0x38, 0x22, 0xfe, 0x43, 0x0f, 0xf2, 0x57, 0x17, 0x75,
+  0xa8, 0x76, 0x79, 0xab, 0x4e, 0x33, 0xa5, 0x91, 0xbd, 0x55, 0x5b, 0xc0,
+  0x7e, 0xfb, 0x1d, 0xc9, 0xf3, 0x5f, 0x12, 0x6f, 0x7c, 0xdc, 0x24, 0x5a,
+  0x84, 0x16, 0x28, 0x5b, 0xf9, 0xcc, 0x8b, 0xfe, 0x11, 0xe6, 0x29, 0xcf,
+  0xac, 0x90, 0x66, 0xc0, 0x70, 0x25, 0xf8, 0x71, 0xdb, 0x29, 0xcb, 0x6b,
+  0x10, 0xa7, 0xbe, 0x3e, 0x9d, 0x61, 0xd8, 0x04, 0xe0, 0x71, 0x63, 0x83,
+  0xa3, 0xca, 0x26, 0x6d, 0x7f, 0xf3, 0xaa, 0x8e, 0xb2, 0x66, 0x98, 0x41,
+  0xd6
+};
+
+//
+// Message Hash for Signing & Verification Validation.
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 MsgHash[] = {
+  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
+  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09
+  };
+
+//
+// Payload for PKCS#7 Signing & Verification Validation.
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *Payload = "Payload Data for PKCS#7 Signing";
+
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyRsaCertPkcs1SignVerify (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  BOOLEAN        Status;
+  VOID           *RsaPrivKey;
+  VOID           *RsaPubKey;
+  UINT8          *Signature;
+  UINTN          SigSize;
+  UINT8          *Subject;
+  UINTN          SubjectSize;
+  RETURN_STATUS  ReturnStatus;
+  CHAR8          CommonName[64];
+  UINTN          CommonNameSize;
+  CHAR8          OrgName[64];
+  UINTN          OrgNameSize;
+
+  //
+  // Retrieve RSA private key from encrypted PEM data.
+  //
+  Status = RsaGetPrivateKeyFromPem (TestKeyPem, sizeof (TestKeyPem), PemPass, &RsaPrivKey);
+  UT_ASSERT_TRUE (Status);
+
+  //
+  // Retrieve RSA public key from X509 Certificate.
+  //
+  RsaPubKey = NULL;
+  Status    = RsaGetPublicKeyFromX509 (TestCert, sizeof (TestCert), &RsaPubKey);
+  UT_ASSERT_TRUE (Status);
+
+  //
+  // Generate RSA PKCS#1 Signature.
+  //
+  SigSize = 0;
+  Status  = RsaPkcs1Sign (RsaPrivKey, MsgHash, SHA1_DIGEST_SIZE, NULL, &SigSize);
+  UT_ASSERT_FALSE (Status);
+  UT_ASSERT_NOT_EQUAL (SigSize, 0);
+
+  Signature = AllocatePool (SigSize);
+  Status    = RsaPkcs1Sign (RsaPrivKey, MsgHash, SHA1_DIGEST_SIZE, Signature, &SigSize);
+  UT_ASSERT_TRUE (Status);
+
+  //
+  // Verify RSA PKCS#1-encoded Signature.
+  //
+  Status = RsaPkcs1Verify (RsaPubKey, MsgHash, SHA1_DIGEST_SIZE, Signature, SigSize);
+  UT_ASSERT_TRUE (Status);
+
+  //
+  // X509 Certificate Subject Retrieving.
+  //
+  SubjectSize = 0;
+  Status  = X509GetSubjectName (TestCert, sizeof (TestCert), NULL, &SubjectSize);
+  Subject = (UINT8 *)AllocatePool (SubjectSize);
+  Status  = X509GetSubjectName (TestCert, sizeof (TestCert), Subject, &SubjectSize);
+  UT_ASSERT_TRUE (Status);
+
+  //
+  // Get CommonName from X509 Certificate Subject
+  //
+  CommonNameSize = 64;
+  ZeroMem (CommonName, CommonNameSize);
+  ReturnStatus = X509GetCommonName (TestCert, sizeof (TestCert), CommonName, &CommonNameSize);
+  UT_ASSERT_NOT_EFI_ERROR (ReturnStatus);
+
+  UT_ASSERT_EQUAL (CommonNameSize, 5);
+  UT_ASSERT_MEM_EQUAL (CommonName, "UEFI", 5);
+
+  OrgNameSize = 64;
+  ZeroMem (OrgName, OrgNameSize);
+  ReturnStatus = X509GetOrganizationName (TestCert, sizeof (TestCert), OrgName, &OrgNameSize);
+  UT_ASSERT_NOT_EFI_ERROR (ReturnStatus);
+
+  UT_ASSERT_EQUAL (OrgNameSize, 10);
+  UT_ASSERT_MEM_EQUAL (OrgName, "Tianocore", 10);
+
+  //
+  // X509 Certificate Verification.
+  //
+  Status = X509VerifyCert (TestCert, sizeof (TestCert), TestCACert, sizeof (TestCACert));
+  UT_ASSERT_TRUE (Status);
+
+  //
+  // Release Resources.
+  //
+  RsaFree  (RsaPubKey);
+  RsaFree  (RsaPrivKey);
+  FreePool (Signature);
+  FreePool (Subject);
+
+  return UNIT_TEST_PASSED;
+}
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyPkcs7SignVerify (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  BOOLEAN  Status;
+  UINT8    *P7SignedData;
+  UINTN    P7SignedDataSize;
+  UINT8    *SignCert;
+
+  P7SignedData = NULL;
+  SignCert     = NULL;
+
+  //
+  // Construct Signer Certificate from RAW data.
+  //
+  Status = X509ConstructCertificate (TestCert, sizeof (TestCert), (UINT8 **) &SignCert);
+  UT_ASSERT_TRUE (Status);
+  UT_ASSERT_NOT_NULL (SignCert);
+
+  //
+  // Create PKCS#7 signedData on Payload.
+  // Note: Caller should release P7SignedData manually.
+  //
+  Status = Pkcs7Sign (
+             TestKeyPem,
+             sizeof (TestKeyPem),
+             (CONST UINT8 *) PemPass,
+             (UINT8 *) Payload,
+             AsciiStrLen (Payload),
+             SignCert,
+             NULL,
+             &P7SignedData,
+             &P7SignedDataSize
+             );
+  UT_ASSERT_TRUE (Status);
+  UT_ASSERT_NOT_EQUAL (P7SignedDataSize, 0);
+
+  Status = Pkcs7Verify (
+             P7SignedData,
+             P7SignedDataSize,
+             TestCACert,
+             sizeof (TestCACert),
+             (UINT8 *) Payload,
+             AsciiStrLen (Payload)
+             );
+  UT_ASSERT_TRUE (Status);
+
+  if (P7SignedData != NULL) {
+    FreePool (P7SignedData);
+  }
+  if (SignCert != NULL) {
+    X509Free (SignCert);
+  }
+
+  return UNIT_TEST_PASSED;
+}
+
+TEST_DESC mRsaCertTest[] = {
+    //
+    // -----Description--------------------------------------Class----------------------Function-----------------Pre---Post--Context
+    //
+    {"TestVerifyRsaCertPkcs1SignVerify()", "CryptoPkg.BaseCryptLib.RsaCert", TestVerifyRsaCertPkcs1SignVerify, NULL, NULL, NULL},
+};
+
+UINTN mRsaCertTestNum = ARRAY_SIZE(mRsaCertTest);
+
+TEST_DESC mPkcs7Test[] = {
+    //
+    // -----Description--------------------------------------Class----------------------Function-----------------Pre---Post--Context
+    //
+    {"TestVerifyPkcs7SignVerify()",        "CryptoPkg.BaseCryptLib.Pkcs7",   TestVerifyPkcs7SignVerify,        NULL, NULL, NULL},
+};
+
+UINTN mPkcs7TestNum = ARRAY_SIZE(mPkcs7Test);
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c
new file mode 100644
index 000000000000..7ce20d2e778f
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c
@@ -0,0 +1,310 @@
+/** @file
+  Application for RSA Primitives Validation.
+
+Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "TestBaseCryptLib.h"
+
+#define  RSA_MODULUS_LENGTH  512
+
+//
+// RSA PKCS#1 Validation Data from OpenSSL "Fips_rsa_selftest.c"
+//
+
+//
+// Public Modulus of RSA Key
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaN[] = {
+  0xBB, 0xF8, 0x2F, 0x09, 0x06, 0x82, 0xCE, 0x9C, 0x23, 0x38, 0xAC, 0x2B, 0x9D, 0xA8, 0x71, 0xF7,
+  0x36, 0x8D, 0x07, 0xEE, 0xD4, 0x10, 0x43, 0xA4, 0x40, 0xD6, 0xB6, 0xF0, 0x74, 0x54, 0xF5, 0x1F,
+  0xB8, 0xDF, 0xBA, 0xAF, 0x03, 0x5C, 0x02, 0xAB, 0x61, 0xEA, 0x48, 0xCE, 0xEB, 0x6F, 0xCD, 0x48,
+  0x76, 0xED, 0x52, 0x0D, 0x60, 0xE1, 0xEC, 0x46, 0x19, 0x71, 0x9D, 0x8A, 0x5B, 0x8B, 0x80, 0x7F,
+  0xAF, 0xB8, 0xE0, 0xA3, 0xDF, 0xC7, 0x37, 0x72, 0x3E, 0xE6, 0xB4, 0xB7, 0xD9, 0x3A, 0x25, 0x84,
+  0xEE, 0x6A, 0x64, 0x9D, 0x06, 0x09, 0x53, 0x74, 0x88, 0x34, 0xB2, 0x45, 0x45, 0x98, 0x39, 0x4E,
+  0xE0, 0xAA, 0xB1, 0x2D, 0x7B, 0x61, 0xA5, 0x1F, 0x52, 0x7A, 0x9A, 0x41, 0xF6, 0xC1, 0x68, 0x7F,
+  0xE2, 0x53, 0x72, 0x98, 0xCA, 0x2A, 0x8F, 0x59, 0x46, 0xF8, 0xE5, 0xFD, 0x09, 0x1D, 0xBD, 0xCB
+  };
+
+//
+// Public Exponent of RSA Key
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaE[] = { 0x11 };
+
+//
+// Private Exponent of RSA Key
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaD[] = {
+  0xA5, 0xDA, 0xFC, 0x53, 0x41, 0xFA, 0xF2, 0x89, 0xC4, 0xB9, 0x88, 0xDB, 0x30, 0xC1, 0xCD, 0xF8,
+  0x3F, 0x31, 0x25, 0x1E, 0x06, 0x68, 0xB4, 0x27, 0x84, 0x81, 0x38, 0x01, 0x57, 0x96, 0x41, 0xB2,
+  0x94, 0x10, 0xB3, 0xC7, 0x99, 0x8D, 0x6B, 0xC4, 0x65, 0x74, 0x5E, 0x5C, 0x39, 0x26, 0x69, 0xD6,
+  0x87, 0x0D, 0xA2, 0xC0, 0x82, 0xA9, 0x39, 0xE3, 0x7F, 0xDC, 0xB8, 0x2E, 0xC9, 0x3E, 0xDA, 0xC9,
+  0x7F, 0xF3, 0xAD, 0x59, 0x50, 0xAC, 0xCF, 0xBC, 0x11, 0x1C, 0x76, 0xF1, 0xA9, 0x52, 0x94, 0x44,
+  0xE5, 0x6A, 0xAF, 0x68, 0xC5, 0x6C, 0x09, 0x2C, 0xD3, 0x8D, 0xC3, 0xBE, 0xF5, 0xD2, 0x0A, 0x93,
+  0x99, 0x26, 0xED, 0x4F, 0x74, 0xA1, 0x3E, 0xDD, 0xFB, 0xE1, 0xA1, 0xCE, 0xCC, 0x48, 0x94, 0xAF,
+  0x94, 0x28, 0xC2, 0xB7, 0xB8, 0x88, 0x3F, 0xE4, 0x46, 0x3A, 0x4B, 0xC8, 0x5B, 0x1C, 0xB3, 0xC1
+  };
+
+//
+// Known Answer Test (KAT) Data for RSA PKCS#1 Signing
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 RsaSignData[] = "OpenSSL FIPS 140-2 Public Key RSA KAT";
+
+//
+// Known Signature for the above message, under SHA-1 Digest
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaPkcs1Signature[] = {
+  0x71, 0xEE, 0x1A, 0xC0, 0xFE, 0x01, 0x93, 0x54, 0x79, 0x5C, 0xF2, 0x4C, 0x4A, 0xFD, 0x1A, 0x05,
+  0x8F, 0x64, 0xB1, 0x6D, 0x61, 0x33, 0x8D, 0x9B, 0xE7, 0xFD, 0x60, 0xA3, 0x83, 0xB5, 0xA3, 0x51,
+  0x55, 0x77, 0x90, 0xCF, 0xDC, 0x22, 0x37, 0x8E, 0xD0, 0xE1, 0xAE, 0x09, 0xE3, 0x3D, 0x1E, 0xF8,
+  0x80, 0xD1, 0x8B, 0xC2, 0xEC, 0x0A, 0xD7, 0x6B, 0x88, 0x8B, 0x8B, 0xA1, 0x20, 0x22, 0xBE, 0x59,
+  0x5B, 0xE0, 0x23, 0x24, 0xA1, 0x49, 0x30, 0xBA, 0xA9, 0x9E, 0xE8, 0xB1, 0x8A, 0x62, 0x16, 0xBF,
+  0x4E, 0xCA, 0x2E, 0x4E, 0xBC, 0x29, 0xA8, 0x67, 0x13, 0xB7, 0x9F, 0x1D, 0x04, 0x44, 0xE5, 0x5F,
+  0x35, 0x07, 0x11, 0xBC, 0xED, 0x19, 0x37, 0x21, 0xCF, 0x23, 0x48, 0x1F, 0x72, 0x05, 0xDE, 0xE6,
+  0xE8, 0x7F, 0x33, 0x8A, 0x76, 0x4B, 0x2F, 0x95, 0xDF, 0xF1, 0x5F, 0x84, 0x80, 0xD9, 0x46, 0xB4
+  };
+
+//
+// Default public key 0x10001 = 65537
+//
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 DefaultPublicKey[] = {
+  0x01, 0x00, 0x01
+};
+
+VOID     *mRsa;
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyRsaPreReq (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  mRsa = RsaNew ();
+
+  if (mRsa == NULL) {
+    return UNIT_TEST_ERROR_TEST_FAILED;
+  }
+
+  return UNIT_TEST_PASSED;
+}
+
+VOID
+EFIAPI
+TestVerifyRsaCleanUp (
+  UNIT_TEST_CONTEXT           Context
+  )
+{
+  if (mRsa != NULL) {
+    RsaFree (mRsa);
+    mRsa = NULL;
+  }
+}
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyRsaSetGetKeyComponents (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  BOOLEAN  Status;
+  UINTN    KeySize;
+  UINT8    *KeyBuffer;
+
+  //
+  // Set/Get RSA Key Components
+  //
+
+  //
+  // Set/Get RSA Key N
+  //
+  Status = RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof (RsaN));
+  UT_ASSERT_TRUE (Status);
+
+  KeySize = 0;
+  Status = RsaGetKey (mRsa, RsaKeyN, NULL, &KeySize);
+  UT_ASSERT_FALSE (Status);
+  UT_ASSERT_EQUAL (KeySize, sizeof (RsaN));
+
+  KeyBuffer = AllocatePool (KeySize);
+  Status = RsaGetKey (mRsa, RsaKeyN, KeyBuffer, &KeySize);
+  UT_ASSERT_TRUE (Status);
+  UT_ASSERT_EQUAL (KeySize, sizeof (RsaN));
+
+  UT_ASSERT_MEM_EQUAL (KeyBuffer, RsaN, KeySize);
+
+  FreePool (KeyBuffer);
+
+  //
+  // Set/Get RSA Key E
+  //
+  Status = RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof (RsaE));
+  UT_ASSERT_TRUE (Status);
+
+  KeySize = 0;
+  Status = RsaGetKey (mRsa, RsaKeyE, NULL, &KeySize);
+  UT_ASSERT_FALSE (Status);
+  UT_ASSERT_EQUAL (KeySize, sizeof (RsaE));
+
+  KeyBuffer = AllocatePool (KeySize);
+  Status = RsaGetKey (mRsa, RsaKeyE, KeyBuffer, &KeySize);
+  UT_ASSERT_TRUE (Status);
+  UT_ASSERT_EQUAL (KeySize, sizeof (RsaE));
+
+  UT_ASSERT_MEM_EQUAL (KeyBuffer, RsaE, KeySize);
+
+  FreePool (KeyBuffer);
+
+  //
+  // Clear/Get RSA Key Components
+  //
+
+  //
+  // Clear/Get RSA Key N
+  //
+  Status = RsaSetKey (mRsa, RsaKeyN, NULL, 0);
+  UT_ASSERT_TRUE (Status);
+
+  KeySize = 1;
+  Status = RsaGetKey (mRsa, RsaKeyN, NULL, &KeySize);
+  UT_ASSERT_TRUE (Status);
+  UT_ASSERT_EQUAL (KeySize, 0);
+
+  //
+  // Clear/Get RSA Key E
+  //
+  Status = RsaSetKey (mRsa, RsaKeyE, NULL, 0);
+  UT_ASSERT_TRUE (Status);
+
+  KeySize = 1;
+  Status = RsaGetKey (mRsa, RsaKeyE, NULL, &KeySize);
+  UT_ASSERT_TRUE (Status);
+  UT_ASSERT_EQUAL (KeySize, 0);
+
+  return UNIT_TEST_PASSED;
+}
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyRsaGenerateKeyComponents (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  BOOLEAN  Status;
+  UINTN    KeySize;
+  UINT8    *KeyBuffer;
+
+  //
+  // Generate RSA Key Components
+  //
+
+  Status = RsaGenerateKey (mRsa, RSA_MODULUS_LENGTH, NULL, 0);
+  UT_ASSERT_TRUE (Status);
+
+  KeySize = RSA_MODULUS_LENGTH / 8;
+  KeyBuffer = AllocatePool (KeySize);
+  Status = RsaGetKey (mRsa, RsaKeyE, KeyBuffer, &KeySize);
+  UT_ASSERT_TRUE (Status);
+  UT_ASSERT_EQUAL (KeySize, 3);
+  UT_ASSERT_MEM_EQUAL (KeyBuffer, DefaultPublicKey, 3);
+
+  KeySize = RSA_MODULUS_LENGTH / 8;
+  Status = RsaGetKey (mRsa, RsaKeyN, KeyBuffer, &KeySize);
+  UT_ASSERT_TRUE (Status);
+  UT_ASSERT_EQUAL (KeySize, RSA_MODULUS_LENGTH / 8);
+
+  Status = RsaCheckKey (mRsa);
+  UT_ASSERT_TRUE (Status);
+
+  //
+  // Check invalid RSA key components
+  //
+  Status = RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof (RsaN));
+  UT_ASSERT_TRUE (Status);
+
+  Status = RsaCheckKey (mRsa);
+  UT_ASSERT_FALSE (Status);
+
+  Status = RsaSetKey (mRsa, RsaKeyN, KeyBuffer, KeySize);
+  UT_ASSERT_TRUE (Status);
+
+  Status = RsaCheckKey (mRsa);
+  UT_ASSERT_TRUE (Status);
+
+  Status = RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof (RsaE));
+  UT_ASSERT_TRUE (Status);
+
+  Status = RsaCheckKey (mRsa);
+  UT_ASSERT_FALSE (Status);
+
+  FreePool (KeyBuffer);
+
+  return UNIT_TEST_PASSED;
+}
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyRsaPkcs1SignVerify (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  UINT8    HashValue[SHA1_DIGEST_SIZE];
+  UINTN    HashSize;
+  UINT8    *Signature;
+  UINTN    SigSize;
+  BOOLEAN  Status;
+
+  //
+  // SHA-1 Digest Message for PKCS#1 Signature
+  //
+  HashSize = SHA1_DIGEST_SIZE;
+  ZeroMem (HashValue, HashSize);
+
+  Status  = Sha1HashAll (RsaSignData, AsciiStrLen (RsaSignData), HashValue);
+  UT_ASSERT_TRUE (Status);
+
+  //
+  // Sign RSA PKCS#1-encoded Signature
+  //
+
+  Status = RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof (RsaN));
+  UT_ASSERT_TRUE (Status);
+
+  Status = RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof (RsaE));
+  UT_ASSERT_TRUE (Status);
+
+  Status = RsaSetKey (mRsa, RsaKeyD, RsaD, sizeof (RsaD));
+  UT_ASSERT_TRUE (Status);
+
+  SigSize = 0;
+  Status  = RsaPkcs1Sign (mRsa, HashValue, HashSize, NULL, &SigSize);
+  UT_ASSERT_FALSE (Status);
+  UT_ASSERT_NOT_EQUAL (SigSize, 0);
+
+  Signature = AllocatePool (SigSize);
+  Status  = RsaPkcs1Sign (mRsa, HashValue, HashSize, Signature, &SigSize);
+  UT_ASSERT_TRUE (Status);
+  UT_ASSERT_EQUAL (SigSize, sizeof (RsaPkcs1Signature));
+
+  UT_ASSERT_MEM_EQUAL (Signature, RsaPkcs1Signature, SigSize);
+
+  //
+  // Verify RSA PKCS#1-encoded Signature
+  //
+  Status = RsaPkcs1Verify (mRsa, HashValue, HashSize, Signature, SigSize);
+  UT_ASSERT_TRUE (Status);
+
+  return UNIT_TEST_PASSED;
+}
+
+TEST_DESC mRsaTest[] = {
+    //
+    // -----Description--------------------------------------Class----------------------Function---------------------------------Pre---------------------Post---------Context
+    //
+    {"TestVerifyRsaSetGetKeyComponents()",       "CryptoPkg.BaseCryptLib.Rsa",   TestVerifyRsaSetGetKeyComponents,       TestVerifyRsaPreReq, TestVerifyRsaCleanUp, NULL},
+    {"TestVerifyRsaGenerateKeyComponents()",     "CryptoPkg.BaseCryptLib.Rsa",   TestVerifyRsaGenerateKeyComponents,     TestVerifyRsaPreReq, TestVerifyRsaCleanUp, NULL},
+    {"TestVerifyRsaPkcs1SignVerify()",           "CryptoPkg.BaseCryptLib.Rsa",   TestVerifyRsaPkcs1SignVerify,           TestVerifyRsaPreReq, TestVerifyRsaCleanUp, NULL},
+};
+
+UINTN mRsaTestNum = ARRAY_SIZE(mRsaTest);
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c
new file mode 100644
index 000000000000..2a891ef8bcb0
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c
@@ -0,0 +1,335 @@
+/** @file
+  Sample Implementation for RFC3161 Time Stamping Verification.
+
+Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "TestBaseCryptLib.h"
+
+//
+// Sample Authenticode Data with RFC3161 time stamping signature.
+// The data retrieved from one signed sample UEFI image, which is generated by MSFT's signtool
+// utility in conjunction with RFC3161 timestamping, as the following command:
+//   signtool sign /ac <xxx.cer> / f <xxx.pfx> /p <pass> /fd <digestAlg>
+//     /tr http://timestamp.comodoca.com/rfc3161 sample.efi
+//
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 AuthenticodeWithTS[] = {
+  0x30, 0x82, 0x0c, 0x00, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0,
+  0x82, 0x0b, 0xf1, 0x30, 0x82, 0x0b, 0xed, 0x02, 0x01, 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09,
+  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x78, 0x06, 0x0a, 0x2b,
+  0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, 0xa0, 0x6a, 0x30, 0x68, 0x30, 0x33, 0x06,
+  0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0f, 0x30, 0x25, 0x03, 0x01, 0x00,
+  0xa0, 0x20, 0xa2, 0x1e, 0x80, 0x1c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x4f, 0x00, 0x62,
+  0x00, 0x73, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x74, 0x00, 0x65, 0x00, 0x3e, 0x00, 0x3e,
+  0x00, 0x3e, 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02,
+  0x01, 0x05, 0x00, 0x04, 0x20, 0x1e, 0x9e, 0x74, 0x31, 0xe1, 0x3e, 0x51, 0x46, 0xab, 0xce, 0x10,
+  0x0d, 0x7c, 0x38, 0x66, 0x34, 0xd4, 0xdd, 0x04, 0xa5, 0xe7, 0x75, 0x40, 0xdd, 0x99, 0x73, 0xf3,
+  0x2a, 0x54, 0x3e, 0xa8, 0x18, 0xa0, 0x82, 0x01, 0xee, 0x30, 0x82, 0x01, 0xea, 0x30, 0x82, 0x01,
+  0x57, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x2c, 0x65, 0xcf, 0xcf, 0xdd, 0x61, 0x7b, 0xa4,
+  0x41, 0xad, 0x26, 0x1b, 0x63, 0xce, 0x91, 0x0f, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02,
+  0x1d, 0x05, 0x00, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x08,
+  0x54, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x37,
+  0x32, 0x38, 0x30, 0x37, 0x33, 0x38, 0x35, 0x39, 0x5a, 0x17, 0x0d, 0x33, 0x39, 0x31, 0x32, 0x33,
+  0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03,
+  0x55, 0x04, 0x03, 0x13, 0x07, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x62, 0x30, 0x81, 0x9f, 0x30,
+  0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81,
+  0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0x94, 0xa6, 0x02, 0x15, 0x87, 0xd6, 0xbf,
+  0x71, 0xe8, 0xc6, 0x68, 0xf6, 0x9f, 0x66, 0x09, 0x6c, 0xe7, 0x39, 0x52, 0xf4, 0x4e, 0xaf, 0xf5,
+  0xe0, 0xba, 0x0f, 0xfd, 0xe6, 0x77, 0xa9, 0x71, 0x5b, 0x5c, 0x92, 0x50, 0x1d, 0xfd, 0x9b, 0x6e,
+  0x52, 0x92, 0x9e, 0x3a, 0x75, 0x86, 0x41, 0x2a, 0x41, 0x30, 0x1b, 0x67, 0x66, 0x91, 0xde, 0x71,
+  0x84, 0xe0, 0x90, 0xc3, 0x50, 0x36, 0x78, 0xb5, 0xa0, 0x1e, 0x72, 0xde, 0xe7, 0x66, 0x42, 0x4f,
+  0x59, 0x5e, 0x3d, 0xf3, 0x85, 0x82, 0x0b, 0xa8, 0x26, 0x2d, 0xd9, 0xe3, 0x14, 0xda, 0x9d, 0x2e,
+  0x3f, 0x53, 0x4d, 0x8d, 0x10, 0xbf, 0xa4, 0x7c, 0xe5, 0xaf, 0x3a, 0xa6, 0xaf, 0x49, 0x64, 0xb0,
+  0x60, 0x17, 0x87, 0x71, 0x77, 0x59, 0x52, 0xe5, 0x5a, 0xed, 0x96, 0x7d, 0x7e, 0x5d, 0xc1, 0xef,
+  0x6b, 0xfb, 0x80, 0xc5, 0x2b, 0x10, 0xfe, 0xe7, 0xd3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x48,
+  0x30, 0x46, 0x30, 0x44, 0x06, 0x03, 0x55, 0x1d, 0x01, 0x04, 0x3d, 0x30, 0x3b, 0x80, 0x10, 0x19,
+  0x8d, 0x48, 0xa1, 0xb9, 0xf3, 0x5e, 0x3c, 0x13, 0xb4, 0x08, 0xb6, 0xd9, 0xf3, 0x4f, 0x0a, 0xa1,
+  0x15, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x08, 0x54, 0x65,
+  0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x82, 0x10, 0x27, 0xcb, 0x16, 0x33, 0x8b, 0xed, 0x4d, 0xa8,
+  0x47, 0xf0, 0x86, 0x47, 0x10, 0xef, 0x15, 0xd9, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02,
+  0x1d, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, 0x51, 0x94, 0xed, 0x7a, 0x5c, 0x0b, 0x34, 0x16, 0x9c,
+  0xf4, 0x5f, 0x88, 0x16, 0xa8, 0x4b, 0x13, 0xfc, 0xa4, 0x0a, 0xc7, 0xd9, 0x20, 0xb1, 0x93, 0xc5,
+  0x81, 0x4f, 0x35, 0x3a, 0x89, 0x10, 0x04, 0xc4, 0xcc, 0x10, 0x34, 0xc3, 0x15, 0x57, 0x06, 0x97,
+  0xee, 0x06, 0x2f, 0xf3, 0x24, 0xa1, 0xe6, 0x3a, 0x89, 0x4d, 0xb4, 0x7b, 0x12, 0x87, 0x90, 0x8c,
+  0xfc, 0x5b, 0xb0, 0xf0, 0xdd, 0xaa, 0x3a, 0x24, 0x6d, 0x55, 0x47, 0x8a, 0xf2, 0x61, 0x08, 0x7a,
+  0x59, 0x5f, 0x6e, 0x7b, 0xcb, 0x34, 0xbe, 0xb6, 0x5d, 0xcb, 0x60, 0xae, 0xc4, 0xda, 0x62, 0xbb,
+  0x7f, 0x17, 0x1e, 0x73, 0xd1, 0x4e, 0x9f, 0x6e, 0xd3, 0xc8, 0x35, 0x58, 0x30, 0xd2, 0x89, 0xe5,
+  0x22, 0x5e, 0x86, 0xac, 0x7a, 0x56, 0xd6, 0x70, 0xdb, 0x54, 0x10, 0x6c, 0xd3, 0xd5, 0x38, 0xfb,
+  0x69, 0xcb, 0x4f, 0x36, 0x83, 0xc2, 0xe8, 0x31, 0x82, 0x09, 0x69, 0x30, 0x82, 0x09, 0x65, 0x02,
+  0x01, 0x01, 0x30, 0x27, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13,
+  0x08, 0x54, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x02, 0x10, 0x2c, 0x65, 0xcf, 0xcf, 0xdd,
+  0x61, 0x7b, 0xa4, 0x41, 0xad, 0x26, 0x1b, 0x63, 0xce, 0x91, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x60,
+  0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0xa0, 0x5e, 0x30, 0x10, 0x06, 0x0a,
+  0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0c, 0x31, 0x02, 0x30, 0x00, 0x30, 0x19,
+  0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0c, 0x06, 0x0a, 0x2b,
+  0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48,
+  0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, 0x04, 0x20, 0x97, 0x6e, 0x29, 0x47, 0xc4, 0x03,
+  0x68, 0x70, 0x1c, 0x99, 0x2c, 0x61, 0xb0, 0xbc, 0xde, 0x77, 0xe1, 0xa1, 0xeb, 0x4c, 0x1c, 0xac,
+  0x4c, 0x64, 0xf6, 0x43, 0x96, 0x94, 0x0b, 0xc0, 0xbb, 0x03, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
+  0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x81, 0x80, 0x85, 0x93, 0xad, 0x93,
+  0x92, 0x9e, 0xa4, 0x94, 0x30, 0x02, 0xe1, 0xc8, 0xcd, 0x37, 0xb2, 0xe1, 0xcb, 0xb2, 0x0f, 0x1c,
+  0x67, 0xd1, 0xc9, 0xeb, 0x4d, 0x68, 0x85, 0x97, 0x5a, 0xa6, 0x0c, 0x03, 0xc7, 0x86, 0xae, 0xb3,
+  0x35, 0xb4, 0x1d, 0x0e, 0x95, 0x5f, 0xed, 0x37, 0x13, 0x6b, 0x1e, 0x94, 0x80, 0xf1, 0xac, 0x55,
+  0x73, 0xd1, 0x31, 0xf9, 0xad, 0x13, 0x7b, 0x26, 0xbf, 0xe7, 0x55, 0x7b, 0xb2, 0xf9, 0x21, 0x42,
+  0x23, 0x64, 0xe6, 0x45, 0x03, 0x67, 0xcb, 0x42, 0xd3, 0x71, 0x3f, 0xd5, 0x29, 0x17, 0x4b, 0x49,
+  0x45, 0x0e, 0x8b, 0xba, 0x1f, 0x15, 0x5a, 0x7f, 0x7b, 0x5e, 0x9b, 0x22, 0x46, 0xa7, 0x9c, 0x0d,
+  0x25, 0x9c, 0x76, 0x25, 0x02, 0xc8, 0x15, 0x00, 0x51, 0xe6, 0x73, 0x39, 0xac, 0x8d, 0x41, 0x7b,
+  0xc8, 0x42, 0xc9, 0xdb, 0x1b, 0x16, 0x13, 0xf6, 0x44, 0x32, 0xef, 0x17, 0xa1, 0x82, 0x08, 0x34,
+  0x30, 0x82, 0x08, 0x30, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x03, 0x03, 0x01,
+  0x31, 0x82, 0x08, 0x20,
+  0x30, 0x82, 0x08, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0,
+  0x82, 0x08, 0x0d, 0x30, 0x82, 0x08, 0x09, 0x02, 0x01, 0x03, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x05,
+  0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x30, 0x81, 0xf6, 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86,
+  0xf7, 0x0d, 0x01, 0x09, 0x10, 0x01, 0x04, 0xa0, 0x81, 0xe6, 0x04, 0x81, 0xe3, 0x30, 0x81, 0xe0,
+  0x02, 0x01, 0x01, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0xb2, 0x31, 0x02, 0x01, 0x01, 0x30,
+  0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14, 0xcd, 0x06,
+  0xf0, 0xbd, 0x8b, 0xcd, 0x5c, 0x2e, 0x5a, 0x7c, 0x42, 0x56, 0x2c, 0x20, 0x4a, 0x15, 0xcb, 0x1d,
+  0x8b, 0x0e, 0x02, 0x15, 0x00, 0xb6, 0xff, 0x47, 0x05, 0xb6, 0x2d, 0x15, 0xac, 0x3f, 0x5d, 0xd9,
+  0xcf, 0x9d, 0x54, 0x35, 0x56, 0x7c, 0xc1, 0x6e, 0x8b, 0x18, 0x0f, 0x32, 0x30, 0x31, 0x34, 0x30,
+  0x37, 0x32, 0x38, 0x30, 0x38, 0x35, 0x30, 0x30, 0x33, 0x5a, 0xa0, 0x81, 0x83, 0xa4, 0x81, 0x80,
+  0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31,
+  0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65,
+  0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e,
+  0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a,
+  0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20,
+  0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03,
+  0x55, 0x04, 0x03, 0x13, 0x1b, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x54, 0x69, 0x6d, 0x65,
+  0x20, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72,
+  0xa0, 0x82, 0x04, 0x97, 0x30, 0x82, 0x04, 0x93, 0x30, 0x82, 0x03, 0x7b, 0xa0, 0x03, 0x02, 0x01,
+  0x02, 0x02, 0x10, 0x47, 0x8a, 0x8e, 0xfb, 0x59, 0xe1, 0xd8, 0x3f, 0x0c, 0xe1, 0x42, 0xd2, 0xa2,
+  0x87, 0x07, 0xbe, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05,
+  0x05, 0x00, 0x30, 0x81, 0x95, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
+  0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x02, 0x55, 0x54, 0x31,
+  0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0e, 0x53, 0x61, 0x6c, 0x74, 0x20, 0x4c,
+  0x61, 0x6b, 0x65, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04,
+  0x0a, 0x13, 0x15, 0x54, 0x68, 0x65, 0x20, 0x55, 0x53, 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54,
+  0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04,
+  0x0b, 0x13, 0x18, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x75, 0x73,
+  0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x1d, 0x30, 0x1b, 0x06,
+  0x03, 0x55, 0x04, 0x03, 0x13, 0x14, 0x55, 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69,
+  0x72, 0x73, 0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30,
+  0x30, 0x35, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x35, 0x30,
+  0x35, 0x31, 0x30, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09,
+  0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55,
+  0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63,
+  0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13,
+  0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04,
+  0x0a, 0x13, 0x11, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d,
+  0x69, 0x74, 0x65, 0x64, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x43,
+  0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, 0x74, 0x61, 0x6d, 0x70,
+  0x69, 0x6e, 0x67, 0x20, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d,
+  0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01,
+  0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbc, 0x35, 0xa0, 0x36, 0x70,
+  0x22, 0x81, 0x11, 0xc3, 0xb2, 0x83, 0xb9, 0xd3, 0x28, 0xc6, 0x36, 0xcd, 0x25, 0x6b, 0xa9, 0x7b,
+  0xb2, 0x1c, 0xf6, 0x9b, 0x51, 0x9c, 0xef, 0x35, 0xf4, 0xed, 0x08, 0x8e, 0x5e, 0x38, 0x08, 0xf8,
+  0x77, 0x3c, 0x0a, 0x42, 0xe0, 0xf3, 0x70, 0xdc, 0xa3, 0xd7, 0xca, 0xf5, 0x4c, 0x0b, 0xcf, 0xff,
+  0x22, 0x9c, 0x0a, 0x7e, 0x68, 0xd6, 0x09, 0xa2, 0x2a, 0x84, 0x7b, 0xa6, 0x9d, 0xb4, 0xa9, 0xc1,
+  0x33, 0xe2, 0xef, 0x1f, 0x17, 0x48, 0xca, 0x3a, 0xcd, 0x46, 0xe6, 0xc5, 0xaa, 0x77, 0xbd, 0xe3,
+  0x77, 0x9a, 0xfa, 0x47, 0x53, 0x40, 0x28, 0x59, 0x43, 0x93, 0xf1, 0xa4, 0x81, 0xea, 0xef, 0x80,
+  0xb5, 0x4f, 0xa7, 0x08, 0xce, 0xba, 0x6e, 0xbc, 0xca, 0x76, 0x0c, 0x97, 0x64, 0x59, 0x86, 0x24,
+  0xbb, 0x3d, 0x82, 0x90, 0xa8, 0x55, 0xb1, 0x92, 0xd3, 0xa0, 0xa7, 0x05, 0xac, 0x9f, 0x53, 0x25,
+  0x08, 0x10, 0x47, 0x99, 0xcd, 0x98, 0xde, 0x68, 0xe5, 0xb4, 0x50, 0x78, 0xa3, 0xaf, 0x01, 0xcc,
+  0x59, 0x43, 0x58, 0xe4, 0x76, 0x6e, 0x7e, 0xac, 0xc7, 0xe2, 0x9e, 0x1f, 0x4f, 0xb0, 0x47, 0x2d,
+  0xc8, 0x0c, 0xa3, 0x49, 0x27, 0x80, 0x75, 0x8c, 0xbb, 0x06, 0x91, 0x65, 0x0f, 0x90, 0x9b, 0xf4,
+  0xba, 0xd1, 0x81, 0xc8, 0x5c, 0x6a, 0xec, 0x14, 0xe9, 0x25, 0x09, 0xbf, 0x23, 0x16, 0xf4, 0x95,
+  0x46, 0x40, 0x40, 0x21, 0xbb, 0x83, 0x96, 0xfd, 0x86, 0x1f, 0x7a, 0xc8, 0x0d, 0x10, 0x8e, 0xa2,
+  0xf8, 0x19, 0x07, 0x58, 0x7f, 0x9f, 0xbd, 0x37, 0x02, 0x60, 0xf2, 0xa4, 0xe9, 0x9d, 0x44, 0x3f,
+  0x30, 0x05, 0xe4, 0xa7, 0x70, 0x99, 0x51, 0x9a, 0xe8, 0x17, 0xf1, 0x55, 0xca, 0xb2, 0x61, 0x89,
+  0x65, 0x46, 0xa7, 0x6a, 0xf2, 0x58, 0x46, 0x7e, 0xaa, 0xa0, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01,
+  0xa3, 0x81, 0xf4, 0x30, 0x81, 0xf1, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30,
+  0x16, 0x80, 0x14, 0xda, 0xed, 0x64, 0x74, 0x14, 0x9c, 0x14, 0x3c, 0xab, 0xdd, 0x99, 0xa9, 0xbd,
+  0x5b, 0x28, 0x4d, 0x8b, 0x3c, 0xc9, 0xd8, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16,
+  0x04, 0x14, 0x2e, 0x2d, 0xb0, 0x0a, 0x44, 0x4a, 0xd3, 0x87, 0xc0, 0x02, 0x07, 0xce, 0x97, 0x7d,
+  0x50, 0x62, 0x20, 0xfd, 0x0f, 0x83, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff,
+  0x04, 0x04, 0x03, 0x02, 0x06, 0xc0, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff,
+  0x04, 0x02, 0x30, 0x00, 0x30, 0x16, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x0c,
+  0x30, 0x0a, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, 0x42, 0x06, 0x03,
+  0x55, 0x1d, 0x1f, 0x04, 0x3b, 0x30, 0x39, 0x30, 0x37, 0xa0, 0x35, 0xa0, 0x33, 0x86, 0x31, 0x68,
+  0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72,
+  0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x55, 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45, 0x52,
+  0x46, 0x69, 0x72, 0x73, 0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x63, 0x72, 0x6c,
+  0x30, 0x35, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x29, 0x30, 0x27,
+  0x30, 0x25, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x86, 0x19, 0x68, 0x74,
+  0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x63, 0x73, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72,
+  0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
+  0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xc8, 0xfb, 0x63, 0xf8, 0x0b,
+  0x75, 0x75, 0x2c, 0x3a, 0xf1, 0xf2, 0x13, 0xa7, 0x2d, 0xb6, 0xa3, 0x1a, 0x9c, 0xad, 0x01, 0x07,
+  0xd3, 0x34, 0x8e, 0x77, 0xe0, 0xc2, 0x6e, 0xae, 0x02, 0x5d, 0x48, 0x4f, 0xa4, 0xd2, 0x21, 0xb6,
+  0x36, 0xfd, 0x2a, 0x35, 0x43, 0x7c, 0x6b, 0xdf, 0x80, 0x87, 0x0b, 0x15, 0xf0, 0x76, 0x32, 0x00,
+  0xb4, 0xce, 0xb5, 0x67, 0xa4, 0x2f, 0x2f, 0x20, 0x1b, 0x9c, 0x54, 0x9e, 0x83, 0x3f, 0x1f, 0x5f,
+  0x14, 0x95, 0x62, 0x82, 0x0f, 0x22, 0x41, 0x22, 0x1f, 0x70, 0xb3, 0xf3, 0xf7, 0x42, 0xde, 0x6c,
+  0x51, 0xcd, 0x4b, 0xf8, 0x21, 0xac, 0x9b, 0x3b, 0x8c, 0xb1, 0xe5, 0xe6, 0x28, 0x8f, 0xce, 0x2a,
+  0x8a, 0xf9, 0xaa, 0x52, 0x4d, 0x8c, 0x5b, 0x77, 0xba, 0x4d, 0x5a, 0x58, 0xdb, 0xbb, 0x6a, 0x04,
+  0xcc, 0x52, 0x1e, 0x9d, 0xe2, 0x28, 0x37, 0x0e, 0xbb, 0xe7, 0x0e, 0x91, 0xc7, 0xf8, 0xdb, 0xf1,
+  0x81, 0x98, 0xeb, 0xcd, 0x37, 0xb3, 0x0e, 0xab, 0x65, 0xd3, 0x62, 0xec, 0x3a, 0xa5, 0x76, 0xeb,
+  0x13, 0xa8, 0x35, 0x93, 0xc9, 0x2e, 0x0a, 0x01, 0xec, 0xc0, 0xe8, 0xcc, 0x3d, 0x7e, 0xb6, 0xeb,
+  0xe2, 0xc1, 0xec, 0xd3, 0x14, 0x92, 0x82, 0x66, 0x87, 0x50, 0xdc, 0xfd, 0x50, 0x97, 0xac, 0xb3,
+  0x4a, 0x76, 0x73, 0x06, 0xc4, 0x86, 0x11, 0x3a, 0xb3, 0x5f, 0x43, 0x04, 0x52, 0x6f, 0xea, 0xb3,
+  0xd0, 0x74, 0x36, 0x4c, 0xca, 0xf1, 0x1b, 0x79, 0x84, 0x37, 0x70, 0x63, 0xad, 0x74, 0xb9, 0xaa,
+  0x0e, 0xf3, 0x98, 0xb0, 0x86, 0x08, 0xeb, 0xdb, 0xe0, 0x1f, 0x8c, 0x10, 0xf2, 0x39, 0x64, 0x9b,
+  0xae, 0x4f, 0x0a, 0x2c, 0x92, 0x8a, 0x4f, 0x18, 0xb5, 0x91, 0xe5, 0x8d, 0x1a, 0x93, 0x5f, 0x1f,
+  0xae, 0xf1, 0xa6, 0xf0, 0x2e, 0x97, 0xd0, 0xd2, 0xf6, 0x2b, 0x3c, 0x31, 0x82, 0x02, 0x61, 0x30,
+  0x82, 0x02, 0x5d, 0x02, 0x01, 0x01, 0x30, 0x81, 0xaa, 0x30, 0x81, 0x95, 0x31, 0x0b, 0x30, 0x09,
+  0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
+  0x04, 0x08, 0x13, 0x02, 0x55, 0x54, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13,
+  0x0e, 0x53, 0x61, 0x6c, 0x74, 0x20, 0x4c, 0x61, 0x6b, 0x65, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31,
+  0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x54, 0x68, 0x65, 0x20, 0x55, 0x53,
+  0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31,
+  0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x18, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+  0x2f, 0x77, 0x77, 0x77, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x63,
+  0x6f, 0x6d, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x14, 0x55, 0x54, 0x4e,
+  0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69, 0x72, 0x73, 0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+  0x74, 0x02, 0x10, 0x47, 0x8a, 0x8e, 0xfb, 0x59, 0xe1, 0xd8, 0x3f, 0x0c, 0xe1, 0x42, 0xd2, 0xa2,
+  0x87, 0x07, 0xbe, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0xa0, 0x81,
+  0x8c, 0x30, 0x1a, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0d,
+  0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x10, 0x01, 0x04, 0x30, 0x1c, 0x06,
+  0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x05, 0x31, 0x0f, 0x17, 0x0d, 0x31, 0x34,
+  0x30, 0x37, 0x32, 0x38, 0x30, 0x38, 0x35, 0x30, 0x30, 0x33, 0x5a, 0x30, 0x23, 0x06, 0x09, 0x2a,
+  0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x16, 0x04, 0x14, 0x7a, 0xad, 0x35, 0xdc,
+  0x5b, 0xd6, 0x00, 0xd7, 0x44, 0xac, 0x80, 0x8f, 0x4f, 0xb6, 0xb4, 0x03, 0x62, 0x34, 0x53, 0xdc,
+  0x30, 0x2b, 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x10, 0x02, 0x0c, 0x31,
+  0x1c, 0x30, 0x1a, 0x30, 0x18, 0x30, 0x16, 0x04, 0x14, 0x3d, 0xbb, 0x6d, 0xb5, 0x08, 0x5c, 0x6d,
+  0xd5, 0xa1, 0xca, 0x7f, 0x9c, 0xf8, 0x4e, 0xcb, 0x1a, 0x39, 0x10, 0xca, 0xc8, 0x30, 0x0d, 0x06,
+  0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00,
+  0x73, 0x64, 0xb9, 0xa3, 0x54, 0x6f, 0x50, 0x97, 0x01, 0xa7, 0xf6, 0x0d, 0xb8, 0xce, 0x4b, 0xaa,
+  0x43, 0xa2, 0x8f, 0xa3, 0xea, 0x93, 0xf2, 0xa3, 0xd0, 0x46, 0xde, 0xdd, 0x45, 0xe5, 0x94, 0x5a,
+  0x45, 0xc2, 0x13, 0x1b, 0x90, 0x9b, 0xcf, 0x73, 0xcd, 0x28, 0x70, 0xf0, 0xf4, 0x54, 0xb5, 0x2d,
+  0x31, 0xf9, 0xf3, 0x2d, 0x38, 0x78, 0xfe, 0x68, 0xea, 0x3c, 0xc0, 0xbe, 0x0b, 0x5a, 0x91, 0x49,
+  0x63, 0xeb, 0x26, 0x32, 0x5b, 0x86, 0xcf, 0xe5, 0x8a, 0xa5, 0x9d, 0xe6, 0x4b, 0x57, 0x91, 0x8f,
+  0x3c, 0xdc, 0xa6, 0x53, 0xd8, 0xdb, 0x8a, 0xfd, 0x3e, 0x7e, 0x19, 0x6f, 0x27, 0x72, 0x95, 0xc2,
+  0x79, 0x73, 0xdf, 0xfb, 0x08, 0x5c, 0x5b, 0xc8, 0xb7, 0x94, 0x75, 0x88, 0x7a, 0x9a, 0x85, 0x9f,
+  0x1b, 0xa3, 0x98, 0x30, 0x91, 0xee, 0xc0, 0x52, 0xd2, 0x75, 0x9c, 0xcb, 0x45, 0x0d, 0x94, 0x43,
+  0x67, 0x7a, 0x49, 0x1c, 0xb1, 0x89, 0x9d, 0x6e, 0xfa, 0x87, 0xd2, 0x4d, 0x6e, 0x74, 0x90, 0xf5,
+  0x80, 0x8c, 0x92, 0xda, 0xd9, 0xa1, 0x48, 0x20, 0x31, 0x02, 0x79, 0xde, 0xe3, 0xbd, 0x09, 0x04,
+  0xa8, 0xd4, 0x99, 0xd7, 0x3b, 0xea, 0xf8, 0xdf, 0xb3, 0xb9, 0xd7, 0xa3, 0x36, 0xa1, 0xdb, 0xd3,
+  0xec, 0x65, 0x8c, 0xb8, 0x8f, 0xfb, 0xd6, 0xef, 0x9c, 0x32, 0x3e, 0xab, 0x20, 0x74, 0xb9, 0x65,
+  0x4c, 0xc6, 0x15, 0x2f, 0x31, 0x2a, 0x34, 0x3e, 0x84, 0x09, 0xb4, 0x75, 0xbc, 0xbe, 0xaf, 0xb3,
+  0x9e, 0x85, 0xf1, 0xbb, 0x99, 0x1a, 0x07, 0xbd, 0x20, 0xa6, 0xed, 0xcf, 0xd1, 0xa6, 0x9a, 0x22,
+  0xb2, 0x6d, 0x75, 0xf4, 0x23, 0x58, 0x13, 0x78, 0x73, 0x1a, 0xb2, 0x84, 0xde, 0xad, 0xe8, 0x6d,
+  0xe6, 0xe7, 0x5c, 0xb6, 0xe6, 0x5b, 0x10, 0x37, 0x1f, 0xe3, 0x6e, 0xbd, 0x83, 0xd7, 0x51, 0xb1,
+  0x00, 0x00, 0x00, 0x00, 0x0a
+  };
+
+//
+// The Comodo Time Stamping Signer Certificate Used for the verification of TimeStamp signature.
+//
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TSTrustedCert[] = {
+  0x30, 0x82, 0x04, 0x93, 0x30, 0x82, 0x03, 0x7b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x47,
+  0x8a, 0x8e, 0xfb, 0x59, 0xe1, 0xd8, 0x3f, 0x0c, 0xe1, 0x42, 0xd2, 0xa2, 0x87, 0x07, 0xbe, 0x30,
+  0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81,
+  0x95, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b,
+  0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x02, 0x55, 0x54, 0x31, 0x17, 0x30, 0x15, 0x06,
+  0x03, 0x55, 0x04, 0x07, 0x13, 0x0e, 0x53, 0x61, 0x6c, 0x74, 0x20, 0x4c, 0x61, 0x6b, 0x65, 0x20,
+  0x43, 0x69, 0x74, 0x79, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x54,
+  0x68, 0x65, 0x20, 0x55, 0x53, 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x4e, 0x65, 0x74,
+  0x77, 0x6f, 0x72, 0x6b, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x18, 0x68,
+  0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72,
+  0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03,
+  0x13, 0x14, 0x55, 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69, 0x72, 0x73, 0x74, 0x2d,
+  0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x35, 0x31, 0x30,
+  0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x35, 0x30, 0x35, 0x31, 0x30, 0x32,
+  0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
+  0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12,
+  0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74,
+  0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6c,
+  0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x43,
+  0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64,
+  0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x43, 0x4f, 0x4d, 0x4f, 0x44,
+  0x4f, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x20,
+  0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
+  0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82,
+  0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbc, 0x35, 0xa0, 0x36, 0x70, 0x22, 0x81, 0x11, 0xc3,
+  0xb2, 0x83, 0xb9, 0xd3, 0x28, 0xc6, 0x36, 0xcd, 0x25, 0x6b, 0xa9, 0x7b, 0xb2, 0x1c, 0xf6, 0x9b,
+  0x51, 0x9c, 0xef, 0x35, 0xf4, 0xed, 0x08, 0x8e, 0x5e, 0x38, 0x08, 0xf8, 0x77, 0x3c, 0x0a, 0x42,
+  0xe0, 0xf3, 0x70, 0xdc, 0xa3, 0xd7, 0xca, 0xf5, 0x4c, 0x0b, 0xcf, 0xff, 0x22, 0x9c, 0x0a, 0x7e,
+  0x68, 0xd6, 0x09, 0xa2, 0x2a, 0x84, 0x7b, 0xa6, 0x9d, 0xb4, 0xa9, 0xc1, 0x33, 0xe2, 0xef, 0x1f,
+  0x17, 0x48, 0xca, 0x3a, 0xcd, 0x46, 0xe6, 0xc5, 0xaa, 0x77, 0xbd, 0xe3, 0x77, 0x9a, 0xfa, 0x47,
+  0x53, 0x40, 0x28, 0x59, 0x43, 0x93, 0xf1, 0xa4, 0x81, 0xea, 0xef, 0x80, 0xb5, 0x4f, 0xa7, 0x08,
+  0xce, 0xba, 0x6e, 0xbc, 0xca, 0x76, 0x0c, 0x97, 0x64, 0x59, 0x86, 0x24, 0xbb, 0x3d, 0x82, 0x90,
+  0xa8, 0x55, 0xb1, 0x92, 0xd3, 0xa0, 0xa7, 0x05, 0xac, 0x9f, 0x53, 0x25, 0x08, 0x10, 0x47, 0x99,
+  0xcd, 0x98, 0xde, 0x68, 0xe5, 0xb4, 0x50, 0x78, 0xa3, 0xaf, 0x01, 0xcc, 0x59, 0x43, 0x58, 0xe4,
+  0x76, 0x6e, 0x7e, 0xac, 0xc7, 0xe2, 0x9e, 0x1f, 0x4f, 0xb0, 0x47, 0x2d, 0xc8, 0x0c, 0xa3, 0x49,
+  0x27, 0x80, 0x75, 0x8c, 0xbb, 0x06, 0x91, 0x65, 0x0f, 0x90, 0x9b, 0xf4, 0xba, 0xd1, 0x81, 0xc8,
+  0x5c, 0x6a, 0xec, 0x14, 0xe9, 0x25, 0x09, 0xbf, 0x23, 0x16, 0xf4, 0x95, 0x46, 0x40, 0x40, 0x21,
+  0xbb, 0x83, 0x96, 0xfd, 0x86, 0x1f, 0x7a, 0xc8, 0x0d, 0x10, 0x8e, 0xa2, 0xf8, 0x19, 0x07, 0x58,
+  0x7f, 0x9f, 0xbd, 0x37, 0x02, 0x60, 0xf2, 0xa4, 0xe9, 0x9d, 0x44, 0x3f, 0x30, 0x05, 0xe4, 0xa7,
+  0x70, 0x99, 0x51, 0x9a, 0xe8, 0x17, 0xf1, 0x55, 0xca, 0xb2, 0x61, 0x89, 0x65, 0x46, 0xa7, 0x6a,
+  0xf2, 0x58, 0x46, 0x7e, 0xaa, 0xa0, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x81, 0xf4, 0x30,
+  0x81, 0xf1, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xda,
+  0xed, 0x64, 0x74, 0x14, 0x9c, 0x14, 0x3c, 0xab, 0xdd, 0x99, 0xa9, 0xbd, 0x5b, 0x28, 0x4d, 0x8b,
+  0x3c, 0xc9, 0xd8, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x2e, 0x2d,
+  0xb0, 0x0a, 0x44, 0x4a, 0xd3, 0x87, 0xc0, 0x02, 0x07, 0xce, 0x97, 0x7d, 0x50, 0x62, 0x20, 0xfd,
+  0x0f, 0x83, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02,
+  0x06, 0xc0, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00,
+  0x30, 0x16, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x0c, 0x30, 0x0a, 0x06, 0x08,
+  0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, 0x42, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04,
+  0x3b, 0x30, 0x39, 0x30, 0x37, 0xa0, 0x35, 0xa0, 0x33, 0x86, 0x31, 0x68, 0x74, 0x74, 0x70, 0x3a,
+  0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e,
+  0x63, 0x6f, 0x6d, 0x2f, 0x55, 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69, 0x72, 0x73,
+  0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x35, 0x06, 0x08,
+  0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x29, 0x30, 0x27, 0x30, 0x25, 0x06, 0x08,
+  0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x86, 0x19, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+  0x2f, 0x6f, 0x63, 0x73, 0x70, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e,
+  0x63, 0x6f, 0x6d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05,
+  0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xc8, 0xfb, 0x63, 0xf8, 0x0b, 0x75, 0x75, 0x2c, 0x3a,
+  0xf1, 0xf2, 0x13, 0xa7, 0x2d, 0xb6, 0xa3, 0x1a, 0x9c, 0xad, 0x01, 0x07, 0xd3, 0x34, 0x8e, 0x77,
+  0xe0, 0xc2, 0x6e, 0xae, 0x02, 0x5d, 0x48, 0x4f, 0xa4, 0xd2, 0x21, 0xb6, 0x36, 0xfd, 0x2a, 0x35,
+  0x43, 0x7c, 0x6b, 0xdf, 0x80, 0x87, 0x0b, 0x15, 0xf0, 0x76, 0x32, 0x00, 0xb4, 0xce, 0xb5, 0x67,
+  0xa4, 0x2f, 0x2f, 0x20, 0x1b, 0x9c, 0x54, 0x9e, 0x83, 0x3f, 0x1f, 0x5f, 0x14, 0x95, 0x62, 0x82,
+  0x0f, 0x22, 0x41, 0x22, 0x1f, 0x70, 0xb3, 0xf3, 0xf7, 0x42, 0xde, 0x6c, 0x51, 0xcd, 0x4b, 0xf8,
+  0x21, 0xac, 0x9b, 0x3b, 0x8c, 0xb1, 0xe5, 0xe6, 0x28, 0x8f, 0xce, 0x2a, 0x8a, 0xf9, 0xaa, 0x52,
+  0x4d, 0x8c, 0x5b, 0x77, 0xba, 0x4d, 0x5a, 0x58, 0xdb, 0xbb, 0x6a, 0x04, 0xcc, 0x52, 0x1e, 0x9d,
+  0xe2, 0x28, 0x37, 0x0e, 0xbb, 0xe7, 0x0e, 0x91, 0xc7, 0xf8, 0xdb, 0xf1, 0x81, 0x98, 0xeb, 0xcd,
+  0x37, 0xb3, 0x0e, 0xab, 0x65, 0xd3, 0x62, 0xec, 0x3a, 0xa5, 0x76, 0xeb, 0x13, 0xa8, 0x35, 0x93,
+  0xc9, 0x2e, 0x0a, 0x01, 0xec, 0xc0, 0xe8, 0xcc, 0x3d, 0x7e, 0xb6, 0xeb, 0xe2, 0xc1, 0xec, 0xd3,
+  0x14, 0x92, 0x82, 0x66, 0x87, 0x50, 0xdc, 0xfd, 0x50, 0x97, 0xac, 0xb3, 0x4a, 0x76, 0x73, 0x06,
+  0xc4, 0x86, 0x11, 0x3a, 0xb3, 0x5f, 0x43, 0x04, 0x52, 0x6f, 0xea, 0xb3, 0xd0, 0x74, 0x36, 0x4c,
+  0xca, 0xf1, 0x1b, 0x79, 0x84, 0x37, 0x70, 0x63, 0xad, 0x74, 0xb9, 0xaa, 0x0e, 0xf3, 0x98, 0xb0,
+  0x86, 0x08, 0xeb, 0xdb, 0xe0, 0x1f, 0x8c, 0x10, 0xf2, 0x39, 0x64, 0x9b, 0xae, 0x4f, 0x0a, 0x2c,
+  0x92, 0x8a, 0x4f, 0x18, 0xb5, 0x91, 0xe5, 0x8d, 0x1a, 0x93, 0x5f, 0x1f, 0xae, 0xf1, 0xa6, 0xf0,
+  0x2e, 0x97, 0xd0, 0xd2, 0xf6, 0x2b, 0x3c, 0x0a
+  };
+
+UNIT_TEST_STATUS
+EFIAPI
+TestVerifyImageTimestampVerify (
+  IN UNIT_TEST_CONTEXT           Context
+  )
+{
+  BOOLEAN   Status;
+  EFI_TIME  SigningTime;
+
+  Status = FALSE;
+
+  //
+  // Verify RFC3161 Timestamp CounterSignature.
+  //
+  Status = ImageTimestampVerify (
+             AuthenticodeWithTS,
+             sizeof (AuthenticodeWithTS),
+             TSTrustedCert,
+             sizeof (TSTrustedCert),
+             &SigningTime
+             );
+  UT_ASSERT_TRUE (Status);
+
+  UT_ASSERT_EQUAL (SigningTime.Year, 2014);
+  UT_ASSERT_EQUAL (SigningTime.Month, 7);
+  UT_ASSERT_EQUAL (SigningTime.Day, 28);
+  UT_ASSERT_EQUAL (SigningTime.Hour, 8);
+  UT_ASSERT_EQUAL (SigningTime.Minute, 50);
+  UT_ASSERT_EQUAL (SigningTime.Second, 3);
+
+  return Status;
+}
+
+TEST_DESC mImageTimestampTest[] = {
+    //
+    // -----Description--------------------------------------Class----------------------------Function-----------------Pre---Post--Context
+    //
+    {"TestVerifyImageTimestampVerify()",  "CryptoPkg.BaseCryptLib.ImageTimestamp",   TestVerifyImageTimestampVerify, NULL, NULL, NULL},
+};
+
+UINTN mImageTimestampTestNum = ARRAY_SIZE(mImageTimestampTest);
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMain.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMain.c
new file mode 100644
index 000000000000..88a3f96305c3
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMain.c
@@ -0,0 +1,81 @@
+/** @file
+  This is a sample to demostrate the usage of the Unit Test Library that
+  supports the PEI, DXE, SMM, UEFI SHell, and host execution environments.
+
+  Copyright (c) Microsoft Corporation.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+#include "TestBaseCryptLib.h"
+
+
+/**
+  Initialize the unit test framework, suite, and unit tests for the
+  sample unit tests and run the unit tests.
+
+  @retval  EFI_SUCCESS           All test cases were dispatched.
+  @retval  EFI_OUT_OF_RESOURCES  There are not enough resources available to
+                                 initialize the unit tests.
+**/
+EFI_STATUS
+EFIAPI
+UefiTestMain (
+  VOID
+  )
+{
+  EFI_STATUS                  Status;
+  UNIT_TEST_FRAMEWORK_HANDLE  Framework;
+
+  DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_NAME, UNIT_TEST_VERSION ));
+  CreateUnitTest(UNIT_TEST_NAME, UNIT_TEST_VERSION, &Framework);
+
+  //
+  // Execute the tests.
+  //
+  Status = RunAllTestSuites (Framework);
+
+  if (Framework) {
+    FreeUnitTestFramework (Framework);
+  }
+
+  return Status;
+}
+
+/**
+  Standard PEIM entry point for target based unit test execution from PEI.
+**/
+EFI_STATUS
+EFIAPI
+PeiEntryPoint (
+  IN EFI_PEI_FILE_HANDLE     FileHandle,
+  IN CONST EFI_PEI_SERVICES  **PeiServices
+  )
+{
+  return UefiTestMain ();
+}
+
+/**
+  Standard UEFI entry point for target based unit test execution from DXE, SMM,
+  UEFI Shell.
+**/
+EFI_STATUS
+EFIAPI
+DxeEntryPoint (
+  IN EFI_HANDLE        ImageHandle,
+  IN EFI_SYSTEM_TABLE  *SystemTable
+  )
+{
+  return UefiTestMain ();
+}
+
+/**
+  Standard POSIX C entry point for host based unit test execution.
+**/
+int
+main (
+  int argc,
+  char *argv[]
+  )
+{
+  return UefiTestMain ();
+}
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMainBCOP.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMainBCOP.c
new file mode 100644
index 000000000000..69bd1142e396
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMainBCOP.c
@@ -0,0 +1,58 @@
+/** @file
+  This is a sample to demostrate the usage of the Unit Test Library that
+  supports the PEI, DXE, SMM, UEFI SHell, and host execution environments.
+
+  Copyright (c) Microsoft Corporation.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+#include "TestBaseCryptLib.h"
+
+
+/**
+  Initialize the unit test framework, suite, and unit tests for the
+  sample unit tests and run the unit tests.
+
+  @retval  EFI_SUCCESS           All test cases were dispatched.
+  @retval  EFI_OUT_OF_RESOURCES  There are not enough resources available to
+                                 initialize the unit tests.
+**/
+EFI_STATUS
+EFIAPI
+UefiTestMain (
+  VOID
+  )
+{
+  EFI_STATUS                  Status;
+  UNIT_TEST_FRAMEWORK_HANDLE  Framework;
+
+  DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_NAME, UNIT_TEST_VERSION ));
+  CreateUnitTest(UNIT_TEST_NAME, UNIT_TEST_VERSION, &Framework);
+
+  //
+  // Execute the tests.
+  //
+  Status = RunAllTestSuites (Framework);
+  if (Framework) {
+    FreeUnitTestFramework (Framework);
+  }
+
+  return Status;
+}
+
+/**
+  Standard POSIX C entry point for host based unit test execution.
+**/
+int
+main (
+  int argc,
+  char *argv[]
+  )
+{
+  EFI_STATUS Status;
+  // Install the BaseCryptLib protocol
+  // Run the tests
+  Status = UefiTestMain ();
+  // Uninstall it
+  return Status;
+}
diff --git a/CryptoPkg/CryptoPkg.ci.yaml b/CryptoPkg/CryptoPkg.ci.yaml
index f54ebfb22e70..0228e63d6617 100644
--- a/CryptoPkg/CryptoPkg.ci.yaml
+++ b/CryptoPkg/CryptoPkg.ci.yaml
@@ -8,6 +8,10 @@
     "CompilerPlugin": {
         "DscPath": "CryptoPkg.dsc"
     },
+    ## options defined .pytool/Plugin/HostUnitTestCompilerPlugin
+    "HostUnitTestCompilerPlugin": {
+        "DscPath": "Test/UnitTest/CryptoPkgHostUnitTest.dsc"
+    },
     "CharEncodingCheck": {
         "IgnoreFiles": []
     },
diff --git a/CryptoPkg/CryptoPkg.dsc b/CryptoPkg/CryptoPkg.dsc
index 1af78468a19c..28295ec80ec6 100644
--- a/CryptoPkg/CryptoPkg.dsc
+++ b/CryptoPkg/CryptoPkg.dsc
@@ -223,6 +223,32 @@
 #       generated for it, but the binary will not be put into any firmware volume.
 #
 ###################################################################################################
+[Components]
+  CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
+  CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf
+  CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf {
+    <LibraryClasses>
+      PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf
+      UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
+      UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
+
+      BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
+      BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
+      DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
+      MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
+      PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
+      PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
+      PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
+      PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
+      UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
+
+      UnitTestLib|UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLib.inf
+      UnitTestPersistenceLib|UnitTestFrameworkPkg/Library/UnitTestPersistenceLibNull/UnitTestPersistenceLibNull.inf
+      UnitTestResultReportLib|UnitTestFrameworkPkg/Library/UnitTestResultReportLib/UnitTestResultReportLibDebugLib.inf
+    <LibraryClasses.common.UEFI_APPLICATION>
+      UnitTestResultReportLib|UnitTestFrameworkPkg/Library/UnitTestResultReportLib/UnitTestResultReportLibConOut.inf
+  }
+
 !if $(CRYPTO_SERVICES) == PACKAGE
 [Components]
   CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
diff --git a/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf b/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf
new file mode 100644
index 000000000000..47515f06687e
--- /dev/null
+++ b/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf
@@ -0,0 +1,90 @@
+## @file
+#  Cryptographic Library Instance for host based unit tests
+#
+#  Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) Microsoft Corporation.
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = BaseCryptLib
+  FILE_GUID                      = c97d34aa-caf8-42cd-8261-8705f46304b3
+  MODULE_TYPE                    = DXE_DRIVER
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = BaseCryptLib|DXE_DRIVER DXE_CORE UEFI_APPLICATION UEFI_DRIVER
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+#  VALID_ARCHITECTURES           = IA32 X64 ARM AARCH64
+#
+
+[Sources]
+  InternalCryptLib.h
+  Hash/CryptMd5.c
+  Hash/CryptSha1.c
+  Hash/CryptSha256.c
+  Hash/CryptSha512.c
+  Hash/CryptSm3.c
+  Hmac/CryptHmacSha256.c
+  Kdf/CryptHkdf.c
+  Cipher/CryptAes.c
+  Pk/CryptRsaBasic.c
+  Pk/CryptRsaExt.c
+  Pk/CryptPkcs1Oaep.c
+  Pk/CryptPkcs5Pbkdf2.c
+  Pk/CryptPkcs7Sign.c
+  Pk/CryptPkcs7VerifyCommon.c
+  Pk/CryptPkcs7VerifyBase.c
+  Pk/CryptPkcs7VerifyEku.c
+  Pk/CryptDh.c
+  Pk/CryptX509.c
+  Pk/CryptAuthenticode.c
+  Pk/CryptTs.c
+  Pem/CryptPem.c
+
+  SysCall/UnitTestHostCrtWrapper.c
+
+[Sources.Ia32]
+  Rand/CryptRandTsc.c
+
+[Sources.X64]
+  Rand/CryptRandTsc.c
+
+[Sources.ARM]
+  Rand/CryptRand.c
+
+[Sources.AARCH64]
+  Rand/CryptRand.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  CryptoPkg/CryptoPkg.dec
+
+[LibraryClasses]
+  BaseLib
+  BaseMemoryLib
+  MemoryAllocationLib
+  DebugLib
+  OpensslLib
+
+#
+# Remove these [BuildOptions] after this library is cleaned up
+#
+[BuildOptions]
+  #
+  # suppress the following warnings so we do not break the build with warnings-as-errors:
+  # C4090: 'function' : different 'const' qualifiers
+  # C4018: '>': signed/unsigned mismatch
+  MSFT:*_*_*_CC_FLAGS = /wd4090 /wd4018
+
+  # -JCryptoPkg/Include : To disable the use of the system includes provided by RVCT
+  # --diag_remark=1     : Reduce severity of "#1-D: last line of file ends without a newline"
+  RVCT:*_*_ARM_CC_FLAGS = -JCryptoPkg/Include --diag_remark=1
+
+  GCC:*_CLANG35_*_CC_FLAGS = -std=c99
+  GCC:*_CLANG38_*_CC_FLAGS = -std=c99
+
+  XCODE:*_*_*_CC_FLAGS = -std=c99
diff --git a/CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc b/CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc
new file mode 100644
index 000000000000..d8605176e697
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc
@@ -0,0 +1,35 @@
+## @file
+# CryptoPkg DSC file used to build host-based unit tests.
+#
+# Copyright (c) Microsoft Corporation.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  PLATFORM_NAME           = CryptoPkgHostTest
+  PLATFORM_GUID           = C7F97D6D-54AC-45A9-8197-CC99B20CC7EC
+  PLATFORM_VERSION        = 0.1
+  DSC_SPECIFICATION       = 0x00010005
+  OUTPUT_DIRECTORY        = Build/CryptoPkg/HostTest
+  SUPPORTED_ARCHITECTURES = IA32|X64
+  BUILD_TARGETS           = NOOPT
+  SKUID_IDENTIFIER        = DEFAULT
+
+!include UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc
+
+[LibraryClasses]
+  OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
+  BaseCryptLib|CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf
+
+[LibraryClasses.AARCH64, LibraryClasses.ARM]
+  RngLib|MdePkg/Library/BaseRngLibNull/BaseRngLibNull.inf
+
+[LibraryClasses.X64, LibraryClasses.IA32]
+  RngLib|MdePkg/Library/BaseRngLib/BaseRngLib.inf
+
+[Components]
+  #
+  # Build HOST_APPLICATION that tests the SampleUnitTest
+  #
+  CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatures.h b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatures.h
new file mode 100644
index 000000000000..9f5f813ef8b1
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTestSignatures.h
@@ -0,0 +1,789 @@
+/*++
+
+Copyright (C) Microsoft Corporation. All Rights Reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+Module Name:
+  AllTestSignatures.h
+
+Abstract:
+  This file has test signatures in byte array format for Unit-Testing the
+  Enhanced Key Usage (EKU) parsing function.
+
+  EFI_STATUS
+  EFIAPI
+  VerifyEKUsInPkcs7Signature (
+    IN CONST UINT8  *Pkcs7Signature,
+    IN CONST UINT32  SignatureSize,
+    IN CONST CHAR8  *RequiredEKUs[],
+    IN CONST UINT32  RequiredEKUsSize,
+    IN BOOLEAN       RequireAllPresent
+  );
+
+  Note:  These byte arrays were created by running BinToH.exe on the P7B
+         signature files.
+--*/
+
+
+//
+// This is the ProductionECCSignature.p7b in byte array format.  It has one
+// EKU in it. (Firmware signing)
+// "1.3.6.1.4.1.311.76.9.21.1"
+//
+CONST UINT8 ProductionECCSignature[] =
+{
+ 0x30, 0x82, 0x04, 0xC0, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
+ 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
+ 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0x80, 0x30, 0x82, 0x03, 0x7C, 0x30, 0x82, 0x03,
+ 0x22, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x13, 0x33, 0x00, 0x00, 0x00, 0x03, 0x7E, 0x2E, 0x8F,
+ 0xBD, 0xA5, 0xC9, 0x2C, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x0A, 0x06, 0x08, 0x2A,
+ 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x81, 0x8F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03,
+ 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08,
+ 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E,
+ 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E,
+ 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
+ 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x39,
+ 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x30, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
+ 0x66, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x41,
+ 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72,
+ 0x65, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x38, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30,
+ 0x37, 0x31, 0x32, 0x31, 0x38, 0x33, 0x37, 0x30, 0x37, 0x5A, 0x17, 0x0D, 0x31, 0x39, 0x30, 0x37,
+ 0x31, 0x32, 0x31, 0x38, 0x33, 0x37, 0x30, 0x37, 0x5A, 0x30, 0x3A, 0x31, 0x38, 0x30, 0x36, 0x06,
+ 0x03, 0x55, 0x04, 0x03, 0x13, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20,
+ 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x20, 0x53,
+ 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D,
+ 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04,
+ 0x7D, 0xDF, 0xDE, 0xFA, 0xEE, 0xA5, 0x66, 0x33, 0xAA, 0xCC, 0xA4, 0x18, 0x65, 0x9E, 0x3A, 0xC6,
+ 0x4B, 0xCB, 0xD5, 0x78, 0x94, 0x14, 0xEE, 0xAA, 0xF3, 0x9D, 0xCB, 0x38, 0x6C, 0x5D, 0xFE, 0x3F,
+ 0x8A, 0xA9, 0x8D, 0x04, 0xD2, 0xFE, 0xAA, 0x38, 0xF3, 0xD6, 0x4A, 0x7E, 0xCF, 0x12, 0x95, 0xCF,
+ 0xAD, 0x92, 0x33, 0xF7, 0x38, 0x83, 0xC5, 0xFD, 0xCF, 0xD0, 0x96, 0x08, 0xCA, 0x62, 0x7D, 0x22,
+ 0xA3, 0x82, 0x01, 0xAF, 0x30, 0x82, 0x01, 0xAB, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01,
+ 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04,
+ 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15, 0x01,
+ 0x30, 0x0C, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x02, 0x30, 0x00, 0x30, 0x1D,
+ 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xE7, 0xD1, 0xD4, 0x74, 0x71, 0xF4, 0xC9,
+ 0x35, 0x04, 0xA7, 0x9A, 0x1E, 0x0C, 0xDD, 0xF4, 0x8D, 0x5C, 0x1E, 0xF2, 0x29, 0x30, 0x37, 0x06,
+ 0x03, 0x55, 0x1D, 0x11, 0x04, 0x30, 0x30, 0x2E, 0xA4, 0x2C, 0x30, 0x2A, 0x31, 0x10, 0x30, 0x0E,
+ 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x07, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x31, 0x16,
+ 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x05, 0x13, 0x0D, 0x34, 0x34, 0x30, 0x38, 0x31, 0x31, 0x2B,
+ 0x34, 0x34, 0x30, 0x38, 0x36, 0x32, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30,
+ 0x16, 0x80, 0x14, 0x6F, 0x3A, 0xCC, 0x1B, 0x2F, 0x17, 0x5C, 0xED, 0xEB, 0xC8, 0xBF, 0x93, 0xA7,
+ 0xB5, 0x93, 0xD1, 0x4D, 0x40, 0xAA, 0x03, 0x30, 0x75, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x6E,
+ 0x30, 0x6C, 0x30, 0x6A, 0xA0, 0x68, 0xA0, 0x66, 0x86, 0x64, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F,
+ 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63,
+ 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x6F, 0x70, 0x73, 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x4D, 0x69,
+ 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x25, 0x32, 0x30, 0x45, 0x43, 0x43, 0x25, 0x32, 0x30,
+ 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x25, 0x32, 0x30, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
+ 0x6F, 0x72, 0x79, 0x25, 0x32, 0x30, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x25, 0x32,
+ 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x32, 0x30, 0x31, 0x38, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x81,
+ 0x82, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x76, 0x30, 0x74, 0x30,
+ 0x72, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x66, 0x68, 0x74, 0x74,
+ 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66,
+ 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x6F, 0x70, 0x73, 0x2F, 0x63, 0x65, 0x72,
+ 0x74, 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x25, 0x32, 0x30, 0x45,
+ 0x43, 0x43, 0x25, 0x32, 0x30, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x25, 0x32, 0x30, 0x41,
+ 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x25, 0x32, 0x30, 0x46, 0x69, 0x72, 0x6D, 0x77,
+ 0x61, 0x72, 0x65, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x32, 0x30, 0x31, 0x38, 0x2E,
+ 0x63, 0x72, 0x74, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03,
+ 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x3D, 0xCF, 0xEF, 0xB8, 0xF0, 0x87, 0xEE, 0x7E, 0x80, 0x71,
+ 0x04, 0x77, 0x68, 0xDC, 0x66, 0x2F, 0x09, 0xA7, 0xF0, 0x76, 0x57, 0x7C, 0x12, 0x5A, 0xE4, 0x80,
+ 0x5A, 0xA0, 0xF2, 0x2C, 0x45, 0x1B, 0x02, 0x21, 0x00, 0xEB, 0x5F, 0x89, 0xD5, 0xEB, 0x03, 0x46,
+ 0x9E, 0x08, 0x95, 0x2A, 0x39, 0x30, 0x5D, 0x49, 0xB6, 0x24, 0xCE, 0x78, 0x1B, 0xB8, 0x1D, 0x0F,
+ 0xD1, 0x24, 0xD0, 0xA9, 0x18, 0x0F, 0x45, 0x4F, 0xF6, 0x31, 0x82, 0x01, 0x17, 0x30, 0x82, 0x01,
+ 0x13, 0x02, 0x01, 0x01, 0x30, 0x81, 0xA7, 0x30, 0x81, 0x8F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03,
+ 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08,
+ 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E,
+ 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E,
+ 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
+ 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x39,
+ 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x30, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
+ 0x66, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x41,
+ 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72,
+ 0x65, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x38, 0x02, 0x13, 0x33, 0x00, 0x00, 0x00, 0x03,
+ 0x7E, 0x2E, 0x8F, 0xBD, 0xA5, 0xC9, 0x2C, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x0D,
+ 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06,
+ 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, 0x00, 0x04, 0x48, 0x30, 0x46, 0x02, 0x21,
+ 0x00, 0x85, 0xC7, 0x25, 0x5C, 0xF8, 0x5A, 0x13, 0xB7, 0xB6, 0x3A, 0xF1, 0x04, 0x72, 0xAC, 0xB3,
+ 0xF8, 0xC3, 0xE0, 0xE3, 0xD7, 0x98, 0x1B, 0xCF, 0x04, 0xA8, 0x0C, 0x7B, 0xBB, 0x7D, 0x40, 0xC2,
+ 0x99, 0x02, 0x21, 0x00, 0xA3, 0x83, 0x12, 0xE4, 0xB6, 0x3C, 0xC9, 0x3F, 0x05, 0xCF, 0x70, 0x57,
+ 0x54, 0x74, 0x0E, 0xEC, 0x14, 0xAD, 0x2C, 0x66, 0x9D, 0x72, 0x73, 0x62, 0x41, 0xA6, 0xC7, 0x90,
+ 0x05, 0x35, 0xF5, 0x80,
+};
+
+//
+// This is the TestSignedWithMultipleCerts.bin.Signature.p7b in byte array
+// format.  It has two certs in it, and the leaf has an EKU of
+//  "1.3.6.1.4.1.311.76.9.21.1"
+//
+CONST UINT8 TestSignedMultipleCerts[] =
+{
+  0x30, 0x82, 0x04, 0x90, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
+  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
+  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0xC2, 0x30, 0x82, 0x01, 0xC5, 0x30, 0x82, 0x01,
+  0x6A, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x16, 0x2F, 0xD8, 0x2B, 0x8A, 0x98, 0x6A, 0x8A,
+  0x43, 0xC2, 0x22, 0xA5, 0x47, 0xA1, 0x18, 0xDD, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x04, 0x03, 0x02, 0x30, 0x26, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
+  0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D,
+  0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D,
+  0x31, 0x38, 0x30, 0x37, 0x31, 0x38, 0x32, 0x33, 0x31, 0x36, 0x31, 0x32, 0x5A, 0x17, 0x0D, 0x33,
+  0x38, 0x30, 0x37, 0x31, 0x38, 0x32, 0x33, 0x32, 0x36, 0x31, 0x32, 0x5A, 0x30, 0x28, 0x31, 0x26,
+  0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65,
+  0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E,
+  0x65, 0x72, 0x4C, 0x65, 0x61, 0x66, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00,
+  0x04, 0x2E, 0x4C, 0x85, 0xFD, 0x86, 0x85, 0x4C, 0x55, 0x96, 0x17, 0xE3, 0x0C, 0xC1, 0xCB, 0xD9,
+  0x95, 0xCF, 0xC7, 0xEA, 0x57, 0x02, 0x5C, 0x4F, 0x92, 0x7C, 0x35, 0xBF, 0x2B, 0x3D, 0xBA, 0x14,
+  0xE5, 0x39, 0x9D, 0x9B, 0x64, 0x4A, 0x25, 0x29, 0xD5, 0x61, 0xDA, 0xFD, 0x51, 0x24, 0xB3, 0xE2,
+  0x4E, 0x00, 0x59, 0xDF, 0xB4, 0x96, 0x42, 0x59, 0xA4, 0xBC, 0xA7, 0x64, 0x8F, 0x3A, 0x17, 0x33,
+  0x55, 0xA3, 0x78, 0x30, 0x76, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04,
+  0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D,
+  0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15, 0x01, 0x30, 0x0C, 0x06,
+  0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x02, 0x30, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55,
+  0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x63, 0x69, 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42,
+  0xEA, 0x55, 0x95, 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, 0x2D, 0x2F, 0x30, 0x1D, 0x06, 0x03,
+  0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xD6, 0x4A, 0xF8, 0x77, 0x21, 0x34, 0xEC, 0xC0, 0xAE,
+  0x4D, 0x8F, 0x17, 0x86, 0xFF, 0xEA, 0xE3, 0x83, 0x42, 0x32, 0x83, 0x30, 0x0A, 0x06, 0x08, 0x2A,
+  0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x9A,
+  0xAB, 0xE3, 0x6F, 0xD7, 0xB3, 0x0F, 0x83, 0x8A, 0xA1, 0x64, 0x70, 0xC1, 0xAC, 0x54, 0xE2, 0x59,
+  0x7C, 0x8B, 0x11, 0x8F, 0x76, 0xB1, 0x9C, 0x5F, 0xDA, 0x7D, 0x04, 0x3C, 0x73, 0xB5, 0xCF, 0x02,
+  0x21, 0x00, 0xB3, 0x31, 0xC1, 0x48, 0x3C, 0xEE, 0xA1, 0x6D, 0xA9, 0xF7, 0xF5, 0x9F, 0xD3, 0x6F,
+  0x7D, 0x6F, 0xAB, 0x76, 0x12, 0xEE, 0x01, 0x4D, 0xFC, 0xE6, 0x87, 0xEA, 0xAB, 0x09, 0x98, 0xD8,
+  0x97, 0x6F, 0x30, 0x82, 0x01, 0xF5, 0x30, 0x82, 0x01, 0x58, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02,
+  0x10, 0x4D, 0x88, 0xBF, 0x04, 0xDF, 0x10, 0x57, 0xBA, 0x43, 0x53, 0x6C, 0xFD, 0xA5, 0x90, 0xA7,
+  0x6F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x28, 0x31,
+  0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63,
+  0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67,
+  0x6E, 0x65, 0x72, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x31, 0x31,
+  0x36, 0x32, 0x33, 0x32, 0x31, 0x31, 0x33, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x31, 0x31, 0x36,
+  0x32, 0x33, 0x33, 0x31, 0x31, 0x33, 0x5A, 0x30, 0x26, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55,
+  0x04, 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46,
+  0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30,
+  0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86,
+  0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x0E, 0x58, 0xA3, 0xDB, 0xD3, 0x9C,
+  0x21, 0xFC, 0x63, 0x6F, 0xBD, 0xB9, 0xA7, 0x8A, 0xB3, 0xBF, 0x40, 0x87, 0x43, 0x06, 0x53, 0x91,
+  0x54, 0x31, 0x11, 0x0D, 0x3B, 0x50, 0x32, 0xEA, 0x11, 0xA3, 0x3D, 0x77, 0x08, 0x9E, 0xBC, 0x06,
+  0x5C, 0x21, 0x48, 0x9D, 0x9B, 0x7C, 0x45, 0xFD, 0x4B, 0xD7, 0x0C, 0x04, 0xD4, 0xE0, 0x0C, 0xB7,
+  0x6C, 0xBF, 0x22, 0xE1, 0x00, 0x99, 0x75, 0x39, 0x27, 0x59, 0xA3, 0x66, 0x30, 0x64, 0x30, 0x0E,
+  0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x12,
+  0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02,
+  0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x6D,
+  0x8B, 0x24, 0xBF, 0x20, 0x9D, 0x54, 0xAF, 0x04, 0x5B, 0x84, 0x91, 0x96, 0xAE, 0x99, 0xC1, 0x23,
+  0x1C, 0x0E, 0xAC, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x63, 0x69,
+  0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95, 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9,
+  0x2D, 0x2F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81,
+  0x8A, 0x00, 0x30, 0x81, 0x86, 0x02, 0x41, 0x2A, 0xD4, 0xFC, 0x35, 0x28, 0x73, 0x9F, 0xB3, 0x8A,
+  0xE3, 0x13, 0x7F, 0xCA, 0x36, 0x88, 0x1E, 0xD0, 0x95, 0xDC, 0xE9, 0x8A, 0x9D, 0xC0, 0x27, 0x8C,
+  0xD8, 0x57, 0x57, 0x5F, 0xDC, 0x13, 0x53, 0x68, 0xED, 0x2F, 0x4D, 0x6A, 0x77, 0xA2, 0x55, 0x48,
+  0xCB, 0x24, 0x55, 0x3A, 0x30, 0x32, 0xE5, 0x5C, 0xDF, 0x96, 0xF1, 0x15, 0xD4, 0xE7, 0xCD, 0x6A,
+  0x26, 0xBD, 0x7B, 0x92, 0x50, 0x74, 0xE4, 0x56, 0x02, 0x41, 0x46, 0x33, 0x61, 0x30, 0xFF, 0xA8,
+  0x53, 0x31, 0x38, 0xCA, 0x6B, 0x77, 0x88, 0x36, 0x9A, 0x0B, 0x57, 0xC3, 0xD1, 0xB2, 0xA7, 0x40,
+  0x53, 0x6A, 0xD1, 0x6C, 0x8A, 0x8B, 0x3C, 0x29, 0xC1, 0x2B, 0x82, 0x61, 0x2F, 0x1A, 0x9F, 0x2C,
+  0x9A, 0x81, 0xD0, 0x2B, 0x3E, 0x0D, 0x99, 0xB7, 0xD4, 0x7E, 0xA7, 0xEA, 0x0C, 0x8E, 0x13, 0x0E,
+  0x53, 0x65, 0x48, 0x17, 0xE5, 0xFA, 0x91, 0x79, 0x98, 0xC7, 0xA1, 0x31, 0x81, 0xA6, 0x30, 0x81,
+  0xA3, 0x02, 0x01, 0x01, 0x30, 0x3A, 0x30, 0x26, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04,
+  0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69,
+  0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x02, 0x10,
+  0x16, 0x2F, 0xD8, 0x2B, 0x8A, 0x98, 0x6A, 0x8A, 0x43, 0xC2, 0x22, 0xA5, 0x47, 0xA1, 0x18, 0xDD,
+  0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
+  0x0B, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, 0x00, 0x04, 0x46, 0x30, 0x44,
+  0x02, 0x20, 0x40, 0xD4, 0xD4, 0xAF, 0x89, 0xFA, 0x83, 0x44, 0x7B, 0x59, 0xB4, 0x2B, 0x99, 0xF0,
+  0xD4, 0xB0, 0x75, 0x2E, 0x56, 0xAA, 0x0A, 0xDA, 0xCC, 0x82, 0xD5, 0xBC, 0x8D, 0xC4, 0x00, 0xF6,
+  0x46, 0xA4, 0x02, 0x20, 0x6F, 0xA7, 0xE1, 0x32, 0xB2, 0xF2, 0x5A, 0x69, 0xC5, 0x45, 0xB6, 0x35,
+  0x04, 0x05, 0x9B, 0xAC, 0x44, 0xB4, 0xA0, 0xE1, 0x25, 0x92, 0xE8, 0x3E, 0x8F, 0x85, 0xA3, 0xBE,
+  0x34, 0xFE, 0x78, 0x31,
+};
+
+//
+// This is the TestSignedWithMultipleEKUsInCert.bin.Signature.p7b signature in
+// byte array format.  It has two EKU's in it:
+// "1.3.6.1.4.1.311.76.9.21.1"
+// "1.3.6.1.4.1.311.76.9.21.2"
+//
+CONST UINT8 TestSignedWithMultipleEKUsInCert[] =
+{
+  0x30, 0x82, 0x06, 0x2C, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
+  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
+  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x04, 0x9E, 0x30, 0x82, 0x01, 0xF5, 0x30, 0x82, 0x01,
+  0x58, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x4D, 0x88, 0xBF, 0x04, 0xDF, 0x10, 0x57, 0xBA,
+  0x43, 0x53, 0x6C, 0xFD, 0xA5, 0x90, 0xA7, 0x6F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x04, 0x03, 0x02, 0x30, 0x28, 0x31, 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
+  0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D,
+  0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E,
+  0x17, 0x0D, 0x31, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, 0x33, 0x32, 0x31, 0x31, 0x33, 0x5A, 0x17,
+  0x0D, 0x33, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, 0x33, 0x33, 0x31, 0x31, 0x33, 0x5A, 0x30, 0x26,
+  0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61,
+  0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69,
+  0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00,
+  0x04, 0x0E, 0x58, 0xA3, 0xDB, 0xD3, 0x9C, 0x21, 0xFC, 0x63, 0x6F, 0xBD, 0xB9, 0xA7, 0x8A, 0xB3,
+  0xBF, 0x40, 0x87, 0x43, 0x06, 0x53, 0x91, 0x54, 0x31, 0x11, 0x0D, 0x3B, 0x50, 0x32, 0xEA, 0x11,
+  0xA3, 0x3D, 0x77, 0x08, 0x9E, 0xBC, 0x06, 0x5C, 0x21, 0x48, 0x9D, 0x9B, 0x7C, 0x45, 0xFD, 0x4B,
+  0xD7, 0x0C, 0x04, 0xD4, 0xE0, 0x0C, 0xB7, 0x6C, 0xBF, 0x22, 0xE1, 0x00, 0x99, 0x75, 0x39, 0x27,
+  0x59, 0xA3, 0x66, 0x30, 0x64, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04,
+  0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04,
+  0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23,
+  0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x6D, 0x8B, 0x24, 0xBF, 0x20, 0x9D, 0x54, 0xAF, 0x04, 0x5B,
+  0x84, 0x91, 0x96, 0xAE, 0x99, 0xC1, 0x23, 0x1C, 0x0E, 0xAC, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D,
+  0x0E, 0x04, 0x16, 0x04, 0x14, 0x63, 0x69, 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95,
+  0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, 0x2D, 0x2F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48,
+  0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8A, 0x00, 0x30, 0x81, 0x86, 0x02, 0x41, 0x2A, 0xD4,
+  0xFC, 0x35, 0x28, 0x73, 0x9F, 0xB3, 0x8A, 0xE3, 0x13, 0x7F, 0xCA, 0x36, 0x88, 0x1E, 0xD0, 0x95,
+  0xDC, 0xE9, 0x8A, 0x9D, 0xC0, 0x27, 0x8C, 0xD8, 0x57, 0x57, 0x5F, 0xDC, 0x13, 0x53, 0x68, 0xED,
+  0x2F, 0x4D, 0x6A, 0x77, 0xA2, 0x55, 0x48, 0xCB, 0x24, 0x55, 0x3A, 0x30, 0x32, 0xE5, 0x5C, 0xDF,
+  0x96, 0xF1, 0x15, 0xD4, 0xE7, 0xCD, 0x6A, 0x26, 0xBD, 0x7B, 0x92, 0x50, 0x74, 0xE4, 0x56, 0x02,
+  0x41, 0x46, 0x33, 0x61, 0x30, 0xFF, 0xA8, 0x53, 0x31, 0x38, 0xCA, 0x6B, 0x77, 0x88, 0x36, 0x9A,
+  0x0B, 0x57, 0xC3, 0xD1, 0xB2, 0xA7, 0x40, 0x53, 0x6A, 0xD1, 0x6C, 0x8A, 0x8B, 0x3C, 0x29, 0xC1,
+  0x2B, 0x82, 0x61, 0x2F, 0x1A, 0x9F, 0x2C, 0x9A, 0x81, 0xD0, 0x2B, 0x3E, 0x0D, 0x99, 0xB7, 0xD4,
+  0x7E, 0xA7, 0xEA, 0x0C, 0x8E, 0x13, 0x0E, 0x53, 0x65, 0x48, 0x17, 0xE5, 0xFA, 0x91, 0x79, 0x98,
+  0xC7, 0xA1, 0x30, 0x82, 0x02, 0xA1, 0x30, 0x82, 0x02, 0x47, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02,
+  0x10, 0x29, 0xBB, 0x52, 0x25, 0xED, 0x34, 0xB7, 0xBA, 0x40, 0xF8, 0xC3, 0x14, 0xB5, 0xC8, 0x86,
+  0x9E, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x26, 0x31,
+  0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63,
+  0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67,
+  0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x37, 0x32, 0x37, 0x32,
+  0x30, 0x33, 0x34, 0x31, 0x31, 0x5A, 0x17, 0x0D, 0x32, 0x33, 0x30, 0x37, 0x32, 0x37, 0x32, 0x30,
+  0x34, 0x34, 0x31, 0x31, 0x5A, 0x30, 0x3A, 0x31, 0x38, 0x30, 0x36, 0x06, 0x03, 0x55, 0x04, 0x03,
+  0x0C, 0x2F, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x46, 0x69, 0x72,
+  0x6D, 0x77, 0x61, 0x72, 0x65, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x4D,
+  0x75, 0x6C, 0x74, 0x69, 0x70, 0x6C, 0x65, 0x45, 0x4B, 0x55, 0x73, 0x49, 0x6E, 0x43, 0x65, 0x72,
+  0x74, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
+  0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01,
+  0x01, 0x00, 0xD0, 0x61, 0xA5, 0xCD, 0x49, 0x4B, 0x5C, 0x88, 0x89, 0x09, 0xCA, 0xE7, 0xEB, 0x58,
+  0x91, 0x8F, 0x59, 0xBE, 0xE8, 0x16, 0xC0, 0xEF, 0x75, 0xE5, 0x18, 0x88, 0xE8, 0xCE, 0xFA, 0xD2,
+  0xB0, 0x77, 0xC1, 0xD2, 0xF2, 0x9E, 0x65, 0xE8, 0xDB, 0x6B, 0x8C, 0x93, 0xE5, 0x39, 0x1D, 0xF9,
+  0x37, 0x2A, 0x52, 0x7F, 0xC3, 0x93, 0xD7, 0x9F, 0x03, 0x83, 0xBC, 0x6E, 0xC6, 0x83, 0x64, 0x15,
+  0x1A, 0x5C, 0x74, 0x41, 0x40, 0x21, 0xC9, 0x25, 0xF0, 0x14, 0xA3, 0x29, 0x97, 0x29, 0x8C, 0x5D,
+  0xED, 0xE9, 0x8D, 0x66, 0xCC, 0xD1, 0xD1, 0xE0, 0x08, 0x52, 0xA5, 0x93, 0x07, 0xCB, 0xF8, 0x95,
+  0x2C, 0x8D, 0x29, 0x84, 0x10, 0x5F, 0x57, 0x52, 0x10, 0x75, 0x35, 0x8A, 0x84, 0xE3, 0xAE, 0x10,
+  0x57, 0x29, 0xE9, 0xEB, 0x6E, 0xD2, 0xC7, 0x6D, 0x35, 0x43, 0x67, 0x82, 0xE3, 0x98, 0x29, 0x9C,
+  0x59, 0x77, 0xA0, 0x00, 0x27, 0xB2, 0x5D, 0xB9, 0x84, 0x31, 0x89, 0x2F, 0x77, 0xC5, 0xB9, 0x23,
+  0xE0, 0x14, 0x94, 0x6F, 0x33, 0xD5, 0x3B, 0x58, 0xFB, 0xD6, 0xB6, 0xE5, 0xD4, 0x09, 0x3D, 0xB2,
+  0xE7, 0x87, 0xC6, 0xEA, 0x73, 0x61, 0x6D, 0xDA, 0xFA, 0x95, 0x2B, 0x2B, 0x8A, 0xEC, 0x7E, 0x68,
+  0x0F, 0x98, 0x16, 0x08, 0xFF, 0xB2, 0xC1, 0xBF, 0xAB, 0x3D, 0xB0, 0xC2, 0xD5, 0x16, 0xAE, 0x71,
+  0x54, 0x48, 0xD1, 0x52, 0x72, 0xFD, 0x42, 0x09, 0x66, 0xAF, 0x50, 0xDE, 0x4C, 0x3C, 0x6A, 0xBC,
+  0x1F, 0xC5, 0x0A, 0xA0, 0xC5, 0x9A, 0xF1, 0xB2, 0xB2, 0x3F, 0x14, 0xE1, 0x93, 0x07, 0xF0, 0x00,
+  0x04, 0xEF, 0x16, 0x76, 0x18, 0x10, 0x65, 0x63, 0x42, 0x42, 0x12, 0xD0, 0x65, 0xF5, 0xA2, 0xCF,
+  0x90, 0xBE, 0x65, 0x57, 0x25, 0x8C, 0xAC, 0x5E, 0x05, 0x31, 0x91, 0x9E, 0x4D, 0x18, 0xBC, 0x15,
+  0x30, 0x7B, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x78, 0x30, 0x76, 0x30, 0x0E, 0x06, 0x03, 0x55,
+  0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x24, 0x06, 0x03, 0x55,
+  0x1D, 0x25, 0x04, 0x1D, 0x30, 0x1B, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C,
+  0x09, 0x15, 0x01, 0x06, 0x0C, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15, 0x01,
+  0x02, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x63, 0x69,
+  0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95, 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9,
+  0x2D, 0x2F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xC0, 0xDC, 0xCB,
+  0x76, 0x52, 0x84, 0x91, 0xF5, 0x37, 0x0D, 0x85, 0xB6, 0x45, 0x23, 0xFA, 0xA0, 0xAD, 0xC1, 0x1D,
+  0x92, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x48, 0x00,
+  0x30, 0x45, 0x02, 0x21, 0x00, 0xF4, 0xB0, 0x8A, 0x91, 0x96, 0x61, 0xDF, 0xC3, 0x54, 0xA5, 0xB3,
+  0x1A, 0x3C, 0x28, 0x06, 0xC0, 0xA1, 0xF5, 0x72, 0xD1, 0x02, 0x5C, 0x69, 0xB6, 0x6C, 0xA8, 0xDC,
+  0x6B, 0x78, 0xD9, 0x0C, 0x9A, 0x02, 0x20, 0x37, 0x2C, 0x61, 0x9E, 0x6E, 0x5F, 0xC6, 0xFA, 0x92,
+  0x52, 0xB0, 0x4E, 0x52, 0xC7, 0xF1, 0xE9, 0x0F, 0xB6, 0xD5, 0x08, 0x10, 0x41, 0x3A, 0x61, 0xFD,
+  0xC5, 0x70, 0x87, 0xBB, 0x49, 0x82, 0xEA, 0x31, 0x82, 0x01, 0x65, 0x30, 0x82, 0x01, 0x61, 0x02,
+  0x01, 0x01, 0x30, 0x3A, 0x30, 0x26, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
+  0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D,
+  0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x02, 0x10, 0x29, 0xBB,
+  0x52, 0x25, 0xED, 0x34, 0xB7, 0xBA, 0x40, 0xF8, 0xC3, 0x14, 0xB5, 0xC8, 0x86, 0x9E, 0x30, 0x0D,
+  0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0D, 0x06,
+  0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00,
+  0xBB, 0x51, 0xDD, 0x8F, 0xB4, 0x99, 0x37, 0x13, 0x94, 0x6F, 0x09, 0x05, 0xBA, 0x5B, 0x8D, 0x86,
+  0x9A, 0xB0, 0x51, 0xEB, 0x6B, 0x10, 0xD7, 0xD1, 0x95, 0x4A, 0x4D, 0x23, 0xA3, 0x37, 0x82, 0xDF,
+  0x1F, 0x24, 0xE4, 0x62, 0x4F, 0xD4, 0x52, 0x73, 0xF8, 0x39, 0x2B, 0x46, 0xF4, 0x61, 0xCE, 0xF1,
+  0x64, 0xD7, 0x60, 0xC9, 0xCC, 0xCA, 0x8D, 0x94, 0xA5, 0x67, 0x68, 0x2B, 0xE4, 0xB0, 0xD7, 0x64,
+  0xC8, 0xF3, 0x9C, 0x98, 0x2C, 0x0A, 0x69, 0x56, 0xD6, 0x59, 0xDF, 0x4D, 0x38, 0xE7, 0xD4, 0x63,
+  0x2B, 0x74, 0xA1, 0xA3, 0xF9, 0xE1, 0x1A, 0x12, 0x2B, 0x04, 0x46, 0x11, 0xA8, 0x26, 0x00, 0x15,
+  0x4F, 0x14, 0x7F, 0xB1, 0xB4, 0x25, 0x0C, 0x87, 0xB0, 0x56, 0x8C, 0xBE, 0x0D, 0xFA, 0x66, 0x6F,
+  0x8A, 0xCB, 0x0A, 0x88, 0x3B, 0xF6, 0x52, 0xCD, 0xBB, 0xA2, 0xA9, 0xAD, 0xAD, 0x09, 0x0D, 0xDA,
+  0x79, 0x8A, 0xAE, 0xE5, 0x9D, 0xCE, 0x5C, 0x60, 0x99, 0x67, 0x26, 0xC4, 0xAF, 0xD4, 0x01, 0xB1,
+  0x6D, 0xD1, 0x8C, 0x4D, 0x1D, 0xBD, 0xAB, 0x42, 0x2C, 0xF2, 0xD8, 0x07, 0x3F, 0xDC, 0x5E, 0x68,
+  0x4C, 0xD9, 0xDB, 0xC0, 0x93, 0xBB, 0x8E, 0xA0, 0xA2, 0x09, 0x5F, 0x03, 0x58, 0x48, 0x54, 0xF6,
+  0xF0, 0xDA, 0x7A, 0x7F, 0xC4, 0xD2, 0x9F, 0x64, 0xF5, 0x85, 0x86, 0x48, 0xDF, 0x7F, 0x86, 0x14,
+  0x7C, 0x62, 0x77, 0x1D, 0x22, 0xE5, 0x34, 0x42, 0xE4, 0x49, 0x38, 0xB4, 0xE4, 0x22, 0xFB, 0x5F,
+  0xB5, 0xEA, 0xBA, 0x90, 0x51, 0xC0, 0xC6, 0x94, 0x09, 0xE4, 0xB7, 0x15, 0x3F, 0x07, 0x23, 0xE8,
+  0x46, 0x93, 0xA5, 0x7B, 0x7A, 0x91, 0xDA, 0x8E, 0x7C, 0xAF, 0xBD, 0x41, 0xB9, 0xDE, 0x85, 0x04,
+  0xBC, 0x08, 0x6C, 0x08, 0x56, 0x16, 0xDB, 0xB5, 0xEE, 0x65, 0x76, 0xE9, 0x78, 0xD3, 0xDD, 0xD8,
+
+};
+
+//
+// This is the TestSignedWithProductId10001.bin.p7b in byte array format.
+// It has two EKU's in it:  (Product ID is 10001)
+// "1.3.6.1.4.1.311.76.9.21.1"
+// "1.3.6.1.4.1.311.76.9.21.1.10001"
+//
+CONST UINT8 TestSignedWithProductId10001[] =
+{
+  0x30, 0x82, 0x06, 0x1E, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
+  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
+  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x04, 0x90, 0x30, 0x82, 0x01, 0xF5, 0x30, 0x82, 0x01,
+  0x58, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x4D, 0x88, 0xBF, 0x04, 0xDF, 0x10, 0x57, 0xBA,
+  0x43, 0x53, 0x6C, 0xFD, 0xA5, 0x90, 0xA7, 0x6F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x04, 0x03, 0x02, 0x30, 0x28, 0x31, 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
+  0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D,
+  0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E,
+  0x17, 0x0D, 0x31, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, 0x33, 0x32, 0x31, 0x31, 0x33, 0x5A, 0x17,
+  0x0D, 0x33, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, 0x33, 0x33, 0x31, 0x31, 0x33, 0x5A, 0x30, 0x26,
+  0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61,
+  0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69,
+  0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00,
+  0x04, 0x0E, 0x58, 0xA3, 0xDB, 0xD3, 0x9C, 0x21, 0xFC, 0x63, 0x6F, 0xBD, 0xB9, 0xA7, 0x8A, 0xB3,
+  0xBF, 0x40, 0x87, 0x43, 0x06, 0x53, 0x91, 0x54, 0x31, 0x11, 0x0D, 0x3B, 0x50, 0x32, 0xEA, 0x11,
+  0xA3, 0x3D, 0x77, 0x08, 0x9E, 0xBC, 0x06, 0x5C, 0x21, 0x48, 0x9D, 0x9B, 0x7C, 0x45, 0xFD, 0x4B,
+  0xD7, 0x0C, 0x04, 0xD4, 0xE0, 0x0C, 0xB7, 0x6C, 0xBF, 0x22, 0xE1, 0x00, 0x99, 0x75, 0x39, 0x27,
+  0x59, 0xA3, 0x66, 0x30, 0x64, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04,
+  0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04,
+  0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23,
+  0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x6D, 0x8B, 0x24, 0xBF, 0x20, 0x9D, 0x54, 0xAF, 0x04, 0x5B,
+  0x84, 0x91, 0x96, 0xAE, 0x99, 0xC1, 0x23, 0x1C, 0x0E, 0xAC, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D,
+  0x0E, 0x04, 0x16, 0x04, 0x14, 0x63, 0x69, 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95,
+  0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, 0x2D, 0x2F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48,
+  0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8A, 0x00, 0x30, 0x81, 0x86, 0x02, 0x41, 0x2A, 0xD4,
+  0xFC, 0x35, 0x28, 0x73, 0x9F, 0xB3, 0x8A, 0xE3, 0x13, 0x7F, 0xCA, 0x36, 0x88, 0x1E, 0xD0, 0x95,
+  0xDC, 0xE9, 0x8A, 0x9D, 0xC0, 0x27, 0x8C, 0xD8, 0x57, 0x57, 0x5F, 0xDC, 0x13, 0x53, 0x68, 0xED,
+  0x2F, 0x4D, 0x6A, 0x77, 0xA2, 0x55, 0x48, 0xCB, 0x24, 0x55, 0x3A, 0x30, 0x32, 0xE5, 0x5C, 0xDF,
+  0x96, 0xF1, 0x15, 0xD4, 0xE7, 0xCD, 0x6A, 0x26, 0xBD, 0x7B, 0x92, 0x50, 0x74, 0xE4, 0x56, 0x02,
+  0x41, 0x46, 0x33, 0x61, 0x30, 0xFF, 0xA8, 0x53, 0x31, 0x38, 0xCA, 0x6B, 0x77, 0x88, 0x36, 0x9A,
+  0x0B, 0x57, 0xC3, 0xD1, 0xB2, 0xA7, 0x40, 0x53, 0x6A, 0xD1, 0x6C, 0x8A, 0x8B, 0x3C, 0x29, 0xC1,
+  0x2B, 0x82, 0x61, 0x2F, 0x1A, 0x9F, 0x2C, 0x9A, 0x81, 0xD0, 0x2B, 0x3E, 0x0D, 0x99, 0xB7, 0xD4,
+  0x7E, 0xA7, 0xEA, 0x0C, 0x8E, 0x13, 0x0E, 0x53, 0x65, 0x48, 0x17, 0xE5, 0xFA, 0x91, 0x79, 0x98,
+  0xC7, 0xA1, 0x30, 0x82, 0x02, 0x93, 0x30, 0x82, 0x02, 0x39, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02,
+  0x10, 0x1F, 0x65, 0xF1, 0x29, 0x3B, 0x89, 0x6A, 0xBF, 0x43, 0xAF, 0xC7, 0x30, 0x36, 0xD1, 0x0D,
+  0x2B, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x26, 0x31,
+  0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63,
+  0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67,
+  0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, 0x30, 0x32, 0x31,
+  0x36, 0x34, 0x32, 0x32, 0x33, 0x5A, 0x17, 0x0D, 0x32, 0x33, 0x30, 0x38, 0x30, 0x32, 0x31, 0x36,
+  0x35, 0x32, 0x32, 0x33, 0x5A, 0x30, 0x2B, 0x31, 0x29, 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x03,
+  0x0C, 0x20, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69,
+  0x67, 0x6E, 0x65, 0x72, 0x50, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x74, 0x49, 0x44, 0x31, 0x30, 0x30,
+  0x30, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
+  0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82,
+  0x01, 0x01, 0x00, 0x8C, 0x26, 0x35, 0xBC, 0x18, 0x06, 0x44, 0x65, 0xF6, 0x55, 0x29, 0x78, 0x26,
+  0xCA, 0x57, 0xD0, 0x4C, 0x31, 0x84, 0x5B, 0x64, 0xDE, 0x8E, 0x34, 0x84, 0x45, 0x12, 0xE8, 0x5A,
+  0x86, 0x4B, 0x5A, 0x61, 0x4C, 0xD8, 0xE2, 0x7D, 0x3B, 0xBD, 0x25, 0x58, 0x30, 0x1D, 0x5E, 0x65,
+  0x50, 0xC3, 0x07, 0xF2, 0x50, 0xE1, 0x48, 0x2A, 0xD9, 0x70, 0x5F, 0xF3, 0x2B, 0xF1, 0x1F, 0x21,
+  0x06, 0x62, 0x81, 0xE9, 0x8E, 0xDA, 0xDC, 0x69, 0xA3, 0x6E, 0x2F, 0xD2, 0x3A, 0x79, 0x01, 0xAF,
+  0xA1, 0x2A, 0x28, 0xDD, 0x32, 0x4E, 0xCE, 0x40, 0xB8, 0x41, 0xA4, 0x7D, 0x3D, 0x70, 0x3F, 0xC4,
+  0xDA, 0x61, 0x18, 0xBF, 0xFC, 0xAB, 0x16, 0xE3, 0x65, 0x3F, 0x6D, 0x76, 0x37, 0xAD, 0x1F, 0x11,
+  0x05, 0x0F, 0xC2, 0x56, 0xD1, 0x45, 0xBD, 0x25, 0xCC, 0x19, 0xC4, 0x2A, 0x03, 0xED, 0x3B, 0x05,
+  0xA7, 0x87, 0x30, 0xE6, 0x84, 0x11, 0x88, 0xD0, 0x91, 0x4E, 0x52, 0xB5, 0x97, 0xDF, 0x57, 0xEF,
+  0x5E, 0x72, 0x68, 0x49, 0x85, 0xC8, 0x7F, 0xA7, 0x5F, 0x7B, 0xE7, 0xCE, 0xA1, 0x53, 0xBA, 0xF8,
+  0xA9, 0xDF, 0x8C, 0x8C, 0x72, 0xD2, 0xA9, 0x7A, 0xF5, 0x07, 0x4A, 0x75, 0x1A, 0x0F, 0x50, 0x9E,
+  0xEA, 0x4C, 0xFC, 0xC7, 0x74, 0xE2, 0x4D, 0xD1, 0x01, 0xC4, 0xB6, 0xCA, 0xA5, 0xCC, 0x23, 0xFA,
+  0xDE, 0xF2, 0x9C, 0x8B, 0xA6, 0x32, 0x8D, 0xED, 0x97, 0xCC, 0x50, 0xB0, 0xB6, 0x1C, 0x89, 0x64,
+  0xFC, 0xD7, 0xD0, 0x19, 0x01, 0x50, 0xD9, 0xBC, 0x78, 0xB1, 0x76, 0x6D, 0x01, 0xF8, 0xEC, 0x68,
+  0x97, 0x20, 0x32, 0xD0, 0x57, 0x76, 0x93, 0x73, 0xC9, 0x2B, 0x68, 0x9D, 0x5E, 0xE1, 0x70, 0xDD,
+  0x6F, 0x3A, 0x09, 0x20, 0x63, 0xE9, 0xD9, 0x30, 0x05, 0x14, 0x4A, 0x76, 0xA7, 0x3E, 0x61, 0xCD,
+  0x2F, 0x6D, 0xE3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x79, 0x30, 0x77, 0x30, 0x0E, 0x06, 0x03,
+  0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x25, 0x06, 0x03,
+  0x55, 0x1D, 0x25, 0x04, 0x1E, 0x30, 0x1C, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
+  0x4C, 0x09, 0x15, 0x01, 0x06, 0x0D, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15,
+  0x01, 0xCE, 0x11, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14,
+  0x63, 0x69, 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95, 0x54, 0x07, 0xC4, 0xC5, 0x2A,
+  0xD2, 0xA9, 0x2D, 0x2F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x09,
+  0x10, 0xEE, 0x7B, 0xB0, 0x56, 0xB0, 0xCE, 0x42, 0x83, 0x84, 0x90, 0x70, 0xAF, 0x8D, 0x58, 0x1B,
+  0x77, 0x43, 0x0E, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03,
+  0x48, 0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0xEE, 0x2A, 0x00, 0x7E, 0xC6, 0x4E, 0x6F, 0x22, 0xCC,
+  0x16, 0xEA, 0xAC, 0x90, 0x3D, 0xD7, 0x6E, 0xAA, 0xBF, 0x7E, 0xC7, 0x45, 0x3F, 0x36, 0x22, 0x81,
+  0xC6, 0x38, 0xD3, 0x1E, 0xDF, 0x5F, 0x2C, 0x02, 0x20, 0x21, 0xEC, 0xCF, 0x78, 0x1D, 0xDB, 0x4F,
+  0x50, 0xE8, 0xD6, 0x07, 0xB0, 0x6A, 0xE9, 0x1E, 0xBF, 0x9C, 0xE8, 0xB9, 0xF7, 0xC6, 0xEA, 0x04,
+  0x7B, 0x5E, 0xD8, 0x67, 0xAB, 0xD2, 0xDE, 0x77, 0xB9, 0x31, 0x82, 0x01, 0x65, 0x30, 0x82, 0x01,
+  0x61, 0x02, 0x01, 0x01, 0x30, 0x3A, 0x30, 0x26, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04,
+  0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69,
+  0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x02, 0x10,
+  0x1F, 0x65, 0xF1, 0x29, 0x3B, 0x89, 0x6A, 0xBF, 0x43, 0xAF, 0xC7, 0x30, 0x36, 0xD1, 0x0D, 0x2B,
+  0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
+  0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82,
+  0x01, 0x00, 0x1F, 0x7F, 0x30, 0xDC, 0xD4, 0x12, 0x9D, 0x0B, 0x71, 0x30, 0x69, 0x91, 0xCC, 0x8A,
+  0xFB, 0xF6, 0x54, 0x14, 0x4C, 0x0B, 0x78, 0xCE, 0xD3, 0xC6, 0xCE, 0x3E, 0xAC, 0xCC, 0x0F, 0xCE,
+  0x3A, 0xFC, 0x63, 0x96, 0xD2, 0x7B, 0xDB, 0xF7, 0xE7, 0x6D, 0x64, 0x52, 0x5C, 0x5D, 0x19, 0xBF,
+  0xE3, 0x04, 0x71, 0x8A, 0xD1, 0x2A, 0xB6, 0x5A, 0x8C, 0xFC, 0xE2, 0x51, 0x27, 0x64, 0x9B, 0xA8,
+  0x84, 0x69, 0x60, 0x4E, 0x56, 0x83, 0x91, 0x4F, 0xEB, 0x5A, 0xB7, 0x73, 0xE1, 0xAC, 0x24, 0xD2,
+  0x60, 0xD8, 0x58, 0x21, 0x51, 0x7B, 0x87, 0x93, 0x5B, 0x5F, 0x91, 0x4B, 0x8C, 0xFE, 0xA5, 0x16,
+  0x2E, 0x33, 0x4D, 0xBB, 0x0C, 0x95, 0x5C, 0xC3, 0x9C, 0x3D, 0xBB, 0x58, 0x17, 0x39, 0x1E, 0x10,
+  0x47, 0xCD, 0xEE, 0xD3, 0xE7, 0x73, 0x44, 0x7D, 0x35, 0xD9, 0x9F, 0xC3, 0xAC, 0x11, 0x2E, 0x29,
+  0x54, 0x80, 0x8F, 0x19, 0xDC, 0xC3, 0x11, 0x3D, 0x75, 0xF0, 0x3B, 0x34, 0x63, 0xB1, 0x59, 0x1D,
+  0x4B, 0x66, 0xBE, 0xB8, 0xAC, 0x36, 0x71, 0x63, 0xD4, 0x41, 0xCF, 0x24, 0x2A, 0x3F, 0xC5, 0x25,
+  0xD2, 0x45, 0x9B, 0xD3, 0x77, 0xD8, 0xD8, 0x1A, 0xC6, 0xAE, 0xE3, 0xF5, 0xC5, 0xEB, 0xF3, 0x92,
+  0x27, 0x3C, 0x3F, 0x48, 0x96, 0xF2, 0xB4, 0x66, 0x0A, 0xFB, 0xBF, 0x76, 0xDC, 0x1E, 0xC5, 0xC6,
+  0x4D, 0xA1, 0x5C, 0x13, 0x22, 0xF8, 0x89, 0xE2, 0x15, 0x43, 0x84, 0xEF, 0xC8, 0x30, 0xE5, 0xF0,
+  0xBA, 0x51, 0x96, 0x3E, 0xF9, 0xCB, 0x41, 0xE6, 0x36, 0xD4, 0xE3, 0xDA, 0x71, 0xC8, 0x5E, 0x43,
+  0x7A, 0xBE, 0x8E, 0xC0, 0xA5, 0xEF, 0x66, 0xFD, 0x63, 0xD3, 0xF1, 0xBF, 0x66, 0x4F, 0x35, 0x24,
+  0x66, 0xC9, 0xCD, 0x1E, 0x3D, 0x71, 0x19, 0x84, 0x1A, 0x9D, 0xA5, 0x56, 0xF4, 0xF9, 0xE0, 0x88,
+  0x7C, 0x52,
+};
+
+//
+// This is TestSignEKUsWith1CertInSignature.bin.p7b in byte array format.
+// It has one EKU in it:
+// "1.3.6.1.4.1.311.76.9.21.1"
+//
+CONST UINT8 TestSignEKUsWith1CertInSignature[] =
+{
+  0x30, 0x82, 0x02, 0x7D, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
+  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
+  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x01, 0xB2, 0x30, 0x82, 0x01, 0xAE, 0x30, 0x82, 0x01,
+  0x53, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96,
+  0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
+  0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49,
+  0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38,
+  0x31, 0x35, 0x31, 0x37, 0x33, 0x35, 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31,
+  0x35, 0x31, 0x37, 0x34, 0x35, 0x35, 0x30, 0x5A, 0x30, 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03,
+  0x55, 0x04, 0x03, 0x0C, 0x18, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73,
+  0x69, 0x6E, 0x67, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30,
+  0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xF6, 0xEA, 0x5E, 0x14, 0x20, 0x6D, 0x11, 0xC0,
+  0xFD, 0xF9, 0xB9, 0xB5, 0x8F, 0xBB, 0x3E, 0x8B, 0xE8, 0x21, 0x21, 0x3A, 0xC2, 0xBA, 0x37, 0x24,
+  0x61, 0x14, 0x7E, 0xA8, 0x86, 0x0A, 0x5C, 0xD3, 0x5F, 0xA8, 0xDC, 0x3A, 0x06, 0x30, 0x53, 0xFC,
+  0x85, 0xBC, 0x60, 0x5C, 0x28, 0x07, 0xCA, 0x12, 0x40, 0xE8, 0x97, 0x6A, 0x63, 0x30, 0xF7, 0x37,
+  0x25, 0x76, 0x4D, 0xA9, 0x1A, 0x8C, 0x36, 0xAA, 0xA3, 0x6A, 0x30, 0x68, 0x30, 0x0E, 0x06, 0x03,
+  0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03,
+  0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
+  0x4C, 0x09, 0x15, 0x01, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80,
+  0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C,
+  0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14,
+  0xE8, 0x47, 0x05, 0xA2, 0x59, 0xE9, 0x89, 0x81, 0xF4, 0xC8, 0x0D, 0x4C, 0x0A, 0xD3, 0xD4, 0xDE,
+  0x9F, 0xA6, 0xC7, 0x79, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02,
+  0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8C, 0x39, 0xC6, 0x6C, 0xD6, 0x8F, 0x20, 0xA5,
+  0x85, 0x97, 0x27, 0xF9, 0xB5, 0x26, 0xA2, 0xAB, 0xEC, 0x2E, 0x1B, 0x6F, 0x6F, 0x79, 0x9F, 0x8D,
+  0xCE, 0x9D, 0x12, 0x23, 0x5F, 0x04, 0xFA, 0xBE, 0x02, 0x21, 0x00, 0xC5, 0xD8, 0x49, 0xD1, 0x40,
+  0xE3, 0x2C, 0xDF, 0xC3, 0xD4, 0x11, 0xF9, 0x5E, 0x10, 0x8A, 0x3C, 0x4E, 0xA0, 0xD6, 0x6B, 0x8C,
+  0x0E, 0x7B, 0xF1, 0x2B, 0x20, 0x9C, 0x68, 0x53, 0x43, 0x4B, 0x35, 0x31, 0x81, 0xA3, 0x30, 0x81,
+  0xA0, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04,
+  0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E,
+  0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB,
+  0x00, 0x35, 0xC8, 0x96, 0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, 0x0D, 0x06, 0x09,
+  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x07, 0x2A,
+  0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, 0x00, 0x04, 0x47, 0x30, 0x45, 0x02, 0x21, 0x00, 0xB8,
+  0xCC, 0x0F, 0xD2, 0x50, 0x47, 0x3A, 0x11, 0x8D, 0xAE, 0x6C, 0xE9, 0x03, 0x64, 0xA7, 0x44, 0xE6,
+  0x0F, 0xF8, 0x6F, 0x7E, 0xE7, 0x61, 0x25, 0x8C, 0x67, 0xE8, 0xC2, 0xD6, 0x33, 0x91, 0x62, 0x02,
+  0x20, 0x78, 0xF8, 0x94, 0x0F, 0x46, 0xD2, 0xE2, 0x2B, 0x33, 0xAF, 0xBD, 0x38, 0xA4, 0x43, 0xA6,
+  0x6F, 0x8A, 0xBE, 0x26, 0xDC, 0xD0, 0x82, 0x01, 0x3D, 0x00, 0xF3, 0xC2, 0x07, 0x8A, 0xE8, 0xFD,
+  0x18,
+};
+
+//
+// This is TestSignEKUsWith2CertsInSignature.bin.p7b in byte array format.
+// It has one EKU in it:
+// "1.3.6.1.4.1.311.76.9.21.1"
+//
+CONST UINT8 TestSignEKUsWith2CertsInSignature[] =
+{
+  0x30, 0x82, 0x04, 0x61, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
+  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
+  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0x96, 0x30, 0x82, 0x01, 0xAE, 0x30, 0x82, 0x01,
+  0x53, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96,
+  0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
+  0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49,
+  0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38,
+  0x31, 0x35, 0x31, 0x37, 0x33, 0x35, 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31,
+  0x35, 0x31, 0x37, 0x34, 0x35, 0x35, 0x30, 0x5A, 0x30, 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03,
+  0x55, 0x04, 0x03, 0x0C, 0x18, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73,
+  0x69, 0x6E, 0x67, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30,
+  0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xF6, 0xEA, 0x5E, 0x14, 0x20, 0x6D, 0x11, 0xC0,
+  0xFD, 0xF9, 0xB9, 0xB5, 0x8F, 0xBB, 0x3E, 0x8B, 0xE8, 0x21, 0x21, 0x3A, 0xC2, 0xBA, 0x37, 0x24,
+  0x61, 0x14, 0x7E, 0xA8, 0x86, 0x0A, 0x5C, 0xD3, 0x5F, 0xA8, 0xDC, 0x3A, 0x06, 0x30, 0x53, 0xFC,
+  0x85, 0xBC, 0x60, 0x5C, 0x28, 0x07, 0xCA, 0x12, 0x40, 0xE8, 0x97, 0x6A, 0x63, 0x30, 0xF7, 0x37,
+  0x25, 0x76, 0x4D, 0xA9, 0x1A, 0x8C, 0x36, 0xAA, 0xA3, 0x6A, 0x30, 0x68, 0x30, 0x0E, 0x06, 0x03,
+  0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03,
+  0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
+  0x4C, 0x09, 0x15, 0x01, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80,
+  0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C,
+  0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14,
+  0xE8, 0x47, 0x05, 0xA2, 0x59, 0xE9, 0x89, 0x81, 0xF4, 0xC8, 0x0D, 0x4C, 0x0A, 0xD3, 0xD4, 0xDE,
+  0x9F, 0xA6, 0xC7, 0x79, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02,
+  0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8C, 0x39, 0xC6, 0x6C, 0xD6, 0x8F, 0x20, 0xA5,
+  0x85, 0x97, 0x27, 0xF9, 0xB5, 0x26, 0xA2, 0xAB, 0xEC, 0x2E, 0x1B, 0x6F, 0x6F, 0x79, 0x9F, 0x8D,
+  0xCE, 0x9D, 0x12, 0x23, 0x5F, 0x04, 0xFA, 0xBE, 0x02, 0x21, 0x00, 0xC5, 0xD8, 0x49, 0xD1, 0x40,
+  0xE3, 0x2C, 0xDF, 0xC3, 0xD4, 0x11, 0xF9, 0x5E, 0x10, 0x8A, 0x3C, 0x4E, 0xA0, 0xD6, 0x6B, 0x8C,
+  0x0E, 0x7B, 0xF1, 0x2B, 0x20, 0x9C, 0x68, 0x53, 0x43, 0x4B, 0x35, 0x30, 0x82, 0x01, 0xE0, 0x30,
+  0x82, 0x01, 0x65, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x79, 0x28, 0x1A, 0xE8, 0x7F, 0x21,
+  0x4F, 0xBB, 0x47, 0x2F, 0x74, 0x75, 0xE6, 0x98, 0x60, 0xD6, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86,
+  0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x21, 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x04,
+  0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E,
+  0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30,
+  0x38, 0x31, 0x35, 0x31, 0x37, 0x33, 0x32, 0x35, 0x34, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38,
+  0x31, 0x35, 0x31, 0x37, 0x34, 0x32, 0x35, 0x34, 0x5A, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06,
+  0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72,
+  0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, 0x59, 0x30,
+  0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x66, 0x41, 0xE6, 0x86, 0x7D, 0x5B, 0x96, 0x6C,
+  0x99, 0x2A, 0x82, 0x53, 0x58, 0xA3, 0x6F, 0x59, 0xFC, 0x1C, 0x9F, 0xEB, 0xBE, 0x9D, 0x53, 0xBA,
+  0x50, 0x0F, 0x66, 0xBC, 0xE5, 0x90, 0x7E, 0xAA, 0xA2, 0x6C, 0xC2, 0xC9, 0xAA, 0x99, 0x0B, 0x04,
+  0xA0, 0x6A, 0xB4, 0xC1, 0xF7, 0x55, 0x60, 0x58, 0xE3, 0xDE, 0x22, 0x57, 0xB1, 0x8A, 0x5C, 0xBC,
+  0xDF, 0x22, 0x8A, 0x2B, 0x04, 0x7D, 0x7A, 0x6C, 0xA3, 0x7E, 0x30, 0x7C, 0x30, 0x0E, 0x06, 0x03,
+  0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x16, 0x06, 0x03,
+  0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
+  0x4C, 0x09, 0x15, 0x01, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08,
+  0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04,
+  0x18, 0x30, 0x16, 0x80, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85,
+  0xCE, 0x5D, 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E,
+  0x04, 0x16, 0x04, 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40,
+  0x3C, 0x3E, 0x9C, 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x04, 0x03, 0x02, 0x03, 0x69, 0x00, 0x30, 0x66, 0x02, 0x31, 0x00, 0xEE, 0x78, 0xDB, 0x74,
+  0x56, 0xA3, 0xC2, 0x44, 0x25, 0x0F, 0xA1, 0x89, 0xC0, 0x76, 0xD1, 0xE4, 0xFE, 0xAA, 0xA4, 0xC3,
+  0x7D, 0x40, 0xE3, 0x28, 0x1B, 0x0D, 0xAB, 0x32, 0x6B, 0x9A, 0x60, 0x37, 0x2F, 0xB6, 0xF4, 0xCB,
+  0xEA, 0xC8, 0x65, 0xB6, 0xDC, 0x24, 0x90, 0x10, 0xFB, 0xD2, 0x42, 0x05, 0x02, 0x31, 0x00, 0x9E,
+  0x91, 0xF9, 0x96, 0x8A, 0x41, 0x2C, 0x5E, 0x6B, 0xBC, 0x36, 0x05, 0x3B, 0x50, 0x11, 0x91, 0x9A,
+  0xFA, 0x6B, 0x7F, 0x01, 0xF4, 0x6A, 0x7E, 0xCD, 0x98, 0x7E, 0x7D, 0xFD, 0xA8, 0xE3, 0xB2, 0x4F,
+  0x71, 0x91, 0xF5, 0xE0, 0x82, 0xA5, 0xE7, 0x5A, 0xE8, 0x19, 0x09, 0xF6, 0x22, 0xBE, 0xC4, 0x31,
+  0x81, 0xA3, 0x30, 0x81, 0xA0, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E,
+  0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61,
+  0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x02, 0x10,
+  0x3E, 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96, 0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB,
+  0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
+  0x0B, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, 0x00, 0x04, 0x47, 0x30, 0x45,
+  0x02, 0x20, 0x4A, 0xFD, 0xAE, 0xDD, 0x5D, 0xC5, 0x86, 0x48, 0xDC, 0xC1, 0xC3, 0xA7, 0xE6, 0x4E,
+  0x7F, 0x8B, 0x7B, 0xAB, 0x2C, 0x60, 0xDD, 0x79, 0x4C, 0xF2, 0x45, 0xED, 0x7A, 0xA5, 0x24, 0xE6,
+  0x0E, 0x60, 0x02, 0x21, 0x00, 0xAD, 0xCA, 0x3C, 0x29, 0x2F, 0xF9, 0xB1, 0x8E, 0x58, 0x29, 0x3F,
+  0x97, 0x20, 0x03, 0x6A, 0x14, 0xDA, 0x83, 0x4A, 0x8F, 0x3E, 0x95, 0x37, 0xC3, 0xF0, 0x12, 0x2A,
+  0x7B, 0x24, 0x59, 0x69, 0x27,
+};
+
+//
+// This is TestSignEKUsWith3CertsInSignature.bin.p7b
+// It has one EKU in it:
+// "1.3.6.1.4.1.311.76.9.21.1"
+//
+const UINT8 TestSignEKUsWith3CertsInSignature[] =
+{
+  0x30, 0x82, 0x06, 0x65, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
+  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
+  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x05, 0x9B, 0x30, 0x82, 0x01, 0xAE, 0x30, 0x82, 0x01,
+  0x53, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96,
+  0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
+  0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49,
+  0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38,
+  0x31, 0x35, 0x31, 0x37, 0x33, 0x35, 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31,
+  0x35, 0x31, 0x37, 0x34, 0x35, 0x35, 0x30, 0x5A, 0x30, 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03,
+  0x55, 0x04, 0x03, 0x0C, 0x18, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73,
+  0x69, 0x6E, 0x67, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30,
+  0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xF6, 0xEA, 0x5E, 0x14, 0x20, 0x6D, 0x11, 0xC0,
+  0xFD, 0xF9, 0xB9, 0xB5, 0x8F, 0xBB, 0x3E, 0x8B, 0xE8, 0x21, 0x21, 0x3A, 0xC2, 0xBA, 0x37, 0x24,
+  0x61, 0x14, 0x7E, 0xA8, 0x86, 0x0A, 0x5C, 0xD3, 0x5F, 0xA8, 0xDC, 0x3A, 0x06, 0x30, 0x53, 0xFC,
+  0x85, 0xBC, 0x60, 0x5C, 0x28, 0x07, 0xCA, 0x12, 0x40, 0xE8, 0x97, 0x6A, 0x63, 0x30, 0xF7, 0x37,
+  0x25, 0x76, 0x4D, 0xA9, 0x1A, 0x8C, 0x36, 0xAA, 0xA3, 0x6A, 0x30, 0x68, 0x30, 0x0E, 0x06, 0x03,
+  0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03,
+  0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
+  0x4C, 0x09, 0x15, 0x01, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80,
+  0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C,
+  0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14,
+  0xE8, 0x47, 0x05, 0xA2, 0x59, 0xE9, 0x89, 0x81, 0xF4, 0xC8, 0x0D, 0x4C, 0x0A, 0xD3, 0xD4, 0xDE,
+  0x9F, 0xA6, 0xC7, 0x79, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02,
+  0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8C, 0x39, 0xC6, 0x6C, 0xD6, 0x8F, 0x20, 0xA5,
+  0x85, 0x97, 0x27, 0xF9, 0xB5, 0x26, 0xA2, 0xAB, 0xEC, 0x2E, 0x1B, 0x6F, 0x6F, 0x79, 0x9F, 0x8D,
+  0xCE, 0x9D, 0x12, 0x23, 0x5F, 0x04, 0xFA, 0xBE, 0x02, 0x21, 0x00, 0xC5, 0xD8, 0x49, 0xD1, 0x40,
+  0xE3, 0x2C, 0xDF, 0xC3, 0xD4, 0x11, 0xF9, 0x5E, 0x10, 0x8A, 0x3C, 0x4E, 0xA0, 0xD6, 0x6B, 0x8C,
+  0x0E, 0x7B, 0xF1, 0x2B, 0x20, 0x9C, 0x68, 0x53, 0x43, 0x4B, 0x35, 0x30, 0x82, 0x01, 0xE0, 0x30,
+  0x82, 0x01, 0x65, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x79, 0x28, 0x1A, 0xE8, 0x7F, 0x21,
+  0x4F, 0xBB, 0x47, 0x2F, 0x74, 0x75, 0xE6, 0x98, 0x60, 0xD6, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86,
+  0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x21, 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x04,
+  0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E,
+  0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30,
+  0x38, 0x31, 0x35, 0x31, 0x37, 0x33, 0x32, 0x35, 0x34, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38,
+  0x31, 0x35, 0x31, 0x37, 0x34, 0x32, 0x35, 0x34, 0x5A, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06,
+  0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72,
+  0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, 0x59, 0x30,
+  0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x66, 0x41, 0xE6, 0x86, 0x7D, 0x5B, 0x96, 0x6C,
+  0x99, 0x2A, 0x82, 0x53, 0x58, 0xA3, 0x6F, 0x59, 0xFC, 0x1C, 0x9F, 0xEB, 0xBE, 0x9D, 0x53, 0xBA,
+  0x50, 0x0F, 0x66, 0xBC, 0xE5, 0x90, 0x7E, 0xAA, 0xA2, 0x6C, 0xC2, 0xC9, 0xAA, 0x99, 0x0B, 0x04,
+  0xA0, 0x6A, 0xB4, 0xC1, 0xF7, 0x55, 0x60, 0x58, 0xE3, 0xDE, 0x22, 0x57, 0xB1, 0x8A, 0x5C, 0xBC,
+  0xDF, 0x22, 0x8A, 0x2B, 0x04, 0x7D, 0x7A, 0x6C, 0xA3, 0x7E, 0x30, 0x7C, 0x30, 0x0E, 0x06, 0x03,
+  0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x16, 0x06, 0x03,
+  0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
+  0x4C, 0x09, 0x15, 0x01, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08,
+  0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04,
+  0x18, 0x30, 0x16, 0x80, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85,
+  0xCE, 0x5D, 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E,
+  0x04, 0x16, 0x04, 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40,
+  0x3C, 0x3E, 0x9C, 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x04, 0x03, 0x02, 0x03, 0x69, 0x00, 0x30, 0x66, 0x02, 0x31, 0x00, 0xEE, 0x78, 0xDB, 0x74,
+  0x56, 0xA3, 0xC2, 0x44, 0x25, 0x0F, 0xA1, 0x89, 0xC0, 0x76, 0xD1, 0xE4, 0xFE, 0xAA, 0xA4, 0xC3,
+  0x7D, 0x40, 0xE3, 0x28, 0x1B, 0x0D, 0xAB, 0x32, 0x6B, 0x9A, 0x60, 0x37, 0x2F, 0xB6, 0xF4, 0xCB,
+  0xEA, 0xC8, 0x65, 0xB6, 0xDC, 0x24, 0x90, 0x10, 0xFB, 0xD2, 0x42, 0x05, 0x02, 0x31, 0x00, 0x9E,
+  0x91, 0xF9, 0x96, 0x8A, 0x41, 0x2C, 0x5E, 0x6B, 0xBC, 0x36, 0x05, 0x3B, 0x50, 0x11, 0x91, 0x9A,
+  0xFA, 0x6B, 0x7F, 0x01, 0xF4, 0x6A, 0x7E, 0xCD, 0x98, 0x7E, 0x7D, 0xFD, 0xA8, 0xE3, 0xB2, 0x4F,
+  0x71, 0x91, 0xF5, 0xE0, 0x82, 0xA5, 0xE7, 0x5A, 0xE8, 0x19, 0x09, 0xF6, 0x22, 0xBE, 0xC4, 0x30,
+  0x82, 0x02, 0x01, 0x30, 0x82, 0x01, 0x62, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x41, 0x02,
+  0xBA, 0xF9, 0x87, 0x65, 0x6C, 0xB8, 0x4C, 0xD9, 0xA1, 0x04, 0x1C, 0x46, 0x4F, 0xE4, 0x30, 0x0A,
+  0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x1D, 0x31, 0x1B, 0x30, 0x19,
+  0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x12, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61,
+  0x72, 0x73, 0x69, 0x6E, 0x67, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30,
+  0x38, 0x31, 0x35, 0x31, 0x37, 0x32, 0x39, 0x32, 0x39, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38,
+  0x31, 0x35, 0x31, 0x37, 0x33, 0x39, 0x32, 0x39, 0x5A, 0x30, 0x21, 0x31, 0x1F, 0x30, 0x1D, 0x06,
+  0x03, 0x55, 0x04, 0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72,
+  0x73, 0x69, 0x6E, 0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, 0x30, 0x76, 0x30, 0x10,
+  0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22,
+  0x03, 0x62, 0x00, 0x04, 0xF9, 0xDC, 0xB9, 0x3F, 0xA8, 0xB5, 0x2B, 0x2E, 0xA7, 0xFC, 0x88, 0xC6,
+  0xEF, 0x9C, 0x36, 0x61, 0x3E, 0xFF, 0x8A, 0x5A, 0x52, 0xFF, 0x5A, 0xD0, 0x2C, 0x08, 0xD6, 0x73,
+  0x12, 0xF9, 0x62, 0x1E, 0x73, 0x76, 0x83, 0x49, 0xC8, 0xDE, 0xEB, 0x29, 0xA4, 0x78, 0x2A, 0xC1,
+  0x30, 0x11, 0x0B, 0x2F, 0x38, 0x00, 0xB7, 0x6B, 0x6B, 0x8E, 0x8C, 0x4B, 0x33, 0x09, 0xF1, 0xEA,
+  0xA4, 0x9E, 0x10, 0x4F, 0xC3, 0xBC, 0x30, 0x16, 0x1A, 0x8B, 0xD7, 0x9C, 0x14, 0x11, 0x4E, 0x56,
+  0x64, 0x7E, 0x51, 0xE7, 0xDA, 0x26, 0x40, 0xB0, 0xD0, 0xF8, 0xF2, 0xB2, 0x5D, 0x8C, 0x8B, 0x49,
+  0x0C, 0x4E, 0x58, 0xB0, 0xA3, 0x63, 0x30, 0x61, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01,
+  0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01,
+  0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23,
+  0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x04, 0xA6, 0xCD, 0x4D, 0xAE, 0x9C, 0x17, 0xDB, 0xC8, 0x13,
+  0x57, 0x2D, 0x72, 0x48, 0xAC, 0xBB, 0x6B, 0x1F, 0xFF, 0x61, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D,
+  0x0E, 0x04, 0x16, 0x04, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85,
+  0xCE, 0x5D, 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48,
+  0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8C, 0x00, 0x30, 0x81, 0x88, 0x02, 0x42, 0x01, 0xB4,
+  0x75, 0x0B, 0x2F, 0x2A, 0xAA, 0x77, 0x03, 0x08, 0xD9, 0x95, 0x13, 0x2C, 0xE8, 0x47, 0x69, 0x97,
+  0xD1, 0x6B, 0xE0, 0x23, 0x94, 0xD5, 0x34, 0x8F, 0x80, 0x20, 0xE3, 0x72, 0x07, 0x7C, 0x6A, 0x52,
+  0xE6, 0xF2, 0xC7, 0x85, 0xBD, 0xB6, 0x65, 0x8F, 0x61, 0x73, 0xF9, 0xE7, 0x3A, 0x31, 0x46, 0xC6,
+  0xF2, 0xCE, 0xA7, 0x9E, 0xD0, 0xE2, 0xEF, 0x07, 0x59, 0xD0, 0xF1, 0xC4, 0xF6, 0x58, 0x9A, 0x16,
+  0x02, 0x42, 0x00, 0x86, 0xE0, 0x25, 0xC1, 0x48, 0xD0, 0x33, 0x30, 0x55, 0xA8, 0x60, 0x44, 0xCA,
+  0x47, 0x04, 0x93, 0x46, 0x81, 0xE9, 0x13, 0xE9, 0x67, 0x26, 0x23, 0x2A, 0xBD, 0xEF, 0xC4, 0xCC,
+  0x12, 0x99, 0xB3, 0x9E, 0x3D, 0x78, 0xC8, 0x42, 0x06, 0x40, 0x48, 0xCA, 0x3D, 0xCC, 0xD7, 0xA2,
+  0x35, 0x37, 0x76, 0x12, 0xDB, 0x9C, 0x90, 0xA4, 0xE4, 0x16, 0xAC, 0x5E, 0xD8, 0x04, 0xF1, 0x59,
+  0x66, 0x85, 0xE2, 0x68, 0x31, 0x81, 0xA2, 0x30, 0x81, 0x9F, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30,
+  0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74,
+  0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E,
+  0x67, 0x43, 0x41, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96, 0x41, 0xF4, 0xF6,
+  0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
+  0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05,
+  0x00, 0x04, 0x46, 0x30, 0x44, 0x02, 0x20, 0x52, 0x90, 0x02, 0x9E, 0xE8, 0xBF, 0xE8, 0x7E, 0x05,
+  0x3B, 0xA3, 0x93, 0xDD, 0x6C, 0x35, 0x31, 0xA3, 0x29, 0x4F, 0x9A, 0x78, 0xEF, 0xD1, 0xAD, 0x07,
+  0x37, 0x2D, 0x9A, 0x81, 0xFD, 0x7D, 0xFC, 0x02, 0x20, 0x4C, 0x8A, 0xA4, 0xBD, 0x63, 0x7B, 0x8A,
+  0x2C, 0x9E, 0xFC, 0x2A, 0x0F, 0x91, 0xF4, 0x97, 0xB5, 0x3B, 0xC9, 0xD1, 0xCA, 0xEB, 0x02, 0x6A,
+  0xB6, 0xFF, 0xE1, 0x15, 0xF5, 0xA2, 0x11, 0xF4, 0xD9,
+};
+
+//
+// This signature was signed with a leaf that has no EKU's present in the certificate.
+//
+CONST UINT8 TestSignatureWithNoEKUsPresent[] =
+{
+  0x30, 0x82, 0x07, 0xDB, 0x02, 0x01, 0x01, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
+  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
+  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x06, 0x51, 0x30, 0x82, 0x01, 0xE0, 0x30, 0x82, 0x01,
+  0x65, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x79, 0x28, 0x1A, 0xE8, 0x7F, 0x21, 0x4F, 0xBB,
+  0x47, 0x2F, 0x74, 0x75, 0xE6, 0x98, 0x60, 0xD6, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
+  0x3D, 0x04, 0x03, 0x02, 0x30, 0x21, 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
+  0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x50,
+  0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, 0x31,
+  0x35, 0x31, 0x37, 0x33, 0x32, 0x35, 0x34, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, 0x35,
+  0x31, 0x37, 0x34, 0x32, 0x35, 0x34, 0x5A, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55,
+  0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69,
+  0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30, 0x59, 0x30, 0x13, 0x06,
+  0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03,
+  0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x66, 0x41, 0xE6, 0x86, 0x7D, 0x5B, 0x96, 0x6C, 0x99, 0x2A,
+  0x82, 0x53, 0x58, 0xA3, 0x6F, 0x59, 0xFC, 0x1C, 0x9F, 0xEB, 0xBE, 0x9D, 0x53, 0xBA, 0x50, 0x0F,
+  0x66, 0xBC, 0xE5, 0x90, 0x7E, 0xAA, 0xA2, 0x6C, 0xC2, 0xC9, 0xAA, 0x99, 0x0B, 0x04, 0xA0, 0x6A,
+  0xB4, 0xC1, 0xF7, 0x55, 0x60, 0x58, 0xE3, 0xDE, 0x22, 0x57, 0xB1, 0x8A, 0x5C, 0xBC, 0xDF, 0x22,
+  0x8A, 0x2B, 0x04, 0x7D, 0x7A, 0x6C, 0xA3, 0x7E, 0x30, 0x7C, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D,
+  0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x16, 0x06, 0x03, 0x55, 0x1D,
+  0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09,
+  0x15, 0x01, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30, 0x06,
+  0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30,
+  0x16, 0x80, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85, 0xCE, 0x5D,
+  0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16,
+  0x04, 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E,
+  0x9C, 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04,
+  0x03, 0x02, 0x03, 0x69, 0x00, 0x30, 0x66, 0x02, 0x31, 0x00, 0xEE, 0x78, 0xDB, 0x74, 0x56, 0xA3,
+  0xC2, 0x44, 0x25, 0x0F, 0xA1, 0x89, 0xC0, 0x76, 0xD1, 0xE4, 0xFE, 0xAA, 0xA4, 0xC3, 0x7D, 0x40,
+  0xE3, 0x28, 0x1B, 0x0D, 0xAB, 0x32, 0x6B, 0x9A, 0x60, 0x37, 0x2F, 0xB6, 0xF4, 0xCB, 0xEA, 0xC8,
+  0x65, 0xB6, 0xDC, 0x24, 0x90, 0x10, 0xFB, 0xD2, 0x42, 0x05, 0x02, 0x31, 0x00, 0x9E, 0x91, 0xF9,
+  0x96, 0x8A, 0x41, 0x2C, 0x5E, 0x6B, 0xBC, 0x36, 0x05, 0x3B, 0x50, 0x11, 0x91, 0x9A, 0xFA, 0x6B,
+  0x7F, 0x01, 0xF4, 0x6A, 0x7E, 0xCD, 0x98, 0x7E, 0x7D, 0xFD, 0xA8, 0xE3, 0xB2, 0x4F, 0x71, 0x91,
+  0xF5, 0xE0, 0x82, 0xA5, 0xE7, 0x5A, 0xE8, 0x19, 0x09, 0xF6, 0x22, 0xBE, 0xC4, 0x30, 0x82, 0x02,
+  0x01, 0x30, 0x82, 0x01, 0x62, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x41, 0x02, 0xBA, 0xF9,
+  0x87, 0x65, 0x6C, 0xB8, 0x4C, 0xD9, 0xA1, 0x04, 0x1C, 0x46, 0x4F, 0xE4, 0x30, 0x0A, 0x06, 0x08,
+  0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x1D, 0x31, 0x1B, 0x30, 0x19, 0x06, 0x03,
+  0x55, 0x04, 0x03, 0x0C, 0x12, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73,
+  0x69, 0x6E, 0x67, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, 0x31,
+  0x35, 0x31, 0x37, 0x32, 0x39, 0x32, 0x39, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, 0x35,
+  0x31, 0x37, 0x33, 0x39, 0x32, 0x39, 0x5A, 0x30, 0x21, 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55,
+  0x04, 0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69,
+  0x6E, 0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07,
+  0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62,
+  0x00, 0x04, 0xF9, 0xDC, 0xB9, 0x3F, 0xA8, 0xB5, 0x2B, 0x2E, 0xA7, 0xFC, 0x88, 0xC6, 0xEF, 0x9C,
+  0x36, 0x61, 0x3E, 0xFF, 0x8A, 0x5A, 0x52, 0xFF, 0x5A, 0xD0, 0x2C, 0x08, 0xD6, 0x73, 0x12, 0xF9,
+  0x62, 0x1E, 0x73, 0x76, 0x83, 0x49, 0xC8, 0xDE, 0xEB, 0x29, 0xA4, 0x78, 0x2A, 0xC1, 0x30, 0x11,
+  0x0B, 0x2F, 0x38, 0x00, 0xB7, 0x6B, 0x6B, 0x8E, 0x8C, 0x4B, 0x33, 0x09, 0xF1, 0xEA, 0xA4, 0x9E,
+  0x10, 0x4F, 0xC3, 0xBC, 0x30, 0x16, 0x1A, 0x8B, 0xD7, 0x9C, 0x14, 0x11, 0x4E, 0x56, 0x64, 0x7E,
+  0x51, 0xE7, 0xDA, 0x26, 0x40, 0xB0, 0xD0, 0xF8, 0xF2, 0xB2, 0x5D, 0x8C, 0x8B, 0x49, 0x0C, 0x4E,
+  0x58, 0xB0, 0xA3, 0x63, 0x30, 0x61, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF,
+  0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF,
+  0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18,
+  0x30, 0x16, 0x80, 0x14, 0x04, 0xA6, 0xCD, 0x4D, 0xAE, 0x9C, 0x17, 0xDB, 0xC8, 0x13, 0x57, 0x2D,
+  0x72, 0x48, 0xAC, 0xBB, 0x6B, 0x1F, 0xFF, 0x61, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04,
+  0x16, 0x04, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85, 0xCE, 0x5D,
+  0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D,
+  0x04, 0x03, 0x02, 0x03, 0x81, 0x8C, 0x00, 0x30, 0x81, 0x88, 0x02, 0x42, 0x01, 0xB4, 0x75, 0x0B,
+  0x2F, 0x2A, 0xAA, 0x77, 0x03, 0x08, 0xD9, 0x95, 0x13, 0x2C, 0xE8, 0x47, 0x69, 0x97, 0xD1, 0x6B,
+  0xE0, 0x23, 0x94, 0xD5, 0x34, 0x8F, 0x80, 0x20, 0xE3, 0x72, 0x07, 0x7C, 0x6A, 0x52, 0xE6, 0xF2,
+  0xC7, 0x85, 0xBD, 0xB6, 0x65, 0x8F, 0x61, 0x73, 0xF9, 0xE7, 0x3A, 0x31, 0x46, 0xC6, 0xF2, 0xCE,
+  0xA7, 0x9E, 0xD0, 0xE2, 0xEF, 0x07, 0x59, 0xD0, 0xF1, 0xC4, 0xF6, 0x58, 0x9A, 0x16, 0x02, 0x42,
+  0x00, 0x86, 0xE0, 0x25, 0xC1, 0x48, 0xD0, 0x33, 0x30, 0x55, 0xA8, 0x60, 0x44, 0xCA, 0x47, 0x04,
+  0x93, 0x46, 0x81, 0xE9, 0x13, 0xE9, 0x67, 0x26, 0x23, 0x2A, 0xBD, 0xEF, 0xC4, 0xCC, 0x12, 0x99,
+  0xB3, 0x9E, 0x3D, 0x78, 0xC8, 0x42, 0x06, 0x40, 0x48, 0xCA, 0x3D, 0xCC, 0xD7, 0xA2, 0x35, 0x37,
+  0x76, 0x12, 0xDB, 0x9C, 0x90, 0xA4, 0xE4, 0x16, 0xAC, 0x5E, 0xD8, 0x04, 0xF1, 0x59, 0x66, 0x85,
+  0xE2, 0x68, 0x30, 0x82, 0x02, 0x64, 0x30, 0x82, 0x02, 0x0A, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02,
+  0x10, 0x2B, 0x7B, 0xDA, 0xCD, 0x87, 0xA0, 0xFD, 0x81, 0x49, 0x5E, 0x0E, 0xDD, 0x4F, 0x81, 0x48,
+  0x2D, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31,
+  0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B,
+  0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43,
+  0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, 0x32, 0x33, 0x31, 0x39, 0x33, 0x30, 0x30,
+  0x32, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x32, 0x33, 0x31, 0x39, 0x34, 0x30, 0x30, 0x32,
+  0x5A, 0x30, 0x27, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1C, 0x54, 0x65,
+  0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x4E, 0x6F, 0x45, 0x4B,
+  0x55, 0x73, 0x49, 0x6E, 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D,
+  0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01,
+  0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xA5, 0x9B, 0x95, 0xF0, 0x63,
+  0x88, 0xC3, 0x74, 0x26, 0x08, 0x68, 0x25, 0xAA, 0x16, 0xBB, 0x2A, 0x15, 0xC1, 0xA2, 0xAF, 0x72,
+  0x06, 0x51, 0x37, 0xE1, 0x4F, 0x6D, 0x6A, 0xFC, 0x17, 0xCE, 0x82, 0x7B, 0x79, 0xFF, 0x2A, 0x84,
+  0x0F, 0xCB, 0xA9, 0x65, 0x70, 0xC9, 0xF9, 0xE7, 0x61, 0x90, 0x28, 0x03, 0x6E, 0x41, 0x25, 0xFF,
+  0xC2, 0x3A, 0x60, 0x1A, 0x42, 0x37, 0x80, 0x9F, 0x6B, 0x99, 0x11, 0x5A, 0x1F, 0xAE, 0x7B, 0x3F,
+  0xF3, 0x2B, 0x45, 0xDD, 0xDA, 0xC4, 0x32, 0xD7, 0xD8, 0xB5, 0x3D, 0x46, 0x0C, 0x8A, 0x11, 0xEE,
+  0x94, 0x8C, 0xB5, 0x69, 0xD3, 0x91, 0x4F, 0x4E, 0xE5, 0xBB, 0x93, 0xDD, 0x1E, 0xA7, 0x20, 0x03,
+  0xFD, 0xD6, 0x8F, 0x76, 0x91, 0x9A, 0x2B, 0x41, 0x91, 0xD8, 0x35, 0x7A, 0x0D, 0x80, 0xB9, 0xD4,
+  0xD2, 0x56, 0xF1, 0xF9, 0xC5, 0xE6, 0xF2, 0xAE, 0x10, 0x7E, 0xD7, 0x6C, 0x40, 0x86, 0x37, 0x99,
+  0x85, 0xF4, 0xCA, 0x1D, 0x6D, 0x90, 0x63, 0xF7, 0x63, 0xC6, 0x00, 0xA1, 0xA9, 0x79, 0x7D, 0x88,
+  0x05, 0xA2, 0x92, 0x64, 0xA7, 0x8E, 0xA8, 0x9E, 0xC3, 0x1F, 0x63, 0xEE, 0x6C, 0xE3, 0x9B, 0xA6,
+  0xD7, 0x9D, 0x9C, 0x9F, 0x0D, 0x7A, 0xF7, 0x00, 0x92, 0x16, 0xE8, 0x64, 0x36, 0x07, 0x66, 0x8E,
+  0x6E, 0x51, 0x09, 0x3F, 0x2A, 0xD6, 0x6D, 0x4E, 0xCC, 0x49, 0xE1, 0xC3, 0x59, 0x63, 0xDC, 0x51,
+  0xAA, 0xD1, 0xE7, 0x42, 0x2F, 0x72, 0x25, 0x46, 0x83, 0x7D, 0x23, 0xCE, 0xF7, 0x96, 0x2F, 0x04,
+  0xE8, 0xAE, 0xF6, 0x19, 0x6D, 0x2D, 0xB2, 0x64, 0xDB, 0x69, 0x33, 0x96, 0x58, 0xA0, 0x6C, 0x77,
+  0xF0, 0xD0, 0x5E, 0x36, 0xB1, 0x28, 0x89, 0x83, 0xB6, 0xA5, 0x13, 0x0E, 0x6B, 0x6E, 0x73, 0x2C,
+  0x6F, 0xDA, 0xF9, 0x6C, 0x11, 0x4F, 0xCC, 0xF7, 0x89, 0x77, 0x83, 0x02, 0x03, 0x01, 0x00, 0x01,
+  0xA3, 0x52, 0x30, 0x50, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04,
+  0x03, 0x02, 0x01, 0x86, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80,
+  0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C,
+  0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14,
+  0xB6, 0xAF, 0x0D, 0xC1, 0xBE, 0xD1, 0xE4, 0x21, 0x37, 0xFF, 0xAC, 0x7D, 0x2D, 0xD4, 0x51, 0x8A,
+  0x61, 0x95, 0x50, 0x7F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02,
+  0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x74, 0x7D, 0xF5, 0xAF, 0xC3, 0xA7, 0x06, 0x99, 0x1F,
+  0x2C, 0xAF, 0x69, 0xAA, 0x40, 0x97, 0xE9, 0xF8, 0x4C, 0xD2, 0x71, 0x17, 0x25, 0x85, 0xB7, 0xA6,
+  0x97, 0x61, 0x89, 0x82, 0xED, 0xF0, 0xF6, 0x02, 0x21, 0x00, 0xA6, 0xF4, 0x59, 0x85, 0x53, 0x31,
+  0xEF, 0x6F, 0x37, 0xB6, 0x8E, 0xA2, 0xDE, 0xC3, 0xFD, 0xD6, 0xFB, 0x50, 0x63, 0x4E, 0xB4, 0xBB,
+  0xC1, 0xB1, 0x07, 0x82, 0x80, 0x14, 0x28, 0x6A, 0x94, 0x94, 0x31, 0x82, 0x01, 0x61, 0x30, 0x82,
+  0x01, 0x5D, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55,
+  0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69,
+  0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x02, 0x10, 0x2B, 0x7B, 0xDA,
+  0xCD, 0x87, 0xA0, 0xFD, 0x81, 0x49, 0x5E, 0x0E, 0xDD, 0x4F, 0x81, 0x48, 0x2D, 0x30, 0x0D, 0x06,
+  0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30, 0x0D, 0x06, 0x09,
+  0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0x39,
+  0xEC, 0xA8, 0x00, 0x4F, 0x7E, 0x2C, 0x3C, 0x48, 0xDF, 0x6F, 0x6A, 0x37, 0x69, 0xA4, 0xB1, 0xEB,
+  0x7D, 0xD2, 0x3B, 0xC5, 0xEE, 0x57, 0x1F, 0x8F, 0xCA, 0x60, 0x80, 0x88, 0x24, 0x29, 0xB5, 0x00,
+  0x28, 0xFF, 0x8F, 0x0A, 0x1E, 0xB0, 0x9E, 0x90, 0x09, 0xF1, 0x46, 0xC1, 0x53, 0xE8, 0x27, 0x29,
+  0xFA, 0xFE, 0xA3, 0x84, 0x79, 0xB2, 0x27, 0x46, 0x9B, 0xD8, 0x33, 0xBD, 0x8F, 0x41, 0x06, 0xEE,
+  0xD6, 0xE7, 0x49, 0xAF, 0x48, 0xD0, 0xD4, 0xF1, 0x06, 0xCC, 0xD3, 0x26, 0x47, 0xAE, 0x03, 0x7A,
+  0xA5, 0xAF, 0xDE, 0x7F, 0x57, 0x32, 0x51, 0x49, 0x8C, 0x18, 0xD2, 0x4D, 0x50, 0x27, 0xAC, 0x7C,
+  0x33, 0xB8, 0xB8, 0x1C, 0xF8, 0x0C, 0x49, 0xEB, 0xF5, 0xD7, 0xA0, 0x35, 0x77, 0x61, 0xC0, 0x60,
+  0xAF, 0x23, 0x8C, 0xCC, 0xB0, 0x58, 0xB3, 0x08, 0x89, 0x2B, 0xC0, 0x61, 0x0C, 0xA6, 0x40, 0x7A,
+  0x37, 0x6D, 0x6D, 0x44, 0xFF, 0xF1, 0xCE, 0xDE, 0x7A, 0x0C, 0xC4, 0x51, 0x61, 0xE6, 0x72, 0x6B,
+  0xA9, 0x6A, 0x7B, 0xCF, 0xAA, 0x9A, 0x28, 0x74, 0x87, 0x30, 0xBA, 0xED, 0x40, 0xF0, 0x75, 0x2B,
+  0xD7, 0xE6, 0x9F, 0xDD, 0x6B, 0xB7, 0xEA, 0x08, 0x0D, 0x9F, 0xA3, 0x25, 0x27, 0xB7, 0xBF, 0x41,
+  0xC2, 0x64, 0xB5, 0x6F, 0x8F, 0xB1, 0x5F, 0xE5, 0xDF, 0xCA, 0x16, 0x04, 0x61, 0xFF, 0x74, 0x25,
+  0xEE, 0xF6, 0x69, 0xF1, 0x7F, 0xE5, 0x97, 0x72, 0x58, 0xD8, 0x9F, 0xA5, 0x19, 0x32, 0x46, 0x95,
+  0x67, 0x63, 0x23, 0x54, 0x46, 0x05, 0x15, 0xC3, 0x3E, 0x04, 0x7E, 0x88, 0xD0, 0xB5, 0x52, 0xF0,
+  0x38, 0x3C, 0x8B, 0xD4, 0x3D, 0x9A, 0x55, 0x1B, 0x14, 0xE5, 0x37, 0x8D, 0xB7, 0x6C, 0x39, 0x91,
+  0x23, 0x31, 0x63, 0x89, 0x7C, 0x75, 0x02, 0x79, 0xCC, 0x95, 0x58, 0x99, 0x3A, 0xDB, 0xF5,
+};
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h
new file mode 100644
index 000000000000..9d1cb150a113
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h
@@ -0,0 +1,121 @@
+/** @file
+  Application for Cryptographic Primitives Validation.
+
+Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef __CRYPTEST_H__
+#define __CRYPTEST_H__
+
+#include <PiPei.h>
+#include <Uefi.h>
+#include <Library/UefiLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UnitTestLib.h>
+#include <Library/PrintLib.h>
+#include <Library/BaseCryptLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+//#include <UnitTestTypes.h>
+#include <Library/UnitTestLib.h>
+//#include <Library/UnitTestAssertLib.h>
+
+#define UNIT_TEST_NAME        "BaseCryptLib Unit Test"
+#define UNIT_TEST_VERSION     "1.0"
+
+typedef struct {
+  CHAR8                *Description;
+  CHAR8                *ClassName;
+  UNIT_TEST_FUNCTION     Func;
+  UNIT_TEST_PREREQUISITE PreReq;
+  UNIT_TEST_CLEANUP      CleanUp;
+  UNIT_TEST_CONTEXT      Context;
+} TEST_DESC;
+
+typedef struct {
+  CHAR8                     *Title;
+  CHAR8                     *Package;
+  UNIT_TEST_SUITE_SETUP      Sup;
+  UNIT_TEST_SUITE_TEARDOWN   Tdn;
+  UINTN                      *TestNum;
+  TEST_DESC                  *TestDesc;
+} SUITE_DESC;
+
+extern UINTN mPkcs7EkuTestNum;
+extern TEST_DESC mPkcs7EkuTest[];
+
+extern UINTN mHashTestNum;
+extern TEST_DESC mHashTest[];
+
+extern UINTN mHmacTestNum;
+extern TEST_DESC mHmacTest[];
+
+extern UINTN mBlockCipherTestNum;
+extern TEST_DESC mBlockCipherTest[];
+
+extern UINTN mRsaTestNum;
+extern TEST_DESC mRsaTest[];
+
+extern UINTN mRsaCertTestNum;
+extern TEST_DESC mRsaCertTest[];
+
+extern UINTN mPkcs7TestNum;
+extern TEST_DESC mPkcs7Test[];
+
+extern UINTN mPkcs5TestNum;
+extern TEST_DESC mPkcs5Test[];
+
+extern UINTN mAuthenticodeTestNum;
+extern TEST_DESC mAuthenticodeTest[];
+
+extern UINTN mImageTimestampTestNum;
+extern TEST_DESC mImageTimestampTest[];
+
+extern UINTN mDhTestNum;
+extern TEST_DESC mDhTest[];
+
+extern UINTN mPrngTestNum;
+extern TEST_DESC mPrngTest[];
+
+extern UINTN mOaepTestNum;
+extern TEST_DESC mOaepTest[];
+
+/** Creates a framework you can use */
+EFI_STATUS
+EFIAPI
+CreateUnitTest (
+    IN     CHAR8*                     UnitTestName,
+    IN     CHAR8*                     UnitTestVersion,
+    IN OUT UNIT_TEST_FRAMEWORK_HANDLE* Framework
+);
+
+/**
+  Validate UEFI-OpenSSL DH Interfaces.
+
+  @retval  EFI_SUCCESS  Validation succeeded.
+  @retval  EFI_ABORTED  Validation failed.
+
+**/
+EFI_STATUS
+ValidateCryptDh (
+  VOID
+  );
+
+/**
+  Validate UEFI-OpenSSL pseudorandom number generator interfaces.
+
+  @retval  EFI_SUCCESS  Validation succeeded.
+  @retval  EFI_ABORTED  Validation failed.
+
+**/
+EFI_STATUS
+ValidateCryptPrng (
+  VOID
+  );
+
+
+
+#endif
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf
new file mode 100644
index 000000000000..300b98e40b33
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf
@@ -0,0 +1,46 @@
+## @file
+# Host-based UnitTest for BaseCryptLib
+#
+# Copyright (c) Microsoft Corporation.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+  INF_VERSION    = 0x00010005
+  BASE_NAME      = BaseCryptLibUnitTestHost
+  FILE_GUID      = 0cb84598-824b-4833-b705-bdefdcbba1d5
+  MODULE_TYPE    = HOST_APPLICATION
+  VERSION_STRING = 1.0
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+#  VALID_ARCHITECTURES           = IA32 X64
+#
+
+[Sources]
+  UnitTestMain.c
+  BaseCryptLibUnitTests.c
+  TestBaseCryptLib.h
+  HashTests.c
+  HmacTests.c
+  BlockCipherTests.c
+  RsaTests.c
+  RsaPkcs7Tests.c
+  Pkcs5Pbkdf2Tests.c
+  AuthenticodeTests.c
+  TSTests.c
+  DhTests.c
+  RandTests.c
+  Pkcs7EkuTests.c
+  OaepEncryptTests.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  CryptoPkg/CryptoPkg.dec
+
+[LibraryClasses]
+  BaseLib
+  DebugLib
+  BaseCryptLib
+  UnitTestLib
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf
new file mode 100644
index 000000000000..6cd4a31be2c8
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibUefiShell.inf
@@ -0,0 +1,49 @@
+## @file
+# BaseCryptLib UnitTest built for execution in UEFI Shell.
+#
+# Copyright (c) Microsoft Corporation.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+  INF_VERSION    = 0x00010006
+  BASE_NAME      = BaseCryptLibTestUefiShell
+  FILE_GUID      = ed54ee8c-ef7a-41f2-83d5-0e0d4cd88c21
+  MODULE_TYPE    = UEFI_APPLICATION
+  VERSION_STRING = 1.0
+  ENTRY_POINT    = DxeEntryPoint
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+#  VALID_ARCHITECTURES           = IA32 X64
+#
+
+[Sources]
+  UnitTestMain.c
+  BaseCryptLibUnitTests.c
+  TestBaseCryptLib.h
+  HashTests.c
+  HmacTests.c
+  BlockCipherTests.c
+  RsaTests.c
+  RsaPkcs7Tests.c
+  Pkcs5Pbkdf2Tests.c
+  AuthenticodeTests.c
+  TSTests.c
+  DhTests.c
+  RandTests.c
+  Pkcs7EkuTests.c
+  OaepEncryptTests.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  CryptoPkg/CryptoPkg.dec
+
+[LibraryClasses]
+  UefiApplicationEntryPoint
+  BaseLib
+  DebugLib
+  UnitTestLib
+  PrintLib
+  BaseCryptLib
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInstructions.txt b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInstructions.txt
new file mode 100644
index 000000000000..0ca6830516ea
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInstructions.txt
@@ -0,0 +1,92 @@
+--------------------------------------------------------------------------------
+File:           ChainCreationInstructions.txt
+
+Description:    This folder contains INI files that are required to generate
+                the following test cert chains. Certs will be copied onto the
+                file system AND MY store when they are generated by certreq.exe.
+
+Note that typically certreq.exe operates on INF files, but in this folder
+we use INI files so that our build system does not complain about INF's being
+in the tree, but not in the CryptoPkg.dsc file.
+
+To create your own certificates and signatures for testing, this file demonstrates
+how the test certificate chains and signatures were created.
+
+To create test signatures, run SignFirmwareWithEKUs.cmd (with SignTool.exe in
+your path).  You can then use your favorite BinaryToHex converter to convert
+the binary into a byte array that you can include in AllTestSignatures.h
+
+Copyright (C) Microsoft Corporation.  All Rights Reserved.
+--------------------------------------------------------------------------------
+Cert Chain:
+
+       ------------------------------------------
+      |                                          | // Root of trust. ECDSA P521 curve
+      |          TestEKUParsingRoot              | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
+      |                                          | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
+       ------------------------------------------
+                         ^
+                         |
+       ------------------------------------------
+      |                                          | // Issues subordinate CAs. ECC P384 curve.
+      |       TestEKUParsingPolicyCA             | // SHA 256 Key Usage:
+      |                                          | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
+       ------------------------------------------
+                         ^
+                         |
+       ------------------------------------------
+      |                                          | // Issues end-entity (leaf) signers. ECC P256 curve.
+      |        TestEKUParsingIssuingCA           | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
+      |                                          | // Enhanced Key Usage:
+       ------------------------------------------  // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
+                         ^
+                         |
+          --------------------------------------
+         /                                     /   // Leaf signer,  ECC P256 curve.
+        /      TestEKUParsingLeafSigner       /    // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
+       /                                     /     // Enhanced Key usages:
+       --------------------------------------      // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
+                                                   // 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID.
+
+
+
+
+---------------------------------------------------------------------------------
+
+
+--- files required ---
+
+TestEKUParsingRoot.ini               - This certificate is the root CA under which all CAs live.
+TestEKUParsingPolicyCA.ini           - This policy CA will issue subordinate CA's with EKU constraints.
+TestEKUParsingIssuingCA.ini          - CA to issue end-entity leafs.
+TestEKUParsingLeafSigner.ini         - End-Entity leaf signer.
+TestEKUParsingLeafSignerPid12345.ini - End-Entity, with EKU: 1.3.6.1.4.1.311.76.9.21.1.12345.
+TestEKUParsingNoEKUsInSigner.ini     - Leaf with no EKU's specified.
+TestEKUParsingLeafSignerPid1.ini     - Test with naming files ini, to get around build complaints.
+--- Commands to execute ---
+
+certreq.exe -new                                    TestEKUParsingRoot.ini               TestEKUParsingRoot.cer
+certreq.exe -new -q -cert "TestEKUParsingRoot"      TestEKUParsingPolicyCA.ini           TestEKUParsingPolicyCA.cer
+certreq.exe -new -q -cert "TestEKUParsingPolicyCA"  TestEKUParsingIssuingCA.ini          TestEKUParsingIssuingCA.cer
+certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSigner.ini         TestEKUParsingLeafSigner.cer
+certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSignerPid12345.ini TestEKUParsingLeafSignerPid12345.cer
+certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingNoEKUsInSigner.ini     TestEKUParsingNoEKUsInSigner.cer
+certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSignerPid1.ini     TestEKUParsingLeafSignerPid1.cer
+
+---------------------------------------------------------------------------------
+
+Then start mmc->Add certificates, Local Computer/open Personal/Certs and export the keys into the pfx files below.
+Note:  You should see a little key on the top left of each cert icon, which means you have the private key
+       for this cert.  If you don't see it something is wrong.  For each cert, right-click and do all tasks,
+       export.  Yes, Export the private key.  PCKS#12 format, include all certs in path if possible.
+
+       If we automated the call to certreq above, there is a PowerShell "PKI" cmdlet which has
+       an Export-PfxCertificate command.
+
+Passwords:  TestEKUParsingRoot.pfx               == TestEKUParsingRoot
+            TestEKUParsingPolicyCA.pfx           == TestEKUParsingPolicyCA
+            TestEKUParsingIssuingCA.pfx          == TestEKUParsingIssuingCA
+            TestEKUParsingLeafSigner.pfx         == TestEKUParsingLeafSigner
+            TestEKUParsingLeafSignerPid12345.pfx == TestEKUParsingLeafSignerPid12345
+            TestEKUParsingNoEKUsInSigner.pfx     == TestEKUParsingNoEKUsInSigner
+
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.cmd b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.cmd
new file mode 100644
index 000000000000..6d68afdab77d
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.cmd
@@ -0,0 +1,11 @@
+@ECHO OFF
+REM
+REM  Use this file to create test certificates.
+REM
+call certreq.exe -new                                    TestEKUParsingRoot.ini               TestEKUParsingRoot.cer
+call certreq.exe -new -q -cert "TestEKUParsingRoot"      TestEKUParsingPolicyCA.ini           TestEKUParsingPolicyCA.cer
+call certreq.exe -new -q -cert "TestEKUParsingPolicyCA"  TestEKUParsingIssuingCA.ini          TestEKUParsingIssuingCA.cer
+call certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSigner.ini         TestEKUParsingLeafSigner.cer
+call certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSignerPid12345.ini TestEKUParsingLeafSignerPid12345.cer
+call certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingNoEKUsInSigner.ini     TestEKUParsingNoEKUsInSigner.cer
+call certreq.exe -new -q -cert "TestEKUParsingIssuingCA" TestEKUParsingLeafSignerPid1.ini     TestEKUParsingLeafSignerPid1.cer
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWithEKUs.cmd b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWithEKUs.cmd
new file mode 100644
index 000000000000..ce03e33a7169
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWithEKUs.cmd
@@ -0,0 +1,76 @@
+@ECHO OFF
+REM   This script will use various certificates to sign blobs for testing purposes.
+REM
+REM
+REM   Our EKU test certificate chain:
+REM   ------------------------------------------
+REM   |                                          | // Root of trust. ECDSA P521 curve
+REM   |          TestEKUParsingRoot              | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
+REM   |                                          | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
+REM    ------------------------------------------
+REM                      ^
+REM                      |
+REM    ------------------------------------------
+REM   |                                          | // Issues subordinate CAs. ECC P384 curve.
+REM   |       TestEKUParsingPolicyCA             | // SHA 256 Key Usage:
+REM   |                                          | // CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
+REM    ------------------------------------------
+REM                      ^
+REM                      |
+REM    ------------------------------------------
+REM   |                                          | // Issues end-entity (leaf) signers. ECC P256 curve.
+REM   |        TestEKUParsingIssuingCA           | // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
+REM   |                                          | // Enhanced Key Usage:
+REM    ------------------------------------------  // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
+REM                      ^
+REM                      |
+REM       --------------------------------------
+REM      /     TestEKUParsingLeafSigner &&     /   // Leaf signer,  ECC P256 curve.
+REM     /    TestEKUParsingLeafSignerPid12345 /    // SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
+REM    /                                     /     // Enhanced Key usages:
+REM    --------------------------------------      // 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
+REM                                                // 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID.
+REM
+REM
+REM
+REM  Dev Note:  SignTool.exe must be in your path when running this script.
+
+del *.p7b
+ECHO -------------------------------------------------------------------
+ECHO Press any key 4 times to append time to the test blobs to sign.
+time >> TestSignWithOneEKUInLeafSigner.bin
+time >> TestSignWithTwoEKUsInLeafSignerPid1.bin
+time >> TestSignWithTwoEKUsInLeafSignerPid12345.bin
+time >> TestSignWithNoEKUsInLeafSigner.bin
+
+
+REM
+REM Create a signature with TestEKUParsingLeafSigner.cer which has one EKU in it,
+REM and add the Policy CA in the signature.
+REM
+call signtool.exe sign /fd sha256 /f TestEKUParsingLeafSigner.cer                           /p7 .  /u 1.3.6.1.4.1.311.76.9.21.1    /ac TestEKUParsingPolicyCA.cer /p7co 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug TestSignWithOneEKUInLeafSigner.bin
+
+REM
+REM Create a signature with two EKU's in the leaf signer.  (1.3.6.1.4.1.311.76.9.21.1, and 1.3.6.1.4.1.311.76.9.21.1.1)
+REM
+call signtool.exe sign /fd sha256 /f TestEKUParsingLeafSignerPid1.cer                           /p7 .  /u 1.3.6.1.4.1.311.76.9.21.1.1  /p7co 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug TestSignWithTwoEKUsInLeafSignerPid1.bin
+
+REM
+REM Create a signature with two EKUs in the leaf (1.3.6.1.4.1.311.76.9.21.1, and 1.3.6.1.4.1.311.76.9.21.1.12345)
+REM
+call signtool.exe sign /fd sha256 /f TestEKUParsingLeafSignerPid12345.cer                           /p7 .  /u 1.3.6.1.4.1.311.76.9.21.1.12345   /p7co 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug TestSignWithTwoEKUsInLeafSignerPid12345.bin
+
+
+REM
+REM Create a signature with a leaf that does not have any EKUs in the signture.
+REM
+call signtool.exe sign /fd sha256 /f TestEKUParsingNoEKUsInSigner.cer /p7 .  /p7co 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug TestSignWithNoEKUsInLeafSigner.bin
+
+REM
+REM Rename *.p7 to *.p7b
+REM
+rename *.p7 *.p7b
+ECHO ---------------------------------------------------------------------------
+ECHO Now you can use your favorite "Binary To Hex" converter to convert the
+ECHO signatures (P7B files) to byte arrays and add them to AllTestSignatures.h
+ECHO ---------------------------------------------------------------------------
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIssuingCA.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIssuingCA.ini
new file mode 100644
index 000000000000..8576783473e9
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIssuingCA.ini
@@ -0,0 +1,45 @@
+[Version]
+Signature="$Windows NT$
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; 2.5.29.19 == Basic Constraints for CA
+[Strings]
+szOID_BASIC_CONSTRAINTS2 = "2.5.29.19"
+
+[EnhancedKeyUsageExtension]
+OID = 1.3.6.1.4.1.311.76.9.21.1
+
+[NewRequest]
+Subject = "CN=TestEKUParsingIssuingCA"
+Exportable = true
+KeyLength = 256
+HashAlgorithm = sha256
+KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE"
+KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
+MachineKeySet = True
+RequestType = cert
+ValidityPeriodUnits = 20
+ValidityPeriod = Years
+ProviderName = "Microsoft Software Key Storage Provider"
+KeyAlgorithm = "ECDSA_P256"
+
+
+[Extensions]
+%szOID_BASIC_CONSTRAINTS2% = "{text}"
+    _continue_ = "ca=True"
+
+Critical=%szOID_BASIC_CONSTRAINTS2%
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; This extension is so the this CA is only allowed to
+; issue end-entity certs.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+[BasicConstraintsExtension]
+PathLength=0
+
+;
+; Surface Firmware Signing EKU
+;
+[Extensions]
+    2.5.29.37 = "{text}"
+    _continue_ = "1.3.6.1.4.1.311.76.9.21.1"
+
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSigner.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSigner.ini
new file mode 100644
index 000000000000..f501537343ca
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSigner.ini
@@ -0,0 +1,25 @@
+[Version]
+Signature="$Windows NT$
+
+[EnhancedKeyUsageExtension]
+OID = 1.3.6.1.4.1.311.76.9.21.1
+
+[NewRequest]
+Subject = "CN=TestEKUParsingLeafSigner"
+Exportable = true
+KeyLength = 256
+HashAlgorithm = sha256
+KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE"
+KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
+MachineKeySet = True
+RequestType = cert
+ValidityPeriodUnits = 20
+ValidityPeriod = Years
+ProviderName = "Microsoft Software Key Storage Provider"
+KeyAlgorithm = "ECDSA_P256"
+
+;
+; Surface test firwmare signing EKU
+;
+[Extensions]
+    _continue_ = "1.3.6.1.4.1.311.76.9.21.1"
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid1.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid1.ini
new file mode 100644
index 000000000000..35aa78c493b0
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid1.ini
@@ -0,0 +1,24 @@
+[Version]
+Signature="$Windows NT$
+
+[EnhancedKeyUsageExtension]
+OID = 1.3.6.1.4.1.311.76.9.21.1
+OID = 1.3.6.1.4.1.311.76.9.21.1.1
+
+[NewRequest]
+Subject = "CN=TestEKUParsingLeafSignerPid1"
+Exportable = true
+KeyLength = 2048
+HashAlgorithm = sha256
+KeySpec = AT_SIGNATURE
+KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_DIGITAL_SIGNATURE_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE"
+KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
+MachineKeySet = True
+RequestType = cert
+ValidityPeriodUnits = 5
+ValidityPeriod = Years
+
+[Extensions]
+    2.5.29.37 = "{text}"
+    _continue_ = "1.3.6.1.4.1.311.76.9.21.1,"
+    _continue_ = "1.3.6.1.4.1.311.76.9.21.1.1"
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini
new file mode 100644
index 000000000000..67c5741f4d26
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLeafSignerPid12345.ini
@@ -0,0 +1,27 @@
+[Version]
+Signature="$Windows NT$
+
+[EnhancedKeyUsageExtension]
+OID = 1.3.6.1.4.1.311.76.9.21.1
+OID = 1.3.6.1.4.1.311.76.9.21.1.12345
+
+[NewRequest]
+Subject = "CN=TestEKUParsingLeafSignerPid12345"
+Exportable = true
+KeyLength = 2048
+HashAlgorithm = sha256
+KeySpec = AT_SIGNATURE
+KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_DIGITAL_SIGNATURE_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE"
+KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
+MachineKeySet = True
+RequestType = cert
+ValidityPeriodUnits = 5
+ValidityPeriod = Years
+
+[Extensions]
+    2.5.29.37 = "{text}"
+    _continue_ = "1.3.6.1.4.1.311.76.9.21.1,"
+    _continue_ = "1.3.6.1.4.1.311.76.9.21.1.12345"
+
+
+
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNoEKUsInSigner.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNoEKUsInSigner.ini
new file mode 100644
index 000000000000..60743b02a94b
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingNoEKUsInSigner.ini
@@ -0,0 +1,16 @@
+[Version]
+Signature="$Windows NT$
+
+
+[NewRequest]
+Subject = "CN=TestEKUParsingNoEKUsInSigner"
+Exportable = true
+KeyLength = 2048
+HashAlgorithm = sha256
+KeySpec = AT_SIGNATURE
+KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_DIGITAL_SIGNATURE_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE"
+KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
+MachineKeySet = True
+RequestType = cert
+ValidityPeriodUnits = 20
+ValidityPeriod = Years
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPolicyCA.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPolicyCA.ini
new file mode 100644
index 000000000000..2ccda66596bc
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPolicyCA.ini
@@ -0,0 +1,28 @@
+[Version]
+Signature="$Windows NT$
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; 2.5.29.19 == Basic Constraints for CA
+[Strings]
+szOID_BASIC_CONSTRAINTS2 = "2.5.29.19"
+
+[NewRequest]
+Subject = "CN=TestEKUParsingPolicyCA"
+Exportable = true
+KeyLength = 384
+HashAlgorithm = sha256
+KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE"
+KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
+MachineKeySet = True
+RequestType = cert
+ValidityPeriodUnits = 20
+ValidityPeriod = Years
+ProviderName = "Microsoft Software Key Storage Provider"
+KeyAlgorithm = "ECDSA_P384"
+
+
+[Extensions]
+%szOID_BASIC_CONSTRAINTS2% = "{text}"
+    _continue_ = "ca=True"
+
+Critical=%szOID_BASIC_CONSTRAINTS2%
+
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRoot.ini b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRoot.ini
new file mode 100644
index 000000000000..d8cd7d1f82a3
--- /dev/null
+++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRoot.ini
@@ -0,0 +1,28 @@
+[Version]
+Signature="$Windows NT$
+
+[Strings]
+szOID_BASIC_CONSTRAINTS2 = "2.5.29.19"
+
+[NewRequest]
+Subject = "CN=TestEKUParsingRoot"
+Exportable = true
+KeyLength = 521
+HashAlgorithm = sha256
+KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE | CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE"
+KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
+MachineKeySet = True
+RequestType = cert
+ValidityPeriodUnits = 30
+ValidityPeriod = Years
+ProviderName = "Microsoft Software Key Storage Provider"
+KeyAlgorithm = ECDSA_P521
+
+
+
+
+[Extensions]
+%szOID_BASIC_CONSTRAINTS2% = "{text}"
+    _continue_ = "ca=True"
+
+Critical=%szOID_BASIC_CONSTRAINTS2%
-- 
2.27.0.windows.1


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

* [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg
  2020-07-14 18:23 [PATCH v3 0/3] Add Unit Tests for BaseCryptLib to CryptoPkg matthewfcarlson
  2020-07-14 18:23 ` [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib matthewfcarlson
  2020-07-14 18:23 ` [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) matthewfcarlson
@ 2020-07-14 18:23 ` matthewfcarlson
  2020-07-15  2:39   ` Michael D Kinney
  2 siblings, 1 reply; 10+ messages in thread
From: matthewfcarlson @ 2020-07-14 18:23 UTC (permalink / raw)
  To: devel; +Cc: Sean Brogan, Bret Barkelew, Michael D Kinney, Liming Gao

From: Matthew Carlson <macarl@microsoft.com>

Turns on Host Based Unit Tests for CryptoPkg by enabling the target
NOOPT in the CI pipeline.

Cc: Sean Brogan <sean.brogan@microsoft.com>
Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>

Signed-off-by: Matthew Carlson <matthewfcarlson@gmail.com>
---
 .azurepipelines/templates/pr-gate-build-job.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.azurepipelines/templates/pr-gate-build-job.yml b/.azurepipelines/templates/pr-gate-build-job.yml
index a9f89aa68451..e84ba80030b1 100644
--- a/.azurepipelines/templates/pr-gate-build-job.yml
+++ b/.azurepipelines/templates/pr-gate-build-job.yml
@@ -40,7 +40,7 @@ jobs:
         Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT'
       TARGET_CRYPTO:
         Build.Pkgs: 'CryptoPkg'
-        Build.Targets: 'DEBUG,RELEASE,NO-TARGET'
+        Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT'
       TARGET_SECURITY:
         Build.Pkgs: 'SecurityPkg'
         Build.Targets: 'DEBUG,RELEASE,NO-TARGET'
-- 
2.27.0.windows.1


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

* Re: [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib
  2020-07-14 18:23 ` [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib matthewfcarlson
@ 2020-07-15  2:38   ` Michael D Kinney
  0 siblings, 0 replies; 10+ messages in thread
From: Michael D Kinney @ 2020-07-15  2:38 UTC (permalink / raw)
  To: matthewfcarlson@gmail.com, devel@edk2.groups.io,
	Kinney, Michael D
  Cc: Sean Brogan, Bret Barkelew

Matt,

Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com> 

Mike

> -----Original Message-----
> From: matthewfcarlson@gmail.com
> <matthewfcarlson@gmail.com>
> Sent: Tuesday, July 14, 2020 11:23 AM
> To: devel@edk2.groups.io
> Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Sean
> Brogan <sean.brogan@microsoft.com>; Bret Barkelew
> <Bret.Barkelew@microsoft.com>
> Subject: [PATCH v3 1/3] UnitTestFrameworkPkg :
> BaseTimerLibPosix: Adds a host-based timer Lib
> 
> From: Matthew Carlson <macarl@microsoft.com>
> 
> This adds a host based BaseTimerLib that won't assert.
> 
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Cc: Sean Brogan <sean.brogan@microsoft.com>
> Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
> Signed-off-by: Matthew Carlson
> <matthewfcarlson@gmail.com>
> ---
> 
> UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/Tim
> erLibPosix.c       | 132 ++++++++++++++++++++
> 
> UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/Bas
> eTimerLibPosix.inf |  33 +++++
> 
> UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/Bas
> eTimerLibPosix.uni |  14 +++
> 
> UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest.d
> sc                 |   1 +
>  UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc
> |   1 +
>  5 files changed, 181 insertions(+)
> 
> diff --git
> a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/T
> imerLibPosix.c
> b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/T
> imerLibPosix.c
> new file mode 100644
> index 000000000000..3c1394e3b21b
> --- /dev/null
> +++
> b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/T
> imerLibPosix.c
> @@ -0,0 +1,132 @@
> +/** @file
> 
> +  A semi-functional instance of the Timer Library.
> 
> +
> 
> +  Copyright (c) Microsoft Corporation.
> 
> +
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include <Base.h>
> 
> +#include <Library/TimerLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +#include <stdio.h>
> 
> +#include <stdlib.h>
> 
> +#include <time.h>
> 
> +
> 
> +/**
> 
> +  Stalls the CPU for at least the given number of
> microseconds.
> 
> +
> 
> +  @param  MicroSeconds  The minimum number of
> microseconds to delay.
> 
> +  @return The value of MicroSeconds inputted.
> 
> +
> 
> +**/
> 
> +UINTN
> 
> +EFIAPI
> 
> +MicroSecondDelay (
> 
> +  IN      UINTN                     MicroSeconds
> 
> +  )
> 
> +{
> 
> +  // Since this is a host based test, we don't actually
> want to stall
> 
> +  return MicroSeconds;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Stalls the CPU for at least the given number of
> nanoseconds.
> 
> +
> 
> +  @param  NanoSeconds The minimum number of nanoseconds
> to delay.
> 
> +  @return The value of NanoSeconds inputted.
> 
> +
> 
> +**/
> 
> +UINTN
> 
> +EFIAPI
> 
> +NanoSecondDelay (
> 
> +  IN      UINTN                     NanoSeconds
> 
> +  )
> 
> +{
> 
> +  // Since this is a host based test, we don't actually
> want to stall
> 
> +  return NanoSeconds;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Retrieves the current value of a 64-bit free running
> performance counter.
> 
> +
> 
> +  The counter can either count up by 1 or count down by
> 1. If the physical
> 
> +  performance counter counts by a larger increment,
> then the counter values
> 
> +  must be translated. The properties of the counter can
> be retrieved from
> 
> +  GetPerformanceCounterProperties().
> 
> +
> 
> +  @return The current value of the free running
> performance counter.
> 
> +
> 
> +**/
> 
> +UINT64
> 
> +EFIAPI
> 
> +GetPerformanceCounter (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  struct timespec ts;
> 
> +  timespec_get(&ts, TIME_UTC);
> 
> +  // Return the current number of nanoseconds on the
> clock
> 
> +  return ts.tv_nsec;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Retrieves the 64-bit frequency in Hz and the range of
> performance counter
> 
> +  values.
> 
> +
> 
> +  If StartValue is not NULL, then the value that the
> performance counter starts
> 
> +  with immediately after is it rolls over is returned
> in StartValue. If
> 
> +  EndValue is not NULL, then the value that the
> performance counter end with
> 
> +  immediately before it rolls over is returned in
> EndValue. The 64-bit
> 
> +  frequency of the performance counter in Hz is always
> returned. If StartValue
> 
> +  is less than EndValue, then the performance counter
> counts up. If StartValue
> 
> +  is greater than EndValue, then the performance
> counter counts down. For
> 
> +  example, a 64-bit free running counter that counts up
> would have a StartValue
> 
> +  of 0 and an EndValue of 0xFFFFFFFFFFFFFFFF. A 24-bit
> free running counter
> 
> +  that counts down would have a StartValue of 0xFFFFFF
> and an EndValue of 0.
> 
> +
> 
> +  @param  StartValue  The value the performance counter
> starts with when it
> 
> +                      rolls over.
> 
> +  @param  EndValue    The value that the performance
> counter ends with before
> 
> +                      it rolls over.
> 
> +
> 
> +  @return The frequency in Hz.
> 
> +
> 
> +**/
> 
> +UINT64
> 
> +EFIAPI
> 
> +GetPerformanceCounterProperties (
> 
> +  OUT      UINT64                    *StartValue,
> OPTIONAL
> 
> +  OUT      UINT64                    *EndValue
> OPTIONAL
> 
> +  )
> 
> +{
> 
> +  if ( EndValue != NULL ) {
> 
> +    *EndValue = MAX_UINT64;
> 
> +  }
> 
> +  if ( StartValue != NULL ) {
> 
> +    *StartValue = 0;
> 
> +  }
> 
> +  // Return the number of nanoseconds in a second
> 
> +  return 1000000000;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Converts elapsed ticks of performance counter to time
> in nanoseconds.
> 
> +
> 
> +  This function converts the elapsed ticks of running
> performance counter to
> 
> +  time value in unit of nanoseconds.
> 
> +
> 
> +  @param  Ticks     The number of elapsed ticks of
> running performance counter.
> 
> +
> 
> +  @return The elapsed time in nanoseconds.
> 
> +
> 
> +**/
> 
> +UINT64
> 
> +EFIAPI
> 
> +GetTimeInNanoSecond (
> 
> +  IN      UINT64                     Ticks
> 
> +  )
> 
> +{
> 
> +  return Ticks;
> 
> +}
> 
> diff --git
> a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/B
> aseTimerLibPosix.inf
> b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/B
> aseTimerLibPosix.inf
> new file mode 100644
> index 000000000000..797f04bb125b
> --- /dev/null
> +++
> b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/B
> aseTimerLibPosix.inf
> @@ -0,0 +1,33 @@
> +## @file
> 
> +#  An instance of Timer Library for posix compliant
> hosts.
> 
> +#
> 
> +#  A semi-functional instance of the Timer Library that
> can be used for
> 
> +#  host based testing as a functional timer library
> instance.
> 
> +#
> 
> +#  Copyright (c) Microsoft Corporation.
> 
> +#
> 
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION                    = 0x00010005
> 
> +  BASE_NAME                      = BaseTimerLibPosix
> 
> +  MODULE_UNI_FILE                =
> BaseTimerLibPosix.uni
> 
> +  FILE_GUID                      = a2a413b8-43c3-40cc-
> a298-be7a214d3564
> 
> +  MODULE_TYPE                    = BASE
> 
> +  VERSION_STRING                 = 1.0
> 
> +  LIBRARY_CLASS                  =
> TimerLib|HOST_APPLICATION
> 
> +#
> 
> +#  VALID_ARCHITECTURES           = HOST
> 
> +#
> 
> +
> 
> +[Sources]
> 
> +  TimerLibPosix.c
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +
> 
> +[LibraryClasses]
> 
> +  DebugLib
> 
> diff --git
> a/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/B
> aseTimerLibPosix.uni
> b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/B
> aseTimerLibPosix.uni
> new file mode 100644
> index 000000000000..a6859a0fc88a
> --- /dev/null
> +++
> b/UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/B
> aseTimerLibPosix.uni
> @@ -0,0 +1,14 @@
> +// @file
> 
> +// An instance of Timer Library for posix compliant
> hosts.
> 
> +//
> 
> +// A semi-functional instance of the Timer Library that
> can be used
> 
> +// for host based unit tests on posix compliant
> machines.
> 
> +//
> 
> +// Copyright (c) Microsoft Corporation.
> 
> +//
> 
> +// SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +//
> 
> +
> 
> +#string STR_MODULE_ABSTRACT             #language en-US
> "Host instance of Timer Library"
> 
> +
> 
> +#string STR_MODULE_DESCRIPTION          #language en-US
> "An instance of the Timer Library that can be used for
> host based unit tests."
> 
> diff --git
> a/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest
> .dsc
> b/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest
> .dsc
> index 701e7299d767..f82b3b7a323e 100644
> ---
> a/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest
> .dsc
> +++
> b/UnitTestFrameworkPkg/Test/UnitTestFrameworkPkgHostTest
> .dsc
> @@ -30,4 +30,5 @@
>    UnitTestFrameworkPkg/Library/CmockaLib/CmockaLib.inf
> 
> 
> UnitTestFrameworkPkg/Library/Posix/DebugLibPosix/DebugLi
> bPosix.inf
> 
> 
> UnitTestFrameworkPkg/Library/Posix/MemoryAllocationLibPo
> six/MemoryAllocationLibPosix.inf
> 
> +
> UnitTestFrameworkPkg/Library/Posix/BaseTimerLibPosix/Bas
> eTimerLibPosix.inf
> 
> 
> UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLibCmoc
> ka.inf
> 
> diff --git
> a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc
> b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc
> index e954968efc52..76f0a719ded3 100644
> ---
> a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc
> +++
> b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc
> @@ -13,6 +13,7 @@
> 
> UnitTestLib|UnitTestFrameworkPkg/Library/UnitTestLib/Uni
> tTestLibCmocka.inf
> 
> 
> DebugLib|UnitTestFrameworkPkg/Library/Posix/DebugLibPosi
> x/DebugLibPosix.inf
> 
> 
> MemoryAllocationLib|UnitTestFrameworkPkg/Library/Posix/M
> emoryAllocationLibPosix/MemoryAllocationLibPosix.inf
> 
> +
> TimerLib|UnitTestFrameworkPkg/Library/Posix/BaseTimerLib
> Posix/BaseTimerLibPosix.inf
> 
> 
> 
>  [BuildOptions]
> 
>    GCC:*_*_*_CC_FLAGS = -fno-pie
> 
> --
> 2.27.0.windows.1


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

* Re: [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg
  2020-07-14 18:23 ` [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg matthewfcarlson
@ 2020-07-15  2:39   ` Michael D Kinney
  0 siblings, 0 replies; 10+ messages in thread
From: Michael D Kinney @ 2020-07-15  2:39 UTC (permalink / raw)
  To: matthewfcarlson@gmail.com, devel@edk2.groups.io,
	Kinney, Michael D
  Cc: Sean Brogan, Bret Barkelew, Gao, Liming

Matt,

Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com> 

Mike

> -----Original Message-----
> From: matthewfcarlson@gmail.com
> <matthewfcarlson@gmail.com>
> Sent: Tuesday, July 14, 2020 11:23 AM
> To: devel@edk2.groups.io
> Cc: Sean Brogan <sean.brogan@microsoft.com>; Bret
> Barkelew <Bret.Barkelew@microsoft.com>; Kinney, Michael
> D <michael.d.kinney@intel.com>; Gao, Liming
> <liming.gao@intel.com>
> Subject: [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn
> on HBUT for CryptoPkg
> 
> From: Matthew Carlson <macarl@microsoft.com>
> 
> Turns on Host Based Unit Tests for CryptoPkg by enabling
> the target
> NOOPT in the CI pipeline.
> 
> Cc: Sean Brogan <sean.brogan@microsoft.com>
> Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> 
> Signed-off-by: Matthew Carlson
> <matthewfcarlson@gmail.com>
> ---
>  .azurepipelines/templates/pr-gate-build-job.yml | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/.azurepipelines/templates/pr-gate-build-
> job.yml b/.azurepipelines/templates/pr-gate-build-
> job.yml
> index a9f89aa68451..e84ba80030b1 100644
> --- a/.azurepipelines/templates/pr-gate-build-job.yml
> +++ b/.azurepipelines/templates/pr-gate-build-job.yml
> @@ -40,7 +40,7 @@ jobs:
>          Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT'
> 
>        TARGET_CRYPTO:
> 
>          Build.Pkgs: 'CryptoPkg'
> 
> -        Build.Targets: 'DEBUG,RELEASE,NO-TARGET'
> 
> +        Build.Targets: 'DEBUG,RELEASE,NO-TARGET,NOOPT'
> 
>        TARGET_SECURITY:
> 
>          Build.Pkgs: 'SecurityPkg'
> 
>          Build.Targets: 'DEBUG,RELEASE,NO-TARGET'
> 
> --
> 2.27.0.windows.1


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

* Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)
  2020-07-14 18:23 ` [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) matthewfcarlson
@ 2020-07-15  2:52   ` Michael D Kinney
  2020-07-15 18:16     ` matthewfcarlson
  0 siblings, 1 reply; 10+ messages in thread
From: Michael D Kinney @ 2020-07-15  2:52 UTC (permalink / raw)
  To: devel@edk2.groups.io, matthewfcarlson@gmail.com,
	Kinney, Michael D
  Cc: Wang, Jian J, Lu, XiaoyuX

Hi Matt,

I think the BaseCryptLib unit tests may need some more work.

1) The DSC file for host based tests is in the wrong directory.
   It should be in CryptoPkg/Test to match the MdePkg, MdeModulePkg
   and UnitTestFrameworkPkg location.

2) CryptoPkg/CryptoPkg.dsc includes a reference to the host based
   library UnitTestHostBaseCryptLib.inf.  This should only be 
   listed in the host based DSC file.

3) CryptoPkg\Library\BaseCryptLib\UnitTestHostBaseCryptLib.inf
   This file appears to only be for host based tests, but it 
   lists compatibility with DXE_DRIVER DXE_CORE UEFI_APPLICATION UEFI_DRIVER
   and does not list HOST_APPLICATION as expected.

4) Why do we need a new lib instance of the BaseCryptLib for
   host based unit testing.  I would think we would want to perform
   unit tests on the BaseCryptLib instances that would actually be 
   used in FW components.  Can we update the unit tests to test
   the services provided in the Base, Pei, Runtime, and Smm 
   instances of the BaseCryptLib?

5) Why do we need a host based specific version of the CrtWrapper, 
   UnitTestHostCrtWrapper.c? 

6) The file CryptoPkg/Test/UnitTest/Librray/BaseCryptLib/TestEKUCerts/
   ChainCreationInstructions.txt makes reference to a bintohex tool
   and putting the results in a file called AllTestSignatures.h.
   But I do not see this file in the patch.  Are these instructions
   out of date?

Thanks,

Mike


> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On
> Behalf Of matthewfcarlson@gmail.com
> Sent: Tuesday, July 14, 2020 11:23 AM
> To: devel@edk2.groups.io
> Cc: Wang, Jian J <jian.j.wang@intel.com>; Lu, XiaoyuX
> <xiaoyux.lu@intel.com>
> Subject: [edk2-devel] [PATCH v3 2/3] CryptoPkg:
> BaseCryptLib: Add unit tests (Host and Shell based)
> 
> From: Matthew Carlson <macarl@microsoft.com>
> 
> This adds a new INF for BaseCryptLib suitable for
> host based environments. It adds a host based unit test
> for
> BaseCryptLib that can also be built as a shell based
> Unit Test.
> 
> Cc: Jian J Wang <jian.j.wang@intel.com>
> Cc: Xiaoyu Lu <xiaoyux.lu@intel.com>
> Signed-off-by: Matthew Carlson
> <matthewfcarlson@gmail.com>
> ---
> 
> CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrtWr
> apper.c                                |   93 ++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Authenticod
> eTests.c                               | 1002
> ++++++++++++++++++++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLi
> bUnitTests.c                           |   66 ++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCipher
> Tests.c                                |  293 ++++++
>  CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c
> |  106 +++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests.c
> |  197 ++++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests.c
> |  184 ++++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncrypt
> Tests.c                                |  308 ++++++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkdf2
> Tests.c                                |   71 ++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTes
> ts.c                                   |  524 ++++++++++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests.c
> |   51 +
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7Tes
> ts.c                                   |  415 ++++++++
>  CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.c
> |  310 ++++++
>  CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c
> |  335 +++++++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMai
> n.c                                    |   81 ++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestMai
> nBCOP.c                                |   58 ++
>  CryptoPkg/CryptoPkg.ci.yaml
> |    4 +
>  CryptoPkg/CryptoPkg.dsc
> |   26 +
> 
> CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.
> inf                                    |   90 ++
>  CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc
> |   35 +
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuTes
> tSignatures.h                          |  789
> +++++++++++++++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCry
> ptLib.h                                |  121 +++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCry
> ptLibHost.inf                          |   46 +
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCry
> ptLibUefiShell.inf                     |   49 +
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert
> s/ChainCreationInstructions.txt        |   92 ++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert
> s/CreateTestCerts.cmd                  |   11 +
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert
> s/SignFirmwareWithEKUs.cmd             |   76 ++
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert
> s/TestEKUParsingIssuingCA.ini          |   45 +
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert
> s/TestEKUParsingLeafSigner.ini         |   25 +
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert
> s/TestEKUParsingLeafSignerPid1.ini     |   24 +
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert
> s/TestEKUParsingLeafSignerPid12345.ini |   27 +
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert
> s/TestEKUParsingNoEKUsInSigner.ini     |   16 +
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert
> s/TestEKUParsingPolicyCA.ini           |   28 +
> 
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCert
> s/TestEKUParsingRoot.ini               |   28 +
>  34 files changed, 5626 insertions(+)
> 
> diff --git
> a/CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrt
> Wrapper.c
> b/CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrt
> Wrapper.c
> new file mode 100644
> index 000000000000..a9c288e8f2be
> --- /dev/null
> +++
> b/CryptoPkg/Library/BaseCryptLib/SysCall/UnitTestHostCrt
> Wrapper.c
> @@ -0,0 +1,93 @@
> +/** @file
> 
> +  C Run-Time Libraries (CRT) Wrapper Implementation for
> OpenSSL-based
> 
> +  Cryptographic Library.
> 
> +
> 
> +Copyright (c) 2009 - 2017, Intel Corporation. All
> rights reserved.<BR>
> 
> +Copyright (c) Microsoft Corporation
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include <stdio.h>
> 
> +
> 
> +#include <Base.h>
> 
> +#include <Library/DebugLib.h>
> 
> +
> 
> +/* Convert character to lowercase */
> 
> +int tolower (int c)
> 
> +{
> 
> +  if (('A' <= (c)) && ((c) <= 'Z')) {
> 
> +    return (c - ('A' - 'a'));
> 
> +  }
> 
> +  return (c);
> 
> +}
> 
> +
> 
> +/* Compare first n bytes of string s1 with string s2,
> ignoring case */
> 
> +int strncasecmp (const char *s1, const char *s2, size_t
> n)
> 
> +{
> 
> +  int Val;
> 
> +
> 
> +  ASSERT(s1 != NULL);
> 
> +  ASSERT(s2 != NULL);
> 
> +
> 
> +  if (n != 0) {
> 
> +    do {
> 
> +      Val = tolower(*s1) - tolower(*s2);
> 
> +      if (Val != 0) {
> 
> +        return Val;
> 
> +      }
> 
> +      ++s1;
> 
> +      ++s2;
> 
> +      if (*s1 == '\0') {
> 
> +        break;
> 
> +      }
> 
> +    } while (--n != 0);
> 
> +  }
> 
> +  return 0;
> 
> +}
> 
> +
> 
> +/* Read formatted data from a string */
> 
> +int sscanf (const char *buffer, const char *format,
> ...)
> 
> +{
> 
> +  //
> 
> +  // Null sscanf() function implementation to satisfy
> the linker, since
> 
> +  // no direct functionality logic dependency in
> present UEFI cases.
> 
> +  //
> 
> +  return 0;
> 
> +}
> 
> +
> 
> +//
> 
> +//  -- Dummy OpenSSL Support Routines --
> 
> +//
> 
> +
> 
> +int BIO_printf (void *bio, const char *format, ...)
> 
> +{
> 
> +  return 0;
> 
> +}
> 
> +
> 
> +int BIO_snprintf(char *buf, size_t n, const char
> *format, ...)
> 
> +{
> 
> +  return 0;
> 
> +}
> 
> +
> 
> +uid_t getuid (void)
> 
> +{
> 
> +  return 0;
> 
> +}
> 
> +
> 
> +uid_t geteuid (void)
> 
> +{
> 
> +  return 0;
> 
> +}
> 
> +
> 
> +gid_t getgid (void)
> 
> +{
> 
> +  return 0;
> 
> +}
> 
> +
> 
> +gid_t getegid (void)
> 
> +{
> 
> +  return 0;
> 
> +}
> 
> +
> 
> +int errno = 0;
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Authentic
> odeTests.c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Authentic
> odeTests.c
> new file mode 100644
> index 000000000000..8935f289d87a
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Authentic
> odeTests.c
> @@ -0,0 +1,1002 @@
> +/** @file
> 
> +  Sample Implementation for Microsoft Authenticode
> Verification.
> 
> +
> 
> +Copyright (c) 2009 - 2011, Intel Corporation. All
> rights reserved.<BR>
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +//
> 
> +// Sample PE/COFF Image Hash Value (Digested by SHA-1).
> 
> +// This value should be calculated following MSFT's
> Authenticode Specification
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 PeSha1Hash[] = {
> 
> +  0x44, 0xFD, 0x4F, 0xA9, 0x17, 0xEE, 0xAC, 0xCF, 0x1F,
> 0x0B, 0xE3, 0xA1, 0x4D, 0x5B, 0xA6, 0x61,
> 
> +  0x82, 0x97, 0xC4, 0xB6
> 
> +  };
> 
> +
> 
> +//
> 
> +// Sample PE/COFF Image Hash Value (Digested by SHA-
> 256).
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 PeSha256Hash[] = {
> 
> +  0x61, 0x82, 0xB7, 0xF8, 0x8C, 0xFF, 0xC2, 0xEB, 0x79,
> 0x6E, 0x9D, 0xA9, 0xDD, 0x39, 0x52, 0xDD,
> 
> +  0x36, 0xDD, 0xF1, 0x43, 0x27, 0x58, 0x8C, 0xA7, 0xCC,
> 0xAE, 0xDE, 0xDD, 0x3C, 0x02, 0x12, 0x49
> 
> +  };
> 
> +
> 
> +//
> 
> +// Sample Authenticode Data with SHA-1 hash algorithm.
> 
> +// This data should be retrieved from signed PE/COFF
> image according to SECURITY
> 
> +// directory in PE/COFF Header.
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED UINT8
> AuthenticodeWithSha1[] = {
> 
> +  0x30, 0x82, 0x1C, 0x43, 0x06, 0x09, 0x2A, 0x86, 0x48,
> 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x02, 0xA0,
> 
> +  0x82, 0x1C, 0x34, 0x30, 0x82, 0x1C, 0x30, 0x02, 0x01,
> 0x01, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x05,
> 
> +  0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x30, 0x68,
> 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01,
> 
> +  0x82, 0x37, 0x02, 0x01, 0x04, 0xA0, 0x5A, 0x30, 0x58,
> 0x30, 0x33, 0x06, 0x0A, 0x2B, 0x06, 0x01,
> 
> +  0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0F, 0x30, 0x25,
> 0x03, 0x01, 0x00, 0xA0, 0x20, 0xA2, 0x1E,
> 
> +  0x80, 0x1C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00,
> 0x4F, 0x00, 0x62, 0x00, 0x73, 0x00, 0x6F,
> 
> +  0x00, 0x6C, 0x00, 0x65, 0x00, 0x74, 0x00, 0x65, 0x00,
> 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x30, 0x21,
> 
> +  0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A,
> 0x05, 0x00, 0x04, 0x14, 0x44, 0xFD, 0x4F,
> 
> +  0xA9, 0x17, 0xEE, 0xAC, 0xCF, 0x1F, 0x0B, 0xE3, 0xA1,
> 0x4D, 0x5B, 0xA6, 0x61, 0x82, 0x97, 0xC4,
> 
> +  0xB6, 0xA0, 0x82, 0x17, 0x18, 0x30, 0x82, 0x04, 0xCA,
> 0x30, 0x82, 0x03, 0xB2, 0xA0, 0x03, 0x02,
> 
> +  0x01, 0x02, 0x02, 0x0A, 0x61, 0x03, 0xDC, 0xF6, 0x00,
> 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30, 0x0D,
> 
> +  0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
> 0x01, 0x05, 0x05, 0x00, 0x30, 0x77, 0x31,
> 
> +  0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
> 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11,
> 
> +  0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61,
> 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F,
> 
> +  0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04,
> 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D,
> 
> +  0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03,
> 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69,
> 
> +  0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43,
> 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74,
> 
> +  0x69, 0x6F, 0x6E, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03,
> 0x55, 0x04, 0x03, 0x13, 0x18, 0x4D, 0x69,
> 
> +  0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x54,
> 0x69, 0x6D, 0x65, 0x2D, 0x53, 0x74, 0x61,
> 
> +  0x6D, 0x70, 0x20, 0x50, 0x43, 0x41, 0x30, 0x1E, 0x17,
> 0x0D, 0x30, 0x38, 0x30, 0x37, 0x32, 0x35,
> 
> +  0x31, 0x39, 0x31, 0x32, 0x35, 0x30, 0x5A, 0x17, 0x0D,
> 0x31, 0x31, 0x30, 0x37, 0x32, 0x35, 0x31,
> 
> +  0x39, 0x32, 0x32, 0x35, 0x30, 0x5A, 0x30, 0x81, 0xB3,
> 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55,
> 
> +  0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30,
> 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13,
> 
> +  0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74,
> 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06,
> 
> +  0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64,
> 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30,
> 
> +  0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D,
> 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66,
> 
> +  0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61,
> 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x0D, 0x30,
> 
> +  0x0B, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x04, 0x4D,
> 0x4F, 0x50, 0x52, 0x31, 0x27, 0x30, 0x25,
> 
> +  0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x1E, 0x6E, 0x43,
> 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x44,
> 
> +  0x53, 0x45, 0x20, 0x45, 0x53, 0x4E, 0x3A, 0x31, 0x35,
> 0x39, 0x43, 0x2D, 0x41, 0x33, 0x46, 0x37,
> 
> +  0x2D, 0x32, 0x35, 0x37, 0x30, 0x31, 0x25, 0x30, 0x23,
> 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1C,
> 
> +  0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74,
> 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, 0x53,
> 
> +  0x74, 0x61, 0x6D, 0x70, 0x20, 0x53, 0x65, 0x72, 0x76,
> 0x69, 0x63, 0x65, 0x30, 0x82, 0x01, 0x22,
> 
> +  0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7,
> 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03,
> 
> +  0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02,
> 0x82, 0x01, 0x01, 0x00, 0xC0, 0xED, 0x81,
> 
> +  0x14, 0xA1, 0x5E, 0x77, 0xC0, 0x5B, 0xF4, 0x76, 0x89,
> 0x62, 0xFA, 0xAD, 0x7C, 0x68, 0x14, 0xB4,
> 
> +  0xF7, 0xBD, 0x35, 0xD8, 0x13, 0x79, 0x5A, 0x17, 0xCA,
> 0xD9, 0x6C, 0x51, 0x45, 0x62, 0x26, 0x7A,
> 
> +  0x2F, 0x1F, 0xD8, 0xEA, 0xC1, 0x6E, 0x01, 0x17, 0xF9,
> 0xC3, 0xA6, 0x1F, 0x67, 0xDB, 0x51, 0xB0,
> 
> +  0x2C, 0xDE, 0x8A, 0x17, 0xED, 0xFF, 0x20, 0xAD, 0x34,
> 0xEA, 0x98, 0xFB, 0xA5, 0xD6, 0x2A, 0xD2,
> 
> +  0xF1, 0x44, 0x27, 0x07, 0x5A, 0x2D, 0x3A, 0x93, 0xFF,
> 0x56, 0x53, 0xB0, 0xC8, 0xF5, 0xF3, 0x03,
> 
> +  0xF2, 0x49, 0xCC, 0x16, 0xD0, 0xF5, 0x00, 0x4C, 0x58,
> 0xF8, 0x9B, 0xF5, 0x07, 0x25, 0xB1, 0x66,
> 
> +  0x17, 0xC0, 0xBD, 0xC8, 0xD2, 0x52, 0x85, 0x8D, 0xC2,
> 0x2B, 0x38, 0xB2, 0xC3, 0x36, 0xBE, 0xF9,
> 
> +  0x87, 0xDA, 0xF4, 0x8E, 0x5D, 0x43, 0xD7, 0x06, 0xBF,
> 0x99, 0x05, 0x9F, 0xA4, 0xCE, 0xFE, 0xAB,
> 
> +  0x8D, 0x61, 0x63, 0xE7, 0x39, 0xC5, 0xF3, 0x18, 0xF6,
> 0xD8, 0xFC, 0x31, 0x36, 0x69, 0x72, 0x5A,
> 
> +  0xA2, 0x1A, 0x4C, 0x3E, 0xEA, 0x87, 0x25, 0x42, 0x9D,
> 0xD1, 0x3E, 0xF1, 0x97, 0xD2, 0x18, 0x32,
> 
> +  0x93, 0x70, 0x55, 0x53, 0x81, 0x1E, 0xE3, 0x3B, 0x0D,
> 0xE8, 0xBE, 0x82, 0x78, 0x6D, 0xE6, 0xFA,
> 
> +  0xCD, 0x98, 0xA4, 0x6F, 0xDB, 0xEE, 0x66, 0xF4, 0x95,
> 0xC8, 0xCD, 0x35, 0xC9, 0x9E, 0xBB, 0x36,
> 
> +  0x0D, 0x83, 0x96, 0x94, 0x26, 0xA7, 0x90, 0xE0, 0xA9,
> 0x34, 0x3B, 0xD5, 0xC0, 0x9E, 0x3E, 0xF0,
> 
> +  0xD4, 0x47, 0x8D, 0x86, 0x0C, 0x82, 0xA4, 0x58, 0x30,
> 0x3A, 0x1C, 0x76, 0xE3, 0xAD, 0x95, 0x66,
> 
> +  0xB4, 0xB7, 0xFD, 0x09, 0x8A, 0x05, 0x60, 0x0F, 0xA3,
> 0x0F, 0xE2, 0x93, 0x96, 0x58, 0x22, 0x9C,
> 
> +  0x9D, 0x2B, 0xDB, 0xA2, 0x94, 0x18, 0x90, 0x95, 0x02,
> 0xBD, 0x06, 0x40, 0x95, 0x02, 0x03, 0x01,
> 
> +  0x00, 0x01, 0xA3, 0x82, 0x01, 0x19, 0x30, 0x82, 0x01,
> 0x15, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D,
> 
> +  0x0E, 0x04, 0x16, 0x04, 0x14, 0xD2, 0xED, 0x0D, 0x1E,
> 0x24, 0xBB, 0x37, 0xA9, 0xD8, 0x20, 0x6A,
> 
> +  0x4D, 0x1D, 0xD2, 0x16, 0xD5, 0x2E, 0xBE, 0x9E, 0xEB,
> 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23,
> 
> +  0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x23, 0x34, 0xF8,
> 0xD9, 0x52, 0x46, 0x70, 0x0A, 0xED, 0x40,
> 
> +  0xFB, 0x76, 0xFB, 0xB3, 0x2B, 0xB0, 0xC3, 0x35, 0xB3,
> 0x0F, 0x30, 0x54, 0x06, 0x03, 0x55, 0x1D,
> 
> +  0x1F, 0x04, 0x4D, 0x30, 0x4B, 0x30, 0x49, 0xA0, 0x47,
> 0xA0, 0x45, 0x86, 0x43, 0x68, 0x74, 0x74,
> 
> +  0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D,
> 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66,
> 
> +  0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69,
> 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72,
> 
> +  0x6F, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x4D, 0x69,
> 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74,
> 
> +  0x54, 0x69, 0x6D, 0x65, 0x53, 0x74, 0x61, 0x6D, 0x70,
> 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x6C,
> 
> +  0x30, 0x58, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05,
> 0x07, 0x01, 0x01, 0x04, 0x4C, 0x30, 0x4A,
> 
> +  0x30, 0x48, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05,
> 0x07, 0x30, 0x02, 0x86, 0x3C, 0x68, 0x74,
> 
> +  0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E,
> 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
> 
> +  0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B,
> 0x69, 0x2F, 0x63, 0x65, 0x72, 0x74, 0x73,
> 
> +  0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66,
> 0x74, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x74,
> 
> +  0x61, 0x6D, 0x70, 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72,
> 0x74, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1D,
> 
> +  0x25, 0x04, 0x0C, 0x30, 0x0A, 0x06, 0x08, 0x2B, 0x06,
> 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30,
> 
> +  0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF,
> 0x04, 0x04, 0x03, 0x02, 0x06, 0xC0, 0x30,
> 
> +  0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
> 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82,
> 
> +  0x01, 0x01, 0x00, 0x9C, 0x0A, 0x55, 0xC8, 0xCC, 0x44,
> 0x13, 0x34, 0x0C, 0xD8, 0x63, 0x27, 0x76,
> 
> +  0x7D, 0x3E, 0xFA, 0x38, 0x32, 0x83, 0x53, 0x9D, 0xF2,
> 0x08, 0xF9, 0x32, 0xF5, 0xC5, 0x6E, 0x70,
> 
> +  0xA1, 0xC9, 0xB1, 0x63, 0x6B, 0x19, 0x9D, 0x09, 0x67,
> 0xD9, 0x9D, 0xEB, 0x8A, 0x6A, 0xDB, 0x60,
> 
> +  0x66, 0xE9, 0xE9, 0x52, 0x26, 0xF3, 0x3B, 0xC6, 0x6A,
> 0xD3, 0xC2, 0x52, 0xBE, 0xA8, 0xB9, 0xEB,
> 
> +  0x6A, 0xAA, 0x78, 0x8C, 0xC9, 0x16, 0x7D, 0x90, 0x95,
> 0xA0, 0xCC, 0x21, 0xB3, 0x9E, 0x81, 0xBD,
> 
> +  0xCD, 0xC1, 0x8B, 0x29, 0xBD, 0x62, 0x25, 0xEF, 0x09,
> 0x57, 0xE7, 0x86, 0x4E, 0x2A, 0xEC, 0x80,
> 
> +  0xCA, 0xBB, 0xFC, 0x21, 0x16, 0xC4, 0x3F, 0x4E, 0x52,
> 0x19, 0xE6, 0x0E, 0xB1, 0xD8, 0xC1, 0xC2,
> 
> +  0x79, 0x90, 0x64, 0xB4, 0x50, 0x73, 0x10, 0x35, 0x5E,
> 0x5D, 0x11, 0xC1, 0xB8, 0xBA, 0xAA, 0xCF,
> 
> +  0x52, 0xF6, 0x80, 0x91, 0x00, 0xE6, 0xEF, 0x51, 0x43,
> 0x46, 0xE9, 0xD0, 0xE8, 0x94, 0xF6, 0x2C,
> 
> +  0x24, 0x0D, 0x8A, 0xC6, 0xB2, 0x31, 0x8A, 0xA3, 0x7E,
> 0x36, 0x6C, 0xA4, 0x05, 0x4C, 0x67, 0x07,
> 
> +  0x2A, 0xBB, 0xBB, 0x10, 0xA5, 0xA5, 0x30, 0x1A, 0x72,
> 0xD0, 0x06, 0x20, 0x3B, 0x24, 0x93, 0x5B,
> 
> +  0x15, 0xD9, 0x39, 0x93, 0xD3, 0x73, 0x2D, 0x1A, 0xC4,
> 0xD4, 0x6C, 0x1E, 0xA1, 0x08, 0xEC, 0xF6,
> 
> +  0x31, 0xB8, 0x6B, 0x4B, 0xEC, 0xEE, 0x5C, 0x33, 0x02,
> 0x14, 0x32, 0x8C, 0x7C, 0x11, 0x20, 0x2F,
> 
> +  0x20, 0x03, 0x7F, 0xF9, 0x0C, 0x9D, 0xB8, 0xD3, 0x9E,
> 0x5F, 0xD6, 0x08, 0xFC, 0x81, 0xA0, 0x99,
> 
> +  0xB8, 0xBB, 0x55, 0x6E, 0xCD, 0x42, 0x4B, 0x3A, 0x4D,
> 0x8C, 0x14, 0x2B, 0xCA, 0xC8, 0x12, 0xD3,
> 
> +  0x62, 0x6E, 0xEA, 0x0D, 0x0A, 0x9D, 0x09, 0xA3, 0x66,
> 0xD9, 0x79, 0x4F, 0x8E, 0x1A, 0xA2, 0xFF,
> 
> +  0xCC, 0x98, 0x04, 0x30, 0x82, 0x05, 0x96, 0x30, 0x82,
> 0x04, 0x7E, 0xA0, 0x03, 0x02, 0x01, 0x02,
> 
> +  0x02, 0x0A, 0x61, 0x01, 0xC6, 0xC1, 0x00, 0x00, 0x00,
> 0x00, 0x00, 0x07, 0x30, 0x0D, 0x06, 0x09,
> 
> +  0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05,
> 0x05, 0x00, 0x30, 0x81, 0x81, 0x31, 0x0B,
> 
> +  0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
> 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06,
> 
> +  0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61, 0x73,
> 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E,
> 
> +  0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07,
> 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F,
> 
> +  0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55,
> 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63,
> 
> +  0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F,
> 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69,
> 
> +  0x6F, 0x6E, 0x31, 0x2B, 0x30, 0x29, 0x06, 0x03, 0x55,
> 0x04, 0x03, 0x13, 0x22, 0x4D, 0x69, 0x63,
> 
> +  0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x57, 0x69,
> 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x20, 0x56,
> 
> +  0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
> 0x6F, 0x6E, 0x20, 0x50, 0x43, 0x41, 0x30,
> 
> +  0x1E, 0x17, 0x0D, 0x30, 0x38, 0x31, 0x30, 0x32, 0x32,
> 0x32, 0x30, 0x33, 0x39, 0x32, 0x32, 0x5A,
> 
> +  0x17, 0x0D, 0x31, 0x30, 0x30, 0x31, 0x32, 0x32, 0x32,
> 0x30, 0x34, 0x39, 0x32, 0x32, 0x5A, 0x30,
> 
> +  0x7F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
> 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13,
> 
> +  0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A,
> 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67,
> 
> +  0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03,
> 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65,
> 
> +  0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C,
> 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15,
> 
> +  0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74,
> 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72,
> 
> +  0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x0D, 0x30, 0x0B,
> 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x04,
> 
> +  0x4D, 0x4F, 0x50, 0x52, 0x31, 0x1A, 0x30, 0x18, 0x06,
> 0x03, 0x55, 0x04, 0x03, 0x13, 0x11, 0x4D,
> 
> +  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20,
> 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73,
> 
> +  0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A,
> 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01,
> 
> +  0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30,
> 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01,
> 
> +  0x00, 0xDC, 0x3A, 0xD3, 0x44, 0xF4, 0x6E, 0x20, 0x9F,
> 0xDD, 0xA4, 0x0E, 0x82, 0x4E, 0xC7, 0x86,
> 
> +  0x5E, 0x63, 0xCC, 0xCA, 0xE5, 0x42, 0x53, 0x4B, 0x85,
> 0xFA, 0x5D, 0x71, 0x6C, 0xCF, 0x76, 0x0C,
> 
> +  0x18, 0x8B, 0xA6, 0x0D, 0xF5, 0x4A, 0xF7, 0xFE, 0x17,
> 0xF2, 0x90, 0xCC, 0x62, 0xC7, 0x24, 0xAD,
> 
> +  0x9B, 0x9A, 0xE1, 0x45, 0x3B, 0x61, 0xD8, 0x0D, 0x05,
> 0x69, 0xC7, 0xCD, 0x88, 0x2A, 0xB8, 0xB9,
> 
> +  0x18, 0x1E, 0x60, 0x10, 0x5F, 0x88, 0xC6, 0xD2, 0x82,
> 0x4E, 0x6D, 0x49, 0xC5, 0xBE, 0x5C, 0x12,
> 
> +  0x86, 0x48, 0x85, 0x89, 0x91, 0x81, 0xCD, 0x1B, 0xAD,
> 0x1F, 0xB7, 0x2D, 0x67, 0x79, 0xF1, 0x7B,
> 
> +  0x9F, 0x25, 0x87, 0x14, 0x76, 0x5F, 0xE3, 0x0E, 0x64,
> 0xA1, 0x72, 0x61, 0x25, 0xE5, 0x75, 0x69,
> 
> +  0xC5, 0x14, 0xF1, 0x5F, 0x07, 0x56, 0xA4, 0x0D, 0x70,
> 0x06, 0x23, 0xA7, 0x6C, 0xDD, 0x82, 0xAE,
> 
> +  0xD9, 0x9B, 0x47, 0xA4, 0xA5, 0x6C, 0x08, 0xB0, 0x58,
> 0xF1, 0x53, 0x6A, 0x4F, 0xDA, 0x85, 0x61,
> 
> +  0xCB, 0x02, 0x7B, 0x49, 0xAF, 0x1F, 0xBB, 0xE0, 0xD7,
> 0xB9, 0x5E, 0xDB, 0x73, 0x89, 0x76, 0xC1,
> 
> +  0x3A, 0xBB, 0x0D, 0xF5, 0x97, 0xF0, 0x88, 0x5D, 0x69,
> 0x77, 0x80, 0xCF, 0xF1, 0x7E, 0x03, 0x9F,
> 
> +  0x73, 0x6D, 0xDE, 0x05, 0xB8, 0x2F, 0x77, 0xB5, 0x54,
> 0x55, 0x45, 0xD0, 0xD2, 0x38, 0xBD, 0x96,
> 
> +  0xE3, 0xF7, 0xEA, 0x40, 0xE5, 0xAC, 0x19, 0xFC, 0x71,
> 0xCB, 0x28, 0x27, 0xAA, 0x71, 0xA1, 0x72,
> 
> +  0xB5, 0x12, 0x27, 0xC1, 0x51, 0xF6, 0x36, 0xC5, 0xC0,
> 0xC7, 0x7B, 0x3A, 0x3A, 0x93, 0x37, 0x04,
> 
> +  0xCC, 0xEE, 0x0B, 0x69, 0x78, 0x64, 0x75, 0x41, 0xB6,
> 0x78, 0x22, 0x0F, 0x77, 0x84, 0xF7, 0x4B,
> 
> +  0x8D, 0x46, 0x65, 0x92, 0x5B, 0x4D, 0x56, 0x6B, 0x75,
> 0x04, 0x46, 0x3F, 0x0B, 0x1B, 0xB4, 0x19,
> 
> +  0xBF, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x02,
> 0x0F, 0x30, 0x82, 0x02, 0x0B, 0x30, 0x1F,
> 
> +  0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x18, 0x30, 0x16,
> 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05,
> 
> +  0x07, 0x03, 0x03, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04,
> 0x01, 0x82, 0x37, 0x0A, 0x03, 0x06, 0x30,
> 
> +  0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04,
> 0x14, 0xA1, 0xE6, 0xC3, 0x65, 0xD0, 0xE6,
> 
> +  0xE8, 0x28, 0x62, 0xC2, 0xF3, 0xC2, 0x23, 0xA6, 0x1C,
> 0x49, 0x82, 0x0B, 0xD5, 0x53, 0x30, 0x0E,
> 
> +  0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04,
> 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x1F,
> 
> +  0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16,
> 0x80, 0x14, 0x90, 0x8B, 0x11,
> 
> +  0xA5, 0x70, 0xED, 0xE0, 0xF9, 0xA9, 0xC0, 0xAC, 0x08,
> 0xC7, 0xB5, 0xF4, 0x82, 0xB1, 0x3C, 0xC5,
> 
> +  0x4A, 0x30, 0x7B, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04,
> 0x74, 0x30, 0x72, 0x30, 0x70, 0xA0, 0x6E,
> 
> +  0xA0, 0x6C, 0x86, 0x34, 0x68, 0x74, 0x74, 0x70, 0x3A,
> 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D,
> 
> +  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E,
> 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69,
> 
> +  0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64,
> 0x75, 0x63, 0x74, 0x73, 0x2F, 0x57, 0x69,
> 
> +  0x6E, 0x50, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x6C, 0x86,
> 0x34, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F,
> 
> +  0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72,
> 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63,
> 
> +  0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x72,
> 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64, 0x75,
> 
> +  0x63, 0x74, 0x73, 0x2F, 0x57, 0x69, 0x6E, 0x50, 0x43,
> 0x41, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x52,
> 
> +  0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01,
> 0x01, 0x04, 0x46, 0x30, 0x44, 0x30, 0x42,
> 
> +  0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30,
> 0x02, 0x86, 0x36, 0x68, 0x74, 0x74, 0x70,
> 
> +  0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69,
> 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74,
> 
> +  0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F,
> 0x63, 0x65, 0x72, 0x74, 0x73, 0x2F, 0x4D,
> 
> +  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x57,
> 0x69, 0x6E, 0x50, 0x43, 0x41, 0x2E, 0x63,
> 
> +  0x72, 0x74, 0x30, 0x81, 0xC6, 0x06, 0x03, 0x55, 0x1D,
> 0x20, 0x04, 0x81, 0xBE, 0x30, 0x81, 0xBB,
> 
> +  0x30, 0x81, 0xB8, 0x06, 0x09, 0x2B, 0x06, 0x01, 0x04,
> 0x01, 0x82, 0x37, 0x15, 0x2F, 0x30, 0x81,
> 
> +  0xAA, 0x30, 0x40, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05,
> 0x05, 0x07, 0x02, 0x01, 0x16, 0x34, 0x68,
> 
> +  0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x77, 0x77,
> 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F,
> 
> +  0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F,
> 0x70, 0x6B, 0x69, 0x2F, 0x73, 0x73, 0x6C,
> 
> +  0x2F, 0x63, 0x70, 0x73, 0x2F, 0x57, 0x69, 0x6E, 0x64,
> 0x6F, 0x77, 0x73, 0x50, 0x43, 0x41, 0x2E,
> 
> +  0x68, 0x74, 0x6D, 0x30, 0x66, 0x06, 0x08, 0x2B, 0x06,
> 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30,
> 
> +  0x5A, 0x1E, 0x58, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x70,
> 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00,
> 
> +  0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0xA9,
> 0x00, 0x20, 0x00, 0x31, 0x00, 0x39, 0x00,
> 
> +  0x39, 0x00, 0x39, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x30,
> 0x00, 0x30, 0x00, 0x35, 0x00, 0x20, 0x00,
> 
> +  0x4D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6F,
> 0x00, 0x73, 0x00, 0x6F, 0x00, 0x66, 0x00,
> 
> +  0x74, 0x00, 0x20, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x72,
> 0x00, 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00,
> 
> +  0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E,
> 0x00, 0x2E, 0x30, 0x0D, 0x06, 0x09, 0x2A,
> 
> +  0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05,
> 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x73,
> 
> +  0x5F, 0xCA, 0x80, 0x1C, 0x60, 0x46, 0x6F, 0xB9, 0x34,
> 0x9D, 0x88, 0xE3, 0xBE, 0x22, 0x8C, 0xFA,
> 
> +  0xE6, 0x58, 0x9A, 0xAB, 0x7B, 0x1A, 0x97, 0xFD, 0xED,
> 0x2E, 0x39, 0xCC, 0x59, 0x5B, 0x1D, 0x7A,
> 
> +  0x06, 0x8A, 0xBB, 0x43, 0x93, 0x7B, 0x1E, 0xA1, 0x88,
> 0x53, 0xDF, 0x44, 0xF8, 0x53, 0xA9, 0xEA,
> 
> +  0xF6, 0x67, 0x1B, 0x3A, 0x78, 0x84, 0x11, 0x6A, 0x6F,
> 0x29, 0x47, 0x90, 0x0A, 0x0C, 0x7B, 0x22,
> 
> +  0x77, 0x4E, 0x6F, 0xB8, 0x64, 0x29, 0xDF, 0x06, 0xC7,
> 0xC8, 0x73, 0x84, 0xD6, 0x66, 0xA0, 0xCA,
> 
> +  0xD9, 0x5A, 0x26, 0x82, 0x57, 0xF9, 0xE3, 0x4F, 0x39,
> 0xAF, 0x2E, 0x8E, 0xB1, 0x06, 0x5B, 0x72,
> 
> +  0xF2, 0x37, 0x32, 0xAE, 0x4E, 0xCE, 0x3C, 0x7D, 0xB0,
> 0x12, 0x2B, 0x9E, 0xA5, 0x75, 0xE3, 0x43,
> 
> +  0xA6, 0x12, 0x8B, 0x06, 0x14, 0x98, 0x77, 0xE3, 0x58,
> 0x32, 0x25, 0x60, 0x07, 0x8C, 0x59, 0x71,
> 
> +  0xA7, 0x71, 0x41, 0xB3, 0x06, 0x8D, 0x5C, 0xEF, 0x9C,
> 0x7F, 0x5A, 0x22, 0x6D, 0xB7, 0xD3, 0xD9,
> 
> +  0xF5, 0xA6, 0x1B, 0x52, 0xDE, 0xF5, 0x7E, 0x76, 0x7C,
> 0xFE, 0xF4, 0xC8, 0x23, 0x1A, 0x4B, 0x25,
> 
> +  0xEB, 0xE4, 0xEE, 0xAF, 0x10, 0x0B, 0x55, 0xC3, 0xD8,
> 0xC1, 0x17, 0x85, 0x61, 0x6F, 0xD3, 0x3F,
> 
> +  0xB6, 0xE9, 0xEC, 0x84, 0xA5, 0xEE, 0x6D, 0xB2, 0xFF,
> 0xE8, 0x6C, 0x95, 0xAB, 0x2B, 0x5E, 0xC8,
> 
> +  0x85, 0xC3, 0x11, 0x60, 0xAC, 0xFA, 0x02, 0x05, 0xF1,
> 0x7B, 0xDA, 0xC3, 0x69, 0x49, 0x96, 0xA5,
> 
> +  0x70, 0xF9, 0x65, 0x66, 0x46, 0x10, 0x8D, 0x34, 0xE9,
> 0x21, 0x94, 0x3C, 0x0F, 0x71, 0x4A, 0x1C,
> 
> +  0xEA, 0x1F, 0xF7, 0x23, 0xA6, 0x87, 0x60, 0x34, 0xE9,
> 0x14, 0xE1, 0xDE, 0x03, 0x59, 0xB4, 0x02,
> 
> +  0x1D, 0x3A, 0xAF, 0xE3, 0x55, 0x05, 0xF5, 0xED, 0xC1,
> 0xF4, 0xE4, 0x5D, 0x0E, 0xD3, 0x97, 0x30,
> 
> +  0x82, 0x06, 0x07, 0x30, 0x82, 0x03, 0xEF, 0xA0, 0x03,
> 0x02, 0x01, 0x02, 0x02, 0x0A, 0x61, 0x16,
> 
> +  0x68, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x30,
> 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
> 
> +  0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x5F,
> 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09,
> 
> +  0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19,
> 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19,
> 
> +  0x30, 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93,
> 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09,
> 
> +  0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74,
> 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55,
> 
> +  0x04, 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F,
> 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F,
> 
> +  0x6F, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66,
> 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41,
> 
> +  0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x30,
> 0x1E, 0x17, 0x0D, 0x30, 0x37, 0x30, 0x34,
> 
> +  0x30, 0x33, 0x31, 0x32, 0x35, 0x33, 0x30, 0x39, 0x5A,
> 0x17, 0x0D, 0x32, 0x31, 0x30, 0x34, 0x30,
> 
> +  0x33, 0x31, 0x33, 0x30, 0x33, 0x30, 0x39, 0x5A, 0x30,
> 0x77, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13,
> 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08,
> 
> +  0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67,
> 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E,
> 
> +  0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65,
> 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E,
> 
> +  0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15,
> 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
> 
> +  0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72,
> 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x21,
> 
> +  0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x18,
> 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
> 
> +  0x66, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D, 0x53,
> 0x74, 0x61, 0x6D, 0x70, 0x20, 0x50, 0x43,
> 
> +  0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09,
> 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
> 
> +  0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00,
> 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01,
> 
> +  0x01, 0x00, 0x9F, 0xA1, 0x6C, 0xB1, 0xDF, 0xDB, 0x48,
> 0x92, 0x2A, 0x7C, 0x6B, 0x2E, 0x19, 0xE1,
> 
> +  0xBD, 0xE2, 0xE3, 0xC5, 0x99, 0x51, 0x23, 0x50, 0xAD,
> 0xCE, 0xDD, 0x18, 0x4E, 0x24, 0x0F, 0xEE,
> 
> +  0xD1, 0xA7, 0xD1, 0x4C, 0xAD, 0x74, 0x30, 0x20, 0x11,
> 0xEB, 0x07, 0xD5, 0x54, 0x95, 0x15, 0x49,
> 
> +  0x94, 0x1B, 0x42, 0x92, 0xAE, 0x98, 0x5C, 0x30, 0x26,
> 0xDA, 0x00, 0x6B, 0xE8, 0x7B, 0xBD, 0xEC,
> 
> +  0x89, 0x07, 0x0F, 0xF7, 0x0E, 0x04, 0x98, 0xF0, 0x89,
> 0xCC, 0x1F, 0xCB, 0x33, 0x24, 0x87, 0x9D,
> 
> +  0xF2, 0xF4, 0x67, 0x1C, 0x2C, 0xFC, 0x7B, 0xE7, 0x88,
> 0x1D, 0xEA, 0xE7, 0x4E, 0xA3, 0xA1, 0xC1,
> 
> +  0x23, 0x53, 0xCA, 0x8D, 0xFA, 0x45, 0xCF, 0x09, 0xD0,
> 0x5E, 0xAF, 0xD0, 0xB0, 0x42, 0x04, 0xA2,
> 
> +  0xF9, 0xA6, 0x6C, 0x93, 0x67, 0xD7, 0x28, 0xDC, 0x46,
> 0x53, 0xB0, 0x86, 0xD0, 0xE5, 0x28, 0x46,
> 
> +  0x2E, 0x27, 0xAC, 0x86, 0x4F, 0x55, 0x52, 0x0C, 0xE4,
> 0x03, 0x2C, 0xFB, 0x6A, 0x90, 0x90, 0x30,
> 
> +  0x6E, 0x87, 0xF3, 0x59, 0x30, 0x9D, 0xFA, 0x7E, 0xD6,
> 0x97, 0xB3, 0xE8, 0x21, 0x97, 0x7E, 0xF8,
> 
> +  0xD2, 0x13, 0xF3, 0x08, 0xB7, 0x53, 0x6D, 0x52, 0xB4,
> 0x45, 0x90, 0x9F, 0x48, 0x00, 0x4A, 0x47,
> 
> +  0x66, 0x11, 0x27, 0x29, 0x66, 0xA8, 0x97, 0xE4, 0xD3,
> 0x06, 0x81, 0x4A, 0xA2, 0xF9, 0x84, 0xA7,
> 
> +  0x11, 0x47, 0x14, 0x09, 0x82, 0x9F, 0x84, 0xED, 0x55,
> 0x78, 0xFE, 0x01, 0x9A, 0x1D, 0x50, 0x08,
> 
> +  0x85, 0x00, 0x10, 0x30, 0x46, 0xED, 0xB7, 0xDE, 0x23,
> 0x46, 0xBB, 0xC4, 0x2D, 0x54, 0x9F, 0xAF,
> 
> +  0x1E, 0x78, 0x41, 0x31, 0x77, 0xCC, 0x9B, 0xDF, 0x3B,
> 0x83, 0x93, 0xA1, 0x61, 0x02, 0xB5, 0x1D,
> 
> +  0x0D, 0xB1, 0xFC, 0xF7, 0x9B, 0xB2, 0x01, 0xCE, 0x22,
> 0x4B, 0x54, 0xFF, 0xF9, 0x05, 0xC3, 0xC2,
> 
> +  0x20, 0x0B, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82,
> 0x01, 0xAB, 0x30, 0x82, 0x01, 0xA7, 0x30,
> 
> +  0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF,
> 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF,
> 
> +  0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16,
> 0x04, 0x14, 0x23, 0x34, 0xF8, 0xD9, 0x52,
> 
> +  0x46, 0x70, 0x0A, 0xED, 0x40, 0xFB, 0x76, 0xFB, 0xB3,
> 0x2B, 0xB0, 0xC3, 0x35, 0xB3, 0x0F, 0x30,
> 
> +  0x0B, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03,
> 0x02, 0x01, 0x86, 0x30, 0x10, 0x06, 0x09,
> 
> +  0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01,
> 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x81,
> 
> +  0x98, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x81, 0x90,
> 0x30, 0x81, 0x8D, 0x80, 0x14, 0x0E, 0xAC,
> 
> +  0x82, 0x60, 0x40, 0x56, 0x27, 0x97, 0xE5, 0x25, 0x13,
> 0xFC, 0x2A, 0xE1, 0x0A, 0x53, 0x95, 0x59,
> 
> +  0xE4, 0xA4, 0xA1, 0x63, 0xA4, 0x61, 0x30, 0x5F, 0x31,
> 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92,
> 
> +  0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16,
> 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30,
> 
> +  0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2,
> 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D,
> 
> +  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x31,
> 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73,
> 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F,
> 
> +  0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69,
> 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75,
> 
> +  0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x82, 0x10,
> 0x79, 0xAD, 0x16, 0xA1, 0x4A, 0xA0, 0xA5,
> 
> +  0xAD, 0x4C, 0x73, 0x58, 0xF4, 0x07, 0x13, 0x2E, 0x65,
> 0x30, 0x50, 0x06, 0x03, 0x55, 0x1D, 0x1F,
> 
> +  0x04, 0x49, 0x30, 0x47, 0x30, 0x45, 0xA0, 0x43, 0xA0,
> 0x41, 0x86, 0x3F, 0x68, 0x74, 0x74, 0x70,
> 
> +  0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x6C, 0x2E, 0x6D, 0x69,
> 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74,
> 
> +  0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F,
> 0x63, 0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F,
> 
> +  0x64, 0x75, 0x63, 0x74, 0x73, 0x2F, 0x6D, 0x69, 0x63,
> 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x72,
> 
> +  0x6F, 0x6F, 0x74, 0x63, 0x65, 0x72, 0x74, 0x2E, 0x63,
> 0x72, 0x6C, 0x30, 0x54, 0x06, 0x08, 0x2B,
> 
> +  0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x48,
> 0x30, 0x46, 0x30, 0x44, 0x06, 0x08, 0x2B,
> 
> +  0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x38,
> 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F,
> 
> +  0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F,
> 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F,
> 
> +  0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x65, 0x72,
> 0x74, 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72,
> 
> +  0x6F, 0x73, 0x6F, 0x66, 0x74, 0x52, 0x6F, 0x6F, 0x74,
> 0x43, 0x65, 0x72, 0x74, 0x2E, 0x63, 0x72,
> 
> +  0x74, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04,
> 0x0C, 0x30, 0x0A, 0x06, 0x08, 0x2B, 0x06,
> 
> +  0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30, 0x0D, 0x06,
> 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
> 
> +  0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01,
> 0x00, 0x10, 0x97, 0x8A, 0xC3, 0x5C, 0x03,
> 
> +  0x44, 0x36, 0xDD, 0xE9, 0xB4, 0xAD, 0x77, 0xDB, 0xCE,
> 0x79, 0x51, 0x4D, 0x01, 0xB1, 0x2E, 0x74,
> 
> +  0x71, 0x5B, 0x6D, 0x0C, 0x13, 0xAB, 0xCE, 0xBE, 0x7B,
> 0x8F, 0xB8, 0x2E, 0xD4, 0x12, 0xA2, 0x8C,
> 
> +  0x6D, 0x62, 0xB8, 0x57, 0x02, 0xCB, 0x4E, 0x20, 0x13,
> 0x50, 0x99, 0xDD, 0x7A, 0x40, 0xE2, 0x57,
> 
> +  0xBB, 0xAF, 0x58, 0x9A, 0x1C, 0xE1, 0x1D, 0x01, 0x86,
> 0xAC, 0xBB, 0x78, 0xF2, 0x8B, 0xD0, 0xEC,
> 
> +  0x3B, 0x01, 0xEE, 0xE2, 0xBE, 0x8F, 0x0A, 0x05, 0xC8,
> 0x8D, 0x48, 0xE2, 0xF0, 0x53, 0x15, 0xDD,
> 
> +  0x4F, 0xAB, 0x92, 0xE4, 0xE7, 0x8D, 0x6A, 0xD5, 0x80,
> 0xC1, 0xE6, 0x94, 0xF2, 0x06, 0x2F, 0x85,
> 
> +  0x03, 0xE9, 0x91, 0x2A, 0x24, 0x22, 0x70, 0xFB, 0xF6,
> 0xFC, 0xE4, 0x78, 0x99, 0x2E, 0x0D, 0xF7,
> 
> +  0x07, 0xE2, 0x70, 0xBC, 0x18, 0x4E, 0x9D, 0x8E, 0x6B,
> 0x0A, 0x72, 0x95, 0xB8, 0xA1, 0x39, 0x9C,
> 
> +  0x67, 0x2D, 0xC5, 0x51, 0x0E, 0xEA, 0x62, 0x5C, 0x3F,
> 0x16, 0x98, 0x8B, 0x20, 0x3F, 0xE2, 0x07,
> 
> +  0x1A, 0x32, 0xF9, 0xCC, 0x31, 0x4A, 0x76, 0x31, 0x3D,
> 0x2B, 0x72, 0x0B, 0xC8, 0xEA, 0x70, 0x3D,
> 
> +  0xFF, 0x85, 0x0A, 0x13, 0xDF, 0xC2, 0x0A, 0x61, 0x8E,
> 0xF0, 0xD7, 0xB8, 0x17, 0xEB, 0x4E, 0x8B,
> 
> +  0x7F, 0xC5, 0x35, 0x2B, 0x5E, 0xA3, 0xBF, 0xEB, 0xBC,
> 0x7D, 0x0B, 0x42, 0x7B, 0xD4, 0x53, 0x72,
> 
> +  0x21, 0xEE, 0x30, 0xCA, 0xBB, 0x78, 0x65, 0x5C, 0x5B,
> 0x01, 0x17, 0x0A, 0x14, 0x0E, 0xD2, 0xDA,
> 
> +  0x14, 0x98, 0xF5, 0x3C, 0xB9, 0x66, 0x58, 0xB3, 0x2D,
> 0x2F, 0xE7, 0xF9, 0x85, 0x86, 0xCC, 0x51,
> 
> +  0x56, 0xE8, 0x9D, 0x70, 0x94, 0x6C, 0xAC, 0x39, 0x4C,
> 0xD4, 0xF6, 0x79, 0xBF, 0xAA, 0x18, 0x7A,
> 
> +  0x62, 0x29, 0xEF, 0xA2, 0x9B, 0x29, 0x34, 0x06, 0x77,
> 0x1A, 0x62, 0xC9, 0x3D, 0x1E, 0x6D, 0x1F,
> 
> +  0x82, 0xF0, 0x0B, 0xC7, 0x2C, 0xBB, 0xCF, 0x43, 0xB3,
> 0xE5, 0xF9, 0xEC, 0x7D, 0xB5, 0xE3, 0xA4,
> 
> +  0xA8, 0x74, 0x35, 0xB8, 0x4E, 0xC5, 0x71, 0x23, 0x12,
> 0x26, 0x76, 0x0B, 0x3C, 0x52, 0x8C, 0x71,
> 
> +  0x5A, 0x46, 0x43, 0x14, 0xBC, 0xB3, 0xB3, 0xB0, 0x4D,
> 0x67, 0xC8, 0x9F, 0x42, 0xFF, 0x80, 0x79,
> 
> +  0x21, 0x80, 0x9E, 0x15, 0x30, 0x66, 0xE8, 0x42, 0x12,
> 0x5E, 0x1A, 0xC8, 0x9E, 0x22, 0x21, 0xD0,
> 
> +  0x43, 0xE9, 0x2B, 0xE9, 0xBB, 0xF4, 0x48, 0xCC, 0x2C,
> 0xD4, 0xD8, 0x32, 0x80, 0x4C, 0x26, 0x2A,
> 
> +  0x48, 0x24, 0x5F, 0x5A, 0xEA, 0x56, 0xEF, 0xA6, 0xDE,
> 0x99, 0x9D, 0xCA, 0x3A, 0x6F, 0xBD, 0x81,
> 
> +  0x27, 0x74, 0x06, 0x11, 0xEE, 0x76, 0x21, 0xBF, 0x9B,
> 0x82, 0xC1, 0x27, 0x54, 0xB6, 0xB1, 0x6A,
> 
> +  0x3D, 0x89, 0xA1, 0x76, 0x61, 0xB4, 0x6E, 0xA1, 0x13,
> 0xA6, 0xBF, 0xAA, 0x47, 0xF0, 0x12, 0x6F,
> 
> +  0xFD, 0x8A, 0x32, 0x6C, 0xB2, 0xFE, 0xDF, 0x51, 0xC8,
> 0x8C, 0x23, 0xC9, 0x66, 0xBD, 0x9D, 0x1D,
> 
> +  0x87, 0x12, 0x64, 0x02, 0x3D, 0x2D, 0xAF, 0x59, 0x8F,
> 0xB8, 0xE4, 0x21, 0xE5, 0xB5, 0xB0, 0xCA,
> 
> +  0x63, 0xB4, 0x78, 0x54, 0x05, 0xD4, 0x41, 0x2E, 0x50,
> 0xAC, 0x94, 0xB0, 0xA5, 0x78, 0xAB, 0xB3,
> 
> +  0xA0, 0x96, 0x75, 0x1A, 0xD9, 0x92, 0x87, 0x13, 0x75,
> 0x22, 0x2F, 0x32, 0xA8, 0x08, 0x6E, 0xA0,
> 
> +  0x5B, 0x8C, 0x25, 0xBF, 0xA0, 0xEF, 0x84, 0xCA, 0x21,
> 0xD6, 0xEB, 0x1E, 0x4F, 0xC9, 0x9A, 0xEE,
> 
> +  0x49, 0xE0, 0xF7, 0x01, 0x65, 0x6F, 0x89, 0x0B, 0x7D,
> 0xC8, 0x69, 0xC8, 0xE6, 0x6E, 0xEA, 0xA7,
> 
> +  0x97, 0xCE, 0x31, 0x29, 0xFF, 0x0E, 0xC5, 0x5B, 0x5C,
> 0xD8, 0x4D, 0x1B, 0xA1, 0xD8, 0xFA, 0x2F,
> 
> +  0x9E, 0x3F, 0x2E, 0x55, 0x16, 0x6B, 0xC9, 0x13, 0xA3,
> 0xFD, 0x30, 0x82, 0x06, 0xA1, 0x30, 0x82,
> 
> +  0x04, 0x89, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0A,
> 0x61, 0x07, 0x02, 0xDC, 0x00, 0x00, 0x00,
> 
> +  0x00, 0x00, 0x0B, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86,
> 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05,
> 
> +  0x05, 0x00, 0x30, 0x5F, 0x31, 0x13, 0x30, 0x11, 0x06,
> 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2,
> 
> +  0x2C, 0x64, 0x01, 0x19, 0x16, 0x03, 0x63, 0x6F, 0x6D,
> 0x31, 0x19, 0x30, 0x17, 0x06, 0x0A, 0x09,
> 
> +  0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19,
> 0x16, 0x09, 0x6D, 0x69, 0x63, 0x72, 0x6F,
> 
> +  0x73, 0x6F, 0x66, 0x74, 0x31, 0x2D, 0x30, 0x2B, 0x06,
> 0x03, 0x55, 0x04, 0x03, 0x13, 0x24, 0x4D,
> 
> +  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20,
> 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, 0x65,
> 
> +  0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65,
> 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72,
> 
> +  0x69, 0x74, 0x79, 0x30, 0x1E, 0x17, 0x0D, 0x30, 0x35,
> 0x30, 0x39, 0x31, 0x35, 0x32, 0x31, 0x35,
> 
> +  0x35, 0x34, 0x31, 0x5A, 0x17, 0x0D, 0x31, 0x36, 0x30,
> 0x33, 0x31, 0x35, 0x32, 0x32, 0x30, 0x35,
> 
> +  0x34, 0x31, 0x5A, 0x30, 0x81, 0x81, 0x31, 0x0B, 0x30,
> 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
> 
> +  0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03,
> 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57, 0x61,
> 
> +  0x73, 0x68, 0x69, 0x6E, 0x67, 0x74, 0x6F, 0x6E, 0x31,
> 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6D, 0x6F, 0x6E,
> 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D, 0x69, 0x63, 0x72,
> 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x43,
> 
> +  0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F,
> 0x6E, 0x31, 0x2B, 0x30, 0x29, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x03, 0x13, 0x22, 0x4D, 0x69, 0x63, 0x72,
> 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x57,
> 
> +  0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73, 0x20, 0x56, 0x65,
> 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
> 
> +  0x69, 0x6F, 0x6E, 0x20, 0x50, 0x43, 0x41, 0x30, 0x82,
> 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A,
> 
> +  0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05,
> 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30,
> 
> +  0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC5,
> 0xAC, 0x93, 0x4E, 0xE6, 0x4A, 0x11, 0x9E,
> 
> +  0x37, 0xD0, 0x35, 0xD2, 0xB0, 0x06, 0x5C, 0x83, 0x14,
> 0xA5, 0x61, 0x92, 0xFC, 0xFE, 0xB3, 0x89,
> 
> +  0xC1, 0xE6, 0xCD, 0xC8, 0x1F, 0x31, 0x84, 0x09, 0x91,
> 0x34, 0x46, 0x92, 0x2C, 0xB8, 0xEE, 0x2C,
> 
> +  0xC5, 0x20, 0x73, 0xC4, 0xE8, 0x1A, 0xD8, 0x8D, 0xCE,
> 0x7A, 0x68, 0xB5, 0x66, 0x78, 0x8B, 0xE5,
> 
> +  0x60, 0x15, 0xA2, 0xF6, 0x29, 0x5A, 0x1D, 0x5E, 0x5D,
> 0xFC, 0x62, 0xD3, 0xC1, 0x5C, 0x29, 0x89,
> 
> +  0xFB, 0x33, 0xF8, 0x16, 0x95, 0x36, 0xDD, 0xB1, 0x46,
> 0x74, 0x69, 0x72, 0x53, 0xD5, 0xAA, 0xE8,
> 
> +  0x8A, 0x99, 0x1A, 0xD8, 0xF7, 0x67, 0x09, 0xD9, 0x09,
> 0x20, 0x22, 0x38, 0x7A, 0xD6, 0x03, 0x23,
> 
> +  0xD7, 0x89, 0x9F, 0x1C, 0x01, 0xB7, 0x51, 0xDF, 0x98,
> 0x66, 0x2A, 0x02, 0x8B, 0x06, 0xEC, 0xE4,
> 
> +  0x29, 0xEF, 0x5B, 0x42, 0x17, 0x15, 0x97, 0x51, 0x8D,
> 0x7D, 0x25, 0x0A, 0xAF, 0x25, 0xE8, 0xDE,
> 
> +  0xDC, 0x9B, 0x67, 0x16, 0x0A, 0x56, 0x73, 0x9D, 0xB3,
> 0x1D, 0x85, 0x83, 0x0B, 0x7E, 0x33, 0x2B,
> 
> +  0x62, 0x33, 0xCE, 0x1C, 0x20, 0x81, 0x4B, 0x5E, 0xD3,
> 0xC6, 0x49, 0xB8, 0xF6, 0x2E, 0xD3, 0x4E,
> 
> +  0xB0, 0x71, 0x44, 0x46, 0x64, 0x3E, 0xDE, 0x43, 0x66,
> 0x04, 0xB9, 0xCC, 0x83, 0x48, 0x3A, 0xC5,
> 
> +  0x36, 0x7A, 0x04, 0x48, 0x0B, 0x89, 0x02, 0x3D, 0x63,
> 0xA2, 0x01, 0x76, 0x29, 0x97, 0x75, 0xE9,
> 
> +  0x01, 0xE6, 0x00, 0x97, 0x09, 0x92, 0xF8, 0xE2, 0x27,
> 0xF0, 0x29, 0x67, 0x43, 0x77, 0xC3, 0x50,
> 
> +  0x96, 0x53, 0x31, 0xE1, 0xB6, 0x71, 0x8B, 0xEC, 0x77,
> 0xC7, 0x7C, 0x31, 0x48, 0xD5, 0xB8, 0x25,
> 
> +  0x22, 0x8C, 0x00, 0xF7, 0x28, 0x38, 0x7A, 0xBD, 0x7C,
> 0xC7, 0x3F, 0xCD, 0x40, 0x26, 0x77, 0xDD,
> 
> +  0x00, 0x00, 0x11, 0x9A, 0x95, 0xBE, 0x1F, 0xDB, 0x02,
> 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x02,
> 
> +  0x3A, 0x30, 0x82, 0x02, 0x36, 0x30, 0x10, 0x06, 0x09,
> 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
> 
> +  0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x1D,
> 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16,
> 
> +  0x04, 0x14, 0x90, 0x8B, 0x11, 0xA5, 0x70, 0xED, 0xE0,
> 0xF9, 0xA9, 0xC0, 0xAC, 0x08, 0xC7, 0xB5,
> 
> +  0xF4, 0x82, 0xB1, 0x3C, 0xC5, 0x4A, 0x30, 0x0B, 0x06,
> 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03,
> 
> +  0x02, 0x01, 0xC6, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D,
> 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30,
> 
> +  0x03, 0x01, 0x01, 0xFF, 0x30, 0x81, 0x98, 0x06, 0x03,
> 0x55, 0x1D, 0x23, 0x04, 0x81, 0x90, 0x30,
> 
> +  0x81, 0x8D, 0x80, 0x14, 0x0E, 0xAC, 0x82, 0x60, 0x40,
> 0x56, 0x27, 0x97, 0xE5, 0x25, 0x13, 0xFC,
> 
> +  0x2A, 0xE1, 0x0A, 0x53, 0x95, 0x59, 0xE4, 0xA4, 0xA1,
> 0x63, 0xA4, 0x61, 0x30, 0x5F, 0x31, 0x13,
> 
> +  0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93,
> 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x03,
> 
> +  0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, 0x17, 0x06, 0x0A,
> 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C,
> 
> +  0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, 0x69, 0x63, 0x72,
> 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x31, 0x2D,
> 
> +  0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x24,
> 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
> 
> +  0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43,
> 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
> 
> +  0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F,
> 0x72, 0x69, 0x74, 0x79, 0x82, 0x10, 0x79,
> 
> +  0xAD, 0x16, 0xA1, 0x4A, 0xA0, 0xA5, 0xAD, 0x4C, 0x73,
> 0x58, 0xF4, 0x07, 0x13, 0x2E, 0x65, 0x30,
> 
> +  0x50, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x49, 0x30,
> 0x47, 0x30, 0x45, 0xA0, 0x43, 0xA0, 0x41,
> 
> +  0x86, 0x3F, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F,
> 0x63, 0x72, 0x6C, 0x2E, 0x6D, 0x69, 0x63,
> 
> +  0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F,
> 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x2F, 0x63,
> 
> +  0x72, 0x6C, 0x2F, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63,
> 0x74, 0x73, 0x2F, 0x6D, 0x69, 0x63, 0x72,
> 
> +  0x6F, 0x73, 0x6F, 0x66, 0x74, 0x72, 0x6F, 0x6F, 0x74,
> 0x63, 0x65, 0x72, 0x74, 0x2E, 0x63, 0x72,
> 
> +  0x6C, 0x30, 0x54, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05,
> 0x05, 0x07, 0x01, 0x01, 0x04, 0x48, 0x30,
> 
> +  0x46, 0x30, 0x44, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05,
> 0x05, 0x07, 0x30, 0x02, 0x86, 0x38, 0x68,
> 
> +  0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77,
> 0x2E, 0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73,
> 
> +  0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70,
> 0x6B, 0x69, 0x2F, 0x63, 0x65, 0x72, 0x74,
> 
> +  0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
> 0x66, 0x74, 0x52, 0x6F, 0x6F, 0x74, 0x43,
> 
> +  0x65, 0x72, 0x74, 0x2E, 0x63, 0x72, 0x74, 0x30, 0x81,
> 0x80, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04,
> 
> +  0x79, 0x30, 0x77, 0x30, 0x75, 0x06, 0x09, 0x2B, 0x06,
> 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x2F,
> 
> +  0x30, 0x68, 0x30, 0x66, 0x06, 0x08, 0x2B, 0x06, 0x01,
> 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 0x5A,
> 
> +  0x1E, 0x58, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00,
> 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67,
> 
> +  0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0xA9, 0x00,
> 0x20, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39,
> 
> +  0x00, 0x39, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x30, 0x00,
> 0x30, 0x00, 0x35, 0x00, 0x20, 0x00, 0x4D,
> 
> +  0x00, 0x69, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6F, 0x00,
> 0x73, 0x00, 0x6F, 0x00, 0x66, 0x00, 0x74,
> 
> +  0x00, 0x20, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x72, 0x00,
> 0x70, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x61,
> 
> +  0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00,
> 0x2E, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D,
> 
> +  0x25, 0x04, 0x18, 0x30, 0x16, 0x06, 0x08, 0x2B, 0x06,
> 0x01, 0x05, 0x05, 0x07, 0x03, 0x03, 0x06,
> 
> +  0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x0A,
> 0x03, 0x06, 0x30, 0x0D, 0x06, 0x09, 0x2A,
> 
> +  0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05,
> 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x25,
> 
> +  0x31, 0xA1, 0x58, 0xEA, 0x52, 0xE5, 0xE1, 0x17, 0x0C,
> 0xE6, 0xF1, 0x3F, 0x78, 0xA3, 0x3F, 0x72,
> 
> +  0xAF, 0xA7, 0x57, 0x10, 0x53, 0x89, 0x10, 0x5E, 0x32,
> 0x9C, 0xB6, 0x70, 0xC3, 0x15, 0x2B, 0x4D,
> 
> +  0x15, 0x30, 0x34, 0xE8, 0xC0, 0x6A, 0xE4, 0x1C, 0xD3,
> 0x2E, 0x20, 0x65, 0x48, 0xD7, 0x1B, 0x98,
> 
> +  0x62, 0x21, 0xBA, 0x45, 0x9F, 0x4A, 0xEC, 0xDB, 0x2F,
> 0x09, 0x19, 0x51, 0xE5, 0xED, 0x32, 0x19,
> 
> +  0x51, 0x2F, 0xE1, 0xDD, 0xFB, 0xC6, 0x52, 0xFD, 0xEB,
> 0xC6, 0x82, 0x25, 0x42, 0x03, 0x09, 0xA6,
> 
> +  0x38, 0xB6, 0x36, 0x1F, 0xCC, 0xC9, 0x80, 0xBB, 0x5A,
> 0x69, 0x18, 0x31, 0xC3, 0xB3, 0xA0, 0xB3,
> 
> +  0x67, 0x47, 0xBE, 0x9D, 0xC7, 0xE2, 0x3F, 0x96, 0xB3,
> 0x88, 0xF8, 0x19, 0xBE, 0x39, 0xB9, 0xE9,
> 
> +  0x95, 0xCE, 0xFC, 0x7C, 0xAF, 0xA8, 0xCD, 0xD0, 0x41,
> 0x90, 0xE0, 0xD5, 0xB3, 0x1C, 0x2F, 0x68,
> 
> +  0xBB, 0xDB, 0x0F, 0x6C, 0x6A, 0xDD, 0xF2, 0xAF, 0xDE,
> 0xF2, 0xB5, 0xDE, 0x0D, 0xB6, 0xA6, 0x5A,
> 
> +  0xF0, 0x86, 0x0A, 0xB9, 0x6D, 0x99, 0x4B, 0x3F, 0x7B,
> 0x2D, 0x01, 0x84, 0x6C, 0x8F, 0x87, 0xDC,
> 
> +  0x7F, 0x8F, 0xAB, 0x14, 0x88, 0xD0, 0x06, 0x91, 0x34,
> 0xBE, 0x1B, 0x82, 0x22, 0xA4, 0xBC, 0x55,
> 
> +  0x8A, 0xAD, 0x9B, 0xFC, 0x73, 0x14, 0x10, 0xC4, 0xC9,
> 0x19, 0x1E, 0x07, 0x7D, 0x9B, 0x0E, 0xC0,
> 
> +  0x95, 0x26, 0x5D, 0xC6, 0x1F, 0xAC, 0xB4, 0xF2, 0x7E,
> 0xBA, 0x25, 0x70, 0x4A, 0x7B, 0xD7, 0x8E,
> 
> +  0xD1, 0x9D, 0xA0, 0x13, 0x49, 0x7A, 0xB0, 0x02, 0x52,
> 0x52, 0x24, 0xF4, 0xAF, 0xDD, 0x40, 0x2D,
> 
> +  0xE5, 0x3E, 0x32, 0x58, 0xB3, 0x4A, 0x6A, 0xDD, 0x11,
> 0x59, 0xAA, 0x2D, 0xBC, 0xA4, 0xA0, 0x73,
> 
> +  0x38, 0xF9, 0x40, 0x77, 0x6B, 0x34, 0x19, 0x57, 0xCD,
> 0x38, 0x68, 0x27, 0x82, 0xF8, 0xD1, 0x6F,
> 
> +  0xEB, 0x23, 0xC0, 0x3F, 0x52, 0xF3, 0x4E, 0xD5, 0x02,
> 0x3E, 0x6A, 0x9A, 0x2B, 0xC1, 0xF5, 0x31,
> 
> +  0x71, 0xDB, 0x41, 0x4D, 0x3B, 0xDE, 0xEF, 0xAD, 0xAF,
> 0x1F, 0x88, 0x65, 0x43, 0x1B, 0x51, 0xB7,
> 
> +  0x9A, 0x75, 0xCA, 0x8E, 0x69, 0x49, 0x10, 0x8F, 0x78,
> 0x8A, 0x74, 0x45, 0xB9, 0x09, 0x8E, 0x73,
> 
> +  0x77, 0x07, 0x32, 0x4A, 0x4B, 0xD7, 0x68, 0x2B, 0x98,
> 0xC5, 0xBA, 0x54, 0xEA, 0x3F, 0xCB, 0xA2,
> 
> +  0x00, 0x8C, 0xBB, 0xD8, 0x10, 0x58, 0xF2, 0xDB, 0xDC,
> 0x9B, 0xCD, 0xD8, 0xEA, 0x48, 0x43, 0xE2,
> 
> +  0x4A, 0x7E, 0x65, 0xB2, 0xDC, 0xF5, 0x2D, 0x4E, 0x25,
> 0x67, 0xA8, 0xE0, 0xB5, 0xBA, 0xA7, 0xDD,
> 
> +  0x7E, 0x5E, 0xC1, 0x4C, 0x02, 0x74, 0xC9, 0xB3, 0x6E,
> 0xE3, 0xF8, 0xF0, 0x0B, 0xED, 0xFC, 0xB9,
> 
> +  0x29, 0xC5, 0x5B, 0xC9, 0x36, 0x51, 0x90, 0xDB, 0x78,
> 0x7D, 0xB9, 0x32, 0x0F, 0x5E, 0x76, 0xD2,
> 
> +  0x15, 0x5C, 0x3B, 0x37, 0x21, 0xC6, 0xDB, 0xC9, 0x19,
> 0x6E, 0xED, 0x74, 0x2A, 0x5C, 0x2C, 0x0B,
> 
> +  0x51, 0x49, 0x45, 0x53, 0xB0, 0xB2, 0xB3, 0x23, 0xD4,
> 0xA1, 0xB0, 0x5F, 0x0D, 0x19, 0xCD, 0x14,
> 
> +  0xA7, 0xE3, 0x3C, 0x9B, 0x97, 0x72, 0x94, 0x14, 0xDF,
> 0xFF, 0xC1, 0x90, 0x1B, 0xA5, 0xDF, 0xF5,
> 
> +  0xA9, 0xF3, 0x1B, 0x17, 0xDA, 0xB5, 0xFC, 0x44, 0xE0,
> 0xE8, 0xE2, 0x3C, 0xA2, 0x7A, 0xBB, 0xBB,
> 
> +  0x65, 0xE6, 0x4D, 0xB1, 0xB5, 0x15, 0xA1, 0xD9, 0x67,
> 0x3B, 0xB0, 0x0C, 0x7D, 0x3B, 0xE9, 0xEE,
> 
> +  0x51, 0x2A, 0x47, 0xF5, 0x15, 0x0F, 0x8C, 0xAD, 0x5D,
> 0x2E, 0x35, 0xDF, 0xF4, 0xA4, 0x2E, 0xF6,
> 
> +  0x13, 0x37, 0x5A, 0x2B, 0xE8, 0x55, 0x9A, 0x49, 0x2C,
> 0x97, 0xCE, 0x9D, 0x01, 0x9E, 0x97, 0x46,
> 
> +  0x5C, 0xD9, 0x2D, 0xBC, 0x24, 0x5A, 0x95, 0x59, 0x6F,
> 0x4D, 0xCA, 0x9D, 0xD6, 0x57, 0x26, 0x31,
> 
> +  0x82, 0x04, 0x96, 0x30, 0x82, 0x04, 0x92, 0x02, 0x01,
> 0x01, 0x30, 0x81, 0x90, 0x30, 0x81, 0x81,
> 
> +  0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06,
> 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30,
> 
> +  0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0A, 0x57,
> 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x74,
> 
> +  0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55,
> 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64,
> 
> +  0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E, 0x30, 0x1C, 0x06,
> 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x4D,
> 
> +  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20,
> 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61,
> 
> +  0x74, 0x69, 0x6F, 0x6E, 0x31, 0x2B, 0x30, 0x29, 0x06,
> 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x4D,
> 
> +  0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20,
> 0x57, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x73,
> 
> +  0x20, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61,
> 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x50, 0x43,
> 
> +  0x41, 0x02, 0x0A, 0x61, 0x01, 0xC6, 0xC1, 0x00, 0x00,
> 0x00, 0x00, 0x00, 0x07, 0x30, 0x09, 0x06,
> 
> +  0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0xA0,
> 0x81, 0xBA, 0x30, 0x19, 0x06, 0x09, 0x2A,
> 
> +  0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x03, 0x31,
> 0x0C, 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04,
> 
> +  0x01, 0x82, 0x37, 0x02, 0x01, 0x04, 0x30, 0x1C, 0x06,
> 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82,
> 
> +  0x37, 0x02, 0x01, 0x0B, 0x31, 0x0E, 0x30, 0x0C, 0x06,
> 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82,
> 
> +  0x37, 0x02, 0x01, 0x15, 0x30, 0x23, 0x06, 0x09, 0x2A,
> 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09,
> 
> +  0x04, 0x31, 0x16, 0x04, 0x14, 0xC5, 0xC5, 0xC1, 0xC3,
> 0x46, 0xC4, 0x12, 0xB9, 0x38, 0xED, 0xE5,
> 
> +  0x7E, 0x66, 0x78, 0x4E, 0x8F, 0x55, 0x10, 0x7D, 0xAC,
> 0x30, 0x5A, 0x06, 0x0A, 0x2B, 0x06, 0x01,
> 
> +  0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x0C, 0x31, 0x4C,
> 0x30, 0x4A, 0xA0, 0x24, 0x80, 0x22, 0x00,
> 
> +  0x4D, 0x00, 0x69, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6F,
> 0x00, 0x73, 0x00, 0x6F, 0x00, 0x66, 0x00,
> 
> +  0x74, 0x00, 0x20, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E,
> 0x00, 0x64, 0x00, 0x6F, 0x00, 0x77, 0x00,
> 
> +  0x73, 0xA1, 0x22, 0x80, 0x20, 0x68, 0x74, 0x74, 0x70,
> 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E,
> 
> +  0x6D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74,
> 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x77, 0x69,
> 
> +  0x6E, 0x64, 0x6F, 0x77, 0x73, 0x30, 0x0D, 0x06, 0x09,
> 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
> 
> +  0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0xC0,
> 0x53, 0x19, 0xE7, 0x27, 0xE6, 0xD6, 0xD7,
> 
> +  0xA8, 0xAE, 0xA0, 0xE6, 0x4C, 0xEF, 0x9A, 0xBC, 0x1D,
> 0x19, 0xD4, 0xC5, 0x7F, 0x7C, 0x71, 0xFF,
> 
> +  0x14, 0x7C, 0xAD, 0x7A, 0x8F, 0x2D, 0x0F, 0x40, 0x38,
> 0x9B, 0x83, 0x09, 0xEE, 0xF5, 0x34, 0x92,
> 
> +  0xB4, 0x85, 0x34, 0x7C, 0xBA, 0x9B, 0x58, 0x5D, 0xA6,
> 0x15, 0xDE, 0x99, 0xBF, 0x25, 0x89, 0xDB,
> 
> +  0xC0, 0x3A, 0x98, 0x21, 0x1C, 0x25, 0x09, 0xBD, 0x41,
> 0xAA, 0x0F, 0x90, 0x6C, 0x62, 0xE9, 0xBD,
> 
> +  0x1D, 0xDD, 0x7C, 0xA4, 0x1F, 0x19, 0x3F, 0xC8, 0x11,
> 0xF5, 0x1C, 0x9E, 0xEA, 0x2E, 0x1A, 0xCE,
> 
> +  0x5A, 0x61, 0x8A, 0x77, 0xFA, 0x65, 0x1F, 0x03, 0xB4,
> 0x45, 0x02, 0x0F, 0xB4, 0x0E, 0xB9, 0x44,
> 
> +  0xF6, 0x75, 0xF6, 0x67, 0x91, 0xAD, 0xFA, 0xF9, 0xC3,
> 0xFA, 0x63, 0x91, 0x58, 0xFE, 0x40, 0xDF,
> 
> +  0x92, 0x6B, 0x59, 0x42, 0x44, 0x66, 0xD2, 0x88, 0x49,
> 0x59, 0x29, 0x1D, 0x6A, 0xF9, 0x93, 0x9B,
> 
> +  0xD5, 0x38, 0x84, 0x96, 0xD7, 0xAF, 0xBA, 0xEC, 0x29,
> 0x8D, 0x06, 0x8C, 0x8B, 0xF4, 0xA1, 0x56,
> 
> +  0x0F, 0x78, 0x3F, 0x35, 0xCB, 0x12, 0x8A, 0x85, 0xD5,
> 0x7C, 0xFC, 0x63, 0xDD, 0x72, 0xA1, 0x13,
> 
> +  0xD3, 0x25, 0x4A, 0x59, 0x21, 0xD0, 0xC6, 0x47, 0x9F,
> 0x22, 0xF7, 0xF8, 0x32, 0xA2, 0x05, 0x2B,
> 
> +  0x53, 0xC5, 0x96, 0x98, 0x0D, 0x39, 0x02, 0xAD, 0x85,
> 0xF7, 0x18, 0x73, 0x34, 0x12, 0x7F, 0x5A,
> 
> +  0xCB, 0xE1, 0xA2, 0xFB, 0x4E, 0x25, 0x81, 0xF0, 0x9F,
> 0x7A, 0x79, 0xDB, 0x4F, 0x4B, 0x66, 0x44,
> 
> +  0x30, 0x8E, 0x0D, 0x57, 0x23, 0xD3, 0x7F, 0x60, 0x87,
> 0xDE, 0xD0, 0x4C, 0x90, 0x90, 0x84, 0x64,
> 
> +  0x70, 0xE8, 0x15, 0x65, 0xCA, 0x18, 0xF8, 0x9A, 0xB6,
> 0x0C, 0x24, 0xF5, 0xDF, 0xC3, 0x47, 0xE2,
> 
> +  0x7C, 0xAD, 0x91, 0x70, 0x6D, 0xF8, 0x43, 0xE9, 0xA1,
> 0x82, 0x02, 0x1D, 0x30, 0x82, 0x02, 0x19,
> 
> +  0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
> 0x09, 0x06, 0x31, 0x82, 0x02, 0x0A, 0x30,
> 
> +  0x82, 0x02, 0x06, 0x02, 0x01, 0x01, 0x30, 0x81, 0x85,
> 0x30, 0x77, 0x31, 0x0B, 0x30, 0x09, 0x06,
> 
> +  0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31,
> 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x08, 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E,
> 0x67, 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30,
> 
> +  0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52,
> 0x65, 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31,
> 
> +  0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13,
> 0x15, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73,
> 
> +  0x6F, 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F,
> 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31,
> 
> +  0x21, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13,
> 0x18, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73,
> 
> +  0x6F, 0x66, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2D,
> 0x53, 0x74, 0x61, 0x6D, 0x70, 0x20, 0x50,
> 
> +  0x43, 0x41, 0x02, 0x0A, 0x61, 0x03, 0xDC, 0xF6, 0x00,
> 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30, 0x07,
> 
> +  0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0xA0, 0x5D,
> 0x30, 0x18, 0x06, 0x09, 0x2A, 0x86, 0x48,
> 
> +  0x86, 0xF7, 0x0D, 0x01, 0x09, 0x03, 0x31, 0x0B, 0x06,
> 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
> 
> +  0x01, 0x07, 0x01, 0x30, 0x1C, 0x06, 0x09, 0x2A, 0x86,
> 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x05,
> 
> +  0x31, 0x0F, 0x17, 0x0D, 0x30, 0x39, 0x30, 0x34, 0x32,
> 0x32, 0x30, 0x35, 0x35, 0x34, 0x33, 0x34,
> 
> +  0x5A, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
> 0xF7, 0x0D, 0x01, 0x09, 0x04, 0x31, 0x16,
> 
> +  0x04, 0x14, 0x74, 0xD7, 0x54, 0xA0, 0xC0, 0x9E, 0x62,
> 0xF0, 0xDD, 0x92, 0xDC, 0xD6, 0x96, 0x34,
> 
> +  0xA1, 0x0B, 0xF0, 0xD5, 0xB5, 0x3A, 0x30, 0x0D, 0x06,
> 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
> 
> +  0x01, 0x01, 0x05, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00,
> 0x8D, 0x16, 0xB5, 0xC8, 0x3D, 0xBC, 0x8A,
> 
> +  0xB5, 0xC3, 0x23, 0xF3, 0x33, 0xB0, 0xFA, 0x75, 0xAD,
> 0xAC, 0x53, 0x0D, 0x5C, 0xF4, 0xD9, 0xBE,
> 
> +  0x63, 0xEB, 0x0D, 0x6F, 0x69, 0x63, 0x91, 0xF8, 0x8E,
> 0x67, 0x03, 0xE1, 0xC6, 0x2E, 0xCD, 0x9C,
> 
> +  0xEB, 0xDD, 0x9C, 0xCA, 0x65, 0x4A, 0xBB, 0xF2, 0xF4,
> 0x1C, 0x85, 0x44, 0xD6, 0x58, 0x70, 0x2E,
> 
> +  0x3B, 0xFE, 0x97, 0xD0, 0xEC, 0x72, 0x77, 0x20, 0xA8,
> 0x20, 0xAC, 0xF0, 0xED, 0x86, 0xC4, 0xFF,
> 
> +  0x3A, 0x3D, 0x40, 0xD9, 0xF6, 0xD5, 0x99, 0xBE, 0xCC,
> 0xD2, 0xD8, 0xBA, 0x71, 0x51, 0x60, 0xAA,
> 
> +  0x72, 0x36, 0x13, 0x8B, 0x0A, 0xA9, 0xD6, 0xF5, 0x36,
> 0xE0, 0x44, 0x6B, 0xC1, 0x44, 0x42, 0x43,
> 
> +  0x56, 0x1A, 0xD6, 0xF1, 0x5A, 0x98, 0xCC, 0xBA, 0xA9,
> 0x4C, 0xCF, 0xC9, 0x86, 0xC3, 0x5B, 0x1C,
> 
> +  0xDF, 0x75, 0x22, 0x54, 0x6A, 0xF0, 0x18, 0x34, 0x0B,
> 0x29, 0xB0, 0x26, 0x07, 0x59, 0xB6, 0x52,
> 
> +  0x7B, 0x69, 0x74, 0x11, 0x1B, 0xB8, 0x29, 0x19, 0x36,
> 0x0E, 0xB7, 0x65, 0xCB, 0x87, 0x09, 0x9E,
> 
> +  0x03, 0x28, 0x6C, 0xDB, 0xA7, 0xFB, 0xDF, 0xC7, 0xF7,
> 0xCE, 0x0D, 0xC2, 0xBA, 0xEA, 0x3C, 0xE8,
> 
> +  0x43, 0x1E, 0x7F, 0xF2, 0x64, 0xDA, 0x87, 0x89, 0xC0,
> 0xCD, 0x67, 0xE4, 0x84, 0x9B, 0xA7, 0x77,
> 
> +  0xFA, 0x6C, 0x69, 0x19, 0x5B, 0xD1, 0xF7, 0xD9, 0x07,
> 0x91, 0x50, 0xDD, 0x98, 0x26, 0x10, 0xE3,
> 
> +  0x2E, 0x39, 0x62, 0xF0, 0x56, 0xE9, 0xD9, 0x5C, 0x85,
> 0x67, 0x9B, 0x2F, 0xDE, 0xD1, 0x00, 0x45,
> 
> +  0x0E, 0x99, 0x1F, 0xDF, 0x7E, 0xC9, 0x10, 0x56, 0xC7,
> 0x00, 0x6D, 0x5F, 0x23, 0x57, 0x12, 0x84,
> 
> +  0xCD, 0xAC, 0x82, 0xAE, 0x39, 0x52, 0xA5, 0x19, 0x23,
> 0xA3, 0x6B, 0xE7, 0x49, 0x8F, 0x86, 0x74,
> 
> +  0x46, 0x41, 0x2A, 0x0F, 0x3D, 0x29, 0xB7, 0xAE, 0x8C,
> 0x00
> 
> +  };
> 
> +
> 
> +//
> 
> +// Sample Authenticode Data with SHA-256 hash
> algorithm.
> 
> +// This data should be retrieved from signed PE/COFF
> image according to SECURITY
> 
> +// directory in PE/COFF Header.
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED UINT8
> AuthenticodeWithSha256[] = {
> 
> +  0x30, 0x82, 0x0e, 0xd1, 0x06, 0x09, 0x2a, 0x86, 0x48,
> 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0,
> 
> +  0x82, 0x0e, 0xc2, 0x30, 0x82, 0x0e, 0xbe, 0x02, 0x01,
> 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09,
> 
> +  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01,
> 0x05, 0x00, 0x30, 0x5c, 0x06, 0x0a, 0x2b,
> 
> +  0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04,
> 0xa0, 0x4e, 0x30, 0x4c, 0x30, 0x17, 0x06,
> 
> +  0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02,
> 0x01, 0x0f, 0x30, 0x09, 0x03, 0x01, 0x00,
> 
> +  0xa0, 0x04, 0xa2, 0x02, 0x80, 0x00, 0x30, 0x31, 0x30,
> 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01,
> 
> +  0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20,
> 0x61, 0x82, 0xb7, 0xf8, 0x8c, 0xff, 0xc2,
> 
> +  0xeb, 0x79, 0x6e, 0x9d, 0xa9, 0xdd, 0x39, 0x52, 0xdd,
> 0x36, 0xdd, 0xf1, 0x43, 0x27, 0x58, 0x8c,
> 
> +  0xa7, 0xcc, 0xae, 0xde, 0xdd, 0x3c, 0x02, 0x12, 0x49,
> 0xa0, 0x82, 0x0c, 0x0a, 0x30, 0x82, 0x05,
> 
> +  0xe5, 0x30, 0x82, 0x03, 0xcd, 0xa0, 0x03, 0x02, 0x01,
> 0x02, 0x02, 0x0a, 0x61, 0x03, 0x5f, 0x09,
> 
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x30, 0x0d, 0x06,
> 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
> 
> +  0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x90, 0x31,
> 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11,
> 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a,
> 
> +  0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f,
> 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d,
> 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c,
> 
> +  0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69,
> 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
> 
> +  0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74,
> 0x69, 0x6f, 0x6e, 0x31, 0x3a, 0x30, 0x38,
> 
> +  0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x31, 0x4d, 0x69,
> 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
> 
> +  0x20, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20,
> 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65,
> 
> +  0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65,
> 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72,
> 
> +  0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, 0x30, 0x30,
> 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x36,
> 
> +  0x32, 0x31, 0x32, 0x32, 0x35, 0x35, 0x30, 0x31, 0x5a,
> 0x17, 0x0d, 0x31, 0x34, 0x30, 0x36, 0x32,
> 
> +  0x31, 0x32, 0x33, 0x30, 0x35, 0x30, 0x31, 0x5a, 0x30,
> 0x81, 0x81, 0x31, 0x13, 0x30, 0x11, 0x06,
> 
> +  0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64,
> 0x01, 0x19, 0x16, 0x03, 0x63, 0x6f, 0x6d,
> 
> +  0x31, 0x19, 0x30, 0x17, 0x06, 0x0a, 0x09, 0x92, 0x26,
> 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19,
> 
> +  0x16, 0x09, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f,
> 0x66, 0x74, 0x31, 0x14, 0x30, 0x12, 0x06,
> 
> +  0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64,
> 0x01, 0x19, 0x16, 0x04, 0x63, 0x6f, 0x72,
> 
> +  0x70, 0x31, 0x17, 0x30, 0x15, 0x06, 0x0a, 0x09, 0x92,
> 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01,
> 
> +  0x19, 0x16, 0x07, 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x6e,
> 0x64, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x03, 0x13, 0x17, 0x4d, 0x53, 0x49, 0x54,
> 0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x43,
> 
> +  0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43,
> 0x41, 0x20, 0x33, 0x30, 0x82, 0x01, 0x22,
> 
> +  0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
> 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03,
> 
> +  0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02,
> 0x82, 0x01, 0x01, 0x00, 0x9b, 0x71, 0xdd,
> 
> +  0x0d, 0x32, 0x2d, 0x08, 0xe8, 0x2d, 0x01, 0x90, 0x9c,
> 0xdf, 0x9f, 0x32, 0x58, 0x8b, 0x47, 0xd0,
> 
> +  0xfe, 0x9a, 0x6b, 0x40, 0x5e, 0x76, 0xa2, 0x10, 0x00,
> 0x0e, 0xd2, 0x8f, 0xce, 0xa1, 0x5f, 0x42,
> 
> +  0xa7, 0x0b, 0x5e, 0x83, 0xc2, 0xe9, 0x06, 0xa6, 0x0a,
> 0xb4, 0x3d, 0x30, 0x50, 0xdb, 0x35, 0x43,
> 
> +  0x2c, 0xd3, 0xc3, 0xc6, 0x3c, 0xc9, 0xb5, 0x88, 0xfc,
> 0x0b, 0xe6, 0xa3, 0x71, 0x47, 0xce, 0xfd,
> 
> +  0x88, 0x62, 0xa4, 0x25, 0xe2, 0x4e, 0x1b, 0x79, 0x3d,
> 0xe3, 0xbf, 0x8b, 0x84, 0x2d, 0x64, 0x25,
> 
> +  0xa5, 0xfa, 0x8e, 0x30, 0xae, 0xe3, 0x34, 0x7d, 0x27,
> 0xf3, 0x5e, 0xf4, 0x05, 0x60, 0xc6, 0x0f,
> 
> +  0x1a, 0x1b, 0x9e, 0xaf, 0x21, 0x37, 0xa9, 0xd9, 0xb6,
> 0xb7, 0x6a, 0x54, 0x4b, 0x5e, 0xa0, 0x75,
> 
> +  0xb5, 0x9a, 0xc4, 0xb6, 0xbe, 0x28, 0xe3, 0x3b, 0xf7,
> 0x5a, 0x08, 0x77, 0xd9, 0x39, 0x4a, 0x2a,
> 
> +  0x7a, 0xf8, 0xf4, 0xfe, 0xe8, 0x12, 0x54, 0x41, 0x11,
> 0x55, 0xc8, 0xc7, 0x98, 0x3e, 0x64, 0xa5,
> 
> +  0xbb, 0xda, 0x6b, 0xa4, 0xaa, 0x29, 0x8c, 0x9f, 0x27,
> 0x55, 0x25, 0xe7, 0xfd, 0x31, 0x70, 0x60,
> 
> +  0x1d, 0xd3, 0xc4, 0xf2, 0xb9, 0xef, 0x92, 0x4a, 0x9f,
> 0xc8, 0x4c, 0x93, 0xe7, 0x19, 0xa8, 0x4e,
> 
> +  0xbc, 0xe3, 0x62, 0xf4, 0xe0, 0x6e, 0xec, 0x45, 0x6e,
> 0x61, 0x4e, 0xad, 0x58, 0xe0, 0xf0, 0xea,
> 
> +  0xf7, 0x74, 0x2c, 0xdf, 0x1b, 0xf6, 0x43, 0x3c, 0x84,
> 0xc2, 0x8c, 0x0b, 0xb4, 0xbd, 0x4a, 0x57,
> 
> +  0xa6, 0x0c, 0x4e, 0x9e, 0x73, 0x43, 0x5f, 0x2d, 0xaf,
> 0x22, 0xf4, 0xa6, 0xfd, 0x5a, 0x87, 0xb9,
> 
> +  0xbe, 0x6f, 0x9e, 0x1d, 0x99, 0xc8, 0xdf, 0x95, 0xc2,
> 0x02, 0xad, 0x7d, 0x4a, 0xf3, 0xba, 0x5d,
> 
> +  0xe8, 0x7b, 0x6e, 0x57, 0xe5, 0x3a, 0x02, 0xf8, 0xd3,
> 0x01, 0x15, 0xae, 0x4f, 0x02, 0x03, 0x01,
> 
> +  0x00, 0x01, 0xa3, 0x82, 0x01, 0x4c, 0x30, 0x82, 0x01,
> 0x48, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06,
> 
> +  0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03,
> 0x02, 0x01, 0x00, 0x30, 0x1d, 0x06, 0x03,
> 
> +  0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x4e, 0xfe,
> 0x61, 0x39, 0x6f, 0xca, 0xc5, 0x64, 0xe0,
> 
> +  0x20, 0xb6, 0xda, 0xc1, 0xb9, 0x52, 0x0e, 0xca, 0xdf,
> 0x8e, 0xfe, 0x30, 0x19, 0x06, 0x09, 0x2b,
> 
> +  0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04,
> 0x0c, 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75,
> 
> +  0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06,
> 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03,
> 
> +  0x02, 0x01, 0x86, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d,
> 0x13, 0x01, 0x01, 0xff, 0x04, 0x08, 0x30,
> 
> +  0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x00, 0x30, 0x1f,
> 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18,
> 
> +  0x30, 0x16, 0x80, 0x14, 0xa3, 0x01, 0x04, 0x7e, 0x30,
> 0x88, 0x33, 0xeb, 0xb9, 0x31, 0x9c, 0xca,
> 
> +  0xeb, 0x85, 0x76, 0x67, 0xfc, 0x65, 0xb4, 0xd1, 0x30,
> 0x59, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04,
> 
> +  0x52, 0x30, 0x50, 0x30, 0x4e, 0xa0, 0x4c, 0xa0, 0x4a,
> 0x86, 0x48, 0x68, 0x74, 0x74, 0x70, 0x3a,
> 
> +  0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63,
> 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e,
> 
> +  0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63,
> 0x72, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
> 
> +  0x75, 0x63, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x54,
> 0x65, 0x73, 0x52, 0x6f, 0x6f, 0x43, 0x65,
> 
> +  0x72, 0x41, 0x75, 0x74, 0x5f, 0x32, 0x30, 0x31, 0x30,
> 0x2d, 0x30, 0x36, 0x2d, 0x31, 0x37, 0x2e,
> 
> +  0x63, 0x72, 0x6c, 0x30, 0x5d, 0x06, 0x08, 0x2b, 0x06,
> 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04,
> 
> +  0x51, 0x30, 0x4f, 0x30, 0x4d, 0x06, 0x08, 0x2b, 0x06,
> 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86,
> 
> +  0x41, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
> 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72,
> 
> +  0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d,
> 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x65,
> 
> +  0x72, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x54, 0x65,
> 0x73, 0x52, 0x6f, 0x6f, 0x43, 0x65, 0x72,
> 
> +  0x41, 0x75, 0x74, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d,
> 0x30, 0x36, 0x2d, 0x31, 0x37, 0x2e, 0x63,
> 
> +  0x72, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48,
> 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05,
> 
> +  0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x91, 0x2d, 0x11,
> 0x36, 0xd1, 0x2c, 0x5e, 0x21, 0x77, 0x62,
> 
> +  0x1a, 0xa1, 0xcf, 0x9a, 0x7e, 0x62, 0x2d, 0xc9, 0x90,
> 0xb9, 0x0e, 0x3d, 0x71, 0x0d, 0xa0, 0x4a,
> 
> +  0x48, 0xad, 0xe1, 0xd6, 0xb0, 0x73, 0x4a, 0x51, 0x4b,
> 0x4c, 0xb2, 0x6b, 0x88, 0x0a, 0x5a, 0xb7,
> 
> +  0xe9, 0x55, 0x67, 0x43, 0x8b, 0xf1, 0x9d, 0xcc, 0x52,
> 0x03, 0xaf, 0xac, 0x85, 0xe9, 0xd3, 0x75,
> 
> +  0xce, 0xe5, 0x6f, 0x8b, 0x3c, 0x80, 0x81, 0xab, 0xd1,
> 0xd1, 0x73, 0x0d, 0x6b, 0xb0, 0x51, 0xb8,
> 
> +  0xa2, 0x5e, 0x0c, 0x09, 0xe5, 0xa6, 0xbc, 0x54, 0x49,
> 0xe5, 0x54, 0x38, 0x5a, 0xb7, 0x43, 0xd2,
> 
> +  0x75, 0x34, 0x52, 0xdd, 0x35, 0x79, 0x95, 0x98, 0xd5,
> 0x3c, 0xc6, 0xda, 0x46, 0xb2, 0xd8, 0xa0,
> 
> +  0xa7, 0xcc, 0x30, 0x31, 0x0f, 0x4b, 0xeb, 0xb7, 0x02,
> 0xab, 0x2b, 0x38, 0xd2, 0xb7, 0x27, 0xc2,
> 
> +  0xc7, 0x0d, 0x62, 0xa4, 0xc0, 0x48, 0xf4, 0x1a, 0x48,
> 0x79, 0x7d, 0xe1, 0x31, 0xa4, 0x5d, 0x19,
> 
> +  0xd0, 0x18, 0x17, 0x00, 0xca, 0xe3, 0x5d, 0x0b, 0xc1,
> 0x85, 0x7f, 0xf1, 0xbe, 0xd3, 0xcb, 0x97,
> 
> +  0xf4, 0x1b, 0x62, 0x0f, 0xd7, 0x14, 0x38, 0x8d, 0xb2,
> 0x2e, 0x98, 0xd4, 0x41, 0x6a, 0xb0, 0xb5,
> 
> +  0x84, 0xee, 0xd8, 0x2c, 0x2d, 0x13, 0xfc, 0x50, 0x1d,
> 0x9a, 0x6f, 0x31, 0x87, 0x1c, 0xe0, 0xd0,
> 
> +  0xd0, 0xd3, 0x24, 0x52, 0xdf, 0x12, 0x8d, 0xfb, 0xf7,
> 0x7f, 0x33, 0x04, 0x17, 0x7a, 0x8b, 0xe3,
> 
> +  0xbd, 0x7c, 0x1e, 0xa2, 0x2a, 0x91, 0x76, 0xd9, 0xfc,
> 0x43, 0x17, 0xa7, 0x0a, 0xa1, 0xd9, 0xc6,
> 
> +  0x3c, 0x3a, 0x42, 0xed, 0xb7, 0x12, 0xcd, 0x9e, 0xdd,
> 0xfe, 0x91, 0x9d, 0x98, 0xb5, 0x35, 0xe8,
> 
> +  0x94, 0xdd, 0x9a, 0xce, 0xd4, 0xf4, 0xac, 0xca, 0xa6,
> 0xcd, 0x59, 0x3d, 0xde, 0x44, 0xbf, 0x0e,
> 
> +  0x82, 0xe5, 0xdf, 0x5c, 0xe3, 0x49, 0xcb, 0x01, 0xa0,
> 0x7f, 0x7b, 0xe2, 0x25, 0x21, 0xab, 0x95,
> 
> +  0x50, 0x1e, 0x9f, 0xea, 0x77, 0x56, 0x47, 0x74, 0x73,
> 0xf2, 0x25, 0x1b, 0x0e, 0x36, 0xb9, 0xa2,
> 
> +  0x57, 0xbf, 0x2c, 0x57, 0xbc, 0xe4, 0xfb, 0x88, 0xb1,
> 0x83, 0x56, 0xd8, 0x3c, 0xe0, 0x7c, 0xfd,
> 
> +  0x11, 0x9f, 0xde, 0xe1, 0xb7, 0xd4, 0xc6, 0x23, 0xaf,
> 0xae, 0xc7, 0x5e, 0x4f, 0xc5, 0x23, 0x74,
> 
> +  0x98, 0x38, 0x74, 0x9d, 0x0d, 0x0d, 0x6d, 0xf4, 0xde,
> 0x28, 0x44, 0x41, 0xd8, 0x22, 0x68, 0xe7,
> 
> +  0x57, 0xa7, 0x66, 0x74, 0xb5, 0xc3, 0x31, 0x24, 0xe2,
> 0x7c, 0xd5, 0x52, 0x5d, 0x8a, 0xd2, 0x4e,
> 
> +  0x14, 0xbb, 0x08, 0xd3, 0x1a, 0x31, 0x12, 0x04, 0x58,
> 0x9b, 0x3a, 0x99, 0x78, 0x93, 0x51, 0x3f,
> 
> +  0x0b, 0x85, 0xce, 0xde, 0x09, 0x58, 0xf9, 0x96, 0x1b,
> 0x91, 0x11, 0xa0, 0x68, 0x53, 0x33, 0xcb,
> 
> +  0xbe, 0x08, 0x89, 0xcc, 0x95, 0x55, 0xae, 0x06, 0x78,
> 0x27, 0x99, 0xa2, 0x56, 0xef, 0xae, 0x95,
> 
> +  0x0a, 0x7f, 0x0d, 0xeb, 0x43, 0x0c, 0xc6, 0x9e, 0x3f,
> 0x80, 0xbb, 0xc4, 0x74, 0x03, 0x9d, 0xb8,
> 
> +  0x1a, 0xaa, 0xbc, 0xcb, 0x1e, 0x03, 0xfb, 0xd8, 0x49,
> 0x89, 0x9d, 0x20, 0xaa, 0x25, 0x4b, 0x47,
> 
> +  0x67, 0xf4, 0xa7, 0x0d, 0x8d, 0x76, 0x30, 0xc6, 0x48,
> 0xce, 0xdd, 0x8d, 0xfa, 0xbe, 0xda, 0xb4,
> 
> +  0xeb, 0x3d, 0xd8, 0x0c, 0x3b, 0x15, 0x9a, 0xd1, 0x83,
> 0x85, 0xe5, 0xe3, 0x92, 0xaa, 0x3b, 0xad,
> 
> +  0x34, 0x0c, 0x39, 0xf1, 0x7f, 0x75, 0xae, 0xe8, 0x70,
> 0xb0, 0xfd, 0xf2, 0x8e, 0x29, 0xda, 0xdc,
> 
> +  0x09, 0x4f, 0x8a, 0x7b, 0x63, 0xbe, 0x1e, 0x8a, 0xc3,
> 0x58, 0xd1, 0x03, 0xbe, 0x37, 0xe9, 0xed,
> 
> +  0x32, 0x26, 0xa8, 0x0c, 0xfe, 0xed, 0x12, 0xa7, 0x63,
> 0x04, 0xb3, 0x92, 0x97, 0xd9, 0x46, 0xa3,
> 
> +  0x33, 0x33, 0x9c, 0x5b, 0xbc, 0x54, 0x30, 0x82, 0x06,
> 0x1d, 0x30, 0x82, 0x05, 0x05, 0xa0, 0x03,
> 
> +  0x02, 0x01, 0x02, 0x02, 0x0a, 0x4e, 0x30, 0xa5, 0xbb,
> 0x00, 0x00, 0x00, 0x12, 0x7b, 0xf2, 0x30,
> 
> +  0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
> 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81,
> 
> +  0x81, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0a, 0x09, 0x92,
> 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01,
> 
> +  0x19, 0x16, 0x03, 0x63, 0x6f, 0x6d, 0x31, 0x19, 0x30,
> 0x17, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89,
> 
> +  0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6d,
> 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66,
> 
> +  0x74, 0x31, 0x14, 0x30, 0x12, 0x06, 0x0a, 0x09, 0x92,
> 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01,
> 
> +  0x19, 0x16, 0x04, 0x63, 0x6f, 0x72, 0x70, 0x31, 0x17,
> 0x30, 0x15, 0x06, 0x0a, 0x09, 0x92, 0x26,
> 
> +  0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x07,
> 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64,
> 
> +  0x31, 0x20, 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03,
> 0x13, 0x17, 0x4d, 0x53, 0x49, 0x54, 0x20,
> 
> +  0x54, 0x65, 0x73, 0x74, 0x20, 0x43, 0x6f, 0x64, 0x65,
> 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x41,
> 
> +  0x20, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x30,
> 0x34, 0x32, 0x31, 0x30, 0x33, 0x33, 0x33,
> 
> +  0x34, 0x39, 0x5a, 0x17, 0x0d, 0x31, 0x33, 0x30, 0x34,
> 0x32, 0x30, 0x30, 0x33, 0x33, 0x33, 0x34,
> 
> +  0x39, 0x5a, 0x30, 0x70, 0x31, 0x0b, 0x30, 0x09, 0x06,
> 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55,
> 
> +  0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
> 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68,
> 
> +  0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30,
> 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13,
> 
> +  0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31,
> 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73,
> 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72,
> 
> +  0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31,
> 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x03, 0x13, 0x11, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73,
> 0x6f, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6e,
> 
> +  0x64, 0x6f, 0x77, 0x73, 0x30, 0x82, 0x01, 0x22, 0x30,
> 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
> 
> +  0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82,
> 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a,
> 
> +  0x02, 0x82, 0x01, 0x01, 0x00, 0xca, 0x9f, 0xcb, 0x8c,
> 0x5e, 0x61, 0x19, 0xb5, 0x37, 0x72, 0xd1,
> 
> +  0xe2, 0x88, 0x1f, 0x37, 0x56, 0xce, 0xa8, 0x88, 0x05,
> 0x3e, 0xe8, 0xa6, 0x8d, 0xfd, 0x0b, 0x30,
> 
> +  0x63, 0x54, 0x89, 0x1d, 0xda, 0x11, 0x70, 0x5a, 0x06,
> 0x00, 0x86, 0xd7, 0x7f, 0xe6, 0x21, 0x70,
> 
> +  0x41, 0x81, 0x26, 0x4b, 0x6e, 0xc7, 0x02, 0xe2, 0xbf,
> 0x61, 0x45, 0x04, 0x2f, 0x45, 0xbc, 0xd2,
> 
> +  0x0d, 0xf6, 0xac, 0xda, 0x91, 0x6d, 0xc6, 0x60, 0xad,
> 0xb3, 0x0b, 0x32, 0xe5, 0x13, 0x95, 0x96,
> 
> +  0x02, 0x4e, 0x10, 0xad, 0x2e, 0x6c, 0xb0, 0xc7, 0x65,
> 0x6d, 0xea, 0x89, 0x91, 0x67, 0x73, 0x5d,
> 
> +  0x05, 0x12, 0x9f, 0x95, 0x74, 0x6a, 0x6d, 0xb0, 0x6a,
> 0xd8, 0x94, 0x9b, 0xb0, 0x70, 0x79, 0xb0,
> 
> +  0x85, 0x42, 0xe7, 0xd7, 0x19, 0xc4, 0x33, 0xfd, 0xac,
> 0xbe, 0x2b, 0xd5, 0x7e, 0x5a, 0xa9, 0xc7,
> 
> +  0xa7, 0x68, 0x53, 0xed, 0xaa, 0x51, 0x2a, 0x6b, 0xac,
> 0x5a, 0xd7, 0x6e, 0xcf, 0x68, 0x60, 0x90,
> 
> +  0xc7, 0xda, 0xd1, 0xe7, 0xf2, 0x53, 0x4a, 0x01, 0xaf,
> 0xe8, 0xb1, 0x29, 0x91, 0xab, 0x4c, 0x58,
> 
> +  0x64, 0xe6, 0xb6, 0xcc, 0xdc, 0x0f, 0x43, 0xf2, 0x87,
> 0x15, 0xf8, 0x73, 0x06, 0xb8, 0x1f, 0xaa,
> 
> +  0xf2, 0x66, 0x49, 0x82, 0xca, 0xf0, 0xdd, 0x4c, 0x7c,
> 0xd5, 0xe7, 0x59, 0xb7, 0xc6, 0xd3, 0x81,
> 
> +  0x29, 0x5c, 0xce, 0xe4, 0xfd, 0xf7, 0xeb, 0x58, 0x6b,
> 0x50, 0x79, 0x72, 0x83, 0x4d, 0x59, 0xec,
> 
> +  0xd1, 0xd2, 0xfc, 0x3a, 0x10, 0xc5, 0x7a, 0xba, 0x90,
> 0xea, 0xfd, 0x54, 0xc7, 0xc8, 0x58, 0x2d,
> 
> +  0x84, 0xe5, 0x5b, 0x51, 0x98, 0x2c, 0x36, 0x7c, 0x42,
> 0x2b, 0xb1, 0x62, 0x4b, 0x0f, 0xf9, 0x72,
> 
> +  0xd3, 0x3f, 0x99, 0xc8, 0xb4, 0x02, 0x17, 0x39, 0xe5,
> 0x0b, 0xf2, 0x5d, 0x2d, 0x7f, 0x23, 0x41,
> 
> +  0xcd, 0x58, 0x3a, 0x25, 0x75, 0x02, 0x03, 0x01, 0x00,
> 0x01, 0xa3, 0x82, 0x02, 0xa5, 0x30, 0x82,
> 
> +  0x02, 0xa1, 0x30, 0x3d, 0x06, 0x09, 0x2b, 0x06, 0x01,
> 0x04, 0x01, 0x82, 0x37, 0x15, 0x07, 0x04,
> 
> +  0x30, 0x30, 0x2e, 0x06, 0x26, 0x2b, 0x06, 0x01, 0x04,
> 0x01, 0x82, 0x37, 0x15, 0x08, 0x83, 0xcf,
> 
> +  0x89, 0x4d, 0xad, 0xf2, 0x02, 0x85, 0xa1, 0x9f, 0x0c,
> 0x82, 0xfa, 0xca, 0x7d, 0x81, 0xe1, 0xfb,
> 
> +  0x74, 0x81, 0x4f, 0x84, 0x9a, 0xf1, 0x69, 0x85, 0xa1,
> 0xad, 0x1d, 0x02, 0x01, 0x64, 0x02, 0x01,
> 
> +  0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04,
> 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x29,
> 
> +  0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
> 0x15, 0x0a, 0x04, 0x1c, 0x30, 0x1a, 0x30,
> 
> +  0x0c, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82,
> 0x37, 0x0a, 0x03, 0x06, 0x30, 0x0a, 0x06,
> 
> +  0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x03,
> 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x25,
> 
> +  0x04, 0x18, 0x30, 0x16, 0x06, 0x0a, 0x2b, 0x06, 0x01,
> 0x04, 0x01, 0x82, 0x37, 0x0a, 0x03, 0x06,
> 
> +  0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03,
> 0x03, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d,
> 
> +  0x0e, 0x04, 0x16, 0x04, 0x14, 0xc9, 0x5a, 0xb3, 0x11,
> 0x02, 0x66, 0x71, 0x8c, 0x5b, 0x06, 0x80,
> 
> +  0x8a, 0x6d, 0x4f, 0x5b, 0xf2, 0xb5, 0x67, 0x45, 0xb5,
> 0x30, 0x30, 0x06, 0x03, 0x55, 0x1d, 0x11,
> 
> +  0x04, 0x29, 0x30, 0x27, 0xa0, 0x25, 0x06, 0x0a, 0x2b,
> 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14,
> 
> +  0x02, 0x03, 0xa0, 0x17, 0x0c, 0x15, 0x77, 0x69, 0x6e,
> 0x63, 0x62, 0x6c, 0x64, 0x40, 0x6d, 0x69,
> 
> +  0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63,
> 0x6f, 0x6d, 0x30, 0x1f, 0x06, 0x03, 0x55,
> 
> +  0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x4e,
> 0xfe, 0x61, 0x39, 0x6f, 0xca, 0xc5, 0x64,
> 
> +  0xe0, 0x20, 0xb6, 0xda, 0xc1, 0xb9, 0x52, 0x0e, 0xca,
> 0xdf, 0x8e, 0xfe, 0x30, 0x81, 0xe8, 0x06,
> 
> +  0x03, 0x55, 0x1d, 0x1f, 0x04, 0x81, 0xe0, 0x30, 0x81,
> 0xdd, 0x30, 0x81, 0xda, 0xa0, 0x81, 0xd7,
> 
> +  0xa0, 0x81, 0xd4, 0x86, 0x36, 0x68, 0x74, 0x74, 0x70,
> 0x3a, 0x2f, 0x2f, 0x63, 0x6f, 0x72, 0x70,
> 
> +  0x70, 0x6b, 0x69, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x4d,
> 0x53, 0x49, 0x54, 0x25, 0x32, 0x30, 0x54,
> 
> +  0x65, 0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f, 0x64,
> 0x65, 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32,
> 
> +  0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e, 0x63,
> 0x72, 0x6c, 0x86, 0x4d, 0x68, 0x74, 0x74,
> 
> +  0x70, 0x3a, 0x2f, 0x2f, 0x6d, 0x73, 0x63, 0x72, 0x6c,
> 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73,
> 
> +  0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70,
> 0x6b, 0x69, 0x2f, 0x6d, 0x73, 0x63, 0x6f,
> 
> +  0x72, 0x70, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x4d, 0x53,
> 0x49, 0x54, 0x25, 0x32, 0x30, 0x54, 0x65,
> 
> +  0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f, 0x64, 0x65,
> 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32, 0x30,
> 
> +  0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e, 0x63, 0x72,
> 0x6c, 0x86, 0x4b, 0x68, 0x74, 0x74, 0x70,
> 
> +  0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69,
> 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
> 
> +  0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f,
> 0x6d, 0x73, 0x63, 0x6f, 0x72, 0x70, 0x2f,
> 
> +  0x63, 0x72, 0x6c, 0x2f, 0x4d, 0x53, 0x49, 0x54, 0x25,
> 0x32, 0x30, 0x54, 0x65, 0x73, 0x74, 0x25,
> 
> +  0x32, 0x30, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67,
> 0x6e, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25,
> 
> +  0x32, 0x30, 0x33, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x81,
> 0xa9, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05,
> 
> +  0x05, 0x07, 0x01, 0x01, 0x04, 0x81, 0x9c, 0x30, 0x81,
> 0x99, 0x30, 0x42, 0x06, 0x08, 0x2b, 0x06,
> 
> +  0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x36, 0x68,
> 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63,
> 
> +  0x6f, 0x72, 0x70, 0x70, 0x6b, 0x69, 0x2f, 0x61, 0x69,
> 0x61, 0x2f, 0x4d, 0x53, 0x49, 0x54, 0x25,
> 
> +  0x32, 0x30, 0x54, 0x65, 0x73, 0x74, 0x25, 0x32, 0x30,
> 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67,
> 
> +  0x6e, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25, 0x32, 0x30,
> 0x33, 0x2e, 0x63, 0x72, 0x74, 0x30, 0x53,
> 
> +  0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30,
> 0x02, 0x86, 0x47, 0x68, 0x74, 0x74, 0x70,
> 
> +  0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69,
> 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
> 
> +  0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f,
> 0x6d, 0x73, 0x63, 0x6f, 0x72, 0x70, 0x2f,
> 
> +  0x4d, 0x53, 0x49, 0x54, 0x25, 0x32, 0x30, 0x54, 0x65,
> 0x73, 0x74, 0x25, 0x32, 0x30, 0x43, 0x6f,
> 
> +  0x64, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x25, 0x32, 0x30,
> 0x43, 0x41, 0x25, 0x32, 0x30, 0x33, 0x2e,
> 
> +  0x63, 0x72, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
> 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b,
> 
> +  0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x97, 0x6d,
> 0x52, 0x46, 0x65, 0x08, 0x60, 0x01, 0x12,
> 
> +  0x7a, 0x26, 0xaa, 0xd9, 0xc3, 0x15, 0xec, 0xc6, 0xae,
> 0x0b, 0x75, 0xe4, 0xd5, 0xe0, 0x31, 0xf6,
> 
> +  0xda, 0xc0, 0xb1, 0x1b, 0x7b, 0x8a, 0x07, 0xda, 0x2f,
> 0x82, 0x4a, 0x21, 0x89, 0xe6, 0x61, 0x97,
> 
> +  0xe4, 0x3a, 0x38, 0xd8, 0x0a, 0x26, 0x4e, 0x83, 0x54,
> 0xbf, 0x32, 0xe3, 0x64, 0x36, 0x61, 0x40,
> 
> +  0x75, 0x55, 0xf1, 0xaa, 0x34, 0xb2, 0xd3, 0x45, 0x8d,
> 0x79, 0x9a, 0x93, 0x0b, 0x9f, 0x5a, 0xb3,
> 
> +  0x5b, 0xcf, 0x0d, 0x28, 0x00, 0x46, 0x68, 0xe7, 0x36,
> 0xc9, 0xe6, 0xd2, 0x03, 0x2d, 0x1c, 0x2b,
> 
> +  0x24, 0x79, 0x32, 0xfb, 0xd8, 0x43, 0xb4, 0x0e, 0xd0,
> 0x37, 0x3b, 0x5e, 0x15, 0xbf, 0x8a, 0x00,
> 
> +  0x56, 0x00, 0x95, 0x00, 0xd4, 0x71, 0x09, 0xe1, 0x84,
> 0xfa, 0x6e, 0xc5, 0x75, 0x2f, 0xe1, 0x83,
> 
> +  0x7b, 0x66, 0xe2, 0x22, 0x75, 0x23, 0x6a, 0xf3, 0x83,
> 0xfc, 0x94, 0xf8, 0x51, 0x6d, 0x40, 0x6d,
> 
> +  0x20, 0x7e, 0xb0, 0xe9, 0xac, 0xa8, 0x28, 0x04, 0xa0,
> 0x1a, 0x3c, 0x88, 0x7e, 0x7e, 0x3b, 0x96,
> 
> +  0xe9, 0xd0, 0x4b, 0xfa, 0xfa, 0x34, 0x4a, 0x4f, 0xe7,
> 0xe8, 0x76, 0x16, 0x20, 0xc0, 0x10, 0xca,
> 
> +  0x1f, 0x7a, 0xde, 0x54, 0xfd, 0xb7, 0xf0, 0xea, 0x8f,
> 0xe2, 0xcb, 0xa5, 0x1c, 0x58, 0x18, 0x57,
> 
> +  0x6c, 0x7d, 0x06, 0xde, 0x8c, 0xbd, 0x45, 0xd7, 0x28,
> 0x86, 0x13, 0x42, 0xaa, 0x4a, 0x9a, 0x50,
> 
> +  0xc5, 0x76, 0x7f, 0x63, 0x99, 0xd0, 0x90, 0x92, 0xd6,
> 0xc9, 0x21, 0xf2, 0xb8, 0x66, 0x9c, 0x96,
> 
> +  0x53, 0xd2, 0xe5, 0xc4, 0xdd, 0x3a, 0x7c, 0x06, 0xae,
> 0xb1, 0x7a, 0xb4, 0x36, 0x04, 0x9d, 0xe6,
> 
> +  0x2a, 0xe4, 0x6a, 0x56, 0xd0, 0x9a, 0x98, 0xa2, 0xbf,
> 0x6f, 0x43, 0xf2, 0xb0, 0x5b, 0xfd, 0xd9,
> 
> +  0xfa, 0x08, 0x17, 0xc8, 0x3c, 0x61, 0xf1, 0x31, 0x82,
> 0x02, 0x3a, 0x30, 0x82, 0x02, 0x36, 0x02,
> 
> +  0x01, 0x01, 0x30, 0x81, 0x90, 0x30, 0x81, 0x81, 0x31,
> 0x13, 0x30, 0x11, 0x06, 0x0a, 0x09, 0x92,
> 
> +  0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16,
> 0x03, 0x63, 0x6f, 0x6d, 0x31, 0x19, 0x30,
> 
> +  0x17, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2,
> 0x2c, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6d,
> 
> +  0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x31,
> 0x14, 0x30, 0x12, 0x06, 0x0a, 0x09, 0x92,
> 
> +  0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16,
> 0x04, 0x63, 0x6f, 0x72, 0x70, 0x31, 0x17,
> 
> +  0x30, 0x15, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93,
> 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x07,
> 
> +  0x72, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x20,
> 0x30, 0x1e, 0x06, 0x03, 0x55, 0x04, 0x03,
> 
> +  0x13, 0x17, 0x4d, 0x53, 0x49, 0x54, 0x20, 0x54, 0x65,
> 0x73, 0x74, 0x20, 0x43, 0x6f, 0x64, 0x65,
> 
> +  0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x41, 0x20, 0x33,
> 0x02, 0x0a, 0x4e, 0x30, 0xa5, 0xbb, 0x00,
> 
> +  0x00, 0x00, 0x12, 0x7b, 0xf2, 0x30, 0x0d, 0x06, 0x09,
> 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
> 
> +  0x02, 0x01, 0x05, 0x00, 0xa0, 0x7c, 0x30, 0x10, 0x06,
> 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82,
> 
> +  0x37, 0x02, 0x01, 0x0c, 0x31, 0x02, 0x30, 0x00, 0x30,
> 0x19, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
> 
> +  0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0c, 0x06, 0x0a,
> 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
> 
> +  0x02, 0x01, 0x04, 0x30, 0x1c, 0x06, 0x0a, 0x2b, 0x06,
> 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01,
> 
> +  0x0b, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x0a, 0x2b, 0x06,
> 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01,
> 
> +  0x15, 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
> 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22,
> 
> +  0x04, 0x20, 0x25, 0x60, 0x6e, 0xc8, 0x66, 0x72, 0x73,
> 0xb0, 0x71, 0x7b, 0x82, 0x09, 0x8c, 0x27,
> 
> +  0xe8, 0xb1, 0x4a, 0x36, 0x1c, 0x81, 0x36, 0xb4, 0x1b,
> 0x44, 0xdf, 0x09, 0x82, 0x8b, 0xf9, 0xb6,
> 
> +  0x1c, 0x65, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48,
> 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05,
> 
> +  0x00, 0x04, 0x82, 0x01, 0x00, 0x01, 0xb7, 0x8e, 0x46,
> 0x9b, 0xb4, 0x18, 0xcd, 0xf6, 0x39, 0x8f,
> 
> +  0x82, 0x79, 0xbc, 0x96, 0x55, 0x7e, 0xd7, 0x84, 0x8f,
> 0x18, 0x37, 0x48, 0x4e, 0x8f, 0x25, 0x6f,
> 
> +  0x1a, 0x6c, 0x60, 0xe9, 0xc1, 0x5f, 0x65, 0xec, 0xb0,
> 0x4b, 0x35, 0x98, 0x8a, 0x31, 0x6b, 0xfd,
> 
> +  0xa9, 0xd2, 0x28, 0xa7, 0x00, 0xd0, 0x5c, 0x97, 0x2e,
> 0x3d, 0x19, 0x96, 0x75, 0xc2, 0x9a, 0xa7,
> 
> +  0x4e, 0x2d, 0x3c, 0x6a, 0xd7, 0xd1, 0x81, 0x96, 0x2e,
> 0x06, 0x54, 0x82, 0xe9, 0x87, 0xa2, 0x53,
> 
> +  0x63, 0x6a, 0xda, 0x72, 0xa3, 0x41, 0x4f, 0x14, 0xc5,
> 0x3d, 0x41, 0x7d, 0xbb, 0xd7, 0x29, 0x11,
> 
> +  0x96, 0x14, 0x60, 0x5f, 0xb9, 0xd3, 0x47, 0xb6, 0x23,
> 0x97, 0x64, 0xf6, 0xe1, 0xac, 0x6c, 0x4d,
> 
> +  0xa9, 0x58, 0xc2, 0x35, 0xbf, 0x02, 0xee, 0x29, 0xd4,
> 0x52, 0x80, 0x25, 0xa1, 0x7e, 0xbe, 0x21,
> 
> +  0xcd, 0x04, 0x3c, 0x4d, 0x7d, 0xdb, 0x9b, 0x13, 0x71,
> 0x35, 0x13, 0x8d, 0x16, 0x0a, 0x40, 0x7b,
> 
> +  0x63, 0x45, 0x00, 0x11, 0xc5, 0x3e, 0xc8, 0x21, 0x37,
> 0xc9, 0xbc, 0xd2, 0x0f, 0x82, 0x21, 0xf9,
> 
> +  0x2f, 0xde, 0xb3, 0x1c, 0x9b, 0x67, 0xb6, 0x5a, 0xb8,
> 0x74, 0xa0, 0x30, 0xd8, 0x86, 0x1f, 0xd9,
> 
> +  0x08, 0x45, 0xf9, 0x6b, 0xe8, 0x57, 0xda, 0xb7, 0x14,
> 0xf7, 0x63, 0x97, 0xfd, 0x87, 0x61, 0x1e,
> 
> +  0x95, 0x6f, 0xba, 0x53, 0x40, 0x5e, 0x9f, 0x49, 0xf6,
> 0xe7, 0x3c, 0x59, 0xd9, 0x78, 0x08, 0x4c,
> 
> +  0xa6, 0x4a, 0xa2, 0x05, 0x42, 0xa7, 0x77, 0xbc, 0x44,
> 0x7b, 0xed, 0xdb, 0x77, 0x63, 0x4c, 0x63,
> 
> +  0x22, 0xb6, 0x17, 0x3f, 0x4f, 0x33, 0xed, 0xa6, 0xd9,
> 0x0f, 0x74, 0xfa, 0x97, 0x8d, 0x98, 0x55,
> 
> +  0x42, 0x14, 0x76, 0xd4, 0x89, 0x07, 0xf2, 0x30, 0x5a,
> 0x27, 0x96, 0x1b, 0x92, 0x70, 0x5a, 0x83,
> 
> +  0x89, 0x0f, 0xdb, 0x47, 0x7a, 0x00, 0x00, 0x00, 0x0a
> 
> +  };
> 
> +
> 
> +//
> 
> +// Sample root certificate for code signing.
> 
> +// A trusted certificate with self-signing, will be
> used to construct the certificate chains for
> 
> +// authority checking.
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TestRootCert1[] = {
> 
> +  0x30, 0x82, 0x05, 0x99, 0x30, 0x82, 0x03, 0x81, 0xA0,
> 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x79,
> 
> +  0xAD, 0x16, 0xA1, 0x4A, 0xA0, 0xA5, 0xAD, 0x4C, 0x73,
> 0x58, 0xF4, 0x07, 0x13, 0x2E, 0x65, 0x30,
> 
> +  0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
> 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x5F,
> 
> +  0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92, 0x26,
> 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19,
> 
> +  0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30, 0x17,
> 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89, 0x93,
> 
> +  0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D, 0x69,
> 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74,
> 
> +  0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04, 0x03,
> 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72, 0x6F,
> 
> +  0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74,
> 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66,
> 
> +  0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74,
> 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x30,
> 
> +  0x1E, 0x17, 0x0D, 0x30, 0x31, 0x30, 0x35, 0x30, 0x39,
> 0x32, 0x33, 0x31, 0x39, 0x32, 0x32, 0x5A,
> 
> +  0x17, 0x0D, 0x32, 0x31, 0x30, 0x35, 0x30, 0x39, 0x32,
> 0x33, 0x32, 0x38, 0x31, 0x33, 0x5A, 0x30,
> 
> +  0x5F, 0x31, 0x13, 0x30, 0x11, 0x06, 0x0A, 0x09, 0x92,
> 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01,
> 
> +  0x19, 0x16, 0x03, 0x63, 0x6F, 0x6D, 0x31, 0x19, 0x30,
> 0x17, 0x06, 0x0A, 0x09, 0x92, 0x26, 0x89,
> 
> +  0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19, 0x16, 0x09, 0x6D,
> 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66,
> 
> +  0x74, 0x31, 0x2D, 0x30, 0x2B, 0x06, 0x03, 0x55, 0x04,
> 0x03, 0x13, 0x24, 0x4D, 0x69, 0x63, 0x72,
> 
> +  0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x52, 0x6F, 0x6F,
> 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69,
> 
> +  0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75,
> 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79,
> 
> +  0x30, 0x82, 0x02, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A,
> 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01,
> 
> +  0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0F, 0x00, 0x30,
> 0x82, 0x02, 0x0A, 0x02, 0x82, 0x02, 0x01,
> 
> +  0x00, 0xF3, 0x5D, 0xFA, 0x80, 0x67, 0xD4, 0x5A, 0xA7,
> 0xA9, 0x0C, 0x2C, 0x90, 0x20, 0xD0, 0x35,
> 
> +  0x08, 0x3C, 0x75, 0x84, 0xCD, 0xB7, 0x07, 0x89, 0x9C,
> 0x89, 0xDA, 0xDE, 0xCE, 0xC3, 0x60, 0xFA,
> 
> +  0x91, 0x68, 0x5A, 0x9E, 0x94, 0x71, 0x29, 0x18, 0x76,
> 0x7C, 0xC2, 0xE0, 0xC8, 0x25, 0x76, 0x94,
> 
> +  0x0E, 0x58, 0xFA, 0x04, 0x34, 0x36, 0xE6, 0xDF, 0xAF,
> 0xF7, 0x80, 0xBA, 0xE9, 0x58, 0x0B, 0x2B,
> 
> +  0x93, 0xE5, 0x9D, 0x05, 0xE3, 0x77, 0x22, 0x91, 0xF7,
> 0x34, 0x64, 0x3C, 0x22, 0x91, 0x1D, 0x5E,
> 
> +  0xE1, 0x09, 0x90, 0xBC, 0x14, 0xFE, 0xFC, 0x75, 0x58,
> 0x19, 0xE1, 0x79, 0xB7, 0x07, 0x92, 0xA3,
> 
> +  0xAE, 0x88, 0x59, 0x08, 0xD8, 0x9F, 0x07, 0xCA, 0x03,
> 0x58, 0xFC, 0x68, 0x29, 0x6D, 0x32, 0xD7,
> 
> +  0xD2, 0xA8, 0xCB, 0x4B, 0xFC, 0xE1, 0x0B, 0x48, 0x32,
> 0x4F, 0xE6, 0xEB, 0xB8, 0xAD, 0x4F, 0xE4,
> 
> +  0x5C, 0x6F, 0x13, 0x94, 0x99, 0xDB, 0x95, 0xD5, 0x75,
> 0xDB, 0xA8, 0x1A, 0xB7, 0x94, 0x91, 0xB4,
> 
> +  0x77, 0x5B, 0xF5, 0x48, 0x0C, 0x8F, 0x6A, 0x79, 0x7D,
> 0x14, 0x70, 0x04, 0x7D, 0x6D, 0xAF, 0x90,
> 
> +  0xF5, 0xDA, 0x70, 0xD8, 0x47, 0xB7, 0xBF, 0x9B, 0x2F,
> 0x6C, 0xE7, 0x05, 0xB7, 0xE1, 0x11, 0x60,
> 
> +  0xAC, 0x79, 0x91, 0x14, 0x7C, 0xC5, 0xD6, 0xA6, 0xE4,
> 0xE1, 0x7E, 0xD5, 0xC3, 0x7E, 0xE5, 0x92,
> 
> +  0xD2, 0x3C, 0x00, 0xB5, 0x36, 0x82, 0xDE, 0x79, 0xE1,
> 0x6D, 0xF3, 0xB5, 0x6E, 0xF8, 0x9F, 0x33,
> 
> +  0xC9, 0xCB, 0x52, 0x7D, 0x73, 0x98, 0x36, 0xDB, 0x8B,
> 0xA1, 0x6B, 0xA2, 0x95, 0x97, 0x9B, 0xA3,
> 
> +  0xDE, 0xC2, 0x4D, 0x26, 0xFF, 0x06, 0x96, 0x67, 0x25,
> 0x06, 0xC8, 0xE7, 0xAC, 0xE4, 0xEE, 0x12,
> 
> +  0x33, 0x95, 0x31, 0x99, 0xC8, 0x35, 0x08, 0x4E, 0x34,
> 0xCA, 0x79, 0x53, 0xD5, 0xB5, 0xBE, 0x63,
> 
> +  0x32, 0x59, 0x40, 0x36, 0xC0, 0xA5, 0x4E, 0x04, 0x4D,
> 0x3D, 0xDB, 0x5B, 0x07, 0x33, 0xE4, 0x58,
> 
> +  0xBF, 0xEF, 0x3F, 0x53, 0x64, 0xD8, 0x42, 0x59, 0x35,
> 0x57, 0xFD, 0x0F, 0x45, 0x7C, 0x24, 0x04,
> 
> +  0x4D, 0x9E, 0xD6, 0x38, 0x74, 0x11, 0x97, 0x22, 0x90,
> 0xCE, 0x68, 0x44, 0x74, 0x92, 0x6F, 0xD5,
> 
> +  0x4B, 0x6F, 0xB0, 0x86, 0xE3, 0xC7, 0x36, 0x42, 0xA0,
> 0xD0, 0xFC, 0xC1, 0xC0, 0x5A, 0xF9, 0xA3,
> 
> +  0x61, 0xB9, 0x30, 0x47, 0x71, 0x96, 0x0A, 0x16, 0xB0,
> 0x91, 0xC0, 0x42, 0x95, 0xEF, 0x10, 0x7F,
> 
> +  0x28, 0x6A, 0xE3, 0x2A, 0x1F, 0xB1, 0xE4, 0xCD, 0x03,
> 0x3F, 0x77, 0x71, 0x04, 0xC7, 0x20, 0xFC,
> 
> +  0x49, 0x0F, 0x1D, 0x45, 0x88, 0xA4, 0xD7, 0xCB, 0x7E,
> 0x88, 0xAD, 0x8E, 0x2D, 0xEC, 0x45, 0xDB,
> 
> +  0xC4, 0x51, 0x04, 0xC9, 0x2A, 0xFC, 0xEC, 0x86, 0x9E,
> 0x9A, 0x11, 0x97, 0x5B, 0xDE, 0xCE, 0x53,
> 
> +  0x88, 0xE6, 0xE2, 0xB7, 0xFD, 0xAC, 0x95, 0xC2, 0x28,
> 0x40, 0xDB, 0xEF, 0x04, 0x90, 0xDF, 0x81,
> 
> +  0x33, 0x39, 0xD9, 0xB2, 0x45, 0xA5, 0x23, 0x87, 0x06,
> 0xA5, 0x55, 0x89, 0x31, 0xBB, 0x06, 0x2D,
> 
> +  0x60, 0x0E, 0x41, 0x18, 0x7D, 0x1F, 0x2E, 0xB5, 0x97,
> 0xCB, 0x11, 0xEB, 0x15, 0xD5, 0x24, 0xA5,
> 
> +  0x94, 0xEF, 0x15, 0x14, 0x89, 0xFD, 0x4B, 0x73, 0xFA,
> 0x32, 0x5B, 0xFC, 0xD1, 0x33, 0x00, 0xF9,
> 
> +  0x59, 0x62, 0x70, 0x07, 0x32, 0xEA, 0x2E, 0xAB, 0x40,
> 0x2D, 0x7B, 0xCA, 0xDD, 0x21, 0x67, 0x1B,
> 
> +  0x30, 0x99, 0x8F, 0x16, 0xAA, 0x23, 0xA8, 0x41, 0xD1,
> 0xB0, 0x6E, 0x11, 0x9B, 0x36, 0xC4, 0xDE,
> 
> +  0x40, 0x74, 0x9C, 0xE1, 0x58, 0x65, 0xC1, 0x60, 0x1E,
> 0x7A, 0x5B, 0x38, 0xC8, 0x8F, 0xBB, 0x04,
> 
> +  0x26, 0x7C, 0xD4, 0x16, 0x40, 0xE5, 0xB6, 0x6B, 0x6C,
> 0xAA, 0x86, 0xFD, 0x00, 0xBF, 0xCE, 0xC1,
> 
> +  0x35, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x51, 0x30,
> 0x4F, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x1D,
> 
> +  0x0F, 0x04, 0x04, 0x03, 0x02, 0x01, 0xC6, 0x30, 0x0F,
> 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01,
> 
> +  0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30,
> 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04,
> 
> +  0x16, 0x04, 0x14, 0x0E, 0xAC, 0x82, 0x60, 0x40, 0x56,
> 0x27, 0x97, 0xE5, 0x25, 0x13, 0xFC, 0x2A,
> 
> +  0xE1, 0x0A, 0x53, 0x95, 0x59, 0xE4, 0xA4, 0x30, 0x10,
> 0x06, 0x09, 0x2B, 0x06, 0x01, 0x04, 0x01,
> 
> +  0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00,
> 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48,
> 
> +  0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03,
> 0x82, 0x02, 0x01, 0x00, 0xC5, 0x11, 0x4D,
> 
> +  0x03, 0x3A, 0x60, 0xDD, 0x5D, 0x52, 0x11, 0x77, 0x8F,
> 0xB2, 0xBB, 0x36, 0xC8, 0xB2, 0x05, 0xBF,
> 
> +  0xB4, 0xB7, 0xA8, 0xD8, 0x20, 0x9D, 0x5C, 0x13, 0x03,
> 0xB6, 0x1C, 0x22, 0xFA, 0x06, 0x13, 0x35,
> 
> +  0xB6, 0xC8, 0x63, 0xD4, 0x9A, 0x47, 0x6F, 0x26, 0x57,
> 0xD2, 0x55, 0xF1, 0x04, 0xB1, 0x26, 0x5F,
> 
> +  0xD6, 0xA9, 0x50, 0x68, 0xA0, 0xBC, 0xD2, 0xB8, 0x6E,
> 0xCC, 0xC3, 0xE9, 0xAC, 0xDF, 0x19, 0xCD,
> 
> +  0x78, 0xAC, 0x59, 0x74, 0xAC, 0x66, 0x34, 0x36, 0xC4,
> 0x1B, 0x3E, 0x6C, 0x38, 0x4C, 0x33, 0x0E,
> 
> +  0x30, 0x12, 0x0D, 0xA3, 0x26, 0xFE, 0x51, 0x53, 0x00,
> 0xFF, 0xAF, 0x5A, 0x4E, 0x84, 0x0D, 0x0F,
> 
> +  0x1F, 0xE4, 0x6D, 0x05, 0x2E, 0x4E, 0x85, 0x4B, 0x8D,
> 0x6C, 0x33, 0x6F, 0x54, 0xD2, 0x64, 0xAB,
> 
> +  0xBF, 0x50, 0xAF, 0x7D, 0x7A, 0x39, 0xA0, 0x37, 0xED,
> 0x63, 0x03, 0x0F, 0xFC, 0x13, 0x06, 0xCE,
> 
> +  0x16, 0x36, 0xD4, 0x54, 0x3B, 0x95, 0x1B, 0x51, 0x62,
> 0x3A, 0xE5, 0x4D, 0x17, 0xD4, 0x05, 0x39,
> 
> +  0x92, 0x9A, 0x27, 0xA8, 0x5B, 0xAA, 0xBD, 0xEC, 0xBB,
> 0xBE, 0xE3, 0x20, 0x89, 0x60, 0x71, 0x6C,
> 
> +  0x56, 0xB3, 0xA5, 0x13, 0xD0, 0x6D, 0x0E, 0x23, 0x7E,
> 0x95, 0x03, 0xED, 0x68, 0x3D, 0xF2, 0xD8,
> 
> +  0x63, 0xB8, 0x6B, 0x4D, 0xB6, 0xE8, 0x30, 0xB5, 0xE1,
> 0xCA, 0x94, 0x4B, 0xF7, 0xA2, 0xAA, 0x5D,
> 
> +  0x99, 0x30, 0xB2, 0x3D, 0xA7, 0xC2, 0x51, 0x6C, 0x28,
> 0x20, 0x01, 0x24, 0x27, 0x2B, 0x4B, 0x00,
> 
> +  0xB7, 0x9D, 0x11, 0x6B, 0x70, 0xBE, 0xB2, 0x10, 0x82,
> 0xBC, 0x0C, 0x9B, 0x68, 0xD0, 0x8D, 0x3B,
> 
> +  0x24, 0x87, 0xAA, 0x99, 0x28, 0x72, 0x9D, 0x33, 0x5F,
> 0x59, 0x90, 0xBD, 0xF5, 0xDE, 0x93, 0x9E,
> 
> +  0x3A, 0x62, 0x5A, 0x34, 0x39, 0xE2, 0x88, 0x55, 0x1D,
> 0xB9, 0x06, 0xB0, 0xC1, 0x89, 0x6B, 0x2D,
> 
> +  0xD7, 0x69, 0xC3, 0x19, 0x12, 0x36, 0x84, 0xD0, 0xC9,
> 0xA0, 0xDA, 0xFF, 0x2F, 0x69, 0x78, 0xB2,
> 
> +  0xE5, 0x7A, 0xDA, 0xEB, 0xD7, 0x0C, 0xC0, 0xF7, 0xBD,
> 0x63, 0x17, 0xB8, 0x39, 0x13, 0x38, 0xA2,
> 
> +  0x36, 0x5B, 0x7B, 0xF2, 0x85, 0x56, 0x6A, 0x1D, 0x64,
> 0x62, 0xC1, 0x38, 0xE2, 0xAA, 0xBF, 0x51,
> 
> +  0x66, 0xA2, 0x94, 0xF5, 0x12, 0x9C, 0x66, 0x22, 0x10,
> 0x6B, 0xF2, 0xB7, 0x30, 0x92, 0x2D, 0xF2,
> 
> +  0x29, 0xF0, 0x3D, 0x3B, 0x14, 0x43, 0x68, 0xA2, 0xF1,
> 0x9C, 0x29, 0x37, 0xCB, 0xCE, 0x38, 0x20,
> 
> +  0x25, 0x6D, 0x7C, 0x67, 0xF3, 0x7E, 0x24, 0x12, 0x24,
> 0x03, 0x08, 0x81, 0x47, 0xEC, 0xA5, 0x9E,
> 
> +  0x97, 0xF5, 0x18, 0xD7, 0xCF, 0xBB, 0xD5, 0xEF, 0x76,
> 0x96, 0xEF, 0xFD, 0xCE, 0xDB, 0x56, 0x9D,
> 
> +  0x95, 0xA0, 0x42, 0xF9, 0x97, 0x58, 0xE1, 0xD7, 0x31,
> 0x22, 0xD3, 0x5F, 0x59, 0xE6, 0x3E, 0x6E,
> 
> +  0x22, 0x00, 0xEA, 0x43, 0x84, 0xB6, 0x25, 0xDB, 0xD9,
> 0xF3, 0x08, 0x56, 0x68, 0xC0, 0x64, 0x6B,
> 
> +  0x1D, 0x7C, 0xEC, 0xB6, 0x93, 0xA2, 0x62, 0x57, 0x6E,
> 0x2E, 0xD8, 0xE7, 0x58, 0x8F, 0xC4, 0x31,
> 
> +  0x49, 0x26, 0xDD, 0xDE, 0x29, 0x35, 0x87, 0xF5, 0x30,
> 0x71, 0x70, 0x5B, 0x14, 0x3C, 0x69, 0xBD,
> 
> +  0x89, 0x12, 0x7D, 0xEB, 0x2E, 0xA3, 0xFE, 0xD8, 0x7F,
> 0x9E, 0x82, 0x5A, 0x52, 0x0A, 0x2B, 0xC1,
> 
> +  0x43, 0x2B, 0xD9, 0x30, 0x88, 0x9F, 0xC8, 0x10, 0xFB,
> 0x89, 0x8D, 0xE6, 0xA1, 0x85, 0x75, 0x33,
> 
> +  0x7E, 0x6C, 0x9E, 0xDB, 0x73, 0x13, 0x64, 0x62, 0x69,
> 0xA5, 0x2F, 0x7D, 0xCA, 0x96, 0x6D, 0x9F,
> 
> +  0xF8, 0x04, 0x4D, 0x30, 0x92, 0x3D, 0x6E, 0x21, 0x14,
> 0x21, 0xC9, 0x3D, 0xE0, 0xC3, 0xFD, 0x8A,
> 
> +  0x6B, 0x9D, 0x4A, 0xFD, 0xD1, 0xA1, 0x9D, 0x99, 0x43,
> 0x77, 0x3F, 0xB0, 0xDA
> 
> +};
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TestRootCert2[] = {
> 
> +  0x30, 0x82, 0x05, 0xfd, 0x30, 0x82, 0x03, 0xe5, 0xa0,
> 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x74,
> 
> +  0x45, 0xc8, 0x78, 0x4e, 0x0c, 0xc9, 0x96, 0x4a, 0xb4,
> 0x2f, 0xbc, 0xda, 0x29, 0xe1, 0xbc, 0x30,
> 
> +  0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
> 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81,
> 
> +  0x90, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
> 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13,
> 
> +  0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a,
> 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67,
> 
> +  0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03,
> 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65,
> 
> +  0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c,
> 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15,
> 
> +  0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
> 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72,
> 
> +  0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x3a, 0x30, 0x38,
> 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x31,
> 
> +  0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
> 0x20, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e,
> 
> +  0x67, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65,
> 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
> 
> +  0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72,
> 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31,
> 
> +  0x30, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x36,
> 0x31, 0x37, 0x32, 0x30, 0x35, 0x38, 0x30,
> 
> +  0x32, 0x5a, 0x17, 0x0d, 0x33, 0x35, 0x30, 0x36, 0x31,
> 0x37, 0x32, 0x31, 0x30, 0x34, 0x31, 0x31,
> 
> +  0x5a, 0x30, 0x81, 0x90, 0x31, 0x0b, 0x30, 0x09, 0x06,
> 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55,
> 
> +  0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
> 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68,
> 
> +  0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30,
> 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13,
> 
> +  0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31,
> 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73,
> 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72,
> 
> +  0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31,
> 0x3a, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x03, 0x13, 0x31, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73,
> 0x6f, 0x66, 0x74, 0x20, 0x54, 0x65, 0x73,
> 
> +  0x74, 0x69, 0x6e, 0x67, 0x20, 0x52, 0x6f, 0x6f, 0x74,
> 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66,
> 
> +  0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74,
> 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20,
> 
> +  0x32, 0x30, 0x31, 0x30, 0x30, 0x82, 0x02, 0x22, 0x30,
> 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
> 
> +  0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82,
> 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a,
> 
> +  0x02, 0x82, 0x02, 0x01, 0x00, 0x95, 0xe3, 0xa8, 0xc1,
> 0xb9, 0x9c, 0x26, 0x54, 0xb0, 0x99, 0xef,
> 
> +  0x26, 0x1f, 0xac, 0x1e, 0xc7, 0x30, 0x80, 0xbb, 0xf5,
> 0x3f, 0xf2, 0xe4, 0xbb, 0xf8, 0xfe, 0x06,
> 
> +  0x6a, 0x0a, 0xa6, 0x88, 0xbc, 0xb4, 0x8c, 0x45, 0xe0,
> 0x70, 0x55, 0x19, 0x88, 0xb4, 0x05, 0xcb,
> 
> +  0xb5, 0xc1, 0xa1, 0xfa, 0xd4, 0x7c, 0xc2, 0x42, 0x53,
> 0x07, 0x9c, 0x54, 0x56, 0xa8, 0x97, 0xe0,
> 
> +  0x94, 0x69, 0xbe, 0x13, 0x24, 0xef, 0xe5, 0x8a, 0x29,
> 0x9c, 0xa6, 0xd0, 0x2b, 0x2f, 0x8a, 0xa6,
> 
> +  0xe8, 0x79, 0x44, 0x2e, 0x8b, 0xea, 0xc9, 0xbe, 0xb8,
> 0x54, 0x86, 0x53, 0xbe, 0x07, 0x24, 0x34,
> 
> +  0x54, 0x15, 0x22, 0x20, 0x01, 0x7b, 0x8a, 0x46, 0xfb,
> 0xd2, 0x91, 0x07, 0x95, 0x09, 0xb0, 0x56,
> 
> +  0x11, 0xcc, 0x76, 0xb2, 0xd0, 0x1f, 0x44, 0x79, 0x52,
> 0x34, 0x28, 0xec, 0x4f, 0x49, 0xc2, 0xcb,
> 
> +  0x61, 0xd3, 0x86, 0xdc, 0xe4, 0xa3, 0x7e, 0x55, 0x9e,
> 0x9f, 0xee, 0x10, 0x6f, 0xcf, 0xe1, 0x3d,
> 
> +  0xf8, 0xb7, 0x84, 0x79, 0xa2, 0x3b, 0x8d, 0x1c, 0xb0,
> 0x81, 0x7c, 0xe4, 0x44, 0x07, 0xe4, 0xce,
> 
> +  0x46, 0xb0, 0x98, 0x83, 0x8d, 0x87, 0x8f, 0xe5, 0xf5,
> 0xae, 0x40, 0x7a, 0xf1, 0xed, 0x3d, 0x9b,
> 
> +  0x9a, 0x7c, 0x4a, 0xd1, 0xb9, 0xc3, 0x94, 0x05, 0x7b,
> 0xdc, 0xda, 0xb8, 0xce, 0xdc, 0x1e, 0x6c,
> 
> +  0xcf, 0xd9, 0x9e, 0x37, 0xef, 0xc3, 0x5a, 0x36, 0x7b,
> 0x90, 0x86, 0x45, 0xdc, 0xf6, 0x2e, 0xca,
> 
> +  0xdd, 0xee, 0xde, 0x27, 0xd9, 0x74, 0x9a, 0x69, 0xf5,
> 0xd9, 0x5d, 0x09, 0x2d, 0x45, 0x41, 0xcc,
> 
> +  0xb7, 0xc2, 0x82, 0xd4, 0x2a, 0x8c, 0x16, 0x25, 0x92,
> 0x97, 0x3d, 0x94, 0x4e, 0x89, 0x33, 0x7e,
> 
> +  0x5b, 0x03, 0x54, 0xcd, 0xb0, 0x83, 0xa0, 0x8e, 0x41,
> 0xb7, 0x87, 0x8d, 0xd9, 0x05, 0x63, 0x52,
> 
> +  0xf6, 0xee, 0xe6, 0x4e, 0x13, 0x9d, 0x54, 0xcd, 0x49,
> 0xfe, 0xe3, 0x8b, 0x3b, 0x50, 0x9b, 0x48,
> 
> +  0xbb, 0xb2, 0xe5, 0x92, 0xd4, 0xab, 0xa0, 0xc5, 0x10,
> 0xaf, 0x3e, 0xb1, 0x45, 0x21, 0x34, 0x90,
> 
> +  0xdc, 0xad, 0xb9, 0xf7, 0xfe, 0x21, 0xae, 0xee, 0x50,
> 0x58, 0x7a, 0x3a, 0xe5, 0xaa, 0xd8, 0xe3,
> 
> +  0x82, 0xd6, 0xcf, 0x6d, 0x4d, 0xc9, 0x15, 0xac, 0x9c,
> 0x31, 0x17, 0xa5, 0x16, 0xa7, 0x42, 0xf6,
> 
> +  0xda, 0x12, 0x78, 0xa7, 0x66, 0x90, 0xec, 0xfc, 0xcd,
> 0x01, 0x63, 0xff, 0xf0, 0x0e, 0xba, 0xe1,
> 
> +  0xcd, 0xf0, 0xdb, 0x6b, 0x9a, 0x0f, 0xf6, 0x0f, 0x04,
> 0x01, 0x09, 0xbc, 0x9f, 0xce, 0xb7, 0x6c,
> 
> +  0x51, 0x70, 0x57, 0x08, 0x1b, 0xff, 0x79, 0x9a, 0x52,
> 0x5d, 0xba, 0xac, 0x14, 0xe5, 0x3b, 0x67,
> 
> +  0xcf, 0x2c, 0x52, 0xde, 0x27, 0x9a, 0x34, 0x03, 0x6e,
> 0x25, 0x48, 0xb0, 0x19, 0x74, 0xfc, 0x4d,
> 
> +  0x98, 0xc2, 0x4b, 0x8c, 0x92, 0xe1, 0x88, 0xae, 0x48,
> 0x2a, 0xab, 0xab, 0xcd, 0x14, 0x4d, 0xb6,
> 
> +  0x61, 0x0e, 0xa1, 0x09, 0x8f, 0x2c, 0xdb, 0x45, 0xaf,
> 0x7d, 0x3b, 0x81, 0x56, 0x08, 0xc9, 0x3b,
> 
> +  0x41, 0xb7, 0x64, 0x9f, 0x5d, 0x2e, 0x12, 0x7f, 0xb9,
> 0x69, 0x29, 0x1f, 0x52, 0x45, 0x4a, 0x23,
> 
> +  0xc6, 0xaf, 0xb6, 0xb2, 0x38, 0x72, 0x9d, 0x08, 0x33,
> 0xff, 0xd0, 0xcf, 0x89, 0xb6, 0xea, 0x6e,
> 
> +  0x85, 0x44, 0x94, 0x3e, 0x91, 0x59, 0xeb, 0xef, 0x9e,
> 0xbd, 0x9b, 0x9c, 0x1a, 0x47, 0x03, 0x4e,
> 
> +  0xa2, 0x17, 0x96, 0xfa, 0x62, 0x0b, 0xe8, 0x53, 0xb6,
> 0x4e, 0xe3, 0xe8, 0x2a, 0x73, 0x59, 0xe2,
> 
> +  0x13, 0xb8, 0xf8, 0x5a, 0x7e, 0xc6, 0xe2, 0x0a, 0xdd,
> 0x4a, 0x43, 0xcc, 0xc3, 0x77, 0x3b, 0x7a,
> 
> +  0x31, 0x04, 0x0a, 0xc1, 0x84, 0x96, 0x3a, 0x63, 0x6e,
> 0x1a, 0x3e, 0x0a, 0x0c, 0x25, 0xb8, 0x7e,
> 
> +  0xb5, 0x52, 0x0c, 0xb9, 0xab, 0x02, 0x03, 0x01, 0x00,
> 0x01, 0xa3, 0x51, 0x30, 0x4f, 0x30, 0x0b,
> 
> +  0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02,
> 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55,
> 
> +  0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03,
> 0x01, 0x01, 0xff, 0x30, 0x1d, 0x06, 0x03,
> 
> +  0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa3, 0x01,
> 0x04, 0x7e, 0x30, 0x88, 0x33, 0xeb, 0xb9,
> 
> +  0x31, 0x9c, 0xca, 0xeb, 0x85, 0x76, 0x67, 0xfc, 0x65,
> 0xb4, 0xd1, 0x30, 0x10, 0x06, 0x09, 0x2b,
> 
> +  0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04,
> 0x03, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06,
> 
> +  0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
> 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01,
> 
> +  0x00, 0x49, 0x8b, 0xc1, 0xfc, 0x4f, 0xe8, 0xe4, 0x2d,
> 0x67, 0x92, 0x9a, 0x76, 0x05, 0xba, 0xd1,
> 
> +  0xbc, 0x98, 0xe4, 0x2b, 0xba, 0x1f, 0x66, 0x5f, 0x66,
> 0x23, 0xcf, 0x1c, 0x27, 0xeb, 0xb4, 0xaa,
> 
> +  0xdd, 0xa0, 0x17, 0x20, 0x55, 0x72, 0x33, 0xb1, 0x76,
> 0xde, 0xc9, 0x6d, 0x0d, 0x3c, 0x2d, 0x0a,
> 
> +  0x08, 0x24, 0x2d, 0xec, 0x38, 0x96, 0x7a, 0x83, 0xf1,
> 0x27, 0x50, 0x3c, 0x86, 0x09, 0xdd, 0x0d,
> 
> +  0x41, 0xce, 0xaa, 0x5e, 0xf3, 0x8f, 0x7a, 0x3e, 0x3e,
> 0xf1, 0xf0, 0xba, 0x8b, 0x72, 0xdd, 0x36,
> 
> +  0xa1, 0x69, 0x05, 0x5b, 0x7c, 0xec, 0xe7, 0x70, 0x63,
> 0x8d, 0x1d, 0x6e, 0xc0, 0xfd, 0x3a, 0x03,
> 
> +  0xf1, 0x10, 0x3e, 0x90, 0xd7, 0x7b, 0x7a, 0xdc, 0xea,
> 0x60, 0xec, 0x2f, 0x53, 0xfd, 0x19, 0x1d,
> 
> +  0x3a, 0xa1, 0x74, 0x08, 0xc2, 0x7b, 0x3c, 0xe0, 0x50,
> 0xac, 0x21, 0xd7, 0xb6, 0xdd, 0xdd, 0x3c,
> 
> +  0x44, 0x1b, 0xf7, 0xf3, 0x44, 0x3e, 0x6c, 0x96, 0xe0,
> 0xc0, 0x9f, 0xe6, 0xef, 0xdd, 0xdd, 0xb1,
> 
> +  0xa6, 0x68, 0x61, 0x6c, 0x5e, 0x9e, 0xf9, 0xff, 0x9a,
> 0x06, 0xa4, 0x6a, 0xcd, 0x9e, 0x75, 0x43,
> 
> +  0x89, 0x9b, 0xcb, 0x85, 0xf6, 0xdc, 0x0c, 0x46, 0x4a,
> 0x8c, 0x9b, 0xac, 0x11, 0xa6, 0x63, 0x45,
> 
> +  0xfb, 0xfc, 0xde, 0x20, 0xee, 0xce, 0x67, 0x9f, 0x3d,
> 0xd0, 0x93, 0xdb, 0x39, 0xfb, 0xea, 0x5e,
> 
> +  0x4b, 0xfc, 0xd6, 0x20, 0xf1, 0x95, 0x36, 0x08, 0x8c,
> 0xb2, 0xb3, 0xa1, 0x97, 0x1b, 0x41, 0x19,
> 
> +  0xb0, 0xac, 0xfe, 0xe2, 0xd5, 0xab, 0x7d, 0xd9, 0x26,
> 0xd4, 0xdc, 0xbd, 0x1f, 0x38, 0xc0, 0xe3,
> 
> +  0x86, 0xdf, 0x24, 0xe7, 0xf5, 0x3e, 0x09, 0xca, 0x4d,
> 0xa1, 0xba, 0x16, 0xc3, 0x4a, 0xb1, 0xfc,
> 
> +  0x72, 0x98, 0xcf, 0x0e, 0x92, 0xfa, 0x57, 0x45, 0xe9,
> 0x48, 0x4d, 0xc6, 0xa2, 0x7c, 0x3b, 0x72,
> 
> +  0x63, 0xac, 0x4e, 0xf4, 0x74, 0xe9, 0x2b, 0x57, 0xac,
> 0xab, 0x32, 0x88, 0x0b, 0xa9, 0x10, 0x67,
> 
> +  0x53, 0x7e, 0xd2, 0x62, 0xd2, 0xfa, 0x68, 0xe8, 0x9d,
> 0x5b, 0xae, 0xcd, 0xe0, 0xe5, 0xe2, 0x06,
> 
> +  0x96, 0x0c, 0x34, 0x32, 0xf6, 0xbc, 0x25, 0xad, 0x98,
> 0xf3, 0x32, 0x60, 0xbe, 0x14, 0xd3, 0x78,
> 
> +  0xd1, 0x10, 0x6f, 0xff, 0x32, 0xe3, 0x9e, 0x3d, 0x88,
> 0xda, 0xb3, 0x32, 0x0a, 0xcf, 0x20, 0x65,
> 
> +  0x47, 0x78, 0xaa, 0xa5, 0x4b, 0x87, 0x6a, 0x83, 0xdc,
> 0x1a, 0x5a, 0x2a, 0xdf, 0x70, 0x61, 0xaf,
> 
> +  0x35, 0x32, 0xe0, 0x59, 0xa1, 0x9f, 0x0b, 0x14, 0x7a,
> 0xaa, 0xab, 0x42, 0x0b, 0x6b, 0xff, 0xfb,
> 
> +  0x34, 0xcb, 0x9d, 0x96, 0xd7, 0x26, 0x2a, 0x13, 0x3b,
> 0xe3, 0xdf, 0x11, 0xe6, 0x86, 0x7d, 0x0d,
> 
> +  0x09, 0x11, 0x93, 0x4b, 0xa4, 0xf6, 0xd2, 0x07, 0xc2,
> 0xcd, 0xc8, 0xbe, 0xf5, 0x67, 0xf7, 0xae,
> 
> +  0x05, 0xce, 0x16, 0xfe, 0x90, 0xc9, 0x4a, 0x98, 0x1b,
> 0x24, 0x69, 0x78, 0x90, 0xf9, 0x34, 0x8e,
> 
> +  0x37, 0xe8, 0x6e, 0x1d, 0xdc, 0xcf, 0x4f, 0xe7, 0xd2,
> 0x64, 0x40, 0x1d, 0xc4, 0x30, 0xba, 0xd5,
> 
> +  0x08, 0x88, 0x67, 0x4b, 0x0f, 0xb8, 0xe5, 0x59, 0xe9,
> 0x18, 0xd8, 0x0c, 0x60, 0x68, 0xae, 0x7f,
> 
> +  0xea, 0x91, 0x55, 0xbe, 0xeb, 0xf1, 0xa7, 0x8e, 0xd8,
> 0x5d, 0x50, 0x3e, 0xbf, 0xd5, 0x69, 0x57,
> 
> +  0x95, 0x8f, 0xa7, 0xff, 0xe4, 0x09, 0x3f, 0x08, 0x80,
> 0x97, 0x32, 0x42, 0xb8, 0x82, 0x43, 0x82,
> 
> +  0x6f, 0x8b, 0x0b, 0x93, 0xda, 0x19, 0xbf, 0x63, 0x4e,
> 0x5f, 0x9f, 0xed, 0x2c, 0x22, 0xb6, 0x20,
> 
> +  0x5f, 0x70, 0x44, 0xfa, 0x89, 0x59, 0x93, 0xb0, 0x7b,
> 0x12, 0x0f, 0x5e, 0x62, 0x62, 0x51, 0x11,
> 
> +  0xbd, 0xba, 0x5a, 0xd0, 0xce, 0xa1, 0xb6, 0xef, 0x80,
> 0x20, 0xe6, 0x73, 0x4b, 0x11, 0x06, 0x56,
> 
> +  0xe2, 0x0a
> 
> +  };
> 
> +
> 
> +//
> 
> +// OID ASN.1 Value for Hash Algorithms
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 HashOidValue[] = {
> 
> +  0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x05,
> // OBJ_md5
> 
> +  0x2B, 0x0E, 0x03, 0x02, 0x1A,
> // OBJ_sha1
> 
> +  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04,
> // OBJ_sha224
> 
> +  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01,
> // OBJ_sha256
> 
> +  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02,
> // OBJ_sha384
> 
> +  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03,
> // OBJ_sha512
> 
> +  };
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyAuthenticodeVerify (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  BOOLEAN  Status;
> 
> +
> 
> +  //
> 
> +  // Sample Code: Demonstrate how to check the Hash
> algorithm in PE/COFF Authenticode.
> 
> +  //    According to PKCS#7 Definition:
> 
> +  //        SignedData ::= SEQUENCE {
> 
> +  //            version Version,
> 
> +  //            digestAlgorithms
> DigestAlgorithmIdentifiers,
> 
> +  //            contentInfo ContentInfo,
> 
> +  //            .... }
> 
> +  //    The DigestAlgorithmIdentifiers can be used to
> determine the hash algorithm in PE/COFF hashing
> 
> +  //    This field has the fixed offset (+32) in final
> Authenticode ASN.1 data.
> 
> +  //
> 
> +  if (CompareMem (AuthenticodeWithSha1 + 32,
> &HashOidValue[8], 5) == 0) {
> 
> +    //
> 
> +    // Verify Authenticode signature.
> 
> +    // The PeHash value should be calculated following
> MSFT's Authenticode Specification.
> 
> +    //
> 
> +    Status = AuthenticodeVerify (
> 
> +               AuthenticodeWithSha1,
> 
> +               sizeof (AuthenticodeWithSha1),
> 
> +               TestRootCert1,
> 
> +               sizeof (TestRootCert1),
> 
> +               PeSha1Hash,
> 
> +               SHA1_DIGEST_SIZE
> 
> +               );
> 
> +    UT_ASSERT_TRUE (Status);
> 
> +  }
> 
> +
> 
> +  if (CompareMem (AuthenticodeWithSha256 + 32,
> &HashOidValue[22], 9) == 0) {
> 
> +    Status = AuthenticodeVerify (
> 
> +               AuthenticodeWithSha256,
> 
> +               sizeof (AuthenticodeWithSha256),
> 
> +               TestRootCert2,
> 
> +               sizeof (TestRootCert2),
> 
> +               PeSha256Hash,
> 
> +               SHA256_DIGEST_SIZE
> 
> +               );
> 
> +    UT_ASSERT_TRUE (Status);
> 
> +  }
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +TEST_DESC mAuthenticodeTest[] = {
> 
> +    //
> 
> +    // -----Description--------------------------------
> ------Class----------------------Function---------------
> --Pre---Post--Context
> 
> +    //
> 
> +    {"TestVerifyAuthenticodeVerify()",
> "CryptoPkg.BaseCryptLib.Authenticode",
> TestVerifyAuthenticodeVerify,        NULL, NULL, NULL},
> 
> +};
> 
> +
> 
> +UINTN mAuthenticodeTestNum =
> ARRAY_SIZE(mAuthenticodeTest);
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCrypt
> LibUnitTests.c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCrypt
> LibUnitTests.c
> new file mode 100644
> index 000000000000..b7fcea3ff7e4
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCrypt
> LibUnitTests.c
> @@ -0,0 +1,66 @@
> +/** @file
> 
> +  This is defines the tests that will run on
> BaseCryptLib
> 
> +
> 
> +  Copyright (c) Microsoft Corporation.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +SUITE_DESC  mSuiteDesc[] = {
> 
> +    //
> 
> +    // Title--------------------------Package----------
> ---------Sup--Tdn----TestNum------------TestDesc
> 
> +    //
> 
> +    {"EKU verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs7EkuTestNum,
> mPkcs7EkuTest},
> 
> +    {"HASH verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL, &mHashTestNum,
> mHashTest},
> 
> +    {"HMAC verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL, &mHmacTestNum,
> mHmacTest},
> 
> +    {"BlockCipher verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL,
> &mBlockCipherTestNum,    mBlockCipherTest},
> 
> +    {"RSA verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaTestNum,
> mRsaTest},
> 
> +    {"RSACert verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaCertTestNum,
> mRsaCertTest},
> 
> +    {"PKCS7 verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs7TestNum,
> mPkcs7Test},
> 
> +    {"PKCS5 verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs5TestNum,
> mPkcs5Test},
> 
> +    {"Authenticode verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL,
> &mAuthenticodeTestNum,   mAuthenticodeTest},
> 
> +    {"ImageTimestamp verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL,
> &mImageTimestampTestNum, mImageTimestampTest},
> 
> +    {"DH verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL, &mDhTestNum,
> mDhTest},
> 
> +    {"PRNG verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL, &mPrngTestNum,
> mPrngTest},
> 
> +    {"OAEP encrypt verify tests",
> "CryptoPkg.BaseCryptLib", NULL, NULL, &mOaepTestNum,
> mOaepTest},
> 
> +};
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +CreateUnitTest (
> 
> +    IN     CHAR8*                     UnitTestName,
> 
> +    IN     CHAR8*                     UnitTestVersion,
> 
> +    IN OUT UNIT_TEST_FRAMEWORK_HANDLE* Framework
> 
> +) {
> 
> +    EFI_STATUS                  Status;
> 
> +    UINTN                       SuiteIndex;
> 
> +    UINTN                       TestIndex;
> 
> +
> 
> +    if ( Framework == NULL || UnitTestVersion == NULL
> || UnitTestName == NULL) {
> 
> +        return EFI_INVALID_PARAMETER;
> 
> +    }
> 
> +    Status = EFI_SUCCESS;
> 
> +    //
> 
> +    // Start setting up the test framework for running
> the tests.
> 
> +    //
> 
> +    Status = InitUnitTestFramework (Framework,
> UnitTestName, gEfiCallerBaseName, UnitTestVersion);
> 
> +    if (EFI_ERROR (Status)) {
> 
> +        DEBUG((DEBUG_ERROR, "Failed in
> InitUnitTestFramework. Status = %r\n", Status));
> 
> +        goto EXIT;
> 
> +    }
> 
> +
> 
> +    for (SuiteIndex = 0; SuiteIndex <
> ARRAY_SIZE(mSuiteDesc); SuiteIndex++) {
> 
> +        UNIT_TEST_SUITE_HANDLE Suite = NULL;
> 
> +        Status = CreateUnitTestSuite (&Suite,
> *Framework, mSuiteDesc[SuiteIndex].Title,
> mSuiteDesc[SuiteIndex].Package,
> mSuiteDesc[SuiteIndex].Sup, mSuiteDesc[SuiteIndex].Tdn);
> 
> +        if (EFI_ERROR (Status)) {
> 
> +            Status = EFI_OUT_OF_RESOURCES;
> 
> +            goto EXIT;
> 
> +        }
> 
> +        for (TestIndex = 0; TestIndex <
> *mSuiteDesc[SuiteIndex].TestNum; TestIndex++) {
> 
> +            AddTestCase (Suite,
> (mSuiteDesc[SuiteIndex].TestDesc + TestIndex)-
> >Description, (mSuiteDesc[SuiteIndex].TestDesc +
> TestIndex)->ClassName, (mSuiteDesc[SuiteIndex].TestDesc
> + TestIndex)->Func, (mSuiteDesc[SuiteIndex].TestDesc +
> TestIndex)->PreReq, (mSuiteDesc[SuiteIndex].TestDesc +
> TestIndex)->CleanUp, (mSuiteDesc[SuiteIndex].TestDesc +
> TestIndex)->Context);
> 
> +        }
> 
> +    }
> 
> +    EXIT:
> 
> +    return Status;
> 
> +}
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCiph
> erTests.c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCiph
> erTests.c
> new file mode 100644
> index 000000000000..b3493073965f
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BlockCiph
> erTests.c
> @@ -0,0 +1,293 @@
> +/** @file
> 
> +  Application for Block Cipher Primitives Validation.
> 
> +
> 
> +Copyright (c) 2010, Intel Corporation. All rights
> reserved.<BR>
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +//
> 
> +// TDES test vectors are extracted from OpenSSL 0.9.8l,
> crypto\des\destest.c
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcbData[]
> = {
> 
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesEcbKey[]
> = {
> 
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> 
> +  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> TdesEcbCipher[] = {
> 
> +  0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7,
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> TdesEcb2Cipher[] = {
> 
> +  0x92, 0x95, 0xB5, 0x9B, 0xB3, 0x84, 0x73, 0x6E,
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesCbcData[]
> = {
> 
> +  0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
> 
> +  0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
> 
> +  0x68, 0x65, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TdesCbcKey[]
> = {
> 
> +  0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
> 
> +  0xf1, 0xe0, 0xd3, 0xc2, 0xb5, 0xa4, 0x97, 0x86,
> 
> +  0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TdesCbcIvec[] = {
> 
> +  0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> TdesCbc3Cipher[] = {
> 
> +  0x3F, 0xE3, 0x01, 0xC9, 0x62, 0xAC, 0x01, 0xD0,
> 
> +  0x22, 0x13, 0x76, 0x3C, 0x1C, 0xBD, 0x4C, 0xDC,
> 
> +  0x79, 0x96, 0x57, 0xC0, 0x64, 0xEC, 0xF5, 0xD4
> 
> +  };
> 
> +
> 
> +//
> 
> +// AES test vectors are from NIST KAT of AES
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes128EcbData[] = {
> 
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes128EcbKey[] = {
> 
> +  0x10, 0xa5, 0x88, 0x69, 0xd7, 0x4b, 0xe5, 0xa3, 0x74,
> 0xcf, 0x86, 0x7c, 0xfb, 0x47, 0x38, 0x59
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes128EcbCipher[] = {
> 
> +  0x6d, 0x25, 0x1e, 0x69, 0x44, 0xb0, 0x51, 0xe0, 0x4e,
> 0xaa, 0x6f, 0xb4, 0xdb, 0xf7, 0x84, 0x65
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes192EcbData[] = {
> 
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes192EcbKey[] = {
> 
> +  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> 
> +  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes192EcbCipher[] = {
> 
> +  0xdd, 0x8a, 0x49, 0x35, 0x14, 0x23, 0x1c, 0xbf, 0x56,
> 0xec, 0xce, 0xe4, 0xc4, 0x08, 0x89, 0xfb
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes256EcbData[] = {
> 
> +  0x01, 0x47, 0x30, 0xf8, 0x0a, 0xc6, 0x25, 0xfe, 0x84,
> 0xf0, 0x26, 0xc6, 0x0b, 0xfd, 0x54, 0x7d
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes256EcbKey[] = {
> 
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> 
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes256EcbCipher[] = {
> 
> +  0x5c, 0x9d, 0x84, 0x4e, 0xd4, 0x6f, 0x98, 0x85, 0x08,
> 0x5e, 0x5d, 0x6a, 0x4f, 0x94, 0xc7, 0xd7
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes128CbcData[] = {
> 
> +  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
> 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
> 
> +  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
> 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes128CbcKey[] = {
> 
> +  0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0, 0x61,
> 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes128CbcIvec[] = {
> 
> +  0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 0xdd,
> 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Aes128CbcCipher[] = {
> 
> +  0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a, 0x3a,
> 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a,
> 
> +  0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9, 0x1b,
> 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1
> 
> +  };
> 
> +
> 
> +//
> 
> +// ARC4 Test Vector defined in "Appendix A.1 Test
> Vectors from [CRYPTLIB]" of
> 
> +// IETF Draft draft-kaukonen-cipher-arcfour-03 ("A
> Stream Cipher Encryption Algorithm 'Arcfour'").
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Data[] =
> {
> 
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Key[] = {
> 
> +  0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Arc4Cipher[]
> = {
> 
> +  0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79
> 
> +  };
> 
> +
> 
> +
> 
> +typedef
> 
> +UINTN
> 
> +(EFIAPI *EFI_BLOCK_CIPHER_GET_CONTEXT_SIZE) (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +typedef
> 
> +BOOLEAN
> 
> +(EFIAPI *EFI_BLOCK_CIPHER_INIT) (
> 
> +  OUT  VOID         *BlockCipherContext,
> 
> +  IN   CONST UINT8  *Key,
> 
> +  IN   UINTN        KeyLength
> 
> +  );
> 
> +
> 
> +typedef
> 
> +BOOLEAN
> 
> +(EFIAPI *EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT) (
> 
> +  IN   VOID         *BlockCipherContext,
> 
> +  IN   CONST UINT8  *Input,
> 
> +  IN   UINTN        InputSize,
> 
> +  OUT  UINT8        *Output
> 
> +  );
> 
> +
> 
> +typedef
> 
> +BOOLEAN
> 
> +(EFIAPI *EFI_BLOCK_CIPHER_CBC_ENCRYPT_DECRYPT) (
> 
> +  IN   VOID         *BlockCipherContext,
> 
> +  IN   CONST UINT8  *Input,
> 
> +  IN   UINTN        InputSize,
> 
> +  IN   CONST UINT8  *Ivec,
> 
> +  OUT  UINT8        *Output
> 
> +  );
> 
> +
> 
> +typedef
> 
> +BOOLEAN
> 
> +(EFIAPI *EFI_BLOCK_CIPHER_RESET) (
> 
> +  IN OUT  VOID  *BlockCipherContext
> 
> +  );
> 
> +
> 
> +typedef struct {
> 
> +  EFI_BLOCK_CIPHER_GET_CONTEXT_SIZE
> GetContextSize;
> 
> +  EFI_BLOCK_CIPHER_INIT                  Init;
> 
> +  EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT   EcbEncrypt;
> 
> +  EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT   EcbDecrypt;
> 
> +  EFI_BLOCK_CIPHER_CBC_ENCRYPT_DECRYPT   CbcEncrypt;
> 
> +  EFI_BLOCK_CIPHER_CBC_ENCRYPT_DECRYPT   CbcDecrypt;
> 
> +  EFI_BLOCK_CIPHER_RESET                 Reset;
> 
> +  CONST UINT8                            *Key;
> 
> +  UINTN                                  KeySize;
> 
> +  CONST UINT8                            *Ivec;
> 
> +  CONST UINT8                            *Data;
> 
> +  UINTN                                  DataSize;
> 
> +  CONST UINT8                            *Cipher;
> 
> +  UINTN                                  CipherSize;
> 
> +  VOID                                   *Ctx;
> 
> +} BLOCK_CIPHER_TEST_CONTEXT;
> 
> +
> 
> +// These are commented out as they are deprecated, but
> are left in should they be used again
> 
> +//BLOCK_CIPHER_TEST_CONTEXT mTdesEcbTestCtx   =
> {TdesGetContextSize, TdesInit, TdesEcbEncrypt,
> TdesEcbDecrypt, NULL,           NULL,           NULL,
> TdesEcbKey,   64,              NULL,
> TdesEcbData,   8,                     TdesEcbCipher,
> 8};
> 
> +//BLOCK_CIPHER_TEST_CONTEXT mTdesCbcTestCtx   =
> {TdesGetContextSize, TdesInit, NULL,           NULL,
> TdesCbcEncrypt, TdesCbcDecrypt, NULL,      TdesCbcKey,
> 192,             TdesCbcIvec,   TdesCbcData,
> sizeof(TdesCbcData),   TdesCbc3Cipher,
> sizeof(TdesCbc3Cipher)};
> 
> +//BLOCK_CIPHER_TEST_CONTEXT mAes128EcbTestCtx =
> {AesGetContextSize,  AesInit,  AesEcbEncrypt,
> AesEcbDecrypt,  NULL,           NULL,           NULL,
> Aes128EcbKey, 128,             NULL,
> Aes128EcbData, sizeof(Aes128EcbData), Aes128EcbCipher,
> sizeof(Aes128EcbCipher)};
> 
> +//BLOCK_CIPHER_TEST_CONTEXT mAes192EcbTestCtx =
> {AesGetContextSize,  AesInit,  AesEcbEncrypt,
> AesEcbDecrypt,  NULL,           NULL,           NULL,
> Aes192EcbKey, 192,             NULL,
> Aes192EcbData, sizeof(Aes192EcbData), Aes192EcbCipher,
> sizeof(Aes192EcbCipher)};
> 
> +//BLOCK_CIPHER_TEST_CONTEXT mAes256EcbTestCtx =
> {AesGetContextSize,  AesInit,  AesEcbEncrypt,
> AesEcbDecrypt,  NULL,           NULL,           NULL,
> Aes256EcbKey, 256,             NULL,
> Aes256EcbData, sizeof(Aes256EcbData), Aes256EcbCipher,
> sizeof(Aes256EcbCipher)};
> 
> +//BLOCK_CIPHER_TEST_CONTEXT mArc4TestCtx      =
> {Arc4GetContextSize, Arc4Init, Arc4Encrypt,
> (EFI_BLOCK_CIPHER_ECB_ENCRYPT_DECRYPT), Arc4Decrypt,
> NULL,           NULL,           Arc4Reset, Arc4Key,
> sizeof(Arc4Key), NULL,          Arc4Data,
> sizeof(Arc4Data),      Arc4Cipher,
> sizeof(Arc4Cipher)};
> 
> +BLOCK_CIPHER_TEST_CONTEXT mAes128CbcTestCtx =
> {AesGetContextSize,  AesInit,  NULL,           NULL,
> AesCbcEncrypt,  AesCbcDecrypt,  NULL,      Aes128CbcKey,
> 128,             Aes128CbcIvec, Aes128CbcData,
> sizeof(Aes128CbcData), Aes128CbcCipher,
> sizeof(Aes128CbcCipher)};
> 
> +
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyBLockCiperPreReq (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  BLOCK_CIPHER_TEST_CONTEXT *TestContext;
> 
> +  UINTN             CtxSize;
> 
> +
> 
> +  TestContext = Context;
> 
> +  CtxSize = TestContext->GetContextSize ();
> 
> +  TestContext->Ctx = AllocatePool (CtxSize);
> 
> +  if (TestContext->Ctx == NULL) {
> 
> +    return UNIT_TEST_ERROR_TEST_FAILED;
> 
> +  }
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +VOID
> 
> +EFIAPI
> 
> +TestVerifyBLockCiperCleanUp (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  BLOCK_CIPHER_TEST_CONTEXT *TestContext;
> 
> +
> 
> +  TestContext = Context;
> 
> +  if (TestContext->Ctx != NULL) {
> 
> +    FreePool (TestContext->Ctx);
> 
> +  }
> 
> +}
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyBLockCiper (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  UINT8    Encrypt[256];
> 
> +  UINT8    Decrypt[256];
> 
> +  BOOLEAN  Status;
> 
> +  BLOCK_CIPHER_TEST_CONTEXT *TestContext;
> 
> +
> 
> +  TestContext = Context;
> 
> +
> 
> +  ZeroMem (Encrypt, sizeof (Encrypt));
> 
> +  ZeroMem (Decrypt, sizeof (Decrypt));
> 
> +
> 
> +  Status = TestContext->Init (TestContext->Ctx,
> TestContext->Key, TestContext->KeySize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  if (TestContext->Ivec == NULL) {
> 
> +    Status = TestContext->EcbEncrypt (TestContext->Ctx,
> TestContext->Data, TestContext->DataSize, Encrypt);
> 
> +    UT_ASSERT_TRUE (Status);
> 
> +
> 
> +    if (TestContext->Reset != NULL) {
> 
> +      Status = TestContext->Reset (TestContext->Ctx);
> 
> +      UT_ASSERT_TRUE (Status);
> 
> +    }
> 
> +
> 
> +    Status = TestContext->EcbDecrypt (TestContext->Ctx,
> Encrypt, TestContext->DataSize, Decrypt);
> 
> +    UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  } else {
> 
> +    Status = TestContext->CbcEncrypt (TestContext->Ctx,
> TestContext->Data, TestContext->DataSize, TestContext-
> >Ivec, Encrypt);
> 
> +    UT_ASSERT_TRUE (Status);
> 
> +
> 
> +    if (TestContext->Reset != NULL) {
> 
> +      Status = TestContext->Reset (TestContext->Ctx);
> 
> +      UT_ASSERT_TRUE (Status);
> 
> +    }
> 
> +
> 
> +    Status = TestContext->CbcDecrypt (TestContext->Ctx,
> Encrypt, TestContext->DataSize, TestContext->Ivec,
> Decrypt);
> 
> +    UT_ASSERT_TRUE (Status);
> 
> +  }
> 
> +
> 
> +  UT_ASSERT_MEM_EQUAL (Encrypt, TestContext->Cipher,
> TestContext->CipherSize);
> 
> +  UT_ASSERT_MEM_EQUAL (Decrypt, TestContext->Data,
> TestContext->DataSize);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +TEST_DESC mBlockCipherTest[] = {
> 
> +    //
> 
> +    // -----Description-------------------------Class--
> -----------------------Function---------------Pre-------
> --------------------Post------------------Context
> 
> +    //
> 
> +    {"TestVerifyAes128Cbc()",
> "CryptoPkg.BaseCryptLib.BlockCipher",
> TestVerifyBLockCiper, TestVerifyBLockCiperPreReq,
> TestVerifyBLockCiperCleanUp, &mAes128CbcTestCtx},
> 
> +    // These are commented out as these functions have
> been deprecated, but they have been left in for future
> reference
> 
> +    //{"TestVerifyTdesEcb()",
> "CryptoPkg.BaseCryptLib.BlockCipher",
> TestVerifyBLockCiper, TestVerifyBLockCiperPreReq,
> TestVerifyBLockCiperCleanUp, &mTdesEcbTestCtx},
> 
> +    //{"TestVerifyTdesCbc()",
> "CryptoPkg.BaseCryptLib.BlockCipher",
> TestVerifyBLockCiper, TestVerifyBLockCiperPreReq,
> TestVerifyBLockCiperCleanUp, &mTdesCbcTestCtx},
> 
> +    //{"TestVerifyAes128Ecb()",
> "CryptoPkg.BaseCryptLib.BlockCipher",
> TestVerifyBLockCiper, TestVerifyBLockCiperPreReq,
> TestVerifyBLockCiperCleanUp, &mAes128EcbTestCtx},
> 
> +    //{"TestVerifyAes192Ecb()",
> "CryptoPkg.BaseCryptLib.BlockCipher",
> TestVerifyBLockCiper, TestVerifyBLockCiperPreReq,
> TestVerifyBLockCiperCleanUp, &mAes192EcbTestCtx},
> 
> +    //{"TestVerifyAes256Ecb()",
> "CryptoPkg.BaseCryptLib.BlockCipher",
> TestVerifyBLockCiper, TestVerifyBLockCiperPreReq,
> TestVerifyBLockCiperCleanUp, &mAes256EcbTestCtx},
> 
> +    //{"TestVerifyArc4()",
> "CryptoPkg.BaseCryptLib.BlockCipher",
> TestVerifyBLockCiper, TestVerifyBLockCiperPreReq,
> TestVerifyBLockCiperCleanUp, &mArc4TestCtx},
> 
> +};
> 
> +
> 
> +UINTN mBlockCipherTestNum =
> ARRAY_SIZE(mBlockCipherTest);
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c
> new file mode 100644
> index 000000000000..422b990f2c2d
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/DhTests.c
> @@ -0,0 +1,106 @@
> +/** @file
> 
> +  Application for Diffie-Hellman Primitives Validation.
> 
> +
> 
> +Copyright (c) 2010 - 2014, Intel Corporation. All
> rights reserved.<BR>
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +VOID    *mDh1;
> 
> +VOID    *mDh2;
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyDhPreReq (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  mDh1 = DhNew ();
> 
> +  if (mDh1 == NULL) {
> 
> +    return UNIT_TEST_ERROR_TEST_FAILED;
> 
> +  }
> 
> +
> 
> +  mDh2 = DhNew ();
> 
> +  if (mDh2 == NULL) {
> 
> +    return UNIT_TEST_ERROR_TEST_FAILED;
> 
> +  }
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +VOID
> 
> +EFIAPI
> 
> +TestVerifyDhCleanUp (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  if (mDh1 != NULL) {
> 
> +    DhFree (mDh1);
> 
> +    mDh1 = NULL;
> 
> +  }
> 
> +  if (mDh2 != NULL) {
> 
> +    DhFree (mDh2);
> 
> +    mDh2 = NULL;
> 
> +  }
> 
> +}
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyDhGenerateKey (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  UINT8   Prime[64];
> 
> +  UINT8   PublicKey1[64];
> 
> +  UINTN   PublicKey1Length;
> 
> +  UINT8   PublicKey2[64];
> 
> +  UINTN   PublicKey2Length;
> 
> +  UINT8   Key1[64];
> 
> +  UINTN   Key1Length;
> 
> +  UINT8   Key2[64];
> 
> +  UINTN   Key2Length;
> 
> +  BOOLEAN Status;
> 
> +
> 
> +  //
> 
> +  // Initialize Key Length
> 
> +  //
> 
> +  PublicKey1Length = sizeof (PublicKey1);
> 
> +  PublicKey2Length = sizeof (PublicKey2);
> 
> +  Key1Length       = sizeof (Key1);
> 
> +  Key2Length       = sizeof (Key2);
> 
> +
> 
> +  Status = DhGenerateParameter (mDh1, 2, 64, Prime);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = DhSetParameter (mDh2, 2, 64, Prime);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = DhGenerateKey (mDh1, PublicKey1,
> &PublicKey1Length);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = DhGenerateKey (mDh2, PublicKey2,
> &PublicKey2Length);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = DhComputeKey (mDh1, PublicKey2,
> PublicKey2Length, Key1, &Key1Length);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = DhComputeKey (mDh2, PublicKey1,
> PublicKey1Length, Key2, &Key2Length);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  UT_ASSERT_EQUAL (Key1Length, Key2Length);
> 
> +
> 
> +  UT_ASSERT_MEM_EQUAL (Key1, Key2, Key1Length);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +TEST_DESC mDhTest[] = {
> 
> +    //
> 
> +    // -----Description--------------------------------
> Class---------------------Function----------------Pre---
> --------------Post------------Context
> 
> +    //
> 
> +    {"TestVerifyDhGenerateKey()",
> "CryptoPkg.BaseCryptLib.Dh",   TestVerifyDhGenerateKey,
> TestVerifyDhPreReq, TestVerifyDhCleanUp, NULL},
> 
> +};
> 
> +
> 
> +UINTN mDhTestNum = ARRAY_SIZE(mDhTest);
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests
> .c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests
> .c
> new file mode 100644
> index 000000000000..bc47c5736246
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HashTests
> .c
> @@ -0,0 +1,197 @@
> +/** @file
> 
> +  Application for Hash Primitives Validation.
> 
> +
> 
> +Copyright (c) 2010 - 2016, Intel Corporation. All
> rights reserved.<BR>
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +//
> 
> +// Max Known Digest Size is SHA512 Output (64 bytes) by
> far
> 
> +//
> 
> +#define MAX_DIGEST_SIZE    64
> 
> +
> 
> +//
> 
> +// Message string for digest validation
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *HashData =
> "abc";
> 
> +
> 
> +//
> 
> +// Result for MD5("abc"). (From "A.5 Test suite" of
> IETF RFC1321)
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Md5Digest[MD5_DIGEST_SIZE] = {
> 
> +  0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, 0xd6,
> 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72
> 
> +
> 
> +  };
> 
> +
> 
> +//
> 
> +// Result for SHA-1("abc"). (From "A.1 SHA-1 Example"
> of NIST FIPS 180-2)
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Sha1Digest[SHA1_DIGEST_SIZE] = {
> 
> +  0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 0xba,
> 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c,
> 
> +  0x9c, 0xd0, 0xd8, 0x9d
> 
> +  };
> 
> +
> 
> +//
> 
> +// Result for SHA-256("abc"). (From "B.1 SHA-256
> Example" of NIST FIPS 180-2)
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Sha256Digest[SHA256_DIGEST_SIZE] = {
> 
> +  0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41,
> 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
> 
> +  0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4,
> 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
> 
> +  };
> 
> +
> 
> +//
> 
> +// Result for SHA-384("abc"). (From "D.1 SHA-384
> Example" of NIST FIPS 180-2)
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Sha384Digest[SHA384_DIGEST_SIZE] = {
> 
> +  0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, 0xb5,
> 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
> 
> +  0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, 0x1a,
> 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
> 
> +  0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, 0x58,
> 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7
> 
> +  };
> 
> +
> 
> +//
> 
> +// Result for SHA-512("abc"). (From "C.1 SHA-512
> Example" of NIST FIPS 180-2)
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> Sha512Digest[SHA512_DIGEST_SIZE] = {
> 
> +  0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 0xcc,
> 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
> 
> +  0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 0x0a,
> 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
> 
> +  0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 0x36,
> 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
> 
> +  0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, 0x2a,
> 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f
> 
> +  };
> 
> +
> 
> +typedef
> 
> +UINTN
> 
> +(EFIAPI *EFI_HASH_GET_CONTEXT_SIZE) (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +typedef
> 
> +BOOLEAN
> 
> +(EFIAPI *EFI_HASH_INIT) (
> 
> +  OUT  VOID  *HashContext
> 
> +  );
> 
> +
> 
> +typedef
> 
> +BOOLEAN
> 
> +(EFIAPI *EFI_HASH_UPDATE) (
> 
> +  IN OUT  VOID        *HashContext,
> 
> +  IN      CONST VOID  *Data,
> 
> +  IN      UINTN       DataSize
> 
> +  );
> 
> +
> 
> +typedef
> 
> +BOOLEAN
> 
> +(EFIAPI *EFI_HASH_FINAL) (
> 
> +  IN OUT  VOID   *HashContext,
> 
> +  OUT     UINT8  *HashValue
> 
> +  );
> 
> +
> 
> +typedef
> 
> +BOOLEAN
> 
> +(EFIAPI *EFI_HASH_ALL) (
> 
> +  IN   CONST VOID  *Data,
> 
> +  IN   UINTN       DataSize,
> 
> +  OUT  UINT8       *HashValue
> 
> +  );
> 
> +
> 
> +typedef struct {
> 
> +  UINT32                     DigestSize;
> 
> +  EFI_HASH_GET_CONTEXT_SIZE  GetContextSize;
> 
> +  EFI_HASH_INIT              HashInit;
> 
> +  EFI_HASH_UPDATE            HashUpdate;
> 
> +  EFI_HASH_FINAL             HashFinal;
> 
> +  EFI_HASH_ALL               HashAll;
> 
> +  CONST UINT8                *Digest;
> 
> +  VOID                       *HashCtx;
> 
> +} HASH_TEST_CONTEXT;
> 
> +
> 
> +HASH_TEST_CONTEXT       mMd5TestCtx    =
> {MD5_DIGEST_SIZE,    Md5GetContextSize,    Md5Init,
> Md5Update,    Md5Final,    Md5HashAll,    Md5Digest};
> 
> +HASH_TEST_CONTEXT       mSha1TestCtx   =
> {SHA1_DIGEST_SIZE,   Sha1GetContextSize,   Sha1Init,
> Sha1Update,   Sha1Final,   Sha1HashAll,   Sha1Digest};
> 
> +HASH_TEST_CONTEXT       mSha256TestCtx =
> {SHA256_DIGEST_SIZE, Sha256GetContextSize, Sha256Init,
> Sha256Update, Sha256Final, Sha256HashAll, Sha256Digest};
> 
> +HASH_TEST_CONTEXT       mSha384TestCtx =
> {SHA384_DIGEST_SIZE, Sha384GetContextSize, Sha384Init,
> Sha384Update, Sha384Final, Sha384HashAll, Sha384Digest};
> 
> +HASH_TEST_CONTEXT       mSha512TestCtx =
> {SHA512_DIGEST_SIZE, Sha512GetContextSize, Sha512Init,
> Sha512Update, Sha512Final, Sha512HashAll, Sha512Digest};
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyHashPreReq (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  HASH_TEST_CONTEXT *HashTestContext;
> 
> +  UINTN             CtxSize;
> 
> +
> 
> +  HashTestContext = Context;
> 
> +  CtxSize = HashTestContext->GetContextSize ();
> 
> +  HashTestContext->HashCtx = AllocatePool (CtxSize);
> 
> +  if (HashTestContext->HashCtx == NULL) {
> 
> +    return UNIT_TEST_ERROR_TEST_FAILED;
> 
> +  }
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +VOID
> 
> +EFIAPI
> 
> +TestVerifyHashCleanUp (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  HASH_TEST_CONTEXT *HashTestContext;
> 
> +
> 
> +  HashTestContext = Context;
> 
> +  if (HashTestContext->HashCtx != NULL) {
> 
> +    FreePool (HashTestContext->HashCtx);
> 
> +  }
> 
> +}
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyHash (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  UINTN    DataSize;
> 
> +  UINT8    Digest[MAX_DIGEST_SIZE];
> 
> +  BOOLEAN  Status;
> 
> +  HASH_TEST_CONTEXT *HashTestContext;
> 
> +
> 
> +  HashTestContext = Context;
> 
> +
> 
> +  DataSize = AsciiStrLen (HashData);
> 
> +
> 
> +  ZeroMem (Digest, MAX_DIGEST_SIZE);
> 
> +
> 
> +  Status  = HashTestContext->HashInit (HashTestContext-
> >HashCtx);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status  = HashTestContext->HashUpdate
> (HashTestContext->HashCtx, HashData, DataSize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status  = HashTestContext->HashFinal
> (HashTestContext->HashCtx, Digest);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  UT_ASSERT_MEM_EQUAL (Digest, HashTestContext->Digest,
> HashTestContext->DigestSize);
> 
> +
> 
> +  ZeroMem (Digest, MAX_DIGEST_SIZE);
> 
> +  Status  = HashTestContext->HashAll (HashData,
> DataSize, Digest);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  UT_ASSERT_MEM_EQUAL (Digest, HashTestContext->Digest,
> HashTestContext->DigestSize);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +TEST_DESC mHashTest[] = {
> 
> +    //
> 
> +    // -----Description----------------Class-----------
> ----------Function---------------Pre------------------
> Post------------Context
> 
> +    //
> 
> +    {"TestVerifyMd5()",
> "CryptoPkg.BaseCryptLib.Hash",   TestVerifyHash,
> TestVerifyHashPreReq, TestVerifyHashCleanUp,
> &mMd5TestCtx},
> 
> +    {"TestVerifySha1()",
> "CryptoPkg.BaseCryptLib.Hash",   TestVerifyHash,
> TestVerifyHashPreReq, TestVerifyHashCleanUp,
> &mSha1TestCtx},
> 
> +    {"TestVerifySha256()",
> "CryptoPkg.BaseCryptLib.Hash",   TestVerifyHash,
> TestVerifyHashPreReq, TestVerifyHashCleanUp,
> &mSha256TestCtx},
> 
> +    {"TestVerifySha384()",
> "CryptoPkg.BaseCryptLib.Hash",   TestVerifyHash,
> TestVerifyHashPreReq, TestVerifyHashCleanUp,
> &mSha384TestCtx},
> 
> +    {"TestVerifySha512()",
> "CryptoPkg.BaseCryptLib.Hash",   TestVerifyHash,
> TestVerifyHashPreReq, TestVerifyHashCleanUp,
> &mSha512TestCtx},
> 
> +};
> 
> +
> 
> +UINTN mHashTestNum = ARRAY_SIZE(mHashTest);
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests
> .c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests
> .c
> new file mode 100644
> index 000000000000..2e0cdd7c4570
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HmacTests
> .c
> @@ -0,0 +1,184 @@
> +/** @file
> 
> +  Application for HMAC Primitives Validation.
> 
> +
> 
> +Copyright (c) 2010 - 2016, Intel Corporation. All
> rights reserved.<BR>
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +//
> 
> +// Max Known Digest Size is SHA512 Output (64 bytes) by
> far
> 
> +//
> 
> +#define MAX_DIGEST_SIZE    64
> 
> +
> 
> +//
> 
> +// Data string for HMAC validation
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *HmacData =
> "Hi There";
> 
> +
> 
> +//
> 
> +// Key value for HMAC-MD5 validation. (From "2. Test
> Cases for HMAC-MD5" of IETF RFC2202)
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> HmacMd5Key[16] = {
> 
> +  0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
> 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b
> 
> +  };
> 
> +
> 
> +//
> 
> +// Result for HMAC-MD5("Hi There"). (From "2. Test
> Cases for HMAC-MD5" of IETF RFC2202)
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> HmacMd5Digest[] = {
> 
> +  0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, 0x13,
> 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d
> 
> +  };
> 
> +
> 
> +//
> 
> +// Key value for HMAC-SHA-1 validation. (From "3. Test
> Cases for HMAC-SHA-1" of IETF RFC2202)
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> HmacSha1Key[20] = {
> 
> +  0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
> 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
> 
> +  0x0b, 0x0b, 0x0b, 0x0b
> 
> +  };
> 
> +
> 
> +//
> 
> +// Result for HMAC-SHA-1 ("Hi There"). (From "3. Test
> Cases for HMAC-SHA-1" of IETF RFC2202)
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> HmacSha1Digest[] = {
> 
> +  0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xe2,
> 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e,
> 
> +  0xf1, 0x46, 0xbe, 0x00
> 
> +  };
> 
> +
> 
> +//
> 
> +// Key value for HMAC-SHA-256 validation. (From "4.
> Test Vectors" of IETF RFC4231)
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> HmacSha256Key[20] = {
> 
> +  0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
> 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
> 
> +  0x0b, 0x0b, 0x0b, 0x0b
> 
> +  };
> 
> +
> 
> +//
> 
> +// Result for HMAC-SHA-256 ("Hi There"). (From "4. Test
> Vectors" of IETF RFC4231)
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> HmacSha256Digest[] = {
> 
> +  0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c,
> 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b,
> 
> +  0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26,
> 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7
> 
> +  };
> 
> +
> 
> +typedef
> 
> +VOID*
> 
> +(EFIAPI *EFI_HMAC_NEW) (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +typedef
> 
> +BOOLEAN
> 
> +(EFIAPI *EFI_HMAC_INIT) (
> 
> +  IN OUT  VOID        *HashContext,
> 
> +  IN   CONST UINT8    *Key,
> 
> +  IN   UINTN           KeySize
> 
> +  );
> 
> +
> 
> +typedef
> 
> +BOOLEAN
> 
> +(EFIAPI *EFI_HMAC_UPDATE) (
> 
> +  IN OUT  VOID        *HashContext,
> 
> +  IN      CONST VOID  *Data,
> 
> +  IN      UINTN       DataSize
> 
> +  );
> 
> +
> 
> +typedef
> 
> +BOOLEAN
> 
> +(EFIAPI *EFI_HMAC_FINAL) (
> 
> +  IN OUT  VOID   *HashContext,
> 
> +  OUT     UINT8  *HashValue
> 
> +  );
> 
> +
> 
> +typedef struct {
> 
> +  UINT32                     DigestSize;
> 
> +  EFI_HMAC_NEW               HmacNew;
> 
> +  EFI_HMAC_INIT              HmacInit;
> 
> +  EFI_HMAC_UPDATE            HmacUpdate;
> 
> +  EFI_HMAC_FINAL             HmacFinal;
> 
> +  CONST UINT8                *Key;
> 
> +  UINTN                      KeySize;
> 
> +  CONST UINT8                *Digest;
> 
> +  VOID                       *HmacCtx;
> 
> +} HMAC_TEST_CONTEXT;
> 
> +
> 
> +// These functions have been deprecated but they've
> been left commented out for future reference
> 
> +//HMAC_TEST_CONTEXT       mHmacMd5TestCtx    =
> {MD5_DIGEST_SIZE,    HmacMd5New,    HmacMd5SetKey,
> HmacMd5Update,    HmacMd5Final,    HmacMd5Key,
> sizeof(HmacMd5Key),    HmacMd5Digest};
> 
> +//HMAC_TEST_CONTEXT       mHmacSha1TestCtx   =
> {SHA1_DIGEST_SIZE,   HmacSha1New,   HmacSha1SetKey,
> HmacSha1Update,   HmacSha1Final,   HmacSha1Key,
> sizeof(HmacSha1Key),   HmacSha1Digest};
> 
> +HMAC_TEST_CONTEXT       mHmacSha256TestCtx =
> {SHA256_DIGEST_SIZE, HmacSha256New, HmacSha256SetKey,
> HmacSha256Update, HmacSha256Final, HmacSha256Key,
> sizeof(HmacSha256Key), HmacSha256Digest};
> 
> +
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyHmacPreReq (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  HMAC_TEST_CONTEXT *HmacTestContext;
> 
> +
> 
> +  HmacTestContext = Context;
> 
> +  HmacTestContext->HmacCtx = HmacTestContext-
> >HmacNew();
> 
> +  if (HmacTestContext->HmacCtx == NULL) {
> 
> +    return UNIT_TEST_ERROR_TEST_FAILED;
> 
> +  }
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +VOID
> 
> +EFIAPI
> 
> +TestVerifyHmacCleanUp (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  HMAC_TEST_CONTEXT *HmacTestContext;
> 
> +
> 
> +  HmacTestContext = Context;
> 
> +  if (HmacTestContext->HmacCtx != NULL) {
> 
> +    FreePool (HmacTestContext->HmacCtx);
> 
> +  }
> 
> +}
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyHmac (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  UINT8    Digest[MAX_DIGEST_SIZE];
> 
> +  BOOLEAN  Status;
> 
> +  HMAC_TEST_CONTEXT *HmacTestContext;
> 
> +
> 
> +  HmacTestContext = Context;
> 
> +
> 
> +  ZeroMem (Digest, MAX_DIGEST_SIZE);
> 
> +
> 
> +  Status  = HmacTestContext->HmacInit (HmacTestContext-
> >HmacCtx, HmacTestContext->Key, HmacTestContext-
> >KeySize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status  = HmacTestContext->HmacUpdate
> (HmacTestContext->HmacCtx, HmacData, 8);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status  = HmacTestContext->HmacFinal
> (HmacTestContext->HmacCtx, Digest);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  UT_ASSERT_MEM_EQUAL (Digest, HmacTestContext->Digest,
> HmacTestContext->DigestSize);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +TEST_DESC mHmacTest[] = {
> 
> +    //
> 
> +    // -----Description---------------------Class------
> ---------------Function---------------Pre---------------
> ---Post------------Context
> 
> +    //
> 
> +    {"TestVerifyHmacSha256()",
> "CryptoPkg.BaseCryptLib.Hmac",   TestVerifyHmac,
> TestVerifyHmacPreReq, TestVerifyHmacCleanUp,
> &mHmacSha256TestCtx},
> 
> +    // These functions have been deprecated but they've
> been left commented out for future reference
> 
> +    //{"TestVerifyHmacMd5()",
> "CryptoPkg.BaseCryptLib.Hmac",   TestVerifyHmac,
> TestVerifyHmacPreReq, TestVerifyHmacCleanUp,
> &mHmacMd5TestCtx},
> 
> +    //{"TestVerifyHmacSha1()",
> "CryptoPkg.BaseCryptLib.Hmac",   TestVerifyHmac,
> TestVerifyHmacPreReq, TestVerifyHmacCleanUp,
> &mHmacSha1TestCtx},
> 
> +
> 
> +};
> 
> +
> 
> +UINTN mHmacTestNum = ARRAY_SIZE(mHmacTest);
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncry
> ptTests.c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncry
> ptTests.c
> new file mode 100644
> index 000000000000..404020f96726
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/OaepEncry
> ptTests.c
> @@ -0,0 +1,308 @@
> +/** @file
> 
> +  This is a unit test for RSA OAEP encrypt.
> 
> +
> 
> +  Copyright (c) 2019, Intel Corporation. All rights
> reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +CONST  UINT8  RandSeed[] = "This is the random seed for
> PRNG verification.";
> 
> +
> 
> +//
> 
> +// Self signed X509 certificate
> 
> +// CN = ca.self
> 
> +// O = Intel
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> SelfTestCert[] = {
> 
> +  0x30, 0x82, 0x03, 0x90, 0x30, 0x82, 0x02, 0x78, 0x02,
> 0x09, 0x00, 0xE4, 0xDF, 0x47, 0x80, 0xEF,
> 
> +  0x4B, 0x3C, 0x6D, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86,
> 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B,
> 
> +  0x05, 0x00, 0x30, 0x81, 0x89, 0x31, 0x0B, 0x30, 0x09,
> 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
> 
> +  0x43, 0x4E, 0x31, 0x11, 0x30, 0x0F, 0x06, 0x03, 0x55,
> 0x04, 0x08, 0x0C, 0x08, 0x53, 0x68, 0x61,
> 
> +  0x6E, 0x67, 0x48, 0x61, 0x69, 0x31, 0x11, 0x30, 0x0F,
> 0x06, 0x03, 0x55, 0x04, 0x07, 0x0C, 0x08,
> 
> +  0x53, 0x68, 0x61, 0x6E, 0x67, 0x48, 0x61, 0x69, 0x31,
> 0x0E, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x0A, 0x0C, 0x05, 0x49, 0x6E, 0x74, 0x65, 0x6C, 0x31,
> 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x0B, 0x0C, 0x03, 0x46, 0x49, 0x45, 0x31, 0x10, 0x30,
> 0x0E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 
> +  0x07, 0x63, 0x61, 0x2E, 0x73, 0x65, 0x6C, 0x66, 0x31,
> 0x24, 0x30, 0x22, 0x06, 0x09, 0x2A, 0x86,
> 
> +  0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x01, 0x16, 0x15,
> 0x7A, 0x68, 0x69, 0x63, 0x68, 0x61, 0x6F,
> 
> +  0x2E, 0x67, 0x61, 0x6F, 0x40, 0x69, 0x6E, 0x74, 0x65,
> 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x30, 0x1E,
> 
> +  0x17, 0x0D, 0x31, 0x39, 0x30, 0x33, 0x32, 0x37, 0x30,
> 0x35, 0x35, 0x37, 0x30, 0x39, 0x5A, 0x17,
> 
> +  0x0D, 0x32, 0x30, 0x30, 0x33, 0x32, 0x36, 0x30, 0x35,
> 0x35, 0x37, 0x30, 0x39, 0x5A, 0x30, 0x81,
> 
> +  0x89, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
> 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x11,
> 
> +  0x30, 0x0F, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x08,
> 0x53, 0x68, 0x61, 0x6E, 0x67, 0x48, 0x61,
> 
> +  0x69, 0x31, 0x11, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x04,
> 0x07, 0x0C, 0x08, 0x53, 0x68, 0x61, 0x6E,
> 
> +  0x67, 0x48, 0x61, 0x69, 0x31, 0x0E, 0x30, 0x0C, 0x06,
> 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x05, 0x49,
> 
> +  0x6E, 0x74, 0x65, 0x6C, 0x31, 0x0C, 0x30, 0x0A, 0x06,
> 0x03, 0x55, 0x04, 0x0B, 0x0C, 0x03, 0x46,
> 
> +  0x49, 0x45, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55,
> 0x04, 0x03, 0x0C, 0x07, 0x63, 0x61, 0x2E,
> 
> +  0x73, 0x65, 0x6C, 0x66, 0x31, 0x24, 0x30, 0x22, 0x06,
> 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
> 
> +  0x01, 0x09, 0x01, 0x16, 0x15, 0x7A, 0x68, 0x69, 0x63,
> 0x68, 0x61, 0x6F, 0x2E, 0x67, 0x61, 0x6F,
> 
> +  0x40, 0x69, 0x6E, 0x74, 0x65, 0x6C, 0x2E, 0x63, 0x6F,
> 0x6D, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D,
> 
> +  0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
> 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01,
> 
> +  0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01,
> 0x01, 0x00, 0xBC, 0xE4, 0x67, 0xDC, 0xC7,
> 
> +  0xEA, 0x6F, 0x8A, 0xA7, 0xCC, 0xB2, 0x54, 0x47, 0x48,
> 0x6A, 0xE2, 0x39, 0xFF, 0xC2, 0x48, 0x58,
> 
> +  0x34, 0x07, 0x03, 0x6D, 0x39, 0xB3, 0x67, 0x46, 0x4C,
> 0xBC, 0xA0, 0xFA, 0x4E, 0x64, 0x23, 0x56,
> 
> +  0x47, 0x7B, 0xC9, 0x1A, 0x2A, 0x55, 0x42, 0x54, 0x10,
> 0x18, 0x30, 0x92, 0x60, 0x30, 0x5B, 0x9E,
> 
> +  0xC0, 0x65, 0xD2, 0xD4, 0x05, 0x4A, 0xA6, 0x10, 0x66,
> 0x04, 0xA9, 0x54, 0x4E, 0xEE, 0x49, 0x39,
> 
> +  0x43, 0x65, 0x1E, 0x2E, 0x28, 0xDE, 0x79, 0x24, 0xA9,
> 0x7E, 0xD8, 0x5B, 0xBC, 0x2F, 0x46, 0x6A,
> 
> +  0xB7, 0xB6, 0x0D, 0x17, 0x88, 0x37, 0x52, 0x5C, 0xFE,
> 0x93, 0xC0, 0xE2, 0xFD, 0x6A, 0x08, 0x1B,
> 
> +  0xFB, 0xD1, 0x87, 0xBD, 0xBD, 0x58, 0x57, 0x2C, 0x06,
> 0x5D, 0xD2, 0x7D, 0x52, 0xE2, 0x49, 0x8E,
> 
> +  0xDC, 0xE5, 0x26, 0xBD, 0x92, 0x60, 0xB0, 0x3F, 0x58,
> 0x5E, 0x52, 0xD7, 0x91, 0xDA, 0x93, 0x62,
> 
> +  0x8D, 0x71, 0x80, 0x53, 0xBA, 0x15, 0xC4, 0x1F, 0xF3,
> 0xBD, 0xE0, 0xC5, 0xA4, 0xB8, 0xD3, 0x64,
> 
> +  0x12, 0x14, 0x1B, 0x11, 0x6B, 0x7B, 0xC2, 0x92, 0xC7,
> 0xE2, 0x94, 0x0B, 0xB8, 0x67, 0x38, 0x48,
> 
> +  0x63, 0x11, 0x74, 0x25, 0x7C, 0x37, 0xC3, 0xB2, 0xAE,
> 0xD9, 0xA7, 0x17, 0x9C, 0x4B, 0x9D, 0x6C,
> 
> +  0x27, 0xB0, 0x87, 0x16, 0x6B, 0xF2, 0x96, 0xE5, 0x1D,
> 0x37, 0x27, 0xDE, 0xF2, 0x98, 0xB7, 0x81,
> 
> +  0x08, 0xD9, 0x7A, 0xBA, 0x84, 0x14, 0x61, 0x60, 0x48,
> 0xCE, 0xCE, 0x51, 0x73, 0xF4, 0xDB, 0xF1,
> 
> +  0x5F, 0x7A, 0x17, 0x71, 0x4F, 0xC1, 0x0B, 0xCE, 0xC7,
> 0x31, 0xC1, 0x4E, 0xA3, 0xEE, 0x6F, 0x72,
> 
> +  0x97, 0x90, 0xFB, 0x8B, 0x54, 0x9F, 0x82, 0x5B, 0x48,
> 0x5A, 0xF1, 0xAD, 0x8B, 0x3A, 0xCD, 0xCA,
> 
> +  0xB2, 0x8B, 0x7A, 0x53, 0xD4, 0xF7, 0x71, 0x16, 0x75,
> 0xA7, 0x35, 0x02, 0x03, 0x01, 0x00, 0x01,
> 
> +  0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7,
> 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03,
> 
> +  0x82, 0x01, 0x01, 0x00, 0x78, 0x64, 0xCD, 0x6F, 0xC0,
> 0xF9, 0xE7, 0xAB, 0x19, 0x0B, 0xA4, 0x92,
> 
> +  0x88, 0xD7, 0xE3, 0xC4, 0x9C, 0xCF, 0xF2, 0x49, 0xFC,
> 0xCE, 0x8C, 0xEC, 0x33, 0x3F, 0x24, 0x6F,
> 
> +  0xF7, 0xBC, 0x7C, 0x28, 0xEF, 0xAE, 0xAB, 0x7B, 0xAF,
> 0x84, 0xE3, 0x4E, 0x38, 0xAB, 0x66, 0x20,
> 
> +  0x7C, 0xB9, 0xE0, 0x37, 0xFD, 0x84, 0x28, 0x3C, 0xEE,
> 0x35, 0xC4, 0x75, 0x04, 0x43, 0xCA, 0x4F,
> 
> +  0x36, 0x60, 0xC4, 0x06, 0x16, 0x54, 0x3C, 0xF9, 0x47,
> 0x78, 0xBD, 0xE9, 0x7F, 0xF1, 0xE3, 0x0B,
> 
> +  0xC7, 0x7E, 0x30, 0xA4, 0xCB, 0x3A, 0xC7, 0xCD, 0x50,
> 0x9A, 0x6C, 0xC1, 0xE3, 0xF8, 0xF8, 0x16,
> 
> +  0xAA, 0x67, 0x7F, 0x92, 0xEE, 0x1D, 0x47, 0xF2, 0x96,
> 0xDF, 0xD7, 0x43, 0x64, 0x78, 0xA7, 0xD9,
> 
> +  0xF6, 0xA1, 0xD9, 0xEB, 0x5B, 0x2E, 0xC6, 0x9E, 0xEA,
> 0xD5, 0x04, 0x52, 0xA4, 0x73, 0x97, 0xC8,
> 
> +  0xB3, 0xFD, 0xE1, 0x7E, 0xB1, 0xA4, 0x3F, 0xF4, 0x56,
> 0x66, 0x8E, 0x6B, 0xBC, 0xD8, 0xF0, 0x7C,
> 
> +  0xBF, 0x58, 0xA4, 0xE0, 0x45, 0xDC, 0x2B, 0x0B, 0x2C,
> 0x40, 0x52, 0x4D, 0x4B, 0xA9, 0x8A, 0x77,
> 
> +  0x87, 0x31, 0xF8, 0x45, 0xD9, 0x60, 0xBB, 0xAD, 0x28,
> 0x29, 0x14, 0x0D, 0x0D, 0x8F, 0x0F, 0x34,
> 
> +  0x76, 0x88, 0xF3, 0x5A, 0x65, 0x00, 0x54, 0x22, 0x35,
> 0xBF, 0x3A, 0x2B, 0xE9, 0xB0, 0x24, 0xE5,
> 
> +  0xBE, 0xDF, 0x08, 0xA0, 0x02, 0xB2, 0x81, 0x01, 0xE8,
> 0x14, 0xBE, 0x6E, 0x7E, 0xBD, 0x60, 0x0C,
> 
> +  0x4A, 0xD8, 0x57, 0xA4, 0x50, 0xD3, 0xD0, 0x59, 0xCE,
> 0x57, 0x27, 0xE9, 0xA6, 0x16, 0x15, 0x5F,
> 
> +  0xF2, 0x6C, 0xCC, 0x57, 0x36, 0x20, 0x06, 0xE6, 0xA7,
> 0x24, 0x22, 0xB0, 0xB1, 0xC4, 0xBC, 0x2C,
> 
> +  0x5C, 0xCE, 0x92, 0x11, 0xFF, 0x6F, 0x8C, 0x14, 0x7E,
> 0xC4, 0x10, 0x02, 0xF6, 0x69, 0x86, 0x6D,
> 
> +  0x5B, 0x64, 0x81, 0x13,
> 
> +  };
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 PrivateKey[]
> = {
> 
> +  0x30, 0x82, 0x04, 0xA4, 0x02, 0x01, 0x00, 0x02, 0x82,
> 0x01, 0x01, 0x00, 0xBC, 0xE4, 0x67, 0xDC,
> 
> +  0xC7, 0xEA, 0x6F, 0x8A, 0xA7, 0xCC, 0xB2, 0x54, 0x47,
> 0x48, 0x6A, 0xE2, 0x39, 0xFF, 0xC2, 0x48,
> 
> +  0x58, 0x34, 0x07, 0x03, 0x6D, 0x39, 0xB3, 0x67, 0x46,
> 0x4C, 0xBC, 0xA0, 0xFA, 0x4E, 0x64, 0x23,
> 
> +  0x56, 0x47, 0x7B, 0xC9, 0x1A, 0x2A, 0x55, 0x42, 0x54,
> 0x10, 0x18, 0x30, 0x92, 0x60, 0x30, 0x5B,
> 
> +  0x9E, 0xC0, 0x65, 0xD2, 0xD4, 0x05, 0x4A, 0xA6, 0x10,
> 0x66, 0x04, 0xA9, 0x54, 0x4E, 0xEE, 0x49,
> 
> +  0x39, 0x43, 0x65, 0x1E, 0x2E, 0x28, 0xDE, 0x79, 0x24,
> 0xA9, 0x7E, 0xD8, 0x5B, 0xBC, 0x2F, 0x46,
> 
> +  0x6A, 0xB7, 0xB6, 0x0D, 0x17, 0x88, 0x37, 0x52, 0x5C,
> 0xFE, 0x93, 0xC0, 0xE2, 0xFD, 0x6A, 0x08,
> 
> +  0x1B, 0xFB, 0xD1, 0x87, 0xBD, 0xBD, 0x58, 0x57, 0x2C,
> 0x06, 0x5D, 0xD2, 0x7D, 0x52, 0xE2, 0x49,
> 
> +  0x8E, 0xDC, 0xE5, 0x26, 0xBD, 0x92, 0x60, 0xB0, 0x3F,
> 0x58, 0x5E, 0x52, 0xD7, 0x91, 0xDA, 0x93,
> 
> +  0x62, 0x8D, 0x71, 0x80, 0x53, 0xBA, 0x15, 0xC4, 0x1F,
> 0xF3, 0xBD, 0xE0, 0xC5, 0xA4, 0xB8, 0xD3,
> 
> +  0x64, 0x12, 0x14, 0x1B, 0x11, 0x6B, 0x7B, 0xC2, 0x92,
> 0xC7, 0xE2, 0x94, 0x0B, 0xB8, 0x67, 0x38,
> 
> +  0x48, 0x63, 0x11, 0x74, 0x25, 0x7C, 0x37, 0xC3, 0xB2,
> 0xAE, 0xD9, 0xA7, 0x17, 0x9C, 0x4B, 0x9D,
> 
> +  0x6C, 0x27, 0xB0, 0x87, 0x16, 0x6B, 0xF2, 0x96, 0xE5,
> 0x1D, 0x37, 0x27, 0xDE, 0xF2, 0x98, 0xB7,
> 
> +  0x81, 0x08, 0xD9, 0x7A, 0xBA, 0x84, 0x14, 0x61, 0x60,
> 0x48, 0xCE, 0xCE, 0x51, 0x73, 0xF4, 0xDB,
> 
> +  0xF1, 0x5F, 0x7A, 0x17, 0x71, 0x4F, 0xC1, 0x0B, 0xCE,
> 0xC7, 0x31, 0xC1, 0x4E, 0xA3, 0xEE, 0x6F,
> 
> +  0x72, 0x97, 0x90, 0xFB, 0x8B, 0x54, 0x9F, 0x82, 0x5B,
> 0x48, 0x5A, 0xF1, 0xAD, 0x8B, 0x3A, 0xCD,
> 
> +  0xCA, 0xB2, 0x8B, 0x7A, 0x53, 0xD4, 0xF7, 0x71, 0x16,
> 0x75, 0xA7, 0x35, 0x02, 0x03, 0x01, 0x00,
> 
> +  0x01, 0x02, 0x82, 0x01, 0x00, 0x13, 0xF7, 0xD1, 0x42,
> 0xF5, 0x9F, 0x42, 0xCB, 0x55, 0x91, 0xBE,
> 
> +  0x08, 0x4A, 0xC0, 0xCD, 0x0B, 0xBD, 0x35, 0xDC, 0x43,
> 0xE9, 0x8F, 0x16, 0x6E, 0xB6, 0x4D, 0x33,
> 
> +  0x39, 0xE7, 0xA4, 0x95, 0x0C, 0x2F, 0x69, 0xBA, 0x0C,
> 0x42, 0x42, 0xAC, 0x43, 0x46, 0x10, 0xD3,
> 
> +  0x92, 0x7F, 0x70, 0x74, 0x1E, 0x2E, 0x5B, 0x1C, 0xC1,
> 0x92, 0xB6, 0xA4, 0x0C, 0xF5, 0x7C, 0xD9,
> 
> +  0xB7, 0x54, 0x64, 0x74, 0x79, 0xB1, 0xFF, 0xE6, 0x10,
> 0xB7, 0x8C, 0xF8, 0x53, 0x88, 0x6D, 0xA9,
> 
> +  0x97, 0x04, 0xD9, 0x26, 0x1F, 0x99, 0x12, 0xFB, 0xAC,
> 0x65, 0xFB, 0xA5, 0xB3, 0x1C, 0x99, 0xB9,
> 
> +  0xBF, 0x6B, 0x35, 0x3E, 0x49, 0x55, 0xB5, 0x94, 0x4F,
> 0xE7, 0x25, 0x67, 0xB1, 0x01, 0xCD, 0xD2,
> 
> +  0x58, 0xE4, 0xBE, 0x87, 0x8C, 0x88, 0xD3, 0x0A, 0x38,
> 0xDC, 0x71, 0x5D, 0x88, 0x0A, 0xE2, 0x3E,
> 
> +  0x76, 0x63, 0x3B, 0xE4, 0x3C, 0x8F, 0x2F, 0x29, 0x1D,
> 0xD1, 0x66, 0x8D, 0xC0, 0x4A, 0x68, 0x15,
> 
> +  0x90, 0x4C, 0x95, 0x61, 0xF4, 0xFD, 0xE8, 0xFA, 0x9C,
> 0x6C, 0x00, 0x22, 0x23, 0xD5, 0x17, 0x6E,
> 
> +  0xEE, 0xA8, 0xD8, 0x70, 0xC5, 0x74, 0xEA, 0x09, 0x13,
> 0x7F, 0x0C, 0x37, 0x4D, 0x50, 0xCD, 0xE9,
> 
> +  0x16, 0xC2, 0xD5, 0xDE, 0x5E, 0xC3, 0xFC, 0x46, 0x08,
> 0xF1, 0x99, 0xC0, 0xB4, 0x28, 0xFD, 0x2B,
> 
> +  0x29, 0xEF, 0x76, 0xD7, 0x04, 0x4F, 0x02, 0x54, 0x16,
> 0x54, 0x55, 0x20, 0xEC, 0xBC, 0xBF, 0x85,
> 
> +  0x5F, 0x12, 0xCC, 0xFC, 0x0D, 0xF2, 0xEF, 0xFC, 0x4D,
> 0x3E, 0xA2, 0x5E, 0x97, 0xFE, 0x35, 0x10,
> 
> +  0x0F, 0x53, 0x1F, 0x80, 0xD5, 0xC0, 0xB4, 0xE9, 0xE9,
> 0x31, 0x4C, 0x89, 0x14, 0x72, 0x39, 0x65,
> 
> +  0x89, 0xEF, 0x7A, 0x51, 0x4A, 0xB9, 0xA9, 0xCC, 0x1B,
> 0x52, 0xB0, 0x02, 0x52, 0x65, 0x2F, 0x0B,
> 
> +  0x89, 0x41, 0x70, 0x1E, 0x01, 0x02, 0x81, 0x81, 0x00,
> 0xDB, 0xE8, 0x21, 0x9E, 0xDB, 0x58, 0x42,
> 
> +  0x0B, 0x02, 0x35, 0x87, 0xDF, 0x35, 0xF4, 0xC1, 0xEE,
> 0xD5, 0x72, 0x2C, 0xDC, 0x4D, 0xC7, 0xDA,
> 
> +  0x6D, 0x18, 0x0F, 0x68, 0x6F, 0xE7, 0xB0, 0x6C, 0xA0,
> 0xB2, 0x9E, 0xB8, 0x5E, 0x4A, 0x86, 0x81,
> 
> +  0x97, 0xBD, 0x78, 0xFC, 0x06, 0xD5, 0xBE, 0x98, 0x42,
> 0x38, 0x78, 0x78, 0x16, 0xAE, 0x39, 0x56,
> 
> +  0xFB, 0x67, 0x6B, 0xED, 0x7F, 0xB3, 0xC3, 0x7D, 0x95,
> 0x86, 0x05, 0x0C, 0xF1, 0x4C, 0xC2, 0x67,
> 
> +  0x94, 0x93, 0x1B, 0xB7, 0x91, 0x0A, 0x80, 0xE2, 0x85,
> 0xA7, 0x75, 0x20, 0x61, 0xCD, 0x40, 0x5B,
> 
> +  0x39, 0x13, 0x32, 0xF7, 0xB8, 0xD7, 0x0C, 0x39, 0x4C,
> 0x82, 0x4B, 0xA3, 0x9F, 0x5E, 0xB1, 0xB0,
> 
> +  0x38, 0x81, 0x8B, 0x1E, 0xBD, 0x2B, 0xC2, 0x9F, 0x3A,
> 0x68, 0x72, 0xC2, 0x90, 0xCB, 0xA2, 0xE2,
> 
> +  0xAC, 0x86, 0xFF, 0xC8, 0xD7, 0xB8, 0x97, 0x0E, 0x69,
> 0x02, 0x81, 0x81, 0x00, 0xDB, 0xE5, 0x21,
> 
> +  0x1F, 0x4C, 0x83, 0xD9, 0x7A, 0x56, 0x87, 0x82, 0xF1,
> 0x40, 0x1A, 0xD3, 0x5B, 0xC5, 0xB4, 0x4D,
> 
> +  0x18, 0x8A, 0xE3, 0x6B, 0xC9, 0x7E, 0x8F, 0x5D, 0x00,
> 0x33, 0x66, 0xEB, 0xAE, 0x8E, 0x54, 0x49,
> 
> +  0xD7, 0xEA, 0xF3, 0xF9, 0xED, 0xD7, 0xEE, 0x2C, 0xC8,
> 0xD6, 0x8F, 0x40, 0x0A, 0x53, 0xCB, 0x5D,
> 
> +  0x16, 0xB7, 0xEB, 0x4E, 0xFB, 0x11, 0x18, 0x1B, 0x4B,
> 0x6B, 0x43, 0x04, 0xD6, 0x1D, 0x8F, 0x6D,
> 
> +  0x4D, 0x48, 0x8B, 0x6C, 0x82, 0x52, 0xB4, 0x8D, 0x58,
> 0x9B, 0x19, 0x8D, 0xE0, 0x0D, 0xFD, 0x15,
> 
> +  0x9D, 0x35, 0xDF, 0x5E, 0xED, 0xDB, 0x8F, 0x8C, 0x44,
> 0x11, 0xC9, 0x9A, 0xD9, 0x3F, 0xD4, 0xA5,
> 
> +  0xEE, 0x68, 0x3B, 0x38, 0xD1, 0x66, 0xB0, 0x62, 0x7E,
> 0xA5, 0x04, 0xD1, 0x67, 0xA4, 0x1D, 0x93,
> 
> +  0xD6, 0x2A, 0xFB, 0xF6, 0xC1, 0xB2, 0xC4, 0x02, 0x8A,
> 0xB2, 0xA8, 0xD0, 0xED, 0x02, 0x81, 0x81,
> 
> +  0x00, 0xD1, 0x1D, 0x98, 0x43, 0x09, 0x10, 0x8F, 0x95,
> 0x0A, 0x5F, 0xBF, 0x3A, 0x1A, 0x84, 0x0A,
> 
> +  0x9B, 0x44, 0x6C, 0x53, 0x8E, 0x97, 0x84, 0x72, 0x08,
> 0x85, 0xF5, 0xB8, 0xF9, 0x99, 0x58, 0x22,
> 
> +  0xA4, 0x59, 0xD7, 0x27, 0x39, 0xBB, 0x22, 0xD7, 0x3F,
> 0x65, 0x95, 0x14, 0x0C, 0xA7, 0xDB, 0x9B,
> 
> +  0xCC, 0x75, 0x08, 0xD2, 0x21, 0xB7, 0x41, 0x9D, 0x9E,
> 0x6A, 0x85, 0xAE, 0x8E, 0x5E, 0x72, 0x8B,
> 
> +  0x0C, 0xD2, 0x2A, 0x21, 0x59, 0xA1, 0x05, 0xC9, 0x1B,
> 0xF7, 0x1C, 0x47, 0x5E, 0x6C, 0x9F, 0x8D,
> 
> +  0x49, 0x4D, 0xA9, 0xCA, 0xC6, 0x56, 0x39, 0x59, 0xC6,
> 0x17, 0xA4, 0xC2, 0xFF, 0x09, 0xB8, 0x7D,
> 
> +  0x10, 0x6D, 0x62, 0xE2, 0x50, 0x9D, 0xEA, 0xD8, 0xC9,
> 0x93, 0x1E, 0xA9, 0x77, 0x78, 0x92, 0x95,
> 
> +  0x7A, 0x24, 0x72, 0xE4, 0xE4, 0x6E, 0x51, 0x11, 0xBE,
> 0xC0, 0x8D, 0xA1, 0xFE, 0xC9, 0x71, 0x13,
> 
> +  0xE9, 0x02, 0x81, 0x80, 0x38, 0xE5, 0x3F, 0x3D, 0xB6,
> 0xF1, 0x82, 0x8A, 0xD9, 0xEA, 0xB4, 0x21,
> 
> +  0xB1, 0xE1, 0x7F, 0x00, 0x86, 0xD6, 0x11, 0x00, 0xA1,
> 0xA7, 0x18, 0x53, 0x89, 0x50, 0x94, 0xD2,
> 
> +  0xA1, 0x7A, 0x26, 0xCF, 0x02, 0x7A, 0xA2, 0xA4, 0xA0,
> 0x61, 0x42, 0x30, 0x9D, 0x27, 0x3E, 0x25,
> 
> +  0x35, 0x06, 0xD9, 0x9E, 0x12, 0x72, 0x53, 0x02, 0xB6,
> 0xD1, 0xC6, 0x9C, 0xC5, 0x9E, 0x84, 0x29,
> 
> +  0x6E, 0x76, 0x67, 0xC0, 0xF2, 0xE3, 0x12, 0x77, 0xE5,
> 0xA6, 0x55, 0x8C, 0x1E, 0xD4, 0x22, 0xA2,
> 
> +  0x63, 0x77, 0x28, 0x33, 0x69, 0xCB, 0x2B, 0x15, 0x83,
> 0x43, 0xE9, 0x6F, 0x07, 0xD9, 0x4B, 0x84,
> 
> +  0xAD, 0x49, 0x89, 0xAC, 0x5E, 0x8C, 0xA9, 0xE6, 0x56,
> 0xC7, 0xC3, 0xFA, 0xC2, 0x64, 0x2F, 0x07,
> 
> +  0xEF, 0xB0, 0xA0, 0x71, 0xFD, 0x8F, 0xBD, 0x99, 0xB3,
> 0x83, 0x80, 0x24, 0x3C, 0x19, 0xE5, 0x42,
> 
> +  0x77, 0xD9, 0xA0, 0x3D, 0x02, 0x81, 0x81, 0x00, 0xB7,
> 0x35, 0xE9, 0x66, 0x4A, 0xCD, 0x5F, 0x5C,
> 
> +  0x44, 0x9A, 0x7F, 0x23, 0xAE, 0xC2, 0x7F, 0xF0, 0x8D,
> 0xE4, 0xDB, 0xCD, 0x1A, 0x8A, 0x40, 0xD7,
> 
> +  0x0A, 0xC4, 0x3E, 0xC5, 0x03, 0xFB, 0x47, 0xAB, 0x72,
> 0xDF, 0xD7, 0x68, 0x27, 0x6E, 0x86, 0x94,
> 
> +  0x2A, 0x2A, 0xDA, 0x25, 0x9E, 0xF6, 0x5E, 0xE0, 0x6D,
> 0x7C, 0x7D, 0xFE, 0x72, 0xDD, 0xC7, 0xBC,
> 
> +  0x74, 0xC7, 0xAD, 0xEA, 0x44, 0xBE, 0x5C, 0x8A, 0x03,
> 0xCD, 0x35, 0x74, 0x6F, 0x4E, 0x92, 0x31,
> 
> +  0xBE, 0x57, 0x9A, 0x02, 0x0C, 0xFC, 0xD1, 0xD5, 0xE7,
> 0x3E, 0x53, 0x0C, 0x47, 0x12, 0x39, 0x45,
> 
> +  0x6E, 0x35, 0x24, 0xA6, 0xDA, 0x42, 0x63, 0xC6, 0xBF,
> 0xCA, 0xE8, 0x32, 0xFD, 0x61, 0xC0, 0x80,
> 
> +  0x39, 0xD2, 0xB7, 0x0D, 0xF3, 0xA2, 0xF3, 0xE4, 0x49,
> 0x26, 0x89, 0xD0, 0xA0, 0x24, 0xC8, 0x27,
> 
> +  0x86, 0x10, 0x09, 0x88, 0x6C, 0x35, 0x60, 0xF2,
> 
> +  };
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyOaepEncrypt (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  BOOLEAN             Status;
> 
> +  UINT8               File[4];
> 
> +  UINT8               *OutBuffer;
> 
> +  UINTN               OutBufferSize;
> 
> +  UINT8               *OutBuffer2;
> 
> +  UINTN               OutBuffer2Size;
> 
> +
> 
> +  // Create a file and add content '123' in it
> 
> +  File[0] = '1';
> 
> +  File[1] = '2';
> 
> +  File[2] = '3';
> 
> +  File[3] = 0;
> 
> +
> 
> +  OutBuffer = NULL;
> 
> +  OutBufferSize = 0;
> 
> +  OutBuffer2 = NULL;
> 
> +  OutBuffer2Size = 0;
> 
> +
> 
> +  Status = Pkcs1v2Encrypt (
> 
> +            SelfTestCert,
> 
> +            (UINTN)sizeof (SelfTestCert),
> 
> +            File,
> 
> +            (UINTN)sizeof (File),
> 
> +            NULL,
> 
> +            0,
> 
> +            &OutBuffer,
> 
> +            (UINTN *)&OutBufferSize
> 
> +            );
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = Pkcs1v2Encrypt (
> 
> +            SelfTestCert,
> 
> +            (UINTN)sizeof (SelfTestCert),
> 
> +            File,
> 
> +            (UINTN)4,
> 
> +            NULL,
> 
> +            0,
> 
> +            &OutBuffer2,
> 
> +            (UINTN *)&OutBuffer2Size
> 
> +            );
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  // TRUE - the two OutBuffers are indentical. That
> means the Oaep encrypt result is incorrect.
> 
> +  Status = (CompareMem (OutBuffer, OutBuffer2,
> OutBufferSize >= OutBuffer2Size ? OutBufferSize :
> OutBuffer2Size) == 0);
> 
> +  UT_ASSERT_FALSE (Status);
> 
> +
> 
> +  if (OutBuffer) {
> 
> +    FreePool (OutBuffer);
> 
> +    OutBuffer = NULL;
> 
> +    OutBufferSize = 0;
> 
> +  }
> 
> +
> 
> +  if (OutBuffer2) {
> 
> +    FreePool (OutBuffer2);
> 
> +    OutBuffer2 = NULL;
> 
> +    OutBuffer2Size = 0;
> 
> +  }
> 
> +
> 
> +  Status = Pkcs1v2Encrypt (
> 
> +              SelfTestCert,
> 
> +              (UINTN)sizeof (SelfTestCert),
> 
> +              File,
> 
> +              (UINTN)4,
> 
> +              RandSeed,
> 
> +              (UINTN)sizeof (RandSeed),
> 
> +              &OutBuffer,
> 
> +              (UINTN *)&OutBufferSize
> 
> +              );
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = Pkcs1v2Encrypt (
> 
> +              SelfTestCert,
> 
> +              (UINTN)sizeof (SelfTestCert),
> 
> +              File,
> 
> +              (UINTN)4,
> 
> +              RandSeed,
> 
> +              (UINTN)sizeof (RandSeed),
> 
> +              &OutBuffer2,
> 
> +              (UINTN *)&OutBuffer2Size
> 
> +              );
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  // TRUE - the two OutBuffers are indentical. That
> means the Oaep encrypt result is incorrect.
> 
> +  Status = (CompareMem (OutBuffer, OutBuffer2,
> OutBufferSize >= OutBuffer2Size ? OutBufferSize :
> OutBuffer2Size) == 0);
> 
> +  UT_ASSERT_FALSE (Status);
> 
> +
> 
> +  if (OutBuffer) {
> 
> +    FreePool (OutBuffer);
> 
> +    OutBuffer = NULL;
> 
> +    OutBufferSize = 0;
> 
> +  }
> 
> +
> 
> +  if (OutBuffer2) {
> 
> +    FreePool (OutBuffer2);
> 
> +    OutBuffer2 = NULL;
> 
> +    OutBuffer2Size = 0;
> 
> +  }
> 
> +
> 
> +  Status = Pkcs1v2Encrypt (
> 
> +              NULL,
> 
> +              (UINTN)sizeof (SelfTestCert),
> 
> +              File,
> 
> +              (UINTN)4,
> 
> +              NULL,
> 
> +              0,
> 
> +              &OutBuffer,
> 
> +              (UINTN *)&OutBufferSize
> 
> +              );
> 
> +  UT_ASSERT_FALSE (Status);
> 
> +
> 
> +  Status = Pkcs1v2Encrypt (
> 
> +              SelfTestCert,
> 
> +              (UINTN)sizeof (SelfTestCert),
> 
> +              File,
> 
> +              (UINTN)4,
> 
> +              NULL,
> 
> +              0,
> 
> +              (UINT8 **)NULL,
> 
> +              (UINTN *)&OutBufferSize
> 
> +              );
> 
> +  UT_ASSERT_FALSE (Status);
> 
> +
> 
> +  Status = Pkcs1v2Encrypt (
> 
> +              SelfTestCert,
> 
> +              (UINTN)sizeof (SelfTestCert),
> 
> +              File,
> 
> +              (UINTN)4,
> 
> +              NULL,
> 
> +              0,
> 
> +              &OutBuffer,
> 
> +              (UINTN *)NULL
> 
> +              );
> 
> +  UT_ASSERT_FALSE (Status);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +TEST_DESC mOaepTest[] = {
> 
> +    //
> 
> +    // -----Description--------------------------------
> ------Class----------------------Function---------------
> --Pre---Post--Context
> 
> +    //
> 
> +    {"TestVerifyOaepEncrypt()",
> "CryptoPkg.BaseCryptLib.Pkcs1v2Encrypt",
> TestVerifyOaepEncrypt, NULL, NULL, NULL},
> 
> +};
> 
> +
> 
> +UINTN mOaepTestNum = ARRAY_SIZE(mOaepTest);
> 
> +
> 
> +
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkd
> f2Tests.c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkd
> f2Tests.c
> new file mode 100644
> index 000000000000..b64248aa5619
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs5Pbkd
> f2Tests.c
> @@ -0,0 +1,71 @@
> +/** @file
> 
> +  Application for PKCS#5 PBKDF2 Function Validation.
> 
> +
> 
> +Copyright (c) 2016, Intel Corporation. All rights
> reserved.<BR>
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +//
> 
> +// PBKDF2 HMAC-SHA1 Test Vector from RFC6070
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8  *Password =
> "password";  // Input Password
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED UINTN        PassLen   =
> 8;           // Length of Input Password
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8  *Salt     =
> "salt";      // Input Salt
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED UINTN        SaltLen   =
> 4;           // Length of Input Salt
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINTN  Count     =
> 2;           // InterationCount
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINTN  KeyLen    =
> 20;          // Length of derived key
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8  DerivedKey[]
> = {        // Expected output key
> 
> +  0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, 0xcd,
> 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0,
> 
> +  0xd8, 0xde, 0x89, 0x57
> 
> +  };
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyPkcs5Pbkdf2 (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  BOOLEAN  Status;
> 
> +  UINT8    *OutKey;
> 
> +
> 
> +  OutKey = AllocatePool (KeyLen);
> 
> +
> 
> +  //
> 
> +  // Verify PKCS#5 PBKDF2 Key Derivation Function
> 
> +  //
> 
> +  Status = Pkcs5HashPassword (
> 
> +             PassLen,
> 
> +             Password,
> 
> +             SaltLen,
> 
> +             (CONST UINT8 *)Salt,
> 
> +             Count,
> 
> +             SHA1_DIGEST_SIZE,
> 
> +             KeyLen,
> 
> +             OutKey
> 
> +             );
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  //
> 
> +  // Check the output key with the expected key result
> 
> +  //
> 
> +  UT_ASSERT_MEM_EQUAL (OutKey, DerivedKey, KeyLen);
> 
> +
> 
> +  //
> 
> +  // Release Resources
> 
> +  //
> 
> +  FreePool (OutKey);
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +TEST_DESC mPkcs5Test[] = {
> 
> +    //
> 
> +    // -----Description------------------------------
> Class----------------------Function-----------------Pre-
> --Post--Context
> 
> +    //
> 
> +    {"TestVerifyPkcs5Pbkdf2()",
> "CryptoPkg.BaseCryptLib.Pkcs5",   TestVerifyPkcs5Pbkdf2,
> NULL, NULL, NULL},
> 
> +};
> 
> +
> 
> +UINTN mPkcs5TestNum = ARRAY_SIZE(mPkcs5Test);
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuT
> ests.c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuT
> ests.c
> new file mode 100644
> index 000000000000..b5ae4f6a89e0
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuT
> ests.c
> @@ -0,0 +1,524 @@
> +/** @file -- Pkcs7EkuVerify.c
> 
> + * Copyright (c) Microsoft Corporation.
> 
> + * SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +  This is an test code which verifies specified
> 
> +  Enhanced Key Usages (EKU)'s are present in the leaf
> signer
> 
> +  of a PKCS7 formatted signature.
> 
> +
> 
> +
> 
> +  A typical signing certificate chain looks like this:
> (Could be RSA or ECC).
> 
> +
> 
> +      ------------------------------------------
> 
> +     |                                          | //
> Root of trust. ECDSA P521 curve
> 
> +     |          TestEKUParsingRoot              | //
> SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
> 
> +     |                                          | //
> CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
> 
> +      ------------------------------------------
> 
> +                        ^
> 
> +                        |
> 
> +      ------------------------------------------
> 
> +     |                                          | //
> Policy CA.  Issues subordinate CAs. ECC P384 curve.
> 
> +     |       TestEKUParsingPolicyCA             | //
> SHA 256 Key Usage:
> 
> +     |                                          | //
> CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
> 
> +      ------------------------------------------
> 
> +                        ^
> 
> +                        |
> 
> +      ------------------------------------------
> 
> +     |                                          | //
> Issues end-entity (leaf) signers. ECC P256 curve.
> 
> +     |        TestEKUParsingIssuingCA           | //
> SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
> 
> +     |                                          | //
> Enhanced Key Usage:
> 
> +      ------------------------------------------  //
> 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
> 
> +                        ^
> 
> +                        |
> 
> +         --------------------------------------
> 
> +        /     TestEKUParsingLeafSigner &&     /   //
> Leaf signer,  ECC P256 curve.
> 
> +       /    TestEKUParsingLeafSignerPid12345 /    //
> SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
> 
> +      /                                     /     //
> Enhanced Key usages:
> 
> +      --------------------------------------      //
> 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
> 
> +                                                  //
> 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID.
> 
> +
> 
> +
> 
> +
> 
> +
> 
> +
> 
> +**/
> 
> +
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +#include "Pkcs7EkuTestSignatures.h"
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +VerifyEKUsInPkcs7Signature (
> 
> +  IN CONST UINT8  *Pkcs7Signature,
> 
> +  IN CONST UINT32  SignatureSize,
> 
> +  IN CONST CHAR8  *RequiredEKUs[],
> 
> +  IN CONST UINT32  RequiredEKUsSize,
> 
> +  IN BOOLEAN       RequireAllPresent
> 
> +  );
> 
> +
> 
> +///====================================================
> ============================================
> 
> +///====================================================
> ============================================
> 
> +///
> 
> +/// TEST CASES
> 
> +///
> 
> +///====================================================
> ============================================
> 
> +///====================================================
> ============================================
> 
> +
> 
> +CONST CHAR8 FIRMWARE_SIGNER_EKU[] =
> "1.3.6.1.4.1.311.76.9.21.1";
> 
> +
> 
> +
> 
> +/**
> 
> +  TestVerifyEKUsInSignature()
> 
> +
> 
> +  Verify that "1.3.6.1.4.1.311.76.9.21.1" (Firmware
> signature) is in the
> 
> +  leaf signer certificate.
> 
> +
> 
> +
> 
> +  @param[in]  Framework - Unit-test framework handle.
> 
> +  @param[in]  Context   - Optional context pointer for
> this test.
> 
> +
> 
> +  @retval UNIT_TEST_PASSED            - The required
> EKUs were found in the signature.
> 
> +  @retval UNIT_TEST_ERROR_TEST_FAILED - Something
> failed, check the debug output.
> 
> +**/
> 
> +static
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyEKUsInSignature (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS       Status     = EFI_SUCCESS;
> 
> +
> 
> +  CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU
> };
> 
> +
> 
> +  Status =
> VerifyEKUsInPkcs7Signature(ProductionECCSignature,
> 
> +
> ARRAY_SIZE(ProductionECCSignature),
> 
> +                                      (CONST
> CHAR8**)RequiredEKUs,
> 
> +
> ARRAY_SIZE(RequiredEKUs),
> 
> +                                      TRUE);
> 
> +  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}// TestVerifyEKUsInSignature()
> 
> +
> 
> +
> 
> +/**
> 
> +  TestVerifyEKUsWith3CertsInSignature()
> 
> +
> 
> +  This PKCS7 signature has 3 certificates in it.
> (Policy CA, Issuing CA
> 
> +  and leaf signer). It has one firmware signing EKU in
> it.
> 
> +  "1.3.6.1.4.1.311.76.9.21.1"
> 
> +
> 
> +  @param[in]  Framework - Unit-test framework handle.
> 
> +  @param[in]  Context   - Optional context pointer for
> this test.
> 
> +
> 
> +  @retval UNIT_TEST_PASSED            - The required
> EKUs were found in the signature.
> 
> +  @retval UNIT_TEST_ERROR_TEST_FAILED - Something
> failed, check the debug output.
> 
> +**/
> 
> +static
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyEKUsWith3CertsInSignature (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS       Status     = EFI_SUCCESS;
> 
> +
> 
> +  CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU
> };
> 
> +
> 
> +  Status =
> VerifyEKUsInPkcs7Signature(TestSignEKUsWith3CertsInSigna
> ture,
> 
> +
> ARRAY_SIZE(TestSignEKUsWith3CertsInSignature),
> 
> +                                      (CONST
> CHAR8**)RequiredEKUs,
> 
> +
> ARRAY_SIZE(RequiredEKUs),
> 
> +                                      TRUE);
> 
> +  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}// TestVerifyEKUsWith3CertsInSignature()
> 
> +
> 
> +/**
> 
> +  TestVerifyEKUsWith2CertsInSignature()
> 
> +
> 
> +  This PKCS7 signature has 2 certificates in it.
> (Issuing CA and leaf signer).
> 
> +  It has one firmware signing EKU in it.
> "1.3.6.1.4.1.311.76.9.21.1"
> 
> +
> 
> +  @param[in]  Framework - Unit-test framework handle.
> 
> +  @param[in]  Context   - Optional context pointer for
> this test.
> 
> +
> 
> +  @retval UNIT_TEST_PASSED            - The required
> EKUs were found in the signature.
> 
> +  @retval UNIT_TEST_ERROR_TEST_FAILED - Something
> failed, check the debug output.
> 
> +**/
> 
> +static
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyEKUsWith2CertsInSignature (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS       Status     = EFI_SUCCESS;
> 
> +
> 
> +  CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU
> };
> 
> +
> 
> +  Status =
> VerifyEKUsInPkcs7Signature(TestSignEKUsWith2CertsInSigna
> ture,
> 
> +
> ARRAY_SIZE(TestSignEKUsWith2CertsInSignature),
> 
> +                                      (CONST
> CHAR8**)RequiredEKUs,
> 
> +
> ARRAY_SIZE(RequiredEKUs),
> 
> +                                      TRUE);
> 
> +  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}// TestVerifyEKUsWith2CertsInSignature()
> 
> +
> 
> +
> 
> +/**
> 
> +  TestVerifyEKUsWith1CertInSignature()
> 
> +
> 
> +  This PKCS7 signature only has the leaf signer in it.
> 
> +  It has one firmware signing EKU in it.
> "1.3.6.1.4.1.311.76.9.21.1"
> 
> +
> 
> +  @param[in]  Framework - Unit-test framework handle.
> 
> +  @param[in]  Context   - Optional context pointer for
> this test.
> 
> +
> 
> +  @retval UNIT_TEST_PASSED            - The required
> EKUs were found in the signature.
> 
> +  @retval UNIT_TEST_ERROR_TEST_FAILED - Something
> failed, check the debug output.
> 
> +**/
> 
> +static
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyEKUsWith1CertInSignature (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS       Status     = EFI_SUCCESS;
> 
> +
> 
> +  CONST CHAR8* RequiredEKUs[] = { FIRMWARE_SIGNER_EKU
> };
> 
> +
> 
> +  Status =
> VerifyEKUsInPkcs7Signature(TestSignEKUsWith1CertInSignat
> ure,
> 
> +
> ARRAY_SIZE(TestSignEKUsWith1CertInSignature),
> 
> +                                      (CONST
> CHAR8**)RequiredEKUs,
> 
> +
> ARRAY_SIZE(RequiredEKUs),
> 
> +                                      TRUE);
> 
> +  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}// TestVerifyEKUsWith1CertInSignature()
> 
> +
> 
> +
> 
> +/**
> 
> +  TestVerifyEKUsWithMultipleEKUsInCert()
> 
> +
> 
> +
> 
> +  This signature has two EKU's in it:
> 
> +  "1.3.6.1.4.1.311.76.9.21.1"
> 
> +  "1.3.6.1.4.1.311.76.9.21.2"
> 
> +  We verify that both EKU's were present in the leaf
> signer.
> 
> +
> 
> +  @param[in]  Framework - Unit-test framework handle.
> 
> +  @param[in]  Context   - Optional context pointer for
> this test.
> 
> +
> 
> +  @retval UNIT_TEST_PASSED            - The required
> EKUs were found in the signature.
> 
> +  @retval UNIT_TEST_ERROR_TEST_FAILED - Something
> failed, check the debug output.
> 
> +**/
> 
> +static
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyEKUsWithMultipleEKUsInCert (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS       Status     = EFI_SUCCESS;
> 
> +
> 
> +  CONST CHAR8* RequiredEKUs[] = {
> "1.3.6.1.4.1.311.76.9.21.1",
> 
> +
> "1.3.6.1.4.1.311.76.9.21.1.2" };
> 
> +
> 
> +  Status =
> VerifyEKUsInPkcs7Signature(TestSignedWithMultipleEKUsInC
> ert,
> 
> +
> ARRAY_SIZE(TestSignedWithMultipleEKUsInCert),
> 
> +                                      (CONST
> CHAR8**)RequiredEKUs,
> 
> +
> ARRAY_SIZE(RequiredEKUs),
> 
> +                                      TRUE);
> 
> +  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}// TestVerifyEKUsWithMultipleEKUsInCert()
> 
> +
> 
> +
> 
> +/**
> 
> +  TestEkusNotPresentInSignature()
> 
> +
> 
> +  This test verifies that if we send an EKU that is not
> in the signature,
> 
> +  that we get back an error.
> 
> +
> 
> +  @param[in]  Framework - Unit-test framework handle.
> 
> +  @param[in]  Context   - Optional context pointer for
> this test.
> 
> +
> 
> +  @retval UNIT_TEST_PASSED            - The required
> EKUs were found in the signature.
> 
> +  @retval UNIT_TEST_ERROR_TEST_FAILED - Something
> failed, check the debug output.
> 
> +**/
> 
> +static
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestEkusNotPresentInSignature (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS       Status = EFI_SUCCESS;
> 
> +
> 
> +  //
> 
> +  // This EKU is not in the signature.
> 
> +  //
> 
> +  CONST CHAR8* RequiredEKUs[] = {
> "1.3.6.1.4.1.311.76.9.21.3" };
> 
> +
> 
> +  Status =
> VerifyEKUsInPkcs7Signature(TestSignedWithMultipleEKUsInC
> ert,
> 
> +
> ARRAY_SIZE(TestSignedWithMultipleEKUsInCert),
> 
> +                                      (CONST
> CHAR8**)RequiredEKUs,
> 
> +
> ARRAY_SIZE(RequiredEKUs),
> 
> +                                      TRUE);
> 
> +  UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}// TestEkusNotPresentInSignature()
> 
> +
> 
> +/**
> 
> +  TestEkusNotPresentInSignature()
> 
> +
> 
> +  This test signature has two EKU's in it:  (Product ID
> is 10001)
> 
> +  "1.3.6.1.4.1.311.76.9.21.1"
> 
> +  "1.3.6.1.4.1.311.76.9.21.1.10001"
> 
> +
> 
> +  @param[in]  Framework - Unit-test framework handle.
> 
> +  @param[in]  Context   - Optional context pointer for
> this test.
> 
> +
> 
> +  @retval UNIT_TEST_PASSED            - The required
> EKUs were found in the signature.
> 
> +  @retval UNIT_TEST_ERROR_TEST_FAILED - Something
> failed, check the debug output.
> 
> +**/
> 
> +
> 
> +static
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestProductId10001PresentInSignature(
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +)
> 
> +{
> 
> +  EFI_STATUS       Status = EFI_SUCCESS;
> 
> +
> 
> +  //
> 
> +  // These EKU's are present in the leaf signer
> certificate.
> 
> +  //
> 
> +  CONST CHAR8* RequiredEKUs[] = {
> "1.3.6.1.4.1.311.76.9.21.1",
> 
> +
> "1.3.6.1.4.1.311.76.9.21.1.10001" };
> 
> +
> 
> +  Status =
> VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001,
> 
> +
> ARRAY_SIZE(TestSignedWithProductId10001),
> 
> +                                      (CONST
> CHAR8**)RequiredEKUs,
> 
> +
> ARRAY_SIZE(RequiredEKUs),
> 
> +                                      TRUE);
> 
> +  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}// TestProductId10001PresentInSignature()
> 
> +
> 
> +
> 
> +/**
> 
> +  TestOnlyOneEkuInListRequired()
> 
> +
> 
> +  This test will check the BOOLEAN RequireAllPresent
> parameter in the
> 
> +  call to VerifyEKUsInPkcs7Signature() behaves
> properly.  The signature
> 
> +  has two EKU's in it:
> 
> +
> 
> +  "1.3.6.1.4.1.311.76.9.21.1"
> 
> +  "1.3.6.1.4.1.311.76.9.21.1.10001"
> 
> +
> 
> +  but we only pass in one of them, and set
> RequireAllPresent to FALSE.
> 
> +
> 
> +  @param[in]  Framework - Unit-test framework handle.
> 
> +  @param[in]  Context   - Optional context pointer for
> this test.
> 
> +
> 
> +  @retval UNIT_TEST_PASSED            - The required
> EKUs were found in the signature.
> 
> +  @retval UNIT_TEST_ERROR_TEST_FAILED - Something
> failed, check the debug output.
> 
> +**/
> 
> +
> 
> +static
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestOnlyOneEkuInListRequired(
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +)
> 
> +{
> 
> +  EFI_STATUS       Status = EFI_SUCCESS;
> 
> +
> 
> +  //
> 
> +  // This will test the flag that specifies it is OK to
> succeed if
> 
> +  // any one of the EKU's passed in is found.
> 
> +  //
> 
> +  CONST CHAR8* RequiredEKUs[] = {
> "1.3.6.1.4.1.311.76.9.21.1.10001" };
> 
> +
> 
> +  Status =
> VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001,
> 
> +
> ARRAY_SIZE(TestSignedWithProductId10001),
> 
> +                                      (CONST
> CHAR8**)RequiredEKUs,
> 
> +
> ARRAY_SIZE(RequiredEKUs),
> 
> +                                      FALSE);
> 
> +  UT_ASSERT_STATUS_EQUAL (Status, EFI_SUCCESS);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}// TestOnlyOneEkuInListRequired()
> 
> +
> 
> +/**
> 
> +  TestNoEKUsInSignature()
> 
> +
> 
> +  This test uses a signature that was signed with a
> certificate that does
> 
> +  not contain any EKUs.
> 
> +
> 
> +
> 
> +  @param[in]  Framework - Unit-test framework handle.
> 
> +  @param[in]  Context   - Optional context pointer for
> this test.
> 
> +
> 
> +  @retval UNIT_TEST_PASSED            - The required
> EKUs were found in the signature.
> 
> +  @retval UNIT_TEST_ERROR_TEST_FAILED - Something
> failed, check the debug output.
> 
> +**/
> 
> +
> 
> +static
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestNoEKUsInSignature(
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +)
> 
> +{
> 
> +  EFI_STATUS       Status     = EFI_SUCCESS;
> 
> +
> 
> +  //
> 
> +  // This EKU is not in the certificate, so it should
> fail.
> 
> +  //
> 
> +  CONST CHAR8* RequiredEKUs[] = {
> "1.3.6.1.4.1.311.76.9.21.1" };
> 
> +
> 
> +  Status =
> VerifyEKUsInPkcs7Signature(TestSignatureWithNoEKUsPresen
> t,
> 
> +
> ARRAY_SIZE(TestSignatureWithNoEKUsPresent),
> 
> +                                      (CONST
> CHAR8**)RequiredEKUs,
> 
> +
> ARRAY_SIZE(RequiredEKUs),
> 
> +                                      TRUE);
> 
> +  UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}// TestNoEKUsInSignature()
> 
> +
> 
> +
> 
> +/**
> 
> +  TestInvalidParameters()
> 
> +
> 
> +  Passes the API invalid parameters, and ensures that
> it does not succeed.
> 
> +
> 
> +  @param[in]  Framework - Unit-test framework handle.
> 
> +  @param[in]  Context   - Optional context pointer for
> this test.
> 
> +
> 
> +  @retval UNIT_TEST_PASSED            - The required
> EKUs were found in the signature.
> 
> +  @retval UNIT_TEST_ERROR_TEST_FAILED - Something
> failed, check the debug output.
> 
> +**/
> 
> +static
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestInvalidParameters(
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +)
> 
> +{
> 
> +  EFI_STATUS       Status     = EFI_SUCCESS;
> 
> +
> 
> +  CONST CHAR8* RequiredEKUs[] = {
> "1.3.6.1.4.1.311.76.9.21.1" };
> 
> +
> 
> +  //
> 
> +  // Check bad signature.
> 
> +  //
> 
> +  Status = VerifyEKUsInPkcs7Signature(NULL,
> 
> +                                      0,
> 
> +                                      (CONST
> CHAR8**)RequiredEKUs,
> 
> +
> ARRAY_SIZE(RequiredEKUs),
> 
> +                                      TRUE);
> 
> +  UT_ASSERT_STATUS_EQUAL (Status,
> EFI_INVALID_PARAMETER);
> 
> +
> 
> +  //
> 
> +  // Check invalid EKU's
> 
> +  //
> 
> +  Status =
> VerifyEKUsInPkcs7Signature(TestSignatureWithNoEKUsPresen
> t,
> 
> +
> ARRAY_SIZE(TestSignatureWithNoEKUsPresent),
> 
> +                                      (CONST
> CHAR8**)NULL,
> 
> +                                      0,
> 
> +                                      TRUE);
> 
> +  UT_ASSERT_STATUS_EQUAL (Status,
> EFI_INVALID_PARAMETER);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}// TestInvalidParameters()
> 
> +
> 
> +
> 
> +/**
> 
> +  TestEKUSubStringFails()
> 
> +
> 
> +  Pass the API a sub set and super set of an EKU and
> ensure that they
> 
> +  don't pass.
> 
> +
> 
> +  @param[in]  Framework - Unit-test framework handle.
> 
> +  @param[in]  Context   - Optional context pointer for
> this test.
> 
> +
> 
> +  @retval UNIT_TEST_PASSED            - The required
> EKUs were found in the signature.
> 
> +  @retval UNIT_TEST_ERROR_TEST_FAILED - Something
> failed, check the debug output.
> 
> +**/
> 
> +static
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestEKUSubsetSupersetFails(
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +)
> 
> +{
> 
> +  EFI_STATUS       Status     = EFI_SUCCESS;
> 
> +
> 
> +  //
> 
> +  // This signature has an EKU of:
> 
> +  // "1.3.6.1.4.1.311.76.9.21.1.10001"
> 
> +  // so ensure that
> 
> +  // "1.3.6.1.4.1.311.76.9.21"
> 
> +  // does not pass.
> 
> +  //
> 
> +  CONST CHAR8* RequiredEKUs1[] = {
> "1.3.6.1.4.1.311.76.9.21" };
> 
> +
> 
> +  Status =
> VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001,
> 
> +
> ARRAY_SIZE(TestSignedWithProductId10001),
> 
> +                                      (CONST
> CHAR8**)RequiredEKUs1,
> 
> +
> ARRAY_SIZE(RequiredEKUs1),
> 
> +                                      TRUE);
> 
> +  UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS);
> 
> +
> 
> +  //
> 
> +  // This signature has an EKU of:
> 
> +  // "1.3.6.1.4.1.311.76.9.21.1.10001"
> 
> +  // so ensure that a super set
> 
> +  // "1.3.6.1.4.1.311.76.9.21.1.10001.1"
> 
> +  // does not pass.
> 
> +  //
> 
> +  CONST CHAR8* RequiredEKUs2[] = {
> "1.3.6.1.4.1.311.76.9.21.1.10001.1" };
> 
> +
> 
> +  Status =
> VerifyEKUsInPkcs7Signature(TestSignedWithProductId10001,
> 
> +
> ARRAY_SIZE(TestSignedWithProductId10001),
> 
> +                                      (CONST
> CHAR8**)RequiredEKUs2,
> 
> +
> ARRAY_SIZE(RequiredEKUs2),
> 
> +                                      TRUE);
> 
> +  UT_ASSERT_NOT_EQUAL (Status, EFI_SUCCESS);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}// TestEKUSubsetSupersetFails()
> 
> +
> 
> +TEST_DESC mPkcs7EkuTest[] = {
> 
> +    //
> 
> +    // -----Description--------------------------------
> Class----------------------------Function---------------
> ---------------Pre---Post--Context
> 
> +    //
> 
> +    {"TestVerifyEKUsInSignature()",
> "CryptoPkg.BaseCryptLib.Eku",
> TestVerifyEKUsInSignature,            NULL, NULL, NULL},
> 
> +    {"TestVerifyEKUsWith3CertsInSignature()",
> "CryptoPkg.BaseCryptLib.Eku",
> TestVerifyEKUsWith3CertsInSignature,  NULL, NULL, NULL},
> 
> +    {"TestVerifyEKUsWith2CertsInSignature()",
> "CryptoPkg.BaseCryptLib.Eku",
> TestVerifyEKUsWith2CertsInSignature,  NULL, NULL, NULL},
> 
> +    {"TestVerifyEKUsWith1CertInSignature()",
> "CryptoPkg.BaseCryptLib.Eku",
> TestVerifyEKUsWith1CertInSignature,   NULL, NULL, NULL},
> 
> +    {"TestVerifyEKUsWithMultipleEKUsInCert()",
> "CryptoPkg.BaseCryptLib.Eku",
> TestVerifyEKUsWithMultipleEKUsInCert, NULL, NULL, NULL},
> 
> +    {"TestEkusNotPresentInSignature()",
> "CryptoPkg.BaseCryptLib.Eku",
> TestEkusNotPresentInSignature,        NULL, NULL, NULL},
> 
> +    {"TestProductId10001PresentInSignature()",
> "CryptoPkg.BaseCryptLib.Eku",
> TestProductId10001PresentInSignature, NULL, NULL, NULL},
> 
> +    {"TestOnlyOneEkuInListRequired()",
> "CryptoPkg.BaseCryptLib.Eku",
> TestOnlyOneEkuInListRequired,         NULL, NULL, NULL},
> 
> +    {"TestNoEKUsInSignature()",
> "CryptoPkg.BaseCryptLib.Eku",   TestNoEKUsInSignature,
> NULL, NULL, NULL},
> 
> +    {"TestInvalidParameters()",
> "CryptoPkg.BaseCryptLib.Eku",   TestInvalidParameters,
> NULL, NULL, NULL},
> 
> +    {"TestEKUSubsetSupersetFails()",
> "CryptoPkg.BaseCryptLib.Eku",
> TestEKUSubsetSupersetFails,           NULL, NULL, NULL},
> 
> +};
> 
> +
> 
> +UINTN mPkcs7EkuTestNum = ARRAY_SIZE(mPkcs7EkuTest);
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests
> .c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests
> .c
> new file mode 100644
> index 000000000000..cc6b2ca46ba1
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RandTests
> .c
> @@ -0,0 +1,51 @@
> +/** @file
> 
> +  Application for Pseudorandom Number Generator
> Validation.
> 
> +
> 
> +Copyright (c) 2010, Intel Corporation. All rights
> reserved.<BR>
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +#define  RANDOM_NUMBER_SIZE  256
> 
> +
> 
> +CONST  UINT8  SeedString[] = "This is the random seed
> for PRNG verification.";
> 
> +
> 
> +UINT8  PreviousRandomBuffer[RANDOM_NUMBER_SIZE] = { 0x0
> };
> 
> +
> 
> +UINT8  RandomBuffer[RANDOM_NUMBER_SIZE] = { 0x0 };
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyPrngGeneration (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  UINTN    Index;
> 
> +  BOOLEAN  Status;
> 
> +
> 
> +  Status = RandomSeed (SeedString, sizeof
> (SeedString));
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  for (Index = 0; Index < 10; Index ++) {
> 
> +    Status = RandomBytes (RandomBuffer,
> RANDOM_NUMBER_SIZE);
> 
> +    UT_ASSERT_TRUE (Status);
> 
> +
> 
> +    Status = (CompareMem (PreviousRandomBuffer,
> RandomBuffer, RANDOM_NUMBER_SIZE) == 0);
> 
> +    UT_ASSERT_FALSE (Status);
> 
> +
> 
> +    CopyMem (PreviousRandomBuffer, RandomBuffer,
> RANDOM_NUMBER_SIZE);
> 
> +  }
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +TEST_DESC mPrngTest[] = {
> 
> +    //
> 
> +    // -----Description--------------------------------
> Class--------------------Function----------------Pre---
> Post--Context
> 
> +    //
> 
> +    {"TestVerifyPrngGeneration()",
> "CryptoPkg.BaseCryptLib.Prng",
> TestVerifyPrngGeneration,   NULL, NULL, NULL},
> 
> +};
> 
> +
> 
> +UINTN mPrngTestNum = ARRAY_SIZE(mPrngTest);
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7T
> ests.c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7T
> ests.c
> new file mode 100644
> index 000000000000..85a3d6a5a13b
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaPkcs7T
> ests.c
> @@ -0,0 +1,415 @@
> +/** @file
> 
> +  Application for RSA Key Retrieving (from PEM and
> X509) & Signature Validation.
> 
> +
> 
> +  Copyright (c) 2010 - 2011, Intel Corporation. All
> rights reserved.<BR>
> 
> +  Copyright (c) Microsoft Corporation.
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +
> 
> +//
> 
> +// Password-protected PEM Key data for RSA Private Key
> Retrieving (encryption key is "client").
> 
> +// (Generated by OpenSSL utility).
> 
> +// $ openssl genrsa -aes256 -out TestKeyPem -passout
> pass:client 1024
> 
> +// password should match PemPass in this file
> 
> +// $ xxd --include TestKeyPem
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestKeyPem[]
> = {
> 
> +   0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47,
> 0x49, 0x4e, 0x20, 0x52,
> 
> +  0x53, 0x41, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54,
> 0x45, 0x20, 0x4b,
> 
> +  0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x50,
> 0x72, 0x6f, 0x63,
> 
> +  0x2d, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x34, 0x2c,
> 0x45, 0x4e, 0x43,
> 
> +  0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x0a, 0x44, 0x45,
> 0x4b, 0x2d, 0x49,
> 
> +  0x6e, 0x66, 0x6f, 0x3a, 0x20, 0x41, 0x45, 0x53, 0x2d,
> 0x32, 0x35, 0x36,
> 
> +  0x2d, 0x43, 0x42, 0x43, 0x2c, 0x34, 0x42, 0x44, 0x31,
> 0x30, 0x45, 0x39,
> 
> +  0x35, 0x42, 0x38, 0x33, 0x39, 0x42, 0x30, 0x44, 0x33,
> 0x35, 0x36, 0x31,
> 
> +  0x38, 0x41, 0x44, 0x36, 0x45, 0x46, 0x44, 0x36, 0x34,
> 0x32, 0x34, 0x44,
> 
> +  0x36, 0x0a, 0x0a, 0x42, 0x50, 0x39, 0x49, 0x32, 0x42,
> 0x30, 0x6c, 0x50,
> 
> +  0x7a, 0x4c, 0x50, 0x50, 0x38, 0x2f, 0x4b, 0x71, 0x35,
> 0x34, 0x2f, 0x56,
> 
> +  0x68, 0x75, 0x4b, 0x35, 0x5a, 0x63, 0x72, 0x32, 0x55,
> 0x6c, 0x32, 0x75,
> 
> +  0x43, 0x57, 0x4a, 0x62, 0x59, 0x33, 0x50, 0x77, 0x39,
> 0x6e, 0x4c, 0x6d,
> 
> +  0x45, 0x41, 0x6a, 0x47, 0x74, 0x4a, 0x68, 0x57, 0x46,
> 0x66, 0x50, 0x47,
> 
> +  0x38, 0x62, 0x6d, 0x41, 0x6f, 0x73, 0x56, 0x0a, 0x47,
> 0x76, 0x42, 0x30,
> 
> +  0x6d, 0x2b, 0x7a, 0x5a, 0x43, 0x2b, 0x30, 0x6c, 0x57,
> 0x6c, 0x72, 0x59,
> 
> +  0x7a, 0x51, 0x4b, 0x6a, 0x57, 0x79, 0x44, 0x6e, 0x4d,
> 0x58, 0x72, 0x33,
> 
> +  0x51, 0x39, 0x69, 0x57, 0x32, 0x4b, 0x33, 0x68, 0x4d,
> 0x6b, 0x71, 0x51,
> 
> +  0x4c, 0x31, 0x68, 0x65, 0x71, 0x52, 0x66, 0x66, 0x74,
> 0x47, 0x57, 0x51,
> 
> +  0x5a, 0x36, 0x78, 0x4e, 0x6a, 0x72, 0x30, 0x7a, 0x6f,
> 0x51, 0x59, 0x73,
> 
> +  0x0a, 0x34, 0x76, 0x69, 0x55, 0x46, 0x72, 0x7a, 0x2b,
> 0x52, 0x76, 0x4b,
> 
> +  0x43, 0x2f, 0x33, 0x69, 0x71, 0x57, 0x59, 0x78, 0x55,
> 0x35, 0x4c, 0x6a,
> 
> +  0x45, 0x74, 0x63, 0x5a, 0x4f, 0x2b, 0x53, 0x6d, 0x39,
> 0x42, 0x4c, 0x62,
> 
> +  0x66, 0x58, 0x49, 0x71, 0x56, 0x72, 0x53, 0x6a, 0x54,
> 0x79, 0x58, 0x49,
> 
> +  0x39, 0x70, 0x76, 0x78, 0x6f, 0x67, 0x50, 0x39, 0x38,
> 0x6b, 0x2b, 0x6c,
> 
> +  0x41, 0x66, 0x37, 0x47, 0x36, 0x0a, 0x75, 0x39, 0x2b,
> 0x30, 0x31, 0x4d,
> 
> +  0x47, 0x5a, 0x69, 0x36, 0x6b, 0x53, 0x73, 0x67, 0x48,
> 0x57, 0x7a, 0x43,
> 
> +  0x41, 0x49, 0x51, 0x75, 0x38, 0x72, 0x6a, 0x4d, 0x34,
> 0x65, 0x74, 0x64,
> 
> +  0x50, 0x62, 0x4a, 0x49, 0x77, 0x34, 0x65, 0x47, 0x6f,
> 0x32, 0x45, 0x49,
> 
> +  0x44, 0x45, 0x54, 0x61, 0x52, 0x70, 0x73, 0x76, 0x47,
> 0x6a, 0x54, 0x6f,
> 
> +  0x30, 0x51, 0x56, 0x69, 0x79, 0x79, 0x4a, 0x4f, 0x48,
> 0x32, 0x0a, 0x61,
> 
> +  0x32, 0x71, 0x69, 0x2f, 0x47, 0x7a, 0x2f, 0x64, 0x48,
> 0x61, 0x62, 0x68,
> 
> +  0x4d, 0x4e, 0x35, 0x4e, 0x53, 0x58, 0x56, 0x4d, 0x31,
> 0x54, 0x2f, 0x6d,
> 
> +  0x69, 0x6f, 0x74, 0x68, 0x78, 0x59, 0x72, 0x2f, 0x4a,
> 0x69, 0x37, 0x6d,
> 
> +  0x4e, 0x45, 0x75, 0x4a, 0x57, 0x38, 0x74, 0x6d, 0x75,
> 0x55, 0x4b, 0x58,
> 
> +  0x33, 0x66, 0x63, 0x39, 0x42, 0x39, 0x32, 0x51, 0x6e,
> 0x54, 0x68, 0x43,
> 
> +  0x69, 0x49, 0x2f, 0x0a, 0x79, 0x4f, 0x31, 0x32, 0x4c,
> 0x46, 0x58, 0x38,
> 
> +  0x74, 0x4b, 0x4a, 0x37, 0x4b, 0x7a, 0x6f, 0x6b, 0x36,
> 0x44, 0x74, 0x6d,
> 
> +  0x35, 0x73, 0x41, 0x74, 0x2b, 0x65, 0x4b, 0x76, 0x6f,
> 0x61, 0x47, 0x62,
> 
> +  0x75, 0x4a, 0x78, 0x62, 0x52, 0x63, 0x36, 0x63, 0x4d,
> 0x58, 0x57, 0x46,
> 
> +  0x36, 0x4d, 0x72, 0x4d, 0x30, 0x53, 0x78, 0x65, 0x4e,
> 0x6b, 0x5a, 0x77,
> 
> +  0x5a, 0x36, 0x6c, 0x62, 0x4d, 0x39, 0x63, 0x55, 0x0a,
> 0x6c, 0x75, 0x34,
> 
> +  0x4c, 0x56, 0x64, 0x34, 0x73, 0x56, 0x4c, 0x61, 0x76,
> 0x68, 0x75, 0x32,
> 
> +  0x58, 0x48, 0x48, 0x53, 0x56, 0x30, 0x32, 0x32, 0x6d,
> 0x51, 0x72, 0x73,
> 
> +  0x32, 0x69, 0x68, 0x74, 0x58, 0x44, 0x2b, 0x6c, 0x4d,
> 0x63, 0x2f, 0x35,
> 
> +  0x62, 0x54, 0x41, 0x55, 0x6b, 0x4b, 0x4f, 0x42, 0x73,
> 0x43, 0x69, 0x4f,
> 
> +  0x4b, 0x42, 0x56, 0x2b, 0x66, 0x70, 0x49, 0x62, 0x2b,
> 0x6d, 0x44, 0x33,
> 
> +  0x58, 0x0a, 0x39, 0x37, 0x66, 0x36, 0x54, 0x66, 0x68,
> 0x37, 0x4f, 0x4f,
> 
> +  0x6a, 0x74, 0x44, 0x79, 0x31, 0x6f, 0x52, 0x36, 0x70,
> 0x68, 0x48, 0x47,
> 
> +  0x6e, 0x73, 0x43, 0x78, 0x72, 0x53, 0x72, 0x64, 0x48,
> 0x73, 0x2f, 0x34,
> 
> +  0x33, 0x72, 0x61, 0x65, 0x42, 0x78, 0x59, 0x45, 0x41,
> 0x42, 0x4e, 0x59,
> 
> +  0x68, 0x54, 0x47, 0x57, 0x49, 0x4d, 0x4a, 0x6b, 0x50,
> 0x63, 0x54, 0x53,
> 
> +  0x73, 0x76, 0x77, 0x46, 0x37, 0x6d, 0x0a, 0x33, 0x6c,
> 0x38, 0x6b, 0x44,
> 
> +  0x50, 0x48, 0x43, 0x4e, 0x68, 0x6e, 0x6e, 0x42, 0x69,
> 0x7a, 0x36, 0x2f,
> 
> +  0x43, 0x38, 0x56, 0x31, 0x37, 0x78, 0x57, 0x34, 0x50,
> 0x2b, 0x79, 0x71,
> 
> +  0x4a, 0x78, 0x58, 0x63, 0x49, 0x53, 0x72, 0x7a, 0x57,
> 0x53, 0x55, 0x72,
> 
> +  0x34, 0x74, 0x71, 0x6b, 0x55, 0x58, 0x43, 0x57, 0x4c,
> 0x43, 0x66, 0x76,
> 
> +  0x57, 0x7a, 0x4e, 0x65, 0x5a, 0x34, 0x4f, 0x34, 0x34,
> 0x54, 0x65, 0x0a,
> 
> +  0x74, 0x31, 0x59, 0x65, 0x36, 0x77, 0x2b, 0x71, 0x4f,
> 0x55, 0x38, 0x50,
> 
> +  0x42, 0x68, 0x72, 0x65, 0x4d, 0x38, 0x75, 0x32, 0x32,
> 0x42, 0x4f, 0x31,
> 
> +  0x65, 0x2b, 0x44, 0x7a, 0x63, 0x74, 0x6c, 0x67, 0x43,
> 0x43, 0x6c, 0x38,
> 
> +  0x79, 0x69, 0x37, 0x6f, 0x43, 0x56, 0x74, 0x66, 0x75,
> 0x59, 0x2f, 0x4c,
> 
> +  0x72, 0x42, 0x61, 0x31, 0x74, 0x69, 0x43, 0x41, 0x37,
> 0x6c, 0x34, 0x75,
> 
> +  0x58, 0x6b, 0x73, 0x4c, 0x0a, 0x2b, 0x31, 0x51, 0x79,
> 0x69, 0x4b, 0x31,
> 
> +  0x6e, 0x43, 0x4f, 0x76, 0x74, 0x30, 0x46, 0x7a, 0x71,
> 0x62, 0x71, 0x78,
> 
> +  0x54, 0x37, 0x53, 0x35, 0x4c, 0x56, 0x33, 0x5a, 0x33,
> 0x74, 0x34, 0x4a,
> 
> +  0x46, 0x4f, 0x50, 0x62, 0x67, 0x63, 0x7a, 0x4e, 0x6b,
> 0x58, 0x55, 0x2b,
> 
> +  0x4f, 0x74, 0x50, 0x6b, 0x6e, 0x45, 0x45, 0x76, 0x67,
> 0x57, 0x64, 0x76,
> 
> +  0x31, 0x4f, 0x30, 0x6d, 0x52, 0x4a, 0x50, 0x31, 0x4e,
> 0x0a, 0x71, 0x43,
> 
> +  0x32, 0x33, 0x4a, 0x6a, 0x36, 0x38, 0x4c, 0x30, 0x46,
> 0x63, 0x46, 0x4c,
> 
> +  0x56, 0x56, 0x59, 0x76, 0x61, 0x44, 0x53, 0x76, 0x54,
> 0x45, 0x64, 0x50,
> 
> +  0x54, 0x34, 0x62, 0x2f, 0x7a, 0x66, 0x64, 0x36, 0x51,
> 0x52, 0x6b, 0x38,
> 
> +  0x70, 0x4d, 0x36, 0x77, 0x66, 0x61, 0x32, 0x50, 0x63,
> 0x75, 0x57, 0x65,
> 
> +  0x79, 0x38, 0x48, 0x38, 0x76, 0x4e, 0x4b, 0x67, 0x2f,
> 0x65, 0x76, 0x34,
> 
> +  0x77, 0x37, 0x0a, 0x6b, 0x6f, 0x6f, 0x4e, 0x59, 0x64,
> 0x77, 0x59, 0x69,
> 
> +  0x6c, 0x37, 0x41, 0x50, 0x76, 0x42, 0x50, 0x4d, 0x63,
> 0x6c, 0x51, 0x76,
> 
> +  0x63, 0x64, 0x71, 0x7a, 0x52, 0x7a, 0x4a, 0x6e, 0x4a,
> 0x74, 0x37, 0x70,
> 
> +  0x35, 0x7a, 0x69, 0x2b, 0x2b, 0x4c, 0x43, 0x59, 0x55,
> 0x4d, 0x3d, 0x0a,
> 
> +  0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20,
> 0x52, 0x53, 0x41,
> 
> +  0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20,
> 0x4b, 0x45, 0x59,
> 
> +  0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a
> 
> + };
> 
> +
> 
> +//
> 
> +// Password for private key retrieving from encrypted
> PEM ("TestKeyPem").
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *PemPass =
> "client";
> 
> +
> 
> +//
> 
> +// Test CA X509 Certificate for X509 Verification
> Routine (Generated by OpenSSL utility).
> 
> +// $ openssl req -x509 -days 10000 -key TestKeyPem -out
> TestCACert -outform DER -subj
> "/C=US/ST=WA/L=Seattle/O=Tianocore/OU=EDK2/CN=UEFI"
> 
> +// use password from PemPass variable in this file
> 
> +// $ xxd --include TestCACert
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestCACert[]
> = {
> 
> +  0x30, 0x82, 0x02, 0x98, 0x30, 0x82, 0x02, 0x01, 0xa0,
> 0x03, 0x02, 0x01,
> 
> +  0x02, 0x02, 0x14, 0x39, 0xde, 0x9e, 0xce, 0x3a, 0x36,
> 0x11, 0x38, 0x6f,
> 
> +  0x64, 0xb4, 0x69, 0xa7, 0x93, 0xdd, 0xff, 0xbd, 0x3e,
> 0x75, 0x6a, 0x30,
> 
> +  0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
> 0x01, 0x01, 0x0b,
> 
> +  0x05, 0x00, 0x30, 0x5e, 0x31, 0x0b, 0x30, 0x09, 0x06,
> 0x03, 0x55, 0x04,
> 
> +  0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30, 0x09,
> 0x06, 0x03, 0x55,
> 
> +  0x04, 0x08, 0x0c, 0x02, 0x57, 0x41, 0x31, 0x10, 0x30,
> 0x0e, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x65, 0x61, 0x74,
> 0x74, 0x6c, 0x65,
> 
> +  0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a,
> 0x0c, 0x09, 0x54,
> 
> +  0x69, 0x61, 0x6e, 0x6f, 0x63, 0x6f, 0x72, 0x65, 0x31,
> 0x0d, 0x30, 0x0b,
> 
> +  0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x04, 0x45, 0x44,
> 0x4b, 0x32, 0x31,
> 
> +  0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c,
> 0x04, 0x55, 0x45,
> 
> +  0x46, 0x49, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x30, 0x30,
> 0x36, 0x32, 0x39,
> 
> +  0x32, 0x32, 0x34, 0x37, 0x33, 0x36, 0x5a, 0x17, 0x0d,
> 0x34, 0x37, 0x31,
> 
> +  0x31, 0x31, 0x35, 0x32, 0x32, 0x34, 0x37, 0x33, 0x36,
> 0x5a, 0x30, 0x5e,
> 
> +  0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06,
> 0x13, 0x02, 0x55,
> 
> +  0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
> 0x08, 0x0c, 0x02,
> 
> +  0x57, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55,
> 0x04, 0x07, 0x0c,
> 
> +  0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x31,
> 0x12, 0x30, 0x10,
> 
> +  0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x54, 0x69,
> 0x61, 0x6e, 0x6f,
> 
> +  0x63, 0x6f, 0x72, 0x65, 0x31, 0x0d, 0x30, 0x0b, 0x06,
> 0x03, 0x55, 0x04,
> 
> +  0x0b, 0x0c, 0x04, 0x45, 0x44, 0x4b, 0x32, 0x31, 0x0d,
> 0x30, 0x0b, 0x06,
> 
> +  0x03, 0x55, 0x04, 0x03, 0x0c, 0x04, 0x55, 0x45, 0x46,
> 0x49, 0x30, 0x81,
> 
> +  0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
> 0xf7, 0x0d, 0x01,
> 
> +  0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30,
> 0x81, 0x89, 0x02,
> 
> +  0x81, 0x81, 0x00, 0x9f, 0xef, 0x1b, 0x46, 0x45, 0x55,
> 0x33, 0x4b, 0xee,
> 
> +  0x95, 0x14, 0xd3, 0x5a, 0x3e, 0xd9, 0x29, 0xfb, 0xd9,
> 0x29, 0x4e, 0x8b,
> 
> +  0xf1, 0xf5, 0x68, 0x7c, 0x58, 0x86, 0x0c, 0xda, 0xd7,
> 0xe0, 0xd2, 0x9a,
> 
> +  0xe8, 0x37, 0x16, 0x4d, 0x54, 0x92, 0x18, 0x20, 0x4c,
> 0x09, 0xa1, 0xcf,
> 
> +  0xe1, 0xaa, 0x7a, 0x5a, 0x64, 0x7e, 0x5c, 0xeb, 0x4e,
> 0x15, 0x8e, 0x40,
> 
> +  0xd1, 0xcb, 0x7d, 0x01, 0x71, 0x15, 0x11, 0xd2, 0xc7,
> 0xdb, 0x6b, 0x00,
> 
> +  0xdc, 0x02, 0xcb, 0x5a, 0x6d, 0x2b, 0x2a, 0x75, 0xb6,
> 0x3f, 0xec, 0xc1,
> 
> +  0x9d, 0xbf, 0xda, 0xe5, 0x3a, 0x77, 0x4b, 0x21, 0x1c,
> 0x99, 0x42, 0x84,
> 
> +  0x5e, 0x27, 0x53, 0x9b, 0xe6, 0xc1, 0xa1, 0x95, 0x58,
> 0xba, 0xbe, 0x62,
> 
> +  0x58, 0xd5, 0x09, 0xa8, 0xe6, 0xb6, 0x1b, 0xb1, 0x18,
> 0x28, 0x13, 0xc7,
> 
> +  0x89, 0x1c, 0x68, 0xce, 0x15, 0xaf, 0x2e, 0x68, 0xac,
> 0x1c, 0xf7, 0x02,
> 
> +  0x03, 0x01, 0x00, 0x01, 0xa3, 0x53, 0x30, 0x51, 0x30,
> 0x1d, 0x06, 0x03,
> 
> +  0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x50, 0xe5,
> 0x05, 0xa3, 0x6e,
> 
> +  0x8f, 0x00, 0xf7, 0x93, 0x30, 0xe5, 0x25, 0x20, 0xdc,
> 0x8a, 0xc3, 0xad,
> 
> +  0x14, 0x6d, 0x90, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d,
> 0x23, 0x04, 0x18,
> 
> +  0x30, 0x16, 0x80, 0x14, 0x50, 0xe5, 0x05, 0xa3, 0x6e,
> 0x8f, 0x00, 0xf7,
> 
> +  0x93, 0x30, 0xe5, 0x25, 0x20, 0xdc, 0x8a, 0xc3, 0xad,
> 0x14, 0x6d, 0x90,
> 
> +  0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01,
> 0xff, 0x04, 0x05,
> 
> +  0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09,
> 0x2a, 0x86, 0x48,
> 
> +  0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03,
> 0x81, 0x81, 0x00,
> 
> +  0x8e, 0xe4, 0x27, 0x42, 0x16, 0x6e, 0xbd, 0x28, 0x47,
> 0x09, 0x99, 0xc1,
> 
> +  0x55, 0x02, 0x82, 0x1a, 0xe1, 0xd0, 0xf3, 0xef, 0x4d,
> 0xaf, 0x30, 0x9a,
> 
> +  0x29, 0x4b, 0x74, 0x03, 0x6a, 0x95, 0x28, 0xf1, 0xbe,
> 0x62, 0x68, 0x9f,
> 
> +  0x82, 0x59, 0x7a, 0x49, 0x91, 0xb6, 0xaf, 0x6b, 0x23,
> 0x30, 0xb4, 0xf4,
> 
> +  0xdd, 0xfa, 0x30, 0x3f, 0xb6, 0xed, 0x74, 0x3f, 0x91,
> 0xe8, 0xd7, 0x84,
> 
> +  0x1a, 0xf3, 0xc6, 0x3d, 0xd8, 0x59, 0x8d, 0x68, 0x6e,
> 0xb3, 0x66, 0x9e,
> 
> +  0xe8, 0xeb, 0x1a, 0x8b, 0x1e, 0x92, 0x71, 0x73, 0x8c,
> 0x4f, 0x63, 0xce,
> 
> +  0x71, 0x7b, 0x97, 0x3b, 0x59, 0xd2, 0x9b, 0xe4, 0xd0,
> 0xef, 0x31, 0x9f,
> 
> +  0x0d, 0x61, 0x27, 0x97, 0x9d, 0xe8, 0xe0, 0xcd, 0x8d,
> 0xc1, 0x4d, 0xad,
> 
> +  0xf7, 0x3a, 0x8d, 0xb8, 0x86, 0x8c, 0x23, 0x1d, 0x4c,
> 0x02, 0x5c, 0x53,
> 
> +  0x46, 0x84, 0xb2, 0x97, 0x0c, 0xd3, 0x35, 0x6b
> 
> +};
> 
> +
> 
> +//
> 
> +// X509 Cert Data for RSA Public Key Retrieving and
> X509 Verification (Generated by OpenSSL utility).
> 
> +// $ openssl req -new -key TestKeyPem -out TestCertCsr
> -subj
> "/C=US/ST=WA/L=Seattle/O=Tianocore/OU=EDK2CHILD/CN=UEFI"
> 
> +// $ openssl x509 -days 10000 -CA TestCACert.pem -CAkey
> TestKeyPem -req -out TestCert -set_serial 3432 --outform
> DER -in TestCertCsr
> 
> +// password should be in the PemPass variable
> 
> +// $ xxd --include TestCert
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 TestCert[] =
> {
> 
> +  0x30, 0x82, 0x02, 0x31, 0x30, 0x82, 0x01, 0x9a, 0x02,
> 0x02, 0x0d, 0x68,
> 
> +  0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
> 0x0d, 0x01, 0x01,
> 
> +  0x0b, 0x05, 0x00, 0x30, 0x5e, 0x31, 0x0b, 0x30, 0x09,
> 0x06, 0x03, 0x55,
> 
> +  0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b, 0x30,
> 0x09, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x08, 0x0c, 0x02, 0x57, 0x41, 0x31, 0x10,
> 0x30, 0x0e, 0x06,
> 
> +  0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x65, 0x61,
> 0x74, 0x74, 0x6c,
> 
> +  0x65, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04,
> 0x0a, 0x0c, 0x09,
> 
> +  0x54, 0x69, 0x61, 0x6e, 0x6f, 0x63, 0x6f, 0x72, 0x65,
> 0x31, 0x0d, 0x30,
> 
> +  0x0b, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x04, 0x45,
> 0x44, 0x4b, 0x32,
> 
> +  0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x03,
> 0x0c, 0x04, 0x55,
> 
> +  0x45, 0x46, 0x49, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x30,
> 0x30, 0x36, 0x32,
> 
> +  0x39, 0x32, 0x33, 0x31, 0x35, 0x33, 0x36, 0x5a, 0x17,
> 0x0d, 0x34, 0x37,
> 
> +  0x31, 0x31, 0x31, 0x35, 0x32, 0x33, 0x31, 0x35, 0x33,
> 0x36, 0x5a, 0x30,
> 
> +  0x63, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
> 0x06, 0x13, 0x02,
> 
> +  0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
> 0x04, 0x08, 0x0c,
> 
> +  0x02, 0x57, 0x41, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03,
> 0x55, 0x04, 0x07,
> 
> +  0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65,
> 0x31, 0x12, 0x30,
> 
> +  0x10, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x09, 0x54,
> 0x69, 0x61, 0x6e,
> 
> +  0x6f, 0x63, 0x6f, 0x72, 0x65, 0x31, 0x12, 0x30, 0x10,
> 0x06, 0x03, 0x55,
> 
> +  0x04, 0x0b, 0x0c, 0x09, 0x45, 0x44, 0x4b, 0x32, 0x43,
> 0x48, 0x49, 0x4c,
> 
> +  0x44, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04,
> 0x03, 0x0c, 0x04,
> 
> +  0x55, 0x45, 0x46, 0x49, 0x30, 0x81, 0x9f, 0x30, 0x0d,
> 0x06, 0x09, 0x2a,
> 
> +  0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05,
> 0x00, 0x03, 0x81,
> 
> +  0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00,
> 0x9f, 0xef, 0x1b,
> 
> +  0x46, 0x45, 0x55, 0x33, 0x4b, 0xee, 0x95, 0x14, 0xd3,
> 0x5a, 0x3e, 0xd9,
> 
> +  0x29, 0xfb, 0xd9, 0x29, 0x4e, 0x8b, 0xf1, 0xf5, 0x68,
> 0x7c, 0x58, 0x86,
> 
> +  0x0c, 0xda, 0xd7, 0xe0, 0xd2, 0x9a, 0xe8, 0x37, 0x16,
> 0x4d, 0x54, 0x92,
> 
> +  0x18, 0x20, 0x4c, 0x09, 0xa1, 0xcf, 0xe1, 0xaa, 0x7a,
> 0x5a, 0x64, 0x7e,
> 
> +  0x5c, 0xeb, 0x4e, 0x15, 0x8e, 0x40, 0xd1, 0xcb, 0x7d,
> 0x01, 0x71, 0x15,
> 
> +  0x11, 0xd2, 0xc7, 0xdb, 0x6b, 0x00, 0xdc, 0x02, 0xcb,
> 0x5a, 0x6d, 0x2b,
> 
> +  0x2a, 0x75, 0xb6, 0x3f, 0xec, 0xc1, 0x9d, 0xbf, 0xda,
> 0xe5, 0x3a, 0x77,
> 
> +  0x4b, 0x21, 0x1c, 0x99, 0x42, 0x84, 0x5e, 0x27, 0x53,
> 0x9b, 0xe6, 0xc1,
> 
> +  0xa1, 0x95, 0x58, 0xba, 0xbe, 0x62, 0x58, 0xd5, 0x09,
> 0xa8, 0xe6, 0xb6,
> 
> +  0x1b, 0xb1, 0x18, 0x28, 0x13, 0xc7, 0x89, 0x1c, 0x68,
> 0xce, 0x15, 0xaf,
> 
> +  0x2e, 0x68, 0xac, 0x1c, 0xf7, 0x02, 0x03, 0x01, 0x00,
> 0x01, 0x30, 0x0d,
> 
> +  0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
> 0x01, 0x0b, 0x05,
> 
> +  0x00, 0x03, 0x81, 0x81, 0x00, 0x0d, 0xa4, 0x18, 0xa2,
> 0xb6, 0x09, 0xe1,
> 
> +  0x77, 0x22, 0x97, 0x46, 0x29, 0x1b, 0xd8, 0x67, 0x0a,
> 0xc0, 0x91, 0x36,
> 
> +  0x53, 0xe1, 0x4c, 0x73, 0x1b, 0xc1, 0x90, 0x6d, 0x98,
> 0x46, 0x7e, 0x65,
> 
> +  0x71, 0x1c, 0xf0, 0x62, 0x9f, 0x9e, 0x62, 0x0b, 0x8b,
> 0x73, 0x35, 0x4c,
> 
> +  0x2d, 0xc3, 0x5d, 0x38, 0x22, 0xfe, 0x43, 0x0f, 0xf2,
> 0x57, 0x17, 0x75,
> 
> +  0xa8, 0x76, 0x79, 0xab, 0x4e, 0x33, 0xa5, 0x91, 0xbd,
> 0x55, 0x5b, 0xc0,
> 
> +  0x7e, 0xfb, 0x1d, 0xc9, 0xf3, 0x5f, 0x12, 0x6f, 0x7c,
> 0xdc, 0x24, 0x5a,
> 
> +  0x84, 0x16, 0x28, 0x5b, 0xf9, 0xcc, 0x8b, 0xfe, 0x11,
> 0xe6, 0x29, 0xcf,
> 
> +  0xac, 0x90, 0x66, 0xc0, 0x70, 0x25, 0xf8, 0x71, 0xdb,
> 0x29, 0xcb, 0x6b,
> 
> +  0x10, 0xa7, 0xbe, 0x3e, 0x9d, 0x61, 0xd8, 0x04, 0xe0,
> 0x71, 0x63, 0x83,
> 
> +  0xa3, 0xca, 0x26, 0x6d, 0x7f, 0xf3, 0xaa, 0x8e, 0xb2,
> 0x66, 0x98, 0x41,
> 
> +  0xd6
> 
> +};
> 
> +
> 
> +//
> 
> +// Message Hash for Signing & Verification Validation.
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 MsgHash[] = {
> 
> +  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
> 0x09,
> 
> +  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
> 0x09
> 
> +  };
> 
> +
> 
> +//
> 
> +// Payload for PKCS#7 Signing & Verification
> Validation.
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *Payload =
> "Payload Data for PKCS#7 Signing";
> 
> +
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyRsaCertPkcs1SignVerify (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  BOOLEAN        Status;
> 
> +  VOID           *RsaPrivKey;
> 
> +  VOID           *RsaPubKey;
> 
> +  UINT8          *Signature;
> 
> +  UINTN          SigSize;
> 
> +  UINT8          *Subject;
> 
> +  UINTN          SubjectSize;
> 
> +  RETURN_STATUS  ReturnStatus;
> 
> +  CHAR8          CommonName[64];
> 
> +  UINTN          CommonNameSize;
> 
> +  CHAR8          OrgName[64];
> 
> +  UINTN          OrgNameSize;
> 
> +
> 
> +  //
> 
> +  // Retrieve RSA private key from encrypted PEM data.
> 
> +  //
> 
> +  Status = RsaGetPrivateKeyFromPem (TestKeyPem, sizeof
> (TestKeyPem), PemPass, &RsaPrivKey);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  //
> 
> +  // Retrieve RSA public key from X509 Certificate.
> 
> +  //
> 
> +  RsaPubKey = NULL;
> 
> +  Status    = RsaGetPublicKeyFromX509 (TestCert, sizeof
> (TestCert), &RsaPubKey);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  //
> 
> +  // Generate RSA PKCS#1 Signature.
> 
> +  //
> 
> +  SigSize = 0;
> 
> +  Status  = RsaPkcs1Sign (RsaPrivKey, MsgHash,
> SHA1_DIGEST_SIZE, NULL, &SigSize);
> 
> +  UT_ASSERT_FALSE (Status);
> 
> +  UT_ASSERT_NOT_EQUAL (SigSize, 0);
> 
> +
> 
> +  Signature = AllocatePool (SigSize);
> 
> +  Status    = RsaPkcs1Sign (RsaPrivKey, MsgHash,
> SHA1_DIGEST_SIZE, Signature, &SigSize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  //
> 
> +  // Verify RSA PKCS#1-encoded Signature.
> 
> +  //
> 
> +  Status = RsaPkcs1Verify (RsaPubKey, MsgHash,
> SHA1_DIGEST_SIZE, Signature, SigSize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  //
> 
> +  // X509 Certificate Subject Retrieving.
> 
> +  //
> 
> +  SubjectSize = 0;
> 
> +  Status  = X509GetSubjectName (TestCert, sizeof
> (TestCert), NULL, &SubjectSize);
> 
> +  Subject = (UINT8 *)AllocatePool (SubjectSize);
> 
> +  Status  = X509GetSubjectName (TestCert, sizeof
> (TestCert), Subject, &SubjectSize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  //
> 
> +  // Get CommonName from X509 Certificate Subject
> 
> +  //
> 
> +  CommonNameSize = 64;
> 
> +  ZeroMem (CommonName, CommonNameSize);
> 
> +  ReturnStatus = X509GetCommonName (TestCert, sizeof
> (TestCert), CommonName, &CommonNameSize);
> 
> +  UT_ASSERT_NOT_EFI_ERROR (ReturnStatus);
> 
> +
> 
> +  UT_ASSERT_EQUAL (CommonNameSize, 5);
> 
> +  UT_ASSERT_MEM_EQUAL (CommonName, "UEFI", 5);
> 
> +
> 
> +  OrgNameSize = 64;
> 
> +  ZeroMem (OrgName, OrgNameSize);
> 
> +  ReturnStatus = X509GetOrganizationName (TestCert,
> sizeof (TestCert), OrgName, &OrgNameSize);
> 
> +  UT_ASSERT_NOT_EFI_ERROR (ReturnStatus);
> 
> +
> 
> +  UT_ASSERT_EQUAL (OrgNameSize, 10);
> 
> +  UT_ASSERT_MEM_EQUAL (OrgName, "Tianocore", 10);
> 
> +
> 
> +  //
> 
> +  // X509 Certificate Verification.
> 
> +  //
> 
> +  Status = X509VerifyCert (TestCert, sizeof (TestCert),
> TestCACert, sizeof (TestCACert));
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  //
> 
> +  // Release Resources.
> 
> +  //
> 
> +  RsaFree  (RsaPubKey);
> 
> +  RsaFree  (RsaPrivKey);
> 
> +  FreePool (Signature);
> 
> +  FreePool (Subject);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyPkcs7SignVerify (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  BOOLEAN  Status;
> 
> +  UINT8    *P7SignedData;
> 
> +  UINTN    P7SignedDataSize;
> 
> +  UINT8    *SignCert;
> 
> +
> 
> +  P7SignedData = NULL;
> 
> +  SignCert     = NULL;
> 
> +
> 
> +  //
> 
> +  // Construct Signer Certificate from RAW data.
> 
> +  //
> 
> +  Status = X509ConstructCertificate (TestCert, sizeof
> (TestCert), (UINT8 **) &SignCert);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +  UT_ASSERT_NOT_NULL (SignCert);
> 
> +
> 
> +  //
> 
> +  // Create PKCS#7 signedData on Payload.
> 
> +  // Note: Caller should release P7SignedData manually.
> 
> +  //
> 
> +  Status = Pkcs7Sign (
> 
> +             TestKeyPem,
> 
> +             sizeof (TestKeyPem),
> 
> +             (CONST UINT8 *) PemPass,
> 
> +             (UINT8 *) Payload,
> 
> +             AsciiStrLen (Payload),
> 
> +             SignCert,
> 
> +             NULL,
> 
> +             &P7SignedData,
> 
> +             &P7SignedDataSize
> 
> +             );
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +  UT_ASSERT_NOT_EQUAL (P7SignedDataSize, 0);
> 
> +
> 
> +  Status = Pkcs7Verify (
> 
> +             P7SignedData,
> 
> +             P7SignedDataSize,
> 
> +             TestCACert,
> 
> +             sizeof (TestCACert),
> 
> +             (UINT8 *) Payload,
> 
> +             AsciiStrLen (Payload)
> 
> +             );
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  if (P7SignedData != NULL) {
> 
> +    FreePool (P7SignedData);
> 
> +  }
> 
> +  if (SignCert != NULL) {
> 
> +    X509Free (SignCert);
> 
> +  }
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +TEST_DESC mRsaCertTest[] = {
> 
> +    //
> 
> +    // -----Description--------------------------------
> ------Class----------------------Function---------------
> --Pre---Post--Context
> 
> +    //
> 
> +    {"TestVerifyRsaCertPkcs1SignVerify()",
> "CryptoPkg.BaseCryptLib.RsaCert",
> TestVerifyRsaCertPkcs1SignVerify, NULL, NULL, NULL},
> 
> +};
> 
> +
> 
> +UINTN mRsaCertTestNum = ARRAY_SIZE(mRsaCertTest);
> 
> +
> 
> +TEST_DESC mPkcs7Test[] = {
> 
> +    //
> 
> +    // -----Description--------------------------------
> ------Class----------------------Function---------------
> --Pre---Post--Context
> 
> +    //
> 
> +    {"TestVerifyPkcs7SignVerify()",
> "CryptoPkg.BaseCryptLib.Pkcs7",
> TestVerifyPkcs7SignVerify,        NULL, NULL, NULL},
> 
> +};
> 
> +
> 
> +UINTN mPkcs7TestNum = ARRAY_SIZE(mPkcs7Test);
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.
> c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.
> c
> new file mode 100644
> index 000000000000..7ce20d2e778f
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/RsaTests.
> c
> @@ -0,0 +1,310 @@
> +/** @file
> 
> +  Application for RSA Primitives Validation.
> 
> +
> 
> +Copyright (c) 2010, Intel Corporation. All rights
> reserved.<BR>
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +#define  RSA_MODULUS_LENGTH  512
> 
> +
> 
> +//
> 
> +// RSA PKCS#1 Validation Data from OpenSSL
> "Fips_rsa_selftest.c"
> 
> +//
> 
> +
> 
> +//
> 
> +// Public Modulus of RSA Key
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaN[] = {
> 
> +  0xBB, 0xF8, 0x2F, 0x09, 0x06, 0x82, 0xCE, 0x9C, 0x23,
> 0x38, 0xAC, 0x2B, 0x9D, 0xA8, 0x71, 0xF7,
> 
> +  0x36, 0x8D, 0x07, 0xEE, 0xD4, 0x10, 0x43, 0xA4, 0x40,
> 0xD6, 0xB6, 0xF0, 0x74, 0x54, 0xF5, 0x1F,
> 
> +  0xB8, 0xDF, 0xBA, 0xAF, 0x03, 0x5C, 0x02, 0xAB, 0x61,
> 0xEA, 0x48, 0xCE, 0xEB, 0x6F, 0xCD, 0x48,
> 
> +  0x76, 0xED, 0x52, 0x0D, 0x60, 0xE1, 0xEC, 0x46, 0x19,
> 0x71, 0x9D, 0x8A, 0x5B, 0x8B, 0x80, 0x7F,
> 
> +  0xAF, 0xB8, 0xE0, 0xA3, 0xDF, 0xC7, 0x37, 0x72, 0x3E,
> 0xE6, 0xB4, 0xB7, 0xD9, 0x3A, 0x25, 0x84,
> 
> +  0xEE, 0x6A, 0x64, 0x9D, 0x06, 0x09, 0x53, 0x74, 0x88,
> 0x34, 0xB2, 0x45, 0x45, 0x98, 0x39, 0x4E,
> 
> +  0xE0, 0xAA, 0xB1, 0x2D, 0x7B, 0x61, 0xA5, 0x1F, 0x52,
> 0x7A, 0x9A, 0x41, 0xF6, 0xC1, 0x68, 0x7F,
> 
> +  0xE2, 0x53, 0x72, 0x98, 0xCA, 0x2A, 0x8F, 0x59, 0x46,
> 0xF8, 0xE5, 0xFD, 0x09, 0x1D, 0xBD, 0xCB
> 
> +  };
> 
> +
> 
> +//
> 
> +// Public Exponent of RSA Key
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaE[] = {
> 0x11 };
> 
> +
> 
> +//
> 
> +// Private Exponent of RSA Key
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 RsaD[] = {
> 
> +  0xA5, 0xDA, 0xFC, 0x53, 0x41, 0xFA, 0xF2, 0x89, 0xC4,
> 0xB9, 0x88, 0xDB, 0x30, 0xC1, 0xCD, 0xF8,
> 
> +  0x3F, 0x31, 0x25, 0x1E, 0x06, 0x68, 0xB4, 0x27, 0x84,
> 0x81, 0x38, 0x01, 0x57, 0x96, 0x41, 0xB2,
> 
> +  0x94, 0x10, 0xB3, 0xC7, 0x99, 0x8D, 0x6B, 0xC4, 0x65,
> 0x74, 0x5E, 0x5C, 0x39, 0x26, 0x69, 0xD6,
> 
> +  0x87, 0x0D, 0xA2, 0xC0, 0x82, 0xA9, 0x39, 0xE3, 0x7F,
> 0xDC, 0xB8, 0x2E, 0xC9, 0x3E, 0xDA, 0xC9,
> 
> +  0x7F, 0xF3, 0xAD, 0x59, 0x50, 0xAC, 0xCF, 0xBC, 0x11,
> 0x1C, 0x76, 0xF1, 0xA9, 0x52, 0x94, 0x44,
> 
> +  0xE5, 0x6A, 0xAF, 0x68, 0xC5, 0x6C, 0x09, 0x2C, 0xD3,
> 0x8D, 0xC3, 0xBE, 0xF5, 0xD2, 0x0A, 0x93,
> 
> +  0x99, 0x26, 0xED, 0x4F, 0x74, 0xA1, 0x3E, 0xDD, 0xFB,
> 0xE1, 0xA1, 0xCE, 0xCC, 0x48, 0x94, 0xAF,
> 
> +  0x94, 0x28, 0xC2, 0xB7, 0xB8, 0x88, 0x3F, 0xE4, 0x46,
> 0x3A, 0x4B, 0xC8, 0x5B, 0x1C, 0xB3, 0xC1
> 
> +  };
> 
> +
> 
> +//
> 
> +// Known Answer Test (KAT) Data for RSA PKCS#1 Signing
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 RsaSignData[]
> = "OpenSSL FIPS 140-2 Public Key RSA KAT";
> 
> +
> 
> +//
> 
> +// Known Signature for the above message, under SHA-1
> Digest
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> RsaPkcs1Signature[] = {
> 
> +  0x71, 0xEE, 0x1A, 0xC0, 0xFE, 0x01, 0x93, 0x54, 0x79,
> 0x5C, 0xF2, 0x4C, 0x4A, 0xFD, 0x1A, 0x05,
> 
> +  0x8F, 0x64, 0xB1, 0x6D, 0x61, 0x33, 0x8D, 0x9B, 0xE7,
> 0xFD, 0x60, 0xA3, 0x83, 0xB5, 0xA3, 0x51,
> 
> +  0x55, 0x77, 0x90, 0xCF, 0xDC, 0x22, 0x37, 0x8E, 0xD0,
> 0xE1, 0xAE, 0x09, 0xE3, 0x3D, 0x1E, 0xF8,
> 
> +  0x80, 0xD1, 0x8B, 0xC2, 0xEC, 0x0A, 0xD7, 0x6B, 0x88,
> 0x8B, 0x8B, 0xA1, 0x20, 0x22, 0xBE, 0x59,
> 
> +  0x5B, 0xE0, 0x23, 0x24, 0xA1, 0x49, 0x30, 0xBA, 0xA9,
> 0x9E, 0xE8, 0xB1, 0x8A, 0x62, 0x16, 0xBF,
> 
> +  0x4E, 0xCA, 0x2E, 0x4E, 0xBC, 0x29, 0xA8, 0x67, 0x13,
> 0xB7, 0x9F, 0x1D, 0x04, 0x44, 0xE5, 0x5F,
> 
> +  0x35, 0x07, 0x11, 0xBC, 0xED, 0x19, 0x37, 0x21, 0xCF,
> 0x23, 0x48, 0x1F, 0x72, 0x05, 0xDE, 0xE6,
> 
> +  0xE8, 0x7F, 0x33, 0x8A, 0x76, 0x4B, 0x2F, 0x95, 0xDF,
> 0xF1, 0x5F, 0x84, 0x80, 0xD9, 0x46, 0xB4
> 
> +  };
> 
> +
> 
> +//
> 
> +// Default public key 0x10001 = 65537
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8
> DefaultPublicKey[] = {
> 
> +  0x01, 0x00, 0x01
> 
> +};
> 
> +
> 
> +VOID     *mRsa;
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyRsaPreReq (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  mRsa = RsaNew ();
> 
> +
> 
> +  if (mRsa == NULL) {
> 
> +    return UNIT_TEST_ERROR_TEST_FAILED;
> 
> +  }
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +VOID
> 
> +EFIAPI
> 
> +TestVerifyRsaCleanUp (
> 
> +  UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  if (mRsa != NULL) {
> 
> +    RsaFree (mRsa);
> 
> +    mRsa = NULL;
> 
> +  }
> 
> +}
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyRsaSetGetKeyComponents (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  BOOLEAN  Status;
> 
> +  UINTN    KeySize;
> 
> +  UINT8    *KeyBuffer;
> 
> +
> 
> +  //
> 
> +  // Set/Get RSA Key Components
> 
> +  //
> 
> +
> 
> +  //
> 
> +  // Set/Get RSA Key N
> 
> +  //
> 
> +  Status = RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof
> (RsaN));
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  KeySize = 0;
> 
> +  Status = RsaGetKey (mRsa, RsaKeyN, NULL, &KeySize);
> 
> +  UT_ASSERT_FALSE (Status);
> 
> +  UT_ASSERT_EQUAL (KeySize, sizeof (RsaN));
> 
> +
> 
> +  KeyBuffer = AllocatePool (KeySize);
> 
> +  Status = RsaGetKey (mRsa, RsaKeyN, KeyBuffer,
> &KeySize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +  UT_ASSERT_EQUAL (KeySize, sizeof (RsaN));
> 
> +
> 
> +  UT_ASSERT_MEM_EQUAL (KeyBuffer, RsaN, KeySize);
> 
> +
> 
> +  FreePool (KeyBuffer);
> 
> +
> 
> +  //
> 
> +  // Set/Get RSA Key E
> 
> +  //
> 
> +  Status = RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof
> (RsaE));
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  KeySize = 0;
> 
> +  Status = RsaGetKey (mRsa, RsaKeyE, NULL, &KeySize);
> 
> +  UT_ASSERT_FALSE (Status);
> 
> +  UT_ASSERT_EQUAL (KeySize, sizeof (RsaE));
> 
> +
> 
> +  KeyBuffer = AllocatePool (KeySize);
> 
> +  Status = RsaGetKey (mRsa, RsaKeyE, KeyBuffer,
> &KeySize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +  UT_ASSERT_EQUAL (KeySize, sizeof (RsaE));
> 
> +
> 
> +  UT_ASSERT_MEM_EQUAL (KeyBuffer, RsaE, KeySize);
> 
> +
> 
> +  FreePool (KeyBuffer);
> 
> +
> 
> +  //
> 
> +  // Clear/Get RSA Key Components
> 
> +  //
> 
> +
> 
> +  //
> 
> +  // Clear/Get RSA Key N
> 
> +  //
> 
> +  Status = RsaSetKey (mRsa, RsaKeyN, NULL, 0);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  KeySize = 1;
> 
> +  Status = RsaGetKey (mRsa, RsaKeyN, NULL, &KeySize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +  UT_ASSERT_EQUAL (KeySize, 0);
> 
> +
> 
> +  //
> 
> +  // Clear/Get RSA Key E
> 
> +  //
> 
> +  Status = RsaSetKey (mRsa, RsaKeyE, NULL, 0);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  KeySize = 1;
> 
> +  Status = RsaGetKey (mRsa, RsaKeyE, NULL, &KeySize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +  UT_ASSERT_EQUAL (KeySize, 0);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyRsaGenerateKeyComponents (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  BOOLEAN  Status;
> 
> +  UINTN    KeySize;
> 
> +  UINT8    *KeyBuffer;
> 
> +
> 
> +  //
> 
> +  // Generate RSA Key Components
> 
> +  //
> 
> +
> 
> +  Status = RsaGenerateKey (mRsa, RSA_MODULUS_LENGTH,
> NULL, 0);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  KeySize = RSA_MODULUS_LENGTH / 8;
> 
> +  KeyBuffer = AllocatePool (KeySize);
> 
> +  Status = RsaGetKey (mRsa, RsaKeyE, KeyBuffer,
> &KeySize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +  UT_ASSERT_EQUAL (KeySize, 3);
> 
> +  UT_ASSERT_MEM_EQUAL (KeyBuffer, DefaultPublicKey, 3);
> 
> +
> 
> +  KeySize = RSA_MODULUS_LENGTH / 8;
> 
> +  Status = RsaGetKey (mRsa, RsaKeyN, KeyBuffer,
> &KeySize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +  UT_ASSERT_EQUAL (KeySize, RSA_MODULUS_LENGTH / 8);
> 
> +
> 
> +  Status = RsaCheckKey (mRsa);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  //
> 
> +  // Check invalid RSA key components
> 
> +  //
> 
> +  Status = RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof
> (RsaN));
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = RsaCheckKey (mRsa);
> 
> +  UT_ASSERT_FALSE (Status);
> 
> +
> 
> +  Status = RsaSetKey (mRsa, RsaKeyN, KeyBuffer,
> KeySize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = RsaCheckKey (mRsa);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof
> (RsaE));
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = RsaCheckKey (mRsa);
> 
> +  UT_ASSERT_FALSE (Status);
> 
> +
> 
> +  FreePool (KeyBuffer);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyRsaPkcs1SignVerify (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  UINT8    HashValue[SHA1_DIGEST_SIZE];
> 
> +  UINTN    HashSize;
> 
> +  UINT8    *Signature;
> 
> +  UINTN    SigSize;
> 
> +  BOOLEAN  Status;
> 
> +
> 
> +  //
> 
> +  // SHA-1 Digest Message for PKCS#1 Signature
> 
> +  //
> 
> +  HashSize = SHA1_DIGEST_SIZE;
> 
> +  ZeroMem (HashValue, HashSize);
> 
> +
> 
> +  Status  = Sha1HashAll (RsaSignData, AsciiStrLen
> (RsaSignData), HashValue);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  //
> 
> +  // Sign RSA PKCS#1-encoded Signature
> 
> +  //
> 
> +
> 
> +  Status = RsaSetKey (mRsa, RsaKeyN, RsaN, sizeof
> (RsaN));
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = RsaSetKey (mRsa, RsaKeyE, RsaE, sizeof
> (RsaE));
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  Status = RsaSetKey (mRsa, RsaKeyD, RsaD, sizeof
> (RsaD));
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  SigSize = 0;
> 
> +  Status  = RsaPkcs1Sign (mRsa, HashValue, HashSize,
> NULL, &SigSize);
> 
> +  UT_ASSERT_FALSE (Status);
> 
> +  UT_ASSERT_NOT_EQUAL (SigSize, 0);
> 
> +
> 
> +  Signature = AllocatePool (SigSize);
> 
> +  Status  = RsaPkcs1Sign (mRsa, HashValue, HashSize,
> Signature, &SigSize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +  UT_ASSERT_EQUAL (SigSize, sizeof
> (RsaPkcs1Signature));
> 
> +
> 
> +  UT_ASSERT_MEM_EQUAL (Signature, RsaPkcs1Signature,
> SigSize);
> 
> +
> 
> +  //
> 
> +  // Verify RSA PKCS#1-encoded Signature
> 
> +  //
> 
> +  Status = RsaPkcs1Verify (mRsa, HashValue, HashSize,
> Signature, SigSize);
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  return UNIT_TEST_PASSED;
> 
> +}
> 
> +
> 
> +TEST_DESC mRsaTest[] = {
> 
> +    //
> 
> +    // -----Description--------------------------------
> ------Class----------------------Function---------------
> ------------------Pre---------------------Post---------
> Context
> 
> +    //
> 
> +    {"TestVerifyRsaSetGetKeyComponents()",
> "CryptoPkg.BaseCryptLib.Rsa",
> TestVerifyRsaSetGetKeyComponents,
> TestVerifyRsaPreReq, TestVerifyRsaCleanUp, NULL},
> 
> +    {"TestVerifyRsaGenerateKeyComponents()",
> "CryptoPkg.BaseCryptLib.Rsa",
> TestVerifyRsaGenerateKeyComponents,
> TestVerifyRsaPreReq, TestVerifyRsaCleanUp, NULL},
> 
> +    {"TestVerifyRsaPkcs1SignVerify()",
> "CryptoPkg.BaseCryptLib.Rsa",
> TestVerifyRsaPkcs1SignVerify,
> TestVerifyRsaPreReq, TestVerifyRsaCleanUp, NULL},
> 
> +};
> 
> +
> 
> +UINTN mRsaTestNum = ARRAY_SIZE(mRsaTest);
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c
> new file mode 100644
> index 000000000000..2a891ef8bcb0
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TSTests.c
> @@ -0,0 +1,335 @@
> +/** @file
> 
> +  Sample Implementation for RFC3161 Time Stamping
> Verification.
> 
> +
> 
> +Copyright (c) 2014, Intel Corporation. All rights
> reserved.<BR>
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +//
> 
> +// Sample Authenticode Data with RFC3161 time stamping
> signature.
> 
> +// The data retrieved from one signed sample UEFI
> image, which is generated by MSFT's signtool
> 
> +// utility in conjunction with RFC3161 timestamping, as
> the following command:
> 
> +//   signtool sign /ac <xxx.cer> / f <xxx.pfx> /p
> <pass> /fd <digestAlg>
> 
> +//     /tr http://timestamp.comodoca.com/rfc3161
> sample.efi
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED UINT8
> AuthenticodeWithTS[] = {
> 
> +  0x30, 0x82, 0x0c, 0x00, 0x06, 0x09, 0x2a, 0x86, 0x48,
> 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0,
> 
> +  0x82, 0x0b, 0xf1, 0x30, 0x82, 0x0b, 0xed, 0x02, 0x01,
> 0x01, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x09,
> 
> +  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01,
> 0x05, 0x00, 0x30, 0x78, 0x06, 0x0a, 0x2b,
> 
> +  0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04,
> 0xa0, 0x6a, 0x30, 0x68, 0x30, 0x33, 0x06,
> 
> +  0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02,
> 0x01, 0x0f, 0x30, 0x25, 0x03, 0x01, 0x00,
> 
> +  0xa0, 0x20, 0xa2, 0x1e, 0x80, 0x1c, 0x00, 0x3c, 0x00,
> 0x3c, 0x00, 0x3c, 0x00, 0x4f, 0x00, 0x62,
> 
> +  0x00, 0x73, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x65, 0x00,
> 0x74, 0x00, 0x65, 0x00, 0x3e, 0x00, 0x3e,
> 
> +  0x00, 0x3e, 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60,
> 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02,
> 
> +  0x01, 0x05, 0x00, 0x04, 0x20, 0x1e, 0x9e, 0x74, 0x31,
> 0xe1, 0x3e, 0x51, 0x46, 0xab, 0xce, 0x10,
> 
> +  0x0d, 0x7c, 0x38, 0x66, 0x34, 0xd4, 0xdd, 0x04, 0xa5,
> 0xe7, 0x75, 0x40, 0xdd, 0x99, 0x73, 0xf3,
> 
> +  0x2a, 0x54, 0x3e, 0xa8, 0x18, 0xa0, 0x82, 0x01, 0xee,
> 0x30, 0x82, 0x01, 0xea, 0x30, 0x82, 0x01,
> 
> +  0x57, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x2c,
> 0x65, 0xcf, 0xcf, 0xdd, 0x61, 0x7b, 0xa4,
> 
> +  0x41, 0xad, 0x26, 0x1b, 0x63, 0xce, 0x91, 0x0f, 0x30,
> 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02,
> 
> +  0x1d, 0x05, 0x00, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f,
> 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x08,
> 
> +  0x54, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x30,
> 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30, 0x37,
> 
> +  0x32, 0x38, 0x30, 0x37, 0x33, 0x38, 0x35, 0x39, 0x5a,
> 0x17, 0x0d, 0x33, 0x39, 0x31, 0x32, 0x33,
> 
> +  0x31, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30,
> 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x03, 0x13, 0x07, 0x54, 0x65, 0x73, 0x74,
> 0x53, 0x75, 0x62, 0x30, 0x81, 0x9f, 0x30,
> 
> +  0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
> 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81,
> 
> +  0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00,
> 0x94, 0xa6, 0x02, 0x15, 0x87, 0xd6, 0xbf,
> 
> +  0x71, 0xe8, 0xc6, 0x68, 0xf6, 0x9f, 0x66, 0x09, 0x6c,
> 0xe7, 0x39, 0x52, 0xf4, 0x4e, 0xaf, 0xf5,
> 
> +  0xe0, 0xba, 0x0f, 0xfd, 0xe6, 0x77, 0xa9, 0x71, 0x5b,
> 0x5c, 0x92, 0x50, 0x1d, 0xfd, 0x9b, 0x6e,
> 
> +  0x52, 0x92, 0x9e, 0x3a, 0x75, 0x86, 0x41, 0x2a, 0x41,
> 0x30, 0x1b, 0x67, 0x66, 0x91, 0xde, 0x71,
> 
> +  0x84, 0xe0, 0x90, 0xc3, 0x50, 0x36, 0x78, 0xb5, 0xa0,
> 0x1e, 0x72, 0xde, 0xe7, 0x66, 0x42, 0x4f,
> 
> +  0x59, 0x5e, 0x3d, 0xf3, 0x85, 0x82, 0x0b, 0xa8, 0x26,
> 0x2d, 0xd9, 0xe3, 0x14, 0xda, 0x9d, 0x2e,
> 
> +  0x3f, 0x53, 0x4d, 0x8d, 0x10, 0xbf, 0xa4, 0x7c, 0xe5,
> 0xaf, 0x3a, 0xa6, 0xaf, 0x49, 0x64, 0xb0,
> 
> +  0x60, 0x17, 0x87, 0x71, 0x77, 0x59, 0x52, 0xe5, 0x5a,
> 0xed, 0x96, 0x7d, 0x7e, 0x5d, 0xc1, 0xef,
> 
> +  0x6b, 0xfb, 0x80, 0xc5, 0x2b, 0x10, 0xfe, 0xe7, 0xd3,
> 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x48,
> 
> +  0x30, 0x46, 0x30, 0x44, 0x06, 0x03, 0x55, 0x1d, 0x01,
> 0x04, 0x3d, 0x30, 0x3b, 0x80, 0x10, 0x19,
> 
> +  0x8d, 0x48, 0xa1, 0xb9, 0xf3, 0x5e, 0x3c, 0x13, 0xb4,
> 0x08, 0xb6, 0xd9, 0xf3, 0x4f, 0x0a, 0xa1,
> 
> +  0x15, 0x30, 0x13, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03,
> 0x55, 0x04, 0x03, 0x13, 0x08, 0x54, 0x65,
> 
> +  0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x82, 0x10, 0x27,
> 0xcb, 0x16, 0x33, 0x8b, 0xed, 0x4d, 0xa8,
> 
> +  0x47, 0xf0, 0x86, 0x47, 0x10, 0xef, 0x15, 0xd9, 0x30,
> 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02,
> 
> +  0x1d, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, 0x51, 0x94,
> 0xed, 0x7a, 0x5c, 0x0b, 0x34, 0x16, 0x9c,
> 
> +  0xf4, 0x5f, 0x88, 0x16, 0xa8, 0x4b, 0x13, 0xfc, 0xa4,
> 0x0a, 0xc7, 0xd9, 0x20, 0xb1, 0x93, 0xc5,
> 
> +  0x81, 0x4f, 0x35, 0x3a, 0x89, 0x10, 0x04, 0xc4, 0xcc,
> 0x10, 0x34, 0xc3, 0x15, 0x57, 0x06, 0x97,
> 
> +  0xee, 0x06, 0x2f, 0xf3, 0x24, 0xa1, 0xe6, 0x3a, 0x89,
> 0x4d, 0xb4, 0x7b, 0x12, 0x87, 0x90, 0x8c,
> 
> +  0xfc, 0x5b, 0xb0, 0xf0, 0xdd, 0xaa, 0x3a, 0x24, 0x6d,
> 0x55, 0x47, 0x8a, 0xf2, 0x61, 0x08, 0x7a,
> 
> +  0x59, 0x5f, 0x6e, 0x7b, 0xcb, 0x34, 0xbe, 0xb6, 0x5d,
> 0xcb, 0x60, 0xae, 0xc4, 0xda, 0x62, 0xbb,
> 
> +  0x7f, 0x17, 0x1e, 0x73, 0xd1, 0x4e, 0x9f, 0x6e, 0xd3,
> 0xc8, 0x35, 0x58, 0x30, 0xd2, 0x89, 0xe5,
> 
> +  0x22, 0x5e, 0x86, 0xac, 0x7a, 0x56, 0xd6, 0x70, 0xdb,
> 0x54, 0x10, 0x6c, 0xd3, 0xd5, 0x38, 0xfb,
> 
> +  0x69, 0xcb, 0x4f, 0x36, 0x83, 0xc2, 0xe8, 0x31, 0x82,
> 0x09, 0x69, 0x30, 0x82, 0x09, 0x65, 0x02,
> 
> +  0x01, 0x01, 0x30, 0x27, 0x30, 0x13, 0x31, 0x11, 0x30,
> 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13,
> 
> +  0x08, 0x54, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74,
> 0x02, 0x10, 0x2c, 0x65, 0xcf, 0xcf, 0xdd,
> 
> +  0x61, 0x7b, 0xa4, 0x41, 0xad, 0x26, 0x1b, 0x63, 0xce,
> 0x91, 0x0f, 0x30, 0x0d, 0x06, 0x09, 0x60,
> 
> +  0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05,
> 0x00, 0xa0, 0x5e, 0x30, 0x10, 0x06, 0x0a,
> 
> +  0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01,
> 0x0c, 0x31, 0x02, 0x30, 0x00, 0x30, 0x19,
> 
> +  0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
> 0x09, 0x03, 0x31, 0x0c, 0x06, 0x0a, 0x2b,
> 
> +  0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x02, 0x01, 0x04,
> 0x30, 0x2f, 0x06, 0x09, 0x2a, 0x86, 0x48,
> 
> +  0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31, 0x22, 0x04,
> 0x20, 0x97, 0x6e, 0x29, 0x47, 0xc4, 0x03,
> 
> +  0x68, 0x70, 0x1c, 0x99, 0x2c, 0x61, 0xb0, 0xbc, 0xde,
> 0x77, 0xe1, 0xa1, 0xeb, 0x4c, 0x1c, 0xac,
> 
> +  0x4c, 0x64, 0xf6, 0x43, 0x96, 0x94, 0x0b, 0xc0, 0xbb,
> 0x03, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
> 
> +  0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00,
> 0x04, 0x81, 0x80, 0x85, 0x93, 0xad, 0x93,
> 
> +  0x92, 0x9e, 0xa4, 0x94, 0x30, 0x02, 0xe1, 0xc8, 0xcd,
> 0x37, 0xb2, 0xe1, 0xcb, 0xb2, 0x0f, 0x1c,
> 
> +  0x67, 0xd1, 0xc9, 0xeb, 0x4d, 0x68, 0x85, 0x97, 0x5a,
> 0xa6, 0x0c, 0x03, 0xc7, 0x86, 0xae, 0xb3,
> 
> +  0x35, 0xb4, 0x1d, 0x0e, 0x95, 0x5f, 0xed, 0x37, 0x13,
> 0x6b, 0x1e, 0x94, 0x80, 0xf1, 0xac, 0x55,
> 
> +  0x73, 0xd1, 0x31, 0xf9, 0xad, 0x13, 0x7b, 0x26, 0xbf,
> 0xe7, 0x55, 0x7b, 0xb2, 0xf9, 0x21, 0x42,
> 
> +  0x23, 0x64, 0xe6, 0x45, 0x03, 0x67, 0xcb, 0x42, 0xd3,
> 0x71, 0x3f, 0xd5, 0x29, 0x17, 0x4b, 0x49,
> 
> +  0x45, 0x0e, 0x8b, 0xba, 0x1f, 0x15, 0x5a, 0x7f, 0x7b,
> 0x5e, 0x9b, 0x22, 0x46, 0xa7, 0x9c, 0x0d,
> 
> +  0x25, 0x9c, 0x76, 0x25, 0x02, 0xc8, 0x15, 0x00, 0x51,
> 0xe6, 0x73, 0x39, 0xac, 0x8d, 0x41, 0x7b,
> 
> +  0xc8, 0x42, 0xc9, 0xdb, 0x1b, 0x16, 0x13, 0xf6, 0x44,
> 0x32, 0xef, 0x17, 0xa1, 0x82, 0x08, 0x34,
> 
> +  0x30, 0x82, 0x08, 0x30, 0x06, 0x0a, 0x2b, 0x06, 0x01,
> 0x04, 0x01, 0x82, 0x37, 0x03, 0x03, 0x01,
> 
> +  0x31, 0x82, 0x08, 0x20,
> 
> +  0x30, 0x82, 0x08, 0x1c, 0x06, 0x09, 0x2a, 0x86, 0x48,
> 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02, 0xa0,
> 
> +  0x82, 0x08, 0x0d, 0x30, 0x82, 0x08, 0x09, 0x02, 0x01,
> 0x03, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x05,
> 
> +  0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x30, 0x81,
> 0xf6, 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86,
> 
> +  0xf7, 0x0d, 0x01, 0x09, 0x10, 0x01, 0x04, 0xa0, 0x81,
> 0xe6, 0x04, 0x81, 0xe3, 0x30, 0x81, 0xe0,
> 
> +  0x02, 0x01, 0x01, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04,
> 0x01, 0xb2, 0x31, 0x02, 0x01, 0x01, 0x30,
> 
> +  0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02,
> 0x1a, 0x05, 0x00, 0x04, 0x14, 0xcd, 0x06,
> 
> +  0xf0, 0xbd, 0x8b, 0xcd, 0x5c, 0x2e, 0x5a, 0x7c, 0x42,
> 0x56, 0x2c, 0x20, 0x4a, 0x15, 0xcb, 0x1d,
> 
> +  0x8b, 0x0e, 0x02, 0x15, 0x00, 0xb6, 0xff, 0x47, 0x05,
> 0xb6, 0x2d, 0x15, 0xac, 0x3f, 0x5d, 0xd9,
> 
> +  0xcf, 0x9d, 0x54, 0x35, 0x56, 0x7c, 0xc1, 0x6e, 0x8b,
> 0x18, 0x0f, 0x32, 0x30, 0x31, 0x34, 0x30,
> 
> +  0x37, 0x32, 0x38, 0x30, 0x38, 0x35, 0x30, 0x30, 0x33,
> 0x5a, 0xa0, 0x81, 0x83, 0xa4, 0x81, 0x80,
> 
> +  0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
> 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31,
> 
> +  0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13,
> 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65,
> 
> +  0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73,
> 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0e,
> 
> +  0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61,
> 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a,
> 
> +  0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11,
> 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20,
> 
> +  0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65,
> 0x64, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x03, 0x13, 0x1b, 0x43, 0x4f, 0x4d, 0x4f,
> 0x44, 0x4f, 0x20, 0x54, 0x69, 0x6d, 0x65,
> 
> +  0x20, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67,
> 0x20, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72,
> 
> +  0xa0, 0x82, 0x04, 0x97, 0x30, 0x82, 0x04, 0x93, 0x30,
> 0x82, 0x03, 0x7b, 0xa0, 0x03, 0x02, 0x01,
> 
> +  0x02, 0x02, 0x10, 0x47, 0x8a, 0x8e, 0xfb, 0x59, 0xe1,
> 0xd8, 0x3f, 0x0c, 0xe1, 0x42, 0xd2, 0xa2,
> 
> +  0x87, 0x07, 0xbe, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
> 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05,
> 
> +  0x05, 0x00, 0x30, 0x81, 0x95, 0x31, 0x0b, 0x30, 0x09,
> 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
> 
> +  0x55, 0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
> 0x04, 0x08, 0x13, 0x02, 0x55, 0x54, 0x31,
> 
> +  0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13,
> 0x0e, 0x53, 0x61, 0x6c, 0x74, 0x20, 0x4c,
> 
> +  0x61, 0x6b, 0x65, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31,
> 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x0a, 0x13, 0x15, 0x54, 0x68, 0x65, 0x20, 0x55, 0x53,
> 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54,
> 
> +  0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31,
> 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x0b, 0x13, 0x18, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
> 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x75, 0x73,
> 
> +  0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x63,
> 0x6f, 0x6d, 0x31, 0x1d, 0x30, 0x1b, 0x06,
> 
> +  0x03, 0x55, 0x04, 0x03, 0x13, 0x14, 0x55, 0x54, 0x4e,
> 0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69,
> 
> +  0x72, 0x73, 0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63,
> 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x30,
> 
> +  0x30, 0x35, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
> 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x35, 0x30,
> 
> +  0x35, 0x31, 0x30, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39,
> 0x5a, 0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09,
> 
> +  0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42,
> 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55,
> 
> +  0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74,
> 0x65, 0x72, 0x20, 0x4d, 0x61, 0x6e, 0x63,
> 
> +  0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30,
> 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13,
> 
> +  0x07, 0x53, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x64, 0x31,
> 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x0a, 0x13, 0x11, 0x43, 0x4f, 0x4d, 0x4f, 0x44, 0x4f,
> 0x20, 0x43, 0x41, 0x20, 0x4c, 0x69, 0x6d,
> 
> +  0x69, 0x74, 0x65, 0x64, 0x31, 0x24, 0x30, 0x22, 0x06,
> 0x03, 0x55, 0x04, 0x03, 0x13, 0x1b, 0x43,
> 
> +  0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x54, 0x69, 0x6d,
> 0x65, 0x20, 0x53, 0x74, 0x61, 0x6d, 0x70,
> 
> +  0x69, 0x6e, 0x67, 0x20, 0x53, 0x69, 0x67, 0x6e, 0x65,
> 0x72, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d,
> 
> +  0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
> 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01,
> 
> +  0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01,
> 0x01, 0x00, 0xbc, 0x35, 0xa0, 0x36, 0x70,
> 
> +  0x22, 0x81, 0x11, 0xc3, 0xb2, 0x83, 0xb9, 0xd3, 0x28,
> 0xc6, 0x36, 0xcd, 0x25, 0x6b, 0xa9, 0x7b,
> 
> +  0xb2, 0x1c, 0xf6, 0x9b, 0x51, 0x9c, 0xef, 0x35, 0xf4,
> 0xed, 0x08, 0x8e, 0x5e, 0x38, 0x08, 0xf8,
> 
> +  0x77, 0x3c, 0x0a, 0x42, 0xe0, 0xf3, 0x70, 0xdc, 0xa3,
> 0xd7, 0xca, 0xf5, 0x4c, 0x0b, 0xcf, 0xff,
> 
> +  0x22, 0x9c, 0x0a, 0x7e, 0x68, 0xd6, 0x09, 0xa2, 0x2a,
> 0x84, 0x7b, 0xa6, 0x9d, 0xb4, 0xa9, 0xc1,
> 
> +  0x33, 0xe2, 0xef, 0x1f, 0x17, 0x48, 0xca, 0x3a, 0xcd,
> 0x46, 0xe6, 0xc5, 0xaa, 0x77, 0xbd, 0xe3,
> 
> +  0x77, 0x9a, 0xfa, 0x47, 0x53, 0x40, 0x28, 0x59, 0x43,
> 0x93, 0xf1, 0xa4, 0x81, 0xea, 0xef, 0x80,
> 
> +  0xb5, 0x4f, 0xa7, 0x08, 0xce, 0xba, 0x6e, 0xbc, 0xca,
> 0x76, 0x0c, 0x97, 0x64, 0x59, 0x86, 0x24,
> 
> +  0xbb, 0x3d, 0x82, 0x90, 0xa8, 0x55, 0xb1, 0x92, 0xd3,
> 0xa0, 0xa7, 0x05, 0xac, 0x9f, 0x53, 0x25,
> 
> +  0x08, 0x10, 0x47, 0x99, 0xcd, 0x98, 0xde, 0x68, 0xe5,
> 0xb4, 0x50, 0x78, 0xa3, 0xaf, 0x01, 0xcc,
> 
> +  0x59, 0x43, 0x58, 0xe4, 0x76, 0x6e, 0x7e, 0xac, 0xc7,
> 0xe2, 0x9e, 0x1f, 0x4f, 0xb0, 0x47, 0x2d,
> 
> +  0xc8, 0x0c, 0xa3, 0x49, 0x27, 0x80, 0x75, 0x8c, 0xbb,
> 0x06, 0x91, 0x65, 0x0f, 0x90, 0x9b, 0xf4,
> 
> +  0xba, 0xd1, 0x81, 0xc8, 0x5c, 0x6a, 0xec, 0x14, 0xe9,
> 0x25, 0x09, 0xbf, 0x23, 0x16, 0xf4, 0x95,
> 
> +  0x46, 0x40, 0x40, 0x21, 0xbb, 0x83, 0x96, 0xfd, 0x86,
> 0x1f, 0x7a, 0xc8, 0x0d, 0x10, 0x8e, 0xa2,
> 
> +  0xf8, 0x19, 0x07, 0x58, 0x7f, 0x9f, 0xbd, 0x37, 0x02,
> 0x60, 0xf2, 0xa4, 0xe9, 0x9d, 0x44, 0x3f,
> 
> +  0x30, 0x05, 0xe4, 0xa7, 0x70, 0x99, 0x51, 0x9a, 0xe8,
> 0x17, 0xf1, 0x55, 0xca, 0xb2, 0x61, 0x89,
> 
> +  0x65, 0x46, 0xa7, 0x6a, 0xf2, 0x58, 0x46, 0x7e, 0xaa,
> 0xa0, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01,
> 
> +  0xa3, 0x81, 0xf4, 0x30, 0x81, 0xf1, 0x30, 0x1f, 0x06,
> 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30,
> 
> +  0x16, 0x80, 0x14, 0xda, 0xed, 0x64, 0x74, 0x14, 0x9c,
> 0x14, 0x3c, 0xab, 0xdd, 0x99, 0xa9, 0xbd,
> 
> +  0x5b, 0x28, 0x4d, 0x8b, 0x3c, 0xc9, 0xd8, 0x30, 0x1d,
> 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16,
> 
> +  0x04, 0x14, 0x2e, 0x2d, 0xb0, 0x0a, 0x44, 0x4a, 0xd3,
> 0x87, 0xc0, 0x02, 0x07, 0xce, 0x97, 0x7d,
> 
> +  0x50, 0x62, 0x20, 0xfd, 0x0f, 0x83, 0x30, 0x0e, 0x06,
> 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff,
> 
> +  0x04, 0x04, 0x03, 0x02, 0x06, 0xc0, 0x30, 0x0c, 0x06,
> 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff,
> 
> +  0x04, 0x02, 0x30, 0x00, 0x30, 0x16, 0x06, 0x03, 0x55,
> 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x0c,
> 
> +  0x30, 0x0a, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05,
> 0x07, 0x03, 0x08, 0x30, 0x42, 0x06, 0x03,
> 
> +  0x55, 0x1d, 0x1f, 0x04, 0x3b, 0x30, 0x39, 0x30, 0x37,
> 0xa0, 0x35, 0xa0, 0x33, 0x86, 0x31, 0x68,
> 
> +  0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c,
> 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72,
> 
> +  0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x55,
> 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45, 0x52,
> 
> +  0x46, 0x69, 0x72, 0x73, 0x74, 0x2d, 0x4f, 0x62, 0x6a,
> 0x65, 0x63, 0x74, 0x2e, 0x63, 0x72, 0x6c,
> 
> +  0x30, 0x35, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05,
> 0x07, 0x01, 0x01, 0x04, 0x29, 0x30, 0x27,
> 
> +  0x30, 0x25, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05,
> 0x07, 0x30, 0x01, 0x86, 0x19, 0x68, 0x74,
> 
> +  0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x63, 0x73, 0x70,
> 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72,
> 
> +  0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x0d,
> 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
> 
> +  0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, 0x01,
> 0x01, 0x00, 0xc8, 0xfb, 0x63, 0xf8, 0x0b,
> 
> +  0x75, 0x75, 0x2c, 0x3a, 0xf1, 0xf2, 0x13, 0xa7, 0x2d,
> 0xb6, 0xa3, 0x1a, 0x9c, 0xad, 0x01, 0x07,
> 
> +  0xd3, 0x34, 0x8e, 0x77, 0xe0, 0xc2, 0x6e, 0xae, 0x02,
> 0x5d, 0x48, 0x4f, 0xa4, 0xd2, 0x21, 0xb6,
> 
> +  0x36, 0xfd, 0x2a, 0x35, 0x43, 0x7c, 0x6b, 0xdf, 0x80,
> 0x87, 0x0b, 0x15, 0xf0, 0x76, 0x32, 0x00,
> 
> +  0xb4, 0xce, 0xb5, 0x67, 0xa4, 0x2f, 0x2f, 0x20, 0x1b,
> 0x9c, 0x54, 0x9e, 0x83, 0x3f, 0x1f, 0x5f,
> 
> +  0x14, 0x95, 0x62, 0x82, 0x0f, 0x22, 0x41, 0x22, 0x1f,
> 0x70, 0xb3, 0xf3, 0xf7, 0x42, 0xde, 0x6c,
> 
> +  0x51, 0xcd, 0x4b, 0xf8, 0x21, 0xac, 0x9b, 0x3b, 0x8c,
> 0xb1, 0xe5, 0xe6, 0x28, 0x8f, 0xce, 0x2a,
> 
> +  0x8a, 0xf9, 0xaa, 0x52, 0x4d, 0x8c, 0x5b, 0x77, 0xba,
> 0x4d, 0x5a, 0x58, 0xdb, 0xbb, 0x6a, 0x04,
> 
> +  0xcc, 0x52, 0x1e, 0x9d, 0xe2, 0x28, 0x37, 0x0e, 0xbb,
> 0xe7, 0x0e, 0x91, 0xc7, 0xf8, 0xdb, 0xf1,
> 
> +  0x81, 0x98, 0xeb, 0xcd, 0x37, 0xb3, 0x0e, 0xab, 0x65,
> 0xd3, 0x62, 0xec, 0x3a, 0xa5, 0x76, 0xeb,
> 
> +  0x13, 0xa8, 0x35, 0x93, 0xc9, 0x2e, 0x0a, 0x01, 0xec,
> 0xc0, 0xe8, 0xcc, 0x3d, 0x7e, 0xb6, 0xeb,
> 
> +  0xe2, 0xc1, 0xec, 0xd3, 0x14, 0x92, 0x82, 0x66, 0x87,
> 0x50, 0xdc, 0xfd, 0x50, 0x97, 0xac, 0xb3,
> 
> +  0x4a, 0x76, 0x73, 0x06, 0xc4, 0x86, 0x11, 0x3a, 0xb3,
> 0x5f, 0x43, 0x04, 0x52, 0x6f, 0xea, 0xb3,
> 
> +  0xd0, 0x74, 0x36, 0x4c, 0xca, 0xf1, 0x1b, 0x79, 0x84,
> 0x37, 0x70, 0x63, 0xad, 0x74, 0xb9, 0xaa,
> 
> +  0x0e, 0xf3, 0x98, 0xb0, 0x86, 0x08, 0xeb, 0xdb, 0xe0,
> 0x1f, 0x8c, 0x10, 0xf2, 0x39, 0x64, 0x9b,
> 
> +  0xae, 0x4f, 0x0a, 0x2c, 0x92, 0x8a, 0x4f, 0x18, 0xb5,
> 0x91, 0xe5, 0x8d, 0x1a, 0x93, 0x5f, 0x1f,
> 
> +  0xae, 0xf1, 0xa6, 0xf0, 0x2e, 0x97, 0xd0, 0xd2, 0xf6,
> 0x2b, 0x3c, 0x31, 0x82, 0x02, 0x61, 0x30,
> 
> +  0x82, 0x02, 0x5d, 0x02, 0x01, 0x01, 0x30, 0x81, 0xaa,
> 0x30, 0x81, 0x95, 0x31, 0x0b, 0x30, 0x09,
> 
> +  0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53,
> 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
> 
> +  0x04, 0x08, 0x13, 0x02, 0x55, 0x54, 0x31, 0x17, 0x30,
> 0x15, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13,
> 
> +  0x0e, 0x53, 0x61, 0x6c, 0x74, 0x20, 0x4c, 0x61, 0x6b,
> 0x65, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31,
> 
> +  0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13,
> 0x15, 0x54, 0x68, 0x65, 0x20, 0x55, 0x53,
> 
> +  0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20, 0x4e,
> 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31,
> 
> +  0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13,
> 0x18, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
> 
> +  0x2f, 0x77, 0x77, 0x77, 0x2e, 0x75, 0x73, 0x65, 0x72,
> 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x63,
> 
> +  0x6f, 0x6d, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55,
> 0x04, 0x03, 0x13, 0x14, 0x55, 0x54, 0x4e,
> 
> +  0x2d, 0x55, 0x53, 0x45, 0x52, 0x46, 0x69, 0x72, 0x73,
> 0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63,
> 
> +  0x74, 0x02, 0x10, 0x47, 0x8a, 0x8e, 0xfb, 0x59, 0xe1,
> 0xd8, 0x3f, 0x0c, 0xe1, 0x42, 0xd2, 0xa2,
> 
> +  0x87, 0x07, 0xbe, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e,
> 0x03, 0x02, 0x1a, 0x05, 0x00, 0xa0, 0x81,
> 
> +  0x8c, 0x30, 0x1a, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
> 0xf7, 0x0d, 0x01, 0x09, 0x03, 0x31, 0x0d,
> 
> +  0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
> 0x09, 0x10, 0x01, 0x04, 0x30, 0x1c, 0x06,
> 
> +  0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09,
> 0x05, 0x31, 0x0f, 0x17, 0x0d, 0x31, 0x34,
> 
> +  0x30, 0x37, 0x32, 0x38, 0x30, 0x38, 0x35, 0x30, 0x30,
> 0x33, 0x5a, 0x30, 0x23, 0x06, 0x09, 0x2a,
> 
> +  0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x04, 0x31,
> 0x16, 0x04, 0x14, 0x7a, 0xad, 0x35, 0xdc,
> 
> +  0x5b, 0xd6, 0x00, 0xd7, 0x44, 0xac, 0x80, 0x8f, 0x4f,
> 0xb6, 0xb4, 0x03, 0x62, 0x34, 0x53, 0xdc,
> 
> +  0x30, 0x2b, 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7,
> 0x0d, 0x01, 0x09, 0x10, 0x02, 0x0c, 0x31,
> 
> +  0x1c, 0x30, 0x1a, 0x30, 0x18, 0x30, 0x16, 0x04, 0x14,
> 0x3d, 0xbb, 0x6d, 0xb5, 0x08, 0x5c, 0x6d,
> 
> +  0xd5, 0xa1, 0xca, 0x7f, 0x9c, 0xf8, 0x4e, 0xcb, 0x1a,
> 0x39, 0x10, 0xca, 0xc8, 0x30, 0x0d, 0x06,
> 
> +  0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
> 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00,
> 
> +  0x73, 0x64, 0xb9, 0xa3, 0x54, 0x6f, 0x50, 0x97, 0x01,
> 0xa7, 0xf6, 0x0d, 0xb8, 0xce, 0x4b, 0xaa,
> 
> +  0x43, 0xa2, 0x8f, 0xa3, 0xea, 0x93, 0xf2, 0xa3, 0xd0,
> 0x46, 0xde, 0xdd, 0x45, 0xe5, 0x94, 0x5a,
> 
> +  0x45, 0xc2, 0x13, 0x1b, 0x90, 0x9b, 0xcf, 0x73, 0xcd,
> 0x28, 0x70, 0xf0, 0xf4, 0x54, 0xb5, 0x2d,
> 
> +  0x31, 0xf9, 0xf3, 0x2d, 0x38, 0x78, 0xfe, 0x68, 0xea,
> 0x3c, 0xc0, 0xbe, 0x0b, 0x5a, 0x91, 0x49,
> 
> +  0x63, 0xeb, 0x26, 0x32, 0x5b, 0x86, 0xcf, 0xe5, 0x8a,
> 0xa5, 0x9d, 0xe6, 0x4b, 0x57, 0x91, 0x8f,
> 
> +  0x3c, 0xdc, 0xa6, 0x53, 0xd8, 0xdb, 0x8a, 0xfd, 0x3e,
> 0x7e, 0x19, 0x6f, 0x27, 0x72, 0x95, 0xc2,
> 
> +  0x79, 0x73, 0xdf, 0xfb, 0x08, 0x5c, 0x5b, 0xc8, 0xb7,
> 0x94, 0x75, 0x88, 0x7a, 0x9a, 0x85, 0x9f,
> 
> +  0x1b, 0xa3, 0x98, 0x30, 0x91, 0xee, 0xc0, 0x52, 0xd2,
> 0x75, 0x9c, 0xcb, 0x45, 0x0d, 0x94, 0x43,
> 
> +  0x67, 0x7a, 0x49, 0x1c, 0xb1, 0x89, 0x9d, 0x6e, 0xfa,
> 0x87, 0xd2, 0x4d, 0x6e, 0x74, 0x90, 0xf5,
> 
> +  0x80, 0x8c, 0x92, 0xda, 0xd9, 0xa1, 0x48, 0x20, 0x31,
> 0x02, 0x79, 0xde, 0xe3, 0xbd, 0x09, 0x04,
> 
> +  0xa8, 0xd4, 0x99, 0xd7, 0x3b, 0xea, 0xf8, 0xdf, 0xb3,
> 0xb9, 0xd7, 0xa3, 0x36, 0xa1, 0xdb, 0xd3,
> 
> +  0xec, 0x65, 0x8c, 0xb8, 0x8f, 0xfb, 0xd6, 0xef, 0x9c,
> 0x32, 0x3e, 0xab, 0x20, 0x74, 0xb9, 0x65,
> 
> +  0x4c, 0xc6, 0x15, 0x2f, 0x31, 0x2a, 0x34, 0x3e, 0x84,
> 0x09, 0xb4, 0x75, 0xbc, 0xbe, 0xaf, 0xb3,
> 
> +  0x9e, 0x85, 0xf1, 0xbb, 0x99, 0x1a, 0x07, 0xbd, 0x20,
> 0xa6, 0xed, 0xcf, 0xd1, 0xa6, 0x9a, 0x22,
> 
> +  0xb2, 0x6d, 0x75, 0xf4, 0x23, 0x58, 0x13, 0x78, 0x73,
> 0x1a, 0xb2, 0x84, 0xde, 0xad, 0xe8, 0x6d,
> 
> +  0xe6, 0xe7, 0x5c, 0xb6, 0xe6, 0x5b, 0x10, 0x37, 0x1f,
> 0xe3, 0x6e, 0xbd, 0x83, 0xd7, 0x51, 0xb1,
> 
> +  0x00, 0x00, 0x00, 0x00, 0x0a
> 
> +  };
> 
> +
> 
> +//
> 
> +// The Comodo Time Stamping Signer Certificate Used for
> the verification of TimeStamp signature.
> 
> +//
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 TSTrustedCert[] = {
> 
> +  0x30, 0x82, 0x04, 0x93, 0x30, 0x82, 0x03, 0x7b, 0xa0,
> 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x47,
> 
> +  0x8a, 0x8e, 0xfb, 0x59, 0xe1, 0xd8, 0x3f, 0x0c, 0xe1,
> 0x42, 0xd2, 0xa2, 0x87, 0x07, 0xbe, 0x30,
> 
> +  0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
> 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81,
> 
> +  0x95, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
> 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0b,
> 
> +  0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x02,
> 0x55, 0x54, 0x31, 0x17, 0x30, 0x15, 0x06,
> 
> +  0x03, 0x55, 0x04, 0x07, 0x13, 0x0e, 0x53, 0x61, 0x6c,
> 0x74, 0x20, 0x4c, 0x61, 0x6b, 0x65, 0x20,
> 
> +  0x43, 0x69, 0x74, 0x79, 0x31, 0x1e, 0x30, 0x1c, 0x06,
> 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x54,
> 
> +  0x68, 0x65, 0x20, 0x55, 0x53, 0x45, 0x52, 0x54, 0x52,
> 0x55, 0x53, 0x54, 0x20, 0x4e, 0x65, 0x74,
> 
> +  0x77, 0x6f, 0x72, 0x6b, 0x31, 0x21, 0x30, 0x1f, 0x06,
> 0x03, 0x55, 0x04, 0x0b, 0x13, 0x18, 0x68,
> 
> +  0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
> 0x2e, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72,
> 
> +  0x75, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x1d,
> 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03,
> 
> +  0x13, 0x14, 0x55, 0x54, 0x4e, 0x2d, 0x55, 0x53, 0x45,
> 0x52, 0x46, 0x69, 0x72, 0x73, 0x74, 0x2d,
> 
> +  0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x30, 0x1e, 0x17,
> 0x0d, 0x31, 0x30, 0x30, 0x35, 0x31, 0x30,
> 
> +  0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d,
> 0x31, 0x35, 0x30, 0x35, 0x31, 0x30, 0x32,
> 
> +  0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x7e, 0x31,
> 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1b, 0x30, 0x19,
> 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12,
> 
> +  0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4d,
> 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74,
> 
> +  0x65, 0x72, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55,
> 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6c,
> 
> +  0x66, 0x6f, 0x72, 0x64, 0x31, 0x1a, 0x30, 0x18, 0x06,
> 0x03, 0x55, 0x04, 0x0a, 0x13, 0x11, 0x43,
> 
> +  0x4f, 0x4d, 0x4f, 0x44, 0x4f, 0x20, 0x43, 0x41, 0x20,
> 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64,
> 
> +  0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03,
> 0x13, 0x1b, 0x43, 0x4f, 0x4d, 0x4f, 0x44,
> 
> +  0x4f, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, 0x74,
> 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x20,
> 
> +  0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x30, 0x82, 0x01,
> 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
> 
> +  0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00,
> 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82,
> 
> +  0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xbc, 0x35,
> 0xa0, 0x36, 0x70, 0x22, 0x81, 0x11, 0xc3,
> 
> +  0xb2, 0x83, 0xb9, 0xd3, 0x28, 0xc6, 0x36, 0xcd, 0x25,
> 0x6b, 0xa9, 0x7b, 0xb2, 0x1c, 0xf6, 0x9b,
> 
> +  0x51, 0x9c, 0xef, 0x35, 0xf4, 0xed, 0x08, 0x8e, 0x5e,
> 0x38, 0x08, 0xf8, 0x77, 0x3c, 0x0a, 0x42,
> 
> +  0xe0, 0xf3, 0x70, 0xdc, 0xa3, 0xd7, 0xca, 0xf5, 0x4c,
> 0x0b, 0xcf, 0xff, 0x22, 0x9c, 0x0a, 0x7e,
> 
> +  0x68, 0xd6, 0x09, 0xa2, 0x2a, 0x84, 0x7b, 0xa6, 0x9d,
> 0xb4, 0xa9, 0xc1, 0x33, 0xe2, 0xef, 0x1f,
> 
> +  0x17, 0x48, 0xca, 0x3a, 0xcd, 0x46, 0xe6, 0xc5, 0xaa,
> 0x77, 0xbd, 0xe3, 0x77, 0x9a, 0xfa, 0x47,
> 
> +  0x53, 0x40, 0x28, 0x59, 0x43, 0x93, 0xf1, 0xa4, 0x81,
> 0xea, 0xef, 0x80, 0xb5, 0x4f, 0xa7, 0x08,
> 
> +  0xce, 0xba, 0x6e, 0xbc, 0xca, 0x76, 0x0c, 0x97, 0x64,
> 0x59, 0x86, 0x24, 0xbb, 0x3d, 0x82, 0x90,
> 
> +  0xa8, 0x55, 0xb1, 0x92, 0xd3, 0xa0, 0xa7, 0x05, 0xac,
> 0x9f, 0x53, 0x25, 0x08, 0x10, 0x47, 0x99,
> 
> +  0xcd, 0x98, 0xde, 0x68, 0xe5, 0xb4, 0x50, 0x78, 0xa3,
> 0xaf, 0x01, 0xcc, 0x59, 0x43, 0x58, 0xe4,
> 
> +  0x76, 0x6e, 0x7e, 0xac, 0xc7, 0xe2, 0x9e, 0x1f, 0x4f,
> 0xb0, 0x47, 0x2d, 0xc8, 0x0c, 0xa3, 0x49,
> 
> +  0x27, 0x80, 0x75, 0x8c, 0xbb, 0x06, 0x91, 0x65, 0x0f,
> 0x90, 0x9b, 0xf4, 0xba, 0xd1, 0x81, 0xc8,
> 
> +  0x5c, 0x6a, 0xec, 0x14, 0xe9, 0x25, 0x09, 0xbf, 0x23,
> 0x16, 0xf4, 0x95, 0x46, 0x40, 0x40, 0x21,
> 
> +  0xbb, 0x83, 0x96, 0xfd, 0x86, 0x1f, 0x7a, 0xc8, 0x0d,
> 0x10, 0x8e, 0xa2, 0xf8, 0x19, 0x07, 0x58,
> 
> +  0x7f, 0x9f, 0xbd, 0x37, 0x02, 0x60, 0xf2, 0xa4, 0xe9,
> 0x9d, 0x44, 0x3f, 0x30, 0x05, 0xe4, 0xa7,
> 
> +  0x70, 0x99, 0x51, 0x9a, 0xe8, 0x17, 0xf1, 0x55, 0xca,
> 0xb2, 0x61, 0x89, 0x65, 0x46, 0xa7, 0x6a,
> 
> +  0xf2, 0x58, 0x46, 0x7e, 0xaa, 0xa0, 0x07, 0x02, 0x03,
> 0x01, 0x00, 0x01, 0xa3, 0x81, 0xf4, 0x30,
> 
> +  0x81, 0xf1, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23,
> 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xda,
> 
> +  0xed, 0x64, 0x74, 0x14, 0x9c, 0x14, 0x3c, 0xab, 0xdd,
> 0x99, 0xa9, 0xbd, 0x5b, 0x28, 0x4d, 0x8b,
> 
> +  0x3c, 0xc9, 0xd8, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d,
> 0x0e, 0x04, 0x16, 0x04, 0x14, 0x2e, 0x2d,
> 
> +  0xb0, 0x0a, 0x44, 0x4a, 0xd3, 0x87, 0xc0, 0x02, 0x07,
> 0xce, 0x97, 0x7d, 0x50, 0x62, 0x20, 0xfd,
> 
> +  0x0f, 0x83, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f,
> 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02,
> 
> +  0x06, 0xc0, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13,
> 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00,
> 
> +  0x30, 0x16, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x01, 0x01,
> 0xff, 0x04, 0x0c, 0x30, 0x0a, 0x06, 0x08,
> 
> +  0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x08, 0x30,
> 0x42, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04,
> 
> +  0x3b, 0x30, 0x39, 0x30, 0x37, 0xa0, 0x35, 0xa0, 0x33,
> 0x86, 0x31, 0x68, 0x74, 0x74, 0x70, 0x3a,
> 
> +  0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x75, 0x73, 0x65,
> 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e,
> 
> +  0x63, 0x6f, 0x6d, 0x2f, 0x55, 0x54, 0x4e, 0x2d, 0x55,
> 0x53, 0x45, 0x52, 0x46, 0x69, 0x72, 0x73,
> 
> +  0x74, 0x2d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e,
> 0x63, 0x72, 0x6c, 0x30, 0x35, 0x06, 0x08,
> 
> +  0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04,
> 0x29, 0x30, 0x27, 0x30, 0x25, 0x06, 0x08,
> 
> +  0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x86,
> 0x19, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
> 
> +  0x2f, 0x6f, 0x63, 0x73, 0x70, 0x2e, 0x75, 0x73, 0x65,
> 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e,
> 
> +  0x63, 0x6f, 0x6d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
> 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05,
> 
> +  0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0xc8, 0xfb,
> 0x63, 0xf8, 0x0b, 0x75, 0x75, 0x2c, 0x3a,
> 
> +  0xf1, 0xf2, 0x13, 0xa7, 0x2d, 0xb6, 0xa3, 0x1a, 0x9c,
> 0xad, 0x01, 0x07, 0xd3, 0x34, 0x8e, 0x77,
> 
> +  0xe0, 0xc2, 0x6e, 0xae, 0x02, 0x5d, 0x48, 0x4f, 0xa4,
> 0xd2, 0x21, 0xb6, 0x36, 0xfd, 0x2a, 0x35,
> 
> +  0x43, 0x7c, 0x6b, 0xdf, 0x80, 0x87, 0x0b, 0x15, 0xf0,
> 0x76, 0x32, 0x00, 0xb4, 0xce, 0xb5, 0x67,
> 
> +  0xa4, 0x2f, 0x2f, 0x20, 0x1b, 0x9c, 0x54, 0x9e, 0x83,
> 0x3f, 0x1f, 0x5f, 0x14, 0x95, 0x62, 0x82,
> 
> +  0x0f, 0x22, 0x41, 0x22, 0x1f, 0x70, 0xb3, 0xf3, 0xf7,
> 0x42, 0xde, 0x6c, 0x51, 0xcd, 0x4b, 0xf8,
> 
> +  0x21, 0xac, 0x9b, 0x3b, 0x8c, 0xb1, 0xe5, 0xe6, 0x28,
> 0x8f, 0xce, 0x2a, 0x8a, 0xf9, 0xaa, 0x52,
> 
> +  0x4d, 0x8c, 0x5b, 0x77, 0xba, 0x4d, 0x5a, 0x58, 0xdb,
> 0xbb, 0x6a, 0x04, 0xcc, 0x52, 0x1e, 0x9d,
> 
> +  0xe2, 0x28, 0x37, 0x0e, 0xbb, 0xe7, 0x0e, 0x91, 0xc7,
> 0xf8, 0xdb, 0xf1, 0x81, 0x98, 0xeb, 0xcd,
> 
> +  0x37, 0xb3, 0x0e, 0xab, 0x65, 0xd3, 0x62, 0xec, 0x3a,
> 0xa5, 0x76, 0xeb, 0x13, 0xa8, 0x35, 0x93,
> 
> +  0xc9, 0x2e, 0x0a, 0x01, 0xec, 0xc0, 0xe8, 0xcc, 0x3d,
> 0x7e, 0xb6, 0xeb, 0xe2, 0xc1, 0xec, 0xd3,
> 
> +  0x14, 0x92, 0x82, 0x66, 0x87, 0x50, 0xdc, 0xfd, 0x50,
> 0x97, 0xac, 0xb3, 0x4a, 0x76, 0x73, 0x06,
> 
> +  0xc4, 0x86, 0x11, 0x3a, 0xb3, 0x5f, 0x43, 0x04, 0x52,
> 0x6f, 0xea, 0xb3, 0xd0, 0x74, 0x36, 0x4c,
> 
> +  0xca, 0xf1, 0x1b, 0x79, 0x84, 0x37, 0x70, 0x63, 0xad,
> 0x74, 0xb9, 0xaa, 0x0e, 0xf3, 0x98, 0xb0,
> 
> +  0x86, 0x08, 0xeb, 0xdb, 0xe0, 0x1f, 0x8c, 0x10, 0xf2,
> 0x39, 0x64, 0x9b, 0xae, 0x4f, 0x0a, 0x2c,
> 
> +  0x92, 0x8a, 0x4f, 0x18, 0xb5, 0x91, 0xe5, 0x8d, 0x1a,
> 0x93, 0x5f, 0x1f, 0xae, 0xf1, 0xa6, 0xf0,
> 
> +  0x2e, 0x97, 0xd0, 0xd2, 0xf6, 0x2b, 0x3c, 0x0a
> 
> +  };
> 
> +
> 
> +UNIT_TEST_STATUS
> 
> +EFIAPI
> 
> +TestVerifyImageTimestampVerify (
> 
> +  IN UNIT_TEST_CONTEXT           Context
> 
> +  )
> 
> +{
> 
> +  BOOLEAN   Status;
> 
> +  EFI_TIME  SigningTime;
> 
> +
> 
> +  Status = FALSE;
> 
> +
> 
> +  //
> 
> +  // Verify RFC3161 Timestamp CounterSignature.
> 
> +  //
> 
> +  Status = ImageTimestampVerify (
> 
> +             AuthenticodeWithTS,
> 
> +             sizeof (AuthenticodeWithTS),
> 
> +             TSTrustedCert,
> 
> +             sizeof (TSTrustedCert),
> 
> +             &SigningTime
> 
> +             );
> 
> +  UT_ASSERT_TRUE (Status);
> 
> +
> 
> +  UT_ASSERT_EQUAL (SigningTime.Year, 2014);
> 
> +  UT_ASSERT_EQUAL (SigningTime.Month, 7);
> 
> +  UT_ASSERT_EQUAL (SigningTime.Day, 28);
> 
> +  UT_ASSERT_EQUAL (SigningTime.Hour, 8);
> 
> +  UT_ASSERT_EQUAL (SigningTime.Minute, 50);
> 
> +  UT_ASSERT_EQUAL (SigningTime.Second, 3);
> 
> +
> 
> +  return Status;
> 
> +}
> 
> +
> 
> +TEST_DESC mImageTimestampTest[] = {
> 
> +    //
> 
> +    // -----Description--------------------------------
> ------Class----------------------------Function---------
> --------Pre---Post--Context
> 
> +    //
> 
> +    {"TestVerifyImageTimestampVerify()",
> "CryptoPkg.BaseCryptLib.ImageTimestamp",
> TestVerifyImageTimestampVerify, NULL, NULL, NULL},
> 
> +};
> 
> +
> 
> +UINTN mImageTimestampTestNum =
> ARRAY_SIZE(mImageTimestampTest);
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestM
> ain.c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestM
> ain.c
> new file mode 100644
> index 000000000000..88a3f96305c3
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestM
> ain.c
> @@ -0,0 +1,81 @@
> +/** @file
> 
> +  This is a sample to demostrate the usage of the Unit
> Test Library that
> 
> +  supports the PEI, DXE, SMM, UEFI SHell, and host
> execution environments.
> 
> +
> 
> +  Copyright (c) Microsoft Corporation.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +
> 
> +/**
> 
> +  Initialize the unit test framework, suite, and unit
> tests for the
> 
> +  sample unit tests and run the unit tests.
> 
> +
> 
> +  @retval  EFI_SUCCESS           All test cases were
> dispatched.
> 
> +  @retval  EFI_OUT_OF_RESOURCES  There are not enough
> resources available to
> 
> +                                 initialize the unit
> tests.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +UefiTestMain (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS                  Status;
> 
> +  UNIT_TEST_FRAMEWORK_HANDLE  Framework;
> 
> +
> 
> +  DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_NAME,
> UNIT_TEST_VERSION ));
> 
> +  CreateUnitTest(UNIT_TEST_NAME, UNIT_TEST_VERSION,
> &Framework);
> 
> +
> 
> +  //
> 
> +  // Execute the tests.
> 
> +  //
> 
> +  Status = RunAllTestSuites (Framework);
> 
> +
> 
> +  if (Framework) {
> 
> +    FreeUnitTestFramework (Framework);
> 
> +  }
> 
> +
> 
> +  return Status;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Standard PEIM entry point for target based unit test
> execution from PEI.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +PeiEntryPoint (
> 
> +  IN EFI_PEI_FILE_HANDLE     FileHandle,
> 
> +  IN CONST EFI_PEI_SERVICES  **PeiServices
> 
> +  )
> 
> +{
> 
> +  return UefiTestMain ();
> 
> +}
> 
> +
> 
> +/**
> 
> +  Standard UEFI entry point for target based unit test
> execution from DXE, SMM,
> 
> +  UEFI Shell.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +DxeEntryPoint (
> 
> +  IN EFI_HANDLE        ImageHandle,
> 
> +  IN EFI_SYSTEM_TABLE  *SystemTable
> 
> +  )
> 
> +{
> 
> +  return UefiTestMain ();
> 
> +}
> 
> +
> 
> +/**
> 
> +  Standard POSIX C entry point for host based unit test
> execution.
> 
> +**/
> 
> +int
> 
> +main (
> 
> +  int argc,
> 
> +  char *argv[]
> 
> +  )
> 
> +{
> 
> +  return UefiTestMain ();
> 
> +}
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestM
> ainBCOP.c
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestM
> ainBCOP.c
> new file mode 100644
> index 000000000000..69bd1142e396
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/UnitTestM
> ainBCOP.c
> @@ -0,0 +1,58 @@
> +/** @file
> 
> +  This is a sample to demostrate the usage of the Unit
> Test Library that
> 
> +  supports the PEI, DXE, SMM, UEFI SHell, and host
> execution environments.
> 
> +
> 
> +  Copyright (c) Microsoft Corporation.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +#include "TestBaseCryptLib.h"
> 
> +
> 
> +
> 
> +/**
> 
> +  Initialize the unit test framework, suite, and unit
> tests for the
> 
> +  sample unit tests and run the unit tests.
> 
> +
> 
> +  @retval  EFI_SUCCESS           All test cases were
> dispatched.
> 
> +  @retval  EFI_OUT_OF_RESOURCES  There are not enough
> resources available to
> 
> +                                 initialize the unit
> tests.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +UefiTestMain (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS                  Status;
> 
> +  UNIT_TEST_FRAMEWORK_HANDLE  Framework;
> 
> +
> 
> +  DEBUG(( DEBUG_INFO, "%a v%a\n", UNIT_TEST_NAME,
> UNIT_TEST_VERSION ));
> 
> +  CreateUnitTest(UNIT_TEST_NAME, UNIT_TEST_VERSION,
> &Framework);
> 
> +
> 
> +  //
> 
> +  // Execute the tests.
> 
> +  //
> 
> +  Status = RunAllTestSuites (Framework);
> 
> +  if (Framework) {
> 
> +    FreeUnitTestFramework (Framework);
> 
> +  }
> 
> +
> 
> +  return Status;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Standard POSIX C entry point for host based unit test
> execution.
> 
> +**/
> 
> +int
> 
> +main (
> 
> +  int argc,
> 
> +  char *argv[]
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS Status;
> 
> +  // Install the BaseCryptLib protocol
> 
> +  // Run the tests
> 
> +  Status = UefiTestMain ();
> 
> +  // Uninstall it
> 
> +  return Status;
> 
> +}
> 
> diff --git a/CryptoPkg/CryptoPkg.ci.yaml
> b/CryptoPkg/CryptoPkg.ci.yaml
> index f54ebfb22e70..0228e63d6617 100644
> --- a/CryptoPkg/CryptoPkg.ci.yaml
> +++ b/CryptoPkg/CryptoPkg.ci.yaml
> @@ -8,6 +8,10 @@
>      "CompilerPlugin": {
> 
>          "DscPath": "CryptoPkg.dsc"
> 
>      },
> 
> +    ## options defined
> .pytool/Plugin/HostUnitTestCompilerPlugin
> 
> +    "HostUnitTestCompilerPlugin": {
> 
> +        "DscPath":
> "Test/UnitTest/CryptoPkgHostUnitTest.dsc"
> 
> +    },
> 
>      "CharEncodingCheck": {
> 
>          "IgnoreFiles": []
> 
>      },
> 
> diff --git a/CryptoPkg/CryptoPkg.dsc
> b/CryptoPkg/CryptoPkg.dsc
> index 1af78468a19c..28295ec80ec6 100644
> --- a/CryptoPkg/CryptoPkg.dsc
> +++ b/CryptoPkg/CryptoPkg.dsc
> @@ -223,6 +223,32 @@
>  #       generated for it, but the binary will not be
> put into any firmware volume.
> 
>  #
> 
> 
> ########################################################
> ###########################################
> 
> +[Components]
> 
> +  CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
> 
> +
> CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.
> inf
> 
> +
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCry
> ptLibUefiShell.inf {
> 
> +    <LibraryClasses>
> 
> +
> PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPo
> int.inf
> 
> +
> UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint
> /UefiDriverEntryPoint.inf
> 
> +
> UefiApplicationEntryPoint|MdePkg/Library/UefiApplication
> EntryPoint/UefiApplicationEntryPoint.inf
> 
> +
> 
> +      BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
> 
> +
> BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib
> .inf
> 
> +
> DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNul
> l.inf
> 
> +
> MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationL
> ib/UefiMemoryAllocationLib.inf
> 
> +
> PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
> 
> +
> PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServices
> Lib.inf
> 
> +
> PerformanceLib|MdePkg/Library/BasePerformanceLibNull/Bas
> ePerformanceLibNull.inf
> 
> +
> PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
> 
> +
> UefiBootServicesTableLib|MdePkg/Library/UefiBootServices
> TableLib/UefiBootServicesTableLib.inf
> 
> +
> 
> +
> UnitTestLib|UnitTestFrameworkPkg/Library/UnitTestLib/Uni
> tTestLib.inf
> 
> +
> UnitTestPersistenceLib|UnitTestFrameworkPkg/Library/Unit
> TestPersistenceLibNull/UnitTestPersistenceLibNull.inf
> 
> +
> UnitTestResultReportLib|UnitTestFrameworkPkg/Library/Uni
> tTestResultReportLib/UnitTestResultReportLibDebugLib.inf
> 
> +    <LibraryClasses.common.UEFI_APPLICATION>
> 
> +
> UnitTestResultReportLib|UnitTestFrameworkPkg/Library/Uni
> tTestResultReportLib/UnitTestResultReportLibConOut.inf
> 
> +  }
> 
> +
> 
>  !if $(CRYPTO_SERVICES) == PACKAGE
> 
>  [Components]
> 
>    CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
> 
> diff --git
> a/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLi
> b.inf
> b/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLi
> b.inf
> new file mode 100644
> index 000000000000..47515f06687e
> --- /dev/null
> +++
> b/CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLi
> b.inf
> @@ -0,0 +1,90 @@
> +## @file
> 
> +#  Cryptographic Library Instance for host based unit
> tests
> 
> +#
> 
> +#  Copyright (c) 2009 - 2019, Intel Corporation. All
> rights reserved.<BR>
> 
> +#  Copyright (c) Microsoft Corporation.
> 
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION                    = 0x00010005
> 
> +  BASE_NAME                      = BaseCryptLib
> 
> +  FILE_GUID                      = c97d34aa-caf8-42cd-
> 8261-8705f46304b3
> 
> +  MODULE_TYPE                    = DXE_DRIVER
> 
> +  VERSION_STRING                 = 1.0
> 
> +  LIBRARY_CLASS                  =
> BaseCryptLib|DXE_DRIVER DXE_CORE UEFI_APPLICATION
> UEFI_DRIVER
> 
> +
> 
> +#
> 
> +# The following information is for reference only and
> not required by the build tools.
> 
> +#
> 
> +#  VALID_ARCHITECTURES           = IA32 X64 ARM AARCH64
> 
> +#
> 
> +
> 
> +[Sources]
> 
> +  InternalCryptLib.h
> 
> +  Hash/CryptMd5.c
> 
> +  Hash/CryptSha1.c
> 
> +  Hash/CryptSha256.c
> 
> +  Hash/CryptSha512.c
> 
> +  Hash/CryptSm3.c
> 
> +  Hmac/CryptHmacSha256.c
> 
> +  Kdf/CryptHkdf.c
> 
> +  Cipher/CryptAes.c
> 
> +  Pk/CryptRsaBasic.c
> 
> +  Pk/CryptRsaExt.c
> 
> +  Pk/CryptPkcs1Oaep.c
> 
> +  Pk/CryptPkcs5Pbkdf2.c
> 
> +  Pk/CryptPkcs7Sign.c
> 
> +  Pk/CryptPkcs7VerifyCommon.c
> 
> +  Pk/CryptPkcs7VerifyBase.c
> 
> +  Pk/CryptPkcs7VerifyEku.c
> 
> +  Pk/CryptDh.c
> 
> +  Pk/CryptX509.c
> 
> +  Pk/CryptAuthenticode.c
> 
> +  Pk/CryptTs.c
> 
> +  Pem/CryptPem.c
> 
> +
> 
> +  SysCall/UnitTestHostCrtWrapper.c
> 
> +
> 
> +[Sources.Ia32]
> 
> +  Rand/CryptRandTsc.c
> 
> +
> 
> +[Sources.X64]
> 
> +  Rand/CryptRandTsc.c
> 
> +
> 
> +[Sources.ARM]
> 
> +  Rand/CryptRand.c
> 
> +
> 
> +[Sources.AARCH64]
> 
> +  Rand/CryptRand.c
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  CryptoPkg/CryptoPkg.dec
> 
> +
> 
> +[LibraryClasses]
> 
> +  BaseLib
> 
> +  BaseMemoryLib
> 
> +  MemoryAllocationLib
> 
> +  DebugLib
> 
> +  OpensslLib
> 
> +
> 
> +#
> 
> +# Remove these [BuildOptions] after this library is
> cleaned up
> 
> +#
> 
> +[BuildOptions]
> 
> +  #
> 
> +  # suppress the following warnings so we do not break
> the build with warnings-as-errors:
> 
> +  # C4090: 'function' : different 'const' qualifiers
> 
> +  # C4018: '>': signed/unsigned mismatch
> 
> +  MSFT:*_*_*_CC_FLAGS = /wd4090 /wd4018
> 
> +
> 
> +  # -JCryptoPkg/Include : To disable the use of the
> system includes provided by RVCT
> 
> +  # --diag_remark=1     : Reduce severity of "#1-D:
> last line of file ends without a newline"
> 
> +  RVCT:*_*_ARM_CC_FLAGS = -JCryptoPkg/Include --
> diag_remark=1
> 
> +
> 
> +  GCC:*_CLANG35_*_CC_FLAGS = -std=c99
> 
> +  GCC:*_CLANG38_*_CC_FLAGS = -std=c99
> 
> +
> 
> +  XCODE:*_*_*_CC_FLAGS = -std=c99
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc
> b/CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc
> new file mode 100644
> index 000000000000..d8605176e697
> --- /dev/null
> +++ b/CryptoPkg/Test/UnitTest/CryptoPkgHostUnitTest.dsc
> @@ -0,0 +1,35 @@
> +## @file
> 
> +# CryptoPkg DSC file used to build host-based unit
> tests.
> 
> +#
> 
> +# Copyright (c) Microsoft Corporation.<BR>
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  PLATFORM_NAME           = CryptoPkgHostTest
> 
> +  PLATFORM_GUID           = C7F97D6D-54AC-45A9-8197-
> CC99B20CC7EC
> 
> +  PLATFORM_VERSION        = 0.1
> 
> +  DSC_SPECIFICATION       = 0x00010005
> 
> +  OUTPUT_DIRECTORY        = Build/CryptoPkg/HostTest
> 
> +  SUPPORTED_ARCHITECTURES = IA32|X64
> 
> +  BUILD_TARGETS           = NOOPT
> 
> +  SKUID_IDENTIFIER        = DEFAULT
> 
> +
> 
> +!include
> UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc
> 
> +
> 
> +[LibraryClasses]
> 
> +
> OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
> 
> +
> BaseCryptLib|CryptoPkg/Library/BaseCryptLib/UnitTestHost
> BaseCryptLib.inf
> 
> +
> 
> +[LibraryClasses.AARCH64, LibraryClasses.ARM]
> 
> +
> RngLib|MdePkg/Library/BaseRngLibNull/BaseRngLibNull.inf
> 
> +
> 
> +[LibraryClasses.X64, LibraryClasses.IA32]
> 
> +  RngLib|MdePkg/Library/BaseRngLib/BaseRngLib.inf
> 
> +
> 
> +[Components]
> 
> +  #
> 
> +  # Build HOST_APPLICATION that tests the
> SampleUnitTest
> 
> +  #
> 
> +
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCry
> ptLibHost.inf
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuT
> estSignatures.h
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuT
> estSignatures.h
> new file mode 100644
> index 000000000000..9f5f813ef8b1
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/Pkcs7EkuT
> estSignatures.h
> @@ -0,0 +1,789 @@
> +/*++
> 
> +
> 
> +Copyright (C) Microsoft Corporation. All Rights
> Reserved.
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +Module Name:
> 
> +  AllTestSignatures.h
> 
> +
> 
> +Abstract:
> 
> +  This file has test signatures in byte array format
> for Unit-Testing the
> 
> +  Enhanced Key Usage (EKU) parsing function.
> 
> +
> 
> +  EFI_STATUS
> 
> +  EFIAPI
> 
> +  VerifyEKUsInPkcs7Signature (
> 
> +    IN CONST UINT8  *Pkcs7Signature,
> 
> +    IN CONST UINT32  SignatureSize,
> 
> +    IN CONST CHAR8  *RequiredEKUs[],
> 
> +    IN CONST UINT32  RequiredEKUsSize,
> 
> +    IN BOOLEAN       RequireAllPresent
> 
> +  );
> 
> +
> 
> +  Note:  These byte arrays were created by running
> BinToH.exe on the P7B
> 
> +         signature files.
> 
> +--*/
> 
> +
> 
> +
> 
> +//
> 
> +// This is the ProductionECCSignature.p7b in byte array
> format.  It has one
> 
> +// EKU in it. (Firmware signing)
> 
> +// "1.3.6.1.4.1.311.76.9.21.1"
> 
> +//
> 
> +CONST UINT8 ProductionECCSignature[] =
> 
> +{
> 
> + 0x30, 0x82, 0x04, 0xC0, 0x02, 0x01, 0x01, 0x31, 0x0F,
> 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
> 
> + 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
> 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
> 
> + 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0x80,
> 0x30, 0x82, 0x03, 0x7C, 0x30, 0x82, 0x03,
> 
> + 0x22, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x13, 0x33,
> 0x00, 0x00, 0x00, 0x03, 0x7E, 0x2E, 0x8F,
> 
> + 0xBD, 0xA5, 0xC9, 0x2C, 0x13, 0x00, 0x00, 0x00, 0x00,
> 0x00, 0x03, 0x30, 0x0A, 0x06, 0x08, 0x2A,
> 
> + 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x81,
> 0x8F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03,
> 
> + 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13,
> 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08,
> 
> + 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67,
> 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E,
> 
> + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65,
> 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E,
> 
> + 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15,
> 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
> 
> + 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72,
> 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x39,
> 
> + 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x30,
> 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
> 
> + 0x66, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x53, 0x75,
> 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x41,
> 
> + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20,
> 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72,
> 
> + 0x65, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x38,
> 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30,
> 
> + 0x37, 0x31, 0x32, 0x31, 0x38, 0x33, 0x37, 0x30, 0x37,
> 0x5A, 0x17, 0x0D, 0x31, 0x39, 0x30, 0x37,
> 
> + 0x31, 0x32, 0x31, 0x38, 0x33, 0x37, 0x30, 0x37, 0x5A,
> 0x30, 0x3A, 0x31, 0x38, 0x30, 0x36, 0x06,
> 
> + 0x03, 0x55, 0x04, 0x03, 0x13, 0x2F, 0x4D, 0x69, 0x63,
> 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20,
> 
> + 0x45, 0x43, 0x43, 0x20, 0x53, 0x75, 0x72, 0x66, 0x61,
> 0x63, 0x65, 0x20, 0x41, 0x63, 0x63, 0x65,
> 
> + 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20, 0x46, 0x69, 0x72,
> 0x6D, 0x77, 0x61, 0x72, 0x65, 0x20, 0x53,
> 
> + 0x69, 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30, 0x13,
> 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D,
> 
> + 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D,
> 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04,
> 
> + 0x7D, 0xDF, 0xDE, 0xFA, 0xEE, 0xA5, 0x66, 0x33, 0xAA,
> 0xCC, 0xA4, 0x18, 0x65, 0x9E, 0x3A, 0xC6,
> 
> + 0x4B, 0xCB, 0xD5, 0x78, 0x94, 0x14, 0xEE, 0xAA, 0xF3,
> 0x9D, 0xCB, 0x38, 0x6C, 0x5D, 0xFE, 0x3F,
> 
> + 0x8A, 0xA9, 0x8D, 0x04, 0xD2, 0xFE, 0xAA, 0x38, 0xF3,
> 0xD6, 0x4A, 0x7E, 0xCF, 0x12, 0x95, 0xCF,
> 
> + 0xAD, 0x92, 0x33, 0xF7, 0x38, 0x83, 0xC5, 0xFD, 0xCF,
> 0xD0, 0x96, 0x08, 0xCA, 0x62, 0x7D, 0x22,
> 
> + 0xA3, 0x82, 0x01, 0xAF, 0x30, 0x82, 0x01, 0xAB, 0x30,
> 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01,
> 
> + 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30,
> 0x16, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04,
> 
> + 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04,
> 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15, 0x01,
> 
> + 0x30, 0x0C, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01,
> 0xFF, 0x04, 0x02, 0x30, 0x00, 0x30, 0x1D,
> 
> + 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14,
> 0xE7, 0xD1, 0xD4, 0x74, 0x71, 0xF4, 0xC9,
> 
> + 0x35, 0x04, 0xA7, 0x9A, 0x1E, 0x0C, 0xDD, 0xF4, 0x8D,
> 0x5C, 0x1E, 0xF2, 0x29, 0x30, 0x37, 0x06,
> 
> + 0x03, 0x55, 0x1D, 0x11, 0x04, 0x30, 0x30, 0x2E, 0xA4,
> 0x2C, 0x30, 0x2A, 0x31, 0x10, 0x30, 0x0E,
> 
> + 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x07, 0x53, 0x75,
> 0x72, 0x66, 0x61, 0x63, 0x65, 0x31, 0x16,
> 
> + 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x05, 0x13, 0x0D,
> 0x34, 0x34, 0x30, 0x38, 0x31, 0x31, 0x2B,
> 
> + 0x34, 0x34, 0x30, 0x38, 0x36, 0x32, 0x30, 0x1F, 0x06,
> 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30,
> 
> + 0x16, 0x80, 0x14, 0x6F, 0x3A, 0xCC, 0x1B, 0x2F, 0x17,
> 0x5C, 0xED, 0xEB, 0xC8, 0xBF, 0x93, 0xA7,
> 
> + 0xB5, 0x93, 0xD1, 0x4D, 0x40, 0xAA, 0x03, 0x30, 0x75,
> 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x6E,
> 
> + 0x30, 0x6C, 0x30, 0x6A, 0xA0, 0x68, 0xA0, 0x66, 0x86,
> 0x64, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F,
> 
> + 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x69, 0x63, 0x72,
> 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63,
> 
> + 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69, 0x6F, 0x70, 0x73,
> 0x2F, 0x63, 0x72, 0x6C, 0x2F, 0x4D, 0x69,
> 
> + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x25, 0x32,
> 0x30, 0x45, 0x43, 0x43, 0x25, 0x32, 0x30,
> 
> + 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x25, 0x32,
> 0x30, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
> 
> + 0x6F, 0x72, 0x79, 0x25, 0x32, 0x30, 0x46, 0x69, 0x72,
> 0x6D, 0x77, 0x61, 0x72, 0x65, 0x25, 0x32,
> 
> + 0x30, 0x43, 0x41, 0x25, 0x32, 0x30, 0x32, 0x30, 0x31,
> 0x38, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x81,
> 
> + 0x82, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07,
> 0x01, 0x01, 0x04, 0x76, 0x30, 0x74, 0x30,
> 
> + 0x72, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07,
> 0x30, 0x02, 0x86, 0x66, 0x68, 0x74, 0x74,
> 
> + 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D,
> 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66,
> 
> + 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x70, 0x6B, 0x69,
> 0x6F, 0x70, 0x73, 0x2F, 0x63, 0x65, 0x72,
> 
> + 0x74, 0x73, 0x2F, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73,
> 0x6F, 0x66, 0x74, 0x25, 0x32, 0x30, 0x45,
> 
> + 0x43, 0x43, 0x25, 0x32, 0x30, 0x53, 0x75, 0x72, 0x66,
> 0x61, 0x63, 0x65, 0x25, 0x32, 0x30, 0x41,
> 
> + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x25,
> 0x32, 0x30, 0x46, 0x69, 0x72, 0x6D, 0x77,
> 
> + 0x61, 0x72, 0x65, 0x25, 0x32, 0x30, 0x43, 0x41, 0x25,
> 0x32, 0x30, 0x32, 0x30, 0x31, 0x38, 0x2E,
> 
> + 0x63, 0x72, 0x74, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86,
> 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03,
> 
> + 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x3D, 0xCF, 0xEF,
> 0xB8, 0xF0, 0x87, 0xEE, 0x7E, 0x80, 0x71,
> 
> + 0x04, 0x77, 0x68, 0xDC, 0x66, 0x2F, 0x09, 0xA7, 0xF0,
> 0x76, 0x57, 0x7C, 0x12, 0x5A, 0xE4, 0x80,
> 
> + 0x5A, 0xA0, 0xF2, 0x2C, 0x45, 0x1B, 0x02, 0x21, 0x00,
> 0xEB, 0x5F, 0x89, 0xD5, 0xEB, 0x03, 0x46,
> 
> + 0x9E, 0x08, 0x95, 0x2A, 0x39, 0x30, 0x5D, 0x49, 0xB6,
> 0x24, 0xCE, 0x78, 0x1B, 0xB8, 0x1D, 0x0F,
> 
> + 0xD1, 0x24, 0xD0, 0xA9, 0x18, 0x0F, 0x45, 0x4F, 0xF6,
> 0x31, 0x82, 0x01, 0x17, 0x30, 0x82, 0x01,
> 
> + 0x13, 0x02, 0x01, 0x01, 0x30, 0x81, 0xA7, 0x30, 0x81,
> 0x8F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03,
> 
> + 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13,
> 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08,
> 
> + 0x13, 0x0A, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x67,
> 0x74, 0x6F, 0x6E, 0x31, 0x10, 0x30, 0x0E,
> 
> + 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65,
> 0x64, 0x6D, 0x6F, 0x6E, 0x64, 0x31, 0x1E,
> 
> + 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15,
> 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
> 
> + 0x66, 0x74, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72,
> 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x31, 0x39,
> 
> + 0x30, 0x37, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x30,
> 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F,
> 
> + 0x66, 0x74, 0x20, 0x45, 0x43, 0x43, 0x20, 0x53, 0x75,
> 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x41,
> 
> + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x79, 0x20,
> 0x46, 0x69, 0x72, 0x6D, 0x77, 0x61, 0x72,
> 
> + 0x65, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x38,
> 0x02, 0x13, 0x33, 0x00, 0x00, 0x00, 0x03,
> 
> + 0x7E, 0x2E, 0x8F, 0xBD, 0xA5, 0xC9, 0x2C, 0x13, 0x00,
> 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x0D,
> 
> + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
> 0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06,
> 
> + 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05,
> 0x00, 0x04, 0x48, 0x30, 0x46, 0x02, 0x21,
> 
> + 0x00, 0x85, 0xC7, 0x25, 0x5C, 0xF8, 0x5A, 0x13, 0xB7,
> 0xB6, 0x3A, 0xF1, 0x04, 0x72, 0xAC, 0xB3,
> 
> + 0xF8, 0xC3, 0xE0, 0xE3, 0xD7, 0x98, 0x1B, 0xCF, 0x04,
> 0xA8, 0x0C, 0x7B, 0xBB, 0x7D, 0x40, 0xC2,
> 
> + 0x99, 0x02, 0x21, 0x00, 0xA3, 0x83, 0x12, 0xE4, 0xB6,
> 0x3C, 0xC9, 0x3F, 0x05, 0xCF, 0x70, 0x57,
> 
> + 0x54, 0x74, 0x0E, 0xEC, 0x14, 0xAD, 0x2C, 0x66, 0x9D,
> 0x72, 0x73, 0x62, 0x41, 0xA6, 0xC7, 0x90,
> 
> + 0x05, 0x35, 0xF5, 0x80,
> 
> +};
> 
> +
> 
> +//
> 
> +// This is the
> TestSignedWithMultipleCerts.bin.Signature.p7b in byte
> array
> 
> +// format.  It has two certs in it, and the leaf has an
> EKU of
> 
> +//  "1.3.6.1.4.1.311.76.9.21.1"
> 
> +//
> 
> +CONST UINT8 TestSignedMultipleCerts[] =
> 
> +{
> 
> +  0x30, 0x82, 0x04, 0x90, 0x02, 0x01, 0x01, 0x31, 0x0F,
> 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
> 
> +  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
> 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
> 
> +  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0xC2,
> 0x30, 0x82, 0x01, 0xC5, 0x30, 0x82, 0x01,
> 
> +  0x6A, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x16,
> 0x2F, 0xD8, 0x2B, 0x8A, 0x98, 0x6A, 0x8A,
> 
> +  0x43, 0xC2, 0x22, 0xA5, 0x47, 0xA1, 0x18, 0xDD, 0x30,
> 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x04, 0x03, 0x02, 0x30, 0x26, 0x31, 0x24, 0x30,
> 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 
> +  0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54,
> 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D,
> 
> +  0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65,
> 0x72, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D,
> 
> +  0x31, 0x38, 0x30, 0x37, 0x31, 0x38, 0x32, 0x33, 0x31,
> 0x36, 0x31, 0x32, 0x5A, 0x17, 0x0D, 0x33,
> 
> +  0x38, 0x30, 0x37, 0x31, 0x38, 0x32, 0x33, 0x32, 0x36,
> 0x31, 0x32, 0x5A, 0x30, 0x28, 0x31, 0x26,
> 
> +  0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1D,
> 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65,
> 
> +  0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D, 0x77,
> 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E,
> 
> +  0x65, 0x72, 0x4C, 0x65, 0x61, 0x66, 0x30, 0x59, 0x30,
> 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00,
> 
> +  0x04, 0x2E, 0x4C, 0x85, 0xFD, 0x86, 0x85, 0x4C, 0x55,
> 0x96, 0x17, 0xE3, 0x0C, 0xC1, 0xCB, 0xD9,
> 
> +  0x95, 0xCF, 0xC7, 0xEA, 0x57, 0x02, 0x5C, 0x4F, 0x92,
> 0x7C, 0x35, 0xBF, 0x2B, 0x3D, 0xBA, 0x14,
> 
> +  0xE5, 0x39, 0x9D, 0x9B, 0x64, 0x4A, 0x25, 0x29, 0xD5,
> 0x61, 0xDA, 0xFD, 0x51, 0x24, 0xB3, 0xE2,
> 
> +  0x4E, 0x00, 0x59, 0xDF, 0xB4, 0x96, 0x42, 0x59, 0xA4,
> 0xBC, 0xA7, 0x64, 0x8F, 0x3A, 0x17, 0x33,
> 
> +  0x55, 0xA3, 0x78, 0x30, 0x76, 0x30, 0x0E, 0x06, 0x03,
> 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04,
> 
> +  0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03,
> 0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D,
> 
> +  0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
> 0x4C, 0x09, 0x15, 0x01, 0x30, 0x0C, 0x06,
> 
> +  0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x02,
> 0x30, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55,
> 
> +  0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x63,
> 0x69, 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42,
> 
> +  0xEA, 0x55, 0x95, 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2,
> 0xA9, 0x2D, 0x2F, 0x30, 0x1D, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xD6, 0x4A,
> 0xF8, 0x77, 0x21, 0x34, 0xEC, 0xC0, 0xAE,
> 
> +  0x4D, 0x8F, 0x17, 0x86, 0xFF, 0xEA, 0xE3, 0x83, 0x42,
> 0x32, 0x83, 0x30, 0x0A, 0x06, 0x08, 0x2A,
> 
> +  0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x49,
> 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x9A,
> 
> +  0xAB, 0xE3, 0x6F, 0xD7, 0xB3, 0x0F, 0x83, 0x8A, 0xA1,
> 0x64, 0x70, 0xC1, 0xAC, 0x54, 0xE2, 0x59,
> 
> +  0x7C, 0x8B, 0x11, 0x8F, 0x76, 0xB1, 0x9C, 0x5F, 0xDA,
> 0x7D, 0x04, 0x3C, 0x73, 0xB5, 0xCF, 0x02,
> 
> +  0x21, 0x00, 0xB3, 0x31, 0xC1, 0x48, 0x3C, 0xEE, 0xA1,
> 0x6D, 0xA9, 0xF7, 0xF5, 0x9F, 0xD3, 0x6F,
> 
> +  0x7D, 0x6F, 0xAB, 0x76, 0x12, 0xEE, 0x01, 0x4D, 0xFC,
> 0xE6, 0x87, 0xEA, 0xAB, 0x09, 0x98, 0xD8,
> 
> +  0x97, 0x6F, 0x30, 0x82, 0x01, 0xF5, 0x30, 0x82, 0x01,
> 0x58, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02,
> 
> +  0x10, 0x4D, 0x88, 0xBF, 0x04, 0xDF, 0x10, 0x57, 0xBA,
> 0x43, 0x53, 0x6C, 0xFD, 0xA5, 0x90, 0xA7,
> 
> +  0x6F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 0x3D, 0x04, 0x03, 0x02, 0x30, 0x28, 0x31,
> 
> +  0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63,
> 
> +  0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D,
> 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67,
> 
> +  0x6E, 0x65, 0x72, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E,
> 0x17, 0x0D, 0x31, 0x38, 0x30, 0x31, 0x31,
> 
> +  0x36, 0x32, 0x33, 0x32, 0x31, 0x31, 0x33, 0x5A, 0x17,
> 0x0D, 0x33, 0x38, 0x30, 0x31, 0x31, 0x36,
> 
> +  0x32, 0x33, 0x33, 0x31, 0x31, 0x33, 0x5A, 0x30, 0x26,
> 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55,
> 
> +  0x04, 0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61,
> 0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46,
> 
> +  0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69,
> 0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30,
> 
> +  0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE,
> 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86,
> 
> +  0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00,
> 0x04, 0x0E, 0x58, 0xA3, 0xDB, 0xD3, 0x9C,
> 
> +  0x21, 0xFC, 0x63, 0x6F, 0xBD, 0xB9, 0xA7, 0x8A, 0xB3,
> 0xBF, 0x40, 0x87, 0x43, 0x06, 0x53, 0x91,
> 
> +  0x54, 0x31, 0x11, 0x0D, 0x3B, 0x50, 0x32, 0xEA, 0x11,
> 0xA3, 0x3D, 0x77, 0x08, 0x9E, 0xBC, 0x06,
> 
> +  0x5C, 0x21, 0x48, 0x9D, 0x9B, 0x7C, 0x45, 0xFD, 0x4B,
> 0xD7, 0x0C, 0x04, 0xD4, 0xE0, 0x0C, 0xB7,
> 
> +  0x6C, 0xBF, 0x22, 0xE1, 0x00, 0x99, 0x75, 0x39, 0x27,
> 0x59, 0xA3, 0x66, 0x30, 0x64, 0x30, 0x0E,
> 
> +  0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04,
> 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x12,
> 
> +  0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04,
> 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02,
> 
> +  0x01, 0x00, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23,
> 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x6D,
> 
> +  0x8B, 0x24, 0xBF, 0x20, 0x9D, 0x54, 0xAF, 0x04, 0x5B,
> 0x84, 0x91, 0x96, 0xAE, 0x99, 0xC1, 0x23,
> 
> +  0x1C, 0x0E, 0xAC, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D,
> 0x0E, 0x04, 0x16, 0x04, 0x14, 0x63, 0x69,
> 
> +  0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95,
> 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9,
> 
> +  0x2D, 0x2F, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48,
> 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81,
> 
> +  0x8A, 0x00, 0x30, 0x81, 0x86, 0x02, 0x41, 0x2A, 0xD4,
> 0xFC, 0x35, 0x28, 0x73, 0x9F, 0xB3, 0x8A,
> 
> +  0xE3, 0x13, 0x7F, 0xCA, 0x36, 0x88, 0x1E, 0xD0, 0x95,
> 0xDC, 0xE9, 0x8A, 0x9D, 0xC0, 0x27, 0x8C,
> 
> +  0xD8, 0x57, 0x57, 0x5F, 0xDC, 0x13, 0x53, 0x68, 0xED,
> 0x2F, 0x4D, 0x6A, 0x77, 0xA2, 0x55, 0x48,
> 
> +  0xCB, 0x24, 0x55, 0x3A, 0x30, 0x32, 0xE5, 0x5C, 0xDF,
> 0x96, 0xF1, 0x15, 0xD4, 0xE7, 0xCD, 0x6A,
> 
> +  0x26, 0xBD, 0x7B, 0x92, 0x50, 0x74, 0xE4, 0x56, 0x02,
> 0x41, 0x46, 0x33, 0x61, 0x30, 0xFF, 0xA8,
> 
> +  0x53, 0x31, 0x38, 0xCA, 0x6B, 0x77, 0x88, 0x36, 0x9A,
> 0x0B, 0x57, 0xC3, 0xD1, 0xB2, 0xA7, 0x40,
> 
> +  0x53, 0x6A, 0xD1, 0x6C, 0x8A, 0x8B, 0x3C, 0x29, 0xC1,
> 0x2B, 0x82, 0x61, 0x2F, 0x1A, 0x9F, 0x2C,
> 
> +  0x9A, 0x81, 0xD0, 0x2B, 0x3E, 0x0D, 0x99, 0xB7, 0xD4,
> 0x7E, 0xA7, 0xEA, 0x0C, 0x8E, 0x13, 0x0E,
> 
> +  0x53, 0x65, 0x48, 0x17, 0xE5, 0xFA, 0x91, 0x79, 0x98,
> 0xC7, 0xA1, 0x31, 0x81, 0xA6, 0x30, 0x81,
> 
> +  0xA3, 0x02, 0x01, 0x01, 0x30, 0x3A, 0x30, 0x26, 0x31,
> 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63,
> 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69,
> 
> +  0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67,
> 0x6E, 0x65, 0x72, 0x43, 0x41, 0x02, 0x10,
> 
> +  0x16, 0x2F, 0xD8, 0x2B, 0x8A, 0x98, 0x6A, 0x8A, 0x43,
> 0xC2, 0x22, 0xA5, 0x47, 0xA1, 0x18, 0xDD,
> 
> +  0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65,
> 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
> 
> +  0x0B, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02,
> 0x01, 0x05, 0x00, 0x04, 0x46, 0x30, 0x44,
> 
> +  0x02, 0x20, 0x40, 0xD4, 0xD4, 0xAF, 0x89, 0xFA, 0x83,
> 0x44, 0x7B, 0x59, 0xB4, 0x2B, 0x99, 0xF0,
> 
> +  0xD4, 0xB0, 0x75, 0x2E, 0x56, 0xAA, 0x0A, 0xDA, 0xCC,
> 0x82, 0xD5, 0xBC, 0x8D, 0xC4, 0x00, 0xF6,
> 
> +  0x46, 0xA4, 0x02, 0x20, 0x6F, 0xA7, 0xE1, 0x32, 0xB2,
> 0xF2, 0x5A, 0x69, 0xC5, 0x45, 0xB6, 0x35,
> 
> +  0x04, 0x05, 0x9B, 0xAC, 0x44, 0xB4, 0xA0, 0xE1, 0x25,
> 0x92, 0xE8, 0x3E, 0x8F, 0x85, 0xA3, 0xBE,
> 
> +  0x34, 0xFE, 0x78, 0x31,
> 
> +};
> 
> +
> 
> +//
> 
> +// This is the
> TestSignedWithMultipleEKUsInCert.bin.Signature.p7b
> signature in
> 
> +// byte array format.  It has two EKU's in it:
> 
> +// "1.3.6.1.4.1.311.76.9.21.1"
> 
> +// "1.3.6.1.4.1.311.76.9.21.2"
> 
> +//
> 
> +CONST UINT8 TestSignedWithMultipleEKUsInCert[] =
> 
> +{
> 
> +  0x30, 0x82, 0x06, 0x2C, 0x02, 0x01, 0x01, 0x31, 0x0F,
> 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
> 
> +  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
> 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
> 
> +  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x04, 0x9E,
> 0x30, 0x82, 0x01, 0xF5, 0x30, 0x82, 0x01,
> 
> +  0x58, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x4D,
> 0x88, 0xBF, 0x04, 0xDF, 0x10, 0x57, 0xBA,
> 
> +  0x43, 0x53, 0x6C, 0xFD, 0xA5, 0x90, 0xA7, 0x6F, 0x30,
> 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x04, 0x03, 0x02, 0x30, 0x28, 0x31, 0x26, 0x30,
> 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 
> +  0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54,
> 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D,
> 
> +  0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65,
> 0x72, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E,
> 
> +  0x17, 0x0D, 0x31, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32,
> 0x33, 0x32, 0x31, 0x31, 0x33, 0x5A, 0x17,
> 
> +  0x0D, 0x33, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, 0x33,
> 0x33, 0x31, 0x31, 0x33, 0x5A, 0x30, 0x26,
> 
> +  0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03,
> 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61,
> 
> +  0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72,
> 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69,
> 
> +  0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x59, 0x30,
> 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00,
> 
> +  0x04, 0x0E, 0x58, 0xA3, 0xDB, 0xD3, 0x9C, 0x21, 0xFC,
> 0x63, 0x6F, 0xBD, 0xB9, 0xA7, 0x8A, 0xB3,
> 
> +  0xBF, 0x40, 0x87, 0x43, 0x06, 0x53, 0x91, 0x54, 0x31,
> 0x11, 0x0D, 0x3B, 0x50, 0x32, 0xEA, 0x11,
> 
> +  0xA3, 0x3D, 0x77, 0x08, 0x9E, 0xBC, 0x06, 0x5C, 0x21,
> 0x48, 0x9D, 0x9B, 0x7C, 0x45, 0xFD, 0x4B,
> 
> +  0xD7, 0x0C, 0x04, 0xD4, 0xE0, 0x0C, 0xB7, 0x6C, 0xBF,
> 0x22, 0xE1, 0x00, 0x99, 0x75, 0x39, 0x27,
> 
> +  0x59, 0xA3, 0x66, 0x30, 0x64, 0x30, 0x0E, 0x06, 0x03,
> 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04,
> 
> +  0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x12, 0x06, 0x03,
> 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04,
> 
> +  0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00,
> 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23,
> 
> +  0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x6D, 0x8B, 0x24,
> 0xBF, 0x20, 0x9D, 0x54, 0xAF, 0x04, 0x5B,
> 
> +  0x84, 0x91, 0x96, 0xAE, 0x99, 0xC1, 0x23, 0x1C, 0x0E,
> 0xAC, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D,
> 
> +  0x0E, 0x04, 0x16, 0x04, 0x14, 0x63, 0x69, 0x95, 0xE3,
> 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95,
> 
> +  0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, 0x2D, 0x2F,
> 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48,
> 
> +  0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8A, 0x00,
> 0x30, 0x81, 0x86, 0x02, 0x41, 0x2A, 0xD4,
> 
> +  0xFC, 0x35, 0x28, 0x73, 0x9F, 0xB3, 0x8A, 0xE3, 0x13,
> 0x7F, 0xCA, 0x36, 0x88, 0x1E, 0xD0, 0x95,
> 
> +  0xDC, 0xE9, 0x8A, 0x9D, 0xC0, 0x27, 0x8C, 0xD8, 0x57,
> 0x57, 0x5F, 0xDC, 0x13, 0x53, 0x68, 0xED,
> 
> +  0x2F, 0x4D, 0x6A, 0x77, 0xA2, 0x55, 0x48, 0xCB, 0x24,
> 0x55, 0x3A, 0x30, 0x32, 0xE5, 0x5C, 0xDF,
> 
> +  0x96, 0xF1, 0x15, 0xD4, 0xE7, 0xCD, 0x6A, 0x26, 0xBD,
> 0x7B, 0x92, 0x50, 0x74, 0xE4, 0x56, 0x02,
> 
> +  0x41, 0x46, 0x33, 0x61, 0x30, 0xFF, 0xA8, 0x53, 0x31,
> 0x38, 0xCA, 0x6B, 0x77, 0x88, 0x36, 0x9A,
> 
> +  0x0B, 0x57, 0xC3, 0xD1, 0xB2, 0xA7, 0x40, 0x53, 0x6A,
> 0xD1, 0x6C, 0x8A, 0x8B, 0x3C, 0x29, 0xC1,
> 
> +  0x2B, 0x82, 0x61, 0x2F, 0x1A, 0x9F, 0x2C, 0x9A, 0x81,
> 0xD0, 0x2B, 0x3E, 0x0D, 0x99, 0xB7, 0xD4,
> 
> +  0x7E, 0xA7, 0xEA, 0x0C, 0x8E, 0x13, 0x0E, 0x53, 0x65,
> 0x48, 0x17, 0xE5, 0xFA, 0x91, 0x79, 0x98,
> 
> +  0xC7, 0xA1, 0x30, 0x82, 0x02, 0xA1, 0x30, 0x82, 0x02,
> 0x47, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02,
> 
> +  0x10, 0x29, 0xBB, 0x52, 0x25, 0xED, 0x34, 0xB7, 0xBA,
> 0x40, 0xF8, 0xC3, 0x14, 0xB5, 0xC8, 0x86,
> 
> +  0x9E, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 0x3D, 0x04, 0x03, 0x02, 0x30, 0x26, 0x31,
> 
> +  0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63,
> 
> +  0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D,
> 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67,
> 
> +  0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D,
> 0x31, 0x38, 0x30, 0x37, 0x32, 0x37, 0x32,
> 
> +  0x30, 0x33, 0x34, 0x31, 0x31, 0x5A, 0x17, 0x0D, 0x32,
> 0x33, 0x30, 0x37, 0x32, 0x37, 0x32, 0x30,
> 
> +  0x34, 0x34, 0x31, 0x31, 0x5A, 0x30, 0x3A, 0x31, 0x38,
> 0x30, 0x36, 0x06, 0x03, 0x55, 0x04, 0x03,
> 
> +  0x0C, 0x2F, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x72,
> 0x66, 0x61, 0x63, 0x65, 0x46, 0x69, 0x72,
> 
> +  0x6D, 0x77, 0x61, 0x72, 0x65, 0x4C, 0x65, 0x61, 0x66,
> 0x53, 0x69, 0x67, 0x6E, 0x65, 0x72, 0x4D,
> 
> +  0x75, 0x6C, 0x74, 0x69, 0x70, 0x6C, 0x65, 0x45, 0x4B,
> 0x55, 0x73, 0x49, 0x6E, 0x43, 0x65, 0x72,
> 
> +  0x74, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09,
> 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
> 
> +  0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00,
> 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01,
> 
> +  0x01, 0x00, 0xD0, 0x61, 0xA5, 0xCD, 0x49, 0x4B, 0x5C,
> 0x88, 0x89, 0x09, 0xCA, 0xE7, 0xEB, 0x58,
> 
> +  0x91, 0x8F, 0x59, 0xBE, 0xE8, 0x16, 0xC0, 0xEF, 0x75,
> 0xE5, 0x18, 0x88, 0xE8, 0xCE, 0xFA, 0xD2,
> 
> +  0xB0, 0x77, 0xC1, 0xD2, 0xF2, 0x9E, 0x65, 0xE8, 0xDB,
> 0x6B, 0x8C, 0x93, 0xE5, 0x39, 0x1D, 0xF9,
> 
> +  0x37, 0x2A, 0x52, 0x7F, 0xC3, 0x93, 0xD7, 0x9F, 0x03,
> 0x83, 0xBC, 0x6E, 0xC6, 0x83, 0x64, 0x15,
> 
> +  0x1A, 0x5C, 0x74, 0x41, 0x40, 0x21, 0xC9, 0x25, 0xF0,
> 0x14, 0xA3, 0x29, 0x97, 0x29, 0x8C, 0x5D,
> 
> +  0xED, 0xE9, 0x8D, 0x66, 0xCC, 0xD1, 0xD1, 0xE0, 0x08,
> 0x52, 0xA5, 0x93, 0x07, 0xCB, 0xF8, 0x95,
> 
> +  0x2C, 0x8D, 0x29, 0x84, 0x10, 0x5F, 0x57, 0x52, 0x10,
> 0x75, 0x35, 0x8A, 0x84, 0xE3, 0xAE, 0x10,
> 
> +  0x57, 0x29, 0xE9, 0xEB, 0x6E, 0xD2, 0xC7, 0x6D, 0x35,
> 0x43, 0x67, 0x82, 0xE3, 0x98, 0x29, 0x9C,
> 
> +  0x59, 0x77, 0xA0, 0x00, 0x27, 0xB2, 0x5D, 0xB9, 0x84,
> 0x31, 0x89, 0x2F, 0x77, 0xC5, 0xB9, 0x23,
> 
> +  0xE0, 0x14, 0x94, 0x6F, 0x33, 0xD5, 0x3B, 0x58, 0xFB,
> 0xD6, 0xB6, 0xE5, 0xD4, 0x09, 0x3D, 0xB2,
> 
> +  0xE7, 0x87, 0xC6, 0xEA, 0x73, 0x61, 0x6D, 0xDA, 0xFA,
> 0x95, 0x2B, 0x2B, 0x8A, 0xEC, 0x7E, 0x68,
> 
> +  0x0F, 0x98, 0x16, 0x08, 0xFF, 0xB2, 0xC1, 0xBF, 0xAB,
> 0x3D, 0xB0, 0xC2, 0xD5, 0x16, 0xAE, 0x71,
> 
> +  0x54, 0x48, 0xD1, 0x52, 0x72, 0xFD, 0x42, 0x09, 0x66,
> 0xAF, 0x50, 0xDE, 0x4C, 0x3C, 0x6A, 0xBC,
> 
> +  0x1F, 0xC5, 0x0A, 0xA0, 0xC5, 0x9A, 0xF1, 0xB2, 0xB2,
> 0x3F, 0x14, 0xE1, 0x93, 0x07, 0xF0, 0x00,
> 
> +  0x04, 0xEF, 0x16, 0x76, 0x18, 0x10, 0x65, 0x63, 0x42,
> 0x42, 0x12, 0xD0, 0x65, 0xF5, 0xA2, 0xCF,
> 
> +  0x90, 0xBE, 0x65, 0x57, 0x25, 0x8C, 0xAC, 0x5E, 0x05,
> 0x31, 0x91, 0x9E, 0x4D, 0x18, 0xBC, 0x15,
> 
> +  0x30, 0x7B, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x78,
> 0x30, 0x76, 0x30, 0x0E, 0x06, 0x03, 0x55,
> 
> +  0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02,
> 0x01, 0x86, 0x30, 0x24, 0x06, 0x03, 0x55,
> 
> +  0x1D, 0x25, 0x04, 0x1D, 0x30, 0x1B, 0x06, 0x0B, 0x2B,
> 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C,
> 
> +  0x09, 0x15, 0x01, 0x06, 0x0C, 0x2B, 0x06, 0x01, 0x04,
> 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15, 0x01,
> 
> +  0x02, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04,
> 0x18, 0x30, 0x16, 0x80, 0x14, 0x63, 0x69,
> 
> +  0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95,
> 0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9,
> 
> +  0x2D, 0x2F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E,
> 0x04, 0x16, 0x04, 0x14, 0xC0, 0xDC, 0xCB,
> 
> +  0x76, 0x52, 0x84, 0x91, 0xF5, 0x37, 0x0D, 0x85, 0xB6,
> 0x45, 0x23, 0xFA, 0xA0, 0xAD, 0xC1, 0x1D,
> 
> +  0x92, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 0x3D, 0x04, 0x03, 0x02, 0x03, 0x48, 0x00,
> 
> +  0x30, 0x45, 0x02, 0x21, 0x00, 0xF4, 0xB0, 0x8A, 0x91,
> 0x96, 0x61, 0xDF, 0xC3, 0x54, 0xA5, 0xB3,
> 
> +  0x1A, 0x3C, 0x28, 0x06, 0xC0, 0xA1, 0xF5, 0x72, 0xD1,
> 0x02, 0x5C, 0x69, 0xB6, 0x6C, 0xA8, 0xDC,
> 
> +  0x6B, 0x78, 0xD9, 0x0C, 0x9A, 0x02, 0x20, 0x37, 0x2C,
> 0x61, 0x9E, 0x6E, 0x5F, 0xC6, 0xFA, 0x92,
> 
> +  0x52, 0xB0, 0x4E, 0x52, 0xC7, 0xF1, 0xE9, 0x0F, 0xB6,
> 0xD5, 0x08, 0x10, 0x41, 0x3A, 0x61, 0xFD,
> 
> +  0xC5, 0x70, 0x87, 0xBB, 0x49, 0x82, 0xEA, 0x31, 0x82,
> 0x01, 0x65, 0x30, 0x82, 0x01, 0x61, 0x02,
> 
> +  0x01, 0x01, 0x30, 0x3A, 0x30, 0x26, 0x31, 0x24, 0x30,
> 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 
> +  0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54,
> 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D,
> 
> +  0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65,
> 0x72, 0x43, 0x41, 0x02, 0x10, 0x29, 0xBB,
> 
> +  0x52, 0x25, 0xED, 0x34, 0xB7, 0xBA, 0x40, 0xF8, 0xC3,
> 0x14, 0xB5, 0xC8, 0x86, 0x9E, 0x30, 0x0D,
> 
> +  0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
> 0x02, 0x01, 0x05, 0x00, 0x30, 0x0D, 0x06,
> 
> +  0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01,
> 0x01, 0x05, 0x00, 0x04, 0x82, 0x01, 0x00,
> 
> +  0xBB, 0x51, 0xDD, 0x8F, 0xB4, 0x99, 0x37, 0x13, 0x94,
> 0x6F, 0x09, 0x05, 0xBA, 0x5B, 0x8D, 0x86,
> 
> +  0x9A, 0xB0, 0x51, 0xEB, 0x6B, 0x10, 0xD7, 0xD1, 0x95,
> 0x4A, 0x4D, 0x23, 0xA3, 0x37, 0x82, 0xDF,
> 
> +  0x1F, 0x24, 0xE4, 0x62, 0x4F, 0xD4, 0x52, 0x73, 0xF8,
> 0x39, 0x2B, 0x46, 0xF4, 0x61, 0xCE, 0xF1,
> 
> +  0x64, 0xD7, 0x60, 0xC9, 0xCC, 0xCA, 0x8D, 0x94, 0xA5,
> 0x67, 0x68, 0x2B, 0xE4, 0xB0, 0xD7, 0x64,
> 
> +  0xC8, 0xF3, 0x9C, 0x98, 0x2C, 0x0A, 0x69, 0x56, 0xD6,
> 0x59, 0xDF, 0x4D, 0x38, 0xE7, 0xD4, 0x63,
> 
> +  0x2B, 0x74, 0xA1, 0xA3, 0xF9, 0xE1, 0x1A, 0x12, 0x2B,
> 0x04, 0x46, 0x11, 0xA8, 0x26, 0x00, 0x15,
> 
> +  0x4F, 0x14, 0x7F, 0xB1, 0xB4, 0x25, 0x0C, 0x87, 0xB0,
> 0x56, 0x8C, 0xBE, 0x0D, 0xFA, 0x66, 0x6F,
> 
> +  0x8A, 0xCB, 0x0A, 0x88, 0x3B, 0xF6, 0x52, 0xCD, 0xBB,
> 0xA2, 0xA9, 0xAD, 0xAD, 0x09, 0x0D, 0xDA,
> 
> +  0x79, 0x8A, 0xAE, 0xE5, 0x9D, 0xCE, 0x5C, 0x60, 0x99,
> 0x67, 0x26, 0xC4, 0xAF, 0xD4, 0x01, 0xB1,
> 
> +  0x6D, 0xD1, 0x8C, 0x4D, 0x1D, 0xBD, 0xAB, 0x42, 0x2C,
> 0xF2, 0xD8, 0x07, 0x3F, 0xDC, 0x5E, 0x68,
> 
> +  0x4C, 0xD9, 0xDB, 0xC0, 0x93, 0xBB, 0x8E, 0xA0, 0xA2,
> 0x09, 0x5F, 0x03, 0x58, 0x48, 0x54, 0xF6,
> 
> +  0xF0, 0xDA, 0x7A, 0x7F, 0xC4, 0xD2, 0x9F, 0x64, 0xF5,
> 0x85, 0x86, 0x48, 0xDF, 0x7F, 0x86, 0x14,
> 
> +  0x7C, 0x62, 0x77, 0x1D, 0x22, 0xE5, 0x34, 0x42, 0xE4,
> 0x49, 0x38, 0xB4, 0xE4, 0x22, 0xFB, 0x5F,
> 
> +  0xB5, 0xEA, 0xBA, 0x90, 0x51, 0xC0, 0xC6, 0x94, 0x09,
> 0xE4, 0xB7, 0x15, 0x3F, 0x07, 0x23, 0xE8,
> 
> +  0x46, 0x93, 0xA5, 0x7B, 0x7A, 0x91, 0xDA, 0x8E, 0x7C,
> 0xAF, 0xBD, 0x41, 0xB9, 0xDE, 0x85, 0x04,
> 
> +  0xBC, 0x08, 0x6C, 0x08, 0x56, 0x16, 0xDB, 0xB5, 0xEE,
> 0x65, 0x76, 0xE9, 0x78, 0xD3, 0xDD, 0xD8,
> 
> +
> 
> +};
> 
> +
> 
> +//
> 
> +// This is the TestSignedWithProductId10001.bin.p7b in
> byte array format.
> 
> +// It has two EKU's in it:  (Product ID is 10001)
> 
> +// "1.3.6.1.4.1.311.76.9.21.1"
> 
> +// "1.3.6.1.4.1.311.76.9.21.1.10001"
> 
> +//
> 
> +CONST UINT8 TestSignedWithProductId10001[] =
> 
> +{
> 
> +  0x30, 0x82, 0x06, 0x1E, 0x02, 0x01, 0x01, 0x31, 0x0F,
> 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
> 
> +  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
> 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
> 
> +  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x04, 0x90,
> 0x30, 0x82, 0x01, 0xF5, 0x30, 0x82, 0x01,
> 
> +  0x58, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x4D,
> 0x88, 0xBF, 0x04, 0xDF, 0x10, 0x57, 0xBA,
> 
> +  0x43, 0x53, 0x6C, 0xFD, 0xA5, 0x90, 0xA7, 0x6F, 0x30,
> 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x04, 0x03, 0x02, 0x30, 0x28, 0x31, 0x26, 0x30,
> 0x24, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 
> +  0x1D, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54,
> 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D,
> 
> +  0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67, 0x6E, 0x65,
> 0x72, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E,
> 
> +  0x17, 0x0D, 0x31, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32,
> 0x33, 0x32, 0x31, 0x31, 0x33, 0x5A, 0x17,
> 
> +  0x0D, 0x33, 0x38, 0x30, 0x31, 0x31, 0x36, 0x32, 0x33,
> 0x33, 0x31, 0x31, 0x33, 0x5A, 0x30, 0x26,
> 
> +  0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03,
> 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61,
> 
> +  0x63, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72,
> 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69,
> 
> +  0x67, 0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x59, 0x30,
> 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00,
> 
> +  0x04, 0x0E, 0x58, 0xA3, 0xDB, 0xD3, 0x9C, 0x21, 0xFC,
> 0x63, 0x6F, 0xBD, 0xB9, 0xA7, 0x8A, 0xB3,
> 
> +  0xBF, 0x40, 0x87, 0x43, 0x06, 0x53, 0x91, 0x54, 0x31,
> 0x11, 0x0D, 0x3B, 0x50, 0x32, 0xEA, 0x11,
> 
> +  0xA3, 0x3D, 0x77, 0x08, 0x9E, 0xBC, 0x06, 0x5C, 0x21,
> 0x48, 0x9D, 0x9B, 0x7C, 0x45, 0xFD, 0x4B,
> 
> +  0xD7, 0x0C, 0x04, 0xD4, 0xE0, 0x0C, 0xB7, 0x6C, 0xBF,
> 0x22, 0xE1, 0x00, 0x99, 0x75, 0x39, 0x27,
> 
> +  0x59, 0xA3, 0x66, 0x30, 0x64, 0x30, 0x0E, 0x06, 0x03,
> 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04,
> 
> +  0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x12, 0x06, 0x03,
> 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04,
> 
> +  0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00,
> 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23,
> 
> +  0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x6D, 0x8B, 0x24,
> 0xBF, 0x20, 0x9D, 0x54, 0xAF, 0x04, 0x5B,
> 
> +  0x84, 0x91, 0x96, 0xAE, 0x99, 0xC1, 0x23, 0x1C, 0x0E,
> 0xAC, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D,
> 
> +  0x0E, 0x04, 0x16, 0x04, 0x14, 0x63, 0x69, 0x95, 0xE3,
> 0xDD, 0xF4, 0xF8, 0x42, 0xEA, 0x55, 0x95,
> 
> +  0x54, 0x07, 0xC4, 0xC5, 0x2A, 0xD2, 0xA9, 0x2D, 0x2F,
> 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48,
> 
> +  0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8A, 0x00,
> 0x30, 0x81, 0x86, 0x02, 0x41, 0x2A, 0xD4,
> 
> +  0xFC, 0x35, 0x28, 0x73, 0x9F, 0xB3, 0x8A, 0xE3, 0x13,
> 0x7F, 0xCA, 0x36, 0x88, 0x1E, 0xD0, 0x95,
> 
> +  0xDC, 0xE9, 0x8A, 0x9D, 0xC0, 0x27, 0x8C, 0xD8, 0x57,
> 0x57, 0x5F, 0xDC, 0x13, 0x53, 0x68, 0xED,
> 
> +  0x2F, 0x4D, 0x6A, 0x77, 0xA2, 0x55, 0x48, 0xCB, 0x24,
> 0x55, 0x3A, 0x30, 0x32, 0xE5, 0x5C, 0xDF,
> 
> +  0x96, 0xF1, 0x15, 0xD4, 0xE7, 0xCD, 0x6A, 0x26, 0xBD,
> 0x7B, 0x92, 0x50, 0x74, 0xE4, 0x56, 0x02,
> 
> +  0x41, 0x46, 0x33, 0x61, 0x30, 0xFF, 0xA8, 0x53, 0x31,
> 0x38, 0xCA, 0x6B, 0x77, 0x88, 0x36, 0x9A,
> 
> +  0x0B, 0x57, 0xC3, 0xD1, 0xB2, 0xA7, 0x40, 0x53, 0x6A,
> 0xD1, 0x6C, 0x8A, 0x8B, 0x3C, 0x29, 0xC1,
> 
> +  0x2B, 0x82, 0x61, 0x2F, 0x1A, 0x9F, 0x2C, 0x9A, 0x81,
> 0xD0, 0x2B, 0x3E, 0x0D, 0x99, 0xB7, 0xD4,
> 
> +  0x7E, 0xA7, 0xEA, 0x0C, 0x8E, 0x13, 0x0E, 0x53, 0x65,
> 0x48, 0x17, 0xE5, 0xFA, 0x91, 0x79, 0x98,
> 
> +  0xC7, 0xA1, 0x30, 0x82, 0x02, 0x93, 0x30, 0x82, 0x02,
> 0x39, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02,
> 
> +  0x10, 0x1F, 0x65, 0xF1, 0x29, 0x3B, 0x89, 0x6A, 0xBF,
> 0x43, 0xAF, 0xC7, 0x30, 0x36, 0xD1, 0x0D,
> 
> +  0x2B, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 0x3D, 0x04, 0x03, 0x02, 0x30, 0x26, 0x31,
> 
> +  0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63,
> 
> +  0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72, 0x6D,
> 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67,
> 
> +  0x6E, 0x65, 0x72, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D,
> 0x31, 0x38, 0x30, 0x38, 0x30, 0x32, 0x31,
> 
> +  0x36, 0x34, 0x32, 0x32, 0x33, 0x5A, 0x17, 0x0D, 0x32,
> 0x33, 0x30, 0x38, 0x30, 0x32, 0x31, 0x36,
> 
> +  0x35, 0x32, 0x32, 0x33, 0x5A, 0x30, 0x2B, 0x31, 0x29,
> 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x03,
> 
> +  0x0C, 0x20, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x72,
> 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69,
> 
> +  0x67, 0x6E, 0x65, 0x72, 0x50, 0x72, 0x6F, 0x64, 0x75,
> 0x63, 0x74, 0x49, 0x44, 0x31, 0x30, 0x30,
> 
> +  0x30, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06,
> 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
> 
> +  0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F,
> 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82,
> 
> +  0x01, 0x01, 0x00, 0x8C, 0x26, 0x35, 0xBC, 0x18, 0x06,
> 0x44, 0x65, 0xF6, 0x55, 0x29, 0x78, 0x26,
> 
> +  0xCA, 0x57, 0xD0, 0x4C, 0x31, 0x84, 0x5B, 0x64, 0xDE,
> 0x8E, 0x34, 0x84, 0x45, 0x12, 0xE8, 0x5A,
> 
> +  0x86, 0x4B, 0x5A, 0x61, 0x4C, 0xD8, 0xE2, 0x7D, 0x3B,
> 0xBD, 0x25, 0x58, 0x30, 0x1D, 0x5E, 0x65,
> 
> +  0x50, 0xC3, 0x07, 0xF2, 0x50, 0xE1, 0x48, 0x2A, 0xD9,
> 0x70, 0x5F, 0xF3, 0x2B, 0xF1, 0x1F, 0x21,
> 
> +  0x06, 0x62, 0x81, 0xE9, 0x8E, 0xDA, 0xDC, 0x69, 0xA3,
> 0x6E, 0x2F, 0xD2, 0x3A, 0x79, 0x01, 0xAF,
> 
> +  0xA1, 0x2A, 0x28, 0xDD, 0x32, 0x4E, 0xCE, 0x40, 0xB8,
> 0x41, 0xA4, 0x7D, 0x3D, 0x70, 0x3F, 0xC4,
> 
> +  0xDA, 0x61, 0x18, 0xBF, 0xFC, 0xAB, 0x16, 0xE3, 0x65,
> 0x3F, 0x6D, 0x76, 0x37, 0xAD, 0x1F, 0x11,
> 
> +  0x05, 0x0F, 0xC2, 0x56, 0xD1, 0x45, 0xBD, 0x25, 0xCC,
> 0x19, 0xC4, 0x2A, 0x03, 0xED, 0x3B, 0x05,
> 
> +  0xA7, 0x87, 0x30, 0xE6, 0x84, 0x11, 0x88, 0xD0, 0x91,
> 0x4E, 0x52, 0xB5, 0x97, 0xDF, 0x57, 0xEF,
> 
> +  0x5E, 0x72, 0x68, 0x49, 0x85, 0xC8, 0x7F, 0xA7, 0x5F,
> 0x7B, 0xE7, 0xCE, 0xA1, 0x53, 0xBA, 0xF8,
> 
> +  0xA9, 0xDF, 0x8C, 0x8C, 0x72, 0xD2, 0xA9, 0x7A, 0xF5,
> 0x07, 0x4A, 0x75, 0x1A, 0x0F, 0x50, 0x9E,
> 
> +  0xEA, 0x4C, 0xFC, 0xC7, 0x74, 0xE2, 0x4D, 0xD1, 0x01,
> 0xC4, 0xB6, 0xCA, 0xA5, 0xCC, 0x23, 0xFA,
> 
> +  0xDE, 0xF2, 0x9C, 0x8B, 0xA6, 0x32, 0x8D, 0xED, 0x97,
> 0xCC, 0x50, 0xB0, 0xB6, 0x1C, 0x89, 0x64,
> 
> +  0xFC, 0xD7, 0xD0, 0x19, 0x01, 0x50, 0xD9, 0xBC, 0x78,
> 0xB1, 0x76, 0x6D, 0x01, 0xF8, 0xEC, 0x68,
> 
> +  0x97, 0x20, 0x32, 0xD0, 0x57, 0x76, 0x93, 0x73, 0xC9,
> 0x2B, 0x68, 0x9D, 0x5E, 0xE1, 0x70, 0xDD,
> 
> +  0x6F, 0x3A, 0x09, 0x20, 0x63, 0xE9, 0xD9, 0x30, 0x05,
> 0x14, 0x4A, 0x76, 0xA7, 0x3E, 0x61, 0xCD,
> 
> +  0x2F, 0x6D, 0xE3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3,
> 0x79, 0x30, 0x77, 0x30, 0x0E, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03,
> 0x02, 0x01, 0x86, 0x30, 0x25, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x25, 0x04, 0x1E, 0x30, 0x1C, 0x06, 0x0B,
> 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
> 
> +  0x4C, 0x09, 0x15, 0x01, 0x06, 0x0D, 0x2B, 0x06, 0x01,
> 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09, 0x15,
> 
> +  0x01, 0xCE, 0x11, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D,
> 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14,
> 
> +  0x63, 0x69, 0x95, 0xE3, 0xDD, 0xF4, 0xF8, 0x42, 0xEA,
> 0x55, 0x95, 0x54, 0x07, 0xC4, 0xC5, 0x2A,
> 
> +  0xD2, 0xA9, 0x2D, 0x2F, 0x30, 0x1D, 0x06, 0x03, 0x55,
> 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x09,
> 
> +  0x10, 0xEE, 0x7B, 0xB0, 0x56, 0xB0, 0xCE, 0x42, 0x83,
> 0x84, 0x90, 0x70, 0xAF, 0x8D, 0x58, 0x1B,
> 
> +  0x77, 0x43, 0x0E, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86,
> 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03,
> 
> +  0x48, 0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0xEE, 0x2A,
> 0x00, 0x7E, 0xC6, 0x4E, 0x6F, 0x22, 0xCC,
> 
> +  0x16, 0xEA, 0xAC, 0x90, 0x3D, 0xD7, 0x6E, 0xAA, 0xBF,
> 0x7E, 0xC7, 0x45, 0x3F, 0x36, 0x22, 0x81,
> 
> +  0xC6, 0x38, 0xD3, 0x1E, 0xDF, 0x5F, 0x2C, 0x02, 0x20,
> 0x21, 0xEC, 0xCF, 0x78, 0x1D, 0xDB, 0x4F,
> 
> +  0x50, 0xE8, 0xD6, 0x07, 0xB0, 0x6A, 0xE9, 0x1E, 0xBF,
> 0x9C, 0xE8, 0xB9, 0xF7, 0xC6, 0xEA, 0x04,
> 
> +  0x7B, 0x5E, 0xD8, 0x67, 0xAB, 0xD2, 0xDE, 0x77, 0xB9,
> 0x31, 0x82, 0x01, 0x65, 0x30, 0x82, 0x01,
> 
> +  0x61, 0x02, 0x01, 0x01, 0x30, 0x3A, 0x30, 0x26, 0x31,
> 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x03, 0x0C, 0x1B, 0x53, 0x75, 0x72, 0x66, 0x61, 0x63,
> 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69,
> 
> +  0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x53, 0x69, 0x67,
> 0x6E, 0x65, 0x72, 0x43, 0x41, 0x02, 0x10,
> 
> +  0x1F, 0x65, 0xF1, 0x29, 0x3B, 0x89, 0x6A, 0xBF, 0x43,
> 0xAF, 0xC7, 0x30, 0x36, 0xD1, 0x0D, 0x2B,
> 
> +  0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65,
> 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
> 
> +  0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
> 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82,
> 
> +  0x01, 0x00, 0x1F, 0x7F, 0x30, 0xDC, 0xD4, 0x12, 0x9D,
> 0x0B, 0x71, 0x30, 0x69, 0x91, 0xCC, 0x8A,
> 
> +  0xFB, 0xF6, 0x54, 0x14, 0x4C, 0x0B, 0x78, 0xCE, 0xD3,
> 0xC6, 0xCE, 0x3E, 0xAC, 0xCC, 0x0F, 0xCE,
> 
> +  0x3A, 0xFC, 0x63, 0x96, 0xD2, 0x7B, 0xDB, 0xF7, 0xE7,
> 0x6D, 0x64, 0x52, 0x5C, 0x5D, 0x19, 0xBF,
> 
> +  0xE3, 0x04, 0x71, 0x8A, 0xD1, 0x2A, 0xB6, 0x5A, 0x8C,
> 0xFC, 0xE2, 0x51, 0x27, 0x64, 0x9B, 0xA8,
> 
> +  0x84, 0x69, 0x60, 0x4E, 0x56, 0x83, 0x91, 0x4F, 0xEB,
> 0x5A, 0xB7, 0x73, 0xE1, 0xAC, 0x24, 0xD2,
> 
> +  0x60, 0xD8, 0x58, 0x21, 0x51, 0x7B, 0x87, 0x93, 0x5B,
> 0x5F, 0x91, 0x4B, 0x8C, 0xFE, 0xA5, 0x16,
> 
> +  0x2E, 0x33, 0x4D, 0xBB, 0x0C, 0x95, 0x5C, 0xC3, 0x9C,
> 0x3D, 0xBB, 0x58, 0x17, 0x39, 0x1E, 0x10,
> 
> +  0x47, 0xCD, 0xEE, 0xD3, 0xE7, 0x73, 0x44, 0x7D, 0x35,
> 0xD9, 0x9F, 0xC3, 0xAC, 0x11, 0x2E, 0x29,
> 
> +  0x54, 0x80, 0x8F, 0x19, 0xDC, 0xC3, 0x11, 0x3D, 0x75,
> 0xF0, 0x3B, 0x34, 0x63, 0xB1, 0x59, 0x1D,
> 
> +  0x4B, 0x66, 0xBE, 0xB8, 0xAC, 0x36, 0x71, 0x63, 0xD4,
> 0x41, 0xCF, 0x24, 0x2A, 0x3F, 0xC5, 0x25,
> 
> +  0xD2, 0x45, 0x9B, 0xD3, 0x77, 0xD8, 0xD8, 0x1A, 0xC6,
> 0xAE, 0xE3, 0xF5, 0xC5, 0xEB, 0xF3, 0x92,
> 
> +  0x27, 0x3C, 0x3F, 0x48, 0x96, 0xF2, 0xB4, 0x66, 0x0A,
> 0xFB, 0xBF, 0x76, 0xDC, 0x1E, 0xC5, 0xC6,
> 
> +  0x4D, 0xA1, 0x5C, 0x13, 0x22, 0xF8, 0x89, 0xE2, 0x15,
> 0x43, 0x84, 0xEF, 0xC8, 0x30, 0xE5, 0xF0,
> 
> +  0xBA, 0x51, 0x96, 0x3E, 0xF9, 0xCB, 0x41, 0xE6, 0x36,
> 0xD4, 0xE3, 0xDA, 0x71, 0xC8, 0x5E, 0x43,
> 
> +  0x7A, 0xBE, 0x8E, 0xC0, 0xA5, 0xEF, 0x66, 0xFD, 0x63,
> 0xD3, 0xF1, 0xBF, 0x66, 0x4F, 0x35, 0x24,
> 
> +  0x66, 0xC9, 0xCD, 0x1E, 0x3D, 0x71, 0x19, 0x84, 0x1A,
> 0x9D, 0xA5, 0x56, 0xF4, 0xF9, 0xE0, 0x88,
> 
> +  0x7C, 0x52,
> 
> +};
> 
> +
> 
> +//
> 
> +// This is TestSignEKUsWith1CertInSignature.bin.p7b in
> byte array format.
> 
> +// It has one EKU in it:
> 
> +// "1.3.6.1.4.1.311.76.9.21.1"
> 
> +//
> 
> +CONST UINT8 TestSignEKUsWith1CertInSignature[] =
> 
> +{
> 
> +  0x30, 0x82, 0x02, 0x7D, 0x02, 0x01, 0x01, 0x31, 0x0F,
> 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
> 
> +  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
> 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
> 
> +  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x01, 0xB2,
> 0x30, 0x82, 0x01, 0xAE, 0x30, 0x82, 0x01,
> 
> +  0x53, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3E,
> 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96,
> 
> +  0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30,
> 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30,
> 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 
> +  0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50,
> 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49,
> 
> +  0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30,
> 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38,
> 
> +  0x31, 0x35, 0x31, 0x37, 0x33, 0x35, 0x35, 0x30, 0x5A,
> 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31,
> 
> +  0x35, 0x31, 0x37, 0x34, 0x35, 0x35, 0x30, 0x5A, 0x30,
> 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x03, 0x0C, 0x18, 0x54, 0x65, 0x73, 0x74,
> 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73,
> 
> +  0x69, 0x6E, 0x67, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69,
> 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30,
> 
> +  0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02,
> 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xF6,
> 0xEA, 0x5E, 0x14, 0x20, 0x6D, 0x11, 0xC0,
> 
> +  0xFD, 0xF9, 0xB9, 0xB5, 0x8F, 0xBB, 0x3E, 0x8B, 0xE8,
> 0x21, 0x21, 0x3A, 0xC2, 0xBA, 0x37, 0x24,
> 
> +  0x61, 0x14, 0x7E, 0xA8, 0x86, 0x0A, 0x5C, 0xD3, 0x5F,
> 0xA8, 0xDC, 0x3A, 0x06, 0x30, 0x53, 0xFC,
> 
> +  0x85, 0xBC, 0x60, 0x5C, 0x28, 0x07, 0xCA, 0x12, 0x40,
> 0xE8, 0x97, 0x6A, 0x63, 0x30, 0xF7, 0x37,
> 
> +  0x25, 0x76, 0x4D, 0xA9, 0x1A, 0x8C, 0x36, 0xAA, 0xA3,
> 0x6A, 0x30, 0x68, 0x30, 0x0E, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03,
> 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B,
> 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
> 
> +  0x4C, 0x09, 0x15, 0x01, 0x30, 0x1F, 0x06, 0x03, 0x55,
> 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80,
> 
> +  0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B,
> 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C,
> 
> +  0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03,
> 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14,
> 
> +  0xE8, 0x47, 0x05, 0xA2, 0x59, 0xE9, 0x89, 0x81, 0xF4,
> 0xC8, 0x0D, 0x4C, 0x0A, 0xD3, 0xD4, 0xDE,
> 
> +  0x9F, 0xA6, 0xC7, 0x79, 0x30, 0x0A, 0x06, 0x08, 0x2A,
> 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02,
> 
> +  0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8C,
> 0x39, 0xC6, 0x6C, 0xD6, 0x8F, 0x20, 0xA5,
> 
> +  0x85, 0x97, 0x27, 0xF9, 0xB5, 0x26, 0xA2, 0xAB, 0xEC,
> 0x2E, 0x1B, 0x6F, 0x6F, 0x79, 0x9F, 0x8D,
> 
> +  0xCE, 0x9D, 0x12, 0x23, 0x5F, 0x04, 0xFA, 0xBE, 0x02,
> 0x21, 0x00, 0xC5, 0xD8, 0x49, 0xD1, 0x40,
> 
> +  0xE3, 0x2C, 0xDF, 0xC3, 0xD4, 0x11, 0xF9, 0x5E, 0x10,
> 0x8A, 0x3C, 0x4E, 0xA0, 0xD6, 0x6B, 0x8C,
> 
> +  0x0E, 0x7B, 0xF1, 0x2B, 0x20, 0x9C, 0x68, 0x53, 0x43,
> 0x4B, 0x35, 0x31, 0x81, 0xA3, 0x30, 0x81,
> 
> +  0xA0, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30, 0x22, 0x31,
> 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B,
> 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E,
> 
> +  0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43,
> 0x41, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB,
> 
> +  0x00, 0x35, 0xC8, 0x96, 0x41, 0xF4, 0xF6, 0x57, 0x16,
> 0xAD, 0x20, 0xCB, 0x30, 0x0D, 0x06, 0x09,
> 
> +  0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01,
> 0x05, 0x00, 0x30, 0x0B, 0x06, 0x07, 0x2A,
> 
> +  0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05, 0x00, 0x04,
> 0x47, 0x30, 0x45, 0x02, 0x21, 0x00, 0xB8,
> 
> +  0xCC, 0x0F, 0xD2, 0x50, 0x47, 0x3A, 0x11, 0x8D, 0xAE,
> 0x6C, 0xE9, 0x03, 0x64, 0xA7, 0x44, 0xE6,
> 
> +  0x0F, 0xF8, 0x6F, 0x7E, 0xE7, 0x61, 0x25, 0x8C, 0x67,
> 0xE8, 0xC2, 0xD6, 0x33, 0x91, 0x62, 0x02,
> 
> +  0x20, 0x78, 0xF8, 0x94, 0x0F, 0x46, 0xD2, 0xE2, 0x2B,
> 0x33, 0xAF, 0xBD, 0x38, 0xA4, 0x43, 0xA6,
> 
> +  0x6F, 0x8A, 0xBE, 0x26, 0xDC, 0xD0, 0x82, 0x01, 0x3D,
> 0x00, 0xF3, 0xC2, 0x07, 0x8A, 0xE8, 0xFD,
> 
> +  0x18,
> 
> +};
> 
> +
> 
> +//
> 
> +// This is TestSignEKUsWith2CertsInSignature.bin.p7b in
> byte array format.
> 
> +// It has one EKU in it:
> 
> +// "1.3.6.1.4.1.311.76.9.21.1"
> 
> +//
> 
> +CONST UINT8 TestSignEKUsWith2CertsInSignature[] =
> 
> +{
> 
> +  0x30, 0x82, 0x04, 0x61, 0x02, 0x01, 0x01, 0x31, 0x0F,
> 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
> 
> +  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
> 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
> 
> +  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x03, 0x96,
> 0x30, 0x82, 0x01, 0xAE, 0x30, 0x82, 0x01,
> 
> +  0x53, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3E,
> 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96,
> 
> +  0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30,
> 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30,
> 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 
> +  0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50,
> 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49,
> 
> +  0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30,
> 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38,
> 
> +  0x31, 0x35, 0x31, 0x37, 0x33, 0x35, 0x35, 0x30, 0x5A,
> 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31,
> 
> +  0x35, 0x31, 0x37, 0x34, 0x35, 0x35, 0x30, 0x5A, 0x30,
> 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x03, 0x0C, 0x18, 0x54, 0x65, 0x73, 0x74,
> 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73,
> 
> +  0x69, 0x6E, 0x67, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69,
> 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30,
> 
> +  0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02,
> 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xF6,
> 0xEA, 0x5E, 0x14, 0x20, 0x6D, 0x11, 0xC0,
> 
> +  0xFD, 0xF9, 0xB9, 0xB5, 0x8F, 0xBB, 0x3E, 0x8B, 0xE8,
> 0x21, 0x21, 0x3A, 0xC2, 0xBA, 0x37, 0x24,
> 
> +  0x61, 0x14, 0x7E, 0xA8, 0x86, 0x0A, 0x5C, 0xD3, 0x5F,
> 0xA8, 0xDC, 0x3A, 0x06, 0x30, 0x53, 0xFC,
> 
> +  0x85, 0xBC, 0x60, 0x5C, 0x28, 0x07, 0xCA, 0x12, 0x40,
> 0xE8, 0x97, 0x6A, 0x63, 0x30, 0xF7, 0x37,
> 
> +  0x25, 0x76, 0x4D, 0xA9, 0x1A, 0x8C, 0x36, 0xAA, 0xA3,
> 0x6A, 0x30, 0x68, 0x30, 0x0E, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03,
> 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B,
> 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
> 
> +  0x4C, 0x09, 0x15, 0x01, 0x30, 0x1F, 0x06, 0x03, 0x55,
> 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80,
> 
> +  0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B,
> 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C,
> 
> +  0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03,
> 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14,
> 
> +  0xE8, 0x47, 0x05, 0xA2, 0x59, 0xE9, 0x89, 0x81, 0xF4,
> 0xC8, 0x0D, 0x4C, 0x0A, 0xD3, 0xD4, 0xDE,
> 
> +  0x9F, 0xA6, 0xC7, 0x79, 0x30, 0x0A, 0x06, 0x08, 0x2A,
> 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02,
> 
> +  0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8C,
> 0x39, 0xC6, 0x6C, 0xD6, 0x8F, 0x20, 0xA5,
> 
> +  0x85, 0x97, 0x27, 0xF9, 0xB5, 0x26, 0xA2, 0xAB, 0xEC,
> 0x2E, 0x1B, 0x6F, 0x6F, 0x79, 0x9F, 0x8D,
> 
> +  0xCE, 0x9D, 0x12, 0x23, 0x5F, 0x04, 0xFA, 0xBE, 0x02,
> 0x21, 0x00, 0xC5, 0xD8, 0x49, 0xD1, 0x40,
> 
> +  0xE3, 0x2C, 0xDF, 0xC3, 0xD4, 0x11, 0xF9, 0x5E, 0x10,
> 0x8A, 0x3C, 0x4E, 0xA0, 0xD6, 0x6B, 0x8C,
> 
> +  0x0E, 0x7B, 0xF1, 0x2B, 0x20, 0x9C, 0x68, 0x53, 0x43,
> 0x4B, 0x35, 0x30, 0x82, 0x01, 0xE0, 0x30,
> 
> +  0x82, 0x01, 0x65, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02,
> 0x10, 0x79, 0x28, 0x1A, 0xE8, 0x7F, 0x21,
> 
> +  0x4F, 0xBB, 0x47, 0x2F, 0x74, 0x75, 0xE6, 0x98, 0x60,
> 0xD6, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86,
> 
> +  0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x21, 0x31,
> 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B,
> 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E,
> 
> +  0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41,
> 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30,
> 
> +  0x38, 0x31, 0x35, 0x31, 0x37, 0x33, 0x32, 0x35, 0x34,
> 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38,
> 
> +  0x31, 0x35, 0x31, 0x37, 0x34, 0x32, 0x35, 0x34, 0x5A,
> 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06,
> 
> +  0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73,
> 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72,
> 
> +  0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69,
> 0x6E, 0x67, 0x43, 0x41, 0x30, 0x59, 0x30,
> 
> +  0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02,
> 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x66,
> 0x41, 0xE6, 0x86, 0x7D, 0x5B, 0x96, 0x6C,
> 
> +  0x99, 0x2A, 0x82, 0x53, 0x58, 0xA3, 0x6F, 0x59, 0xFC,
> 0x1C, 0x9F, 0xEB, 0xBE, 0x9D, 0x53, 0xBA,
> 
> +  0x50, 0x0F, 0x66, 0xBC, 0xE5, 0x90, 0x7E, 0xAA, 0xA2,
> 0x6C, 0xC2, 0xC9, 0xAA, 0x99, 0x0B, 0x04,
> 
> +  0xA0, 0x6A, 0xB4, 0xC1, 0xF7, 0x55, 0x60, 0x58, 0xE3,
> 0xDE, 0x22, 0x57, 0xB1, 0x8A, 0x5C, 0xBC,
> 
> +  0xDF, 0x22, 0x8A, 0x2B, 0x04, 0x7D, 0x7A, 0x6C, 0xA3,
> 0x7E, 0x30, 0x7C, 0x30, 0x0E, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03,
> 0x02, 0x02, 0x04, 0x30, 0x16, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B,
> 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
> 
> +  0x4C, 0x09, 0x15, 0x01, 0x30, 0x12, 0x06, 0x03, 0x55,
> 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08,
> 
> +  0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30,
> 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04,
> 
> +  0x18, 0x30, 0x16, 0x80, 0x14, 0x0B, 0x8A, 0xC7, 0xA8,
> 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85,
> 
> +  0xCE, 0x5D, 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9,
> 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E,
> 
> +  0x04, 0x16, 0x04, 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40,
> 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40,
> 
> +  0x3C, 0x3E, 0x9C, 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30,
> 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x04, 0x03, 0x02, 0x03, 0x69, 0x00, 0x30, 0x66,
> 0x02, 0x31, 0x00, 0xEE, 0x78, 0xDB, 0x74,
> 
> +  0x56, 0xA3, 0xC2, 0x44, 0x25, 0x0F, 0xA1, 0x89, 0xC0,
> 0x76, 0xD1, 0xE4, 0xFE, 0xAA, 0xA4, 0xC3,
> 
> +  0x7D, 0x40, 0xE3, 0x28, 0x1B, 0x0D, 0xAB, 0x32, 0x6B,
> 0x9A, 0x60, 0x37, 0x2F, 0xB6, 0xF4, 0xCB,
> 
> +  0xEA, 0xC8, 0x65, 0xB6, 0xDC, 0x24, 0x90, 0x10, 0xFB,
> 0xD2, 0x42, 0x05, 0x02, 0x31, 0x00, 0x9E,
> 
> +  0x91, 0xF9, 0x96, 0x8A, 0x41, 0x2C, 0x5E, 0x6B, 0xBC,
> 0x36, 0x05, 0x3B, 0x50, 0x11, 0x91, 0x9A,
> 
> +  0xFA, 0x6B, 0x7F, 0x01, 0xF4, 0x6A, 0x7E, 0xCD, 0x98,
> 0x7E, 0x7D, 0xFD, 0xA8, 0xE3, 0xB2, 0x4F,
> 
> +  0x71, 0x91, 0xF5, 0xE0, 0x82, 0xA5, 0xE7, 0x5A, 0xE8,
> 0x19, 0x09, 0xF6, 0x22, 0xBE, 0xC4, 0x31,
> 
> +  0x81, 0xA3, 0x30, 0x81, 0xA0, 0x02, 0x01, 0x01, 0x30,
> 0x36, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E,
> 
> +  0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65,
> 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61,
> 
> +  0x72, 0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75,
> 0x69, 0x6E, 0x67, 0x43, 0x41, 0x02, 0x10,
> 
> +  0x3E, 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96, 0x41,
> 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB,
> 
> +  0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65,
> 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
> 
> +  0x0B, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02,
> 0x01, 0x05, 0x00, 0x04, 0x47, 0x30, 0x45,
> 
> +  0x02, 0x20, 0x4A, 0xFD, 0xAE, 0xDD, 0x5D, 0xC5, 0x86,
> 0x48, 0xDC, 0xC1, 0xC3, 0xA7, 0xE6, 0x4E,
> 
> +  0x7F, 0x8B, 0x7B, 0xAB, 0x2C, 0x60, 0xDD, 0x79, 0x4C,
> 0xF2, 0x45, 0xED, 0x7A, 0xA5, 0x24, 0xE6,
> 
> +  0x0E, 0x60, 0x02, 0x21, 0x00, 0xAD, 0xCA, 0x3C, 0x29,
> 0x2F, 0xF9, 0xB1, 0x8E, 0x58, 0x29, 0x3F,
> 
> +  0x97, 0x20, 0x03, 0x6A, 0x14, 0xDA, 0x83, 0x4A, 0x8F,
> 0x3E, 0x95, 0x37, 0xC3, 0xF0, 0x12, 0x2A,
> 
> +  0x7B, 0x24, 0x59, 0x69, 0x27,
> 
> +};
> 
> +
> 
> +//
> 
> +// This is TestSignEKUsWith3CertsInSignature.bin.p7b
> 
> +// It has one EKU in it:
> 
> +// "1.3.6.1.4.1.311.76.9.21.1"
> 
> +//
> 
> +const UINT8 TestSignEKUsWith3CertsInSignature[] =
> 
> +{
> 
> +  0x30, 0x82, 0x06, 0x65, 0x02, 0x01, 0x01, 0x31, 0x0F,
> 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
> 
> +  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
> 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
> 
> +  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x05, 0x9B,
> 0x30, 0x82, 0x01, 0xAE, 0x30, 0x82, 0x01,
> 
> +  0x53, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x3E,
> 0xEE, 0x4B, 0xFB, 0x00, 0x35, 0xC8, 0x96,
> 
> +  0x41, 0xF4, 0xF6, 0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30,
> 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30,
> 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 
> +  0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50,
> 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49,
> 
> +  0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43, 0x41, 0x30,
> 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38,
> 
> +  0x31, 0x35, 0x31, 0x37, 0x33, 0x35, 0x35, 0x30, 0x5A,
> 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31,
> 
> +  0x35, 0x31, 0x37, 0x34, 0x35, 0x35, 0x30, 0x5A, 0x30,
> 0x23, 0x31, 0x21, 0x30, 0x1F, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x03, 0x0C, 0x18, 0x54, 0x65, 0x73, 0x74,
> 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73,
> 
> +  0x69, 0x6E, 0x67, 0x4C, 0x65, 0x61, 0x66, 0x53, 0x69,
> 0x67, 0x6E, 0x65, 0x72, 0x30, 0x59, 0x30,
> 
> +  0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02,
> 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xF6,
> 0xEA, 0x5E, 0x14, 0x20, 0x6D, 0x11, 0xC0,
> 
> +  0xFD, 0xF9, 0xB9, 0xB5, 0x8F, 0xBB, 0x3E, 0x8B, 0xE8,
> 0x21, 0x21, 0x3A, 0xC2, 0xBA, 0x37, 0x24,
> 
> +  0x61, 0x14, 0x7E, 0xA8, 0x86, 0x0A, 0x5C, 0xD3, 0x5F,
> 0xA8, 0xDC, 0x3A, 0x06, 0x30, 0x53, 0xFC,
> 
> +  0x85, 0xBC, 0x60, 0x5C, 0x28, 0x07, 0xCA, 0x12, 0x40,
> 0xE8, 0x97, 0x6A, 0x63, 0x30, 0xF7, 0x37,
> 
> +  0x25, 0x76, 0x4D, 0xA9, 0x1A, 0x8C, 0x36, 0xAA, 0xA3,
> 0x6A, 0x30, 0x68, 0x30, 0x0E, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03,
> 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B,
> 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
> 
> +  0x4C, 0x09, 0x15, 0x01, 0x30, 0x1F, 0x06, 0x03, 0x55,
> 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80,
> 
> +  0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B,
> 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C,
> 
> +  0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03,
> 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14,
> 
> +  0xE8, 0x47, 0x05, 0xA2, 0x59, 0xE9, 0x89, 0x81, 0xF4,
> 0xC8, 0x0D, 0x4C, 0x0A, 0xD3, 0xD4, 0xDE,
> 
> +  0x9F, 0xA6, 0xC7, 0x79, 0x30, 0x0A, 0x06, 0x08, 0x2A,
> 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02,
> 
> +  0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x8C,
> 0x39, 0xC6, 0x6C, 0xD6, 0x8F, 0x20, 0xA5,
> 
> +  0x85, 0x97, 0x27, 0xF9, 0xB5, 0x26, 0xA2, 0xAB, 0xEC,
> 0x2E, 0x1B, 0x6F, 0x6F, 0x79, 0x9F, 0x8D,
> 
> +  0xCE, 0x9D, 0x12, 0x23, 0x5F, 0x04, 0xFA, 0xBE, 0x02,
> 0x21, 0x00, 0xC5, 0xD8, 0x49, 0xD1, 0x40,
> 
> +  0xE3, 0x2C, 0xDF, 0xC3, 0xD4, 0x11, 0xF9, 0x5E, 0x10,
> 0x8A, 0x3C, 0x4E, 0xA0, 0xD6, 0x6B, 0x8C,
> 
> +  0x0E, 0x7B, 0xF1, 0x2B, 0x20, 0x9C, 0x68, 0x53, 0x43,
> 0x4B, 0x35, 0x30, 0x82, 0x01, 0xE0, 0x30,
> 
> +  0x82, 0x01, 0x65, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02,
> 0x10, 0x79, 0x28, 0x1A, 0xE8, 0x7F, 0x21,
> 
> +  0x4F, 0xBB, 0x47, 0x2F, 0x74, 0x75, 0xE6, 0x98, 0x60,
> 0xD6, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86,
> 
> +  0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x21, 0x31,
> 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x04,
> 
> +  0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B,
> 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E,
> 
> +  0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41,
> 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30,
> 
> +  0x38, 0x31, 0x35, 0x31, 0x37, 0x33, 0x32, 0x35, 0x34,
> 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38,
> 
> +  0x31, 0x35, 0x31, 0x37, 0x34, 0x32, 0x35, 0x34, 0x5A,
> 0x30, 0x22, 0x31, 0x20, 0x30, 0x1E, 0x06,
> 
> +  0x03, 0x55, 0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73,
> 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72,
> 
> +  0x73, 0x69, 0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69,
> 0x6E, 0x67, 0x43, 0x41, 0x30, 0x59, 0x30,
> 
> +  0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02,
> 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x66,
> 0x41, 0xE6, 0x86, 0x7D, 0x5B, 0x96, 0x6C,
> 
> +  0x99, 0x2A, 0x82, 0x53, 0x58, 0xA3, 0x6F, 0x59, 0xFC,
> 0x1C, 0x9F, 0xEB, 0xBE, 0x9D, 0x53, 0xBA,
> 
> +  0x50, 0x0F, 0x66, 0xBC, 0xE5, 0x90, 0x7E, 0xAA, 0xA2,
> 0x6C, 0xC2, 0xC9, 0xAA, 0x99, 0x0B, 0x04,
> 
> +  0xA0, 0x6A, 0xB4, 0xC1, 0xF7, 0x55, 0x60, 0x58, 0xE3,
> 0xDE, 0x22, 0x57, 0xB1, 0x8A, 0x5C, 0xBC,
> 
> +  0xDF, 0x22, 0x8A, 0x2B, 0x04, 0x7D, 0x7A, 0x6C, 0xA3,
> 0x7E, 0x30, 0x7C, 0x30, 0x0E, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03,
> 0x02, 0x02, 0x04, 0x30, 0x16, 0x06, 0x03,
> 
> +  0x55, 0x1D, 0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B,
> 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37,
> 
> +  0x4C, 0x09, 0x15, 0x01, 0x30, 0x12, 0x06, 0x03, 0x55,
> 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08,
> 
> +  0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30,
> 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04,
> 
> +  0x18, 0x30, 0x16, 0x80, 0x14, 0x0B, 0x8A, 0xC7, 0xA8,
> 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85,
> 
> +  0xCE, 0x5D, 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9,
> 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E,
> 
> +  0x04, 0x16, 0x04, 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40,
> 0x41, 0xF7, 0x1B, 0xFF, 0x35, 0xD0, 0x40,
> 
> +  0x3C, 0x3E, 0x9C, 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30,
> 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x04, 0x03, 0x02, 0x03, 0x69, 0x00, 0x30, 0x66,
> 0x02, 0x31, 0x00, 0xEE, 0x78, 0xDB, 0x74,
> 
> +  0x56, 0xA3, 0xC2, 0x44, 0x25, 0x0F, 0xA1, 0x89, 0xC0,
> 0x76, 0xD1, 0xE4, 0xFE, 0xAA, 0xA4, 0xC3,
> 
> +  0x7D, 0x40, 0xE3, 0x28, 0x1B, 0x0D, 0xAB, 0x32, 0x6B,
> 0x9A, 0x60, 0x37, 0x2F, 0xB6, 0xF4, 0xCB,
> 
> +  0xEA, 0xC8, 0x65, 0xB6, 0xDC, 0x24, 0x90, 0x10, 0xFB,
> 0xD2, 0x42, 0x05, 0x02, 0x31, 0x00, 0x9E,
> 
> +  0x91, 0xF9, 0x96, 0x8A, 0x41, 0x2C, 0x5E, 0x6B, 0xBC,
> 0x36, 0x05, 0x3B, 0x50, 0x11, 0x91, 0x9A,
> 
> +  0xFA, 0x6B, 0x7F, 0x01, 0xF4, 0x6A, 0x7E, 0xCD, 0x98,
> 0x7E, 0x7D, 0xFD, 0xA8, 0xE3, 0xB2, 0x4F,
> 
> +  0x71, 0x91, 0xF5, 0xE0, 0x82, 0xA5, 0xE7, 0x5A, 0xE8,
> 0x19, 0x09, 0xF6, 0x22, 0xBE, 0xC4, 0x30,
> 
> +  0x82, 0x02, 0x01, 0x30, 0x82, 0x01, 0x62, 0xA0, 0x03,
> 0x02, 0x01, 0x02, 0x02, 0x10, 0x41, 0x02,
> 
> +  0xBA, 0xF9, 0x87, 0x65, 0x6C, 0xB8, 0x4C, 0xD9, 0xA1,
> 0x04, 0x1C, 0x46, 0x4F, 0xE4, 0x30, 0x0A,
> 
> +  0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03,
> 0x02, 0x30, 0x1D, 0x31, 0x1B, 0x30, 0x19,
> 
> +  0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x12, 0x54, 0x65,
> 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61,
> 
> +  0x72, 0x73, 0x69, 0x6E, 0x67, 0x52, 0x6F, 0x6F, 0x74,
> 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30,
> 
> +  0x38, 0x31, 0x35, 0x31, 0x37, 0x32, 0x39, 0x32, 0x39,
> 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38,
> 
> +  0x31, 0x35, 0x31, 0x37, 0x33, 0x39, 0x32, 0x39, 0x5A,
> 0x30, 0x21, 0x31, 0x1F, 0x30, 0x1D, 0x06,
> 
> +  0x03, 0x55, 0x04, 0x03, 0x0C, 0x16, 0x54, 0x65, 0x73,
> 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72,
> 
> +  0x73, 0x69, 0x6E, 0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63,
> 0x79, 0x43, 0x41, 0x30, 0x76, 0x30, 0x10,
> 
> +  0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01,
> 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22,
> 
> +  0x03, 0x62, 0x00, 0x04, 0xF9, 0xDC, 0xB9, 0x3F, 0xA8,
> 0xB5, 0x2B, 0x2E, 0xA7, 0xFC, 0x88, 0xC6,
> 
> +  0xEF, 0x9C, 0x36, 0x61, 0x3E, 0xFF, 0x8A, 0x5A, 0x52,
> 0xFF, 0x5A, 0xD0, 0x2C, 0x08, 0xD6, 0x73,
> 
> +  0x12, 0xF9, 0x62, 0x1E, 0x73, 0x76, 0x83, 0x49, 0xC8,
> 0xDE, 0xEB, 0x29, 0xA4, 0x78, 0x2A, 0xC1,
> 
> +  0x30, 0x11, 0x0B, 0x2F, 0x38, 0x00, 0xB7, 0x6B, 0x6B,
> 0x8E, 0x8C, 0x4B, 0x33, 0x09, 0xF1, 0xEA,
> 
> +  0xA4, 0x9E, 0x10, 0x4F, 0xC3, 0xBC, 0x30, 0x16, 0x1A,
> 0x8B, 0xD7, 0x9C, 0x14, 0x11, 0x4E, 0x56,
> 
> +  0x64, 0x7E, 0x51, 0xE7, 0xDA, 0x26, 0x40, 0xB0, 0xD0,
> 0xF8, 0xF2, 0xB2, 0x5D, 0x8C, 0x8B, 0x49,
> 
> +  0x0C, 0x4E, 0x58, 0xB0, 0xA3, 0x63, 0x30, 0x61, 0x30,
> 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01,
> 
> +  0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30,
> 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01,
> 
> +  0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF,
> 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23,
> 
> +  0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x04, 0xA6, 0xCD,
> 0x4D, 0xAE, 0x9C, 0x17, 0xDB, 0xC8, 0x13,
> 
> +  0x57, 0x2D, 0x72, 0x48, 0xAC, 0xBB, 0x6B, 0x1F, 0xFF,
> 0x61, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D,
> 
> +  0x0E, 0x04, 0x16, 0x04, 0x14, 0x0B, 0x8A, 0xC7, 0xA8,
> 0x53, 0x07, 0x40, 0x74, 0x75, 0x0F, 0x85,
> 
> +  0xCE, 0x5D, 0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9,
> 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48,
> 
> +  0xCE, 0x3D, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8C, 0x00,
> 0x30, 0x81, 0x88, 0x02, 0x42, 0x01, 0xB4,
> 
> +  0x75, 0x0B, 0x2F, 0x2A, 0xAA, 0x77, 0x03, 0x08, 0xD9,
> 0x95, 0x13, 0x2C, 0xE8, 0x47, 0x69, 0x97,
> 
> +  0xD1, 0x6B, 0xE0, 0x23, 0x94, 0xD5, 0x34, 0x8F, 0x80,
> 0x20, 0xE3, 0x72, 0x07, 0x7C, 0x6A, 0x52,
> 
> +  0xE6, 0xF2, 0xC7, 0x85, 0xBD, 0xB6, 0x65, 0x8F, 0x61,
> 0x73, 0xF9, 0xE7, 0x3A, 0x31, 0x46, 0xC6,
> 
> +  0xF2, 0xCE, 0xA7, 0x9E, 0xD0, 0xE2, 0xEF, 0x07, 0x59,
> 0xD0, 0xF1, 0xC4, 0xF6, 0x58, 0x9A, 0x16,
> 
> +  0x02, 0x42, 0x00, 0x86, 0xE0, 0x25, 0xC1, 0x48, 0xD0,
> 0x33, 0x30, 0x55, 0xA8, 0x60, 0x44, 0xCA,
> 
> +  0x47, 0x04, 0x93, 0x46, 0x81, 0xE9, 0x13, 0xE9, 0x67,
> 0x26, 0x23, 0x2A, 0xBD, 0xEF, 0xC4, 0xCC,
> 
> +  0x12, 0x99, 0xB3, 0x9E, 0x3D, 0x78, 0xC8, 0x42, 0x06,
> 0x40, 0x48, 0xCA, 0x3D, 0xCC, 0xD7, 0xA2,
> 
> +  0x35, 0x37, 0x76, 0x12, 0xDB, 0x9C, 0x90, 0xA4, 0xE4,
> 0x16, 0xAC, 0x5E, 0xD8, 0x04, 0xF1, 0x59,
> 
> +  0x66, 0x85, 0xE2, 0x68, 0x31, 0x81, 0xA2, 0x30, 0x81,
> 0x9F, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30,
> 
> +  0x22, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04,
> 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74,
> 
> +  0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E,
> 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E,
> 
> +  0x67, 0x43, 0x41, 0x02, 0x10, 0x3E, 0xEE, 0x4B, 0xFB,
> 0x00, 0x35, 0xC8, 0x96, 0x41, 0xF4, 0xF6,
> 
> +  0x57, 0x16, 0xAD, 0x20, 0xCB, 0x30, 0x0D, 0x06, 0x09,
> 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
> 
> +  0x02, 0x01, 0x05, 0x00, 0x30, 0x0B, 0x06, 0x07, 0x2A,
> 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x05,
> 
> +  0x00, 0x04, 0x46, 0x30, 0x44, 0x02, 0x20, 0x52, 0x90,
> 0x02, 0x9E, 0xE8, 0xBF, 0xE8, 0x7E, 0x05,
> 
> +  0x3B, 0xA3, 0x93, 0xDD, 0x6C, 0x35, 0x31, 0xA3, 0x29,
> 0x4F, 0x9A, 0x78, 0xEF, 0xD1, 0xAD, 0x07,
> 
> +  0x37, 0x2D, 0x9A, 0x81, 0xFD, 0x7D, 0xFC, 0x02, 0x20,
> 0x4C, 0x8A, 0xA4, 0xBD, 0x63, 0x7B, 0x8A,
> 
> +  0x2C, 0x9E, 0xFC, 0x2A, 0x0F, 0x91, 0xF4, 0x97, 0xB5,
> 0x3B, 0xC9, 0xD1, 0xCA, 0xEB, 0x02, 0x6A,
> 
> +  0xB6, 0xFF, 0xE1, 0x15, 0xF5, 0xA2, 0x11, 0xF4, 0xD9,
> 
> +};
> 
> +
> 
> +//
> 
> +// This signature was signed with a leaf that has no
> EKU's present in the certificate.
> 
> +//
> 
> +CONST UINT8 TestSignatureWithNoEKUsPresent[] =
> 
> +{
> 
> +  0x30, 0x82, 0x07, 0xDB, 0x02, 0x01, 0x01, 0x31, 0x0F,
> 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, 0x48,
> 
> +  0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x30,
> 0x0B, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
> 
> +  0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x06, 0x51,
> 0x30, 0x82, 0x01, 0xE0, 0x30, 0x82, 0x01,
> 
> +  0x65, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x79,
> 0x28, 0x1A, 0xE8, 0x7F, 0x21, 0x4F, 0xBB,
> 
> +  0x47, 0x2F, 0x74, 0x75, 0xE6, 0x98, 0x60, 0xD6, 0x30,
> 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 
> +  0x3D, 0x04, 0x03, 0x02, 0x30, 0x21, 0x31, 0x1F, 0x30,
> 0x1D, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 
> +  0x16, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B, 0x55, 0x50,
> 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x50,
> 
> +  0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43, 0x41, 0x30, 0x1E,
> 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, 0x31,
> 
> +  0x35, 0x31, 0x37, 0x33, 0x32, 0x35, 0x34, 0x5A, 0x17,
> 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, 0x35,
> 
> +  0x31, 0x37, 0x34, 0x32, 0x35, 0x34, 0x5A, 0x30, 0x22,
> 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55,
> 
> +  0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45,
> 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69,
> 
> +  0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67,
> 0x43, 0x41, 0x30, 0x59, 0x30, 0x13, 0x06,
> 
> +  0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06,
> 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03,
> 
> +  0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x66, 0x41, 0xE6,
> 0x86, 0x7D, 0x5B, 0x96, 0x6C, 0x99, 0x2A,
> 
> +  0x82, 0x53, 0x58, 0xA3, 0x6F, 0x59, 0xFC, 0x1C, 0x9F,
> 0xEB, 0xBE, 0x9D, 0x53, 0xBA, 0x50, 0x0F,
> 
> +  0x66, 0xBC, 0xE5, 0x90, 0x7E, 0xAA, 0xA2, 0x6C, 0xC2,
> 0xC9, 0xAA, 0x99, 0x0B, 0x04, 0xA0, 0x6A,
> 
> +  0xB4, 0xC1, 0xF7, 0x55, 0x60, 0x58, 0xE3, 0xDE, 0x22,
> 0x57, 0xB1, 0x8A, 0x5C, 0xBC, 0xDF, 0x22,
> 
> +  0x8A, 0x2B, 0x04, 0x7D, 0x7A, 0x6C, 0xA3, 0x7E, 0x30,
> 0x7C, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D,
> 
> +  0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02,
> 0x04, 0x30, 0x16, 0x06, 0x03, 0x55, 0x1D,
> 
> +  0x25, 0x04, 0x0F, 0x30, 0x0D, 0x06, 0x0B, 0x2B, 0x06,
> 0x01, 0x04, 0x01, 0x82, 0x37, 0x4C, 0x09,
> 
> +  0x15, 0x01, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13,
> 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30, 0x06,
> 
> +  0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1F, 0x06,
> 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30,
> 
> +  0x16, 0x80, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07,
> 0x40, 0x74, 0x75, 0x0F, 0x85, 0xCE, 0x5D,
> 
> +  0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x1D,
> 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16,
> 
> +  0x04, 0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7,
> 0x1B, 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E,
> 
> +  0x9C, 0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x0A, 0x06,
> 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04,
> 
> +  0x03, 0x02, 0x03, 0x69, 0x00, 0x30, 0x66, 0x02, 0x31,
> 0x00, 0xEE, 0x78, 0xDB, 0x74, 0x56, 0xA3,
> 
> +  0xC2, 0x44, 0x25, 0x0F, 0xA1, 0x89, 0xC0, 0x76, 0xD1,
> 0xE4, 0xFE, 0xAA, 0xA4, 0xC3, 0x7D, 0x40,
> 
> +  0xE3, 0x28, 0x1B, 0x0D, 0xAB, 0x32, 0x6B, 0x9A, 0x60,
> 0x37, 0x2F, 0xB6, 0xF4, 0xCB, 0xEA, 0xC8,
> 
> +  0x65, 0xB6, 0xDC, 0x24, 0x90, 0x10, 0xFB, 0xD2, 0x42,
> 0x05, 0x02, 0x31, 0x00, 0x9E, 0x91, 0xF9,
> 
> +  0x96, 0x8A, 0x41, 0x2C, 0x5E, 0x6B, 0xBC, 0x36, 0x05,
> 0x3B, 0x50, 0x11, 0x91, 0x9A, 0xFA, 0x6B,
> 
> +  0x7F, 0x01, 0xF4, 0x6A, 0x7E, 0xCD, 0x98, 0x7E, 0x7D,
> 0xFD, 0xA8, 0xE3, 0xB2, 0x4F, 0x71, 0x91,
> 
> +  0xF5, 0xE0, 0x82, 0xA5, 0xE7, 0x5A, 0xE8, 0x19, 0x09,
> 0xF6, 0x22, 0xBE, 0xC4, 0x30, 0x82, 0x02,
> 
> +  0x01, 0x30, 0x82, 0x01, 0x62, 0xA0, 0x03, 0x02, 0x01,
> 0x02, 0x02, 0x10, 0x41, 0x02, 0xBA, 0xF9,
> 
> +  0x87, 0x65, 0x6C, 0xB8, 0x4C, 0xD9, 0xA1, 0x04, 0x1C,
> 0x46, 0x4F, 0xE4, 0x30, 0x0A, 0x06, 0x08,
> 
> +  0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30,
> 0x1D, 0x31, 0x1B, 0x30, 0x19, 0x06, 0x03,
> 
> +  0x55, 0x04, 0x03, 0x0C, 0x12, 0x54, 0x65, 0x73, 0x74,
> 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73,
> 
> +  0x69, 0x6E, 0x67, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E,
> 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38, 0x31,
> 
> +  0x35, 0x31, 0x37, 0x32, 0x39, 0x32, 0x39, 0x5A, 0x17,
> 0x0D, 0x33, 0x38, 0x30, 0x38, 0x31, 0x35,
> 
> +  0x31, 0x37, 0x33, 0x39, 0x32, 0x39, 0x5A, 0x30, 0x21,
> 0x31, 0x1F, 0x30, 0x1D, 0x06, 0x03, 0x55,
> 
> +  0x04, 0x03, 0x0C, 0x16, 0x54, 0x65, 0x73, 0x74, 0x45,
> 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69,
> 
> +  0x6E, 0x67, 0x50, 0x6F, 0x6C, 0x69, 0x63, 0x79, 0x43,
> 0x41, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07,
> 
> +  0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x05,
> 0x2B, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62,
> 
> +  0x00, 0x04, 0xF9, 0xDC, 0xB9, 0x3F, 0xA8, 0xB5, 0x2B,
> 0x2E, 0xA7, 0xFC, 0x88, 0xC6, 0xEF, 0x9C,
> 
> +  0x36, 0x61, 0x3E, 0xFF, 0x8A, 0x5A, 0x52, 0xFF, 0x5A,
> 0xD0, 0x2C, 0x08, 0xD6, 0x73, 0x12, 0xF9,
> 
> +  0x62, 0x1E, 0x73, 0x76, 0x83, 0x49, 0xC8, 0xDE, 0xEB,
> 0x29, 0xA4, 0x78, 0x2A, 0xC1, 0x30, 0x11,
> 
> +  0x0B, 0x2F, 0x38, 0x00, 0xB7, 0x6B, 0x6B, 0x8E, 0x8C,
> 0x4B, 0x33, 0x09, 0xF1, 0xEA, 0xA4, 0x9E,
> 
> +  0x10, 0x4F, 0xC3, 0xBC, 0x30, 0x16, 0x1A, 0x8B, 0xD7,
> 0x9C, 0x14, 0x11, 0x4E, 0x56, 0x64, 0x7E,
> 
> +  0x51, 0xE7, 0xDA, 0x26, 0x40, 0xB0, 0xD0, 0xF8, 0xF2,
> 0xB2, 0x5D, 0x8C, 0x8B, 0x49, 0x0C, 0x4E,
> 
> +  0x58, 0xB0, 0xA3, 0x63, 0x30, 0x61, 0x30, 0x0E, 0x06,
> 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF,
> 
> +  0x04, 0x04, 0x03, 0x02, 0x02, 0x04, 0x30, 0x0F, 0x06,
> 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF,
> 
> +  0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x1F,
> 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18,
> 
> +  0x30, 0x16, 0x80, 0x14, 0x04, 0xA6, 0xCD, 0x4D, 0xAE,
> 0x9C, 0x17, 0xDB, 0xC8, 0x13, 0x57, 0x2D,
> 
> +  0x72, 0x48, 0xAC, 0xBB, 0x6B, 0x1F, 0xFF, 0x61, 0x30,
> 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04,
> 
> +  0x16, 0x04, 0x14, 0x0B, 0x8A, 0xC7, 0xA8, 0x53, 0x07,
> 0x40, 0x74, 0x75, 0x0F, 0x85, 0xCE, 0x5D,
> 
> +  0x5C, 0xC2, 0x23, 0x32, 0xC0, 0xFC, 0xC9, 0x30, 0x0A,
> 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D,
> 
> +  0x04, 0x03, 0x02, 0x03, 0x81, 0x8C, 0x00, 0x30, 0x81,
> 0x88, 0x02, 0x42, 0x01, 0xB4, 0x75, 0x0B,
> 
> +  0x2F, 0x2A, 0xAA, 0x77, 0x03, 0x08, 0xD9, 0x95, 0x13,
> 0x2C, 0xE8, 0x47, 0x69, 0x97, 0xD1, 0x6B,
> 
> +  0xE0, 0x23, 0x94, 0xD5, 0x34, 0x8F, 0x80, 0x20, 0xE3,
> 0x72, 0x07, 0x7C, 0x6A, 0x52, 0xE6, 0xF2,
> 
> +  0xC7, 0x85, 0xBD, 0xB6, 0x65, 0x8F, 0x61, 0x73, 0xF9,
> 0xE7, 0x3A, 0x31, 0x46, 0xC6, 0xF2, 0xCE,
> 
> +  0xA7, 0x9E, 0xD0, 0xE2, 0xEF, 0x07, 0x59, 0xD0, 0xF1,
> 0xC4, 0xF6, 0x58, 0x9A, 0x16, 0x02, 0x42,
> 
> +  0x00, 0x86, 0xE0, 0x25, 0xC1, 0x48, 0xD0, 0x33, 0x30,
> 0x55, 0xA8, 0x60, 0x44, 0xCA, 0x47, 0x04,
> 
> +  0x93, 0x46, 0x81, 0xE9, 0x13, 0xE9, 0x67, 0x26, 0x23,
> 0x2A, 0xBD, 0xEF, 0xC4, 0xCC, 0x12, 0x99,
> 
> +  0xB3, 0x9E, 0x3D, 0x78, 0xC8, 0x42, 0x06, 0x40, 0x48,
> 0xCA, 0x3D, 0xCC, 0xD7, 0xA2, 0x35, 0x37,
> 
> +  0x76, 0x12, 0xDB, 0x9C, 0x90, 0xA4, 0xE4, 0x16, 0xAC,
> 0x5E, 0xD8, 0x04, 0xF1, 0x59, 0x66, 0x85,
> 
> +  0xE2, 0x68, 0x30, 0x82, 0x02, 0x64, 0x30, 0x82, 0x02,
> 0x0A, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02,
> 
> +  0x10, 0x2B, 0x7B, 0xDA, 0xCD, 0x87, 0xA0, 0xFD, 0x81,
> 0x49, 0x5E, 0x0E, 0xDD, 0x4F, 0x81, 0x48,
> 
> +  0x2D, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE,
> 0x3D, 0x04, 0x03, 0x02, 0x30, 0x22, 0x31,
> 
> +  0x20, 0x30, 0x1E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C,
> 0x17, 0x54, 0x65, 0x73, 0x74, 0x45, 0x4B,
> 
> +  0x55, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6E, 0x67, 0x49,
> 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67, 0x43,
> 
> +  0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x38, 0x30, 0x38,
> 0x32, 0x33, 0x31, 0x39, 0x33, 0x30, 0x30,
> 
> +  0x32, 0x5A, 0x17, 0x0D, 0x33, 0x38, 0x30, 0x38, 0x32,
> 0x33, 0x31, 0x39, 0x34, 0x30, 0x30, 0x32,
> 
> +  0x5A, 0x30, 0x27, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03,
> 0x55, 0x04, 0x03, 0x0C, 0x1C, 0x54, 0x65,
> 
> +  0x73, 0x74, 0x45, 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73,
> 0x69, 0x6E, 0x67, 0x4E, 0x6F, 0x45, 0x4B,
> 
> +  0x55, 0x73, 0x49, 0x6E, 0x53, 0x69, 0x67, 0x6E, 0x65,
> 0x72, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D,
> 
> +  0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
> 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01,
> 
> +  0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01,
> 0x01, 0x00, 0xA5, 0x9B, 0x95, 0xF0, 0x63,
> 
> +  0x88, 0xC3, 0x74, 0x26, 0x08, 0x68, 0x25, 0xAA, 0x16,
> 0xBB, 0x2A, 0x15, 0xC1, 0xA2, 0xAF, 0x72,
> 
> +  0x06, 0x51, 0x37, 0xE1, 0x4F, 0x6D, 0x6A, 0xFC, 0x17,
> 0xCE, 0x82, 0x7B, 0x79, 0xFF, 0x2A, 0x84,
> 
> +  0x0F, 0xCB, 0xA9, 0x65, 0x70, 0xC9, 0xF9, 0xE7, 0x61,
> 0x90, 0x28, 0x03, 0x6E, 0x41, 0x25, 0xFF,
> 
> +  0xC2, 0x3A, 0x60, 0x1A, 0x42, 0x37, 0x80, 0x9F, 0x6B,
> 0x99, 0x11, 0x5A, 0x1F, 0xAE, 0x7B, 0x3F,
> 
> +  0xF3, 0x2B, 0x45, 0xDD, 0xDA, 0xC4, 0x32, 0xD7, 0xD8,
> 0xB5, 0x3D, 0x46, 0x0C, 0x8A, 0x11, 0xEE,
> 
> +  0x94, 0x8C, 0xB5, 0x69, 0xD3, 0x91, 0x4F, 0x4E, 0xE5,
> 0xBB, 0x93, 0xDD, 0x1E, 0xA7, 0x20, 0x03,
> 
> +  0xFD, 0xD6, 0x8F, 0x76, 0x91, 0x9A, 0x2B, 0x41, 0x91,
> 0xD8, 0x35, 0x7A, 0x0D, 0x80, 0xB9, 0xD4,
> 
> +  0xD2, 0x56, 0xF1, 0xF9, 0xC5, 0xE6, 0xF2, 0xAE, 0x10,
> 0x7E, 0xD7, 0x6C, 0x40, 0x86, 0x37, 0x99,
> 
> +  0x85, 0xF4, 0xCA, 0x1D, 0x6D, 0x90, 0x63, 0xF7, 0x63,
> 0xC6, 0x00, 0xA1, 0xA9, 0x79, 0x7D, 0x88,
> 
> +  0x05, 0xA2, 0x92, 0x64, 0xA7, 0x8E, 0xA8, 0x9E, 0xC3,
> 0x1F, 0x63, 0xEE, 0x6C, 0xE3, 0x9B, 0xA6,
> 
> +  0xD7, 0x9D, 0x9C, 0x9F, 0x0D, 0x7A, 0xF7, 0x00, 0x92,
> 0x16, 0xE8, 0x64, 0x36, 0x07, 0x66, 0x8E,
> 
> +  0x6E, 0x51, 0x09, 0x3F, 0x2A, 0xD6, 0x6D, 0x4E, 0xCC,
> 0x49, 0xE1, 0xC3, 0x59, 0x63, 0xDC, 0x51,
> 
> +  0xAA, 0xD1, 0xE7, 0x42, 0x2F, 0x72, 0x25, 0x46, 0x83,
> 0x7D, 0x23, 0xCE, 0xF7, 0x96, 0x2F, 0x04,
> 
> +  0xE8, 0xAE, 0xF6, 0x19, 0x6D, 0x2D, 0xB2, 0x64, 0xDB,
> 0x69, 0x33, 0x96, 0x58, 0xA0, 0x6C, 0x77,
> 
> +  0xF0, 0xD0, 0x5E, 0x36, 0xB1, 0x28, 0x89, 0x83, 0xB6,
> 0xA5, 0x13, 0x0E, 0x6B, 0x6E, 0x73, 0x2C,
> 
> +  0x6F, 0xDA, 0xF9, 0x6C, 0x11, 0x4F, 0xCC, 0xF7, 0x89,
> 0x77, 0x83, 0x02, 0x03, 0x01, 0x00, 0x01,
> 
> +  0xA3, 0x52, 0x30, 0x50, 0x30, 0x0E, 0x06, 0x03, 0x55,
> 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04,
> 
> +  0x03, 0x02, 0x01, 0x86, 0x30, 0x1F, 0x06, 0x03, 0x55,
> 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80,
> 
> +  0x14, 0xA4, 0x21, 0xA5, 0x99, 0x40, 0x41, 0xF7, 0x1B,
> 0xFF, 0x35, 0xD0, 0x40, 0x3C, 0x3E, 0x9C,
> 
> +  0x7C, 0xD1, 0xCC, 0xD1, 0xD1, 0x30, 0x1D, 0x06, 0x03,
> 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14,
> 
> +  0xB6, 0xAF, 0x0D, 0xC1, 0xBE, 0xD1, 0xE4, 0x21, 0x37,
> 0xFF, 0xAC, 0x7D, 0x2D, 0xD4, 0x51, 0x8A,
> 
> +  0x61, 0x95, 0x50, 0x7F, 0x30, 0x0A, 0x06, 0x08, 0x2A,
> 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02,
> 
> +  0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x74, 0x7D,
> 0xF5, 0xAF, 0xC3, 0xA7, 0x06, 0x99, 0x1F,
> 
> +  0x2C, 0xAF, 0x69, 0xAA, 0x40, 0x97, 0xE9, 0xF8, 0x4C,
> 0xD2, 0x71, 0x17, 0x25, 0x85, 0xB7, 0xA6,
> 
> +  0x97, 0x61, 0x89, 0x82, 0xED, 0xF0, 0xF6, 0x02, 0x21,
> 0x00, 0xA6, 0xF4, 0x59, 0x85, 0x53, 0x31,
> 
> +  0xEF, 0x6F, 0x37, 0xB6, 0x8E, 0xA2, 0xDE, 0xC3, 0xFD,
> 0xD6, 0xFB, 0x50, 0x63, 0x4E, 0xB4, 0xBB,
> 
> +  0xC1, 0xB1, 0x07, 0x82, 0x80, 0x14, 0x28, 0x6A, 0x94,
> 0x94, 0x31, 0x82, 0x01, 0x61, 0x30, 0x82,
> 
> +  0x01, 0x5D, 0x02, 0x01, 0x01, 0x30, 0x36, 0x30, 0x22,
> 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55,
> 
> +  0x04, 0x03, 0x0C, 0x17, 0x54, 0x65, 0x73, 0x74, 0x45,
> 0x4B, 0x55, 0x50, 0x61, 0x72, 0x73, 0x69,
> 
> +  0x6E, 0x67, 0x49, 0x73, 0x73, 0x75, 0x69, 0x6E, 0x67,
> 0x43, 0x41, 0x02, 0x10, 0x2B, 0x7B, 0xDA,
> 
> +  0xCD, 0x87, 0xA0, 0xFD, 0x81, 0x49, 0x5E, 0x0E, 0xDD,
> 0x4F, 0x81, 0x48, 0x2D, 0x30, 0x0D, 0x06,
> 
> +  0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02,
> 0x01, 0x05, 0x00, 0x30, 0x0D, 0x06, 0x09,
> 
> +  0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01,
> 0x05, 0x00, 0x04, 0x82, 0x01, 0x00, 0x39,
> 
> +  0xEC, 0xA8, 0x00, 0x4F, 0x7E, 0x2C, 0x3C, 0x48, 0xDF,
> 0x6F, 0x6A, 0x37, 0x69, 0xA4, 0xB1, 0xEB,
> 
> +  0x7D, 0xD2, 0x3B, 0xC5, 0xEE, 0x57, 0x1F, 0x8F, 0xCA,
> 0x60, 0x80, 0x88, 0x24, 0x29, 0xB5, 0x00,
> 
> +  0x28, 0xFF, 0x8F, 0x0A, 0x1E, 0xB0, 0x9E, 0x90, 0x09,
> 0xF1, 0x46, 0xC1, 0x53, 0xE8, 0x27, 0x29,
> 
> +  0xFA, 0xFE, 0xA3, 0x84, 0x79, 0xB2, 0x27, 0x46, 0x9B,
> 0xD8, 0x33, 0xBD, 0x8F, 0x41, 0x06, 0xEE,
> 
> +  0xD6, 0xE7, 0x49, 0xAF, 0x48, 0xD0, 0xD4, 0xF1, 0x06,
> 0xCC, 0xD3, 0x26, 0x47, 0xAE, 0x03, 0x7A,
> 
> +  0xA5, 0xAF, 0xDE, 0x7F, 0x57, 0x32, 0x51, 0x49, 0x8C,
> 0x18, 0xD2, 0x4D, 0x50, 0x27, 0xAC, 0x7C,
> 
> +  0x33, 0xB8, 0xB8, 0x1C, 0xF8, 0x0C, 0x49, 0xEB, 0xF5,
> 0xD7, 0xA0, 0x35, 0x77, 0x61, 0xC0, 0x60,
> 
> +  0xAF, 0x23, 0x8C, 0xCC, 0xB0, 0x58, 0xB3, 0x08, 0x89,
> 0x2B, 0xC0, 0x61, 0x0C, 0xA6, 0x40, 0x7A,
> 
> +  0x37, 0x6D, 0x6D, 0x44, 0xFF, 0xF1, 0xCE, 0xDE, 0x7A,
> 0x0C, 0xC4, 0x51, 0x61, 0xE6, 0x72, 0x6B,
> 
> +  0xA9, 0x6A, 0x7B, 0xCF, 0xAA, 0x9A, 0x28, 0x74, 0x87,
> 0x30, 0xBA, 0xED, 0x40, 0xF0, 0x75, 0x2B,
> 
> +  0xD7, 0xE6, 0x9F, 0xDD, 0x6B, 0xB7, 0xEA, 0x08, 0x0D,
> 0x9F, 0xA3, 0x25, 0x27, 0xB7, 0xBF, 0x41,
> 
> +  0xC2, 0x64, 0xB5, 0x6F, 0x8F, 0xB1, 0x5F, 0xE5, 0xDF,
> 0xCA, 0x16, 0x04, 0x61, 0xFF, 0x74, 0x25,
> 
> +  0xEE, 0xF6, 0x69, 0xF1, 0x7F, 0xE5, 0x97, 0x72, 0x58,
> 0xD8, 0x9F, 0xA5, 0x19, 0x32, 0x46, 0x95,
> 
> +  0x67, 0x63, 0x23, 0x54, 0x46, 0x05, 0x15, 0xC3, 0x3E,
> 0x04, 0x7E, 0x88, 0xD0, 0xB5, 0x52, 0xF0,
> 
> +  0x38, 0x3C, 0x8B, 0xD4, 0x3D, 0x9A, 0x55, 0x1B, 0x14,
> 0xE5, 0x37, 0x8D, 0xB7, 0x6C, 0x39, 0x91,
> 
> +  0x23, 0x31, 0x63, 0x89, 0x7C, 0x75, 0x02, 0x79, 0xCC,
> 0x95, 0x58, 0x99, 0x3A, 0xDB, 0xF5,
> 
> +};
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC
> ryptLib.h
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC
> ryptLib.h
> new file mode 100644
> index 000000000000..9d1cb150a113
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC
> ryptLib.h
> @@ -0,0 +1,121 @@
> +/** @file
> 
> +  Application for Cryptographic Primitives Validation.
> 
> +
> 
> +Copyright (c) 2009 - 2016, Intel Corporation. All
> rights reserved.<BR>
> 
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#ifndef __CRYPTEST_H__
> 
> +#define __CRYPTEST_H__
> 
> +
> 
> +#include <PiPei.h>
> 
> +#include <Uefi.h>
> 
> +#include <Library/UefiLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +#include <Library/UnitTestLib.h>
> 
> +#include <Library/PrintLib.h>
> 
> +#include <Library/BaseCryptLib.h>
> 
> +#include <Library/BaseLib.h>
> 
> +#include <Library/BaseMemoryLib.h>
> 
> +#include <Library/MemoryAllocationLib.h>
> 
> +//#include <UnitTestTypes.h>
> 
> +#include <Library/UnitTestLib.h>
> 
> +//#include <Library/UnitTestAssertLib.h>
> 
> +
> 
> +#define UNIT_TEST_NAME        "BaseCryptLib Unit Test"
> 
> +#define UNIT_TEST_VERSION     "1.0"
> 
> +
> 
> +typedef struct {
> 
> +  CHAR8                *Description;
> 
> +  CHAR8                *ClassName;
> 
> +  UNIT_TEST_FUNCTION     Func;
> 
> +  UNIT_TEST_PREREQUISITE PreReq;
> 
> +  UNIT_TEST_CLEANUP      CleanUp;
> 
> +  UNIT_TEST_CONTEXT      Context;
> 
> +} TEST_DESC;
> 
> +
> 
> +typedef struct {
> 
> +  CHAR8                     *Title;
> 
> +  CHAR8                     *Package;
> 
> +  UNIT_TEST_SUITE_SETUP      Sup;
> 
> +  UNIT_TEST_SUITE_TEARDOWN   Tdn;
> 
> +  UINTN                      *TestNum;
> 
> +  TEST_DESC                  *TestDesc;
> 
> +} SUITE_DESC;
> 
> +
> 
> +extern UINTN mPkcs7EkuTestNum;
> 
> +extern TEST_DESC mPkcs7EkuTest[];
> 
> +
> 
> +extern UINTN mHashTestNum;
> 
> +extern TEST_DESC mHashTest[];
> 
> +
> 
> +extern UINTN mHmacTestNum;
> 
> +extern TEST_DESC mHmacTest[];
> 
> +
> 
> +extern UINTN mBlockCipherTestNum;
> 
> +extern TEST_DESC mBlockCipherTest[];
> 
> +
> 
> +extern UINTN mRsaTestNum;
> 
> +extern TEST_DESC mRsaTest[];
> 
> +
> 
> +extern UINTN mRsaCertTestNum;
> 
> +extern TEST_DESC mRsaCertTest[];
> 
> +
> 
> +extern UINTN mPkcs7TestNum;
> 
> +extern TEST_DESC mPkcs7Test[];
> 
> +
> 
> +extern UINTN mPkcs5TestNum;
> 
> +extern TEST_DESC mPkcs5Test[];
> 
> +
> 
> +extern UINTN mAuthenticodeTestNum;
> 
> +extern TEST_DESC mAuthenticodeTest[];
> 
> +
> 
> +extern UINTN mImageTimestampTestNum;
> 
> +extern TEST_DESC mImageTimestampTest[];
> 
> +
> 
> +extern UINTN mDhTestNum;
> 
> +extern TEST_DESC mDhTest[];
> 
> +
> 
> +extern UINTN mPrngTestNum;
> 
> +extern TEST_DESC mPrngTest[];
> 
> +
> 
> +extern UINTN mOaepTestNum;
> 
> +extern TEST_DESC mOaepTest[];
> 
> +
> 
> +/** Creates a framework you can use */
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +CreateUnitTest (
> 
> +    IN     CHAR8*                     UnitTestName,
> 
> +    IN     CHAR8*                     UnitTestVersion,
> 
> +    IN OUT UNIT_TEST_FRAMEWORK_HANDLE* Framework
> 
> +);
> 
> +
> 
> +/**
> 
> +  Validate UEFI-OpenSSL DH Interfaces.
> 
> +
> 
> +  @retval  EFI_SUCCESS  Validation succeeded.
> 
> +  @retval  EFI_ABORTED  Validation failed.
> 
> +
> 
> +**/
> 
> +EFI_STATUS
> 
> +ValidateCryptDh (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +/**
> 
> +  Validate UEFI-OpenSSL pseudorandom number generator
> interfaces.
> 
> +
> 
> +  @retval  EFI_SUCCESS  Validation succeeded.
> 
> +  @retval  EFI_ABORTED  Validation failed.
> 
> +
> 
> +**/
> 
> +EFI_STATUS
> 
> +ValidateCryptPrng (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +
> 
> +
> 
> +#endif
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC
> ryptLibHost.inf
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC
> ryptLibHost.inf
> new file mode 100644
> index 000000000000..300b98e40b33
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC
> ryptLibHost.inf
> @@ -0,0 +1,46 @@
> +## @file
> 
> +# Host-based UnitTest for BaseCryptLib
> 
> +#
> 
> +# Copyright (c) Microsoft Corporation.<BR>
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION    = 0x00010005
> 
> +  BASE_NAME      = BaseCryptLibUnitTestHost
> 
> +  FILE_GUID      = 0cb84598-824b-4833-b705-bdefdcbba1d5
> 
> +  MODULE_TYPE    = HOST_APPLICATION
> 
> +  VERSION_STRING = 1.0
> 
> +
> 
> +#
> 
> +# The following information is for reference only and
> not required by the build tools.
> 
> +#
> 
> +#  VALID_ARCHITECTURES           = IA32 X64
> 
> +#
> 
> +
> 
> +[Sources]
> 
> +  UnitTestMain.c
> 
> +  BaseCryptLibUnitTests.c
> 
> +  TestBaseCryptLib.h
> 
> +  HashTests.c
> 
> +  HmacTests.c
> 
> +  BlockCipherTests.c
> 
> +  RsaTests.c
> 
> +  RsaPkcs7Tests.c
> 
> +  Pkcs5Pbkdf2Tests.c
> 
> +  AuthenticodeTests.c
> 
> +  TSTests.c
> 
> +  DhTests.c
> 
> +  RandTests.c
> 
> +  Pkcs7EkuTests.c
> 
> +  OaepEncryptTests.c
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  CryptoPkg/CryptoPkg.dec
> 
> +
> 
> +[LibraryClasses]
> 
> +  BaseLib
> 
> +  DebugLib
> 
> +  BaseCryptLib
> 
> +  UnitTestLib
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC
> ryptLibUefiShell.inf
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC
> ryptLibUefiShell.inf
> new file mode 100644
> index 000000000000..6cd4a31be2c8
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseC
> ryptLibUefiShell.inf
> @@ -0,0 +1,49 @@
> +## @file
> 
> +# BaseCryptLib UnitTest built for execution in UEFI
> Shell.
> 
> +#
> 
> +# Copyright (c) Microsoft Corporation.<BR>
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION    = 0x00010006
> 
> +  BASE_NAME      = BaseCryptLibTestUefiShell
> 
> +  FILE_GUID      = ed54ee8c-ef7a-41f2-83d5-0e0d4cd88c21
> 
> +  MODULE_TYPE    = UEFI_APPLICATION
> 
> +  VERSION_STRING = 1.0
> 
> +  ENTRY_POINT    = DxeEntryPoint
> 
> +
> 
> +#
> 
> +# The following information is for reference only and
> not required by the build tools.
> 
> +#
> 
> +#  VALID_ARCHITECTURES           = IA32 X64
> 
> +#
> 
> +
> 
> +[Sources]
> 
> +  UnitTestMain.c
> 
> +  BaseCryptLibUnitTests.c
> 
> +  TestBaseCryptLib.h
> 
> +  HashTests.c
> 
> +  HmacTests.c
> 
> +  BlockCipherTests.c
> 
> +  RsaTests.c
> 
> +  RsaPkcs7Tests.c
> 
> +  Pkcs5Pbkdf2Tests.c
> 
> +  AuthenticodeTests.c
> 
> +  TSTests.c
> 
> +  DhTests.c
> 
> +  RandTests.c
> 
> +  Pkcs7EkuTests.c
> 
> +  OaepEncryptTests.c
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  CryptoPkg/CryptoPkg.dec
> 
> +
> 
> +[LibraryClasses]
> 
> +  UefiApplicationEntryPoint
> 
> +  BaseLib
> 
> +  DebugLib
> 
> +  UnitTestLib
> 
> +  PrintLib
> 
> +  BaseCryptLib
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/ChainCreationInstructions.txt
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/ChainCreationInstructions.txt
> new file mode 100644
> index 000000000000..0ca6830516ea
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/ChainCreationInstructions.txt
> @@ -0,0 +1,92 @@
> +-------------------------------------------------------
> -------------------------
> 
> +File:           ChainCreationInstructions.txt
> 
> +
> 
> +Description:    This folder contains INI files that are
> required to generate
> 
> +                the following test cert chains. Certs
> will be copied onto the
> 
> +                file system AND MY store when they are
> generated by certreq.exe.
> 
> +
> 
> +Note that typically certreq.exe operates on INF files,
> but in this folder
> 
> +we use INI files so that our build system does not
> complain about INF's being
> 
> +in the tree, but not in the CryptoPkg.dsc file.
> 
> +
> 
> +To create your own certificates and signatures for
> testing, this file demonstrates
> 
> +how the test certificate chains and signatures were
> created.
> 
> +
> 
> +To create test signatures, run SignFirmwareWithEKUs.cmd
> (with SignTool.exe in
> 
> +your path).  You can then use your favorite BinaryToHex
> converter to convert
> 
> +the binary into a byte array that you can include in
> AllTestSignatures.h
> 
> +
> 
> +Copyright (C) Microsoft Corporation.  All Rights
> Reserved.
> 
> +-------------------------------------------------------
> -------------------------
> 
> +Cert Chain:
> 
> +
> 
> +       ------------------------------------------
> 
> +      |                                          | //
> Root of trust. ECDSA P521 curve
> 
> +      |          TestEKUParsingRoot              | //
> SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
> 
> +      |                                          | //
> CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
> 
> +       ------------------------------------------
> 
> +                         ^
> 
> +                         |
> 
> +       ------------------------------------------
> 
> +      |                                          | //
> Issues subordinate CAs. ECC P384 curve.
> 
> +      |       TestEKUParsingPolicyCA             | //
> SHA 256 Key Usage:
> 
> +      |                                          | //
> CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
> 
> +       ------------------------------------------
> 
> +                         ^
> 
> +                         |
> 
> +       ------------------------------------------
> 
> +      |                                          | //
> Issues end-entity (leaf) signers. ECC P256 curve.
> 
> +      |        TestEKUParsingIssuingCA           | //
> SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
> 
> +      |                                          | //
> Enhanced Key Usage:
> 
> +       ------------------------------------------  //
> 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
> 
> +                         ^
> 
> +                         |
> 
> +          --------------------------------------
> 
> +         /                                     /   //
> Leaf signer,  ECC P256 curve.
> 
> +        /      TestEKUParsingLeafSigner       /    //
> SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
> 
> +       /                                     /     //
> Enhanced Key usages:
> 
> +       --------------------------------------      //
> 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
> 
> +                                                   //
> 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID.
> 
> +
> 
> +
> 
> +
> 
> +
> 
> +-------------------------------------------------------
> --------------------------
> 
> +
> 
> +
> 
> +--- files required ---
> 
> +
> 
> +TestEKUParsingRoot.ini               - This certificate
> is the root CA under which all CAs live.
> 
> +TestEKUParsingPolicyCA.ini           - This policy CA
> will issue subordinate CA's with EKU constraints.
> 
> +TestEKUParsingIssuingCA.ini          - CA to issue end-
> entity leafs.
> 
> +TestEKUParsingLeafSigner.ini         - End-Entity leaf
> signer.
> 
> +TestEKUParsingLeafSignerPid12345.ini - End-Entity, with
> EKU: 1.3.6.1.4.1.311.76.9.21.1.12345.
> 
> +TestEKUParsingNoEKUsInSigner.ini     - Leaf with no
> EKU's specified.
> 
> +TestEKUParsingLeafSignerPid1.ini     - Test with naming
> files ini, to get around build complaints.
> 
> +--- Commands to execute ---
> 
> +
> 
> +certreq.exe -new
> TestEKUParsingRoot.ini
> TestEKUParsingRoot.cer
> 
> +certreq.exe -new -q -cert "TestEKUParsingRoot"
> TestEKUParsingPolicyCA.ini
> TestEKUParsingPolicyCA.cer
> 
> +certreq.exe -new -q -cert "TestEKUParsingPolicyCA"
> TestEKUParsingIssuingCA.ini
> TestEKUParsingIssuingCA.cer
> 
> +certreq.exe -new -q -cert "TestEKUParsingIssuingCA"
> TestEKUParsingLeafSigner.ini
> TestEKUParsingLeafSigner.cer
> 
> +certreq.exe -new -q -cert "TestEKUParsingIssuingCA"
> TestEKUParsingLeafSignerPid12345.ini
> TestEKUParsingLeafSignerPid12345.cer
> 
> +certreq.exe -new -q -cert "TestEKUParsingIssuingCA"
> TestEKUParsingNoEKUsInSigner.ini
> TestEKUParsingNoEKUsInSigner.cer
> 
> +certreq.exe -new -q -cert "TestEKUParsingIssuingCA"
> TestEKUParsingLeafSignerPid1.ini
> TestEKUParsingLeafSignerPid1.cer
> 
> +
> 
> +-------------------------------------------------------
> --------------------------
> 
> +
> 
> +Then start mmc->Add certificates, Local Computer/open
> Personal/Certs and export the keys into the pfx files
> below.
> 
> +Note:  You should see a little key on the top left of
> each cert icon, which means you have the private key
> 
> +       for this cert.  If you don't see it something is
> wrong.  For each cert, right-click and do all tasks,
> 
> +       export.  Yes, Export the private key.  PCKS#12
> format, include all certs in path if possible.
> 
> +
> 
> +       If we automated the call to certreq above, there
> is a PowerShell "PKI" cmdlet which has
> 
> +       an Export-PfxCertificate command.
> 
> +
> 
> +Passwords:  TestEKUParsingRoot.pfx               ==
> TestEKUParsingRoot
> 
> +            TestEKUParsingPolicyCA.pfx           ==
> TestEKUParsingPolicyCA
> 
> +            TestEKUParsingIssuingCA.pfx          ==
> TestEKUParsingIssuingCA
> 
> +            TestEKUParsingLeafSigner.pfx         ==
> TestEKUParsingLeafSigner
> 
> +            TestEKUParsingLeafSignerPid12345.pfx ==
> TestEKUParsingLeafSignerPid12345
> 
> +            TestEKUParsingNoEKUsInSigner.pfx     ==
> TestEKUParsingNoEKUsInSigner
> 
> +
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/CreateTestCerts.cmd
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/CreateTestCerts.cmd
> new file mode 100644
> index 000000000000..6d68afdab77d
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/CreateTestCerts.cmd
> @@ -0,0 +1,11 @@
> +@ECHO OFF
> 
> +REM
> 
> +REM  Use this file to create test certificates.
> 
> +REM
> 
> +call certreq.exe -new
> TestEKUParsingRoot.ini
> TestEKUParsingRoot.cer
> 
> +call certreq.exe -new -q -cert "TestEKUParsingRoot"
> TestEKUParsingPolicyCA.ini
> TestEKUParsingPolicyCA.cer
> 
> +call certreq.exe -new -q -cert "TestEKUParsingPolicyCA"
> TestEKUParsingIssuingCA.ini
> TestEKUParsingIssuingCA.cer
> 
> +call certreq.exe -new -q -cert
> "TestEKUParsingIssuingCA" TestEKUParsingLeafSigner.ini
> TestEKUParsingLeafSigner.cer
> 
> +call certreq.exe -new -q -cert
> "TestEKUParsingIssuingCA"
> TestEKUParsingLeafSignerPid12345.ini
> TestEKUParsingLeafSignerPid12345.cer
> 
> +call certreq.exe -new -q -cert
> "TestEKUParsingIssuingCA"
> TestEKUParsingNoEKUsInSigner.ini
> TestEKUParsingNoEKUsInSigner.cer
> 
> +call certreq.exe -new -q -cert
> "TestEKUParsingIssuingCA"
> TestEKUParsingLeafSignerPid1.ini
> TestEKUParsingLeafSignerPid1.cer
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/SignFirmwareWithEKUs.cmd
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/SignFirmwareWithEKUs.cmd
> new file mode 100644
> index 000000000000..ce03e33a7169
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/SignFirmwareWithEKUs.cmd
> @@ -0,0 +1,76 @@
> +@ECHO OFF
> 
> +REM   This script will use various certificates to sign
> blobs for testing purposes.
> 
> +REM
> 
> +REM
> 
> +REM   Our EKU test certificate chain:
> 
> +REM   ------------------------------------------
> 
> +REM   |                                          | //
> Root of trust. ECDSA P521 curve
> 
> +REM   |          TestEKUParsingRoot              | //
> SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
> 
> +REM   |                                          | //
> CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
> 
> +REM    ------------------------------------------
> 
> +REM                      ^
> 
> +REM                      |
> 
> +REM    ------------------------------------------
> 
> +REM   |                                          | //
> Issues subordinate CAs. ECC P384 curve.
> 
> +REM   |       TestEKUParsingPolicyCA             | //
> SHA 256 Key Usage:
> 
> +REM   |                                          | //
> CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE
> 
> +REM    ------------------------------------------
> 
> +REM                      ^
> 
> +REM                      |
> 
> +REM    ------------------------------------------
> 
> +REM   |                                          | //
> Issues end-entity (leaf) signers. ECC P256 curve.
> 
> +REM   |        TestEKUParsingIssuingCA           | //
> SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
> 
> +REM   |                                          | //
> Enhanced Key Usage:
> 
> +REM    ------------------------------------------  //
> 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
> 
> +REM                      ^
> 
> +REM                      |
> 
> +REM       --------------------------------------
> 
> +REM      /     TestEKUParsingLeafSigner &&     /   //
> Leaf signer,  ECC P256 curve.
> 
> +REM     /    TestEKUParsingLeafSignerPid12345 /    //
> SHA 256 Key Usage: CERT_DIGITAL_SIGNATURE_KEY_USAGE
> 
> +REM    /                                     /     //
> Enhanced Key usages:
> 
> +REM    --------------------------------------      //
> 1.3.6.1.4.1.311.76.9.21.1 (Surface firmware signing)
> 
> +REM                                                //
> 1.3.6.1.4.1.311.76.9.21.1.N, N == Product ID.
> 
> +REM
> 
> +REM
> 
> +REM
> 
> +REM  Dev Note:  SignTool.exe must be in your path when
> running this script.
> 
> +
> 
> +del *.p7b
> 
> +ECHO --------------------------------------------------
> -----------------
> 
> +ECHO Press any key 4 times to append time to the test
> blobs to sign.
> 
> +time >> TestSignWithOneEKUInLeafSigner.bin
> 
> +time >> TestSignWithTwoEKUsInLeafSignerPid1.bin
> 
> +time >> TestSignWithTwoEKUsInLeafSignerPid12345.bin
> 
> +time >> TestSignWithNoEKUsInLeafSigner.bin
> 
> +
> 
> +
> 
> +REM
> 
> +REM Create a signature with
> TestEKUParsingLeafSigner.cer which has one EKU in it,
> 
> +REM and add the Policy CA in the signature.
> 
> +REM
> 
> +call signtool.exe sign /fd sha256 /f
> TestEKUParsingLeafSigner.cer
> /p7 .  /u 1.3.6.1.4.1.311.76.9.21.1    /ac
> TestEKUParsingPolicyCA.cer /p7co 1.2.840.113549.1.7.1
> /p7ce DetachedSignedData /v /debug
> TestSignWithOneEKUInLeafSigner.bin
> 
> +
> 
> +REM
> 
> +REM Create a signature with two EKU's in the leaf
> signer.  (1.3.6.1.4.1.311.76.9.21.1, and
> 1.3.6.1.4.1.311.76.9.21.1.1)
> 
> +REM
> 
> +call signtool.exe sign /fd sha256 /f
> TestEKUParsingLeafSignerPid1.cer
> /p7 .  /u 1.3.6.1.4.1.311.76.9.21.1.1  /p7co
> 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug
> TestSignWithTwoEKUsInLeafSignerPid1.bin
> 
> +
> 
> +REM
> 
> +REM Create a signature with two EKUs in the leaf
> (1.3.6.1.4.1.311.76.9.21.1, and
> 1.3.6.1.4.1.311.76.9.21.1.12345)
> 
> +REM
> 
> +call signtool.exe sign /fd sha256 /f
> TestEKUParsingLeafSignerPid12345.cer
> /p7 .  /u 1.3.6.1.4.1.311.76.9.21.1.12345   /p7co
> 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug
> TestSignWithTwoEKUsInLeafSignerPid12345.bin
> 
> +
> 
> +
> 
> +REM
> 
> +REM Create a signature with a leaf that does not have
> any EKUs in the signture.
> 
> +REM
> 
> +call signtool.exe sign /fd sha256 /f
> TestEKUParsingNoEKUsInSigner.cer /p7 .  /p7co
> 1.2.840.113549.1.7.1 /p7ce DetachedSignedData /v /debug
> TestSignWithNoEKUsInLeafSigner.bin
> 
> +
> 
> +REM
> 
> +REM Rename *.p7 to *.p7b
> 
> +REM
> 
> +rename *.p7 *.p7b
> 
> +ECHO --------------------------------------------------
> -------------------------
> 
> +ECHO Now you can use your favorite "Binary To Hex"
> converter to convert the
> 
> +ECHO signatures (P7B files) to byte arrays and add them
> to AllTestSignatures.h
> 
> +ECHO --------------------------------------------------
> -------------------------
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingIssuingCA.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingIssuingCA.ini
> new file mode 100644
> index 000000000000..8576783473e9
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingIssuingCA.ini
> @@ -0,0 +1,45 @@
> +[Version]
> 
> +Signature="$Windows NT$
> 
> +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> 
> +; 2.5.29.19 == Basic Constraints for CA
> 
> +[Strings]
> 
> +szOID_BASIC_CONSTRAINTS2 = "2.5.29.19"
> 
> +
> 
> +[EnhancedKeyUsageExtension]
> 
> +OID = 1.3.6.1.4.1.311.76.9.21.1
> 
> +
> 
> +[NewRequest]
> 
> +Subject = "CN=TestEKUParsingIssuingCA"
> 
> +Exportable = true
> 
> +KeyLength = 256
> 
> +HashAlgorithm = sha256
> 
> +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE"
> 
> +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
> 
> +MachineKeySet = True
> 
> +RequestType = cert
> 
> +ValidityPeriodUnits = 20
> 
> +ValidityPeriod = Years
> 
> +ProviderName = "Microsoft Software Key Storage
> Provider"
> 
> +KeyAlgorithm = "ECDSA_P256"
> 
> +
> 
> +
> 
> +[Extensions]
> 
> +%szOID_BASIC_CONSTRAINTS2% = "{text}"
> 
> +    _continue_ = "ca=True"
> 
> +
> 
> +Critical=%szOID_BASIC_CONSTRAINTS2%
> 
> +
> 
> +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> 
> +; This extension is so the this CA is only allowed to
> 
> +; issue end-entity certs.
> 
> +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> 
> +[BasicConstraintsExtension]
> 
> +PathLength=0
> 
> +
> 
> +;
> 
> +; Surface Firmware Signing EKU
> 
> +;
> 
> +[Extensions]
> 
> +    2.5.29.37 = "{text}"
> 
> +    _continue_ = "1.3.6.1.4.1.311.76.9.21.1"
> 
> +
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingLeafSigner.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingLeafSigner.ini
> new file mode 100644
> index 000000000000..f501537343ca
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingLeafSigner.ini
> @@ -0,0 +1,25 @@
> +[Version]
> 
> +Signature="$Windows NT$
> 
> +
> 
> +[EnhancedKeyUsageExtension]
> 
> +OID = 1.3.6.1.4.1.311.76.9.21.1
> 
> +
> 
> +[NewRequest]
> 
> +Subject = "CN=TestEKUParsingLeafSigner"
> 
> +Exportable = true
> 
> +KeyLength = 256
> 
> +HashAlgorithm = sha256
> 
> +KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE"
> 
> +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
> 
> +MachineKeySet = True
> 
> +RequestType = cert
> 
> +ValidityPeriodUnits = 20
> 
> +ValidityPeriod = Years
> 
> +ProviderName = "Microsoft Software Key Storage
> Provider"
> 
> +KeyAlgorithm = "ECDSA_P256"
> 
> +
> 
> +;
> 
> +; Surface test firwmare signing EKU
> 
> +;
> 
> +[Extensions]
> 
> +    _continue_ = "1.3.6.1.4.1.311.76.9.21.1"
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingLeafSignerPid1.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingLeafSignerPid1.ini
> new file mode 100644
> index 000000000000..35aa78c493b0
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingLeafSignerPid1.ini
> @@ -0,0 +1,24 @@
> +[Version]
> 
> +Signature="$Windows NT$
> 
> +
> 
> +[EnhancedKeyUsageExtension]
> 
> +OID = 1.3.6.1.4.1.311.76.9.21.1
> 
> +OID = 1.3.6.1.4.1.311.76.9.21.1.1
> 
> +
> 
> +[NewRequest]
> 
> +Subject = "CN=TestEKUParsingLeafSignerPid1"
> 
> +Exportable = true
> 
> +KeyLength = 2048
> 
> +HashAlgorithm = sha256
> 
> +KeySpec = AT_SIGNATURE
> 
> +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE |
> CERT_DIGITAL_SIGNATURE_KEY_USAGE |
> CERT_CRL_SIGN_KEY_USAGE"
> 
> +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
> 
> +MachineKeySet = True
> 
> +RequestType = cert
> 
> +ValidityPeriodUnits = 5
> 
> +ValidityPeriod = Years
> 
> +
> 
> +[Extensions]
> 
> +    2.5.29.37 = "{text}"
> 
> +    _continue_ = "1.3.6.1.4.1.311.76.9.21.1,"
> 
> +    _continue_ = "1.3.6.1.4.1.311.76.9.21.1.1"
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingLeafSignerPid12345.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingLeafSignerPid12345.ini
> new file mode 100644
> index 000000000000..67c5741f4d26
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingLeafSignerPid12345.ini
> @@ -0,0 +1,27 @@
> +[Version]
> 
> +Signature="$Windows NT$
> 
> +
> 
> +[EnhancedKeyUsageExtension]
> 
> +OID = 1.3.6.1.4.1.311.76.9.21.1
> 
> +OID = 1.3.6.1.4.1.311.76.9.21.1.12345
> 
> +
> 
> +[NewRequest]
> 
> +Subject = "CN=TestEKUParsingLeafSignerPid12345"
> 
> +Exportable = true
> 
> +KeyLength = 2048
> 
> +HashAlgorithm = sha256
> 
> +KeySpec = AT_SIGNATURE
> 
> +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE |
> CERT_DIGITAL_SIGNATURE_KEY_USAGE |
> CERT_CRL_SIGN_KEY_USAGE"
> 
> +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
> 
> +MachineKeySet = True
> 
> +RequestType = cert
> 
> +ValidityPeriodUnits = 5
> 
> +ValidityPeriod = Years
> 
> +
> 
> +[Extensions]
> 
> +    2.5.29.37 = "{text}"
> 
> +    _continue_ = "1.3.6.1.4.1.311.76.9.21.1,"
> 
> +    _continue_ = "1.3.6.1.4.1.311.76.9.21.1.12345"
> 
> +
> 
> +
> 
> +
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingNoEKUsInSigner.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingNoEKUsInSigner.ini
> new file mode 100644
> index 000000000000..60743b02a94b
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingNoEKUsInSigner.ini
> @@ -0,0 +1,16 @@
> +[Version]
> 
> +Signature="$Windows NT$
> 
> +
> 
> +
> 
> +[NewRequest]
> 
> +Subject = "CN=TestEKUParsingNoEKUsInSigner"
> 
> +Exportable = true
> 
> +KeyLength = 2048
> 
> +HashAlgorithm = sha256
> 
> +KeySpec = AT_SIGNATURE
> 
> +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE |
> CERT_DIGITAL_SIGNATURE_KEY_USAGE |
> CERT_CRL_SIGN_KEY_USAGE"
> 
> +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
> 
> +MachineKeySet = True
> 
> +RequestType = cert
> 
> +ValidityPeriodUnits = 20
> 
> +ValidityPeriod = Years
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingPolicyCA.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingPolicyCA.ini
> new file mode 100644
> index 000000000000..2ccda66596bc
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingPolicyCA.ini
> @@ -0,0 +1,28 @@
> +[Version]
> 
> +Signature="$Windows NT$
> 
> +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> 
> +; 2.5.29.19 == Basic Constraints for CA
> 
> +[Strings]
> 
> +szOID_BASIC_CONSTRAINTS2 = "2.5.29.19"
> 
> +
> 
> +[NewRequest]
> 
> +Subject = "CN=TestEKUParsingPolicyCA"
> 
> +Exportable = true
> 
> +KeyLength = 384
> 
> +HashAlgorithm = sha256
> 
> +KeyUsage = "CERT_KEY_CERT_SIGN_KEY_USAGE"
> 
> +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
> 
> +MachineKeySet = True
> 
> +RequestType = cert
> 
> +ValidityPeriodUnits = 20
> 
> +ValidityPeriod = Years
> 
> +ProviderName = "Microsoft Software Key Storage
> Provider"
> 
> +KeyAlgorithm = "ECDSA_P384"
> 
> +
> 
> +
> 
> +[Extensions]
> 
> +%szOID_BASIC_CONSTRAINTS2% = "{text}"
> 
> +    _continue_ = "ca=True"
> 
> +
> 
> +Critical=%szOID_BASIC_CONSTRAINTS2%
> 
> +
> 
> diff --git
> a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingRoot.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingRoot.ini
> new file mode 100644
> index 000000000000..d8cd7d1f82a3
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCe
> rts/TestEKUParsingRoot.ini
> @@ -0,0 +1,28 @@
> +[Version]
> 
> +Signature="$Windows NT$
> 
> +
> 
> +[Strings]
> 
> +szOID_BASIC_CONSTRAINTS2 = "2.5.29.19"
> 
> +
> 
> +[NewRequest]
> 
> +Subject = "CN=TestEKUParsingRoot"
> 
> +Exportable = true
> 
> +KeyLength = 521
> 
> +HashAlgorithm = sha256
> 
> +KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE |
> CERT_KEY_CERT_SIGN_KEY_USAGE | CERT_CRL_SIGN_KEY_USAGE"
> 
> +KeyUsageProperty = "NCRYPT_ALLOW_SIGNING_FLAG"
> 
> +MachineKeySet = True
> 
> +RequestType = cert
> 
> +ValidityPeriodUnits = 30
> 
> +ValidityPeriod = Years
> 
> +ProviderName = "Microsoft Software Key Storage
> Provider"
> 
> +KeyAlgorithm = ECDSA_P521
> 
> +
> 
> +
> 
> +
> 
> +
> 
> +[Extensions]
> 
> +%szOID_BASIC_CONSTRAINTS2% = "{text}"
> 
> +    _continue_ = "ca=True"
> 
> +
> 
> +Critical=%szOID_BASIC_CONSTRAINTS2%
> 
> --
> 2.27.0.windows.1
> 
> 
> -=-=-=-=-=-=
> Groups.io Links: You receive all messages sent to this
> group.
> 
> View/Reply Online (#62560):
> https://edk2.groups.io/g/devel/message/62560
> Mute This Topic: https://groups.io/mt/75505002/1643496
> Group Owner: devel+owner@edk2.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub
> [michael.d.kinney@intel.com]
> -=-=-=-=-=-=


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

* Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)
  2020-07-15  2:52   ` [edk2-devel] " Michael D Kinney
@ 2020-07-15 18:16     ` matthewfcarlson
  2020-07-15 19:03       ` Michael D Kinney
  0 siblings, 1 reply; 10+ messages in thread
From: matthewfcarlson @ 2020-07-15 18:16 UTC (permalink / raw)
  To: Kinney, Michael D; +Cc: devel@edk2.groups.io, Wang, Jian J, Lu, XiaoyuX

[-- Attachment #1: Type: text/plain, Size: 2149 bytes --]

Hey Mike,

1. I'll move it for v4.
2. I'll remove that, thanks!
3. I'll fix that as well, good spot.
4. It's mostly the same except for the different CrtWrappers
5. We need a host-specific CrtWrapper since the regular one has a bunch of
conflicts with regular C98, but there are a few functions that since we're
building no std mode of OpenSSL we still need to provide.
6. That would be my guess- this is largely based on the edk2-staging HBFA
branch and I've had to reverse engineer some of the steps for
generating the test data. I fixed the instructions.

-Matthew Carlson


On Tue, Jul 14, 2020 at 7:53 PM Kinney, Michael D <
michael.d.kinney@intel.com> wrote:

> Hi Matt,
>
> I think the BaseCryptLib unit tests may need some more work.
>
> 1) The DSC file for host based tests is in the wrong directory.
>    It should be in CryptoPkg/Test to match the MdePkg, MdeModulePkg
>    and UnitTestFrameworkPkg location.
>
> 2) CryptoPkg/CryptoPkg.dsc includes a reference to the host based
>    library UnitTestHostBaseCryptLib.inf.  This should only be
>    listed in the host based DSC file.
>
> 3) CryptoPkg\Library\BaseCryptLib\UnitTestHostBaseCryptLib.inf
>    This file appears to only be for host based tests, but it
>    lists compatibility with DXE_DRIVER DXE_CORE UEFI_APPLICATION
> UEFI_DRIVER
>    and does not list HOST_APPLICATION as expected.
>
> 4) Why do we need a new lib instance of the BaseCryptLib for
>    host based unit testing.  I would think we would want to perform
>    unit tests on the BaseCryptLib instances that would actually be
>    used in FW components.  Can we update the unit tests to test
>    the services provided in the Base, Pei, Runtime, and Smm
>    instances of the BaseCryptLib?
>
> 5) Why do we need a host based specific version of the CrtWrapper,
>    UnitTestHostCrtWrapper.c?
>
> 6) The file CryptoPkg/Test/UnitTest/Librray/BaseCryptLib/TestEKUCerts/
>    ChainCreationInstructions.txt makes reference to a bintohex tool
>    and putting the results in a file called AllTestSignatures.h.
>    But I do not see this file in the patch.  Are these instructions
>    out of date?
>
> Thanks,
>
> Mike

[-- Attachment #2: Type: text/html, Size: 2849 bytes --]

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

* Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)
  2020-07-15 18:16     ` matthewfcarlson
@ 2020-07-15 19:03       ` Michael D Kinney
  2020-07-15 23:31         ` Matthew Carlson
  0 siblings, 1 reply; 10+ messages in thread
From: Michael D Kinney @ 2020-07-15 19:03 UTC (permalink / raw)
  To: Matthew Carlson, Kinney, Michael D
  Cc: devel@edk2.groups.io, Wang, Jian J, Lu, XiaoyuX

[-- Attachment #1: Type: text/plain, Size: 3328 bytes --]

Matt,

For (4) and (5) I think I see the issue.  Host based unit tests always link against the standard C lib for the host OS env and
those are in conflict with some if the wrappers that are provided to make OpenSSL work in an EDK II FW build env.

So the approach to unit testing BaseCryptLib is not to test the actually lib instances used in FW, but to instead test the
source code of the BaseCryptLib that is used by the FW specific instances.  There is a small chance of some differences
that may not be caught, but we can get really good unit test coverage for the source code that is identical in both host
and FW instances.  If this is a correct assessment, you may want to add some of this information to the INF file header of
and source file headers for the unit tests.

Thanks,

Mike

From: Matthew Carlson <matthewfcarlson@gmail.com>
Sent: Wednesday, July 15, 2020 11:16 AM
To: Kinney, Michael D <michael.d.kinney@intel.com>
Cc: devel@edk2.groups.io; Wang, Jian J <jian.j.wang@intel.com>; Lu, XiaoyuX <xiaoyux.lu@intel.com>
Subject: Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)

Hey Mike,

1. I'll move it for v4.
2. I'll remove that, thanks!
3. I'll fix that as well, good spot.
4. It's mostly the same except for the different CrtWrappers
5. We need a host-specific CrtWrapper since the regular one has a bunch of conflicts with regular C98, but there are a few functions that since we're building no std mode of OpenSSL we still need to provide.
6. That would be my guess- this is largely based on the edk2-staging HBFA branch and I've had to reverse engineer some of the steps for generating the test data. I fixed the instructions.

-Matthew Carlson


On Tue, Jul 14, 2020 at 7:53 PM Kinney, Michael D <michael.d.kinney@intel.com<mailto:michael.d.kinney@intel.com>> wrote:
Hi Matt,

I think the BaseCryptLib unit tests may need some more work.

1) The DSC file for host based tests is in the wrong directory.
   It should be in CryptoPkg/Test to match the MdePkg, MdeModulePkg
   and UnitTestFrameworkPkg location.

2) CryptoPkg/CryptoPkg.dsc includes a reference to the host based
   library UnitTestHostBaseCryptLib.inf.  This should only be
   listed in the host based DSC file.

3) CryptoPkg\Library\BaseCryptLib\UnitTestHostBaseCryptLib.inf
   This file appears to only be for host based tests, but it
   lists compatibility with DXE_DRIVER DXE_CORE UEFI_APPLICATION UEFI_DRIVER
   and does not list HOST_APPLICATION as expected.

4) Why do we need a new lib instance of the BaseCryptLib for
   host based unit testing.  I would think we would want to perform
   unit tests on the BaseCryptLib instances that would actually be
   used in FW components.  Can we update the unit tests to test
   the services provided in the Base, Pei, Runtime, and Smm
   instances of the BaseCryptLib?

5) Why do we need a host based specific version of the CrtWrapper,
   UnitTestHostCrtWrapper.c?

6) The file CryptoPkg/Test/UnitTest/Librray/BaseCryptLib/TestEKUCerts/
   ChainCreationInstructions.txt makes reference to a bintohex tool
   and putting the results in a file called AllTestSignatures.h.
   But I do not see this file in the patch.  Are these instructions
   out of date?

Thanks,

Mike

[-- Attachment #2: Type: text/html, Size: 45341 bytes --]

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

* Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)
  2020-07-15 19:03       ` Michael D Kinney
@ 2020-07-15 23:31         ` Matthew Carlson
  0 siblings, 0 replies; 10+ messages in thread
From: Matthew Carlson @ 2020-07-15 23:31 UTC (permalink / raw)
  To: Kinney, Michael D; +Cc: devel@edk2.groups.io, Wang, Jian J, Lu, XiaoyuX

[-- Attachment #1: Type: text/plain, Size: 3872 bytes --]

You hit the nail on the head. I think it's a reasonable limitation to not
test the CrtWrapper functions. Our goal is to test the crypto functions and
I think the current tests do a decent job of that. The idea of adding some
of these limitations to the inf and header files could be useful, I'll do a
v5 and add it in.

-Matthew Carlson


On Wed, Jul 15, 2020 at 12:03 PM Kinney, Michael D <
michael.d.kinney@intel.com> wrote:

> Matt,
>
>
>
> For (4) and (5) I think I see the issue.  Host based unit tests always
> link against the standard C lib for the host OS env and
>
> those are in conflict with some if the wrappers that are provided to make
> OpenSSL work in an EDK II FW build env.
>
>
>
> So the approach to unit testing BaseCryptLib is not to test the actually
> lib instances used in FW, but to instead test the
>
> source code of the BaseCryptLib that is used by the FW specific instances.
> There is a small chance of some differences
>
> that may not be caught, but we can get really good unit test coverage for
> the source code that is identical in both host
>
> and FW instances.  If this is a correct assessment, you may want to add
> some of this information to the INF file header of
>
> and source file headers for the unit tests.
>
>
>
> Thanks,
>
>
>
> Mike
>
>
>
> *From:* Matthew Carlson <matthewfcarlson@gmail.com>
> *Sent:* Wednesday, July 15, 2020 11:16 AM
> *To:* Kinney, Michael D <michael.d.kinney@intel.com>
> *Cc:* devel@edk2.groups.io; Wang, Jian J <jian.j.wang@intel.com>; Lu,
> XiaoyuX <xiaoyux.lu@intel.com>
> *Subject:* Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add
> unit tests (Host and Shell based)
>
>
>
> Hey Mike,
>
>
>
> 1. I'll move it for v4.
>
> 2. I'll remove that, thanks!
>
> 3. I'll fix that as well, good spot.
>
> 4. It's mostly the same except for the different CrtWrappers
>
> 5. We need a host-specific CrtWrapper since the regular one has a bunch of
> conflicts with regular C98, but there are a few functions that since we're
> building no std mode of OpenSSL we still need to provide.
>
> 6. That would be my guess- this is largely based on the edk2-staging HBFA
> branch and I've had to reverse engineer some of the steps for
> generating the test data. I fixed the instructions.
>
>
> -Matthew Carlson
>
>
>
>
>
> On Tue, Jul 14, 2020 at 7:53 PM Kinney, Michael D <
> michael.d.kinney@intel.com> wrote:
>
> Hi Matt,
>
> I think the BaseCryptLib unit tests may need some more work.
>
> 1) The DSC file for host based tests is in the wrong directory.
>    It should be in CryptoPkg/Test to match the MdePkg, MdeModulePkg
>    and UnitTestFrameworkPkg location.
>
> 2) CryptoPkg/CryptoPkg.dsc includes a reference to the host based
>    library UnitTestHostBaseCryptLib.inf.  This should only be
>    listed in the host based DSC file.
>
> 3) CryptoPkg\Library\BaseCryptLib\UnitTestHostBaseCryptLib.inf
>    This file appears to only be for host based tests, but it
>    lists compatibility with DXE_DRIVER DXE_CORE UEFI_APPLICATION
> UEFI_DRIVER
>    and does not list HOST_APPLICATION as expected.
>
> 4) Why do we need a new lib instance of the BaseCryptLib for
>    host based unit testing.  I would think we would want to perform
>    unit tests on the BaseCryptLib instances that would actually be
>    used in FW components.  Can we update the unit tests to test
>    the services provided in the Base, Pei, Runtime, and Smm
>    instances of the BaseCryptLib?
>
> 5) Why do we need a host based specific version of the CrtWrapper,
>    UnitTestHostCrtWrapper.c?
>
> 6) The file CryptoPkg/Test/UnitTest/Librray/BaseCryptLib/TestEKUCerts/
>    ChainCreationInstructions.txt makes reference to a bintohex tool
>    and putting the results in a file called AllTestSignatures.h.
>    But I do not see this file in the patch.  Are these instructions
>    out of date?
>
> Thanks,
>
> Mike
>
>

[-- Attachment #2: Type: text/html, Size: 7288 bytes --]

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

end of thread, other threads:[~2020-07-15 23:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-07-14 18:23 [PATCH v3 0/3] Add Unit Tests for BaseCryptLib to CryptoPkg matthewfcarlson
2020-07-14 18:23 ` [PATCH v3 1/3] UnitTestFrameworkPkg : BaseTimerLibPosix: Adds a host-based timer Lib matthewfcarlson
2020-07-15  2:38   ` Michael D Kinney
2020-07-14 18:23 ` [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) matthewfcarlson
2020-07-15  2:52   ` [edk2-devel] " Michael D Kinney
2020-07-15 18:16     ` matthewfcarlson
2020-07-15 19:03       ` Michael D Kinney
2020-07-15 23:31         ` Matthew Carlson
2020-07-14 18:23 ` [PATCH v3 3/3] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg matthewfcarlson
2020-07-15  2:39   ` Michael D Kinney

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