[edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)

matthewfcarlson@gmail.com posted 3 patches 5 years, 6 months ago
There is a newer version of this series
[edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)
Posted by matthewfcarlson@gmail.com 5 years, 6 months ago
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


-=-=-=-=-=-=-=-=-=-=-=-
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/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)
Posted by Michael D Kinney 5 years, 6 months ago
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]
> -=-=-=-=-=-=


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#62575): https://edk2.groups.io/g/devel/message/62575
Mute This Topic: https://groups.io/mt/75505002/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)
Posted by Matthew Carlson 5 years, 6 months ago
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

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#62637): https://edk2.groups.io/g/devel/message/62637
Mute This Topic: https://groups.io/mt/75505002/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)
Posted by Michael D Kinney 5 years, 6 months ago
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

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#62638): https://edk2.groups.io/g/devel/message/62638
Mute This Topic: https://groups.io/mt/75505002/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [PATCH v3 2/3] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)
Posted by Matthew Carlson 5 years, 6 months ago
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
>
>

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#62645): https://edk2.groups.io/g/devel/message/62645
Mute This Topic: https://groups.io/mt/75505002/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-