From: "Yao, Jiewen" <jiewen.yao@intel.com>
To: "matthewfcarlson@gmail.com" <matthewfcarlson@gmail.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Wang, Jian J" <jian.j.wang@intel.com>,
"Lu, XiaoyuX" <xiaoyux.lu@intel.com>,
"Jiang, Guomin" <guomin.jiang@intel.com>
Subject: Re: [PATCH v6 1/2] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based)
Date: Tue, 13 Oct 2020 00:34:07 +0000 [thread overview]
Message-ID: <CY4PR11MB128866DBDBADB101157467848C040@CY4PR11MB1288.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20201008223747.151-2-matthewfcarlson@gmail.com>
I like this. Thanks to contribute to the unit test zoo.
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
> -----Original Message-----
> From: matthewfcarlson@gmail.com <matthewfcarlson@gmail.com>
> Sent: Friday, October 9, 2020 6:38 AM
> To: devel@edk2.groups.io
> Cc: Wang, Jian J <jian.j.wang@intel.com>; Lu, XiaoyuX <xiaoyux.lu@intel.com>;
> Yao, Jiewen <jiewen.yao@intel.com>; Jiang, Guomin <guomin.jiang@intel.com>;
> Matthew Carlson <matthewfcarlson@gmail.com>
> Subject: [PATCH v6 1/2] 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.
>
> In addition, this also adds a UnitTestHostCrtWrapper.c file, which provides
> some of the functionality not provided by the default host based unit test
> system that OpenSSL expects. This is used by UnitTestHostBaseCryptLib, a
> version of the BaseCryptLib meant specifically for host based unit testing.
>
> Cc: Jian J Wang <jian.j.wang@intel.com>
> Cc: Xiaoyu Lu <xiaoyux.lu@intel.com>
> Cc: Jiewen Yao <jiewen.yao@intel.com>
> Cc: Guomin Jiang <guomin.jiang@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/CryptoPkg.ci.yaml | 8 +
> CryptoPkg/CryptoPkg.dsc | 23 +
> CryptoPkg/Library/BaseCryptLib/UnitTestHostBaseCryptLib.inf
> | 90 ++
> CryptoPkg/Test/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/TestBaseCryptLibShell.inf
> | 49 +
>
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationInst
> ructions.txt | 92 ++
>
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/CreateTestCerts.c
> md | 11 +
>
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareWith
> EKUs.cmd | 76 ++
>
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingIss
> uingCA.ini | 45 +
>
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLe
> afSigner.ini | 25 +
>
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLe
> afSignerPid1.ini | 24 +
>
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingLe
> afSignerPid12345.ini | 27 +
>
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingN
> oEKUsInSigner.ini | 16 +
>
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingPo
> licyCA.ini | 28 +
>
> CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsingRo
> ot.ini | 28 +
> 33 files changed, 5569 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/CryptoPkg.ci.yaml b/CryptoPkg/CryptoPkg.ci.yaml
> index 2ade777aadc5..5d7c340ae504 100644
> --- a/CryptoPkg/CryptoPkg.ci.yaml
> +++ b/CryptoPkg/CryptoPkg.ci.yaml
> @@ -19,6 +19,10 @@
> ## Both file path and directory path are accepted.
>
> "IgnoreFiles": [
>
> "Library/OpensslLib/openssl",
>
> + # The unit testing folder is not to be checked
>
> + "Test/UnitTest",
>
> + # This has OpenSSL interfaces that aren't UEFI spec compliant
>
> + "Library/BaseCryptLib/SysCall/UnitTestHostCrtWrapper.c",
>
> # this has OpenSSL interfaces that aren't UEFI spec compliant
>
> "Library/OpensslLib/rand_pool.c"
>
> ]
>
> @@ -26,6 +30,10 @@
> "CompilerPlugin": {
>
> "DscPath": "CryptoPkg.dsc"
>
> },
>
> + ## options defined .pytool/Plugin/HostUnitTestCompilerPlugin
>
> + "HostUnitTestCompilerPlugin": {
>
> + "DscPath": "Test/CryptoPkgHostUnitTest.dsc"
>
> + },
>
> "CharEncodingCheck": {
>
> "IgnoreFiles": []
>
> },
>
> diff --git a/CryptoPkg/CryptoPkg.dsc b/CryptoPkg/CryptoPkg.dsc
> index 0490eeb7e22f..7e51f6fac525 100644
> --- a/CryptoPkg/CryptoPkg.dsc
> +++ b/CryptoPkg/CryptoPkg.dsc
> @@ -224,6 +224,29 @@
> # generated for it, but the binary will not be put into any firmware volume.
>
> #
>
>
> #################################################################
> ##################################
>
> +[Components]
>
> + CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
>
> + CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibShell.inf {
>
> + <LibraryClasses>
>
> + PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf
>
> +
> UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoin
> t.inf
>
> +
> UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiAppli
> cationEntryPoint.inf
>
> +
>
> + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
>
> + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
>
> + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
>
> +
> MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryA
> llocationLib.inf
>
> + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
>
> + PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
>
> +
> PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLib
> Null.inf
>
> + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
>
> +
> UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootS
> ervicesTableLib.inf
>
> +
>
> + UnitTestLib|UnitTestFrameworkPkg/Library/UnitTestLib/UnitTestLib.inf
>
> +
> UnitTestPersistenceLib|UnitTestFrameworkPkg/Library/UnitTestPersistenceLibN
> ull/UnitTestPersistenceLibNull.inf
>
> +
> UnitTestResultReportLib|UnitTestFrameworkPkg/Library/UnitTestResultReportL
> ib/UnitTestResultReportLibDebugLib.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..db506c32f724
> --- /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|HOST_APPLICATION
>
> +
>
> +#
>
> +# 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/CryptoPkgHostUnitTest.dsc
> b/CryptoPkg/Test/CryptoPkgHostUnitTest.dsc
> new file mode 100644
> index 000000000000..d8605176e697
> --- /dev/null
> +++ b/CryptoPkg/Test/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/TestBaseCryptLibShell.inf
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibShell.inf
> new file mode 100644
> index 000000000000..d5e7e0d01446
> --- /dev/null
> +++ b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibShell.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 = BaseCryptLibUnitTestShell
>
> + 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/ChainCreationIn
> structions.txt
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationIn
> structions.txt
> new file mode 100644
> index 000000000000..98dbc464f2da
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/ChainCreationIn
> structions.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 unit tests.
>
> +
>
> +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/SignFirmwareW
> ithEKUs.cmd
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareW
> ithEKUs.cmd
> new file mode 100644
> index 000000000000..ce03e33a7169
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/SignFirmwareW
> ithEKUs.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/TestEKUParsing
> IssuingCA.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> IssuingCA.ini
> new file mode 100644
> index 000000000000..8576783473e9
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> IssuingCA.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/TestEKUParsing
> LeafSigner.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> LeafSigner.ini
> new file mode 100644
> index 000000000000..f501537343ca
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> LeafSigner.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/TestEKUParsing
> LeafSignerPid1.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> LeafSignerPid1.ini
> new file mode 100644
> index 000000000000..35aa78c493b0
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> LeafSignerPid1.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/TestEKUParsing
> LeafSignerPid12345.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> LeafSignerPid12345.ini
> new file mode 100644
> index 000000000000..67c5741f4d26
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> LeafSignerPid12345.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/TestEKUParsing
> NoEKUsInSigner.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> NoEKUsInSigner.ini
> new file mode 100644
> index 000000000000..60743b02a94b
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> NoEKUsInSigner.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/TestEKUParsing
> PolicyCA.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> PolicyCA.ini
> new file mode 100644
> index 000000000000..2ccda66596bc
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> PolicyCA.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/TestEKUParsing
> Root.ini
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> Root.ini
> new file mode 100644
> index 000000000000..d8cd7d1f82a3
> --- /dev/null
> +++
> b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestEKUCerts/TestEKUParsing
> Root.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.28.0.vfs.0.0
next prev parent reply other threads:[~2020-10-13 0:34 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-08 22:37 [PATCH v6 0/2] Add Unit Tests for BaseCryptLib to CryptoPkg Matthew Carlson
2020-10-08 22:37 ` [PATCH v6 1/2] CryptoPkg: BaseCryptLib: Add unit tests (Host and Shell based) Matthew Carlson
2020-10-13 0:34 ` Yao, Jiewen [this message]
2020-10-08 22:37 ` [PATCH v6 2/2] AzurePipelines : Pr Gate: Turn on HBUT for CryptoPkg Matthew Carlson
2020-10-18 0:54 ` [PATCH v6 0/2] Add Unit Tests for BaseCryptLib to CryptoPkg Yao, Jiewen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CY4PR11MB128866DBDBADB101157467848C040@CY4PR11MB1288.namprd11.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox